https://stackoverflow.com/questions/46556471/how-may-i-convert-cast-scalar-to-vector-and-vice-versa-in-opencl

三种方法:

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。
  • 使用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,这个最为推荐
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄