【问题标题】:trying to use cuda with go on windows尝试在 Windows 上使用 cuda
【发布时间】:2018-03-13 07:11:59
【问题描述】:

有多种 Go 库依赖于 cuda.h 文件和 cuda 库(特别是 ML 库)。每次我尝试在 Windows 上安装其中一个库时,都会收到一条错误消息

 fatal error: cuda.h: No such file or directory
 //#include <cuda.h>

我知道我需要做什么(将 Cuda 库/头文件链接到我尝试安装的 go 库),但是,我不确定如何去做,尤其是在 Windows 上。由于各种原因,我使用的是 GCC 而不是 MSVC,但即使我尝试使用 MSVC,我也遇到了同样的问题。

有什么方法可以将 cuda 编译器/头文件直接链接到我的 Go 环境,或者我需要手动将 go/cgo 编译器指向保存 Cuda 头文件的目录,我该怎么做?

我曾尝试向一些制作这些库的开发人员寻求帮助,但他们中的大多数是 linux 用户,所以他们并不真正了解。一个详尽的谷歌搜索真的让我无处可去,所以我在这里问。

【问题讨论】:

  • 你在你的windows机器上安装了CUDA吗?那将是第一步。如果你打算使用 CUDA,GCC 不是官方支持的编译器。您应该使用 MSVC。
  • 是的,我的机器上当然安装了 cuda。 MSVC 也给出了同样的错误。
  • 如果你使用MSVC,那么在MSVC项目中添加一个包含路径,指向cuda.h所在的目录。
  • 即使我将 MSVC 指向 cuda 包含文件夹,它也无法正常工作。这非常烦人,我可以使用 tensorflow 和几乎任何其他带有 Cuda 的 ML 库,但我无法编译任何 golang 库。
  • 如果您有一个 MSVC 项目,并且您添加了类似 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include 的包含路径(或安装在您机器上的任何位置),那么该项目应该能够正确定位 #include &lt;cuda.h&gt; .不知道是什么问题。

标签: c windows go cuda cgo


【解决方案1】:

我找到了答案。

windows cuda 安装程序默认将东西安装到一个奇怪的路径中:

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include

由于文件夹名称中的空格,此路径给编译器带来了很大的麻烦。在将 Cuda 重新安装到 C:\CUDA\v8.0 中,然后在我的 CGO 文件中适当地附加我的 CFLAGS 和 LDFLAGS 之后,我能够让事情正常运行。

这里是我用来让它工作的 CFLAGS 和 LDFLAGS 供参考:

//#cgo windows LDFLAGS:-LC:/cuda/v8.0/lib/x64
//#cgo windows CFLAGS: -IC:/cuda/v8.0/include
import "C"

这是与 github.com/chewxy/cu go 库一起使用的。我还在 cgoflags.go 文件中将新标志附加到该库中,因为维护者那里还没有版本 8 或版本 9。我向他提到了这一点,他稍后可能会更新它,但现在这就是你必须做的。

【讨论】:

  • 您可以通过将路径括在引号中来解决空格问题,例如。 "C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\include" 如果您将路径放入 MSVS 项目的“额外包含路径”条目中,则不需要这样做。
  • 我使用的是 GCC。 MSVS 对我试图做的事情并没有太大帮助。我将我的 go 编译器换成了 MSVC 工具带(并短暂尝试了 LLVM),以查看 Windows 链接器是否能更好地处理这些类型的问题,但它看起来并不像它(仍然出现相同的错误)。也许,如果我在 cgo 而不仅仅是在 go 中构建一个库,这将是一个潜在的解决方案,但老实说,在大多数情况下,将路径移到更简单的东西会更好。
猜你喜欢
  • 2020-07-07
  • 2019-01-18
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多