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 ускорители