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
,即 AA
和 SS
来执行 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
有关
我目前在 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
,即 AA
和 SS
来执行 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
有关