Порядок ключевых слов функции / метода C ++ / CUDA - PullRequest
0 голосов
/ 25 апреля 2020

Я пытался объявить функцию как __global__ friend void ... в коде CUDA и не получил ни предупреждения IDE, ни ошибки компиляции рядом с объявлением функции, но я не смог использовать функцию из-за ошибки «необъявленный идентификатор». После некоторого поиска, я нашел документацию , описывающую ограничения функций друзей в CUDA, которая неявно намекнула, что я должен использовать friend __global__ void.

Но я не нашел никакой информации о порядке ключевых слов в объявлении функций в документации CUDA, так что, возможно, этот вопрос касается не CUDA, а C ++.

Поэтому мне интересно, в каком порядке я должен размещать ключевые слова в объявлении функции / метода в коде C ++ / CUDA ?

РЕДАКТИРОВАТЬ:

  1. Похоже, я был серьезно неправ, и есть независимо от того, , использую ли я friend __global__ или __global__ friend - похоже, что ошибка моей IDE , коды с обоими порядками ключевых слов успешно скомпилированы

  2. Пример кода:

class MyClass
{
public:
    friend __global__ void get_field(const MyClass *m, int *return_value);

private:
    int field;
};


__global__ void get_field(const MyClass *m, int *return_value)
{
    *return_value = m->field;
}


int main()
{
    MyClass m{};

    int *d_field;
    cudaMallocManaged((void **)&d_field, sizeof(int));
    get_field<<<1, 1>>>(&m, d_field);
    cudaFree(d_field);
}
Обновленный вопрос, который я хочу задать, следующий: есть ли в C ++ / CUDA ситуация, когда порядок ключевых слов имеет значение либо для успешной компиляции, либо для чего-то еще?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...