0

我想使用 OpenGL 和 CUDA 之间的互操作性。我知道,正如一些教程所说,第一步是选择设备。但是,当我在主函数的第一行调用 cudaGLSetGLDevice(0) 时,程序退出并显示信息“cudaSafeCall() Runtime API error 36: cannot set while device is active in this process.”

实际上,即使我在调用 cudaGLSetDevice 之前使用了 cudaDeviceProp 和 cudaChooseDevice,错误仍然存​​在。

相信我,我的电脑只有一个 GPU,9800GT。而且我知道 cudaGLSetGLDevice 的调用应该在任何其他 CUDA 函数之前,所以这就是为什么我把它放在 main 函数的第一行。

我使用 Windows SDK 来渲染 OpenGL 而不是 glut,这有问题吗?

4

1 回答 1

2

您需要在调用之前在 opengl 上下文中初始化cudaGLSetDevice。在过剩的情况下glutInit(argc, argv);被称为。在使用任何 cuda<->opengl 互操作性函数调用之前初始化 opengl 上下文。

于 2012-05-07T12:47:45.100 回答