OpenCL洗牌函數shuffle

在OpenCL中,常常會碰到會對向量的多個份量進行交叉運算的狀況,好比性能

float4 d4; //input
float scale;    //input
float2 mix_0 = mix((float2)(d4.wx), (float2)(d4.zy), scale);

這段代碼對d4的wx和zy份量分別作mix運算,顯然,因爲運算對象並非相鄰,存在交叉的狀況,效率可能並不會很好。假如,咱們是對xy和zw作這樣的操做,是否是效率會好一點呢?
對於OCL中須要交換向量中的份量位置的狀況,天然想到shuffle,而後把代碼該爲:測試

const uint4 ymask = (uint4)(3, 0, 2, 1);
float4 d4; //input
float scale;    //input
y4_0 = shuffle(d4, ymask);
float2 mix_0 = mix((float2)(d4.xy), (float2)(d4.zw), scale);

通過測試,在個人Snapdragon710上,對個人整個應用,大概能夠提高10%左右的性能ui

相關文章
相關標籤/搜索