OpenCL 速度和浮点精度
OpenCL speed and float 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。
速度
首先速度与最大工作组项目数不成线性关系。我运行了应用程序分析器来分析内核执行期间花费的时间。结果有点令人震惊,我的 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 浮点精度
提前感谢所有答案。
我想知道的是,工作组是否同时运行?就像,在我的设置中,GPU 会比 CPU 同时运行更多的工作组。
这个问题有一个很好的答案:OpenCL 工作项是否并行执行?
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 正在将csv文件读取为双精度矢量
- 为什么在读取文件大小时文件IO速度会发生变化
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- 我可以信任表示整数的浮点或双精度来保持精度吗
- 如何在C++中的同一函数中使用字符串和双精度
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- 文件系统:复制功能的速度秘诀是什么
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 如何计算具有指定类型的表达式的相对精度和绝对精度
- 如何打印boost多精度128位无符号整数
- 如何以精度换取速度来评估C++中两个向量的点积符号?(不特定于硬件)
- C++中的快速百分比-速度比精度更重要
- 在科学记数法中将双精度转换为字符串的速度比在 c++ 中将 sprintf 转换得更快
- OpenCL 速度和浮点精度
- 是否有一个 GNU C 编译器选项可以生成运行速度更快但精度低于默认设置的浮点程序
- qFastSin和qFastCos(速度,安全性和精度)
- 为什么优化标志 (-O3) 不能加快四倍精度计算的速度?