2012-01-03 4 views
2

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

enter image description here

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

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

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

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

EDIT: После комментария @talonmies, я добавил cudaStreamSynchronize до вычисления времени, а результаты таковы:

enter image description here

Спасибо,

Sayan

+0

Что вы имеете в виду, когда говорите «работает на 4 GPU» и что это значит для операции DGEMM. Разделяете ли вы DGEMM на 4 устройства или что-то еще? – talonmies

+0

Я разбиваю данные на 4 части для каждого графического процессора, а затем запускаю 'cublasdgemm' на кусках (на каждом графическом процессоре) ... – Sayan

+2

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

ответ

3

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

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

+0

Добавлен ответ, чтобы получить это в списке оставшихся без ответа вопросов. Может ли кто-то либо поддержать это, либо принять ответ. – talonmies

Смежные вопросы