如果我们想为 CPU 和 GPU 编写一次优化代码,我们是否应该使用向量类型?

Should we use the vector-types, if we want to write once optimized code for both: CPU and GPU?

众所周知,OpenCL 矢量类型 float16


结果:

float16 等向量类型对 GPU 来说无关紧要,但对 CPU.

非常重要

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


结论:

GPU 或 Intel-CPU 不需要向量类型,但 AMD-CPU.

需要向量类型

一般来说,如果您关心的是性能,那么为不同的体系结构使用相同的内核几乎总是一个坏主意。 Pre-GCN 需要向量,GCN 需要标量,CPU 可以使用 Intel 驱动程序处理这两种情况,但前提是你知道它,我不知道 AMD 的驱动程序在 CPU。而 CPU 需要比 GPU 更宽的向量。 CPU 依赖缓存,而 GPU 更依赖暂存内存。 GPU 的寄存器多得令人发指,CPU 甚至无法想象...

在 GCN 上,实际上向量类型让我觉得我的代码看起来更好,并且节省了一些打字和犯错的时间。 float v[4]、float4 v,甚至 float v0、v1、v2、v3,在大多数情况下都没有太大区别。

而且如前所述,Intel 的 CL 驱动程序可以将线程映射到 SIMD 元素,从而使一个核心具有 8 个 CL 线程。