zoukankan      html  css  js  c++  java
  • OpenCL洗牌函数shuffle

    在OpenCL中,经常会碰到会对向量的多个分量进行交叉运算的情况,比如

    float4 d4; //input
    float scale;    //input
    float2 mix_0 = mix((float2)(d4.wx), (float2)(d4.zy), scale);
    

    这段代码对d4的wx和zy分量分别做mix运算,显然,由于运算对象并不是相邻,存在交叉的情况,效率可能并不会很好。假如,我们是对xy和zw做这样的操作,是不是效率会好一点呢?
    对于OCL中需要交换向量中的分量位置的情况,自然想到shuffle,然后把代码该为:

    const uint4 ymask = (uint4)(3, 0, 2, 1);
    float4 d4; //input
    float scale;    //input
    y4_0 = shuffle(d4, ymask);
    float2 mix_0 = mix((float2)(d4.xy), (float2)(d4.zw), scale);
    

    经过测试,在我的Snapdragon710上,对我的整个应用,大概可以提升10%左右的性能

  • 相关阅读:
    多线程
    泛型
    枚举、注解
    重写comparater比较器
    Arrays工具类和Collections工具类
    重写equals和hashCode的方法
    遍历集合的方法
    关键字总结
    having 的用法
    HTTP协议
  • 原文地址:https://www.cnblogs.com/willhua/p/10707537.html
Copyright © 2011-2022 走看看