linux - 如何在 Windows 上的 Visual Studio 中编写 CUDA 并将其部署到 Linux?

标签 linux windows visual-studio cuda nvidia

我正在协助一位教授为并行编程类(class)设置一个实验室。该过程如下:

一名学生登录运行 Windows 7 的虚拟机。这台机器没有可用的 GPU。它安装了 7.5 版的 CUDA 工具包以及 Visual Studio 2013。学生应该使用 Visual Studio 编写他们的 CUDA 程序/项目。

为了测试/运行这些项目,学生可以远程访问相当高端的机器。我没有物理访问它的权限,但从我使用命令行可以看出,它有四个 NVIDIA Tesla M40。学生可以通过 SSH 远程访问这台机器。但是,问题是这台机器运行的是 Linux (Ubuntu 14.04.5)。我正在尝试弄清楚如何将学生在 Windows 上的 Visual Studio 中编写的内容部署到带有 GPU 的 Linux 机器上。我在 C、C++ 和 CUDA 方面的经验有限。我可以按照自己的方式处理 make 文件,但我们将不胜感激有关此主题的具体说明(如果它是解决方案的一部分)。

我读过这篇文章— Creating CUDA Projects for Linux — 其中详细说明了如何让 NVIDIA 的示例项目运行,但我不确定我是否可以调整它以在给定情况下工作。

我正在寻找一种让学生在 CUDA 中编写作业的简单方法,但他们还需要能够运行他们编写的内容。这位教授和我更喜欢 Visual Studio 的原因是:

  • 这门课很多同学都熟悉

  • 它很好地处理了项目架构

  • 它为学生提供了一个 GUI,有助于缩短学习曲线(学生可以专注于 CUDA 而不是终端、gcc 等——这些东西无疑非常有用,但它们不是类(class)的重点)

如果测试机器运行的是 Windows,那么学生可以简单地将 Visual Studio(在开发 VM 上)中解决方案的调试或发布文件夹的内容传输到测试机器,然后运行可执行文件。由于有两种不同的操作系统在运行,我不认为它会像这样工作。我知道在 Windows 上编写代码并在 Linux 上部署不会那么容易,但我希望有一个可行的解决方案。

重新配置设置并让学生直接在测试机器上开发或创建用于开发的 Linux VM 是可行的,但应尽可能避免。重新配置需要系统管理团队的参与,并且会延迟让学生编写代码的过程。

我对此进行了研究并且遇到了这些问题,但它们并不完全适用于这个特定案例:

How to write programs in C# .NET, to run them on Linux/Wine/Mono?

How should I develop CUDA on OSX and the deploy test on Linux

最佳答案

问题的直接答案是尝试采用 VS 解决方案/项目并在 linux 中重建它并不实际。这可能是可能的,但我不会将这种负担加在尝试学习 GPU 编程的学生身上。

另一种方法是让您的学生使用 X 转发 SSH 客户端,例如 Mobaxterm或者像 TightVNC 这样的远程处理解决方案从 Windows 机器 (VM) 到 GPU 所在的 Linux 机器。这两种方法之间存在一些细微差别。我相信 X-forwarded SSH 客户端方法的网络负载会稍微轻一些,并且实际上不需要在目标上运行 X-desktop,而 TightVNC 是一个实际的远程桌面解决方案。因此,这两种方法的用户体验可能会有所不同,但是如果所有有问题的机器(Windows VM、Linux GPU 盒)之间都有 100Mb 或更快的网络,并且您只运行几个客户端时间,我认为这可能无关紧要。

如果您在 linux 机器上为每个学生/客户建立单独的用户帐户,那么这两种解决方案都可能效果最佳。

并且由于学生将共享 GPU 资源,如果多个学生尝试同时运行项目,可能会出现问题,但对于入门级编程工作来说可能不是问题。

一旦建立连接,学生就可以启动 nsight 来运行基于 linux 的 GUI IDE(nsight Eclipse 版)来构建 CUDA 项目,并运行/调试/分析它们。

关于linux - 如何在 Windows 上的 Visual Studio 中编写 CUDA 并将其部署到 Linux?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39562066/

相关文章:

linux - 列出具有数字名称的文件

Windows CDROM 弹出

visual-studio - 单击 "Attach to Process"时 Visual Studio 2013 崩溃

c# - 托管 UserControl 设计器的 ToolStripControlHost 不会发生序列化

linux - 为什么我执行另一个脚本的 bash 脚本没有退出?

linux - POSIX 字符在 CodeBuild 服务器上不工作

比较 C 中的字符串文字命令行参数

c# - 普通 Windows 10 PC 的 USB 到 GPIO/SPI/I2C/UART?类似于 Raspberry Pi 40 针接头

windows - 将可能包含非 ASCII Unicode 字符的 PowerShell 输出解码为 Python 字符串

c++ - Voro++可以在Visual Studio中编译吗