1

我想知道是否可以在 GPU 代码中使用 SIMD 内在函数,例如 CUDA 内核或 openCL 内核。那可能吗?

4

4 回答 4

5

不,SIMD 内在函数只是 ASM 代码的微小包装。它们是特定于 CPU 的。更多关于他们在这里

一般来说,你为什么要这样做?CUDA 和 OpenCL 已经包含许多实际上是“GPU 内在函数”的“函数”(例如,所有这些都是 GPU 的单点数学内在函数

于 2013-02-19T13:48:30.913 回答
2

您使用 OpenCL C 语言中内置的向量数据类型。例如 float4 或 float8。如果您使用 Intel 或 AMD 设备驱动程序运行,这些应转换为供应商 OpenCL 设备驱动程序的 SSE/AVX 指令。OpenCL 包括几个函数,例如 dot(v1, v2) 应该使用 SSE/AVX 点生成指令。是否存在您认为无法从 OpenCL C 语言中获得的特定内在特性?

于 2013-03-09T19:54:13.540 回答
1

大多数情况下不会,因为 GPU 编程语言使用不同的编程模型 (SIMT)。但是,AMD GPU 确实对 OpenCL 进行了扩展,它为某些字节粒度操作提供了内在函数(因此允许将 4 个值打包到 32 位 GPU 寄存器中)。这些操作旨在用于视频处理。

于 2013-02-19T17:24:52.403 回答
1

是的,只要编译器支持使用这些内在函数,您就可以在 CPU 或 GPU 的内核代码中使用 SIMD 内在函数。

通常使用 SIMD 的更好方法是在内核中使用 Vector 数据类型,以便编译器根据可用性决定使用 SIMD,这也使内核代码具有可移植性。

于 2013-02-22T06:10:08.797 回答