1

我目前正在优化 OpenCL 内核,并一直在尝试为工作组大小和向量宽度找到最佳值。
目前我正在使用带有 Intel i7-3930k(6 核 @ 3.5 GHz,HT 禁用)和 AMD HD6870 的 ubuntu 系统。安装了 Intel 和 AMD OpenCL 实现以进行比较。(AMD APP SDK v2.7 Linux 64b & Catalyst 12.4,英特尔 OpenCL SDK 1.5)。

在 CPU 上运行(在 Intel 平台上)我发现:

  • 通过选择 256 的 wg 大小,与 wgsize=1 相比,我可以获得大约 13.5% 的性能。
  • 通过指定__attribute__((vec_type_hint(float4)))我可以获得 30% 的提升。
  • 通过指定__attribute__((work_group_size_hint(WG_SIZE, 1, 1)))我得到另一个〜90%(!)

因此,总的来说,这些选项可以使性能提高近 3 倍。不幸的是,在使用 AMD OpenCL 平台的 CPU 上运行这个案例时,我发现可选属性被忽略了。

内核声明为:

kernel  __attribute__(( work_group_size_hint(WG_SIZE, 1, 1) ))
        __attribute__(( vec_type_hint(VEC_SIZE) )) 
void solveEikonalEq(    global      env_packed_t*   env_packed_in,
                        global      float*          packedEnvData_in,
                        private     float           ds,
                        private     float           freq,
                        global      ray_t*          ray,
                        global      rayMembers_t*   rayMembers){

编译器输出为:

"/tmp/OCLVAvDqR.cl", line 2637: warning: unknown attribute "work_group_size_hint"
  kernel  __attribute__((work_group_size_hint(WG_SIZE, 1, 1)))
                         ^

"/tmp/OCLVAvDqR.cl", line 2638: warning: unknown attribute "vec_type_hint"
          __attribute__(( vec_type_hint(VEC_SIZE))) 
                          ^

有人知道 AMD 是否总是忽略这些提示吗?或者我必须做些什么才能在 AMD 平台上启用这些属性?

4

1 回答 1

2

引用 AMD 论坛 ( http://devgurus.amd.com/message/1282250 ) 的答案:

内部添加了对工作组大小提示的支持,应该在下一个版本中。vec_type_hint 是可选的且不受支持,但我将提交请求以添加对解析器的支持。

Micah Villmow
Advanced Micro Devices Inc.

因此,简而言之,根据 AMD 代表的说法:

  • AMD的APP SDK v2.7不知道work_group_size_hint也不知道vec_type_hint
  • work_group_size_hintAPP SDK v2.8版本即将到来
  • vec_type_hint将来的版本可能会支持。
于 2012-06-29T16:41:12.683 回答