[OSASK 6685] Re: go_0020b.

  こんばんは、川合です。


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/

ML番号でジャンプ
ML単語検索