Cuda Thrust min_element 崩溃

标签 cuda thrust

我有以下代码片段

uint64_t myvec[] = {1,2,3,4,5};

int main(void)
{   
  uint64_t* dev;    
  cudaMalloc(&dev, 5*sizeof(uint64_t));
  cudaMemcpy(dev,myvec,sizeof(uint64_t)*5,cudaMemcpyHostToDevice);  
  uint64_t* min_iter = thrust::min_element(thrust::device, dev, dev+5);

  return 0;
}

由于设备上存在 min_element,此代码因段错误而崩溃。

但是如果我在主机上执行此代码似乎可以正常工作

uint64_t* min_iter = thrust::min_element(thrust::host, myvec, myvec+5);

我不知道出了什么问题。我使用的是cuda 7.5。这是一个错误吗?

最佳答案

这已被确认为 bug在推力中。在评论中,有人建议:

uint64_t* min_iter = thrust::min_element(thrust::device,   
                         thrust::device_pointer_cast(dev), 
                         thrust::device_pointer_cast(dev+5)).get();

可以解决这个问题。

现在似乎有一个 patch它已被添加到当前的 Thrust 开发分支来解决这个问题。

[这个答案主要是根据评论汇总的,并添加为社区 wiki 条目,以便将此问题从 CUDA 标签的未回答问题列表中删除]。

关于Cuda Thrust min_element 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36608199/

相关文章:

c++ - 如何通过推力将主机 vector 复制到设备 vector

c++ - 将元组的 const 引用传递给仿函数

c++ - 我需要释放推力返回的 device_ptr 吗?

sorting - 使用 CUDA Thrust 同时对多个数组进行排序

使用 Thrust CUDA 对对象进行排序

cuda - uint2 : "has no member x" compiler error? 类型的推力向量

cuda - 从 __host__ __device__ 函数调用 __host__ 函数

c++ - CUDA: __device__ and __global__ error: expected constructor, destructor, or type conversion before "unsigned"/"void"”

c++ - 库达 CMake : undefined reference

c - 在不同的 GCC 版本之间切换