簡體   English   中英

x264線程延遲

[英]x264 threading latency

我想知道為什么x264中的無切片線程( http://akuvian.org/src/x264/sliceless_threads.txt )會導致延遲? 例如,如果我有2個線程,則第一個編碼一個幀,第二個編碼一個幀。 在某些情況下,秒必須等待第一秒。 但是它們可以並行編碼。

因此,兩個線程應該比僅一個線程快,對嗎?

幀線程增加了以幀為單位的延遲,而不是以秒為單位,這是因為您需要在開始獲取輸出幀(以填充流水線)之前為編碼器提供更多輸入幀。 編碼一幀本身將花費與一個線程差不多的處理器時間,但是線程化允許通過並行編碼不同的幀來進行流水線處理。 另一方面,切片線程減少了延遲,因為所有線程並行地編碼一幀,因此它的完成速度比使用一個線程對其進行編碼快(切片線程也不需要幀中的延遲來進行管道固定)。

我花了相當長的時間來思考它,但是答案是排隊論。

當前一幀的一半已編碼后,即可開始每幀。 但是,如果並行化將提供任何好處,那么大多數(最好是所有)線程都應該有一個框架可以工作。 5個線程表示5幀。 那就是管道。 每當管道未完全滿滿時,並行化都會給您帶來更少的好處。 如果流水線僅包含一幀,則只有一個線程在工作,因此並行化沒有任何好處。 但是,如果您的管道通常已滿,那它充滿了什么? 未編碼的幀。 未編碼的幀是必須已捕獲的幀,因此它們代表了許多值得延遲的幀。 延遲可能會由於幀的一小部分恆定部分而略微減少,因為流水線中的某些那些幀是部分編碼的,但通常流水線中的每個項目都會導致延遲。

使用更多線程增加等待時間的原因之一是,連續幀將彼此用於運動預測和補償。 這意味着要壓縮幀,您需要先前運動估計詳細信息中的信息。 這意味着幀彼此依賴,有時它們還必須等待至少其他線程的一些數據。 這與切片線程形成對比,當線程將幀切成一幀時,每個線程都在一個切片上工作,並且所有線程都在同一幀上,並且它們具有前一幀或在B幀的情況下的下一幀的所有所需信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM