2010-03-25 6 views
0

Я хочу выполнить некоторые тесты из HPCC, STREAM и GUPS.Может ли тест STREAM и GUPS (одиночный процессор) использовать нелокальную память в машине NUMA

Они будут тестировать пропускную способность, задержку и пропускную способность памяти (в режиме произвольного доступа).

Могу ли я запускать тест одиночного CPU STREAM или одиночный CPU GUPS на узле NUMA с включенным чередованием памяти? (Это разрешено по правилам HPCC - High Performance Computing Challenge?)

Использование нелокальной памяти может увеличить результаты GUPS, поскольку оно увеличит количество или количество карт памяти в два или четыре раза для случайного доступа. (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 кажется мне сомнительной. Будет ли латентность, вызванная конфликтом в банке, действительно больше, чем задержка доступа к памяти за пределами узла?

ПОТОК не должен быть ограничен банковскими конфликтами, но, вероятно, выгоду от офф-узла получает доступ, если процессор имеет на чипе памяти контроллер (как процессоры Opteron), так как ширина полосы частот затем совместно между локальным контроллером памяти и соединение NUMA.

+0

Спасибо. Я обновил вопрос, пожалуйста, взгляните. Речь идет о переупорядочении доступа к памяти в GUPS – osgx

+0

@Per Ekman, какой эффект даст здесь ivdep? – osgx