Как рассчитать ускорение программы GPU? - программирование
Подтвердить что ты не робот

Как рассчитать ускорение программы GPU?

Мотивация: Мне было поручено измерить показатель Karp-Flatt и параллельной эффективности моего кода CUDA C, который требует вычисления ускорения. В частности, мне нужно построить все эти показатели в зависимости от количества процессоров p.

Определение: Speedup относится к тому, насколько параллельный алгоритм работает быстрее, чем соответствующий последовательный алгоритм, и определяется как:

enter image description here

Проблема: Я реализовал свой алгоритм в CUDA C и приурочил его к Tp. Однако при определении Sp остаются некоторые проблемы:

  • Как наблюдать T1 без полного переписывания моего кода с нуля?
    • Могу ли я выполнить код CUDA в серийном режиме?
  • Что такое p, когда я запускаю разные ядра с разными номерами потоков?
    • Это относится к нет. нитей или нет. процессоров, используемых во время выполнения?
    • Поскольку обе эти величины также будут меняться во время выполнения, является ли это максимальным или средним значением?
    • Как мне даже ограничить мой код для работы на подмножестве процессоров или с меньшим количеством потоков!?

Большое спасибо.

4b9b3361

Ответ 1

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

И вы не можете разумно сравнить 1-процессорную версию своей параллельной программы с N-процессорной версией, чтобы получить истинную меру ускорения. Такое сравнение говорит о том, что вы ускоряетесь от перехода от P = 1 к P = N для одной и той же программы, но точка кривых ускорения заключается в том, чтобы показать, почему создание параллельной программы (которая обычно сложнее, требует более сложного оборудования [GPU] и tools [OpenCL]) имеет смысл по сравнению с кодированием лучшей последовательной версии с использованием более широко доступных аппаратных средств и инструментов.

Другими словами, никакого обмана.

Ответ 2

При измерении ускорения вы должны в большинстве случаев полностью записывать как последовательный, так и параллельный алгоритмы с нуля. Нет никакой особой причины, что лучший параллельный алгоритм с P = 1 имеет что-то общее с оптимальным последовательным алгоритмом. В большинстве случаев параллельный алгоритм должен будет делать много дополнительной работы и довольно неэффективен по сравнению с оптимальным последовательным алгоритмом.