Я пытаюсь вызвать функцию 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.