C LANGUAGE TECHNOLOGY

【C言語】clock関数でプログラムの実行時間の計測

悩んでいる人

C言語でプログラムの実行時間の計測方法を教えて!

こういった悩みにお答えします.

本記事の信頼性

  • リアルタイムシステムの研究歴12年.
  • 東大教員の時に,英語でOSの授業.
  • 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校コンピュータサイエンス学部2021年の世界大学学術ランキングで20位)で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発
  • プログラミング歴15年以上,習得している言語: C/C++Solidity,Java,Python,Ruby,HTML/CSS/JS/PHP,MATLAB,Assembler (x64,ARM).
  • 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」GitHubにオープンソースとして公開

こういった私から学べます.

C言語でプログラムの実行時間の計測

C言語でプログラムの実行時間の計測方法を紹介します.

本記事で紹介する実行時間とは,プログラムが実際に実行した時間(スリープした時間を含まない)のことです.

現在時刻でプログラムの経過時間(スリープした時間を含む)を取得したい場合は,こちらの記事を読むことをおすすめします.

C言語 time関数
【C言語】time関数で現在時刻の取得

こういった悩みにお答えします. こういった私から学べます. 目次1 time関数2 ctime関数3 asctime/localtime/gmtime関数4 ctime/asctime/localti ...

続きを見る

clock関数

clock関数は,プログラムが利用したプロセッサ時間の近似値を返します.

戻り値は,clock_t単位のCPU時間なので,秒単位の時間を得るためにはCLOCKS_PER_SEC(値は1000000)で割ります.

clock関数を利用するコードは以下になります.

26行目の実行時間をprintf関数で表示する部分では,「end - begin」と引き算しています.

ここで,endでオーバーフローが発生し,beginでオーバーフローが発生しない場合,「end - begin」と引き算するとオーバーフローが発生してしまいます.

この場合,プログラムの実行時間を正しく計測できないことに注意して下さい.

実行結果は以下になります.

difftime関数

difftime関数は四捨五入して秒単位で実行時間を返す関数です.

difftime関数により,clock.cで発生したオーバーフローの問題を回避することが可能になります.

ここで,POSIXではtime_tは数値型なので,引き算の際に発生する可能性のあるオーバーフローを考慮しない場合,difftime関数は以下のように定義できます.

difftime関数を利用してclock関数で実行時間を計測するコードは以下になります.

実行結果は以下になります.

実行時間の揺らぎはありますが,大体同じくらいになります.

clock_gettime関数

clock_gettime関数は,指定されたクロックclk_idの時間を取得する関数です.

プログラムの実行時間を計測したい場合,プロセス単位ではCLOCK_PROCESS_CPUTIME_ID,スレッド単位ではCLOCK_THREAD_CPUTIME_IDをclk_idに設定します.

clock_gettime関数を利用するコードは以下になります.

実行結果は以下になります.同様です.

getrusage関数

getrusage関数は,資源の使用量を取得する関数です.

getrusage関数では,プログラムの実行時間をユーザ時間とシステム時間でそれぞれ計測できます.

プログラムの実行時間は,ユーザ時間とシステム時間の合計になります.

getrusage関数を利用するコードは以下になります.

実行結果は以下になります.

まとめ

C言語のclock関数でプログラムの実行時間の計測方法を紹介しました.

また,difftime関数,clock_gettime関数,getrusage関数の使い方も解説しました.

C言語を独学で習得することは難しいです.

私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.

友だち追加

独学が難しいあなたは,C言語を学べるおすすめのオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!

-C LANGUAGE, TECHNOLOGY
-, , , , , , , , , , ,