SIMD内在函数 - 它们可以在gpus上使用吗?

时间:2013-02-19 13:45:58

标签: c++ cuda opencl simd

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

4 个答案:

答案 0 :(得分:5)

不,SIMD内在函数只是ASM代码的小包装器。它们是CPU特定的。关于他们的更多信息here

一般来说,为什么要这样做? CUDA和OpenCL已经包含许多实际上是“GPU内在函数”的“函数”(例如,所有这些都是single-point-math intrinsics for the GPU

答案 1 :(得分:2)

您使用OpenCL C语言中内置的矢量数据类型。例如float4或float8。如果您使用Intel或AMD设备驱动程序运行,则应将这些驱动程序转换为供应商的OpenCL设备驱动程序的SSE / AVX指令。 OpenCL包括几个函数,如dot(v1,v2),它们应该使用SSE / AVX点生成指令。您是否对您认为可以从OpenCL C语言中获得的内容感兴趣?

答案 2 :(得分:1)

大多数情况下没有,因为GPU编程语言使用不同的编程模型(SIMT)。但是,AMD GPU do have an extension to OpenCL为某些字节粒度操作提供了内在函数(因此允许将4个值打包到32位GPU寄存器中)。这些操作适用于视频处理。

答案 3 :(得分:1)

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

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