2012-05-23 76 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中的某個特定線程中執行某些操作,並且您可以看到,它並不太複雜。