Cuda Thrust min_element崩溃

时间:2016-04-13 19:48:07

标签: 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。这是一个错误吗?

1 个答案:

答案 0 :(得分:2)

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

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

可以解决这个问题。

现在似乎已将patch添加到当前的Thrust开发分支中以解决此问题。

[这个答案主要来自评论,并作为社区维基条目添加,以便将这个问题从CUDA标签的未答复问题列表中删除]。