如何在main()之外调用CUDA函数?

如何在main()之外调用CUDA函数?,cuda,main,nvidia,Cuda,Main,Nvidia,我对CUDA编程非常陌生,在设置过程中也没有遇到困难。我使用的是驱动程序API,我修改了编译工作流程,我所有的学习内核和宿主程序都工作得很好。我直接从cuda源代码示例学习,因为SDK主要依赖它们。一切都很完美 但我正试图将我的程序从经典控制台示例扩展到GUI,我很难调用经典main()函数之外的任何cuda函数。我在Win32下,main()之外的任何调用都会导致“访问冲突”,在main()内调用内核或设备查询函数都可以,gui程序也可以。包括cuInit()在内的所有API调用都会发生这种情

我对CUDA编程非常陌生,在设置过程中也没有遇到困难。我使用的是驱动程序API,我修改了编译工作流程,我所有的学习内核和宿主程序都工作得很好。我直接从cuda源代码示例学习,因为SDK主要依赖它们。一切都很完美

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

有人对这个问题有线索吗?你也是这样吗?如何修复它

非常感谢您提前提出的意见

信息:

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

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

      谢谢您的回复。实际上,D中的CUDA与C中的CUDA工作原理相同,因为D与C-ABI兼容:我忘了在我的问题中提到,我所有的控制台程序都在main之外和其他线程中完美工作。问题是在构建GUI二进制文件时,所以我认为它可能与Win32有关,但似乎我正在使用的库(DFL,D Forms library)封装了所有Win32内容。不是100%确定,这就是为什么我问有关CUDA和Win32的问题。有没有使用win32 gui的cuda示例?