CUDA推力推力:: system :: system_error在exclusive_scan中

时间:2014-05-14 02:31:41

标签: cuda thrust

以下代码来自Converting thrust::iterators to and from raw pointers

的答案

编译好了,但是在CUDA 6.0下运行时,它会在exclusive_scan之后报告thrust :: system :: system_error(跟踪堆栈中充满了exclusive_scan相关信息)

#include <cuda_runtime.h>
#include <thrust/device_ptr.h>
#include <thrust/device_vector.h>
#include <thrust/scan.h>
#include <thrust/fill.h>
#include <thrust/copy.h>
#include <cstdio>
#pragma comment(lib,"cudart.lib")

int main()                                                        
{                                                                 
    const int N = 16;
    int * a;
    cudaMalloc((void**)&a, N*sizeof(int));   
    thrust::device_ptr<int> d = thrust::device_pointer_cast(a);  
    thrust::fill(d, d+N, 2);
    thrust::device_vector<int> v(N);                    
    thrust::exclusive_scan(d, d+N, v.begin());

    int v_[N];
    thrust::copy(v.begin(), v.end(), v_);
    for(int i=0; i<N; i++)
        printf("%d %d\n", i, v_[i]);     

    return 0;                                                  
}

代码中出了什么问题?(代码是2年前发布的,回答它的人说它运行正常。我认为他使用的是CUDA 4.0或更低版本。但是代码失败了在CUDA之后运行5.0)我使用VS 2012和CUDA 6.0(compute_13,sm_13)

1 个答案:

答案 0 :(得分:2)

您正在编译正在添加-G开关的调试项目。这可以是problematic with Thrust。切换到发布项目,该项目将删除-G开关。

我尝试了以下组合:

-G -arch=sm_20
-arch=sm_20
-arch=sm_13

以及所有生成的代码都运行正常。

当我这样做时:

 -G -arch=sm_13

我能够重现您所看到的错误。 (对CUDA 6的所有测试)