C语言 使用 2D 数组参数编译函数时出现 NVCC 错误



我正在尝试将 2D 数组传递给 CUDA 代码中的 C 函数,nvcc不会编译它,但gcc工作正常。代码如下:

#include<stdio.h>
void f(int row, int col, int[row][col]) {
    printf("LOLn");
}
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?它不受支持,在 CUDA 中提供 2D 数组作为参数的最佳方法是什么?指向第一行的第一个元素的指针?

提前感谢您对此的帮助。

对于与 C99 兼容的编译器,此方法有效,否则您应该使用带有强制转换的指针,如下所示:

#include<stdio.h>
void f(int row, int col, int *a) {
    printf("LOLn");
}
int main(void) {
    int mat[2][3];
    f(2, 3, (int*)mat);
}

最新更新