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

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

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

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

Этот пример запускает графический процессор статический метрический анализ кода и исследует статический метрический отчет кода.

Создайте функцию 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 1 000 сеток действительных частей (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). Эта опция собирается предотвратить числовое несоответствие в сгенерированном коде из-за архитектурных различий в центральном процессоре и графическом процессоре. Для получения дополнительной информации смотрите Числовые Различия Между центральным процессором и графическим процессором.

В качестве альтернативы используйте 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] это идентифицирует количество потоков в блоке по измерениям xY, и 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 не соблюдает эту установку и не оказывает влияния во время генерации кода.

Смотрите также

| | |

Похожие темы