我想知道我是否可以在GPU代码中使用SIMD内在函数,如CUDA内核或openCL内核。这可能吗?
答案 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,这样也可以使内核代码可移植。