2016-07-04 7 views
0

私は6つのGPUデバイスで動作するはずのマルチスレッドプログラムを持っています。 プログラムの全期間中に再利用するために、各デバイスで6つのストリームを開きたい(合計36件)。複数のストリームを1つのGPUデバイス

私はcudaStreamCreate()cublasCreate()cublasSetStream()を使用して各ストリームとハンドルを作成しています。 私はまた、GPUメモリーモニターを使用して、各ハンドルのメモリー使用量を確認します。 しかし、各デバイスのGPUメモリ使用量を見ると、最初のストリーム作成時にのみ増加し、残りのストリームでは変更されません。

私が知る限り、使用したいストリームの量に制限はありません。 しかし、私はハンドルとストリームのメモリ使用量がGPUのメモリ使用量に現れない理由を理解できません。

+1

各デバイスに最初のストリームを作成すると、おそらくそのデバイスのCUDAコンテキストが初期化されています。これには、顕著な/顕著な量のメモリ使用が含まれます。各デバイス上の追加のストリーム作成にはこのコンテキストの初期化が含まれないため、追加のメモリ使用量は比較して小さい(またはゼロ)です。 –

答えて

2

作成するすべてのストリームは、特定のデバイス上の単一のコンテキスト内に存在するため、最初のストリームの後に追加のストリームを作成すると、コンテキストに関連するオーバーヘッドはありません。ストリーム自体は軽量で、主にホスト側のスケジューラの抽象化です。あなたが見てきたように、彼らはそれ自身で(もしあれば)多くのデバイスメモリを消費しません。

関連する問題