【问题标题】:How to call CUDA functions outside main()?如何在 main() 之外调用 CUDA 函数?
【发布时间】:2011-08-18 05:14:37
【问题描述】:

我对 CUDA 编程非常陌生,而且设置起来并不困难。我正在使用驱动程序 API,我修改了编译工作流程,我所有的学习内核和主机程序都运行良好。我直接从 cuda 源示例中学习,因为 SDK 主要依赖于它们。一切都很完美。

但我正在尝试将我的程序从经典控制台示例扩展到 GUI,并且我很难在经典 main() 函数之外调用任何 cuda 函数。我在 Win32 下,main() 之外的任何调用都会导致“访问冲突”,在 main() 中调用内核或设备查询函数可以正常工作,gui 程序也可以正常工作。这发生在包括 cuInit() 在内的所有 API 调用中,因此,使上下文成为当前、推送和弹出上下文是不可能的。如果你看一下 SDK 示例,它们都在 main() 中编码。

有人知道这个问题吗?这也发生在你身上吗?如何解决?

提前非常感谢您的 cmets。

信息:

  • CUDA SDK 版本:4.0
  • 设备:GeForce GTS 450 (GF106),设备能力 2.1
  • Win32 平台(Win7 x64 和 WOW64)。
  • CUDA 驱动程序 API
  • 使用 D 编程语言编写的宿主程序。

【问题讨论】:

    标签: cuda main nvidia


    【解决方案1】:

    有数以千计的程序完全在 main 之外使用 CUDA,问题更可能是您的程序是用 D 而不是 C/C++ 编写的。这并不是说它不能工作(我从未使用过 D),但您需要记住您正在调用 C API 并且 C 是非托管的。

    【讨论】:

    • 感谢您的回复。实际上,D 中的 CUDA 就像 C 中一样工作,因为 D 与 C ABI 兼容:d-programming-language.org/abi.html
    • 我忘了在我的问题中提到我所有的控制台程序都可以在主线程和其他线程之外完美运行。问题是在构建GUI二进制文件时,所以我认为它可能与Win32有关,但它似乎是我正在使用的一个库(DFL,D Forms Library),它包装了所有Win32的东西。对此不是 100% 确定的,这就是我询问 CUDA 和 Win32 的原因。有没有带有 win32 gui 的 cuda 示例?
    猜你喜欢
    • 2013-12-22
    • 1970-01-01
    • 2015-02-02
    • 2017-08-26
    • 1970-01-01
    • 2010-09-16
    • 1970-01-01
    • 2021-05-17
    • 2011-07-10
    相关资源
    最近更新 更多