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

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

Условие

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

Действие

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

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

Условие

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

Действие

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

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

Условие

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

Действие

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

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

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

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

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

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

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