#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
. Вы можете получить возвращаемое значение в указателе и скопировать его в процессор, чтобы проверить его, если это необходимо. Есть и другие способы, но это выходит за рамки данного ответа.