GPU Coder™ использует функциональность, обеспеченную MATLAB® Coder™, таким образом, первый шаг в процессе поиска и устранения неисправностей должен гарантировать, что у вас есть MATLAB Coder совместимый код. Чтобы видеть требования программирования и лучшые практики для MATLAB Coder, смотрите, что MATLAB Программирует для Генерации кода (MATLAB Coder).
GPU Coder имеет различную поддержку функций, совместимых с MATLAB Coder и Image Processing Toolbox™. Список функций, которые были протестированы с GPU Coder, предоставлен в Проекте алгоритма MATLAB для графического процессора. Эти функции категоризированы в единицы, которые полностью поддержаны, функции, которые не поддержаны, и функции, которые поддерживаются при определенных обстоятельствах. Например, существуют определенные функции, которые работают в основанных на векторе операциях, но не, когда используется в теле цикла. Однако рекомендуется, если это возможно, переписать функции тулбокса с чистым MATLAB.
GPU Coder использует анализ параллелизма программы, чтобы обнаружить параллельные циклы for. Традиционные последовательные алгоритмы могут значительно варьироваться по тому, насколько parallelizable они. Некоторые проблемы смущающе параллельны и легки разделиться на части. С другой стороны, некоторые алгоритмы требуют, чтобы некоторый объем рефакторинга отсоединил их свойственный параллелизм. Параллельный анализ, который выполняет GPU Coder, консервативен. В результате существуют случаи, где циклы действительно параллельны, но анализу зависимости не удается обнаружить параллелизм.
Циклы должны быть статически обязаны определить размерности ядра. Например, циклы с условием продолжения, циклы с операторами завершения и циклы, область значений итерации которых не может быть статически определимой, не являются легко отображаемыми к ядрам CUDA® и должны быть переписаны. Обратитесь к разделу по анализу ядра для получения дополнительной информации.
После рассмотрения и исправления этих проблем, вы теперь готовы сгенерировать код CUDA. Самый легкий способ выполнить генерацию кода состоит в том, чтобы заглядывать прагме coder.gpu.kernelfun
в к функции точки входа. Можно затем выполнить шаги, описанные в Начало работы с GPU Coder, чтобы сгенерировать код CUDA или из командной строки или при помощи приложения GPU Coder.
Чтобы оценить производительность сгенерированного кода CUDA, мы можем использовать MATLAB tic
и toc
функции и определяют время выполнения. Если получившееся ускорение графического процессора не является удовлетворительным, можно выполнить диагностику усовершенствования как:
Анализ ядра
Анализ узкого места памяти
Анализ с NVIDIA визуальный профилировщик (nvvp
) инструмент