我有以下代码片段
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/