Анализ узких мест в памяти

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

Состояние

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

Действие

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

Малые размеры данных

Состояние

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

Действие

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

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

Состояние

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

Действие

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

Постоянные входы

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

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

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

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

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

Похожие темы