gpt4 book ai didi

cuda - 使用 CUDA 模块构建 GPL C 程序

转载 作者:行者123 更新时间:2023-12-04 00:45:03 24 4
gpt4 key购买 nike

我正在尝试修改用 C 编写的 GPL 程序。我的目标是用 CUDA 实现替换一种方法,这意味着我需要使用 nvcc 而不是 gcc 进行编译。我需要帮助构建项目 - 不实现它(你不需要知道任何关于 CUDA C 的帮助,我不认为)。

这是我第一次尝试更改涉及 .configure 和 Makefile 的中等复杂度的 C 项目。老实说,这是我很长时间以来第一次在 C 中做任何事情,包括任何涉及 gcc 或 g++ 的事情,所以我很迷茫。

我对学习配置和 Makefile 不是很感兴趣——这更像是一个实验。在花时间创建正确的构建脚本之前,我想看看项目实现是否顺利。 (不是不​​愿意根据需要学习,只是想给出一个范围的想法)。

话虽如此,我有什么选择来构建这个项目?我有无数的问题...

  • 我尝试在 AC_PROG_CC 之后将“CC=nvcc”添加到 configure.in 文件中。这似乎可行 - 运行 configure 和 make 的输出显示 nvcc 作为编译器。但是 make 无法使用 CUDA 内核编译源文件,无法识别 CUDA 特定的语法。我不知道为什么,希望这会奏效。
  • 是否可以使用 nvcc 编译源文件,然后在主程序的 make 过程中的链接步骤中包含它?如果是这样,怎么做? (这个问题可能没有意义——我对此真的很生疏)
  • 这样做的正确方法是什么?
  • 有没有一种快速而肮脏的方法可以用于测试目的?
  • 每个人都使用一些 secret 工具来设置和理解这些配置和 Makefile 吗?这比我习惯的 Apache Ant 脚本还要糟糕(是的,我不在我的领域)
  • 最佳答案

    您不需要使用 nvcc 编译所有内容。您猜测您可以使用 NVCC 编译您的 CUDA 代码并保留其他所有内容(链接除外)是正确的。这是我开始使用的方法。

  • 添加 1 个新 header (例如 myCudaImplementation.h)和 1 个新源文件(扩展名为 .cu,例如 myCudaImplementation.cu)。源文件包含您的内核实现以及(主机)C 包装函数,该函数使用适当的执行配置(又名 <<<>>>)和参数调用内核。头文件包含 C 包装函数的原型(prototype)。让我们调用这个包装函数 runCudaImplementation()
  • 我还将在源文件中提供另一个主机 C 函数(在 header 中带有原型(prototype)),该函数查询和配置存在的 GPU 设备,如果成功则返回 true,否则返回 false。我们称这个函数为 configureCudaDevice() .
  • 现在,在您通常调用 CPU 实现的原始 C 代码中,您可以执行此操作。
    // must include your new header
    #include "myCudaImplementation.h"

    // at app initialization
    // store this variable somewhere you can access it later
    bool deviceConfigured = configureCudaDevice;
    ...
    // then later, at run time
    if (deviceConfigured)
    runCudaImplementation();
    else
    runCpuImplementation(); // run the original code
  • 现在,由于您将所有 CUDA 代码放在一个新的 .cu 文件中,您只需使用 nvcc 编译该文件。其他一切都保持不变,除了您必须链接到 nvcc 输出的目标文件。例如
    nvcc -c -o myCudaImplementation.o myCudaImplementation.cu <other necessary arguments>

  • 然后将 myCudaImplementation.o 添加到您的链接行(类似于:)
    g++ -o myApp myCudaImplementation.o

    现在,如果您有一个使用 configure 的复杂应用程序要使用并且已经有一个复杂的 makefile,那么它可能比上述涉及更多,但这是一般方法。底线是您不想用 nvcc 编译所有源文件,只需要 .cu 文件。将您的主机编译器用于其他所有内容。

    我不是配置专家,因此无法真正提供帮助。您可以运行 configure 来生成一个 makefile,然后编辑该 makefile——这不是一个通用的解决方案,但它会让你开始。

    请注意,在某些情况下,您可能还需要单独编译 .cu文件从链接它们。在这种情况下,您需要使用 NVCC 的单独编译和链接功能, this blog post might be helpful .

    关于cuda - 使用 CUDA 模块构建 GPL C 程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9363827/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com