Ошибка NVCC при компиляции функции с аргументом 2D-массива - PullRequest
0 голосов
/ 22 января 2019

Я пытаюсь передать двумерный массив функции C в коде CUDA, и nvcc не скомпилирует его, но gcc работает нормально. Вот код:

#include<stdio.h>

void f(int row, int col, int[row][col]) {
    printf("LOL\n");
}

int main(void) {
    int mat[2][3];
    f(2, 3, mat);
}

Если я поместил этот код в test.c и запустил gcc test.c, он работает как положено.

Если я введу этот код в test.cu и запусту nvcc test.cu, он выдаст следующую ошибку:

test.cu(3): error: a parameter is not allowed

Почему он не работает с nvcc? Если это не поддерживается, каков наилучший способ дать 2D-массив в качестве параметра в CUDA? Указатель на первый элемент первого ряда?

Заранее спасибо за помощь в этом.

1 Ответ

0 голосов
/ 22 января 2019

Для C99-совместимого компилятора этот метод работает, в противном случае вы должны использовать указатель с приведением типа, например:

#include<stdio.h>

void f(int row, int col, int *a) {
    printf("LOL\n");
}

int main(void) {
    int mat[2][3];
    f(2, 3, (int*)mat);
}
...