我正在尝试将 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);
}