【问题标题】:thrust::copy doesn't work for device_vectors [duplicate]推力::复制不适用于 device_vectors [重复]
【发布时间】: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/FFs1cDgoo.gl/pFss5E
  • 如果您在 return 0; 语句之前立即放置 cudaDeviceSynchronize(); 会发生什么?这能解决问题吗?
  • @RobertCrovella 不幸的是,它没有。 cudaGetLastError() 什么也没显示。但是我尝试了亚马逊云服务,代码运行良好!看来这只是Windows的问题。
  • 好吧,我猜你正在构建一个 win32 项目。改用构建 x64(发布)项目,我认为问题会消失。请注意,当您切换到 x64 时,VS 会将可执行文件放在不同的路径中,因此不要运行由您的 win32 项目构建的相同可执行文件。 CUDA 将不再支持 Windows 上的 32 位。

标签: cuda gpu thrust


【解决方案1】:

有一些类似的问题,例如here

引用评论:

“已知 Thrust 在构建时无法正确编译和运行 调试”

来自docs

"nvcc 不支持设备调试推力代码。推力函数 使用(例如,nvcc -G、nvcc --device-debug 0 等)编译的可能 崩溃。”

【讨论】:

  • 我知道。我不为调试而编译。刚刚处于发布模式。
  • 您在构建/运行之前是否进行了清洁?
  • 是的,我做到了,但没有帮助。
  • 你可以试试,属性 -> 调试 -> 启用非托管代码调试(禁用它)。让我知道它是否修复。
  • 我在 Visual Studio 2012/2013 中找不到这样的设置
猜你喜欢
  • 2016-09-02
  • 1970-01-01
  • 1970-01-01
  • 2018-04-03
  • 2017-10-10
  • 2013-01-04
  • 1970-01-01
  • 2021-07-27
相关资源
最近更新 更多