CUBLAS запрос производительности dgemm - PullRequest
2 голосов
/ 03 января 2012

Это мои результаты запуска cublas DGEMM на 4 графических процессорах с использованием 2 потоков для каждого графического процессора (Tesla M2050):

enter image description here

Я проверил свои результаты и они в порядке;Меня беспокоит высокое значение Gflops, которое я получаю по сравнению с версиями, использующими поток по умолчанию.Я рассчитываю Gflops по формуле:

Gflops = {2.0*10^-9*(N^3+N^2)}/elapsed_time_in_s

Для версии, которая использует несколько потоков, нужно ли каким-либо образом изменять эту формулу?

HtoD-ker-DtoH - это время, затрачиваемое на передачу данных с хоста на устройство, выполнение ядра и передачу данных с хоста на устройство в секундах (это знаменатель в приведенной выше формуле).Кросспост на форумах Nvidia - http://forums.nvidia.com/index.php?showtopic=219910&st=0#entry1350908

РЕДАКТИРОВАТЬ: После комментария @talonmies я добавил cudaStreamSynchronize перед подсчетом времени, и результаты следующие:

enter image description here

Спасибо,

Саян

1 Ответ

3 голосов
/ 10 ноября 2013

Один C2050 дает около 550 GFLOP / с пика, или около 2200 GFLOP / с для 4 пика для двойной точности, и DGEMM значительно ниже пика), так что я бы предположил, что в случае потоков неправильная синхронизация ( вероятно, что-то, что было синхронным в случае потока по умолчанию, теперь асинхронно). Расчет FLOP / s не должен изменяться независимо от того, как вы выполняете вычисления.

Я бы рассмотрел ваш код, чтобы убедиться, что любой используемый вами механизм синхронизации синхронизируется со всеми запускаемыми вами потоками, либо с помощью механизма cudaStreamWaitEvent для всех потоков, либо cudaStreamSynchronize для каждого потока. Вполне вероятно, что время выполнения кода выходит за пределы кода, который вы пытаетесь рассчитать до того, как графический процессор завершит операции CUBLAS.

...