gpt4 book ai didi

cuda - 在主机上顺序使用 CUDA Thrust 算法

转载 作者:行者123 更新时间:2023-12-01 23:46:59 28 4
gpt4 key购买 nike

我想比较 Thrust 算法在单个 CPU 内核上顺序执行与在 GPU 上并行执行时的运行时间。

推力指定thrust::seq execution policy ,但我怎样才能明确定位主机后端系统呢?我希望避免在 GPU 上顺序执行算法。

最佳答案

CUDA Thrust 与架构无关。因此,请考虑我提供的代码作为对

Cumulative summation in CUDA

在该代码中,MatingProbabilityCumulativeProbabilitythrust::device_vectorthrust::transformthrust::inclusive_scan 能够自动识别并在 GPU 上进行相应操作。

下面,我通过将 thrust::device_vector 更改为 thrust::host_vector 来提供相同的代码。同样,thrust::transformthrust::inclusive_scan 能够自动识别要操作的向量驻留在 CPU 上并相应地操作。

#include <thrust/host_vector.h>
#include <thrust/transform.h>
#include <thrust/functional.h>
#include <thrust/iterator/counting_iterator.h>
#include <thrust/iterator/constant_iterator.h>
#include <cstdio>

template <class T>
struct scaling {
const T _a;
scaling(T a) : _a(a) { }
__host__ __device__ T operator()(const T &x) const { return _a * x; }
};

void main()
{
const int N = 20;

double a = -(double)N;
double b = 0.;

double Dx = -1./(0.5*N*(N+1));

thrust::host_vector<double> MatingProbability(N);
thrust::host_vector<double> CumulativeProbability(N+1, 0.);

thrust::transform(thrust::make_counting_iterator(a), thrust::make_counting_iterator(b), MatingProbability.begin(), scaling<double>(Dx));

thrust::inclusive_scan(MatingProbability.begin(), MatingProbability.end(), CumulativeProbability.begin() + 1);

for(int i=0; i<N+1; i++)
{
double val = CumulativeProbability[i];
printf("%d %3.15f\n", i, val);
}

}

关于cuda - 在主机上顺序使用 CUDA Thrust 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28657921/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com