在阅读OpenCL函数upsample
的文档后,我仍然不知道它的作用。
文档对该功能的描述是:
result[i] = ((gentype)hi[i] << 8|16|32) | lo[i]
这是什么意思? upsample
做了什么?
答案 0 :(得分:4)
也许最好通过代码而不是单词来解释(毕竟片段值2 ^ 10个单词):
uchar hi = 0xAA;
uchar lo = 0xBB;
ushort x = upsample(hi, lo); // x = 0xAABB
签名版本存在重载,这些版本遵循签名规则,也会导致向量重载:
uchar2 hi = (uchar2)(0xAA, 0xBB);
uchar2 lo = (uchar2)(0x11, 0x22);
ushort2 x = upsample(hi, lo); // x = {0xAA11, 0xBB22}
那些不做任何特别的事情,你可以想象,它们只是按组件运作。
在数学上,函数的描述是有意义的,通过&#34;推动&#34;输出最高有效位的hi
参数,使其出现在前8位(short
),16位(int
),32位(long
)中。以下是使用ushort upsample(uchar hi, uchar lo)
重载进行说明的示例:
upsample(hi, lo) = (hi << 8) | lo
hi = 01010101
lo = 01101110
lo = 0000000001101110 (extended to result type ushort)
hi << 8 = 0101010100000000 (extended to result type ushort)
(hi << 8) | lo = 0101010100000000
| 0000000001101110
= 0101010101101110
^ ^
hi lo
实际上,谢谢,我对这个功能一无所知,我当然可以自己使用它。干杯!