【问题标题】:Unable to create a thrust device vector无法创建推力装置矢量
【发布时间】:2021-01-01 09:36:45
【问题描述】:

所以我尝试开始使用 GPU 编程并使用 Thrust 库来简化事情。 我已经创建了一个测试程序来使用它并查看它是如何工作的,但是每当我尝试创建一个非零大小的推力::device_vector 时,程序就会因“运行时检查失败 #3 - 变量‘结果’而崩溃正在使用而未初始化。 (这来自 allocator_traits.inl 文件)而且......我不知道如何解决这个问题。 以下是导致此错误所需的全部内容。

#include <thrust/device_vector.h>

int main()
{
    int N = 100;
    thrust::device_vector<int> d_a(N);
    return 0;
}

我怀疑这可能是环境设置的问题,因此详细信息... 使用 Visual Studio 2019 创建,在 CUDA 11.0 运行时项目中(但是打开此项目时给出的示例程序可以正常工作),Thrust 版本 1.9,给定的 GPU 是 GTX 970。

【问题讨论】:

  • 如果你改成{ thrust::device_vector&lt;int&gt; d_a(N); }会发生什么
  • 您正在构建调试项目吗?尝试切换到发布项目。如果这对您来说是个问题,我建议使用说明here 在 developer.nvidia.com 上提交错误。 FWIW,作为一个简单的测试,我可以单击对话框上的“忽略”,否则运行/调试 CUDA 程序。您还可能会在执行结束时看到一个对话框,您也可以单击忽略。这似乎只体现在调试项目中。 (也许只有 CUDA 11。我无法重现 CUDA 10.1 的问题)
  • 切换到发布或忽略弹出窗口有效。我没想到程序之后会继续正常运行,但考虑到它被指定为调试错误,这有点道理。非常感谢!

标签: cuda thrust


【解决方案1】:

此问题似乎仅在与 CUDA 11.0 相关联的推力版本 (1.9.x) 中出现,并且仅在 windows/Visual Studio 上的调试项目中出现。

一些变通方法是切换到构建发布项目,或者只是在运行时出现的对话框上单击“忽略”。根据我的测试,这允许在那时进行普通运行或调试。

我尚未确认,但我相信此问题已在刚刚发布的最新 thrust (1.10.x) 中得到修复(虽然目前不属于任何正式的 CUDA 版本,但我希望它会成为一些未来的 CUDA 版本)。

【讨论】:

    【解决方案2】:

    根据 Robert Crovella 的回答,我通过使用 GitHub 中的代码更改推力库中的相应代码行来解决此问题。更准确地说,在文件 ...\CUDA\v11.1\include\thrust\detail\allocator\allocator_traits.inl 我替换了以下函数

    template<typename Alloc>
    __host__ __device__
      typename disable_if<
        has_member_system<Alloc>::value,
        typename allocator_system<Alloc>::type
      >::type
        system(Alloc &)
    {
      // return a copy of a default-constructed system
      typename allocator_system<Alloc>::type result;
      return result;
    }
    

    通过

    template<typename Alloc>
    __host__ __device__
      typename disable_if<
        has_member_system<Alloc>::value,
        typename allocator_system<Alloc>::type
      >::type
        system(Alloc &)
    {
      // return a copy of a default-constructed system
      return typename allocator_system<Alloc>::type();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-25
      • 2020-06-12
      • 2013-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多