GPUDeviceコードでは、ストリームごとに1つずつGPUDeviceContextが作成されています。TensorFlowデバイスのコンテキスト、ストリーム、およびコンテキストの切り替え
すべてのコンテキストが1つのOpKernelContextを制御できるようにし、さまざまなストリームを実行する必要があるときにコンテキストを切り替えるだけで、異なるデータ/コードをGPUにプッシュして実行します。
さまざまなストリームが異なるデバイス(つまり、 '/ gpu:0'と '/ gpu:1')として登録されますか?
thisの場合、ThreadPoolDeviceにはコンテキストはありませんが、ThreadPoolDeviceにコンテキストを追加すると、ThreadContextの一種として最も適していますか?
私はデバイスコンテキストの実際の初期化についても心配していましたが、 'BaseGPUDevice'のコンストラクタでそれらを初期化し、' FillContextMap'を実行するまでそれらを保持するように見えます。最終的に、なぜ実行エンジンにnullコンテキストがあるのか不思議です。私はコンテキストマップにそれらをプッシュしていなかったので、これが仮定しています。これがnullptrの問題を引き起こすかどうか確認できますか? https://github.com/tensorflow/tensorflow/blob/73ced9d797056c7e67a06ed2098dd809d85ec44a/tensorflow/core/common_runtime/gpu/gpu_device.cc#L338 –