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

Posted

技术标签:

【中文标题】如何在 Windows 上的 Visual Studio 中编写 CUDA 并将其部署到 Linux?【英文标题】:How can I write CUDA in Visual Studio on Windows and deploy it to Linux? 【发布时间】:2017-01-26 11:42:24 【问题描述】:

我正在协助一位教授为并行编程课程建立实验室。流程如下:

一名学生登录到运行 Windows 7 的虚拟机。这台机器没有可用的 GPU。它与 Visual Studio 2013 一起安装了 7.5 版的 CUDA 工具包。学生应该使用 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 等 — 不可否认,这些东西非常有用,但它们不是课程的重点)

如果测试机器运行的是 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

【问题讨论】:

真正简短的回答是你不能这样做 从您的 windows VM 中,使用 putty 和 ssh 登录到 linux 机器。在那里编写/编译/运行您的代码。如果你想要一个 GUI IDE,让学生使用他们的 windows VM 中的 Mobaxterm 之类的工具,通过 X 转发的 SSH 会话连接到 Linux 机器。然后在 linux 机器上运行 nsight eclipse edition,GUI 转发到 windows 机器。在这种情况下,每个学生都应该在 linux 机器上拥有一个单独的帐户。 @arbitrarystringofletters:更好的是,请发布您的脚本解决方案和注释作为答案。我们在 S.O. 上经常看到这样的 Q。永远不会以任何有意义的方式解决。对您所做工作的真实逐步描述将变成长期的代表点来源。(很乐意为这个问题的多个合理答案投票)。祝大家好运。 我同意,我宁愿自己学习一些东西。如果您发布您的答案,描述 TightVNC 的哪些方面运作良好以及您如何使用它,那对我来说会很有趣,可能其他人也会很感兴趣。无论如何,我的回答可能不会比我(已经发布的)评论多多少。 我使用 CUDA 进行了近十年的 Windows/Linux 混合开发,对于学生将创建的小型项目,我发现最简单的解决方案是使用命令行工具和一个普通的 makefile ,在 Windows 上使用 Cygwin 来获取 gmake 功能。没有 Cmake,没有 Eclipse,什么都没有。makefile 所需的少数操作系统依赖项可以抽象和隔离在一个文件中。像魅力一样工作,轻松与自动化脚本测试集成等。今天的学生可以在这样一个“古老”的非 GUI 环境中工作吗?我不知道。 【参考方案1】:

这个问题的直接答案是,尝试采用 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 项目,并运行/调试/配置它们。

【讨论】:

你能帮我理解什么是 X-forwarding,或者你能指出一些关于这个主题的资源吗? X是linux上常用的图形显示系统。 X 是一个基于客户端-服务器的系统。 X-forwarded SSH 会话允许 X-client 和 X-server 位于 SSH 连接的两端。除此之外,谷歌是你的朋友,你可以开始here

以上是关于如何在 Windows 上的 Visual Studio 中编写 CUDA 并将其部署到 Linux?的主要内容,如果未能解决你的问题,请参考以下文章

Visual Studio 6.0 在 Windows 10 下崩溃的一种解决方法

Visual Studio 6.0 在 Windows 10 下崩溃的一种解决方法

如何从 Visual Studio 2015 (+U1) ASP.NET Core 发布到 Windows Server 2012R2 上的 IIS?

如何使用 Visual Studio Express 安装 Windows 服务

如何在 Visual Studio 2017 中为 Windows XP 编译代码

如何在 Chromebook 上的 Visual Studio Code 中向上或向下移动一行