我目前正在優化OpenCL內核,並一直在嘗試爲工作組大小和向量寬度查找最佳值。
目前我正在使用帶有Intel i7-3930k(6核@ 3.5 GHz,HT禁用)和AMD HD6870的ubuntu系統。英特爾和AMD OpenCL實施都已安裝,以便進行比較。 (AMD APP SDK v2.7 Linux 64b & Catalyst 12.4,Intel OpenCL SDK 1.5)。AMD OpenCL編譯器忽略內核屬性「work_group_size_hint」
運行CPU(英特爾平臺)上,我發現:
- 通過選擇256的WG大小,我可以比較獲得約13.5%的性能wgsize = 1。
- 通過指定
__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平臺上啓用這些屬性?
我建議你詢問OP並指出當前的版本號,以便稍後登陸這裏的人知道「下一個」版本是什麼。 – Ani
@ananthonline好點!相應地更新問題和答案。 –