Преобразование последовательного кода в аппаратное обеспечение затруднено, и в некоторых случаях компилятор пробует несколько версий, чтобы найти наиболее оптимальную комбинацию аппаратного обеспечения. Это не то же самое, что компиляция для процессоров и графических процессоров, поэтому рабочий процесс совершенно другой (ядро компилируется во время сборки, а не во время выполнения). Конечным результатом часто является аппаратное обеспечение, которое работает быстрее и / или потребляет меньше энергии, чем вычислительные устройства более общего назначения, такие как процессоры и графические процессоры. Есть несколько отличных видео "OpenCL on Altera", которые объясняют, как работает компиляция, но кратко: Скомпилируйте на абстрактную машину и для каждой инструкции / шага удалите оборудование абстрактной машины, не необходимое для этого шага, затем объедините все остальное оборудование в том, что запрограммировано на чипе. Данные «текут» через аппаратные средства, а не живут в памяти, и регистрируются, как это происходит в CPU / GPU.