2

我正在用 Twisted 和 pyCUDA 编写服务器。CUDA 工作方式的一个限制是我必须在初始化它的同一线程中访问 CUDA 上下文。但是,Twisted 的线程池实现不允许我请求特定线程。

例如,如果我有多个客户端连接到服务器,它们将请求使用 CUDA 完成一些计算。将使用同一个 CUDA 对象请求多个操作(初始化很昂贵)。我想使用 deferToThread 函数,但这不允许我推迟到特定线程,只是“一些”线程。理想情况下,我想做的是使用 deferToThread 之类的机制,但要指定代码运行所在的线程。任何建议将不胜感激,也许 Twisted 是该项目的错误方式。

4

2 回答 2

3

CUDA Driver API 支持通过使用函数cuCtxPushCurrent()cuCtxPopCurrent( ) 从多线程提交工作到 CUcontext(Driver API ) 。当前适用于许多版本。在 CUDA 4.0 及更高版本中,CUDA 运行时支持从多个 OS 线程向设备提交工作 (CUcontext),或使用函数cudaSetDevice()从单个 OS 线程向多个设备提交工作。

我不确定这是否通过 pyCUDA 暴露出来。

于 2012-05-24T01:41:37.033 回答
1

对于您使用 CUDA 的特定用例,Greg Smith 的答案可能是最好的。

但是,对于遇到这个问题并在 Twisted 的一个特定线程中寻找一种方法的其他人来说,Calendar and Contacts Server 具有该功能的实现,并且如您所见,它并不太复杂。

于 2012-05-24T16:12:05.260 回答