テンソルフローFIFOQueueは、プロデューサとコンシューマが非同期で実行されているC++ APIを使用したい(ここでは、Pythonコンテキストで非常に簡単に説明:TensorFlow C++, runtime issue)。 DirectSessionとそのスレッドプールサポート(ここで説明するように:Changing the number of threads in TensorFlow on Cifar10)を使用する必要があるという印象があります。したがって、BlockingOpとBlockingOpStateを使用している という例のdirect_session_test.ccファイルは、それらが良いテンプレートであるように見えます。テンソルフローC++ API DirectSessionクラスを非同期キューに使用する方法
しかしdirect_session.hは重要なメソッドを実験的(特に.Run())としてマークしているので、どのようなヒントやアドバイスを受け付けても歓迎されます。
DirectSessionには、ヘッダーdirect_session.hを含むほとんどのドキュメントがありません。 tensorflowの他のC++セッションクラス(例えばセッション、ClientSessionをインタラクティブ)との違い他の場所で議論されているのいくつか:
このスレッドは、セッションとClientSessionのを比較します Difference between ClientSession and Session in TensorFlow C++ API
このスレッドは、セッションとInteractiveSessionを比較: difference between tf.Session() and tf.InteractiveSession()?
ClientSessionで十分です。しかし、ロック(mutex)を持つプロデューサノードとコンシューマノードからのFIFOQueueノードの競合をどのように処理するかは変わりません。 direct_session_test.ccにはBlockingOpのアイデアがありますが、このキューの例は、より具体的な例を持つ有用なユースケースのようです。助言がありますか? – PhilAW
FIFOQueueに内部ミューテックスがあります。なぜもう1つ必要ですか? –
右、ありがとう、ミューテックスはC++ APIレベルで利用できます(QueueRunnerの使用が必要なPythonレベルとは異なります)。非同期の消費者/プロデューサのコンテキストでのその使用の例は、非常に役に立ちます。たとえば、EnqueueOpとDequeueOpを使用するか、FIFOQueue.TryEnqueue()とTry? – PhilAW