Используйте thrust :: lower после вызова других функций CUDA - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь вызвать функцию Thrust :: Reduce после использования моей собственной функции CUDA. Вот вопрос:

Если я использую thrust :: lower в до моей функции CUDA (только для теста), все в порядке, без ошибок, без выбрасывания.

Тем не менее, если thrust :: lower вызывается после запуска моей функции CUDA, появляется сообщение:

cudaErrorLaunchOutOfResources(7): 
[.../dispatch_reduce.cuh, 454]: too many resources requested for launch
[.../dispatch_reduce.cuh, 646]: too many resources requested for launch

Я думаю, что это может быть размер блока или размер потока. I изменилось в моем собственном ядре CUDA, которое изменило некоторые виды переменных среды для тяги. Но я прав?

Если да, как я могу изменить такие переменные обратно на значения для тяги?

Вот иллюстрация кодов:

//...
// some CUDA functions calculating the coordinate transformation matrix using different combinations of points (called RANSAC in surveying) 
// the CUDA functions use shared memory to speed up 
// all qualified answers leave a "1" in the resulting array (unsigned int res[])
//...

// calling a thrust reduce function to get the number of qualified results (simpling adding the numbers in res[]
void GetTotalQualNum(unsigned int* uQuali, unsigned int uTotalCandiNum, unsigned int* uTotalQualiNum)
{
    unsigned int* d_vec; 
    cudaMalloc*((void**)&d_vec, uTotalCandiNum * sizeof(unsigned int)); 
    cudaMemcpy(d_vec, uQualiRes, uTotalCandiNum * sizeof(unsigned int), cudaMemcpyHostToDevice); 
    thrust::device_ptr<unsigned int> pd_vec = thrust::device_pointer_cast(d_vec); 

    *uTotalQualiNum = thurst::reduce(thrust::device, pd_vec, pd_vec + uTotalCandiNum, 0); 

    cudaFree(d_vec); 
}

Графический процессор GTX1070 с CUDA 9.1.85 и Thrust v1.9.

1 Ответ

1 голос
/ 14 апреля 2020

После проверки ответов на другие вопросы, особенно функтор тяги: «слишком много ресурсов запрошено для запуска» , я понял, что это может быть связано с размером блока или размером сетки, которые я установил для своих собственных ядер CUDA, которые может повлиять на функцию тяги.

После изменения dim3 блока dim3 с 1024 на 512 ошибка больше не отображается.

Относительно правильного размера блоков и сеток, ссылка может быть найдена путем поиска по ключевым словам.

...