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

时间:2019-01-22 16:36:01

标签: c cuda nvcc

我正在尝试将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数组作为参数的最佳方法是什么?指向第一行第一个元素的指针?

在此先感谢您的帮助。

1 个答案:

答案 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);
}