我是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平台(Win7 x64 with WOW64)。
- CUDA Driver API
- 用D语言编写的主程序。
有成千上万的程序完全在main之外使用CUDA,问题更可能是你的程序是用D而不是C/c++编写的。这并不是说它不能工作(我从未使用过D),但您需要记住,您正在调用C API,并且C是非托管的。