Как интерпретировать анализ / рекомендации NVIDIA Visual Profiler?

Я относительно новичок в CUDA и в настоящее время нахожусь в проекте по ускорению приложений компьютерного зрения во встроенных системах с подключенным gpu (NVIDIA TX1). Я пытаюсь выбрать между двумя библиотеками: OpenCV и VisionWorks(включая OpenVX).

В настоящее время я создал тестовые коды для запуска алгоритма Canny Edge Detection, и две библиотеки показали разное время выполнения (реализация VisionWorks занимает примерно на 30-40% меньше времени).

Итак, мне стало интересно, в чем может быть причина, и, таким образом, профилировал ядро, которое занимает больше всего времени: 'canny::dgeHysteresisLocalKernel' из OpenCV4Tegra, которое занимает 37,2% всего приложения (как из реализации OpenCV, так и из реализации VisionWorks) и 'dgeHysteresisLocal'от VisionWorks.

Я следовал "руководствуясь анализом", и профилировщик предположил, что приложения привязаны к задержке, и ниже приведены захваты "dgeHysteresisLocal "из VisionWorks и" canny::dgeHysteresisLocalKernel "из OpenCV4Tegra.

OpenCV4Tegra - canny::dgeHysteresisLocalKernel

VisionWorks - ребраГистерезисМестные

Итак, мой вопрос,

  • из анализа, что я могу сказать о причинах различных выступлений?

  • Более того, когда нужно профилировать приложения CUDA в целом, с чего начать? Я имею в виду, есть множество метрик, и очень сложно сказать, на что смотреть.

  • Существуют ли образовательные материалы, касающиеся профилирования приложений CUDA в целом? (Я посмотрел на многие слайды от NVIDIA, и я думаю, что они просто показывают определения метрик, а не с чего начать в целом.)

- Кстати, насколько мне известно, NVIDIA не предоставляет исходные коды VisionWorks и OpenCV4Tegra. Поправьте меня если я ошибаюсь.

Заранее благодарю за ответы.

1 ответ

1/ использование shared_memory в двух библиотеках различается, что, вероятно, является причиной расхождения производительности.


2 / Обычно используют три метрики, чтобы узнать, хорошо ли мой алгоритм закодирован для устройств CUDA:

  • использование памяти ядрами (пропускная способность)
  • количество использованных регистров: есть разлив регистров или нет?
  • количество конфликтов банка с общей памятью

3/ я думаю, что есть много вещей в Интернете....


еще одна вещь:

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

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

Другие вопросы по тегам