https://*.com/questions/46556471/how-may-i-convert-cast-scalar-to-vector-and-vice-versa-in-opencl
三种方法:
- 使用union。这个也是OCL标准的6.2.4.1节中容许的方法。
union my_type
{
char scalar[16];
char16 vector;
};
优点:数据是明确对齐的,也即不会出现向量vector的内存长度和变成的多个标量的内存长度不一致的情况。
缺点:不好处理标量数组的长度变化的情况。所以,这种方法一般用在local或者private内存中,因为这些一般是固定长度的。
- 在向量和标量之间进行指针转换
char16 vec = (char16)(1, 2, 3, …);
char* scalar = (char*)&vec;
优点:方便
缺点:容易因为地址位置搞错而出错。
- 使用内置函数
as_typen
或者as_type
,这个最为推荐。