Отчет о показателях статического кода графического процессора содержит результаты статического анализа сгенерированного кода CUDA ®, включая информацию о сгенерированных ядрах CUDA, измерениях потоков и блоков, использовании памяти и другую статистику. Для создания отчета о статических показателях кода необходимо использовать Coder™ графического процессора для создания автономного кода CUDA и отчета о создании кода. См. раздел Отчеты по созданию кода.
По умолчанию анализ статических метрик кода не выполняется во время генерации кода. Вместо этого, если требуется выполнить анализ и просмотреть результаты, щелкните Параметры кода графического процессора (GPU Code Metrics) на вкладке Сводка (Summary) отчета о создании кода.
В этом примере выполняется анализ метрик статического кода GPU и рассматривается отчет метрик статического кода.
Создание функции MATLAB ® с именемmandelbrot_count.m со следующими строками кода. Этот код является векторизированной реализацией MATLAB набора Mandelbrot. Для каждой точки (xGrid,yGrid) в сетке вычисляется индекс итерации count при которой траектория, определенная уравнением, достигает расстояния 2 от происхождения. Затем возвращается натуральный логарифм count, который используется для генерации цветокодированного графика набора Мандельброта.
function count = mandelbrot_count(maxIterations,xGrid,yGrid) % Add kernelfun pragma to trigger kernel creation coder.gpu.kernelfun; % mandelbrot computation z0 = xGrid + 1i*yGrid; count = ones(size(z0)); z = z0; for n = 0:maxIterations z = z.*z + z0; inside = abs(z)<=2; count = count + inside; end count = log(count);
Создайте образец данных со следующими строками кода. Код создает сетку 1000 x 1000 из вещественных (x) и мнимых (y) частей между пределами, определенными xlim и ylim.
maxIterations = 500; gridSize = 1000; xlim = [-0.748766713922161,-0.748766707771757]; ylim = [0.123640844894862,0.123640851045266]; x = linspace(xlim(1),xlim(2),gridSize); y = linspace(ylim(1),ylim(2),gridSize); [xGrid,yGrid] = meshgrid(x,y);
Разрешить создание отчета о создании кода с помощью объекта конфигурации для создания автономного кода (статическая библиотека, динамически связанная библиотека или исполняемая программа).
cfg = coder.gpuConfig('dll'); cfg.GenerateReport = true; cfg.MATLABSourceComments = true; cfg.GpuConfig.CompilerFlags = '--fmad=false';
Примечание
--fmad=false флаг при передаче в nvcc, предписывает компилятору отключить оптимизацию умножения с плавающей запятой (FMAD). Эта опция предназначена для предотвращения численного несоответствия в сгенерированном коде из-за архитектурных различий в CPU и GPU. Дополнительные сведения см. в разделе Числовые различия между ЦП и графическим процессором.
В качестве альтернативы используйте codegen
-report вариант.
Создание кода с помощью codegen. Укажите тип входного аргумента, предоставив пример ввода с -args вариант. Укажите объект конфигурации с помощью -config вариант.
codegen -config cfg -args {maxIterations,xGrid,yGrid} mandelbrot_count
Чтобы открыть отчет о создании кода, щелкните Просмотр отчета.
Чтобы выполнить анализ статических метрик кода и просмотреть отчет о метриках кода, на вкладке «Сводка» отчета о создании кода щелкните «Метрики кода GPU».
Чтобы просмотреть информацию о созданных ядрах CUDA, щелкните Ядра CUDA.

Имя ядра содержит список созданных ядер CUDA. По умолчанию кодер GPU добавляет к имени ядра имя функции точки входа.
Размеры резьбы - это массив формы [Tx,Ty,Tz] определяет количество нитей в блоке вдоль размеров x, y, и z.
Размеры блока - это массив формы [Bx,By,1] - массив, определяющий количество блоков в сетке вдоль размеров; x и y (z не используется).
Столбцы Shared Memory Size и Constant Memory предоставляют метрики использования общего и постоянного пространства памяти в сгенерированном коде.
Minimum BlockePerSM - минимальное количество блоков на потоковый мультипроцессор и указывает количество блоков для запуска ядер.
Чтобы перейти от отчета к сгенерированному коду ядра, щелкните имя ядра.
Для просмотра переменных, имеющих память, выделенную на устройстве графического процессора, перейдите в раздел CUDA Malloc.

Просмотр информации о cudaMemCpy в созданном коде выберите CUDA Memcpy.

При наличии продукта Embedded Coder ® объект конфигурации кода содержит GenerateCodeMetricsReport , чтобы включить создание статического отчета о метрике во время компиляции. Кодер графического процессора не учитывает эту настройку и не влияет на процесс создания кода.
codegen | coder.CodeConfig | coder.EmbeddedCodeConfig | coder.gpuConfig