Анализ узкого места памяти

Выравнивание данных

Условие

MATLAB является главным столбцом, но алгоритм мог быть реализован для оптимизированной главной строкой реализации. В сгенерированном коде, если ваша самая быстрая изменяющаяся размерность не является самым внутренним циклом, то память не объединяется. Часто, перемещение входных матриц может просто решить эту проблему.

Действие

Попытайтесь транспонировать данные.

Небольшие размеры данных

Условие

Если ваша проблема/размер данных является слишком небольшой, то издержки движущихся данных к графическому процессору (даже если это только на контуре ввода-вывода) могут сместить любое увеличение производительности работы графического процессора.

Действие

Попробуйте алгоритм большими размерами данных.

Слишком много cudaMemcpys

Условие

Если вы используете только coder.gpu.kernel, то все вне цикла переходит к центральному процессору. Чтобы попытаться сохранить большую часть кода по графическому процессору, использование обеих прагм рекомендуется. Кроме того, присутствие неподдерживаемых функций или любой функции/оператора, которая не может работать на графическом процессоре, заставляет больше cudaMemcpys быть сгенерированным.

Действие

Используйте coder.gpu.kernelfun в дополнение к coder.gpu.kernel

Постоянные входные параметры

Рекомендация

Если определенные входные параметры вашей функции точки входа являются постоянными, переносят их использующий объект coder.constant. Использование объекта coder.constant указывает, что эти переменные являются постоянными во время генерации кода. Без этой функции GPU Coder™ полагает, что эти входные параметры переменные и следовательно обрабатывает все матрицы, измеренные этими переменными как матрицы переменной размерности. GPU Coder не создает хорошие ядра из матриц переменной размерности с тех пор в настоящее время нет никакой поддержки динамической калибровки ядер или динамических вызовов функции cudaMemcpy.

Использование стековой памяти

Рекомендация

Используя большую стековую память в ядрах может уменьшать производительность сгенерированного кода. В таких условиях полагайте, что перезапись алгоритма другим способом или повреждение его в меньшие вычисления уменьшают использование стековой памяти и улучшают производительность.