exponenta event banner

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

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

Состояние

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

Действие

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

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

Состояние

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

Действие

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

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

Состояние

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

Действие

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

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

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

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

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

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

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

Связанные темы