mplayer2 的編譯器標誌以針對舊硬體對其進行優化
我剛剛
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
最後一個命令創建的目錄中的文件,以更改CFLAGS
、CPPFLAGS
、CXXFLAGS
和LDFLAGS
.您可以做些什麼來為您的機器定制應用程序?您將不得不試驗(閱讀:“測量/基準”,見下文)程序執行得更快的優化級別(如
-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
。並愉快地觀看影片!