【问题标题】:How to configure Dev-cpp on windows to run CUDA?如何在 Windows 上配置 Dev-cpp 以运行 CUDA?
【发布时间】:2020-03-29 02:24:26
【问题描述】:

我已在 Windows 7 上安装了 cuda 工具包,并已成功使用 VS 2017 运行 CUDA 代码。现在,我想在 Windows 上配置 Dev-cpp 来运行我的 CUDA 代码。

【问题讨论】:

  • 你不能。您必须在 Windows 上将 Microsoft 工具链与 CUDA 一起使用
  • 即使您找到了解决答案中建议的工具链互锁的方法,您也应该意识到工具链集成的过程不仅仅是一个机械过程。之所以存在这些互锁,是因为主机工具链和设备工具链必须就一些重要的行为达成一致,其中一些在 CUDA 编程指南中进行了介绍。 NVIDIA 没有设计意图来支持 Windows 上的其他主机编译器(MSFT cl.exe 除外),任何试图绕过机制来实现这一点的尝试都意味着您处于未经测试和不受支持的领域。
  • 感谢@talonmies 和 Robert 的指导。
  • @RobertCrovella NVRTC,正如我最初在回答中所建议的那样,可以按设计独立于主机工具链使用。但是,我同意我的回答在其原始版本中确实使工具链集成问题听起来比实际问题更简单。我已经用更多细节扩展了我的答案,希望能涵盖这些要点……
  • NVRTC 的使用不会以任何方式否定它与受支持的主机工具链一起使用的要求。 NVRTC 文档本身声明它是 CUDA 工具包的一部分,因此正确使用 CUDA 工具包的要求也适用于 NVRTC。例如,如果您有一个主机工具链,它在 linux 上将 int 解释为 64 位数量(从语言的角度来看完全合法),如果任何 int 参数作为 NVRTC 内核调用的一部分传递,它将中断,因为Linux 上的 CUDA 设备代码(NVRTC 与否)将 int 解释为 32 位数量。

标签: cuda dev-c++


【解决方案1】:

Dev-C++ 似乎不再处于积极开发中,而且似乎已经有很长一段时间了[1]。 Dev-C++ 的开发最初似乎在 2005 年左右就停止了。从那以后有两次分叉。 The absolute latest version 我似乎能找到的任何分叉都来自 2015 年 4 月,此时已经接近 5 年前......

我不是 Dev-C++ 的用户,也从来不是。但是,基于该软件的过时程度,我不禁建议使用其他软件。 Dev-C++ 对 CUDA 的官方支持肯定没有,据我所知也没有。 CUDA 工具包正式支持 Windows 上的Visual Studio IDE,这可能是我推荐使用的。

话虽如此,it would seem 可以使用自定义 Makefile 来使用 Dev-C++ 构建您的项目。因此,理论上,您可以手动将用于构建 CUDA 代码等的目标添加到 Makefile 中并使用它。但是,官方 CUDA 工具链旨在与 MSVC 工具链互操作。它并非旨在与 Windows 上的其他工具链互操作。因此,nvcc 需要 compatible version of the Microsoft Visual C++ Compiler 才能在 Windows 上用作主机编译器。 nvcc 实际上会拒绝在没有可用的可接受版本的 MSVC 的情况下运行。

在考虑使用非官方支持的主机工具链时,您必须注意许多问题,例如 ABI 兼容性。 nvcc 等不遗余力地使基本数据类型的大小和对象布局等内容与使用的任何受支持的主机编译器保持一致。为了能够在 CPU 和 GPU 之间共享数据结构,主机和设备代码必须就声明的含义达成一致。特别是nvcc 还会在后台生成大量代码,例如处理 CUDA 模块、通过未修饰的名称访问设备变量和内核,以及实例化和调用内核模板。以 CUDA 编程指南中记录的方式使用运行时 API需要这种编译器支持。

另一种方法是使用driver APINVRTC 来编译您的代码。这种方式只需要 CUDA 工具包中的库,不需要特定的工具链集成。但是,这样做时,您必须了解并专门制作您的主机代码,以便根据 NVRTC 观察到的 ABI 与 NVRTC 编译的设备代码进行互操作。另外,请注意 NVRTC 是一个必须从程序中调用的库。因此,如果您想在构建时使用这种方法编译 CUDA 代码,您将不得不编写自己的命令行工具并构建集成......

另一种选择是使用 clang 作为nvcc 的开源替代方案。 clang 可以编译主机和设备代码,并以类似于nvcc 的方式处理 ABI 问题和代码生成(主要区别在于 clang 不需要单独的主机编译器)。编程接口与nvcc 提供的接口基本相同(没有一些小细节)。更多信息here。这很可能是集成到 Dev-C++ 中的最简单方法。由于 clang 不是官方支持的工具链,它通常会缺少一些功能。然而,它似乎对现在的大多数事情都很好。

【讨论】:

    猜你喜欢
    • 2011-08-16
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 2021-08-21
    • 2022-08-06
    • 1970-01-01
    • 2017-12-09
    相关资源
    最近更新 更多