Stream 流和GUPS(单CPU)基准测试能否在NUMA机器中使用非本地内存
我想从HPCC、STREAM和GUPS运行一些测试 他们将测试内存带宽、延迟和吞吐量(根据随机访问) 我可以在启用内存交错的NUMA节点上启动单CPU测试流或单CPU GUP吗?(HPCC-高性能计算挑战赛的规则允许它吗?) 非本地内存的使用会增加GUPS结果,因为它会使可用于随机访问的内存库数量增加2到4倍。(GUPS通常受到非理想内存子系统和缓慢的内存库打开/关闭的限制。有了更多的内存库,它可以更新一个内存库,而其他内存库正在打开/关闭。) 谢谢 更新: (您不能对程序进行的内存访问进行重新排序) 但编译器可以对嵌套循环重新排序吗?例如hpcc/RandomAccess.cStream 流和GUPS(单CPU)基准测试能否在NUMA机器中使用非本地内存,stream,benchmarking,hpc,hpcc,Stream,Benchmarking,Hpc,Hpcc,我想从HPCC、STREAM和GUPS运行一些测试 他们将测试内存带宽、延迟和吞吐量(根据随机访问) 我可以在启用内存交错的NUMA节点上启动单CPU测试流或单CPU GUP吗?(HPCC-高性能计算挑战赛的规则允许它吗?) 非本地内存的使用会增加GUPS结果,因为它会使可用于随机访问的内存库数量增加2到4倍。(GUPS通常受到非理想内存子系统和缓慢的内存库打开/关闭的限制。有了更多的内存库,它可以更新一个内存库,而其他内存库正在打开/关闭。) 谢谢 更新: (您不能对程序进行的内存访问进行重新
/* Perform updates to main table. The scalar equivalent is:
*
* u64Int ran;
* ran = 1;
* for (i=0; i<NUPDATE; i++) {
* ran = (ran << 1) ^ (((s64Int) ran < 0) ? POLY : 0);
* table[ran & (TableSize-1)] ^= stable[ran >> (64-LSTSIZE)];
* }
*/
for (j=0; j<128; j++)
ran[j] = starts ((NUPDATE/128) * j);
for (i=0; i<NUPDATE/128; i++) {
/* #pragma ivdep */
for (j=0; j<128; j++) {
ran[j] = (ran[j] << 1) ^ ((s64Int) ran[j] < 0 ? POLY : 0);
Table[ran[j] & (TableSize-1)] ^= stable[ran[j] >> (64-LSTSIZE)];
}
}
/*对主表执行更新。标量等价物为:
*
*u64Int-ran;
*ran=1;
*对于(i=0;i(64-LST尺寸)];
* }
*/
对于(j=0;j,据我所知,考虑到内存交错,这是允许的
是一种系统设置,而不是代码修改(您可以不重新排序
程序进行的内存访问)
如果GUPS在使用非本地内存的情况下在
NUMA机器对我来说似乎很可疑。银行冲突会导致延迟吗
是否真的大于非节点内存访问延迟
流不应受到银行冲突的限制,但可能会受到限制
如果CPU具有片上内存,则可从非节点访问中获益
控制器(如Opteron),因为带宽是共享的
在本地内存控制器和NUMA互连之间。谢谢。我更新了问题,请看一下。它是关于在GUPS中重新排序内存访问的
for (j=0; j<128; j++) {
for (i=0; i<NUPDATE/128; i++) {
ran[j] = (ran[j] << 1) ^ ((s64Int) ran[j] < 0 ? POLY : 0);
Table[ran[j] & (TableSize-1)] ^= stable[ran[j] >> (64-LSTSIZE)];
}
}