带有 mingw 的 cuda - 更新

发布于 2024-11-05 03:13:12 字数 627 浏览 3 评论 0原文

我们一直在 Linux 中开发代码,但想编译 Windows 可执行文件。旧的非 GPU 版本可以在 Windows 中使用 mingw 进行良好的编译,因此我希望能够对 CUDA 版本执行相同的操作。

策略是在 Visual Studio 中使用 nvcc 编译内核代码,其余的在 mingw 中使用 gcc 编译。

到目前为止,我们在 Visual Studio 中轻松编译了 .cu 文件(包含内核和内核启动)。但是,我们仍然无法在mingw中编译c代码。 c代码包含cuda api调用(例如cudaMalloc)和cuda类型(例如cudaEvent_t),因此我们必须包含cuda.h和cuda_runtime.h。但是,gcc 会针对这些标头给出警告和错误,例如:

../include/host_defines.h:57:0: warning: "__cdecl" redefined

以及

../include/vector_functions.h:127:14: error: 'short_4' has no member named 'x'

关于如何包含这些标头并编译代码的 c 部分的任何想法?

We have been developing our code in linux, but would like to compile a windows executable. The old non-gpu version compiles just fine with mingw in windows, so I was hoping I'd be able to do the same with the CUDA version.

The strategy is to compile kernel code with nvcc in visual studio, and the rest with gcc in mingw.

So far, we easily compiled the .cu file (with the kernel and kernel launches) in visual studio. However, we still can't compile the c code in mingw. The c code contains cuda api calls such as cudaMalloc and cuda types such as cudaEvent_t, so we must include cuda.h and cuda_runtime.h. However, gcc gives warnings and errors for these headers, for example:

../include/host_defines.h:57:0: warning: "__cdecl" redefined

and

../include/vector_functions.h:127:14: error: 'short_4' has no member named 'x'

Any ideas on how we can include these headers and compile the c portion of the code?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

〃温暖了心ぐ 2024-11-12 03:13:12

如果你真的很绝望,也许还有办法。 nvcc 实际上只是一堆编译器的前端。它大量调用 g++ 来删除注释、分离设备和主机代码、处理名称修改、将内容重新链接在一起等(使用 --verbose)来获取详细信息。

我的想法如下:您应该能够使用 mingw 编译主机代码,同时将设备代码编译到 Linux 机器上的 fatbin(因为我猜设备二进制文件是独立于主机的)。然后使用 mingw 将两部分代码重新链接在一起,或者使用驱动程序 API 动态加载 fatbin。免责声明:未测试!

If you are really desperate there might be a way. The nvcc is really just a frontend for a bunch of compilers. It invokes g++ a lot to strip comments, separate device and host code, handle name mangling, link stuff back together, etc. (use --verbose) to get the details.

My idea is as follows: You should be able to compile the host code with mingw while compiling the device code to a fatbin on a linux machine (as I guess the device binary is host-machine independent). Afterwards link both parts of the code back together with mingw or use the driver API to load the fatbin dynamically. Disclaimer: Did not test!

陌伤浅笑 2024-11-12 03:13:12

据我所知,没有MSVC是不可能使用CUDA的。因此,您需要 MSVC 来使 nvcc 工作,并且您可以使用 mingw 编译 CPU 代码并将所有内容链接在一起。

根据 http://forums.nvidia.com/index.php?showtopic=30743

“目前没有支持 mingw 的计划。”

As far as I know, it is impossible to use CUDA without MSVC. So, you need MSVC to make nvcc work, and you can compile CPU code with mingw and link everything together.

According to http://forums.nvidia.com/index.php?showtopic=30743

"There are no current plans to support mingw."

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文