两个主机线程、两个具有共享显示列表(纹理)的OpenGL上下文和cudaGLSetGLDevice的使用

两个主机线程、两个具有共享显示列表(纹理)的OpenGL上下文和cudaGLSetGLDevice的使用,opengl,cuda,Opengl,Cuda,我正在运行两个主机线程,这两个线程都使用在它们引用的OpenGL上下文之间共享的相同纹理。我认为这些线程中的每一个都必须在第一步运行cudaGLSetGLDevice,以便: 将设备绑定到当前线程 将设备绑定到当前创建的OpenGL上下文 请注意,当线程2调用cudaGLSetGLDevice时,线程1仍在工作。这将包括既没有从线程1调用cudaDeviceReset,也没有将其OpenGL上下文设置为以后执行 我得到的错误输出是: “设备在此过程中处于活动状态时无法设置” 我能做什么?我做错了

我正在运行两个主机线程,这两个线程都使用在它们引用的OpenGL上下文之间共享的相同纹理。我认为这些线程中的每一个都必须在第一步运行cudaGLSetGLDevice,以便:

  • 将设备绑定到当前线程
  • 将设备绑定到当前创建的OpenGL上下文
  • 请注意,当线程2调用cudaGLSetGLDevice时,线程1仍在工作。这将包括既没有从线程1调用cudaDeviceReset,也没有将其OpenGL上下文设置为以后执行

    我得到的错误输出是:

    “设备在此过程中处于活动状态时无法设置”

    我能做什么?我做错了什么


    我的系统由一个NVIDIA GTX 550Ti组成,我正在使用boost::thread。

    解决方案是从运行时切换到不隐藏上下文管理的驱动程序api。然后,我们可以为每个主机线程创建一个CUDA上下文,即使使用OpenGL互操作性,一切都很好:)