我正在尝试将2D数组传递给CUDA代码中的C函数,并且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
一起使用?它不受支持,在CUDA中将2D数组作为参数的最佳方法是什么?指向第一行第一个元素的指针?
在此先感谢您的帮助。
答案 0 :(得分:1)
对于与C99兼容的编译器,此方法有效,否则应将指针与cast一起使用,如下所示:
#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);
}