2017-07-13 4 views
-1

テンソルフロー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()?

答えて

0

DirectSessionを直接使用する必要はありません。 ClientSessionは十分なものでなければならず、スレッドプールはいつものようにconfigprotoを使って設定できます。

+0

ClientSessionで十分です。しかし、ロック(mutex)を持つプロデューサノードとコンシューマノードからのFIFOQueueノードの競合をどのように処理するかは変わりません。 direct_session_test.ccにはBlockingOpのアイデアがありますが、このキューの例は、より具体的な例を持つ有用なユースケースのようです。助言がありますか? – PhilAW

+0

FIFOQueueに内部ミューテックスがあります。なぜもう1つ必要ですか? –

+0

右、ありがとう、ミューテックスはC++ APIレベルで利用できます(QueueRunnerの使用が必要なPythonレベルとは異なります)。非同期の消費者/プロデューサのコンテキストでのその使用の例は、非常に役に立ちます。たとえば、EnqueueOpとDequeueOpを使用するか、FIFOQueue.TryEnqueue()とTry? – PhilAW

関連する問題