exponenta event banner

Создание отчета по метрикам кода GPU для кода, сгенерированного из кода MATLAB

Отчет о показателях статического кода графического процессора содержит результаты статического анализа сгенерированного кода CUDA ®, включая информацию о сгенерированных ядрах CUDA, измерениях потоков и блоков, использовании памяти и другую статистику. Для создания отчета о статических показателях кода необходимо использовать Coder™ графического процессора для создания автономного кода CUDA и отчета о создании кода. См. раздел Отчеты по созданию кода.

По умолчанию анализ статических метрик кода не выполняется во время генерации кода. Вместо этого, если требуется выполнить анализ и просмотреть результаты, щелкните Параметры кода графического процессора (GPU Code Metrics) на вкладке Сводка (Summary) отчета о создании кода.

Пример отчета по метрикам кода GPU

В этом примере выполняется анализ метрик статического кода 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».

Изучение отчета по метрикам кода

  1. Чтобы просмотреть информацию о созданных ядрах CUDA, щелкните Ядра CUDA.

    CUDA kernel information in the GPU static metrics report

    • Имя ядра содержит список созданных ядер CUDA. По умолчанию кодер GPU добавляет к имени ядра имя функции точки входа.

    • Размеры резьбы - это массив формы [Tx,Ty,Tz] определяет количество нитей в блоке вдоль размеров x, y, и z.

    • Размеры блока - это массив формы [Bx,By,1] - массив, определяющий количество блоков в сетке вдоль размеров; x и y (z не используется).

    • Столбцы Shared Memory Size и Constant Memory предоставляют метрики использования общего и постоянного пространства памяти в сгенерированном коде.

    • Minimum BlockePerSM - минимальное количество блоков на потоковый мультипроцессор и указывает количество блоков для запуска ядер.

    Чтобы перейти от отчета к сгенерированному коду ядра, щелкните имя ядра.

  2. Для просмотра переменных, имеющих память, выделенную на устройстве графического процессора, перейдите в раздел CUDA Malloc.

    Variable with GPU memory allocation in the GPU static metrics report

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

    CUDA memory copy information in the GPU static metrics report

Ограничения

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

См. также

| | |

Связанные темы