Compiling

mplayer2 的編譯器標誌以針對舊硬體對其進行優化

  • November 10, 2012

我剛剛mplayer2 從原始碼 ( git://git.mplayer2.org/mplayer2-build.git) 編譯,因為儲存庫 (ubuntu 12.04) 版本在我的系統上不起作用。由於我有舊硬體,我只是想知道是否有一些編譯器標誌可以用來為我的硬體優化它。

CPU 是 Athlon XP 2200+(移動),1GB RAM,顯卡:Nvidia GeForce4 420 Go。

我也想在另一個具有類似規格的舊系統上做同樣的事情:

CPU:速龍 1,2 GHZ,1GB RAM,圖形:

$$ SiS $$65x/M650/740

一般建議

如果從您的 mplayer2 分發儲存庫中獲取的版本不適合您,最好向錯誤跟踪系統報告什麼不工作,這樣它對您和其他人都有好處:

  • 在此版本的發行版中,它已針對您的硬體進行了修復。
  • 當您升級到較新版本的發行版時,它會(很有可能)工作,而不必擔心。
  • 它將使其他可能遇到相同問題的人受益,但像您一樣,還沒有承擔報告錯誤的任務。

在特定係統上重新編譯

專門為你的機器重新編譯程序可能比發行版發布的“通用”風格有更好的結果(順便說一句,這是 Gentoo 人在將東西重新編譯到自己的系統時的動機之一)。

當然,您可能會在速度上獲得一些改進,但您會失去二進製文件的可移植性。

通用編譯

話雖如此,在目前 Debian/Ubuntu 系統中重新編譯程序的一般方法是獲取源包及其建構依賴項,如下所示:

sudo apt-get build-dep mplayer2
sudo apt-get install fakeroot
apt-get source mplayer2

然後編輯debian/rules最後一個命令創建的目錄中的文件,以更改CFLAGSCPPFLAGSCXXFLAGSLDFLAGS.

您可以做些什麼來為您的機器定制應用程序?您將不得不試驗(閱讀:“測量/基準”,見下文)程序執行得更快的優化級別(如-O2-Os或)。-O3

要實際編譯程序,您需要在apt-get source mplayer2命令創建的目錄中執行:

fakeroot debian/rules binary
sudo dpkg -i ../*.deb

使用 GCC 4.7 或更高版本,您甚至可以嘗試-Ofast 編譯級別,這對於播放影片不會造成太大傷害,但可以為您帶來一些改進(足以不累積幀並導致音頻和影片不同步)。

編譯的系統/硬體特定部分

-mach=native要專門為您將執行它的機器編譯程序,使用 GCC 的標誌是一件好事。這可能會使生成的二進製文件在其他系統中無法使用,但只要您只關心您的系統,這就是要走的路。

只是為了讓您了解當我使用時在我的 Core i5-2410M 上啟用了哪些選項-march=native,請參閱(重新格式化輸出以不破壞站點的佈局):

gcc -march=native -E -v - < /dev/null 2>&1 | grep cc1
/usr/lib/gcc/i486-linux-gnu/4.7/cc1 -E -quiet -v -imultiarch i386-linux-gnu - \
 -march=corei7-avx -mcx16 -msahf -mno-movbe -maes -mpclmul -mpopcnt \
 -mno-abm -mno-lwp -mno-fma -mno-fma4 -mno-xop -mno-bmi -mno-bmi2 \
 -mno-tbm -mavx -mno-avx2 -msse4.2 -msse4.1 -mno-lzcnt -mno-rdrnd \
 -mno-f16c -mno-fsgsbase --param l1-cache-size=32 \
 --param l1-cache-line-size=64 \
 --param l2-cache-size=3072 -mtune=corei7-avx

從那裡您可以看到 GCC 檢測到我的電腦具有的一些“高級”指令 (AVX) 以及它沒有的其他指令 (AVX2)。

如何衡量結果

作為提示,要進行基準測試,只需播放一段短影片,例如foo.mkv

mplayer -benchmark -vo null -nosound foo.mkv

這將盡可能快地“播放”影片,並告訴您完整“播放”影片需要多少秒。請注意,我在引號中說“播放”,因為我們正在禁用:

  • 聲音解碼-nosound。與播放影片的其他部分相比,通常在這里花費的時間很少。
  • 實際顯示影片所用的時間 ( -vo null)。

要查看影片卡是否擋住了路,您可以省略-vo null上面命令中的部分,看看您想要的影片是否比實時播放更快(或無論您的目標是什麼)。

一些最後的話,第 1 部分:mplayer2 的具體案例

話雖如此,mplayer2(以及正常 mplayer,當後者取自發行版時)的大部分內容是它們的大部分處理都“解除安裝”到庫中。特別是,很多解碼是由 libav 或 ffmpeg 完成的,而這些是首先應該編譯/優化的包。

對於從上游獲取的“vanilla”mplayer(不是 mplayer2),它使用許多庫的嵌入式副本,這意味著,如果你從上游源編譯它(而不是我上面給你的方法 apt-get source mplayer2等),它還將編譯自己的 libav/ffmpeg,並有可能比替代品快得多。

一些最後的話,第 2 部分:在不重新編譯的情況下獲得一些收益

如果您更改了一些配置參數,並不總是需要重新編譯您的發行版提供的 mplayer/mplayer2 二進製文件。為了避免上述所有工作,我將首先播放影片,例如:

mplayer -framedrop -lavdopts fast:skipframe=nonref:skiploopfilter=nonref foo.mkv

當然,您可以使用我剛剛給您的選項,並且聯機幫助頁記錄了 and 的可能值skipframe等等skiploopfilter

並愉快地觀看影片!

引用自:https://unix.stackexchange.com/questions/45799