日記帳だ! with Tux on Libserver

二度目の大改造!! 日記帳…か?を継承し、より柔軟でパワフルなBlogに変身しました。

RSSに対応しています。リンク・コメント・トラックバックは自由にしていただいてほぼ問題ありません。
RSS購読方法、僕のリンク・コメント・トラックバックについての考えを読むことをおすすめします。

JavaScriptを有効にし、Cookieを受け入れ、以下のブラウザを使うことで完全なコンテンツが楽しめます。
Mozilla Firefox 3.0(Get Firefox)・Opera 9.6・Safari 3.2・Lunascape 4/5(Gecko)・Lunascape 5(WebKit)
Internet Explorer 7/8とそれを使うIEコンポーネントブラウザ(Lunascape・Sleipnirなど)

速くなると思っていたが遅くなった

ここ最近はとあるマイコンの置き換えのための調査をしている。

フルICEとはなんだったのか

思っているより順調に進んでいるが、そう簡単ではないこともわかってきている。


置き換え前後のマイコンは命令などに互換性があり、プログラムはほぼ流用できる予定である。

当初はペリフェラルでいろいろ問題が発生していたが、それは収束したように見えている。

最初は散々だったんだけど、早期に問題をあぶり出して対策することができた。

ここ最近の問題は命令の実行速度が速くなったこと、または、遅くなったことが原因である。

これが大変である。


もともとマイコンの置き換えで、命令の実行速度が速くなるから注意が必要だと言われていた。

命令の実行速度が速くなるのは一見よいことのように見えるが、

処理Aと処理Bの間で一定以上の時間を開けることが求められている場合、

処理が早くなることで、処理AとBの間の時間が詰まってしまい、正しく動作しなくなることがある。

タイマ割り込みで定周期処理を行っている場合、定周期処理の終わりが早くなると、次の定周期処理までの時間が延びてしまうということも考えられる。

だから、実行速度が速くなるのは要注意だ、と言われて始まったプロジェクトだった。


ところがフタを開けてみると、命令の実行速度が遅くなる問題が目立った。

どうも新しいマイコンで想定しているアーキテクチャと置き換え対象のシステムのアーキテクチャに差があって、

結果として新しいマイコンの性能を引き出せないばかりか、逆に置き換え前のマイコンよりも性能が低下してしまったということらしい。

一方で、性能低下に対する対策もあって、対策を追加することでそれなりの動作をするようになってきた。


対策の結果、当初言っていたように、命令の実行速度が従来より早くなって、対策が必要なところが出てきた。

ループ回数で待ち時間を作っているところに対策が必要なのは、当初想定していた通り。

もともと微調整して、必要な待ち時間ピッタリになるようにやっていたらしく、実行時間が少し変化しただけでアウトだったらしい。

暫定的に回数を見直して正しく動作することは確認出来たが、設計者はタイマペリフェラル使うべきだったねと反省していた。

あと、命令の実行速度が速くなったことで、ペリフェラルの応答速度を追い越してしまうという事象も発生した。

もともと、ペリフェラルの使い方があまりよくなかったのだが、命令の実行速度がある程度遅ければ問題にならないのも事実だった。

プログラムの書き方を見直すのが正攻法だが、対策が簡単なのは追い越さないように遅くするという方法で、それで対策することになりそうだ。


ところが、性能低下に対して対策を行っても、命令の実行速度が遅くなる箇所が存在することが最近わかってきた。

どこが性能低下しているのか、現在のマイコンと新しいマイコンでいろいろ比較した。

デバッグコードを仕込んで、余っているピンから信号を出して、オシロスコープで測定するという古典的な方法で調べた。

その結果、とあるタスクの処理時間が2倍に伸びていることが発覚した。

これが全く予想外のところで、なぜ遅くなっているのかという理由はつかみきれていない。

アクセラレータの追加などで対策できそうなところではないので困っている。


命令の実行速度が速くなったことで発生した問題はプログラムの変更などで対策ができるのだが、

命令の実行速度が遅くなったことで発生した問題は、そう簡単には解決できない。

そりゃそうだよね。速くなったことで発生した問題は遅くすれば解決できるかもしれないけど、遅いものは簡単に速くはできないから。

ソースコードを見ていると、多少はリファクタリングの余地がありそうには見えたが、

それで実行速度の低下を全て吸収できるかというと、ちょっとよくわからない。


まぁ当初はもっと散々な目にあうことも覚悟していたのだが、

想像よりははるかにプログラムの修正は少なく、新しいマイコンに移行できそうだなと思っていた。

当初は命令の実行速度の影響をあまり受けないものを中心に見ていたようで、なおさら楽観的だった。

ただ、いろいろ対策しても性能低下が見えてしまうというのは、本当に困った話である。


こういう話はうちの職場で開発している他の製品でも発生している。

性能が低下しないように必死で対策して、なんとか旧製品と同等以上の性能が出るところまで持って行ったらしい。

当面はこれで大丈夫とのことだが、長期的には危ういのでアーキテクチャの刷新が必要と開発者は言っている。

このように、性能が向上したはずの最新のICに置き換えると、かえって性能低下してしまうことが時々あると。

それは最新のICが想定しているアーキテクチャに合っていないところがあるということなんだろうが、そう簡単に解決できる問題ではない。

姑息な対策でとりあえずは乗りきって、長期的には根本対策をするというやり方にならざるを得ないのかなと思っている。


Author : hidemaro
Date : 2019/03/13(Wed) 23:02
コンピュータ | Comment | trackback (0)

Tools