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

问题描述 投票:0回答:1

众所周知,OpenCL 向量类型

float16


结果:

即像

float16
这样的向量类型对于 GPU 来说并不重要,但对于 CPU 来说却非常重要。

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


结论:

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

concurrency opencl vectorization gpgpu amd
1个回答
2
投票

一般来说,如果您关心的是性能,那么对不同的架构使用相同的内核几乎总是一个坏主意。 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 线程。

© www.soinside.com 2019 - 2024. All rights reserved.