[gem5-users] Getting single cache line from multiple channels of HBM
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
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); ^~~