2009年9月1日 星期二

ffmpeg benchmark

今天突然想要看看H.264的某一段code花的時間
我就熊熊想到ffmpeg好像本來就有benchmark的功能
就想說用他裡面就有的benchmark來測一定很棒
結果就看一下code 原來只有ffmpeg.c中的main()有用到
他只是用來測av_encode這個function所花的時間 不會吧
我本來以為benchmark很強大

好吧 看來我要測地方的時間 就只需要將ffmpeg的benchmark相關的code複製過去就好了
因為其實ffmpeg benchmark相關的code也不複雜
既然這樣就來看看ffmpeg的benchmark是怎麼做的 我這邊只看linux是怎麼做 至於windows是怎麼做的就再說啦

其實他只實做了一個function -- getutime()
顧名思義他就是要取得micro second(百萬分之一秒)
這裡的話會根據不同的平台會call不同的function
在linux的話 他會用sys/resource.h的getrusage
他會用這個的目的是要得到user time而不是要wall-clock time
在這裡我覺得很合理 因為這是codec大部分的時間都會在user mode底下執行 很少在system mode底下執行

看了看感覺getrusage好像很強大 ffmpeg居然用他來benchmark
就上網查了一下 發現這個function也不是完美的 在hyperthread的processor好像會不準  不過我沒試過

我另外看到這篇不錯的東西 寫得很好
Benchmarking misconceptions, microtime() vs. getrusage()
雖然說最後的code是php 但是其實概念是一樣的

沒有留言:

張貼留言