<分区>
下面我发布了一些我用来尝试感受 CUDA 推力库的代码。在有人说什么之前,我知道这是一种非常低效的查找素数的方法,我只是想要一些东西来测试并行性。不幸的是,当我运行它时,我得到一个错误,这里弹出:
Thrust_2.exe 中 0x76FCC41F 处的未处理异常:Microsoft C++ 异常:内存位置 0x0022F500 处的 thrust::system::system_error。
如果我在 doTest 函数中将 device_vector
切换为 host_vector
,我将不再收到错误并且程序可以完美运行。为什么会发生这种情况,我怎样才能让它在不崩溃的情况下使用 device_vector?我想尽可能并行地做。
整个程序也按预期使用 host_vector。
附言:
我正在使用 VS2012
库达:V5.5
显卡:geforce gt 540M
推力:得到了 cuda。
提前致谢!
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);
sequence(tNum.begin(),tNum.end()); // fails here when using a device_vector
}
int main(){
doTest(1000);
return 0;
}