Ошибка — необходимо настроить __глобальный__ вызов функции

#parallel-processing #cuda

Вопрос:

Я пишу код для сложения, Вычитания, Умножения и деления больших целых чисел. Но при компиляции кода я получаю эту ошибку вместе с другой ошибкой error: a __global__ function must have a void return type .

Код состоит из 700 строк, и в нем есть ошибки в нескольких строках. Поэтому для удобства я прикрепляю ссылку на свой ноутбук Google Colab. Пожалуйста, проверьте это здесь

И вот ошибка, которую я получаю

 /content/src/omp_cuda80.cu(94): error: a __global__ function must have a void return type

/content/src/omp_cuda80.cu(139): warning: missing return statement at end of non-void function "addition"

/content/src/omp_cuda80.cu(265): warning: variable "n" was declared but never referenced

/content/src/omp_cuda80.cu(367): error: a __global__ function call must be configured

/content/src/omp_cuda80.cu(381): error: a __global__ function call must be configured

/content/src/omp_cuda80.cu(390): error: a __global__ function call must be configured

/content/src/omp_cuda80.cu(442): error: a __global__ function call must be configured

/content/src/omp_cuda80.cu(456): error: a __global__ function call must be configured

/content/src/omp_cuda80.cu(465): error: a __global__ function call must be configured

/content/src/omp_cuda80.cu(533): error: a __global__ function call must be configured

/content/src/omp_cuda80.cu(538): error: a __global__ function call must be configured

/content/src/omp_cuda80.cu(548): error: a __global__ function call must be configured

/content/src/omp_cuda80.cu(553): error: a __global__ function call must be configured

11 errors detected in the compilation of "/content/src/omp_cuda80.cu".
/bin/bash: /content/src/omp_cuda80: No such file or directory
 

Комментарии:

1. Я думаю, что вам нужны самые базовые учебные пособия по CUDA, так как прямо сейчас вы просто «угадали», как написан CUDA, и неудивительно, что предположение неверно.

Ответ №1:

Если вы определяете функцию CUDA с помощью __global__ , вам нужно вызвать ее с помощью синтаксиса

 function<<<grid,block>>>(param1,param2,...); 
 

Вы называете их так

 function(param1,param2,...);
 

Вот почему вы получаете a __global__ function call must be configured .

Функции GPU также не возвращают значение, они должны возвращать void . Вы можете получить возвращаемое значение в указателе и скопировать его в процессор, чтобы проверить его, если это необходимо. Есть и другие способы, но это выходит за рамки данного ответа.