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);    //向量之间不允许进行隐式或显式的转换
    

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

  • 相关阅读:
    HDU 5213 分块 容斥
    HDU 2298 三分
    HDU 5144 三分
    HDU 5145 分块 莫队
    HDU 3938 并查集
    HDU 3926 并查集 图同构简单判断 STL
    POJ 2431 优先队列
    HDU 1811 拓扑排序 并查集
    HDU 2685 GCD推导
    HDU 4496 并查集 逆向思维
  • 原文地址:https://www.cnblogs.com/tcsong24/p/6549193.html
Copyright © 2011-2022 走看看