OpenCL,Vulkan,Sycl

cor*_*tin 27 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来实现?

Nic*_*las 19

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

他们完全没有关系.

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

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

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

Vulkan不再是OpenGL的计算API.它可能有计算着色器,但它们的功能有限.您可以通过OpenGL/Vulkan CS无法在OpenCL计算操作中执行此类操作.

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

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

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

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

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

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

来自Khronos集团:

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

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


hus*_*sik 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并启用它(soft-x86 core ip )多核cpu模型缩小了gpu性能和cpu之间的差距,以升级其cpu-physx游戏体验,或者简单地让opencl物理实现形成它并使用至少%90 die-area而不是soft-core的%10 - %20有效使用区域.

以相同的价格,AMD gpus可以在opencl上更快地计算,并且具有相同的计算能力,英特尔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加速器