1

私は現在OpenCLカーネルを最適化しており、ワークグループのサイズとベクトルの幅に最適な値を見つけようとしています。
現在、Intel i7-3930k(6コア@ 3.5 GHz、HT無効)とAMDHD6870を備えたubuntuシステムを使用しています。比較を可能にするために、IntelとAMDの両方のOpenCL実装がインストールされています。(AMD APP SDK v2.7 Linux64bおよびCatalyst12.4、Intel 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のAPPSDKv2.7はどちらwork_group_size_hintも認識していませんvec_type_hint
  • work_group_size_hintバージョンAPPSDKv2.8が登場します
  • vec_type_hint将来のバージョンでサポートされる可能性があります。
于 2012-06-29T16:41:12.683 に答える