Чтение аппаратных счетчиков конфликтов общего/локального хранилища памяти/банка загрузки для исполняемого файла OpenCL под Nvidia

Можно использовать nvprof для доступа/чтения счетчиков конфликтов банка для CUDA exec:

nvprof --events shared_st_bank_conflict,shared_ld_bank_conflict my_cuda_exe

Однако это не работает для кода, который использует OpenCL, а не код CUDA.

  • Есть ли способ извлечь эти счетчики за пределы nvprof из среды OpenCL, может быть, прямо из ptx?
  • В качестве альтернативы есть ли способ преобразовать сборку PTX, сгенерированную компилятором nvidia OpenCL с использованием clGetProgramInfo с CL_PROGRAM_BINARIES, в ядро ​​​​CUDA и запустить его с использованием cuModuleLoadDataEx и, таким образом, иметь возможность использовать nvprof?
  • Есть ли какой-либо бэкенд ЦП для моделирования, который позволяет устанавливать такие параметры, как размер банка и т. Д.?

Дополнительный вариант:

  • Используйте конвертер кода opencl в код cuda, включая функции, отсутствующие в CUDA, такие как vloadn/vstoren, float16 и другие различные средства доступа. #define работают только для простых ядер. Есть ли какой-либо инструмент, который обеспечивает это?

person Artyom    schedule 18.10.2020    source источник
comment
Можете ли вы передать сгенерированный OpenCL PTX cuModuleLoadDataEx? Нет никакой гарантии, что одна и та же ptxas компиляция из PTX в SASS будет такой же, но это разумное предположение. Возможные варианты ptxas отличаются от OpenCL и CUDA (например, правила округления). Нет никакой гарантии, что вы будете профилировать одни и те же программы, но, возможно, это хорошее приближение.   -  person Tim    schedule 20.10.2020


Ответы (1)


Есть ли способ извлечь эти счетчики вне nvprof из среды OpenCL, может быть, прямо из ptx?

Нет. Ни в CUDA, ни в вычислительных шейдерах в OpenGL, DirectX или Vulkan.

В качестве альтернативы есть ли способ преобразовать сборку PTX, сгенерированную компилятором nvidia OpenCL с использованием clGetProgramInfo с
CL_PROGRAM_BINARIES, в ядро ​​CUDA и запустить его с помощью
cuModuleLoadDataEx и, таким образом, иметь возможность использовать nvprof?

Нет. OpenCL PTX и CUDA PTX — это не одно и то же, и их нельзя использовать взаимозаменяемо.

Есть ли какой-либо бэкенд ЦП для моделирования, который позволяет устанавливать такие параметры, как размер банка и т. Д.?

Не то, чтобы я в курсе.

person Community    schedule 25.10.2020
comment
OpenCL PTX и CUDA PTX, конечно, не одно и то же. Однако во многих случаях ядра, которые были скомпилированы как для CUDA (с определениями для таких вещей, как get_global_id), так и для OpenCL, PTX были очень-очень похожими, вплоть до небольших различий в заголовках. Так что теоретически преобразование возможно. Но надо понять как. - person Artyom; 25.10.2020
comment
Вы спросили, есть ли способ извлечь эти счетчики вне nvprof ... может быть, прямо из ptx , и ответ на этот вопрос - нет, вы не можете манипулировать или получать доступ к данным профилирования из пользовательского кода. Есть некоторые открытые программистом счетчики триггеров, которые вы можете увеличивать, и вы можете включать и выключать сбор данных профилирования, но это все. - person talonmies; 25.10.2020
comment
Награждение за ответ, но не принятие, так как я искал какое-либо направление/решение, и оно не было предоставлено. - person Artyom; 27.10.2020
comment
Очень сложно предложить решение, когда его не существует. Если вы хотите заменить текущую ситуацию своей альтернативной реальностью, вы имеете на это полное право. Но вы должны осознавать, что используете вычислительный API четвертого уровня поставщика с точки зрения поддержки (после CUDA, вычислительных функций графического API и API-интерфейсов, управляемых компилятором), и вы не должны ожидать, что он сделает больше, чем просто работает. Если вы привязаны к OpenCL, используйте другого поставщика. Если вы привязаны к NVIDIA, используйте CUDA. Такова суровая реальность, нравится вам это или нет. - person talonmies; 28.10.2020