Могу ли я профилировать ядро ​​OpenACC на уровне исходного кода C?

Я пытаюсь ускорить мой код с помощью openacc с компилятором PGI 15.7.

Я хочу профилировать мой код на уровне исходного кода C. Я использую профилировщик 'nvvp' из CUDA 7.0 Когда я запускаю nvvp, я могу использовать 'анализ-анализ' и определить, какая задержка является причиной замедления моего кода. (зависимость от данных, условная ветвь и пропускная способность и т. д.)

Но я не смог получить линейный анализ, а только анализ на уровне "ядра". (например, ядро ​​main_300_gpu использовало 10 с) . Поэтому у меня возникли проблемы с тем, где я должен исправить код.

Есть ли способ профилировать мой код на уровне исходного кода?

я использую

PGI 15,7 (с использованием pgcc)

CUDA 7.0

NVIDIA GTX 960

Ubuntu 14.04 LTS x86_64

[мои скриншоты с отчетами по nvvp] введите описание изображения здесь

введите описание изображения здесь

2 ответа

Решение

Вы также можете попробовать добавить флаг "-ta=tesla:lineinfo", чтобы компилятор добавил ассоциацию исходного кода для профилировщика (это тот же флаг, что и nvcc --lineinfo). Хотя, как указывает Боб, код может быть сильно преобразован, поэтому информация о строках не всегда напрямую соответствует вашему исходному источнику.

В настоящее время (и на CUDA 7.5 или выше, с GPU cc5.2 или выше), профилировщик nvvp может связывать различные виды выборочной активности выполнения со строками исходного кода CUDA C/C++.

Однако в настоящее время эта возможность не распространяется на строки исходного кода OpenACC C/C++ (или Fortran).

Тем не менее, все еще должно быть возможно связать действие с разборкой, и может быть возможно связать с промежуточными исходными файлами C, созданными опцией PGI nollvm. Однако ни один из них не будет сильно похож на ваш исходный код OpenACC.

Другой вариант для профилирования кодов OpenACC с использованием инструментов PGI - установить переменную среды PGI_ACC_TIME=1 перед выполнением вашего кода. Это позволит встроить облегченный профилировщик во время выполнения, чтобы дать некоторый анализ характеристик выполнения вашего кода OpenACC, в частности тех частей, которые связаны с областями ускорителя. Вывод аннотирован, поэтому вы можете вернуться к строкам исходного кода.

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