Вычисления с ускорением GPU следуют гетерогенной модели программирования. Части программного приложения с высокой степенью параллелизма отображаются в ядра, которые выполняются на физически отдельном GPU-устройстве, в то время как остальная часть последовательного кода все еще выполняется на CPU. Каждому ядру выделяется несколько рабочих или потоков, которые организованы в блоки и сетки. Каждый поток в ядре выполняется одновременно относительно друг друга.

Цель GPU Coder™ состоит в том, чтобы взять последовательную программу MATLAB ® и сгенерировать из нее разделенный, оптимизированный код CUDA ®. Этот процесс включает в себя:
Разбиение CPU/GPU - определение сегментов кода, которые выполняются на CPU, и сегментов, которые выполняются на GPU. Различные способы идентификации ядрами CUDA кодером GPU см. в разделе Создание ядра. Затраты на передачу памяти между CPU и GPU являются важным фактором в алгоритме создания ядра.
После завершения разбиения ядра кодер GPU анализирует зависимость данных между разделами CPU и GPU. Данные, совместно используемые CPU и GPU, выделяются в памяти GPU (с помощью cudaMalloc или cudaMallocManaged API). Анализ также определяет минимальный набор местоположений для копирования данных между CPU и GPU с помощью cudaMemcpy. При использовании Unified Memory в CUDA тот же самый проход анализа также определяет минимальные местоположения в коде, где cudaDeviceSync вызовы должны быть вставлены для обеспечения правильного функционального поведения.
Затем в каждом ядре кодер GPU может выбрать сопоставление данных с общей памятью или постоянной памятью. При разумном использовании эти запоминающие устройства являются частью структуры иерархии памяти GPU и потенциально могут привести к увеличению пропускной способности памяти. Сведения о том, как кодер графического процессора выбирает сопоставление с общей памятью, см. в разделе Обработка набора элементов. Для получения информации о том, как кодер графического процессора выбирает сопоставление с постоянной памятью, см. coder.gpu.constantMemory.
Как только операторы разделения и выделения памяти и передачи установлены, кодер GPU генерирует код CUDA, который следует решениям разделения и выделения памяти. Созданный исходный код может быть скомпилирован в объект MEX для вызова из MATLAB или в общую библиотеку для интеграции с внешним проектом. Дополнительные сведения см. в разделе Создание кода с помощью интерфейса командной строки.