我有一个混合图形笔记本电脑,我正在使用Windows 7,我打算运行一个C++代码,其中还包含cuda,当GPU轮到启动时,我的nvidia GPU需要几秒钟刚刚启动,再次我猜它需要几秒钟才能预热,有没有什么办法可以在运行代码之后启动GPU(例如,在第一行main()函数中)?混合图形CUDA开始
谢谢先进。
我有一个混合图形笔记本电脑,我正在使用Windows 7,我打算运行一个C++代码,其中还包含cuda,当GPU轮到启动时,我的nvidia GPU需要几秒钟刚刚启动,再次我猜它需要几秒钟才能预热,有没有什么办法可以在运行代码之后启动GPU(例如,在第一行main()函数中)?混合图形CUDA开始
谢谢先进。
尝试把一个:
cudaSetDevice(0);
为您main
功能的第一道防线。或者你也可以尝试使用:
cudaFree(0);
我建议一个更好的选择。既然您使用的是Windows,那么您是否考虑过迫使程序从NVIDIA GPU开始?如果使用的是NVIDIA的Optimus(不切换显卡的物理开关一台笔记本电脑)试试这个:
右键点击使用CUDA程序,在右键菜单中,有一个名为"Run with graphics processor"
一个选项,下有选择"High-performance NVIDIA processor"
。 请注意,如果您使用Visual Studio,则可以使用此方法启动Visual Studio。这样,您的非CUDA卡将不会显示在程序中:-)
根据我的经验,如果您尝试执行CUDA/OpenGL互操作,如果没有此方法,您将遇到问题。有时OpenGL上下文是为您的非NVIDIA卡创建的,而CUDA上下文是在NVIDIA卡上创建的,导致奇怪的错误。
大部分预热问题是因为GPU需要使用CPU设置上下文。更多关于CUDA上下文设置 - http://stackoverflow.com/questions/10415204/how-to-create-a-cuda-context – Divakar
这种“热身”延迟主要是由于将CUDA DLL加载到内存中。这就是为什么Robert建议在程序生命早期调用cudaFree(0) - 强制在程序启动时加载大型CUDA dll。 – Paul