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

相关文章
相关标签/搜索