【发布时间】:2016-05-29 17:25:01
【问题描述】:
我正在尝试对 100x2025 矩阵(100 个向量)中的所有向量进行归一化。我将每个向量作为本地内存中的一个工作组进行处理。我的最大工作组大小是 512,所以我最初将全局大小设置为 {100, 2048},将局部大小设置为 {1,512}(我为每个工作项处理 4 个元素,并在内核中用零填充向量以使其具有2.)
经过一番麻烦后,我意识到虽然我的设备的最大工作组大小是 512,但我的 KERNEL_WORK_GROUP_SIZE 是 256。
所以现在我用 256 个工作组处理每个工作项的 8 个元素...
我刚刚对内核做了一个非常微妙的更改(将“get_local_size(0)”调用更改为“get_local_size(1)”),现在我的 KERNEL_WORK_GROUP_SIZE 为 224,我得到无效的工作组大小?
这非常令人沮丧,我不明白是什么决定了这种变化。我的全局工作量甚至不能被 224 整除。
【问题讨论】:
-
如果你改变你的代码,编译后的代码也会改变,并可能导致最大尺寸的改变。这将在低端设备上有效地发生。因此,仅将内核修复到给定大小被认为是一种不好的做法。您应该依赖
get_local_size()值。