うらおブログ(移転しました)スマートフォン用の表示で見るやねうらおブログ(移転しました)この広告は、90日以上更新していないブログに表示しています。compiler私の一昨日の日記http://d.hatena.ne.jp/yaneurao/20040406#p1に対して次のようなコメントをもらった。サーバアプリケーションにJavaが多いことを考えるとint32にペナルティーの付くプロセッサがこれから開発されるとは思えないのですがいかがでしょうか?これに対してひとことで回答するのは大変なので、ちょっと資料を参照しながら説明したいと思う。IntelのIA-64(Itanium)のアーキテクチャから。http://developer.intel.com/design/itanium/hardware/process_arch.htmIA-64ではレジスタはたいてい64bit長である。GR(GeneralRegister:汎用レジスタ)が64bit×128個,浮動小数点レジスタは80bit×128個、あとまあ、いろいろあるのだが、そのへんはいま考えないでおこう。おおむね64bit長で行なうことになるわけである。比較やストア(メモリへの格納)、ロード(メモリからの読み込み)に関して、32bitにマスクしたり変なことをしないといけないのかというとそうではない。・比較(cmp)に関して、cmp4(4は下位4byteの意味の4である)というのがあって、これはレジスタの上位32bitは無視して、下位32bitに対してのみ行なう。・ストア(st)に関して、st4というのがあって、これも最初の4バイトのみをストアすることが出来る。・ロード(ld)に関してもld4というのがあって..以下略。そもそも、st4のような命令の場合、4のところには、1,2,4,8(あと場合によっては10も)が指定できる。ようするに、メモリ上の32bit同士の加算を行ないたいのならば、ld4して、add(これは64bit幅で行なわれる)したあと、st4すればいい。ついでに言えば、addもadd4とすれば下位4バイトのみの加算が出来るので別に64bit幅でやる必要はない。このへん、なかなか優れたアーキテクチャであると思う。上位32bitを0で埋める)ことをしてからaddする必要がある。これを行なわないといけないことは比較的多い。次のような単純なコードでもそうだ。f;aはアドレスを表していて(C言語で言うところの)ポインタであり、64bit符号無し整数だと考えられる。Javaはintが符号付き32bitなので、a[i]というアドレッシングは、符号なし64bit整数と符号付き32bit整数を何倍かしたものとの加算に他ならない。よって後者をいったん符号拡張して64bitにする必要が出てくる。言うまでもなくintが最初から64bit整数ならばこの作業は必要ない。よって、64bit整数と、符号付き32bit整数(の何倍か)とを一命令で加算する命令がない限りは、この符号拡張しないといけない分だけ損なのだ。そんな命令がIA-64にあるかというと..確か..無いと思う。そんなわけで、64bitプロセッサではintは64bitのほうが(こういう点においては)有利だ。これをint型が32bitでないことに対する“ペナルティ”だと言えるかどうかは微妙なところだと思うけれど。stallという非常に悩ましい問題があった。stallというのは、レジスタの下位16ビットにロードしたあと、そのレジスタを32bitでストアした場合、実行ユニットがぴよってしまうのである。この現象は、Pentium4であろうがPentiumMであろうが発生する。非常に困ったチャンなのである。stallは生じない。Read)に関しては注意が必要である。このへん、かなりややこしいので続きはまた...気が向いたら書くことにする。電子書籍になるに至るまでの話ブログちょっとだけ移転のお知らせ時代はまだゲームセンターあらしに追いつかないのかやねうら王、電王戦バージョン提出しました将棋の神様のレーティングはいくつなのか?月別アーカイブはてなブログをはじめよう!yaneuraoさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。