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