用于数组处理的GPU cuda代码,摘要

GPU cuda code for array processing, abstract

我有一个包含数百万个整数值(输入)的数组。我想使用 GPU、nvidia gtx 780ti 或 gtx 980 分别对它们单独执行函数 F(input[x]),然后将结果数组(输出)放回主内存,每个输出元素 output[x] 对应于输入数组元素 input[x]F()不包含任何浮点计算。

我如何为 gpu 正确组织这种大小数组(数百万个元素)的任务?

我正在寻找合适的 GPU 替代品:

for (int x=0; x<5000000; x++)

output[x] = F(input[x]);

为了回答这个问题,我把评论转成这个答案:

您的用例很容易在 CUDA 中实现。 一种非常适合初学者的方法是使用 Thrust.

#include <iostream>
#include <thrust/sequence.h>

#include <thrust/transform.h>
#include <thrust/device_vector.h>

struct F
{
     __device__
     int operator()(int value) const
     {
         // just a dummy function
         return value*value;
     }
};

int main()
{
     const int N = 10;
     thrust::device_vector<int> input(N);
     // filling the input with dummy values
     thrust::sequence(input.begin(), input.end());
     thrust::device_vector<int> output(N);
     thrust::transform(input.begin(), input.end(), output.begin(), F());
     thrust::copy(output.begin(), output.end(), std::ostream_iterator<int>(std::cout, " "));

     return 0;
}

编译并运行此代码产生:

$ nvcc transform.cu && ./a.out

0 1 4 9 16 25 36 49 64 81

当然,您也可以按照 Robert 的建议编写一个非常简单、普通的 CUDA 内核来完成此任务。