是否所有与 OpenCL 优化相关的选项都默认为 false?

Posted

技术标签:

【中文标题】是否所有与 OpenCL 优化相关的选项都默认为 false?【英文标题】:Do all the OpenCL optimization-related options default to false? 【发布时间】:2021-07-11 12:55:39 【问题描述】:

OpenCL 实现编译器采用(参见 2.2 或 3.0 的规范)以及以下命令行选项:

-cl-single-precision-constant -cl-denorms-are-zero -cl-fp32-correctly-rounded-divide-sqrt -cl-opt-disable -cl-mad-enable -cl-no-signed-zeros -cl-unsafe-math-optimizations -cl-finite-math-only -cl-fast-relaxed-math -cl-uniform-work-group-size -cl-no-subgroup-ifp

这些都是 OpenCL 规范要求默认为 false 的吗?如果没有,它们是否都有定义的默认值?或者 - 每个实施者是否设置了自己的默认值?

【问题讨论】:

【参考方案1】:

是的,如果没有明确设置,它们默认都是 false。

根据OpenCL specification:“这些选项默认情况下未打开,因为它可能导致依赖于数学函数的 IEEE 754 规则/规范的精确实现的程序的错误输出。”

【讨论】:

但该引用仅涉及浮点相关选项。 它考虑除 -cl-single-precision-constant、-cl-denorms-are-zero 和 -cl-fp32-correctly-rounded-divide-sqrt 之外的所有选项。从它们描述的上下文来看,剩下的三个 - 就像与浮点相关的选项一样 - 默认启用绝对没有意义。

以上是关于是否所有与 OpenCL 优化相关的选项都默认为 false?的主要内容,如果未能解决你的问题,请参考以下文章

禁用 GCC 中的所有优化选项

1 个 cpu 设备上 OpenCL 的并行性

OpenCL入门:(三:GPU内存结构和性能优化)

使用通过引用传递的参数(通过指针)优化 OpenCL 函数中的指针访问

OpenCL现在都支持哪些并行设备

C++实战之OpenCL 并行优化编程从零学起系列文章