【发布时间】:2012-06-25 13:37:49
【问题描述】:
我刚刚开始使用 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 Floating point precision
提前感谢所有答案。
【问题讨论】:
-
这应该作为两个单独的问题发布。
-
我现在已经解决了。谢谢。
标签: c++ windows opencl x86-64 floating-point-precision