2010-03-25 20 views
0

我想从HPCC,STREAM和GUPS运行一些测试。STREAM和GUPS(单CPU)基准测试可以在NUMA机器中使用非本地内存

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

我可以在启用了内存交叉存取的NUMA节点上启动单CPU测试STREAM或单CPU GUPS吗? (是允许通过HPCC规则 - 高性能计算挑战赛)

用途的非本地内存可提高GUPS的结果,因为它会增加2或4倍的存储体的数量,可用随机访问。 (GUPS通常受非理想内存子系统和慢速内存组开启/关闭限制,随着更多的银行可以更新到一家银行,而其他银行则开放/关闭。)

谢谢。

UPDATE:

(您可能也将重新排序内存访问该程序使)。

但编译器可以重新排序循环嵌套?例如。这里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)]; 
    } 
    } 

主循环是for (i=0; i<NUPDATE/128; i++) {和嵌套循环是for (j=0; j<128; j++) {。使用'循环交换'优化,编译器可以将此代码转换为

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

可以这样做,因为此循环嵌套是完美的循环嵌套。 HPCC规则禁止这样的优化吗?

回答

1

据我所知,允许内存交错 是一个系统设置,而不是代码修改(您可能也没有重新命令该程序使内存访问)。

如果GUPS实际上在非本地内存上获得更好的性能 NUMA机器似乎对我很怀疑。银行冲突导致的等待时间是否真的大于离线节点内存访问延迟?

STREAM不应由存储体冲突的限制,但是从断开节点将可能 益处访问如果CPU有一个片上存储器 控制器(如Opteron处理器),因为带宽则本地存储器控制器之间共享 和NUMA互连。

+0

谢谢。我更新了问题,请看看。这是关于重新排序GUPS – osgx 2010-03-26 11:12:11

+0

@Per Ekman中的内存访问,ivdep会给这里什么影响? – osgx 2010-04-25 02:04:16

相关问题