34

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

  • 我知道 OpenCL 是一个框架,可以在 GPU 和 CPU 上执行代码,使用可以编译为 SPIR 的内核。
  • Vulkan 也可以用作使用相同 SPIR 语言的计算 API。
  • SYCL 是一种新规范,允许将 OpenCL 代码编写为符合标准的 C++14。据我了解,目前还没有该规范的免费实现。

鉴于,

  • OpenCL 与 Vulkan 有何关系?我知道 OpenCL 是更高级别的并抽象了设备,但它是否(或可以)在内部使用 Vulkan?(而不是依赖于供应商特定的驱动程序)

  • Vulkan 被宣传为计算和图形 API,但是我发现计算部分的资源很少。这是为什么 ?

  • Vulkan 比 OpenGL 具有性能优势。Vulkan vs OpenCl 是否也是如此?(可悲的是,OpenCL 比 CUDA 慢而臭名昭著。)

  • SYCL 是在内部使用 OpenCL 还是可以使用 Vulkan?或者它不使用,而是依赖于低级别的、供应商特定的 API 来实现?

4

2 回答 2

28

OpenCL 与 vulkan 有何关系?我知道 OpenCL 更高级别并且抽象了设备,但是它是否(或可以)在内部使用 Vulkan?

他们根本没有任何关系。

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

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

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

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

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

Vulkan 比 OpenGL 具有性能优势。Vulkan vs OpenCl 是否也是如此?

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

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

此外,同样的事实是,您可以在 OpenCL 计算操作中执行很多您在 Vulkan CS中无法执行的操作。

SYCL 是在内部使用 OpenCL 还是可以使用 vulkan ?

来自 Khronos 集团:

SYCL(发音为“镰刀”)是一个免版税的跨平台抽象层,它建立在 OpenCL 的基础概念、可移植性和效率之上...

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

于 2016-11-20T14:23:15.850 回答
9

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 加速器

于 2016-11-20T13:39:03.123 回答