CUDA surf3Dread перегруженных типов, работает только один? - PullRequest
0 голосов
/ 23 января 2020

При тестировании, если я знаю, как распределять объекты поверхности, я проектировал фиктивное ядро ​​для чтения одного значения.

Это ядро ​​не работало во время компиляции, потому что

"ни один экземпляр перегруженной функции" surf3Dread "не соответствует списку аргументов"

__global__ void test_surface(cudaSurfaceObject_t surfImg,int x, int y, int z){

    float test = surf3Dread(surfImg , (int)(x*sizeof(float)) , y , z ,cudaBoundaryModeZero);
    printf("%f \n",test);
}

it работает, когда я делаю это вместо этого:

__global__ void test_surface(cudaSurfaceObject_t surfImg,int x, int y, int z){

    float test;
    surf3Dread(&test,surfImg , (int)(x*sizeof(float)) , y , z ,cudaBoundaryModeZero);
    printf("%f \n",test);
}

Это на самом деле не проблема, но я делал первое, потому что документация surf3Dread заявляет , что эта функция определена как :

template<class T>
T surf3Dread(cudaSurfaceObject_t surfObj,
              int x, int y, int z,
              boundaryMode = cudaBoundaryModeTrap);
template<class T>
void surf3Dread(T* data,
                 cudaSurfaceObject_t surfObj,
                 int x, int y, int z,
                 boundaryMode = cudaBoundaryModeTrap);

Возможно, я неправильно понимаю документацию, но я бы сказал, что первое ядро ​​здесь соответствует первому документированному способу вызова функции, а второе ядро ​​- второму. Почему работает только один? Если я неправильно понял первую функцию в документации, как вы называете эту версию?

Я использую CUDA 10.2

1 Ответ

1 голос
/ 23 января 2020

В первом случае компилятор не может вывести экземпляр шаблона из предоставленных аргументов функции. Вам необходимо явно указать тип для компилятора. Это:

#include <cstdio>

__global__ void test_surface(cudaSurfaceObject_t surfImg,int x, int y, int z){

    float test = surf3Dread<float>(surfImg, (int)(x*sizeof(float)), y, z, cudaBoundaryModeZero);
    printf("%f \n",test);
}

будет работать там, где ваша версия не будет.

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