5

私は本当の修正をしています。助けてください。緊急です。

複数のホスト (CPU) スレッド (pthreads) を生成するホスト プロセスがあります。これらのスレッドは、順番に CUDA カーネルを呼び出します。これらの CUDA カーネルは、外部ユーザーによって作成されます。したがって、無限ループに入るのは不良カーネルである可能性があります。これを克服するために、対応する CPU スレッドを強制終了する 2 分間のタイムアウトを設定しました。

CPU スレッドを強制終了すると、GPU で実行されているカーネルも強制終了されますか? 私がテストした限りでは、そうではありません。

GPU で現在実行中のすべてのスレッドを強制終了するにはどうすればよいですか?

編集: カーネルを呼び出す CPU スレッドを使用している理由は、サーバーに 2 つの Tesla GPU があるためです。そのため、スレッドは代わりに GPU デバイスでカーネルをスケジュールします。

ありがとう、アービンド

4

3 に答える 3

1

これの大部分が実際に得られていない場合を除き、マルチデバイスタスクにはCUDA Streams APIを使用する方がよいかもしれませんが、YMMV.

殺害に関しては。ディスプレイ (および x サーバー) が接続された状態でカードを実行している場合、それらは 5 秒後に自動的にタイムアウトします (これも YMMV)。

これが当てはまらないと仮定します。cudaDeviceReset() API リファレンスの呼び出しを確認してください。独自の規定の「kill」タイムアウトの後に「親」スレッドから。

私はまだこの関数を自分のコードに実装していないので、正直なところ、あなたの状況で機能するかどうかはわかりませんが、調査する価値はあります.

于 2011-04-20T14:07:24.033 に答える
1

そうではないようです。壊れたカーネルを実行し、デバイスの 1 つを無期限にロックしたように見えました (再起動するまで)。実行中のカーネルを強制終了する方法がわかりません。ただし、ドライバーを介してカーネルの実行時間を制限する方法があると思うので、それが良い方法かもしれません。

于 2010-07-27T04:42:46.000 に答える
0

CPU スレッドを強制終了すると、GPU で実行されているカーネルも強制終了されますか? 私がテストした限りでは、そうではありません。

おそらくそうではありません。Linux では、cuda-gdb を使用してそれを把握できます。

スレッドを使用して複数のカーネルを GPU に送信する意味がわかりません.一度に複数のカーネルを GPU に送信するとどうなるでしょうか..GPU のスレッド スケジューラはそれを処理しますか?

于 2010-06-01T06:32:26.947 に答える