OpenCL Upsample做什么?

OpenCL Upsample做什么?,opencl,Opencl,在阅读了OpenCL函数upsample的文档之后,我仍然不知道它是做什么的 本文档对该功能的描述如下: result[i] = ((gentype)hi[i] << 8|16|32) | lo[i] result[i]=((gentype)hi[i]也许最好通过代码而不是文字来解释这一点(毕竟,一个片段相当于2^10个单词): 有符号版本的重载遵守符号规则,向量重载也有: uchar2 hi = (uchar2)(0xAA, 0xBB); uchar2 lo = (uchar2)

在阅读了OpenCL函数
upsample
的文档之后,我仍然不知道它是做什么的

本文档对该功能的描述如下:

result[i] = ((gentype)hi[i] << 8|16|32) | lo[i]

result[i]=((gentype)hi[i]也许最好通过代码而不是文字来解释这一点(毕竟,一个片段相当于2^10个单词):

有符号版本的重载遵守符号规则,向量重载也有:

uchar2 hi = (uchar2)(0xAA, 0xBB);
uchar2 lo = (uchar2)(0x11, 0x22);

ushort2 x = upsample(hi, lo); // x = {0xAA11, 0xBB22}
它们并没有像您想象的那样做任何特殊的事情,它们只是按组件进行操作


从数学上讲,函数的描述是有意义的,将
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

upsample(hi,lo)=(hi也许最好通过代码而不是文字来解释这一点(毕竟,一个片段相当于2^10个单词):

有符号版本的重载遵守符号规则,向量重载也有:

uchar2 hi = (uchar2)(0xAA, 0xBB);
uchar2 lo = (uchar2)(0x11, 0x22);

ushort2 x = upsample(hi, lo); // x = {0xAA11, 0xBB22}
它们并没有像您想象的那样做任何特殊的事情,它们只是按组件进行操作


从数学上讲,函数的描述是有意义的,将
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

upsample(hi,lo)=(hi+1有类似的cpu avx/sse指令,如您在此处所述。+1有类似的cpu avx/sse指令,如您在此处所述。