M2で卒業した同期のH松君が遺して残していったPowerPCアーキテクチャに関する資料を、あたかも自分が作ったかのように見せかけるためのページたち。自分(吉田)のサイト内へコピーしてから見た目以外でも一応一部改変している。
Freescaleという会社のサイトに32bitの資料(日本語)があるっぽい。本家IBMのは英語だからなぁ…
IBMのハイエンドRISCプロセッサ"POWER"をベースにして、Apple, IBM, Motorolaが共同開発した汎用RISCプロセッサ。
アーキテクチャでアドレス幅は32bitと64bitの両方が定義されており、切り替えが可能。ただし、64bitモードが実装されたパソコン用PowerPCはPowerPC 970(G5)以降となっている。同様に、エンディアンは基本的にはビッグエンディアンであるものの、リトルエンディアンに切り替えが可能(PowerPC 970はできない)。
AppleがPowerPCの採用をやめたために、パソコン市場には玄箱や中古Macくらいしか出回らなくなってしまったが、ハイエンド(スーパーコンピュータやサーバなど)や組み込み系(電化製品など)の分野では至る所で採用されている。
また、最近のPowerPCにはAltiVec(Velocity EngineまたはVMXとも呼ぶ)というSIMD拡張命令セットが実装されている。
SIMD命令セットは複数のデータを一度に処理できる強力な拡張命令の集まりで、最近のCPUには大抵搭載されている。例を挙げると、x86のMMX,SSE,SSE2,SSE3,SSSE3,SSE4(提案中)や、PowerPCのAltiVecなどがそれだ。
この命令セットを使う理由は一つ。プログラム中の高速化のためだ。
コンパイラはSIMD命令をうまく扱ってくれないので、組み込み関数やアセンブラでプログラマが直接プログラミングすることになる。が、それはとても大変な作業だ。なにしろ、SIMD命令はどいつもこいつも癖が強いくて理解しづらいものばかりだし、たとえ組み込み関数を使ったとしても、プログラミングのややこしさはアセンブラを使った場合と大差ないのだから。
高速化することに本当に意味がある場所…頻繁に実行されるコードや、処理するのに時間がかかるブロック…だけを、SIMD命令による高速化の対象とする必要がある。もちろんそれと同時に、どうせSIMD命令に振り回されながらプログラムを書くのであれば、最大限のパフォーマンスを得たい。
このページでは、いくつかのSIMD命令セットとその使い方について解説している。