cuda推力:移除“如果抛出”;推力::系统::系统“U错误”;对于设备_向量?

cuda推力:移除“如果抛出”;推力::系统::系统“U错误”;对于设备_向量?,cuda,thrust,Cuda,Thrust,我目前正在VS 2013下使用CUDA 7.5。 今天,我需要从设备\u向量中删除一些元素,因此决定使用remove\u if。但是,不管我如何修改代码,程序只是编译得很好,但在运行时抛出“推力::系统::系统_错误” 首先,我尝试了自己的代码: int main() { thrust::host_vector<int> AA(10, 1); thrust::sequence(AA.begin(), AA.end()); thrust::host_vector

我目前正在VS 2013下使用CUDA 7.5。 今天,我需要从
设备\u向量
中删除一些元素,因此决定使用
remove\u if
。但是,不管我如何修改代码,程序只是编译得很好,但在运行时抛出“推力::系统::系统_错误”

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

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>());
}
intmain()
{
推力:主向量AA(10,1);
序列(AA.begin(),AA.end());
推力:主机_向量SS(10,假);
推力:填充(SS.begin(),SS.begin()+5,真);
推力:装置_向量a=AA;
推力:设备矢量devSS=SS;
推力::设备\向量::迭代器新\端=推力::删除\如果(推力::设备,
devAA.begin()、devAA.end()、devSS.begin()、推力::标识();
}
但它在运行时抛出
推力::系统::系统错误
。但是,如果我使用两个
主机向量
,即
AA
SS
执行
remove\u if
,则一切正常

然后,我尝试了我在上面找到的代码,Robert Crovella的答案中的代码似乎工作正常,但在我的机器上,它仍然抛出
推力::系统::系统错误


新版本的推力修改了什么吗?或者我应该试试别的办法?我正在使用cmake组织代码,有什么特别的吗?

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

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


纯粹是猜测,这个问题可能与

有关。你能把你的问题解释得更清楚一点吗?你发布的代码是否适用于你?当你说“但是,如果我使用两个主机向量,即AA和SS来执行remove_if,一切正常”时,相对于你发布的代码,这意味着什么?我对你发布的内容没有任何问题。这是我的测试用例。您的计算机安装或CUDA安装可能有问题。如果您添加了精确的推力错误检查,如,则可能会获得有关系统错误发生原因的更多信息。例如,如果我编译了
compute\u 30,sm\u 30
的代码,但在我的cc2.0设备上运行,我会得到以下信息:“推力系统错误:函数中的cudaFuncGetAttributes\u属性:无效的设备函数”和“无效的设备函数”消息是一个很好的指示器,表明我编译的GPU类型不正确。我打开了您的项目文件。您正在构建Win32项目吗?您应该正在构建一个x64发行版项目。无论如何,如果我构建了一个x64版本的项目,那么在我的机器上构建和运行您的项目不会有任何问题。是的,如果您构建win32项目,它将无法工作。在较新的CUDA版本中,对32位的官方支持正在消失。在CUDA 7.5中,它几乎消失了。