2012-02-17 4 views
2

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

  1. Отправить N * N/P ломти для каждого GPU
  2. порционный 1-D FFT для каждой строки в р чипах
  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?

Спасибо.

+0

Это для реального или сложного преобразования? – talonmies

+0

cufftZ2Z - Правильно ли я включаю тайминги создания и уничтожения флеш-планов во время выполнения? Я вижу значительную разницу, если я их не включаю ... – Sayan

+1

На этот вопрос нет «правильного» ответа. Вы должны точно сообщить, что такое ваши тайминги. Создание плана может включать ленивое создание контекста API. Вы, вероятно, не хотите, чтобы это произошло. Я действительно не использую CUFFT и не знаю много о его внутренностях. – talonmies

ответ

2

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

+0

Спасибо, я понял, где я ошибся. Будет ли правильно говорить, что если передача данных включена, то производительность графического процессора сопоставима с производительностью n потоков в ЦП? – Sayan

+0

Извините, я не понимаю, что вы пытаетесь спросить. – talonmies

+0

Я заметил, что если я включаю memcpyHtoD/DtoH раз в «время выполнения», gflops gpu и fftw на нескольких потоках на cpus близки; так как моя цель - сравнить производительность процессора fft с процессором gpu, поэтому я спросил. – Sayan