4

x264 でスライスレス スレッド ( http://akuvian.org/src/x264/sliceless_threads.txt ) を使用すると、なぜレイテンシが発生するのでしょうか? たとえば、2 つのスレッドがある場合、最初に 1 フレームをエンコードし、2 番目に 1 フレームをエンコードします。場合によっては、秒は最初の秒を待たなければなりません。ただし、それらは並行してエンコードできます。

つまり、2 つのスレッドは 1 つだけよりも高速であるはずですよね?

4

3 に答える 3

3

フレームスレッディングは、(パイプラインを満たすために) 出力フレームの取得を開始する前に、より多くの入力フレームをエンコーダーに供給する必要があるため、秒単位ではなくフレーム単位でレイテンシーを追加します。1 つのフレーム自体をエンコードすると、1 つのスレッドとほぼ同じプロセッサ時間がかかりますが、スレッド化により、異なるフレームを並行してエンコードすることでパイプライン処理が可能になります。一方、スライス スレッドはレイテンシを減少させます。これは、すべてのスレッドが1 つのフレームを並列にエンコードするため、1 つのスレッドでエンコードするよりも速く終了するためです (また、スライス スレッドはパイプライン処理のためにフレームのレイテンシを必要としません)。

于 2012-07-24T11:43:10.363 に答える
2

それを理解するのにかなりの時間がかかりましたが、答えはキューイング理論です.

各フレームは、前のフレームの半分がエンコードされたときに開始できます。しかし、並列化が何らかの利点を提供する場合、ほとんどの (できればすべての) スレッドが作業するフレームを持つ必要があります。5 スレッドは 5 フレームを意味します。それがパイプラインです。パイプラインが完全に満たされていない場合は常に、並列化によるメリットが少なくなります。パイプラインにフレームが 1 つしか含まれていない場合は、1 つのスレッドしか機能していないため、並列化による利点は得られません。しかし、通常、パイプラインがいっぱいになっている場合、何がいっぱいになっているのでしょうか? エンコードされていないフレーム。エンコードされていないフレームは、キャプチャされている必要があるフレームであり、したがって、多くのフレームに相当する遅延を表しています。

于 2012-07-22T20:02:25.900 に答える