Может ли тест STREAM и GUPS (с одним ЦП) использовать нелокальную память на машине NUMA
Я хочу запустить несколько тестов из HPCC, STREAM и GUPS.
Они будут проверять пропускную способность памяти, задержку и пропускную способность (в терминах случайного доступа).
Могу ли я запустить однопроцессорный тест STREAM или однопроцессорный GUPS на узле NUMA с включенным чередованием памяти? (Это разрешено правилами HPCC - High Performance Computing Challenge?)
Использование нелокальной памяти может увеличить результаты 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)];
}
}
Основной цикл здесь for (i=0; i<NUPDATE/128; i++) {
и вложенный цикл for (j=0; j<128; j++) {
, Используя оптимизацию 'loop interchange', компилятор может преобразовать этот код в
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 не должен быть ограничен банковскими конфликтами, но, вероятно, выиграет от доступа вне узла, если ЦПУ имеет встроенный контроллер памяти (например, Opterons), поскольку полоса пропускания затем распределяется между локальным контроллером памяти и межсоединением NUMA.