我正在使用Twisted和pyCUDA编写服务器。对CUDA如何工作的限制是我必须在我初始化它的同一个线程中访问CUDA上下文。但是,Twisted的线程池实现不允许我请求特定的线程。
例如,如果我有多个客户端连接到服务器,他们将请求使用CUDA完成一些计算。将使用相同的CUDA对象请求多个操作(初始化很昂贵)。我想使用deferToThread函数,但这不允许我遵循特定的线程,只是'某些'线程。理想情况下,我想要使用像deferToThread这样的机制,但是要指定代码运行的线程。任何建议都会受到赞赏,也许Twisted是错误的方式来进行这个项目。
答案 0 :(得分:3)
CUDA驱动程序API支持通过使用函数cuCtxPushCurrent()和cuCtxPopCurrent()从多个线程提交工作到CUcontext(驱动程序API)。许多版本的当前。在CUDA 4.0及更高版本中,CUDA Runtime支持从多个OS线程向设备提交工作(CUcontext),或使用函数cudaSetDevice()从单个OS线程向多个设备提交工作。
我不确定这是否通过pyCUDA公开。
答案 1 :(得分:1)
对于您使用CUDA的特殊用例,Greg Smith的回答可能是最好的。
但是,对于其他发生在这个问题上的人来说,寻找在Twisted中的一个特定线程中做事的方法Calendar and Contacts Server has an implementation of that functionality,正如你所看到的,它并不太复杂。