我们是否应该使用矢量类型,如果我们想为两者编写优化代码:CPU和GPU?

时间:2017-02-19 14:13:57

标签: concurrency opencl vectorization gpgpu amd

众所周知,OpenCL向量类型float16

enter image description here

结果:

即。像float16这样的矢量类型对GPU来说并不重要,但对CPU来说非常重要。

我们是否应该使用矢量类型,如果我们想为两种体系结构编写一次优化的OpenCL代码:CPU和GPU?

结论:

GPU或Intel-CPU并不需要矢量类型,但AMD-CPU需要它。

1 个答案:

答案 0 :(得分:2)

通常,如果性能是您所关注的,那么为不同的体系结构使用相同的内核几乎总是一个坏主意。前GCN需要向量,GCN需要标量,CPU可以同时处理英特尔驱动程序,但只有你知道它,我不知道AMD的驱动程序是如何在CPU上做的。虽然CPU需要比GPU更宽的矢量。 CPU依赖于缓存,GPU更多地依赖于临时内存。 GPU拥有比CPU甚至梦想更多的寄存器......

在GCN的实际矢量类型上让我觉得我的代码看起来更好,并节省了打字和犯错的时间。 float v [4],float4 v,甚至float v0,v1,v2,v3,在大部分时间内都没有太大的区别。

如前所述,英特尔的CL驱动程序可以将线程映射到SIMD元素,该元素构成一个核心8个CL线程。