gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 01:33:13 24 4
gpt4 key购买 nike

我有一个用 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;
}

关于c++ - 使用推力(素数)在 GPU 中编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50689658/

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