3

我刚刚开始使用 OpenCL。但是,我发现 OpenCl 的一些奇怪行为,我无法理解。我构建和测试的源代码是http://www.codeproject.com/Articles/110685/Part-1-OpenCL-Portable-Parallelism。我有一个 ATI Radeon HD 4770 和一个 AMD Fx 6200 3.8 ghz 6 核 cpu。

速度

首先,速度与最大工作组项目的数量不成线性关系。我运行 App Profiler 来分析内核执行期间花费的时间。结果有点令人震惊,我的 GPU 每组只能处理 256 个工作项,用了 2.23008 毫秒来计算 5079040 个数字的平方。请注意,这是没有考虑内核加载时间...

但是,我的 cpu 每组可以处理 1024 个工作项,使用 13.41895 毫秒来计算数字。我认为工作组中的工作项是同时运行的,换句话说,cpu 应该更快。我想知道,工作组是否同时运行?就像,在我的设置中,GPU 会比 CPU 同时运行更多的工作组。

另一个因素可能是 GPU 计算浮点运算的速度更快,但我的 cpu 的时钟速度快了 4 倍,所以还是很奇怪。我知道通常 GPU 在屈服于 opencl 时应该更快,但我想要一个很好的解释为什么。

编辑:我尝试计算 1024、2048...5120 个工作项,现在 cpu 比 GPU 快。所以我了解到 CPU 在工作时间少的情况下工作得更好,而 GPU 在工作项目很多时效果最好。

我还看到,我的 CPU 在工作组大小(4096、6144、8192)的三倍时计算速度要慢得多。所以看起来我的 CPU 同时占用了三个工作组。

浮点精度

问题移至此处: OpenCL 浮点精度

提前感谢所有答案。

4

1 回答 1

3

我想知道,工作组是否同时运行?就像,在我的设置中,GPU 会比 CPU 同时运行更多的工作组。

这个问题有一个很好的答案:OpenCL 工作项是否并行执行?

于 2012-06-23T17:11:36.203 回答