Оптимальная производительность GPU - PullRequest
5 голосов
/ 17 февраля 2011


Меня попросили измерить, насколько «эффективно» мой код использует графический процессор / какой процент пиковой производительности достигают алгоритмы. Я не уверен, как сделать это сравнение.в моем коде и измерить выполнение. Как я могу сравнить это с оптимальной производительностью и найти, что может быть узким местом?(Я слышал о визуальном профилировщике, но не смог заставить его работать .. он продолжает выдавать мне ошибку "не могу загрузить вывод").

Ответы [ 3 ]

0 голосов
/ 17 февраля 2011

Не могу помочь с профилировщиком и микрооптимизацией, но есть калькулятор CUDA http://developer.download.nvidia.com/compute/cuda/CUDA_Occupancy_calculator.xls, который пытается оценить, как ваш код CUDA использует аппаратные ресурсы, основываясь на следующих значениях:

Threads Per Block
Registers Per Thread                                                             
Shared Memory Per Block (bytes)
0 голосов
/ 18 февраля 2011

Каждая карта имеет максимальную пропускную способность памяти и скорость обработки. Например, пропускная способность GTX 480 составляет 177,4 ГБ / с. Вам нужно будет знать характеристики вашей карты.

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

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


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

  2. Я также не уверен, что делать в вероятном случае, если ваше ядро ​​находится между границей памяти и ALU.

Любой ...

0 голосов
/ 17 февраля 2011

Обычно "эффективно" может быть мерой того, сколько циклов памяти и GPU (среднее, минимальное, максимальное) использует ваша программа.Тогда мерой эффективности будет avg (mem) / общий объем памяти за период времени и так далее с AVG (такты GPU) / макс. Циклы GPU.

Затем я сравнил бы эти метрики с метриками из некоторых наборов тестов GPU (которые можно считать довольно эффективными при использовании большей части GPU).Или вы можете сравнить некоторые случайные программы с интенсивным использованием графического процессора по вашему выбору.Я бы так и сделал, но я никогда не думал, что так удачи!

Что касается узких мест и "оптимальной" производительности.Вероятно, это проблемы NP-Complete, с которыми никто не может помочь.Выйдите из старого профилировщика и отладчиков и начните прокладывать свой код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...