В этом примере показано, как выполнить анализ мелкого зерна для алгоритма MATLAB и его сгенерированного кода CUDA посредством профилирования выполнения ПО в цикле (SIL). Embedded Coder® продукт должен быть установлен, чтобы сгенерировать отчет о профилировании выполнения.
Примечание
Рабочий процесс профилирования зависит от nvprof
инструмент от NVIDIA®. В CUDA® toolkit v10.1, NVIDIA ограничивает доступ к счетчикам эффективности только пользователям администрирования. Чтобы разрешить использование счетчиков эффективности графический процессор всеми пользователями, см. инструкции, приведенные в https://developer.nvidia.com/nvidia-development-tools-solutions-ERR_NVGPUCTRPERM-permission-issue-performance-counters.
В данном примере создайте функцию точки входа, которая выполняет N-D быстрое преобразование Фурье. Используйте coder.gpu.kernelfun
pragma для сопоставления БПФ с графическим процессором. По умолчанию в EnableCUFFT
свойство включено, поэтому генератор кода использует библиотеку cuFFT для выполнения операции FFT.
function [Y] = gpu_fftn(X) coder.gpu.kernelfun(); Y = fftn(X); end
Используйте gpucoder.profile
функция для генерации отчета о профилировании выполнения.
cfg = coder.gpuConfig('exe'); cfg.GpuConfig.MallocMode = 'discrete'; gpucoder.profile('gpu_fftn',{rand(2,4500,4)},'CodegenConfig',cfg, ... 'CodegenArguments','-d profilingdir','Threshold',0.001)
Откроется отчет по профилированию выполнения кода. Этот отчет предоставляет метрики на основе данных, собранных при выполнении SIL. Времена выполнения вычисляются из данных, записанных контрольно-измерительными датчиками, добавленными в тестовую обвязку SIL или внутри кода, сгенерированного для каждого компонента. Дополнительные сведения см. в разделе Просмотр временах выполнения (Embedded Coder).
codegen
| coder.EmbeddedCodeConfig
| gpucoder.profile