2

Twisted と pyCUDA を使用してサーバーを作成しています。CUDA の動作に関する制限は、CUDA コンテキストを初期化したスレッドと同じスレッドでアクセスする必要があることです。しかし、Twisted のスレッドプールの実装では、特定のスレッドを要求することはできません。

たとえば、複数のクライアントがサーバーに接続されている場合、それらは CUDA で実行される計算を要求します。同じ CUDA オブジェクトで複数の操作が要求されます (初期化にはコストがかかります)。deferToThread 関数を使用したかったのですが、これでは特定のスレッドを延期することはできません。「一部の」スレッドだけです。私がやりたいことは、理想的には、deferToThread のようなメカニズムを使用することですが、コードが実行されるスレッドを指定することです。任意の提案をいただければ幸いです。おそらく Twisted はこのプロジェクトの間違った方法です。

4

2 に答える 2

3

CUDA ドライバー API は、関数cuCtxPushCurrent()およびcuCtxPopCurrent( )を使用して、複数のスレッドから CUcontext (ドライバー API) に作業を送信することをサポートしています。多くのリリースで最新。CUDA 4.0 以降では、CUDA ランタイムは、関数cudaSetDevice()を使用して、複数の OS スレッドからデバイス (CUcontext) への作業の送信、または単一の OS スレッドから複数のデバイスへの作業の送信をサポートしています。

これがpyCUDAを通じて公開されているかどうかはわかりません。

于 2012-05-24T01:41:37.033 に答える
1

CUDAを使用した特定のユースケースでは、GregSmithの答えがおそらく最良です。

しかし、Twistedの特定のスレッドで何かを行う方法を探しているこの質問に遭遇した他の人のために、Calendar andContacts Serverにはその機能の実装があり、ご覧のとおり、それほど複雑ではありません。

于 2012-05-24T16:12:05.260 に答える