2016-03-16 1 views
-1

Типичный пример рабочего процесса для программирования OpenCL, по-видимому, ориентирован на исходный код в строках, передается компилятору JIT, а затем завершен (с указанием конкретного имени ядра); и результаты компиляции могут быть кэшированы - но это остается для вас программистом, которому нужно позаботиться.CUDA-подобный рабочий процесс для OpenCL

В CUDA код скомпилирован в виде объектов, отличных от JIT, для объектных файлов (наряду с кодом на стороне хоста, но забудьте об этом на секунду), а затем просто ссылается на функции на стороне устройства в контексте enqueue или аргументы и т. д.

Теперь я хотел бы иметь второй вид рабочего процесса, но с источниками OpenCL. То есть предположим, что у меня есть код на стороне хоста my_app.c и некоторый код ядра OpenCL в отдельном файле my_kernel.cl (который для обсуждения является автономным). Я хотел бы иметь возможность запускать магическую команду на my_kernel.cl, получить my_kernel.whatever, ссылку или фальшивую ссылку, которая вместе с my_app.o, и получить двоичный файл. Теперь, в my_app.c Я хочу иметь возможность как-то ссылаться на ядро, даже если это не символ extern, как скомпилированная программа OpenCL (или программа + имя ядра) - и не получить ошибки компиляции.

Поддерживается ли это как-то? С ICD nVIDIA или с одним из других ICD? Если нет, то, по крайней мере, этого поддерживаемого, скажем, магического ядра компилятора + генерация дополнительного заголовка или заглушки источника для использования при компиляции my_app.c?

ответ

3

Посмотрите на SYCL, он предлагает однострочный C++ OpenCL. Тем не менее, еще не доступны на каждой платформе.

https://www.khronos.org/sycl

+0

Разве это не преуменьшение? Кажется, что требуется еще не стандартная функциональность C++ (материал C++ 17?) Кроме того, это спецификация/стандарт; существуют ли соответствующие реализации SYCL? – einpoklum

+1

Да, возможно, преуменьшение; Я не использую SYCL, поэтому я не был уверен в его доступности. – Dithermaster

+0

Тогда, может быть, через 3 года я могу принять этот ответ :-) У вас есть мой +1. – einpoklum

1

Существует уже постоянные усилия, что позволяет CUDA-подобный рабочий процесс в TensorFlow, и он использует SYCL 1,2 - она ​​активно вверх потоковом.

Аналогично CUDA, подход SYCL нуждается следующие шаги: регистрация

Рабочий процесс немного отличается, как вы не должны делать явное инстанцирование шаблонов функторных, как CUDA делает https://github.com/lukeiwanski/tensorflow/blob/master/tensorflow/core/kernels/adjust_contrast_op_gpu.cu.cc или любой .cu.cc файл (на самом деле вам не нужно добавлять новые файлы - избегает беспорядков в системе сборки)

Как и эта вещь: https://github.com/lukeiwanski/tensorflow/issues/89;

TL; DR - CUDA может создавать «постоянные» указатели, OpenCL должен проходить через Буферы и Аксессоры.

Компилятор SYMP-кода Codeplay (ComputeCpp) на данный момент требует OpenCL 1.2 с расширением SPIR - это процессор Intel, графический процессор Intel (работа Beignet), графический процессор AMD (хотя и старые драйверы) - появятся дополнительные платформы!

Инструкции по установке можно найти здесь: https://www.codeplay.com/portal/03-30-17-setting-up-tensorflow-with-opencl-using-sycl

Наши усилия могут быть прослежены в моей вилке TensorFlow: https://github.com/lukeiwanski/tensorflow (филиал DEV/eigen_mehdi)

Эйген используется: https://bitbucket.org/mehdi_goli/opencl (филиал по умолчанию)

Мы добираемся туда! Взносы приветствуются! :)

 Смежные вопросы

  • Нет связанных вопросов^_^