2016-04-13 8 views
2

Я следующий фрагмент кодаCuda Thrust 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; 
} 

Этот код происходит сбой с Segfault из 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

Это подтверждено как bug в Thrust. В комментариях было высказано мнение, что это:

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

будет работать вокруг проблемы.

Сейчас появляется patch, который был добавлен в текущую ветку развития тяги для решения этой проблемы.

[Этот ответ был в основном собран из комментариев и добавлен в качестве записи в вики сообщества, чтобы получить этот вопрос из списка вопросов без ответа для тега CUDA].

 Смежные вопросы

  • Нет связанных вопросов^_^