我想从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规则禁止这样的优化吗?
谢谢。我更新了问题,请看看。这是关于重新排序GUPS – osgx 2010-03-26 11:12:11
@Per Ekman中的内存访问,ivdep会给这里什么影响? – osgx 2010-04-25 02:04:16