zoukankan      html  css  js  c++  java
  • vectorized case sum

    在sum算子中,我们的实现的大概逻辑是这样的:

    void batch_update2(int* res, int col[],int size) {
        for(int i = 0;i < size; ++i) {
            *res += col[i];
        }
    }
    

    GCC 没有办法向量化,因为不知道 res的地址是否和col的地址有交集

    其中一个解决方案就是利用一个局部变量

    void batch_update1(int* res, int col[],int size) {
        int tmp{};
        for(int i = 0;i < size; ++i) {
            tmp += col[i];
        }
        *res += tmp;
    }
    

    另一个办法就是关键字: __restrict

    void batch_update3(int* __restrict res, int* __restrict col,int size) {
        for(int i = 0;i < size; ++i) {
            *res += col[i];
        }
    }
    

    https://godbolt.org/z/hh84jP9f8

    benchmark

    https://quick-bench.com/q/CZRlNcb6YPnb6f3-aSQjyN8qISs

  • 相关阅读:
    31
    30
    29
    28
    27
    26
    25
    23
    cesium 基础
    操作SDO_GEOMETRY字段
  • 原文地址:https://www.cnblogs.com/stdpain/p/15396445.html
Copyright © 2011-2022 走看看