c++ - OpenCL 速度和浮点精度

标签 c++ windows opencl x86-64 floating-point-precision

我刚刚开始使用 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

提前感谢所有的回答。

最佳答案

What i want to know, do work group run simultaneously? Like, in my setup, the GPU would run more work groups simultaneously than the CPU.

这个问题在这里有一个很好的答案:Are OpenCL work items executed in parallel?

关于c++ - OpenCL 速度和浮点精度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11170012/

相关文章:

linux - 在 Docker 文件中使用 linux 命令并在 Windows 上构建

c++ - 设置内核参数时的 CL_INVALID_ARG_SIZE

multithreading - 如何在多核上编译 OpenCL 程序?

c++ - 如何获取自动(局部)变量相对于堆栈帧的偏移量( __builtin_frame_address )

c++ - 如何在 QWidget 中获取 QtDataVizualisation 的 QPixmap 并保存到文件?

c# - 获取 .NET 枚举的 Windows 本地化

windows - 是否可以直接访问视频卡? (无 API)

opengl - 有了 OpenCL,GLSL 的意义何在?

c++ - 无法在 OpenCL 和 C++ 中显示 <CL_DEVICE_MAX_WORK_ITEM_SIZE>

C# 无法在未损坏的 C++ 库上找到入口点