floating-point - NVIDIA GPU 的 OpenCL 中浮点值的原子加法?

标签 floating-point opencl nvidia gpgpu gpu-atomics

OpenCL 3.0 规范 does not seem to have用于对浮点值进行原子加法的内在函数/内置函数,仅适用于整数值(在 OpenCL 1.x 和 2.x 中似乎也是如此)。然而,CUDA has offered浮点原子现在有一段时间了:

float  atomicAdd(float*  address, float  val); // since Fermi
double atomicAdd(double* address, double val); // since Pascal
__half atomicAdd(__half *address, __half val); // ?

自然地,任何简单的原子操作都可以通过比较和交换来模拟,而这在 OpenCL 中是可用的。但我的问题是:

  1. NVIDIA 是否以某种方式在 OpenCL 中公开了浮点原子?例如通过供应商扩展?使用编译指示?含蓄地?
  2. 是否有比比较交换模拟更有效的机制,我可以考虑将其作为浮点原子的替代品?对于 NVIDIA GPU 还是一般?

最佳答案

native 浮点原子是 OpenCL 3.0 非常需要的扩展。截至目前,它们仍然不可用。

  1. 唯一可能的方法是使用 inline PTX .
  2. 没有。 implementation with atomic compare-exchange for FP32 and FP64目前是最先进的,没有更好的方法。

2022 年 6 月更新:Floating-point atomics are being added to the OpenCL 3.0 standard但硬件供应商的采用可能仍需要一些时间。

关于floating-point - NVIDIA GPU 的 OpenCL 中浮点值的原子加法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72044986/

相关文章:

c - 用于保持浮点值精度的 Printf 宽度说明符

c - 为什么 C99 标准的作者不指定浮点类型大小的标准?

c++ - OpenCL的enqueueWriteBuffer导致__memcpy_sse2_unaligned segmentation fault

ffmpeg - 从 mxf 到 mp4 的 Nvidia Nvenc 视频转换在内部的多个流中出现错误

video - 如何使用带有 Nvidia Acceleration (Nvenc) 的 FFMPEG 对字幕进行硬编码/刻录

python - 使用 python 舍入从 img 读取的 numpy float 数组,返回的值未舍入

c++ - 我可以在GCC和Clang中为单个功能启用严格的浮点行为吗?

cuda - CUDA 或 OpenCL 中的稀疏数组

c++ - opencl c++ API 包装器中的 clFinish 等价物是什么?

python - 如何使用 ffmpeg gpu 编码将帧从视频保存到内存?