【发布时间】:2016-03-31 08:45:27
【问题描述】:
我从Thrust documentation复制了这段代码:
#include <thrust/copy.h>
#include <thrust/device_vector.h>
#include <thrust/host_vector.h>
int main()
{
thrust::device_vector<int> vec0(100);
thrust::device_vector<int> vec1(100);
thrust::copy(vec0.begin(), vec0.end(), vec1.begin());
return 0;
}
当我在调试模式 (VS2012) 下运行它时,我的程序崩溃并收到错误 Debug Error! ... R6010 - abort() has been called. 当我在发布模式下运行它时,它仍然崩溃并收到消息 .exe has stopped working。
但是从主机到设备的复制工作正常:
thrust::host_vector<int> vec0(100);
thrust::device_vector<int> vec1(100);
thrust::copy(vec0.begin(), vec0.end(), vec1.begin());
我使用 GeForce GTX 970,CUDA 驱动程序版本/运行时版本是 7.5,deviceQuery 运行没有任何问题。主机运行时库处于Multi-threaded (/MT) 模式。有谁知道可能导致此问题的原因?
【问题讨论】:
-
您发布的代码使用与您所说的相同的编译器和 CUDA 版本对我来说编译和运行没有错误。
-
@talonmies 我尝试了我的笔记本电脑(VS2013,QuadroK1000M),但程序仍然崩溃。这是完整的 VS 解决方案 goo.gl/FFs1cD 或 goo.gl/pFss5E
-
如果您在
return 0;语句之前立即放置cudaDeviceSynchronize();会发生什么?这能解决问题吗? -
@RobertCrovella 不幸的是,它没有。 cudaGetLastError() 什么也没显示。但是我尝试了亚马逊云服务,代码运行良好!看来这只是Windows的问题。
-
好吧,我猜你正在构建一个 win32 项目。改用构建 x64(发布)项目,我认为问题会消失。请注意,当您切换到 x64 时,VS 会将可执行文件放在不同的路径中,因此不要运行由您的 win32 项目构建的相同可执行文件。 CUDA 将不再支持 Windows 上的 32 位。