[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends-ml 10800] Re: More Java Pitfalls を 読む会第 4 回議事録



村山@NETGENEです.

> 速度としてはまず変わらない、ということでしょうか。
これは基本的に実装依存なので,良く分かりません.

多分
  「iincの方が若干早いんじゃないかな〜」
とは思いますが,

「勝手な思い込みはあてにならないから信用するな.」
ってのも鉄則の一つですよね?
だから私は私の根拠の無い勝手な思い込みを信用してません.f(^^;

> となると1バイト節約できることに価値がある?だけなのかぁ
これは時として非常に重要です.「たった1byte」と侮ってはいけません.
そのまま動くか,コードサイズ削減で散々苦労した挙句,泣く泣く機能を
一つ減らすかの差になって現れるかもしれません.
#「1バイトに笑うものは,1バイトに泣く.」(T_T)

> フォールディング機構を良く知らないのですが、依存関係のある命令でも
> 同時に(1クロックで)実行できるものでしょうか? 
どちらかというと,依存関係のある命令群を一クロックで実行するもの
だと考えられます.

フォールディング機構は,RISCのパイプラインやスーパースカラなどよりも,
むしろCISC(或いはCRISC)の「CISC to RISCデコード」に近い技術だと推察
されます.デコードの段階で複数のバイトコードを内部的に使用されるRISC
一命令に変換し,その後はRISCパイプラインで実行するんでしょう.
#iload_1,iconst_1,iadd,istore_1 -> add r1,1,r1
#という感じだと思う.RISCの命令セットは知らないから
#あくまで「だいたいこんな感じ」という程度です.

#ちなみにpicoJavaI/IIにもパイプラインはあるので念のため.

パイプラインやスーパースカラでは,依存関係が少なければ少ないほど
同時実行できる命令数が増えてCPIは小さくなりますが,バイトコード
to RISCデコードはこれとは全く原理が異なり,「RISCの一命令に変換できる
ような命令列かどうか」で決まると考えられます.これは通常は(或いはその
全部が)異存関係のある命令列になります.
#CRISCは逆に分解することになる.分解された後の複数のRISC命令群は,
#通常は依存関係のあるものになると思う.

この辺はRISCアーキテクチャやx86アーキテクチャが分かってないと,
ピンと来ないと思います.

-- 
村山敏清 株式会社ネットジーン 〒164-0001 
東京都中野区中野3-33-3 インツ中野ビル 5F
E-mail:murayama@xxxxxxxxxxxxx 
TEL:(03)5328-3670 FAX:(03)5328-3673
http://www.netgene.co.jp/