Я запустил некоторый код CUDA, который обновил массив с плавающей точкой. У меня есть функция-оболочка, подобная описанной в Как я могу скомпилировать код CUDA и затем связать его с проектом C ++? этот вопрос.
Внутри моей функции CUDA я создаю цикл for следующим образом ...
int tid = threadIdx.x;
for(int i=0;i<X;i++)
{
//code here
}
Теперь проблема в том, что если X равен значению 100, все работает просто отлично, но если X равен 1000000, мой вектор не обновляется (почти как если бы код внутри цикла for не получался выполняется)
Теперь внутри функции-обертки, если я вызываю функцию CUDA в цикле for, она все равно работает просто отлично (но по какой-то причине значительно медленнее, чем если бы я просто выполняла один и тот же процесс на процессоре), как это. ..
for(int i=0;i<1000000;i++)
{
update<<<NumObjects,1>>>(dev_a, NumObjects);
}
Кто-нибудь знает, почему я могу выполнить миллион раз в функции-обертке, а не просто вызвать функцию обновления CUDA один раз, а затем внутри этой функции запустить цикл for из миллиона?