我试图了解OpenCL生态系统以及vulkan如何发挥作用。
鉴于:
OpenCL如何与vulkan相关?我知道OpenCL是更高级别并抽象设备,但是它(或可能)内部使用Vulkan吗? (而不是依赖供应商特定的驱动程序)
Vulkan被宣传为计算和图形API,但我发现计算部分的资源非常少 - 为什么会这样?
Vulkan比OpenGL具有性能优势。 Vulkan与OpenCl的情况是否相同? (OpenCL因为比CUDA慢而臭名昭着)
SYCL内部使用OpenCL还是使用vulkan?或者它既不使用,而是依赖于低级别,供应商特定的apis来实现?
答案 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游戏和其他一些游戏仍然有问题。同时使用图形和计算管道可以隐藏更多的延迟。
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?
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加速器