CUDA中作为参数的矩阵

CUDA中作为参数的矩阵,cuda,Cuda,我在CUDA编程方面有两个问题 我想在CUDA程序中将矩阵作为函数参数传递。我试着跟着。GCC编译器编译以下代码,但NVIDIA CUDA C编译器不编译此代码并提示错误。(我已安装CUDA 7.5) 及 两者都不起作用。它给出了“不允许使用参数”错误 在main方法中,我想声明一个矩阵 int a[n][n]; 其中n从1运行到5(在for循环中)。它给出了“表达式必须具有常量值”错误 我在哪里犯了错误 我试着用gcc和nvcc编译器编译代码,gcc编译而nvcc不编译 因为您在Windo

我在CUDA编程方面有两个问题

  • 我想在CUDA程序中将矩阵作为函数参数传递。我试着跟着。GCC编译器编译以下代码,但NVIDIA CUDA C编译器不编译此代码并提示错误。(我已安装CUDA 7.5)

  • 两者都不起作用。它给出了“不允许使用参数”错误

  • 在main方法中,我想声明一个矩阵

    int a[n][n];
    
    其中n从1运行到5(在for循环中)。它给出了“表达式必须具有常量值”错误

  • 我在哪里犯了错误

    我试着用gcc和nvcc编译器编译代码,gcc编译而nvcc不编译


    因为您在Windows上执行此操作,
    nvcc
    注意
    nvcc
    不是编译器)使用Visual Studio编译器编译主机。VisualStudio没有,因此您不能在将在Windows上与CUDA一起编译的任何主机代码中使用它们。您必须重写代码,而不必在主机代码中使用C99语言功能


    如果您在linux上执行此操作,您将使用gcc通过nvcc编译主机代码,并且如果您提供正确的命令行选项并使用扩展名
    .c
    传递文件,C99语言功能将可用,正如您在问题中巧妙地演示的那样。C99特性和CUDA不能在<代码> .Cu/COD>文件中混合,因为CUDA要求C++编译器编译包含CUDA语言扩展的主机代码。我认为这就足够了。@Talonmes我的问题是,gcc编译器在CUDA编译器不编译的地方编译。你能理解我的问题吗?有人已经为你的问题提供了完整的答案。NVCC默认使用主机C++编译器,因此第二个版本最合适。如果您尝试编译该答案中的第一个版本,nvcc/g++将准确地告诉您必须使用什么选项编译C99代码而不会出错。这并不能保证一个新问题。@Talonmes我已经编辑了这个问题,并添加了一张我得到的结果的图片get@talonmies我尝试过“nvcc-Xcompiler-std=c99 printmatrix.cu”、“nvcc-arch=sm_20 printmatrix.cu”这两种方法都没有编译
    void printMatrix(int row, int col, int matrix[row][col])
    
    int a[n][n];