zoukankan      html  css  js  c++  java
  • 理解OpenCL数据类型

    OpenCL支持从C编程语言派生而来的多种数据类型,大致可以分为两类,标量和向量。

    标量基本上是元素值,向量是元素值的集合。

    OpenCL变量整型数据类型由有符号类型和无符号类型组成,如cl_int, cl_double;而向量数据类型由成倍数的整型和浮点标量数据类型组成,如cl_char<N>,cl_float<N>,其中<N>代表值2、3、4、8或16。

    在OpenCL中,还可以将一种标量数据类型强制转换为一种向量数据类型。

    float f = 1.0f;
    float4 vf  = (float4)f;    //vf是一个拥有4个元素的{1.0, 1.0, 1.0, 1.0}的容器
    

    初始化向量数据类型:向量字面量,向量合成。

    向量字面量:

    float a = 1.0f;
    float b = 2.0f;
    float c = 3.0f;
    float d = 4.0f;
    
    float4 vf = (float4)(a, b, c, d);
    float4 f = ( (float2)(1.1f, 2.2f),  (float2)(3.3f, 4.4f) );       
    float4 f2 = (float4)(1.1f, (float2)(2.2f, 3.3f), 4.4f);    //很灵活
    

    可以通过索引访问个别分量。如果希望访问float4向量的每个分量,则可以分别通过v.x, v.y, v.z. v.w进行访问。对于具有8个或16个元素的较大向量,则可以分别通过v.s0, v.s1, ... , vs7以及v.s0, v.s1, v.s2, ... , v.s9, v.sa, v.sb, ... , v.sf。

    向量合成:

    float4 c;
    c.xyzw = (float4)(1.0f, 2.0f, 3.0f, 4.0f);
    float4 d;
    d.x = c.x;
    d.y = c.y;
    d.z = c.z;
    d.w = c.w;        //要使用字母索引,必须在添加字母s或S 如d.s0123
    

    向量数据类型可以使用.lo(或.even)和.hi(或.odd)后缀来组成新的向量类型。.lo和.hi后缀指的是向量的下半部分和上半部分;而.even和.odd指的是向量的偶数和奇数元素。

    float4 vf = (float4)(1.0f, 2.0f, 3.0f, 4.0f);
    float2 low = vf.lo;
    float2 high = vf.hi;
    float4 vf4 = float4(low, high);    //向量之间不允许进行隐式或显式的转换
    

    标量和向量的区别之一,当对标量应用某个操作时,给操作仅影响单个值;而将相同的操作应用于向量时,它会并行影响向量中的所有项。

  • 相关阅读:
    数据库被注入daxia123原因及解决办法
    Alipay数字证书管理员权限问题
    关闭数据库的xp_cmdshell命令以防止黑客攻击
    如何使用JavaScript来写ASP程序
    VBscript操作DOM
    如何做好性能压测丨压测环境设计和搭建
    10倍性能提升!DLA SQL推出基于Alluxio的数据湖分析加速功能
    高德地图驾车导航内存优化原理与实战
    「直播实录」中英数据库专家谈:数据库的过去、未来和现在
    Flink 助力美团数仓增量生产
  • 原文地址:https://www.cnblogs.com/tcsong24/p/6549193.html
Copyright © 2011-2022 走看看