OpenCL、Vulkan、Sycl
OpenCL, Vulkan, Sycl
我正在尝试了解 OpenCL 生态系统以及 Vulkan 如何发挥作用。
- 我知道 OpenCL 是一个在 GPU 和 CPU 上执行代码的框架,使用可以编译为 SPIR 的内核。
- Vulkan 也可以用作计算-API 使用相同的 SPIR 语言。
- SYCL 是一种新规范,允许将 OpenCL 代码编写为符合标准的 C++14。据我了解,目前还没有该规范的免费实施。
鉴于此,
OpenCL 与 Vulkan 有什么关系?我知道 OpenCL 是更高级别的并且抽象了设备,但它是否(或可以)在内部使用 Vulkan? (而不是依赖供应商特定的驱动程序)
Vulkan 被宣传为计算和图形 API,但是我发现计算部分的资源很少。这是为什么?
Vulkan 与 OpenGL 相比具有性能优势。 Vulkan 与 OpenCl 是否相同? (遗憾的是,OpenCL 因比 CUDA 慢而臭名昭著。)
SYCL 是在内部使用 OpenCL 还是可以使用 Vulkan?还是两者都不使用,而是依赖低级别的供应商特定 API 来实现?
How does OpenCL relates to vulkan ?
他们都可以使用 queues 将可分离的工作从主机传输到 gpu,再将 gpu 传输到主机,以减少使用多线程的通信开销。 Directx-opengl 不能?
OpenCL:初始版本 2009 年 8 月 28 日。更广泛的硬件支持。允许使用指针,但只能在设备中使用。您可以使用线程之间共享的本地内存。更容易开始一个你好世界。命令有 api 开销,除非它们被 device-side 排队。您可以选择隐式 multi-device 同步或显式管理。大部分错误已针对 1.2 修复,但我不知道 2.0 版。
Vulkan:2016 年 2 月 16 日首次发布(但比 2014 年有所进步)。更窄的硬件支持。 SPIR-V 可以处理指针吗?也许不会?没有 local-memory 选项?很难开始你好世界。减少 api 开销。可以选择隐式multi-device管理吗? Dota-2 游戏和其他一些游戏仍然存在问题。同时使用图形和计算管道可以隐藏更多延迟。
如果 opencl 中有 vulkan,那么它已经对 public 隐藏了 7-9 年。如果他们可以添加它,为什么他们不为 opengl 添加它?(可能是因为 physx/cuda 的压力?)
Vulkan is advertised as both a compute and graphics api, however I
found very little resources for the compute part - why is that ?
它需要更多的时间,就像opencl一样。
您可以在此处查看有关计算着色器的信息:
https://www.khronos.org/registry/vulkan/specs/1.0/xhtml/vkspec.html#fundamentals-floatingpoint
这里是一个由计算着色器管理的粒子系统的例子:
https://github.com/SaschaWillems/Vulkan/tree/master/computeparticles
下面还有光线追踪器和图像处理示例。
Vulkan has a performance advantages over OpenGL. Is the same true for
Vulkan vs OpenCl?
- Vulkan 不需要为另一个同步 API。它关于命令queues.
之间的命令缓冲区同步
- OpenCL 在使用共享缓冲区(cl-gl 或 dx-cl 互操作缓冲区)之前需要与 opengl 或 directx(或 vulkan?)同步。这会产生开销,您需要使用缓冲区交换和流水线来隐藏它。如果不存在共享缓冲区,它可以 运行 在具有 opengl 或 directx 的现代硬件上并发。
OpenCL is sadly notorious to being slower than CUDA
它曾经是,但现在它已经成熟并挑战了 cuda,特别是从所有游戏 gpus 到使用 2.1 版的 fpgas 的更广泛的硬件支持,例如在未来英特尔可以将 fpga 放入 Core i3 并启用它( soft-x86 核心 ip) many-core cpu 模型缩小了 gpu 性能与 cpu 之间的差距,以升级其 cpu-physx 游戏体验或简单地让 opencl 物理实现塑造它并使用至少 %90 die-area 而不是 soft-core 的 %10-%20 有效使用区域。
以相同的价格,AMD gpus 可以在 opencl 上更快地计算,而具有相同计算能力的 Intel igpus 消耗更少的功率。 (编辑:除非算法对 Nvidia 具有优势的缓存性能敏感)
此外,我在 HD7870 上以 1.1 Tflops 编写了 SGEMM opencl 内核和 运行 并检查了互联网,然后在 GTX680 上使用 CUDA 上的流行标题看到了相同性能的 SGEMM 标杆!(价格比gtx680/hd7870 是 2)。 (编辑:Nvidia 的 cc3.0 在读取全局数组时不使用 L1 缓存,我的内核纯粹是 local/shared 内存 + 一些寄存器 "tiled")
Does SYCL uses OpenCL internally or could it use vulkan ? Or does it
use neither and instead relies on low level, vendor specific apis to
be implemented ?
这里,
https://www.khronos.org/assets/uploads/developers/library/2015-iwocl/Khronos-SYCL-May15.pdf
说
Provides methods for dealing with targets that do not have
OpenCL(yet!)
A fallback CPU implementation is debuggable!
所以它可以退回到纯线程版本(类似于java的aparapi)。
Can access OpenCL objects from SYCL objects
Can construct SYCL objects from OpenCL object
Interop with OpenGL remains in SYCL
- Uses the same structures/types
它使用 opencl(可能不是直接使用,但是升级了 driver 通信?),它与 opencl 并行开发,但可以回退到线程。
from the smallest OpenCL 1.2 embedded device to the most advanced
OpenCL 2.2 accelerators
How does OpenCL relates to vulkan ? I understand that OpenCL is higher level and abstracts the devices, but does ( or could ) it uses Vulkan internally ?
他们完全没有关系。
嗯,他们在技术上确实使用相同的中间着色器语言,但 Vulkan 禁止内核执行模型,而 OpenCL 禁止着色器执行模型。因此,您不能只将用于 OpenCL 的着色器粘贴到 Vulkan 中,反之亦然。
Vulkan is advertised as both a compute and graphics api, however I found very little resources for the compute part - why is that ?
因为 Khronos 集团喜欢误导性的营销宣传。
Vulkan 与 OpenGL 一样,只是一种计算 API。它可能有计算着色器,但它们的功能有限。您可以在 OpenCL 计算操作中执行的操作无法通过 OpenGL/Vulkan CS 获得。
Vulkan CS 与 OpenGL 的 CS 一样,旨在用于一件事:支持图形操作。进行截头体剔除、构建间接图形命令、操纵粒子系统等。 CS 以与图形着色器相同的数值精度运行。
Vulkan has a performance advantages over OpenGL. Is the same true for Vulkan vs OpenCl?
计算系统的性能主要取决于其实施的质量。慢的不是 OpenCL;是您的 OpenCL 实现比它可能的要慢。
Vulkan CS 在这方面没有什么不同。性能将基于驱动程序的成熟度。
此外,还有一个事实是,您可以在 OpenCL 计算操作中做很多在 Vulkan CS 中不能做的事情。
Does SYCL uses OpenCL internally or could it use vulkan ?
来自 Khronos 集团:
SYCL (pronounced ‘sickle’) is a royalty-free, cross-platform abstraction layer that builds on the underlying concepts, portability and efficiency of OpenCL...
是的,它建立在 OpenCL 之上。
我正在尝试了解 OpenCL 生态系统以及 Vulkan 如何发挥作用。
- 我知道 OpenCL 是一个在 GPU 和 CPU 上执行代码的框架,使用可以编译为 SPIR 的内核。
- Vulkan 也可以用作计算-API 使用相同的 SPIR 语言。
- SYCL 是一种新规范,允许将 OpenCL 代码编写为符合标准的 C++14。据我了解,目前还没有该规范的免费实施。
鉴于此,
OpenCL 与 Vulkan 有什么关系?我知道 OpenCL 是更高级别的并且抽象了设备,但它是否(或可以)在内部使用 Vulkan? (而不是依赖供应商特定的驱动程序)
Vulkan 被宣传为计算和图形 API,但是我发现计算部分的资源很少。这是为什么?
Vulkan 与 OpenGL 相比具有性能优势。 Vulkan 与 OpenCl 是否相同? (遗憾的是,OpenCL 因比 CUDA 慢而臭名昭著。)
SYCL 是在内部使用 OpenCL 还是可以使用 Vulkan?还是两者都不使用,而是依赖低级别的供应商特定 API 来实现?
How does OpenCL relates to vulkan ?
他们都可以使用 queues 将可分离的工作从主机传输到 gpu,再将 gpu 传输到主机,以减少使用多线程的通信开销。 Directx-opengl 不能?
OpenCL:初始版本 2009 年 8 月 28 日。更广泛的硬件支持。允许使用指针,但只能在设备中使用。您可以使用线程之间共享的本地内存。更容易开始一个你好世界。命令有 api 开销,除非它们被 device-side 排队。您可以选择隐式 multi-device 同步或显式管理。大部分错误已针对 1.2 修复,但我不知道 2.0 版。
Vulkan:2016 年 2 月 16 日首次发布(但比 2014 年有所进步)。更窄的硬件支持。 SPIR-V 可以处理指针吗?也许不会?没有 local-memory 选项?很难开始你好世界。减少 api 开销。可以选择隐式multi-device管理吗? Dota-2 游戏和其他一些游戏仍然存在问题。同时使用图形和计算管道可以隐藏更多延迟。
如果 opencl 中有 vulkan,那么它已经对 public 隐藏了 7-9 年。如果他们可以添加它,为什么他们不为 opengl 添加它?(可能是因为 physx/cuda 的压力?)
Vulkan is advertised as both a compute and graphics api, however I found very little resources for the compute part - why is that ?
它需要更多的时间,就像opencl一样。
您可以在此处查看有关计算着色器的信息:
https://www.khronos.org/registry/vulkan/specs/1.0/xhtml/vkspec.html#fundamentals-floatingpoint
这里是一个由计算着色器管理的粒子系统的例子:
https://github.com/SaschaWillems/Vulkan/tree/master/computeparticles
下面还有光线追踪器和图像处理示例。
Vulkan has a performance advantages over OpenGL. Is the same true for Vulkan vs OpenCl?
- Vulkan 不需要为另一个同步 API。它关于命令queues. 之间的命令缓冲区同步
- OpenCL 在使用共享缓冲区(cl-gl 或 dx-cl 互操作缓冲区)之前需要与 opengl 或 directx(或 vulkan?)同步。这会产生开销,您需要使用缓冲区交换和流水线来隐藏它。如果不存在共享缓冲区,它可以 运行 在具有 opengl 或 directx 的现代硬件上并发。
OpenCL is sadly notorious to being slower than CUDA
它曾经是,但现在它已经成熟并挑战了 cuda,特别是从所有游戏 gpus 到使用 2.1 版的 fpgas 的更广泛的硬件支持,例如在未来英特尔可以将 fpga 放入 Core i3 并启用它( soft-x86 核心 ip) many-core cpu 模型缩小了 gpu 性能与 cpu 之间的差距,以升级其 cpu-physx 游戏体验或简单地让 opencl 物理实现塑造它并使用至少 %90 die-area 而不是 soft-core 的 %10-%20 有效使用区域。
以相同的价格,AMD gpus 可以在 opencl 上更快地计算,而具有相同计算能力的 Intel igpus 消耗更少的功率。 (编辑:除非算法对 Nvidia 具有优势的缓存性能敏感)
此外,我在 HD7870 上以 1.1 Tflops 编写了 SGEMM opencl 内核和 运行 并检查了互联网,然后在 GTX680 上使用 CUDA 上的流行标题看到了相同性能的 SGEMM 标杆!(价格比gtx680/hd7870 是 2)。 (编辑:Nvidia 的 cc3.0 在读取全局数组时不使用 L1 缓存,我的内核纯粹是 local/shared 内存 + 一些寄存器 "tiled")
Does SYCL uses OpenCL internally or could it use vulkan ? Or does it use neither and instead relies on low level, vendor specific apis to be implemented ?
这里,
https://www.khronos.org/assets/uploads/developers/library/2015-iwocl/Khronos-SYCL-May15.pdf
说
Provides methods for dealing with targets that do not have OpenCL(yet!)
A fallback CPU implementation is debuggable!
所以它可以退回到纯线程版本(类似于java的aparapi)。
Can access OpenCL objects from SYCL objects Can construct SYCL objects from OpenCL object
Interop with OpenGL remains in SYCL - Uses the same structures/types
它使用 opencl(可能不是直接使用,但是升级了 driver 通信?),它与 opencl 并行开发,但可以回退到线程。
from the smallest OpenCL 1.2 embedded device to the most advanced OpenCL 2.2 accelerators
How does OpenCL relates to vulkan ? I understand that OpenCL is higher level and abstracts the devices, but does ( or could ) it uses Vulkan internally ?
他们完全没有关系。
嗯,他们在技术上确实使用相同的中间着色器语言,但 Vulkan 禁止内核执行模型,而 OpenCL 禁止着色器执行模型。因此,您不能只将用于 OpenCL 的着色器粘贴到 Vulkan 中,反之亦然。
Vulkan is advertised as both a compute and graphics api, however I found very little resources for the compute part - why is that ?
因为 Khronos 集团喜欢误导性的营销宣传。
Vulkan 与 OpenGL 一样,只是一种计算 API。它可能有计算着色器,但它们的功能有限。您可以在 OpenCL 计算操作中执行的操作无法通过 OpenGL/Vulkan CS 获得。
Vulkan CS 与 OpenGL 的 CS 一样,旨在用于一件事:支持图形操作。进行截头体剔除、构建间接图形命令、操纵粒子系统等。 CS 以与图形着色器相同的数值精度运行。
Vulkan has a performance advantages over OpenGL. Is the same true for Vulkan vs OpenCl?
计算系统的性能主要取决于其实施的质量。慢的不是 OpenCL;是您的 OpenCL 实现比它可能的要慢。
Vulkan CS 在这方面没有什么不同。性能将基于驱动程序的成熟度。
此外,还有一个事实是,您可以在 OpenCL 计算操作中做很多在 Vulkan CS 中不能做的事情。
Does SYCL uses OpenCL internally or could it use vulkan ?
来自 Khronos 集团:
SYCL (pronounced ‘sickle’) is a royalty-free, cross-platform abstraction layer that builds on the underlying concepts, portability and efficiency of OpenCL...
是的,它建立在 OpenCL 之上。