とある技術者の備忘録

~開発の記録~

処理時間の計測

Windows等の非RTOS向けのプログラムに比べると、
vxWorks等のRTOSのプログラムってのは、
処理時間がものすごくシビアだったりします(^-^;

そんなわけで、
いかに可視化されたキレイなコードで、処理時間の最適化を行うのか?
ってのが重要になってきます。

そこで、処理時間を計測するためのAPIをいくつか紹介してみます。
これらのAPIはプラットフォームに依存して使用可否が決まってきたりするので、その辺も含めて。

time()

 [プラットフォーム]
  ・Windows ・・可
  ・Linux ・・・可
  ・vxWorks ・・可

 [精度]
  ・秒(sec)
 [参考]
  http://www9.plala.or.jp/sgwr-t/lib/time.html

gettimeofday()

 [プラットフォーム]
  ・Windows ・・不可
  ・Linux ・・・可
  ・vxWorks ・・不可

 [精度]
  ・マイクロ秒(μsec)

 [参考]
  http://www.argv.org/~chome/blog/noisefactory/2008/02/gettimeofday.html

clock()

 [プラットフォーム]
  ・Windows ・・可
  ・Linux ・・・可
  ・vxWorks ・・可

 [精度]
  ・システムクロックに依存(※)

 [備考]
  ・Windowsでは、計測を開始した時刻から終了した時刻までの時間を計る。
  ・Linux/vxWorksでは、実際にCPUを使用していた時間を計る。
   お試し版でsleep()を使用してみたところ、後者では処理時間が計れなかった。

 [参考]
  http://www9.plala.or.jp/sgwr-t/lib/clock.html

clock_gettime()

 [プラットフォーム]
  ・Windows ・・不可
  ・Linux ・・・可
  ・vxWorks ・・可

 [精度]
  ・システムクロックに依存(※)

 [参考]
  http://luna2-linux.blogspot.jp/2011/11/blog-post.html

gf_gettime()

 [プラットフォーム]
  ・Windows ・・不可
  ・Linux ・・・不可
  ・vxWorks ・・可

 [精度]
  ・ナノ秒(nsec)

 [参考]
  http://gcc.gnu.org/ml/fortran/2011-02/msg00012.html

tickGet()

 [プラットフォーム]
  ・Windows ・・不可
  ・Linux ・・・不可
  ・vxWorks ・・可

 [精度]
  ・システムクロックに依存(※)

 [参考]
  http://www.vxdev.com/docs/vx55man/vxworks/ref/tickLib.html
  https://supportforums.cisco.com/docs/DOC-31076

vxTimeBaseGet()

 [プラットフォーム]
  ・Windows ・・不可
  ・Linux ・・・不可
  ・vxWorks ・・可

 [精度]
  ・ナノ秒(nsec)

 [参考]
  http://borkhuis.home.xs4all.nl/vxworks/vxw_pt2.html


※システムクロックとはtick値(1秒当たりのクロック数)のことで、以下で定義されている。
  time.hにdefineされているCLOCKS_PER_SECの値。
  なおvxWorksでは60がセットされていた。
   (例)
     CLOCKS_PER_SEC=1 ・・・1tick=1秒
     CLOCKS_PER_SEC=60 ・・・1tick=1/60秒



この辺の話はWeb上にいくらでも転がっているので、詳細はそっちのサイトを見てもらうとして。。。
同じような話をあっちでもこっちでもーーってやるのは非効率かと判断しました(^-^;
(手を抜いただけだったりして;;