cuda thrust::remove_if 为 device_vector 抛出 "thrust::system::system_error"?

cuda thrust::remove_if throws "thrust::system::system_error" for device_vector?

我目前在 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,一切正常。

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

新版推力有没有修改什么?或者我应该尝试其他方式?我是用cmake整理代码,有什么特别的吗?

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

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

纯属推测,此问题可能与thrust issue #715

有关