cuda thrust :: remove_if为device_vector抛出“thrust :: system :: system_error”?

时间:2015-11-30 13:43:27

标签: cuda thrust

我目前在VS 2013下使用CUDA 7.5。 今天我需要从device_vector中删除一些元素,因此决定使用remove_if。但是我修改了代码,程序编译得很好,但在运行时抛出“thrust :: system :: system_error”。

首先我尝试了自己的代码:

int main()
{
    thrust::host_vector<int> AA(10, 1);
    thrust::sequence(AA.begin(), AA.end());
    thrust::host_vector<bool> SS(10,false);
    thrust::fill(SS.begin(), SS.begin() + 5, true);
    thrust::device_vector<int> devAA=AA;
    thrust::device_vector<bool> devSS = SS;
    thrust::device_vector<int>::iterator new_end = thrust::remove_if(thrust::device,
    devAA.begin(), devAA.end(), devSS.begin(), thrust::identity<int>());
}

但是它会在运行时抛出thrust::system::system_error。但是,如果我使用两个host_vector,即AASS来执行remove_if,那么一切都会顺利。

然后,我尝试了stackoverflow here上找到的代码,Robert Crovella的答案中的代码似乎工作正常,但在我的机器上,它仍然会抛出thrust::system::system_error

推力的新版本修改了什么吗?或者我应该尝试其他方式?我正在使用cmake来组织代码,有什么特别之处吗?

1 个答案:

答案 0 :(得分:2)

问题似乎是OP正在构建一个32位项目。切换到64位项目时,问题得到了解决。

我对CUDA 7.5及更高版本的建议是仅使用64位项目。如果您查看windowslinux上当前的32位支持状态,您会发现它非常有限。

纯粹作为一个猜想,这个问题可能与thrust issue #715

有关