Appleのせいでバイトオーダーの話再燃
MacがIntelへ移行("Macintel"と言うらしいです、ちょっと苦しい^^;)することで、バイトオーダーの話が議論の対象になってます。
ちょっとでもプロセッサのアーキテクチャのことを知っている人であればバイト・オーダーの話はご存知でしょう。一応説明しておくと、整数のフォーマットで上位バイトにに小さい方のアドレスに上位の桁を置くビッグ・エンディアン型とその逆のリトル・エンディアン型の2種類があるということで、SPARCやPowerPC(G5)は前者、Intel(IA-32)は後者、MIPSやItaniumはビッグとリトルのどっちでも切り替えて使える両性具有型です。
ということで、Mac環境でのPowerPCからIntelへの移行はバイト・オーダーの変更を伴うものであるわけです。ソースから再コンパイルしてしまえば、よほど変なコーディングしてない限り問題はないわけですが、問題となるのはエミューレーションやトランスレーションによる実行の時です。
Appleは"Macintel"環境移行に伴い、"Rosetta"というトランスレーション・ソフトウェアを提供して、PowerPC用のオブジェクトをIntelプロセッサ上で稼動させることになってます。この種のトランスレーション・ソフトは、簡単に言うと、旧オブジェクト・コードをエミュレーション実行しながら、実行した分を新オブジェクトに変換する仕組みになってます。最初の1回は遅いけれど実行していくうちに段々速くなっていくというわけです。
コード部分はプログラム稼働中に変換するという離れ業ができるわけですが、データの方はそういうわけにはいかないですね。どのデータをアクセスするかはプログラムの実行条件によって都度変わりますし、プロセッサの立場から見ればどっからどこまでがデータの配列かというのはわかりませんので、実行しながらデータのバイト・オーダー変更というわけにはいきません。結局、新オブジェクトに逐一バイト・オーダーを変換する命令を挿入しなければならないということで、これは結構オーバーヘッド大きそうです。
ただでさえ、Pentium 4とPowerPCの性能差はそんなにないので、トランスレーションでのパフォーマンス劣化は結構あるでしょう。
IntelがItaniumと同様にバイト・オーダーを切り替えられる機能をPentiumに追加してくれれば話は楽ですし、そういう観測をしている人もいるようですが、個人的にはたぶんその可能性は薄いのではと思ってます(少なくとも、"Macintel"登場時に間に合わせようと思うのなら、Intelは今の段階から発表してないと大混乱でしょう。)
まあ、Apple的には、過去の資産は断ち切って、全部再コンパイルしてくださいよというのが本音なのでしょうね。
余談:リトル・エンディアンという言い方、大学で習った時は「リトル・インディアン」(スリー・リトル・インディアンとかの)の洒落かと思ってた(しばらくそう思い込んでた)のですが、全然違いました ^^;。「ガリバー旅行記」に由来する言い方だそうです(参照Wikipediaエントリー)。