2012-05-23 28 views
2

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

例如,如果我有多个客户端连接到服务器,他们将要求使用CUDA完成一些计算。将使用相同的CUDA对象请求多个操作(初始化非常昂贵)。我想用deferToThread功能,但是这并不让我推迟到一个特定的线程,只是“有些”线程。我想怎样做,最好是使用像deferToThread一种机制,但该代码运行在指定线程。任何建议将不胜感激,也许Twisted是这个项目的错误方式。

回答

3

CUDA驱动程序API已支持通过使用函数cuCtxPushCurrent()cuCtxPopCurrent()从多线程提交工作到CUcontext(驱动程序API)。当前许多版本。在CUDA 4.0及更高版本中,CUDA Runtime支持从多个操作系统线程向设备(CUcontext)提交工作或使用功能cudaSetDevice()从单个操作系统线程向多个设备提交工作。

我不知道这是否是通过pyCUDA暴露。

+0

这一策略行之有效。谢谢。 – tkerwin

1

为了您speciifc用例与CUDA,格雷格·史密斯的回答可能是最好的。

但是,对于发生在这个问题上的其他人在寻找一种方法在Twisted中的某个特定线程中执行某些操作,并且您可以看到,它并不太复杂。