zoukankan      html  css  js  c++  java
  • CUDA--Thrust--带参数自定义函数(6)

      Thrust自定义函数非常灵活,给编写程序带来方便,上次的自定义函数没有带参数,这次

    笔者写一个带参数的自定义函数。通过这次写带参数的自定义函数,我对如何用transformation

    调用函数有了更深的理解。

    代码:

    #include <thrust/device_vector.h>
    #include <thrust/transform.h>
    #include <thrust/sequence.h>
    #include <thrust/copy.h>
    #include <thrust/fill.h>
    #include <thrust/replace.h>
    #include <thrust/functional.h>
    #include <iostream>
    
    #define D_SW 1
    
    
    struct saxpy_functor
    {
        const float a;
        saxpy_functor(float _a) : a(_a) {}
        __host__ __device__
            float operator()(const float& x, const float& y) const {
            return a * x + y;
        }
    };
    
    
    
    void saxpy_fast(float A, thrust::device_vector<float>&X,
        thrust::device_vector<float>&Y) {
        //Y<- A*X+Y
        thrust::transform(X.begin(), X.end(), Y.begin(), Y.begin(),
            saxpy_functor(A));
    
    }
    
    void saxpy_slow(float A, thrust::device_vector<float>&X,
        thrust::device_vector<float>&Y) {
        thrust::device_vector<float>temp(X.size());
    
        //temp=A
        thrust::fill(temp.begin(), temp.end(),A);
    
        //temp=A*X
        thrust::transform(X.begin(), X.end(), temp.begin(), temp.begin(),
            thrust::multiplies<float>());
    
        //Y=A*X+Y
        thrust::transform(temp.begin(), temp.end(), Y.begin(), Y.begin(),
            thrust::plus<float>());
    
    }
    
    int main(void) {
    
        
        float a = -1.0f;
        thrust::device_vector<float>x(10);
        thrust::device_vector<float>y(10);
    
        thrust::sequence(x.begin(), x.end());
        thrust::sequence(y.begin(), y.end());
    
        /*for (int i = 0; i < y.size(); ++i) {
            std::cout << y[i] << std::endl;
        }*/
    #if D_SW
        saxpy_fast(a, x, y);
    #else
        saxpy_slow(a, x, y);
    #endif
        for (int i = 0; i < y.size(); ++i) {
            std::cout << y[i] << std::endl;
        }
    
        return 0;
    }
    function
  • 相关阅读:
    mac下安装中文汉化插件和快速打开浏览器插件
    大数据基础---Flink_Data_Transformation
    大数据基础---Flink_Data_Source
    大数据基础---Flink开发环境搭建
    大数据基础---Flink核心概念综述
    大数据基础---Spark_Streaming整合Kafka
    大数据基础---Spark_Streaming整合Flume
    大数据基础---Spark_Streaming基本操作
    大数据基础---Spark_Streaming与流处理
    大数据基础---SparkSQL联结操作
  • 原文地址:https://www.cnblogs.com/xuelanga000/p/13358446.html
Copyright © 2011-2022 走看看