使用推力(素数)在 GPU 中编译

compiling in GPU using thrust (prime numbers)

我有一个用 C 语言用 thrust 写的代码,但是我没有 GPU 无法编译它。我的代码应该计算前 1000 个素数。而已。但问题是

1 - 我没有 GPU,无法编译它。

2 - 因为我不能编译它,所以我不知道它是否真的计算素数。

这是我的代码:

`struct prime{
_host_ _device_
    void operator()(long& x){
    bool result = true;
    long stop = ceil(sqrt((float)x));
    if(x%2!=0){
        for(int i = 3;i<stop;i+=2){
            if(x%i==0){
                result = false;
                break;
            };
        }
    }else{
        result = false;
    }
    if(!result)
        x = -1;
 }
};
void doTest(long gen){
  using namespace thrust;
  device_vector<long> tNum(gen);
  thrust::sequence(tNum.begin(),tNum.end());
}
int main(){
   doTest(1000);
   return 0;
}`

谁能帮我编译我的代码并显示结果,如果不能正常工作,然后帮我修复它?

如果您没有 GPU,请使用 thrust::host_vector 而不是 thrust::device_vector

我已经清理了你的代码,运行 在 CPU 上是这样的:

#include <thrust/host_vector.h>
#include <thrust/device_vector.h>
#include <thrust/sequence.h>

#include <iostream>


int main()
{
    thrust::host_vector<long> tNum(1000);
    thrust::sequence(std::begin(tNum), std::end(tNum));
    thrust::transform(std::cbegin(tNum), std::cend(tNum), std::begin(tNum), [](long x)
    {
        bool result = true;
        long stop = (long)std::ceil(std::sqrt((float)x));
        if (x % 2 != 0) {
            for (long i = 3; i < stop; i += 2) {
                if (x % i == 0) {
                    result = false;
                    break;
                };
            }
        } else {
            result = false;
        }
        if (!result) x = -1;
        return x;
    });
    for (const auto& element : tNum) if (element>0) std::cout << element << ", ";
    std::cout << std::endl;

    std::cin.ignore();
    return 0;
}