Графический процессор статический метрический отчет кода содержит результаты статического анализа сгенерированного кода 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.
Чтобы видеть информацию о сгенерированных ядрах CUDA, нажмите CUDA Kernels.
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 является минимальным количеством блоков на потоковую передачу многопроцессорной системы и указывает на количество блоков, с которыми можно запустить ядра.
Чтобы перейти от отчета до сгенерированного кода ядра, кликните по имени ядра.
Чтобы видеть переменные, которым выделили память на устройстве графического процессора, перейдите к разделу CUDA Malloc.
Просмотреть информацию о cudaMemCpy
вызовы в сгенерированном коде, нажмите CUDA Memcpy.
Если у вас есть продукт Embedded Coder®, объект настройки кода содержит GenerateCodeMetricsReport
свойство включить статическую метрическую генерацию отчета во время компиляции. GPU Coder не соблюдает эту установку и не оказывает влияния во время генерации кода.
codegen
| coder.CodeConfig
| coder.EmbeddedCodeConfig
| coder.gpuConfig