documentation, çerçeve tabanlı iş parçacığının dilime göre daha iyi bir üretkenliğe sahip olduğunu gösterir. Ayrıca, kodlayıcının seri olan bölümleri nedeniyle ikincinin iyi ölçeklenmediğini de not eder. veryfast
profili (gerçek zamanlı olmayan) için kodlama parçacıkları genel
Speedup: üzerinde çalışmak için farklı çerçeveler ihtiyacı olduğu süre
threads speedup psnr
slice frame slice frame
x264 --preset veryfast --tune psnr --crf 30
1: 1.00x 1.00x +0.000 +0.000
2: 1.41x 2.29x -0.005 -0.002
3: 1.70x 3.65x -0.035 +0.000
4: 1.96x 3.97x -0.029 -0.001
5: 2.10x 3.98x -0.047 -0.002
6: 2.29x 3.97x -0.060 +0.001
7: 2.36x 3.98x -0.057 -0.001
8: 2.43x 3.98x -0.067 -0.001
9: 3.96x +0.000
10: 3.99x +0.000
11: 4.00x +0.001
12: 4.00x +0.001
temel fark, çerçeve parçacığı gibi görünüyor, çerçeve gecikme ekler dilim tabanlı iş parçacığı tüm iş parçacıkları aynı çerçeve üzerinde çalışır. Gerçek zamanlı kodlamada, çevrimdışına göre boru hattını doldurmak için daha fazla karenin gelmesini beklemek gerekir.
Çerçeve temelli iş parçacığı olarak da bilinen normal iş parçacığı, paralellik için zekice sıralanmış bir çerçeve sistemi kullanır. Ama bir maliyete varıyor: Daha önce de belirtildiği gibi, her ekstra iş parçacığı bir gecikme süresi daha gerektirir. Dilime dayalı iş parçacığı böyle bir soruna sahip değildir: her kare dilimlere bölünür, her dilim bir çekirdek üzerinde kodlanır ve sonuç son kareyi oluşturmak için birbirine eklenir. Maksimum verimi, çeşitli nedenlerle çok daha düşüktür, ancak en azından gecikme olmadan bir miktar paralellik sağlar. Diary of an x264 Developer
Sliceless diş: kaynaktan
2 parçacığı ile örnek. Kodlama çerçevesini başlat # 0. Yarısı bittiğinde, # 1 çerçevesini kodlamaya başlayın. Geri kalanlar henüz kodlanmadığı için, 1. no.lı iplik sadece referans çerçevesinin en üst yarısına erişebiliyor. Yani hareket arama aralığını kısıtlamak zorunda. Ama bu muhtemelen tamam (küçük bir çerçeve üzerinde çok sayıda iplik kullanmıyorsanız), çünkü bu kadar uzun dikey hareket vektörlerine sahip olmak oldukça nadirdir. Kısa bir süre sonra, her iki iplik bir satır makro bloku kodladı, yani iplik # 1 hala hareket aralığı = +/- 1/2 çerçeve yüksekliğini kullanmaktadır. Daha sonra, iş parçacığı # 0, # 0 çerçevesini bitirir ve # 2 numaralı kareye gider. Konu # 0 şimdi hareket kısıtlamaları alır ve # 1 iş parçacığı sınırlandırılmamış. Gönderen
: http://web.archive.org/web/20150307123140/http://akuvian.org/src/x264/sliceless_threads.txt
nedenle ziyade ardından bunları verimli kodlamak (performans ve kalite bilge) mümkün olduğunca çabuk bir çerçeve göndermek gerekir olarak duyu -tune zereolatency
ile sliced-threads
etkinleştirmeyi kolaylaştırır.
Aksine çok fazla iplik kullanmak, performansı potansiyel kazanımları aşabilecek şekilde tutmak için performansı etkileyebilir.
Varsayılan "ön ayar" kullanıyor musunuz? -preset ultrafast'ı kullanırsanız ne olur? – aergistal
Ultrafast, yukarıdaki her iki durumda da kullanılır. – CurtisGuo
Bu ilginç bir soru. 'Ffmpeg' ve' libx264'ün son sürümlerini ve hangi OS/CPU’yu kullanıyorsunuz. Ayrıca nasıl ölçüyorsun? – aergistal