Может ли тест STREAM и GUPS (один процессор) использовать нелокальную память на машине NUMA - PullRequest
0 голосов
/ 25 марта 2010

Я хочу запустить несколько тестов из HPCC, STREAM и GUPS.

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

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

Использование нелокальной памяти может увеличить результаты 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++) {. Используя оптимизацию '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 Ответ

1 голос
/ 26 марта 2010

Насколько я могу сказать, это разрешено, если чередование памяти это настройка системы, а не изменение кода (вы не можете ни менять порядок доступ к памяти, которую выполняет программа).

Если GUPS действительно повышает производительность с нелокальной памятью на Машина NUMA кажется мне сомнительной. Будет ли банк вызван конфликтом задержки действительно больше задержки доступа к памяти вне узла?

STREAM не должен ограничиваться банковскими конфликтами, но, вероятно, выиграть от доступа вне узла, если процессор имеет встроенную память контроллер (как Opterons), так как пропускная способность затем разделяется между контроллером локальной памяти и соединением NUMA.

...