Доступен (https://sourceforge.net/p/pocl/mailman/message/36162579/) релиз проекта PoCL 1.0 (http://portablecl.org/) (Portable Computing Language OpenCL), развивающего реализацию стандарта OpenCL, независимую от производителей графических ускорителей и позволяющую использовать различные бэкенды для выполнения OpenCL-ядер на разных типах графических и центральных процессоров. Код проекта распространяется (https://github.com/pocl/pocl/) под лицензией MIT.
Поддерживается работа на платформах X86_64, MIPS32, ARM v7, AMD HSA APUs и различных специализированных TTA-процессорах (Transport Triggered Architecture (https://ru.wikipedia.org/wiki/Transport_triggered_architectu... c архитектурой VLIW (https://ru.wikipedia.org/wiki/VLIW).Реализация компилятора ядер OpenCL построена на базе LLVM, а в качестве фронтэнда для OpenCL C используется Clang. Для обеспечения должной переносимости и производительности компилятор ядер OpenCL может генерировать комбинированные функции, которые могут использовать различные аппаратные ресурсы для распараллеливания выполнения кода, такие как VLIW, суперскалярность, SIMD, SIMT, многоядерность и многопоточность. Имеется поддержка ICD-драйверов
(Installable Client Driver). Присутствуют бэкенды для обеспечения работы через CPU, ASIP (TCE/TTA), GPU на базе архитектуры HSA (https://en.wikipedia.org/wiki/Heterogeneous_System_Architect... и GPU NVIDIA (CUDA).В новой версии (https://github.com/pocl/pocl/releases/tag/v1.0) добавлена экспериментальная поддержка GPU NVIDIA через новый бэкенд CUDA. В бэкенде, использующем CPU, полностью реализована спецификация OpenCL 1.2, а также поддержка отдельных элементов стандарта OpenCL 2.0. Проведена оптимизация производительности на многоядерных системах при выполнении большого числа мелких ядер OpenCL. Реализована возможность использования выпусков LLVM/Clang 4.0 и 5.0. Обновлён бинарный формат, в котором нарушена совместимость с прошлыми выпусками. Улучшена поддержка инструкций AVX512.
URL: http://portablecl.org/pocl-1.0.html
Новость: http://www.opennet.dev/opennews/art.shtml?num=47766
А Радеоны планируют?
Только для nvидеокарт.
Поверх OpenCL?
Пролистал сайт проекта - но никак не нашел ЗАЧЕМ они это делают :-) И как привязанный к бинарным драйверам проект может быть portable?
Пока они это писали, слово Portable приобрело другой смысл?
> как привязанный к бинарным драйверам проект может быть portable?Он не привязан к бинарным драйверам. Он вполне может выполняться на CPU без драйверов вообще. Поэтому и portable.
> не нашел ЗАЧЕМ они это делают
Мне это тоже не совсем понятно. Они на сайте, что одна из целей -- экспериментирование с самой идеей подобных вычислений, но, мне кажется, эта цель не объясняет того количества усилий, которое вложено в PoCL. Может быть фишка в том, что имея софтварную реализацию, можно затем использовать любое доступное устройство, для того, чтобы её ускорить? Взять например видяшку, которая не может в OpenCL, но может в OpenGL, и тогда можно использовать шейдеры для того, чтобы часть работы всё же переложить с CPU на GPU?
Сложно сказать, короче. Я думаю, подобные вопросы надо задавать авторам.
>имея софтварную реализацию, можно затем использовать любое доступное устройство, для того, чтобы её ускоритьНамекаешь на майнинг на ботнетах?
>>Он вполне может выполняться на CPU без драйверов вообще. Поэтому и portable.На VLIW ? Без адаптации компилятора под конкретный проц ничего не выйдет. Так умер itanium, так умер Cell, только HP с его спецпроцами и Эльбрус немного дышат. Mac весь в OpenCL, но по прежнему это не помогает против винды с Direct-ами. Они в разы быстрее.
> Так умер itanium, так умер CellДавно Cell стал VLIW?
> Mac весь в OpenCL, но по прежнему это не помогает против винды с Direct-ами. Они в разы быстрее.Народ тупеет. Раньше каждый программер хоть на Васике, хоть на Лиспе с Фортраном и Адой знал ассемблер.
Сейчас они даже не осилят банальные сдвиги: x = 3|3 >> 3|3 << 3|3 >> 3|3; , причём только неделю буду учить приоритеты.
>>Давно Cell стал VLIW?ИМХО фактически оно и есть. Только маршалер мощный прикрутили, но всю оптимизацию опять свалили на компилятор.
>>причём только неделю буду учить приоритеты.
Да, а раньше за 6 дней управлялись. Правда и процессоры содержали примерно на 3 порядка меньше транзисторов :-)
>>>Давно Cell стал VLIW?
> ИМХО фактически оно и есть.пруфы давай, а не своё имхо, заменяющее факты
>>>>Давно Cell стал VLIW?
>> ИМХО фактически оно и есть.
> пруфы давай, а не своё имхо, заменяющее фактыШкольникам в школу - арихитектуру процов смотри в в техманах. Сам PowerPC уже имеет зачатки VLIW с его логикой условных переходов на уровне компилятора. SPE у CELL изначально было VLIW чистым, но потом переделали под гибрида VLIW/SIMD, тк не справлялись к выходу. PPE фактически хитрожопый блок конвейера с возможностью распределять команды по блокам (таки извращенный VLIW маршалер выходит).
> Сам PowerPC уже имеет зачатки VLIWПочатки, йопт. Ты будешь теперь любой проц. не совместимый с x86 подогонять под VLIW?
Cell обычный SIMD - куча SSE регистров/команд в одной коробке.
Программирование под Cell - есть линейная алгебра.
Чтоб сложить два вектора или вектор с матрицей нужно определить все их элементы.
От этого он не становиться VLIW.
> SPE у CELL изначально было VLIW чистым.Хватит уже фантазий, не было ни изначально, ни первоначально.
Был IBM Cell BE, в плейстейшоне и в блейдах. Всё.
Остальное - лабораторные метания, которые никто не видел.> условных переходов на уровне компилятора.
Я те открою тайну if (a == 1) { goto label; }... появилось ещё в 40-е годы.
Переход по адресу программили ещё в MSDOS, для драйверов это обычная практика.
> Я те открою тайну if (a == 1) { goto label; }... появилось ещё в 40-е годы.скобок небыло (областей видимости) ;)...
>>Cell обычный SIMD - куча SSE регистров/команд в одной коробке.Там вообще-то PPE которым таки компилятор мог отправить несколько команд на SPE и он распределял их по блоком. Прямая упаковка команд минуя конвейер. Не было реализовано фактически.
>>Cell обычный SIMD - куча SSE регистров/команд в одной коробке.
Там вообще был общий доступ к памяти всех узлов - полностью когерентный и не потокобезопастный. Это уже не SIMD - он может только когерентный доступ предоставить, а RISC так вообще про оперативную память знать не должен.
>>Я те открою тайну if (a == 1) { goto label; }... появилось ещё в 40-е годы.
ты не путай пусторылый jump с вычислением вероятности перехода. Еще и скажи, что тогда ret выходил сразу на хвост рекурсии и не шаманил стэк.
Я тебя тайну открою - While и for в компиляторе для Power имели доп признак условного перехода, до того как Intel вылизало свой предсказатель ветвлений на уровне декодера. Фактически каждый вызов содержал две команды для проца.
ЗЫ: Спасибо за разговор, приятно поспорить.
>Mac весь в OpenCL, но по прежнему это не помогает против винды с Direct-ами. Они в разы быстрее.OpenCL или все-таки OpenGL? Если первое, то Вы не теплое ли с мягким сраниваете? Разве на DirectX можно вычисления делать (без костылей)?
> Разве на DirectX можно вычисления делать?DirectCompute?
Расскажите подробнее о спецпроцессорах HP. Или такой же пук в лужу как и с Cell?
HP EPIC таки и прочее. Тот-же Merced разрабатывался с патентами HP. Хочешь поэкспериментировать см HP VEX. На текущий момент - полутруп.
Intel EPIC - общее название для процессоров Merced aka Itanium aka Itanic. Да, HP и Intel какое-то время разрабатывали их вместе, но это всё никак не укладывается в Вашу фразу
> Так умер itanium, так умер Cell, только HP с его спецпроцами и Эльбрус немного дышатгде Вы перечисляете и Itanium, и некие спецпроцессоры HP как равноправные и независимые продукты, один из которых жив, второй - мёртв.
>> Мне это тоже не совсем понятно.ну хотят иметь гетерогенную платформу вычислений с подключаемыми back-end'ами. А фронт типа как один)
Это же опесорс. Пишут не то, что нужно остальным, а то что хосется самим.
К каким бинарным драйверам оно привязано? Делается же в первую очередь для выполнения OpenCL на CPU, используют в конце-концов clang+LLVM.
Плюс в том, что хорошо написанный OpenCL код проще ложится на SIMD. И программист заботится о параллельности, и типы данных соответствуют.
делается оно в первую очередь для параллельности и желательно на стороне GPU & FPGA.
Кто сам работал, это действительно portable? Можно без GPU, и т.д.? По крайней мере, без морей пота и крови?
Эх была же BeOS которая умела использовать все вычислительные ресурсы как сопроцессоры, даже DSP из звуковой карты... нет - понавыдумывають всякой фигни и теперь мучаются.
> Эх была же BeOS которая умела использовать все вычислительные ресурсы как сопроцессоры,
> даже DSP из звуковой карты... нет - понавыдумывають всякой фигни и
> теперь мучаются.До сих пор с теплотой вспоминаю ее интерфейс - ничего не украли, сделали очень красиво и практично. И таки да первая desktop os с полной поддержкой многопроцессорности.
А многочиповость это смотри AMIGA OS. Там только не было нормального многозадачного режима.
> В бэкенде, использующем CPU, полностью реализована спецификация OpenCL 1.2Это не правда. В документации чётко написано, что не полностью:
http://portablecl.org/docs/html/features.html> The known unsupported OpenCL (both 1.x and 2.x) features are listed here as encountered.
> Frontend/Clang
> OpenCL 1.x
> OpenGL interoperability extension
> SPIR extension
> Это не правда. В документации чётко написано, что не полностью:Сам смысл релиза 1.0 был в полной поддержке OpenCL 1.2.
Может просто документацию ещё не обновили, в анонсе написано, что полностью c отдельными ограничениями:Full conformance with OpenCL 1.2 standard on CPU backend (with some
limitations, see the documentation for details).
> Full conformance ... with some limitationsПрограммисты, конечно, не математики, но даже у них такие формулировки не должны быть допустимы: или полная, или неполная.
> Может просто документацию ещё не обновили
Было бы неплохо, если так. Потому что выглядит как раз, что в документации эти "ограничения" и остались. Вот только проблема, что это не какие-то ограничения, а полностью отсутствующие фичи.
Сейчас погрепал 'CL.*GL':
lib/CL/pocl_opengl.c: POCL_ABORT_UNIMPLEMENTED("The entire clCreateFromGLTexture call");
lib/CL/pocl_opengl.c: POCL_ABORT_UNIMPLEMENTED("The entire clCreateFromGLBuffer call");
lib/CL/pocl_opengl.c: POCL_ABORT_UNIMPLEMENTED("The entire clCreateFromGLRenderbuffer call");
lib/CL/pocl_opengl.c: POCL_ABORT_UNIMPLEMENTED("The entire clGetGLObjectInfo call");
lib/CL/pocl_opengl.c: POCL_ABORT_UNIMPLEMENTED("The entire clGetGLTextureInfo call");
lib/CL/pocl_opengl.c: POCL_ABORT_UNIMPLEMENTED("The entire clEnqueueAcquireGLObjects call");
lib/CL/pocl_opengl.c: POCL_ABORT_UNIMPLEMENTED("The entire clEnqueueReleaseGLObjects call");
lib/CL/pocl_opengl.c: POCL_ABORT_UNIMPLEMENTED("The entire clGetGLContextInfoKHR call");:(
Лучше бы куду поверх opencl запилили, чтобы владельцы любых видеокарт могли запускать tensorflow.
где брать бинарники?