указатель функции устройства в качестве параметра шаблона - PullRequest
0 голосов
/ 09 ноября 2018

У меня есть шаблонная структура по некоторым причинам (за рамками этого вопроса):

template<typename T, __device__ retV (*funcptr)(T)>
struct func 
{
    __device__ inline retV invoke(T i) { funcptr(i); }
};

, который можно использовать таким образом:

__device__ double increment(double x) {
    return x + 1.0;
}

__constant__ func<double, double, &increment> myfunc;

__device__ double apply(double x) 
{
    return myfunc.invoke(x);
}

Это хорошо работает с nvcc (cuda 10.0), но завершается неудачно с nvrtc (JIT-компиляцией) со следующей ошибкой:

ошибка: атрибуты могут не отображаться здесь

Как мне изменить этот код, чтобы он работал с nvrtc? Или я должен добавить флаги в моей командной строке?

1 Ответ

0 голосов
/ 09 ноября 2018

Ну, ответ довольно прост:

__device__ атрибут не на месте (как указано компилятором). Структура func должна выглядеть следующим образом:

template<typename T, retV (* __device__  funcptr)(T)>
struct func 
{
    __device__ inline retV invoke(T i) { funcptr(i); }
};

Но я не знаю, почему у nvcc и nvrtc разные ожидания по этому поводу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...