2016-04-13 74 views
2

我有下面的代碼片段Cuda的推力min_element崩潰

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。這是一個錯誤?

+3

這似乎是一個錯誤:https://github.com/thrust/thrust/issues/776。你可以用這個方法解決它:'uint64_t * min_iter = thrust :: min_element(thrust :: device,thrust :: device_pointer_cast(dev),thrust :: device_pointer_cast(dev + 5))。get();' –

回答

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開發分支來解決此問題。

[這個答案大部分都是從註釋中組合出來的,並且作爲一個社區wiki條目添加來解決CUDA標籤未回答的問題列表]。