Отчет о метриках статического кода 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.
Чтобы просмотреть информацию о сгенерированных ядрах 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