OpenCL, Vulkan, Sycl
Я пытаюсь понять экосистему OpenCL и как Vulkan вступает в игру.
- Я понимаю, что OpenCL - это среда для выполнения кода как на GPU, так и на CPU, используя ядра, которые могут быть скомпилированы в SPIR.
- Vulkan также можно использовать в качестве compute-API с использованием того же языка SPIR.
- SYCL - это новая спецификация, которая позволяет писать код OpenCL как соответствующий стандарту С++ 14. Насколько я понимаю, пока нет бесплатных реализаций этой спецификации.
Учитывая это,
Как OpenCL относится к Vulkan? Я понимаю, что OpenCL более высокого уровня и абстрагирует устройства, но использует ли (или может) он Vulkan для внутреннего использования? (вместо того, чтобы полагаться на драйверы, специфичные для поставщика)
Vulkan рекламируется как вычислительный и графический API, однако я нашел очень мало ресурсов для вычислительной части. Почему это так?
Vulkan имеет преимущества в производительности по сравнению с OpenGL. То же самое верно для Vulkan против OpenCl? (OpenCL печально известен своей медлительностью, чем CUDA.)
Использует ли SYCL OpenCL внутри или может использовать Vulkan? Или он не использует ни один, а вместо этого полагается на низкоуровневые, специфичные для поставщика API для реализации?
Ответы
Ответ 1
Как OpenCL относится к вулкану? Я понимаю, что OpenCL - это более высокий уровень и абстрагирует устройства, но (или может) он использует Vulkan внутренне?
Они вообще не связаны друг с другом.
Ну, они технически используют один и тот же промежуточный шейдерный язык, но Вулкан запрещает модель исполнения ядра, а OpenCL запрещает модель исполнения Shader. Из-за этого вы не можете просто взять шейдер, предназначенный для OpenCL, и вставить его в Vulkan, или наоборот.
Vulkan объявляется как вычислительным, так и графическим api, однако я нашел очень мало ресурсов для вычислительной части - почему?
Потому что Khronos Group любит вводить в заблуждение маркетинговые рекламные ролики.
Vulkan больше не является вычислительным API, чем OpenGL. У него могут быть Compute Shaders, но они ограничены по функциональности. Тип материала, который вы можете сделать в операции OpenCL, просто недоступен через OpenGL/Vulkan CS.
Vulkan CS, как и OpenGL CS, предназначены для использования в одном: для поддержки графических операций. Выполнять отсев, создавать непрямые графические команды, управлять системами частиц и другие подобные вещи. CS работают с той же числовой точностью, что и графические шейдеры.
У Vulkan есть преимущества перед OpenGL. То же самое верно для Vulkan vs OpenCl?
Производительность вычислительной системы основана главным образом на качестве ее реализации. Это не OpenCL, что медленно; это ваша реализация OpenCL, которая медленнее, чем это возможно.
Vulkan CS ничем не отличается в этом отношении. Производительность будет основана на зрелости драйверов.
Кроме того, существует тот факт, что, опять же, есть много вещей, которые вы можете сделать в операции вычисления OpenCL, которую вы не можете сделать в Vulkan CS.
Использует ли SYCL OpenCL внутренне или может использовать vulkan?
Из группы Khronos:
SYCL (произносится как "серп" ) - это безналичный, кросс-платформенный уровень абстракции, основанный на базовых концепциях, переносимости и эффективности OpenCL...
Итак, да, он построен поверх OpenCL.
Ответ 2
Как OpenCL относится к вулкану?
Они оба могут передавать отдельную работу от хоста к gpu и gpu к хосту, используя очереди, чтобы уменьшить накладные расходы на связь, используя несколько потоков. Directx-opengl не может?
OpenCL: первый выпуск 28 августа 2009 г. Расширенная поддержка оборудования. Указатели разрешены, но только для использования в устройстве. вы можете использовать локальную память, разделяемую между потоками. Намного легче начать здравствуй мир. Издержки API для команд, если они не находятся в очереди на стороне устройства. Вы можете выбрать неявную синхронизацию нескольких устройств или явное управление. Ошибки в основном исправлены для 1.2, но я не знаю о версии 2.0.
Vulkan: первый выпуск 16 февраля 2016 года (но прогресс с 2014 года). Более узкая аппаратная поддержка. Может ли SPIR-V работать с указателями? Возможно, нет? Нет опции локальной памяти? Трудно начать привет мир. Меньше api накладных расходов. Можете ли вы выбрать неявное управление несколькими устройствами? Все еще глючит для игры Dota-2 и некоторых других игр. Использование графики и конвейера вычислений одновременно может скрыть еще большую задержку.
если в opencl был вулкан, то он был скрыт от публики в течение 7-9 лет. Если они могли бы добавить это, то почему они не сделали это для opengl? (Может быть, из-за давления от PhysX/CUDA?)
Vulkan рекламируется как компьютерный и графический API, однако я нашел очень мало ресурсов для вычислительной части - почему это так?
На это нужно больше времени, как на opencl.
Вы можете проверить информацию о вычислительных шейдерах здесь:
https://www.khronos.org/registry/vulkan/specs/1.0/xhtml/vkspec.html#fundamentals-floatingpoint
Вот пример системы частиц, управляемой вычислительными шейдерами:
https://github.com/SaschaWillems/Vulkan/tree/master/computeparticles
ниже также есть raytracers и примеры обработки изображений.
Vulkan имеет преимущества в производительности по сравнению с OpenGL. То же самое верно для Vulkan против OpenCl?
- Vulkan не нужно синхронизировать для другого API. О синхронизации командных буферов между очередями команд.
- OpenCL необходимо синхронизировать с opengl или directx (или vulkan?) Перед использованием общего буфера (буферы взаимодействия cl-gl или dx-cl). Это накладные расходы, и вы должны скрыть их с помощью замены буфера и конвейерной обработки. Если разделяемого буфера не существует, он может работать одновременно на современном оборудовании с opengl или directx.
OpenCL печально известен своей медлительностью, чем CUDA
Так и было, но теперь его зрелость и проблемы cuda, особенно с гораздо более широкой аппаратной поддержкой от всех игровых процессоров до fpgas с использованием версии 2.1, например, в будущем Intel может установить fpga в Core i3 и включить ее для (soft-x86 core ip ) модель многоядерного процессора, сокращающая разрыв между производительностью графического процессора и процессором, чтобы улучшить игровой процесс на процессоре физика или просто позволить реализации физики opencl придать ей форму и использовать как минимум 90% площади кристалла вместо мягкого ядра% 10- %20 эффективно используемой площади.
При той же цене AMD GPU может быстрее вычислять на OpenCl и с той же вычислительной мощностью Intel igpus потребляет меньше энергии. (изменить: за исключением случаев, когда алгоритмы чувствительны к производительности кэша, где Nvidia имеет верхний предел)
Кроме того, я написал ядро SGEMM opencl и запустил HD7870 со скоростью 1,1 Tflops и проверил интернет, а затем увидел хенчмарк SGEMM на GTX680 для той же производительности, используя популярное название на CUDA! (Соотношение цены gtx680/hd7870 было 2). (редактировать: Nvidia cc3.0 не использует кэш L1 при чтении глобальных массивов, а мое ядро было чисто локальной/разделяемой памятью + некоторые регистры "мозаичными")
Использует ли SYCL OpenCL для внутреннего использования или может использовать vulkan? Или делает это не используйте ни один, а вместо этого полагается на низкий уровень быть реализован?
Здесь,
https://www.khronos.org/assets/uploads/developers/library/2015-iwocl/Khronos-SYCL-May15.pdf
говорит
Предоставляет методы для работы с целями, которые не имеют OpenCL (пока!)
Резервная реализация ЦП отлаживается!
поэтому он может вернуться к чистой версии с резьбой (аналогично Java Aparapi).
Может получить доступ к объектам OpenCL из объектов SYCL Может создавать объекты SYCL из объекта OpenCL
Взаимодействие с OpenGL остается в SYCL - Использует те же структуры/типы
он использует opencl (может быть, не напрямую, но с обновленным драйвером связи?), он развивается параллельно с opencl, но может переходить на потоки.
от самого маленького встраиваемого устройства OpenCL 1.2 до самого продвинутого OpenCL 2.2 ускорители