こんばんは、川合です。
KOYANAGI, Masaaki さんは 2003/11/20 00:46:57 の「[OSASK 6675] Re
: go_0020b.」で書きました:
>> ・改変前:全部で40219行。このうちの2493行(6.2%)を改変。
>> ・改変後:2493行は1525行にまとまった。これにより圧縮前のサイズで
>> cc1、cc1plus、osaskgoのいずれにおいても、14KB弱のサイズ縮小が
>> みられた。アルゴリズムは前よりもいいので、多分コンパイル速度も
>> 0.1%くらいは改善しているかもしれない。
>実際に go をビルドして時間を測って比較してみれば、分かるのでは
>ありませんか?
うーん、どうでしょう。HDDアクセスのほうのアクセス誤差のほうが
支配的で、0.1%くらいの時間差は検出できない気がします。まあ僕と
しては、小さくなったし、速くなった(はずだ)ということが言いたい
のであって、どれだけ速くなったかということにはとりあえず関心があ
りません。サイズが小さくなっても遅くなったら、効率が上がったとは
言えない場合もありますが、今回はその心配はない、ということです。
もし詳しく知りたい人がいましたら、リリース後にチェックしてみて
ください。
>改良の余地はあると思いますが、時間は非常にかかるように思います。
>もし川合さんが今回のペースで、一人で、
(引用中略)
>ここまでやると、数年かかることになってしまいます。
そのとおりです。
>サイズを小さくするという目的なら、
>
>・どの関数のサイズが大きいかどうかを事前に調べる(Linux なら nm コマンド)
>・ソースコードにはコメントや空行が含まれているので、それを除いた行数を
>調べておく(フリーソフトで実質の行数を数えるものはいくつかあるでしょう。)
>
>というように調査したデータから手を入れる場所を考えて効率的にやるべきだと
>思います。
これも全くそのとおりです。
ええと、僕は「改良の余地がある」と主張したいだけで、改良したい
とまでは思っていないのです。まあなんというか、GCCってだめじゃん
といいたかっただけなので、どうやって改良するか、という点はあまり
心配しないでください。
本気で改良を始めたら、OSASKの開発が止まってしまいます。
I.Tak. さんは 2003/11/20 12:58:03 の「[OSASK 6676] Re: go_0020b.
」で書きました:
> 主にGOのサイズの話でしたが, 速さについても少し触れられていた
>のでユーザとして意見を述べたいと思います。
>
> コンパイル時間で比較すると, bim2binはcc1と肩を並べる長時間を
>食い潰しています。手抜き仕様でディスクを食い潰されるより, 時間
>を食い潰される方が困ります。何度も実行するものですから。コンパ
>イラ本体よりもこちらを先に直すべきだとおもいます。
そうかなあ。>ディスクよりも時間 osaskgoに限って言えば、1MBを
超えるサイズは時間以上に問題だろうと思うのですが・・・。
もし時間がかかって困るということなら、最後のリリース時以外には
いつも、bim2binのオプションに「maxdis:1k」とでも書いておいてくだ
さい(orgを作るときも、binを作るときも)。見違えるほど速くなりま
す。
もちろん、速度についてやきもきするならこれを直すべきだというの
は、正論だと思います。
> あとobj2bimは「bss領域の0クリアを前提にしたコンパイラもあるか
>らbss領域を0クリアする」ということでしたけど, GOを前提にすれば
>そんなに気を効かせなくてもいいわけですし, こちらも直せばOSASK界
>のほぼすべてのバイナリに益があります。アプリの起動速度や, もし
>かしたらページの利用効率も上がるかも。
GOを前提にすれば、そんなことは気にしないでいいというのは、ごも
っともです。・・・でも、OSASK界のほぼすべてのバイナリに益があり
ます、は違うかもしれません。
そもそも、CやC++のstatic変数は初期値を指定しなければ初期値は全
て0とするのが仕様で、その意味ではCでbss領域が生成されることは普
通ありません(GCCとかは、参照される前に書かれるかどうかを慎重に
チェックして、大丈夫と分かったものだけにbss属性をあたえていた、
はず・・・ということで、多くのケースではうまく判定できず、dataセ
クションになります)。
結局bssを生かせるのはアセンブラ派の僕やI.Tak.さんくらいでしょ
う。しかも僕はASKAでstructすればいいやと思っているので、bssは結
局使いません。ということで、「ほぼすべてのバイナリに益」というの
は違う気がします。
アプリの起動時間が上がるのは多分間違いありませんが、同じバイト
の繰り返しなら、tek0もl2d3もかなりの速度で展開できます。だからあ
まり問題にはならないかもしれません。でも、ページの利用効率upはあ
るかもしれないですね。nasmやASKAで書けば、ですが(Cの場合、初期
化されると分かっているからこそbssに割り振るわけで、結局アクセス
が最初のほうにあることに違いはなく、だから利用効率に差は出ないと
思われます)。
それでは。
--
川合 秀実(KAWAI Hidemi)
OSASK計画代表 / システム設計開発担当
E-mail:kawai !Atmark! imasy.org
Homepage http://www.imasy.org/~kawai/