私は現在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プラットフォームでこれらの属性を有効にするために私がしなければならないことがありますか?