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 vs OpenCl 是否也是如此?
- Vulkan 不需要为另一个 API 同步。它关于命令队列之间的命令缓冲区同步。
- 在使用共享缓冲区(cl-gl 或 dx-cl 互操作缓冲区)之前,OpenCL 需要与 opengl 或 directx(或 vulkan?)同步。这有一个开销,您需要使用缓冲区交换和流水线来隐藏它。如果不存在共享缓冲区,它可以使用 opengl 或 directx 在现代硬件上同时运行。
OpenCL 因比 CUDA 慢而臭名昭著
它曾经是,但现在它已经成熟并挑战 cuda,尤其是使用 2.1 版从所有游戏 gpu 到 fpgas 的更广泛的硬件支持,例如未来英特尔可以将 fpga 放入 Core i3 并启用它(soft-x86 core ip ) 多核 cpu 模型缩小了 gpu 性能和 cpu 之间的差距,以升级其 cpu-physx 游戏体验,或者简单地让 opencl 物理实现对其进行塑造并使用至少 %90 的芯片面积而不是软核的 %10 -%20 有效使用面积。
以相同的价格,AMD gpus 可以在 opencl 上更快地计算,并且具有相同的计算能力 Intel igpus 消耗更少的功率。(编辑:除非算法对 Nvidia 占上风的缓存性能敏感)
此外,我编写了一个 SGEMM opencl 内核并在 HD7870 上以 1.1 Tflops 运行并检查了互联网,然后使用 CUDA 上的流行标题在 GTX680 上看到了相同性能的 SGEMM 基准!(gtx680/hd7870 的价格比为 2)。(编辑:Nvidia 的 cc3.0 在读取全局数组时不使用 L1 缓存,而我的内核纯粹是本地/共享内存 + 一些寄存器“平铺”)
SYCL 是在内部使用 OpenCL 还是可以使用 vulkan ?或者它不使用,而是依赖于低级别的、供应商特定的 api 来实现?
这里,
https://www.khronos.org/assets/uploads/developers/library/2015-iwocl/Khronos-SYCL-May15.pdf
说
提供处理没有 OpenCL 的目标的方法(还没有!)
备用 CPU 实现是可调试的!
所以它可以回退到纯线程版本(类似于java的aparapi)。
可以从 SYCL 对象访问 OpenCL 对象 可以从 OpenCL 对象构造 SYCL 对象
与 OpenGL 的互操作仍保留在 SYCL 中 - 使用相同的结构/类型
它使用 opencl(可能不是直接使用,而是通过升级的驱动程序通信?),它与 opencl 并行开发,但可以回退到线程。
从最小的 OpenCL 1.2 嵌入式设备到最先进的 OpenCL 2.2 加速器