Stream 流和GUPS(单CPU)基准测试能否在NUMA机器中使用非本地内存

Stream 流和GUPS(单CPU)基准测试能否在NUMA机器中使用非本地内存,stream,benchmarking,hpc,hpcc,Stream,Benchmarking,Hpc,Hpcc,我想从HPCC、STREAM和GUPS运行一些测试 他们将测试内存带宽、延迟和吞吐量(根据随机访问) 我可以在启用内存交错的NUMA节点上启动单CPU测试流或单CPU GUP吗?(HPCC-高性能计算挑战赛的规则允许它吗?) 非本地内存的使用会增加GUPS结果,因为它会使可用于随机访问的内存库数量增加2到4倍。(GUPS通常受到非理想内存子系统和缓慢的内存库打开/关闭的限制。有了更多的内存库,它可以更新一个内存库,而其他内存库正在打开/关闭。) 谢谢 更新: (您不能对程序进行的内存访问进行重新

我想从HPCC、STREAM和GUPS运行一些测试

他们将测试内存带宽、延迟和吞吐量(根据随机访问)

我可以在启用内存交错的NUMA节点上启动单CPU测试流或单CPU GUP吗?(HPCC-高性能计算挑战赛的规则允许它吗?)

非本地内存的使用会增加GUPS结果,因为它会使可用于随机访问的内存库数量增加2到4倍。(GUPS通常受到非理想内存子系统和缓慢的内存库打开/关闭的限制。有了更多的内存库,它可以更新一个内存库,而其他内存库正在打开/关闭。)

谢谢

更新:

(您不能对程序进行的内存访问进行重新排序)

但编译器可以对嵌套循环重新排序吗?例如hpcc/RandomAccess.c

  /* 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)];
  }
}