PowerPC関係

ysd@KLab > PowerPC

M2で卒業した同期のH松君が遺して残していったPowerPCアーキテクチャに関する資料を、あたかも自分が作ったかのように見せかけるためのページたち。自分(吉田)のサイト内へコピーしてから見た目以外でも一応一部改変している。

Freescaleという会社のサイトに32bitの資料(日本語)があるっぽい。本家IBMのは英語だからなぁ…

PowerPCアセンブラ関係

PowerPC Assembler Mnemonic Reference
一般的な32bitモードのPPCアセンブラニーモニックのリファレンス。普通の演算に使いそうな命令は調べたけれども、スーパバイザモードで利用する命令やキャッシュを扱う命令の説明はほぼ放置状態。プロセッサ毎の方言も同様。
PowerPC StackFrame & Register
PPCのスタックフレーム構造とそれに関連するレジスタの使い方。
PowerPC Assembler Guidelines
PowerPCアセンブラを書くのに必要なその他の資料。
PowerPC 64bit Extentions
PPCの64bitモード用拡張。64bitモード用命令も。
PowerPC Assembler Directive
PPCアセンブラで(主にMacOS X用のフルアセンブラファイルを書くにあたって必要なセクションの種類。

SIMD(Altivec)関係

AltiVec Assembler Mnemonic Reference
PowerPC G4以降のCPUに搭載されたSIMD命令セットAltiVec(Velocity Engine/VMX)のニーモニックリファレンス。
命令が行うことが複雑なせいで、解説が間違ってる可能性あり。さすがSIMD命令…
AltiVec Programing Technics
AltiVecを使ったSIMD演算テクニック。

概説

PowerPCとは

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命令セットとは

SIMD命令セットは複数のデータを一度に処理できる強力な拡張命令の集まりで、最近のCPUには大抵搭載されている。例を挙げると、x86のMMX,SSE,SSE2,SSE3,SSSE3,SSE4(提案中)や、PowerPCのAltiVecなどがそれだ。

この命令セットを使う理由は一つ。プログラム中の高速化のためだ。

コンパイラはSIMD命令をうまく扱ってくれないので、組み込み関数やアセンブラでプログラマが直接プログラミングすることになる。が、それはとても大変な作業だ。なにしろ、SIMD命令はどいつもこいつも癖が強いくて理解しづらいものばかりだし、たとえ組み込み関数を使ったとしても、プログラミングのややこしさはアセンブラを使った場合と大差ないのだから。

高速化することに本当に意味がある場所…頻繁に実行されるコードや、処理するのに時間がかかるブロック…だけを、SIMD命令による高速化の対象とする必要がある。もちろんそれと同時に、どうせSIMD命令に振り回されながらプログラムを書くのであれば、最大限のパフォーマンスを得たい。

このページでは、いくつかのSIMD命令セットとその使い方について解説している。