OpenCL、Vulkan、Sycl

OpenCL, Vulkan, Sycl

我正在尝试了解 OpenCL 生态系统以及 Vulkan 如何发挥作用。

鉴于此,

How does OpenCL relates to vulkan ?

他们都可以使用 queues 将可分离的工作从主机传输到 gpu,再将 gpu 传输到主机,以减少使用多线程的通信开销。 Directx-opengl 不能?

  • OpenCL:初始版本 2009 年 8 月 28 日。更广泛的硬件支持。允许使用指针,但只能在设备中使用。您可以使用线程之间共享的本地内存。更容易开始一个你好世界。命令有 api 开销,除非它们被 device-side 排队。您可以选择隐式 multi-device 同步或显式管理。大部分错误已针对 1.2 修复,但我不知道 2.0 版。

  • Vulkan:2016 年 2 月 16 日首次发布(但比 2014 年有所进步)。更窄的硬件支持。 SPIR-V 可以处理指针吗?也许不会?没有 local-memory 选项?很难开始你好世界。减少 api 开销。可以选择隐式multi-device管理吗? Dota-2 游戏和其他一些游戏仍然存在问题。同时使用图形和计算管道可以隐藏更多延迟。

如果 opencl 中有 vulkan,那么它已经对 public 隐藏了 7-9 年。如果他们可以添加它,为什么他们不为 opengl 添加它?(可能是因为 physx/cuda 的压力?)

Vulkan is advertised as both a compute and graphics api, however I found very little resources for the compute part - why is that ?

它需要更多的时间,就像opencl一样。

您可以在此处查看有关计算着色器的信息:

https://www.khronos.org/registry/vulkan/specs/1.0/xhtml/vkspec.html#fundamentals-floatingpoint

这里是一个由计算着色器管理的粒子系统的例子:

https://github.com/SaschaWillems/Vulkan/tree/master/computeparticles

下面还有光线追踪器和图像处理示例。

Vulkan has a performance advantages over OpenGL. Is the same true for Vulkan vs OpenCl?

  • Vulkan 不需要为另一个同步 API。它关于命令queues.
  • 之间的命令缓冲区同步
  • OpenCL 在使用共享缓冲区(cl-gl 或 dx-cl 互操作缓冲区)之前需要与 opengl 或 directx(或 vulkan?)同步。这会产生开销,您需要使用缓冲区交换和流水线来隐藏它。如果不存在共享缓冲区,它可以 运行 在具有 opengl 或 directx 的现代硬件上并发。

OpenCL is sadly notorious to being slower than CUDA

它曾经是,但现在它已经成熟并挑战了 cuda,特别是从所有游戏 gpus 到使用 2.1 版的 fpgas 的更广泛的硬件支持,例如在未来英特尔可以将 fpga 放入 Core i3 并启用它( soft-x86 核心 ip) many-core cpu 模型缩小了 gpu 性能与 cpu 之间的差距,以升级其 cpu-physx 游戏体验或简单地让 opencl 物理实现塑造它并使用至少 %90 die-area 而不是 soft-core 的 %10-%20 有效使用区域。

以相同的价格,AMD gpus 可以在 opencl 上更快地计算,而具有相同计算能力的 Intel igpus 消耗更少的功率。 (编辑:除非算法对 Nvidia 具有优势的缓存性能敏感)

此外,我在 HD7870 上以 1.1 Tflops 编写了 SGEMM opencl 内核和 运行 并检查了互联网,然后在 GTX680 上使用 CUDA 上的流行标题看到了相同性能的 SGEMM 标杆!(价格比gtx680/hd7870 是 2)。 (编辑:Nvidia 的 cc3.0 在读取全局数组时不使用 L1 缓存,我的内核纯粹是 local/shared 内存 + 一些寄存器 "tiled")

Does SYCL uses OpenCL internally or could it use vulkan ? Or does it use neither and instead relies on low level, vendor specific apis to be implemented ?

这里,

https://www.khronos.org/assets/uploads/developers/library/2015-iwocl/Khronos-SYCL-May15.pdf

Provides methods for dealing with targets that do not have OpenCL(yet!)

A fallback CPU implementation is debuggable!

所以它可以退回到纯线程版本(类似于java的aparapi)。

Can access OpenCL objects from SYCL objects Can construct SYCL objects from OpenCL object

Interop with OpenGL remains in SYCL - Uses the same structures/types

它使用 opencl(可能不是直接使用,但是升级了 driver 通信?),它与 opencl 并行开发,但可以回退到线程。

from the smallest OpenCL 1.2 embedded device to the most advanced OpenCL 2.2 accelerators

How does OpenCL relates to vulkan ? I understand that OpenCL is higher level and abstracts the devices, but does ( or could ) it uses Vulkan internally ?

他们完全没有关系。

嗯,他们在技术上确实使用相同的中间着色器语言,但 Vulkan 禁止内核执行模型,而 OpenCL 禁止着色器执行模型。因此,您不能只将用于 OpenCL 的着色器粘贴到 Vulkan 中,反之亦然。

Vulkan is advertised as both a compute and graphics api, however I found very little resources for the compute part - why is that ?

因为 Khronos 集团喜欢误导性的营销宣传。

Vulkan 与 OpenGL 一样,只是一种计算 API。它可能有计算着色器,但它们的功能有限。您可以在 OpenCL 计算操作中执行的操作无法通过 OpenGL/Vulkan CS 获得。

Vulkan CS 与 OpenGL 的 CS 一样,旨在用于一件事:支持图形操作。进行截头体剔除、构建间接图形命令、操纵粒子系统等。 CS 以与图形着色器相同的数值精度运行。

Vulkan has a performance advantages over OpenGL. Is the same true for Vulkan vs OpenCl?

计算系统的性能主要取决于其实施的质量。慢的不是 OpenCL;是您的 OpenCL 实现比它可能的要慢。

Vulkan CS 在这方面没有什么不同。性能将基于驱动程序的成熟度。

此外,还有一个事实是,您可以在 OpenCL 计算操作中做很多在 Vulkan CS 中不能做的事情。

Does SYCL uses OpenCL internally or could it use vulkan ?

来自 Khronos 集团:

SYCL (pronounced ‘sickle’) is a royalty-free, cross-platform abstraction layer that builds on the underlying concepts, portability and efficiency of OpenCL...

是的,它建立在 OpenCL 之上。