In der GPUDevice Code, habe ich festgestellt, dass eine GPUDeviceContext pro Stream gemacht wird.TensorFlow Device Kontexte, Streams und Kontextwechsel
Dies ist der Zweck, so dass jeder Kontext einen OpKernelContext steuern kann und dann, da die verschiedenen Streams ausgeführt werden müssen, die Kontexte einfach umgeschaltet werden können, die unterschiedliche Daten/Codes auf die GPU schieben und dann ausführen.
Werden die verschiedenen Streams als unterschiedliche Geräte registriert (z. B. '/ gpu: 0' und '/ gpu: 1')?
Pro this, ThreadPoolDevices haben keine Kontexte, aber wenn ich Kontexte in ThreadPoolDevice hinzufügen würde, würden sie am besten als eine Art ThreadContext passen?
Ich war auch besorgt über die tatsächliche Initialisierung der Gerätekontexte, aber es scheint, dass Sie sie im Konstruktor des 'BaseGPUDevice' initialisieren und sie dann halten, bis Sie' FillContextMap' ausführen. Letztendlich frage ich mich, warum die Ausführungsengine null Kontexte hatte. Ich nehme an, das liegt daran, dass ich sie nicht in die Kontextkarte gedrängt habe. Können Sie bestätigen, dass dies zu einem Nullptr-Problem führen würde? https://github.com/tensorflow/tensorflow/blob/73ced9d797056c7e67a06ed2098dd809d85ec44a/tensorflow/core/common_runtime/gpu/gpu_device.cc#L338 –