実行時間の計測

込み入った質問をさせていただきます。

CS+で既存のプロジェクトを流用して新しいプロジェクトを作り、少しだけプログラムを書き加え、CS+のシミュレータ機能で1ループの実行時間を比較した結果、平均実行時間が10us以上差がありました。既存のプロジェクトに比べ、新しいプロジェクトの方が処理が大きくなるはずですが、既存のプロジェクトの方が処理の時間が長かったです。そもそも差が出るといっても10usも差が出ないはずです。

また実際にマイコンに書き込んで時間を計測しましたが(UART通信でPC側に実行時間を返すプログラムを使用している)、こちらでも既存のプロジェクトと新しいプロジェクトとの間に10us以上の差が出ました。

何か考えられる原因はありますか?ビルドツールの設定は両プロジェクト同じであることを確認しています。また新規で加えた処理を抜いて既存の処理の実行時間を計測しても差があります。

Parents
  • 1)最初のプロジェクト:平均実行時間T1

    2)最初のプロジェクト+追加処理:平均実行時間T2

    3)上のプロジェクトから追加処理を外す:平均実行時間T3

    T1 + 10us < T2

    T1 + 10us < T3

    となるのがなぜか?ということですよね。ループ内では関数コールをしますか?2)の作業時に追加したコードで元々あった関数の呼び出し方が機械語レベルで変わったことが影響しているかもしれません。アセンブラ表示にして確認してみてはいかがでしょうか?元々処理時間評価を目的の調査でしょうから追加コードというのもどんな風に展開されているのかの確認になって良いと思います。

Reply
  • 1)最初のプロジェクト:平均実行時間T1

    2)最初のプロジェクト+追加処理:平均実行時間T2

    3)上のプロジェクトから追加処理を外す:平均実行時間T3

    T1 + 10us < T2

    T1 + 10us < T3

    となるのがなぜか?ということですよね。ループ内では関数コールをしますか?2)の作業時に追加したコードで元々あった関数の呼び出し方が機械語レベルで変わったことが影響しているかもしれません。アセンブラ表示にして確認してみてはいかがでしょうか?元々処理時間評価を目的の調査でしょうから追加コードというのもどんな風に展開されているのかの確認になって良いと思います。

Children
No Data