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

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

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

Пример отчета по метрикам кода графического процессора

Этот пример запускает анализ статических метрик кода GPU и исследует отчет о метриках статического кода.

Создайте MATLAB® функция, вызываемая mandelbrot_count.m со следующими строками кода. Этот код является векторизованной реализацией MATLAB набора Мандельброта. Для каждой точечной (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';

Примечание

The --fmad=false флаг при передаче в nvcc, инструктирует компилятор отключить оптимизацию с плавающей точкой Multiply-Add (FMAD). Эта опция предназначена для предотвращения численного несоответствия в сгенерированном коде из-за архитектурных различий в центральном процессоре и графическом процессоре. Для получения дополнительной информации см. раздел «Численные различия между центральным процессором и графическим процессором».

Кроме того, используйте codegen -report опция.

Сгенерируйте код при помощи codegen. Укажите тип входного параметра путем предоставления примера входа с -args опция. Задайте объект строения при помощи -config опция.

codegen -config cfg -args {maxIterations,xGrid,yGrid} mandelbrot_count

Чтобы открыть отчет генерации кода, нажмите View report.

Чтобы запустить статический анализ метрики кода и просмотреть отчет по метрикам кода, на вкладке Summary отчета о генерации кода нажмите GPU Code Metrics.

Исследуйте отчет о метриках кода

  1. Чтобы просмотреть информацию о сгенерированных ядрах CUDA, нажмите CUDA Kernels.

    CUDA kernel information in the GPU static metrics report

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

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

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

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

    • Minimum BlocksPerSM - минимальное количество блоков на каждый потоковый многопроцессор и указывает количество блоков, с помощью которых можно запускать ядра.

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

  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 свойство для включения статической метрической генерации отчета во время компиляции. GPU Coder не поддерживает эту настройку и не влияет во время генерации кода.

См. также

| | |

Похожие темы