Какие шаги необходимо предпринять для реализации OpenCL на устройстве?

Допустим, у меня есть устройство, которое, хотя оно и способно поддерживать, в настоящее время не поддерживает OpenCL. У меня есть ISA, документы по проектированию оборудования и много другой документации. Моя система, на которой находится устройство, в настоящее время имеет компиляторы C и C++ и поддерживает многие дистрибутивы Linux.

Теперь я хочу добавить поддержку OpenCL (скажем, в последней версии 2.2) для моего устройства. Что мне действительно нужно сделать, чтобы мое устройство поддерживалось? Я вижу документацию по SPIR-V на их сайте, а именно: страницу реестра SPIR-V, обзор расширенного набора команд opencl, обзор обычного spir-V.

Теперь предположим, что я реализую компилятор SPIR-V-to-my-device-ISA, теперь я поддерживаю OpenCL 2.2? Я вижу другой реестр для OpenCL, но не вижу того, что говорит: "Если вы реализуете эти функции, напишите код, который делает это и т. Д., Вы теперь внедрили спецификацию OpenCL 2.2 в вашей системе".

Какие реальные шаги мне нужно предпринять для реализации OpenCL для моего устройства?

2 ответа

Ну, вы должны предоставить реализацию Open Cl API. Эта реализация API должна эффективно компилировать ядра opencl для вашей архитектуры.

Для поддержки определенного набора функций (то есть версий и расширений OpenCL) вам потребуется поддержка определенных функций в API и языке ядра opencl c / C++. Все это указано в стандарте open cl, который вы можете найти на сайте khronos.

Для упрощения всего процесса такие компании, как intel, nvidia, amd,... все основывают свой компилятор на LLVM. Если вам необходимо еще больше сократить усилия, возможно, стоит взглянуть на POCL.

Ваша система имеет собственную архитектуру или это просто пользовательский программный стек?

Я бы начал с pocl и добавил бэкэнд ( http://portablecl.org/). Все остальное уже сделано.

Другие вопросы по тегам