2016-03-30 16 views
4

2つのスレッドが同時にNテンソルをFIFOQueueのインスタンスにエンキューしようとしているとします。すなわち、彼らは呼んでいる。TensorflowのQueueBase.enqueue_manyはスレッド間で順序を保持しますか?

queue_instance.enqueue_many(T)ここで、Tは、テンソルの長さがNのリストである。

T1_1からT1_Nまでの各テンソルと、2番目のスレッドからT2_1からT2_Nとラベル付けしましょう。すべてが言われて完了したら(enqueue_manyへの両方の呼び出しが完了しました)、注文は保存されますか?つまり、キューに[T1_1, ..., T1_N, T2_1, ..., T2_N]または[T2_1, ..., T2_N, T1_1, ..., T1_N]のいずれかが含まれますか。または、テンソルをインターリーブされた方法でエンキューすることができますか?つまり、[T2_1, T2_2, T1_1, T2_3, T1_2, ...]?あるいは、第3の選択肢は、韻や理由が全くないということです:テンソルは任意の順序でエンキューされます。

答えて

4

各スレッドがエンキューするバッチ内の順序は保持されます。これを置くもう1つの方法は、FIFOQueue.enqueue_many()が同じキュー上の他のエンキュー操作に関して原子的に*実行されることです。キューの残容量がエンキューされているバッチのサイズよりも小さい場合エンキューが—を完了する前に


*  しかし、それはあなたがすることができます。すなわちバッチからデキュー要素に可能ですキューの容量よりもが大きいのバッチをエンキューし、デキューされた要素が十分になくなるまでエンキュー演算をブロックします。

関連する問題