[gem5-users] Getting single cache line from multiple channels of HBM

2019-04-02 Thread Nitish Srivastava
Hi,

I have a streaming application which reads two arrays A and B sequentially
from the memory. I am trying to use HBM memory model (HBM_1000_4H_1x128) in
gem5 with 8 channels (without ruby). Since there are 8 channels and each
can provide 16 GBps, I want to achieve 8x16 = 128 GBps while reading a
single cache line from memory. I guess this is only possible when the lower
address bits are mapped to different channels? Out of the three address
mappings “RoRaBaChCo”, “RoRaBaCoCh” and “RoCoRaBaCh” supported in gem5 only
“RoRaBaCoCh” and “RoCoRaBaCh” allow the channel bits to be at LSB
positions. However, in dram_ctrl.cc in DRAMCtrl::init() there is an
assertion which ensures that an entire cache line is mapped to a single
channel which is preventing me to map a single cache line to multiple
channels.

if (system()->cacheLineSize() > range.granularity()) {
   fatal("Channel interleaving of %s must be at least as large "
"as the cache line size\n", name());
}

Is there a way I can achieve 128 GBps for this streaming application? Let
me know if you have suggestions. I tried running for different settings and
memory configurations but the achieved bandwidth is much lower than
128GBps. I also integrated the changes as mentioned in
https://www.mail-archive.com/gem5-users@gem5.org/msg16420.html but it
didn’t help either.

Thanks,
Nitish
___
gem5-users mailing list
gem5-users@gem5.org
http://m5sim.org/cgi-bin/mailman/listinfo/gem5-users

[gem5-users] m5threads compile error

2019-04-02 Thread 조해윤
Dear. all

I'm trying to compile m5threads.

At the m5threads directory, when I run the command
gcc -static -c pthread.c -o pthread.o

the error occurs like below.

pthread.c: In function ‘pthread_create’:
pthread.c:256:3: warning: implicit declaration of function ‘clone’; did you
mean ‘close’? [-Wimplicit-function-declaration]
   clone(__pthread_trampoline, tcb->stack_start_addr,
CLONE_VM|CLONE_FS|CLONE_FILES|CLONE_SIGHAND|CLONE_THREAD, tcb);
   ^
   close
In file included from pthread.c:49:0:
pthread.c: In function ‘pthread_rwlock_init’:
pthread_defs.h:102:73: error: ‘struct __pthread_rwlock_arch_t’ has no
member named ‘__lock’
 efine PTHREAD_RWLOCK_T_LOCK(rwlock)  (*(volatile
int*)(>__data.__lock))
   ^
pthread.c:380:5: note: in expansion of macro ‘PTHREAD_RWLOCK_T_LOCK’
 PTHREAD_RWLOCK_T_LOCK(lock) = 0; // used only with spin_lock, so we
know to initilize to zero
 ^
pthread_defs.h:103:77: error: ‘struct __pthread_rwlock_arch_t’ has no
member named ‘__nr_readers’; did you mean ‘__readers’?
 PTHREAD_RWLOCK_T_READERS(rwlock)  (*(volatile
int*)(>__data.__nr_readers))
 ^
pthread.c:381:5: note: in expansion of macro ‘PTHREAD_RWLOCK_T_READERS’
 PTHREAD_RWLOCK_T_READERS(lock) = 0;
 ^~~~
pthread_defs.h:104:76: error: ‘struct __pthread_rwlock_arch_t’ has no
member named ‘__writer’; did you mean ‘__writers’?
 e PTHREAD_RWLOCK_T_WRITER(rwlock)  (*(volatile
int*)(>__data.__writer))
  ^
pthread.c:382:5: note: in expansion of macro ‘PTHREAD_RWLOCK_T_WRITER’
 PTHREAD_RWLOCK_T_WRITER(lock) = -1; // -1 means no one owns the write
lock
 ^~~
pthread.c: In function ‘pthread_rwlock_rdlock’:
pthread_defs.h:104:76: error: ‘struct __pthread_rwlock_arch_t’ has no
member named ‘__writer’; did you mean ‘__writers’?
 e PTHREAD_RWLOCK_T_WRITER(rwlock)  (*(volatile
int*)(>__data.__writer))
  ^
pthread.c:398:32: note: in expansion of macro ‘PTHREAD_RWLOCK_T_WRITER’
 pthread_t writer = PTHREAD_RWLOCK_T_WRITER(lock);
^~~
pthread_defs.h:102:73: error: ‘struct __pthread_rwlock_arch_t’ has no
member named ‘__lock’
 efine PTHREAD_RWLOCK_T_LOCK(rwlock)  (*(volatile
int*)(>__data.__lock))
   ^
pthread.c:404:27: note: in expansion of macro ‘PTHREAD_RWLOCK_T_LOCK’
 spin_lock((int*)&(PTHREAD_RWLOCK_T_LOCK(lock)));
   ^
pthread_defs.h:104:76: error: ‘struct __pthread_rwlock_arch_t’ has no
member named ‘__writer’; did you mean ‘__writers’?
 e PTHREAD_RWLOCK_T_WRITER(rwlock)  (*(volatile
int*)(>__data.__writer))
  ^
pthread.c:405:24: note: in expansion of macro ‘PTHREAD_RWLOCK_T_WRITER’
 if ((pthread_t)PTHREAD_RWLOCK_T_WRITER(lock) == -1) {
^~~
pthread_defs.h:103:77: error: ‘struct __pthread_rwlock_arch_t’ has no
member named ‘__nr_readers’; did you mean ‘__readers’?
 PTHREAD_RWLOCK_T_READERS(rwlock)  (*(volatile
int*)(>__data.__nr_readers))
 ^
pthread.c:406:13: note: in expansion of macro ‘PTHREAD_RWLOCK_T_READERS’
 PTHREAD_RWLOCK_T_READERS(lock)++;
 ^~~~
pthread_defs.h:102:73: error: ‘struct __pthread_rwlock_arch_t’ has no
member named ‘__lock’
 efine PTHREAD_RWLOCK_T_LOCK(rwlock)  (*(volatile
int*)(>__data.__lock))
   ^
pthread.c:407:33: note: in expansion of macro ‘PTHREAD_RWLOCK_T_LOCK’
 spin_unlock((int*)&(PTHREAD_RWLOCK_T_LOCK(lock)));
 ^
pthread_defs.h:102:73: error: ‘struct __pthread_rwlock_arch_t’ has no
member named ‘__lock’
 efine PTHREAD_RWLOCK_T_LOCK(rwlock)  (*(volatile
int*)(>__data.__lock))
   ^
pthread.c:411:29: note: in expansion of macro ‘PTHREAD_RWLOCK_T_LOCK’
 spin_unlock((int*)&(PTHREAD_RWLOCK_T_LOCK(lock)));
 ^
pthread.c: In function ‘pthread_rwlock_wrlock’:
pthread_defs.h:104:76: error: ‘struct __pthread_rwlock_arch_t’ has no
member named ‘__writer’; did you mean ‘__writers’?
 e PTHREAD_RWLOCK_T_WRITER(rwlock)  (*(volatile
int*)(>__data.__writer))
  ^
pthread.c:422:32: note: in expansion of macro ‘PTHREAD_RWLOCK_T_WRITER’
 pthread_t writer = PTHREAD_RWLOCK_T_WRITER(lock);
^~~