【问题标题】:matrix as a parameter in CUDA矩阵作为CUDA中的参数
【发布时间】:2016-06-04 03:48:30
【问题描述】:

我在 CUDA 编程中有两个问题。

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

    void printMatrix( size_t rows, size_t cols, int a[][cols] )
    

    void printMatrix(int row, int col, int matrix[row][col])
    

两者都不工作。它给出了“不允许参数”的错误。

  1. 在main方法里面我要声明一个矩阵

    int a[n][n];
    

    其中 n 从 1 运行到 5(在 for 循环中)。它给出了“表达式必须有一个常数值”的错误。

我在哪里犯了错误。

我尝试使用 gcc 和 nvcc 编译器从 this question 编译代码,gcc 编译而 nvcc 不编译。

【问题讨论】:

  • 你今天已经问过一次这个问题了。我认为这就足够了。
  • @talonmies 我的问题是,gcc 编译器在 CUDA 编译器不编译的地方编译。你能理解我的问题吗
  • 有人已经为您的问题here 提供了完整的答案。 nvcc 默认使用宿主机 C++ 编译器,所以第二个版本最合适。如果您尝试编译该答案中的第一个版本,nvcc/g++ 将告诉您确切您必须使用什么选项来编译 C99 代码而不会出错。这不值得提出新问题。
  • @talonmies 我已经编辑了问题并添加了我得到的结果的图片
  • @talonmies 我试过 "nvcc -Xcompiler -std=c99 printmatrix.cu", "nvcc -arch=sm_20 printmatrix.cu" 都没有编译

标签: cuda


【解决方案1】:

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

如果您在 linux 上执行此操作,您将使用 gcc 通过 nvcc 编译主机代码,如果您提供正确的命令行选项并传递带有 .c 扩展名的文件,C99 语言功能将可用,正如您在问题中所证明的那样。 C99 功能和 CUDA 不能混合在 .cu 文件中,因为 CUDA 需要 C++ 编译器来编译包含 CUDA 语言扩展的主机代码。

【讨论】:

    猜你喜欢
    • 2014-03-16
    • 1970-01-01
    • 1970-01-01
    • 2020-05-11
    • 2012-04-12
    • 2015-11-08
    • 2011-05-02
    相关资源
    最近更新 更多