OpenCL,Vulkan,Sycl

时间:2016-11-20 11:47:45

标签: opencl vulkan spir-v

我试图了解OpenCL生态系统以及vulkan如何发挥作用。

  • 我知道OpenCL是一个执行代码到gpus和cpu的框架 - 使用可以编译为SPIR的内核
  • Vulkan也可以用作使用相同SPIR语言的计算API
  • SYCL是一个新规范,允许编写opencl代码作为符合c ++ 14的适当标准。我的理解是,该规范还没有自由实现。

鉴于:

  • OpenCL如何与vulkan相关?我知道OpenCL是更高级别并抽象设备,但是它(或可能)内部使用Vulkan吗? (而不是依赖供应商特定的驱动程序)

  • Vulkan被宣传为计算和图形API,但我发现计算部分的资源非常少 - 为什么会这样?

  • Vulkan比OpenGL具有性能优势。 Vulkan与OpenCl的情况是否相同? (OpenCL因为比CUDA慢而臭名昭着)

  • SYCL内部使用OpenCL还是使用vulkan?或者它既不使用,而是依赖于低级别,供应商特定的apis来实现?

2 个答案:

答案 0 :(得分:13)

  

OpenCL如何与vulkan相关?我知道OpenCL是更高级别的并且抽象设备,但是它(或可能)它在内部使用Vulkan吗?

他们根本没有关系。

嗯,他们在技术上使用相同的中间着色器语言,但Vulkan禁止使用内核执行模型,而OpenCL禁止使用Shader执行模型。因此,你不能只为OpenCL设计一个着色器并将其粘贴在Vulkan中,反之亦然。

  

Vulkan被宣传为计算和图形API,但我发现计算部分的资源非常少 - 为什么会这样?

因为Khronos集团喜欢误导营销模糊。

Vulkan不再是OpenGL的计算API。它可能有计算着色器,但它们的功能有限。您可以在OpenCL / Vulkan CS中使用OpenCL计算操作中可以执行的操作。

Vulkan CS,就像OpenGL的CS一样,旨在用于一件事:支持图形操作。做截锥体剔除,构建间接图形命令,操纵粒子系统和其他类似的东西。 CS的运算精度与图形着色器相同。

  

Vulkan比OpenGL具有性能优势。 Vulkan与OpenCl的情况是否相同?

计算系统的性能主要取决于其实施的质量。这不是OpenCL那么慢;这是你的OpenCL实现,它比它可能的速度慢。

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

此外,还有一个事实是,你可以在OpenCL计算操作中做很多事情,而你在

中无法做

  

SYCL内部使用OpenCL还是使用vulkan?

来自Khronos集团:

  

SYCL(发音为'sickle')是一个免版税的跨平台抽象层,它基于OpenCL的基本概念,可移植性和效率......

所以是的,它建立在OpenCL之上。

答案 1 :(得分:7)

  

OpenCL如何与vulkan相关?

他们都可以使用队列来管理从主机到gpu和gpu的可分离工作到主机,以减少使用多个线程的通信开销。 Directx-opengl不能?

  • OpenCL:2009年8月28日发布。更广泛的硬件支持。指针允许但仅用于设备。您可以使用线程之间共享的本地内存。开始一个问候世界要容易得多。具有api开销的命令,除非它们是设备端排队的。您可以选择隐式多设备同步或显式管理。错误大多固定为1.2,但我不知道版本2.0。

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

如果opencl中有vulkan,那么它已被公开隐藏了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

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

  

Vulkan比OpenGL具有性能优势。同样如此   Vulkan与OpenCl?

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

OpenCL因为比CUDA慢得多而臭名昭着

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

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

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

  

SYCL内部使用OpenCL还是使用vulkan?或者它   不使用,而是依赖于低级别,供应商特定的apis   实施?

在这里,

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

  

提供处理没有目标的方法   的OpenCL(还!)

     

后备CPU实现是可调试的!

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

  

可以从SYCL对象访问OpenCL对象   可以从OpenCL对象

构造SYCL对象      

与OpenGL的Interop仍然在SYCL中    - 使用相同的结构/类型

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

  

从最小的OpenCL 1.2嵌入式设备到最先进的   OpenCL 2.2加速器