通过将固定值作为内核参数传递来降低寄存器压力

时间:2015-11-10 13:33:43

标签: opencl

我正在尝试减少内核中的注册压力。我正在计算某些固定值,例如我正在处理的图像的尺寸;将这些维度作为内核参数传递是否有意义?它们适用于所有工作组。我在某处读到内核参数得到特殊处理而没有分配给寄存器。

1 个答案:

答案 0 :(得分:2)

OpenCL规范要求内核参数位于__private地址空间中,因此理论上内核参数可以存储在寄存器,常量内存,专用寄存器文件或其他任何内容中。实际上,实现通常会将内核参数放在常量内存中(常量内存,而不是__constant地址空间)。恒定存储器是GPU用于广播通用数据(如相机矩阵)的只读小存储器。它们非常快,比全局内存快得多。与本地记忆速度相似。

如果将值传递给内核,则它将驻留在常量内存中。全局无法获取。

然而,该数据最终将驻留在寄存器中(与任何其他数据一样)以便与其一起操作。你不会保存任何寄存器。但至少它会使你的内核运行得更快。