我刚开始使用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是最好的工作项目。
我也看到,是因为工作组大小每三倍(4096,6144,8192),我的CPU计算速度要慢得多。所以看起来我的CPU同时需要三个工作组。
问题转到此处: OpenCL Floating point precision
提前感谢所有答案。
答案 0 :(得分:3)
我想知道的是,工作组是否同时运行?就像在我的设置中一样,GPU会比CPU同时运行更多的工作组。
这个问题有一个很好的答案:Are OpenCL work items executed in parallel?