我想知道是否可以在 GPU 代码中使用 SIMD 内在函数,例如 CUDA 内核或 openCL 内核。那可能吗?
问问题
1586 次
4 回答
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 回答