Расчет производительности CUFFT - PullRequest
2 голосов
/ 18 февраля 2012

Я использую CUFFT на блоках (N * N / p), разделенных на несколько графических процессоров, и у меня возник вопрос по поводу расчета производительности. Сначала немного о том, как я это делаю:

  1. Отправка N * N / p фрагментов на каждый GPU
  2. Пакетное 1-D FFT для каждой строки в p GPU
  3. Получить N * N / p кусков обратно на хост - выполнить транспонирование для всего набора данных
  4. То же Шаг 1
  5. То же Шаг 2

Gflops = ( 1e-9 * 5 * N * N *lg(N*N) ) / execution time

и время выполнения рассчитывается как:

execution time = Sum(memcpyHtoD + kernel + memcpyDtoH times for row and col FFT for each GPU)

Это правильный способ оценки производительности CUFFT на нескольких графических процессорах? Есть ли другой способ представить производительность FFT?

Спасибо.

1 Ответ

2 голосов
/ 18 февраля 2012

Если вы выполняете сложное преобразование, счетчик операций правильный (он должен быть 2,5 N log2 (N) для вещественного преобразования), но формула GFLOP неверна.В параллельной многопроцессорной работе обычный расчет пропускной способности составляет

operation count / wall clock time

. В вашем случае, предполагая, что графические процессоры работают параллельно, либо измерьте время настенных часов (т.е. сколько времени заняла вся операция) длявремя выполнения или используйте это:

execution time = max(memcpyHtoD + kernel + memcpyDtoH times for row and col FFT for each GPU)

Как есть, ваш расчет представляет время последовательного выполнения.Если учесть накладные расходы из схемы multigpu, я ожидаю, что вычисленные значения производительности, которые вы получите, будут ниже , чем эквивалентное преобразование, выполненное на одном графическом процессоре.

...