« 2007年4月 | トップページ | 2007年6月 »

2007年5月の記事

Cell vs Pentium4 - SIMD演算編(その2)

前回に続いて行列計算プログラムのチューニングを行いました。

まずは、Pentium4版ですが、以下のように行列の初期化部分をSSE命令に置き換えました。ソース全体はこちらです。

void init_mat_sse ()
{
  int i;
  __m128  *a = (__m128 *) mat_a;
  __m128  *b = (__m128 *) mat_b;
  __m128  *c = (__m128 *) mat_c;
  __m128  offset = {4.0, 4.0, 4.0, 4.0};

  a[0] = _mm_setr_ps(0.0, 1.0, 2.0, 3.0);
  b[0] = _mm_add_ps(a[0], a[0]);
  c[0] = _mm_setzero_ps();
 
  for (i = 1; i < NUM_ROW*NUM_COL/4; i++)
  {
    a[i] = _mm_add_ps(a[i-1], offset);
    b[i] = _mm_add_ps(a[i], a[i]);
    c[i] =  _mm_setzero_ps();
  }
}

mat_a[i][j]は、以下のように数字を1づつ増やしているだけです。
  mat_a[0][0] = 0.0
  mat_a[0][1] = 1.0
  mat_a[0][2] = 2.0
  mat_a[0][3] = 3.0
  mat_a[0][4] = 4.0
       ・
       ・
  mat_a[0][511] = 511.0
  mat_a[1][0] = 512.0

SSE (SIMD)命令を使用した行列の初期化ですが、まず初期値として、単精度小数x4のベクター型ポインター aを宣言して、行列データーの格納位置であるmat_aの先頭アドレスを代入します。これで、a[0]を指定することで、mat_a[0][0]〜mat_a[0][3]の4つの要素にアクセスすることができます。

先ず、a[0] = _mm_setr_ps(0.0, 1.0, 2.0, 3.0) 命令で、mat_a[0][0]〜mat_a[0][3]に{0.0, 1.0, 2.0, 3.0}の初期値を代入します。
次に、a[1]はmat_a[0][4]〜mat_a[0][7]に対応し {4.0, 5.0, 6.0, 7.0}の値を取りますが、この値を作るためにはa[0]の各要素に4.0を足せばよいことになります。この計算は、a[i] = _mm_add_ps(a[i-1], offset) 命令で実現できます。

mat_bはmat_aの2倍の値を代入するだけです。b = a x 2でもよいのですが、b = a + aと足し算にした方が処理が早いかもと思い、b[i] = _mm_add_ps(a[i], a[i]) としています(たぶん、掛け算命令を使用しても差はないです)。

このプログラムを実行すると、なんと、計算時間が18.74秒から 6.67秒に短縮できてしまいました。現時点でのCellの計算時間は12.78秒のため、2倍以上の高速化が必要です。前回行列の足し算部分をSSE化した際は全く高速化できなかったのに対して、今回は大幅な高速化ができました。メモリーストアー命令を多用する初期化処理はSSEによるSIMD化が有効な結果となりました。

Cell版のプログラムでも、PPEで行っていた行列の初期化を同様にAltiVec (PowerPCのSIMD命令)に書き換えるつもりでしたが、この程度ではPentium4の性能に届きそうにありません。Pentium4恐るべしです。対抗策として、これまではPPEで行列の初期値を作成してSPEで足し算を実行していたのですが、初期値作成と足し算の両方をSPEで行うようにします。従って、プログラムのフローは以下となります。

Matirxaddsimd2

Cell版プログラムのソースはこちらから

SPEで行っている行列の初期化と足し算部分は以下の通りです。

vector float *vec_a  = (vector float *) mat_a_LS;  // SPE LS内のbuffer
vector float *vec_b  = (vector float *) mat_b_LS;
vector float *vec_c  = (vector float *) mat_c_LS;
vector float offset = (vector float) {4.0, 4.0, 4.0, 4.0};
vector float zero = (vector float) {0.0, 0.0, 0.0, 0.0};

for (i = 0; i < SPU_BUFFER/16; i++) {   // ループ回数の計算は手抜き
     // Initialize Matrix
     vec_a[i] = spu_add(a, offset);
     vec_b[i] = spu_add(vec_a[i], vec_a[i]);
     vec_c[i] = zero;            // P4版との性能比較上あえて初期化する

     // Compute
     vec_c[i] = spu_add(vec_a[i], vec_b[i]);
     a = vec_a[i];
}

さて性能はどうでしょうか。過去のデーターもあわせてまとめてみました。

Cell vs Pentium4 -SIMD演算
項目P4(半SIMD)P4(全SIMD)Cell(半SIMD)
2 SPE
Cell(全SIMD)
1 SPE
Cell(全SIMD)
2 SPE
CPU P4 530 3.18GHz Cell BE 3.2GHz
コンパイラ gcc 4.1.1 IBM xlc 0.8.2
最適化レベル O3 O3 O3 O3 O3
計算時間(s) 18.74 6.67 12.78 1.19 1.03
  • P4半SIMD: 行列計算部分のみSIMD化
  • P4全SIMD: 行列初期値生成・計算の両方をSIMD化
  • Cell半SIMD: 行列計算部分のみSPEでSIMD化
  • Cell全SIMD: 行列初期値生成・計算の両方をSPEでSIMD化

今回SPEでの完全SIMD化によって、P4の性能に完全勝利できました。
スペース関係で掲載しませんが、Cell用のgccを使用した場合でも2秒以下で計算が可能であり、Cell用コンパイラの最適化効果で勝ったとも言わせません。時間がかかりましたが、なんとか当初の目的を達成です。

考察

Cellはスカラー性能は平凡ですが、やはりSPEを駆使したSIMD(ベクトル)演算性能には目をみはるものがあることが分かりました。今回の性能測定からGFLOPS性能を計算すると以下となります。

GFLOPS性能
項目P4(全SIMD)Cell(全SIMD)
1 SPE
Cell(全SIMD)
2 SPE
GFLOPS 0.31 1.76 2.03

GFLOPSの計算方法は以下です。

  • 行列の初期化で3回・足し算で1回、合計要素あたり4回の浮動小数点演算を行うと考える(初期化の1処理は単なる代入ですが、計算の範疇に加えます)
  • 要素数は1024 x 512
  • ループの繰り返し回数が 1000回

即ち合計計算回数 = 4 x 1024 x 512 x 1000 = 2,097,152,000  となります
この計算回数を実行時間で割った値がGFLOPS値です。

上記の実測値に対してSPEの論理性能は、spu_add命令がクロックサイクル毎に実行できるとした場合以下の数値になると思います。

  • 一回の演算毎に、1)演算器へのデーターのロード、2)計算、3)メモリーへの計算結果のストアーと、3サイクルが必用。ロードに関しては、レジスタ内の値を使用できるるため2サイクルとする
  • SIMDによって、2サイクルで単精度浮動小数点の4要素が計算できる
  • SPEのクロックサイクルは3.2GHzである

SPEの性能 = 4 * 3.2 / 2 = 6.4GFLOPS

2007/5/24追記:
上記のGFLOPS計算に関して、一つ気がつきました。SPEも内部でパイプライン処理を行っているはずなので、ロード・計算・ストアをパイプライン処理できかつLS(Local Store)とのロード・ストアが1クロックサイクルで実行できればSPEの論理性能は4*3.2 = 12.8GFLOPSになります。

実際の演算では、計算結果のDMA転送やループ処理のオーバーヘッドがあるため、今回の性能値である1.76GFLPSはそこそこの数値だと思われます。今回のプログラムは、計算結果をメインメモリーにDMA転送するする処理の比率が大きく、メインメモリーの帯域ネックによって性能が上がらないものと思われます。それでもPS3はメインメモリーにXDRを奢っておりメモリー帯域が25.6GB/sあるため、My PCのDDRメモリー6.4GB/sに比べると4倍の帯域を持っており、この分が性能差に現れたと思われます。

演算性能に関しては、Pentium4に完勝しましたが、SPEの論理性能は25.6GFLOPSとも言われており、この値と実測値がに大きな乖離があります。論理性能は恐らく、以下の計算から求めているのだと思います。

  • 積和のように、1クロックで2演算できる命令を考える
  • SIMDでは、1クロックに4要素処理できるため、クロックあたり8回演算したことと等価になる
  • SPEのクロックが3.2GHzのため、GFLOPS = 8 x 3.2 = 25.6GFLOPS

上記の計算は、演算データーのロードや演算結果のストアを無視しており、強いて言えばレジスタ内の演算をループを使わずに繰り返した際のピーク性能となります。従って、実際の計算においてこの論理性能が発揮できることはありえないということになります。

2007/5/24追記:
こちらについても、ロード・計算・ストアをパイプライン処理で1クロックサイクル毎に実行できれば論理的には可能ですね。そのため、データーがLS内に全て格納でき、メモリー間で転送が不要であるようなデーターの局所性が極めて高いプログラムならピーク性能近くを出せるかもしれません。いつか試してみたいです。

ただ、Cellに限ったことではなく、Intelを含めて全てのSIMDプロセッサの演算性能は上記のようなロード・ストアを無視したピーク性能で計算していると思われます。従って、実性能はさておき、比較の上では意味があるのだと思います。

Pentium4の論理性能は、3GHzで12GFLOPSとされていますが、論理性能 vs 実性能比でもCellがPentium4を上回ったことになります。

Cell vs Pentium4 - SIMD演算編

前回に引き続き、行列演算のサンプルプログラムを使ったCellと Pentium4の性能比較を行います。今回は以下を目標にサンプルプログラムを改造しました。

  • SIMD (Single Instruction Multiple Data)演算を使用して処理性能を上げる
  • Cellでは複数のSPEに処理を分割して並列動作させることでさらに性能を上げる

SIMD演算では、以下のように複数の要素(単精度浮動小数点の場合4要素)に対して単一の命令で計算を行うことができます。例えば、以下の足し算を1つの命令で実行できます。
  c[0] = a[0] + b[0]
  c[1] = a[1] + b[1]
  c[2] = a[2] + b[2]
  c[3] = a[3] + b[3]

SPEのSIMD演算では、上記の計算を以下のSIMD命令で置き換えることが可能です。
  c = spu_add(a, b)

これまでなら、ループを4回まわして計算したところを、1回の計算でできてしまうわけですから行列計算の高速化にはうってつけです。前回の性能比較に使用した1024 x 512の行列の足し算プログラムをCellとPentium4用に作成しました。今回使用したソースコードを以下に示します。
 Cell用ソース「matrix-add-simd.zip」をダウンロード
 P4用ソース「matrix-add.sse.zip」をダウンロード
Pentium4は単純に行列の足し算部分をSIMD(SSE)命令に置き換えただけですが、Cellの場合はちょっとやっかいです。

SIMD演算を使用したいだけなら、PPEのAltiVec(PowerPCのSIMD演算機能)を使用する手もありますが、今回はSPEへの演算のオフロードと並列化が目的です。そのためには、SPEに処理を分割したり、PPEとSPEはメモリーを共有していないので計算用のデーターをSPEにDMA転送したりする必用があります。PLAYSTATION Linux完全攻略ガイドに掲載されているサンプルプログラムを参考にCell版のプログラムを作成しました。Cell版プログラムの概要は以下となります。

Matirxaddsimd

プログラムの実行結果は以下となりました。

Cell vs Pentium4 -SIMD演算
項目Cell(gcc)-1SPECell(gcc)-2SPECell(xlc)-1SPECell(xlc)-2SPPP4(gcc)
CPU Cell BE 3.2GHz P4 530 3.18GHz
コンパイラ ppu-gcc 4.1.1
spu-gcc 4.1.1
IBM xlc 0.8.2 gcc 4.1.1
最適化レベル O3 O3 O3 O3 O3
計算時間(s) 31.15 30.80 13.06 12.78 6.64
18.74

例によってppu-gccでコンパイルしたコードの実行結果は遅いのですが、XLCの実行結果をもってしてもP4に勝てませんはPentium4を上回りました。だた、SPUx1, SPUx2で実行時間に殆ど差がありません(表には記載していませんが、SPUx4では僅かに速度が低下してしまいます)。

(5/17追記) Pentium4 SSE版にバグがありました。行列の初期化が本来必要な量の1/4しかできていませんでした。どおりで早いはずです。バグ修正版の測定データーに上記の表を更新しました。Pentium4はスカラー演算版でも18.81sで計算を行っていたので、SSEを使用してもほとんど高速化しないということになります。この結果はちょっと謎ですが、Pentium4の場合、単精度浮動小数点の足し算レベルではFPUとSSEで性能差がないということになります。

今回のプログラムは、行列の初期値を生成するために以下のコードをPPEで実行しています。

void init_mat()
{
    int i, j;

    for (i = 0; i < NUM_ROW; i++)
    {
        for (j = 0; j < NUM_COL; j++)
        {
            mat_a[i][j] = (float)(i * NUM_COL + j);
            mat_b[i][j] = (float)((i * NUM_COL + j)*2);
            mat_c[i][j] = 0.0f;      
        }
    }
}

即ち、上記のコードで生成した行列から、mat_c[i, j] = mat_a[i, j] + mat_b[i, j]の足し算をSPUで実行します。この処理を1000回ループして実行時間を測定しているため、PPEでの初期値生成を1000回行っていることになるのですが、PPE側の初期値計算量がオーバーヘッドになっていると思われます。同様にメインメモリ - SPE間のDMAもオーバーヘッドになっている可能性があります。

Cell SDK 2.1に入っているCell SimulatorにSPEの稼働状況をグラフ化する機能があるため、この機能を使用してSPEの動作状況を調べてみました。結果は以下となります。

グラフより、時系列的に見ると、以下の順番でSPEが稼働していることが分かります。

 ①SPE0とSPE1 → ②SPE6とSPE7 → ③ SPE4とSPE5 → ④SPE2とSPE3

2つのSPEは同時に起動されている(即ち平行して動いている)と思われます。ただし、毎回異なるSPEが起動される理由は謎です(PS3用Cellのsimulatorではないため、8個のSPEが存在するのは仕様だと思います)。

Sim1_4

グラフにあるように、SPEが起動されてから次の起動までの間が、PPEにて行列の初期化を行っている時間と思われます。この時間を短縮するためにはPPEで初期値データーを生成しながらSPEにデーターを供給するように、PPEとSPEを並列動作させる必用がありそうです(もしくは、初期値生成もSPEにオフロードするか)。初期値の生成と計算を並列動作させるには大幅なプログラム修正がが必用なので今回はここまでであきらめました。

PS3のCellはSPEの計算性能を単純に足し算すると、ピーク性能で218GFLOPSをマークするとされていますが、DMAのオーバーヘッドや今回のように計算の元ネタデーター生成能力を考えると、Cellの演算性能を引き出すのは骨が折れそうです。いわゆる、Cellの性能を引き出すプログラミングは難しいというやつですね。

(5/17追記)Pentium4版プログラムのバグを修正した結果、Cell用コンパイラの最適化にすがると、現時点でもPentium4を越えることができました。Cell版プログラムの性能ネックはPPEで行っている行列の初期化にあることは分かっており、こちらにAltiVecを使用すると劇的に性能が向上することも分かっています。Pentium4は今回の結果から、行列の初期化部分をSSE化しても性能向上はないことが予想され、その場合はCellの完全勝利が可能となります。Cellの性能向上版を使用した比較は次回掲載したいと思います。

今回のプログラムではまった点

Cのプログラムを書いたのが久々だったので、ポインタや型変換などCのプログラムではまるポイントは今回一通りはまったのですが、以下の点が私的には盲点でした。

1. 構造体のパディング

Cコンパイラは、構造体をデーターアクセスの効率がよいワード境界にアライメントするために、構造体メンバーにパッドを付与します(パッドの付与のしかたは、ターゲットとするCPUのアーキテクチャーによって異なります)。そのため、構造体メンバーのバイト長を足し算した結果と、sizeof(構造体名)の値が異なる場合があることが分かりました:
例えば以下の構造体のデーターサイズは、CellやP4では28byteでなく32byteになります。すなわち、Cellではデーターが8byte境界にアライメントされるようです。
Pentium4の場合、データーサイズは28となり、4byte境界にアライメントされることが分かります。
 -- 2007/5/14 P4のアライメント条件を修正 --

typedef struct {
    unsigned long long    ea_a;   // 8 byte
    unsigned long long    ea_b;   // 8 byte
    unsigned long long    ea_c;   // 8 byte
    unsigned int size;  // 4 byte
} DMA_params_t;

2. DMAバスエラーのsimulation

CellのDMAバイト数は16バイトの倍数にする必用があるのですが、上記の構造体に誤ったパディングを設定してデータ長が40byteになったためDMA転送が失敗していました。実機で動かすとDMAのコードで「バスエラー」と表示されプログラムが異常終了するのですぐ分かるのですが、PC Linux上で動作するEclipse + simulatorでは異常終了が発生しないので問題に気がつくのに時間を要しました。EclipseのデバッグwindowにDMA statusの表示があるのでここを注視すれば分かったのだと思いますが、simulatorを過信してはいかんという事例ですね。

3. Cell SDK gccのデフォルコンパイルモード

Cellは32bitおよび64bitのコードを実行できます。YDLやFCに入っているgccはデフォルトで32bitのコードを生成しますが、SDK 2.1のppu-gccはデフォルトで64bitのコードを生成します。そのため、longのデーター長が、YDL/FCのgccでは32bit、SDKのppu-gccでは64bitになります。今回のプログラムでは問題になりませんでしたが、long変数のデーター長に依存したプログラムを書く場合は注意が必要です(コンパイラオプションに明示的に-m32をつけて32bitコードを指定する必用があります)。

Cell vs Pentium4 - スカラー演算編

PS3 Linuxのプログラム開発環境がやっと整ったので、My PCのPentium4と性能比較を行いました。まずは、プログラムが簡単にできる1024行 x 512列の行列を足し算するプログラムです。今回はSPEは使用せずに(というより、まだ使用できるテクがないのですが、、)、PPEのスカラー演算のみで計算を行っています。

行列の計算はご存知のとおり、SPEのSIMD命令を使用して高速化が行えるため、最終目標はSPEを使用したプログラムでP4のSSEとのベンチマークを行うことです。

今回使用したプログラムですが、以下のとおり、2重ループで行列(要素はfloatです)の足し算を行う単純なものです。(ソースはCell SDKのサンプルプログラムから流用しています)。

  for (i=0; i<NUM_ROW; i++)
    for (j=0; j<NUM_COL; j++)
      mat_c[i][j] = mat_a[i][j] + mat_b[i][j];

一回の行列計算は一瞬で終わってしまうため、1024 x 512の行列計算を1,000回繰り返しています。

それでは、同一のソースをコンパイルしてCellとPentium4の両方で実行した際の実行時間の比較をします。Cell用ソースのコンパイルは、Cell SDK 2.1を使用してPC Linux上のクロスコンパイラを使用して行いました。

Cell vs Pentium4 - スカラー演算
項目 Cell(gcc) Cell(xlc-o2) Cell(xlc-o3) P4(gcc)
CPU Cell BE 3.2GHz P4 530 3.18GHz
コンパイラ ppu-gcc 4.1.1 IBM xlc 0.8.2 gcc 4.1.1
最適化レベル O3 O2 O3 O3
計算時間(s) 50.17 32.64 29.21 18.81

注)P4は定格クロック3.0GHzを3.18GHzにクロックアップ

結果から言えること

  • Cellは、P4のような高度な分岐予測や命令のアウトオブオーダー実行といった高速化を行うための回路を割愛してその分SPEにトランジスタを割いているため、今回のような単純なループ計算ではP4に負けるのは想定内ですが、gccはあまりも遅いです
  • Cell SDKに入っているIBM XL C/C++ Compilerに比べて、gccはCellへの最適化が行われていないと思われます
  • gccはもともとプロセッサ決め打ちの最適化コードは生成しないのですが、x86の方が最適化が進んでいるのかもしれません
  • XLCの最適化レベルO3はループの入れ替えなどアグレッシブな最適化を行うオプションですが、x86-gccのO3がこれに相当すると考えると、性能差は1.5倍程度になります
  • ちなみに、XLCの最大レベルの最適化オプション(O5)を使用すると計算時間が11.1sまで短縮できました。これはループ中のスカラー演算計算をコンパイラがSIMD演算に置き換えているためです

今後の予定

想定はしていたことですが、スカラー演算ではCellは同クロックのPentium4にはかないません。目標であるPentium4をぶち抜く性能を出すためには、このサンプルプログラムをSPEを使用してSIMD化する必要があります。

公平な比較を行うためにはPentium4もSSEを使用したSIMD版のプログラムを作る必要があります。今回の結果から、シングルスレッドでSPE 1ユニットを動かすだけのプログラムではP4のSSEに勝てない気がします。そのために、行列のデーターを分割して複数のSPEで並行して計算を行うサンプルプログラムを作っているのですが、メインメモリ ー SPE間のDMAまわりではまっております。うまくサンプルが動いたらこのブログで公開したいと思います。

PC LinuxにCell SDK2.1をインストールする

今回は、前回の「PS3 LinuxへのCell SDK2.1インストール」に続いて、PC Linux(Intel CPU)へのCell SDKインストールを行いました。なぜPCでCellのプログラムを作成する必要があるのかというと、Todotani的には以下の理由になります:

  • Eclipseのような統合開発環境(IDE)が使いたい
    プロな人とたちは、Emacs一本で、コーディング・コンパイル・Tag Jumpを使用したエラー箇所の修正・デバッグまで行うのでしょうが、私はEmacsの複雑なキーバインディングについていけないので、GUI環境でお気軽にプログラミングができるIDEが重宝します
  • 我が家ではPS3はリビングにおいてあり、32型セミHD(720p)の液晶TVにHDMI接続しているのですが、液晶TVではどうしても文字が滲んでしまい、フォントサイズを大きくする必要があるためプログラミングには向きません
  • プログラミングでリビングのTVを占有していると家族からブーイングが出ます

ということで、PC上でCellのプログラムを作成・デバッグできると便利です。幸いなことに、Linux PCにCell SDK2.1のIntel CPU版とEclipse IDEをインストールするとこれらが全部実現できます。PC用のLinuxとしてはFedora Core6 (FC6)が必要です。

なんとCellのシミュレーターまであり、PPC用のLinux kernelとCellのプログラムをIntel CPUの上で動かすことができます(エミュレーションですので速度は遅いですが)。まだ使ったことはないのですが、SPUの稼働率をグラフ化することで、SPUへの負荷分散が適切に働いているかを確認することもできるようです。

Cell SDK 2.1のインストール

前回のPS3 LinuxへのCell SDK2.1インストールで使用したSDK2.1のisoイメージがそのまま使えます。また、前回バルセロナスーパーコンピュータセンタ(BSC)のLinux on Cellのサイトからダウンロードしたパッケージが/tmp/cellsdk-2.1ディレクトリに残っている場合、CPU種別に依存しないパッケージはそのまま使用できるため、再ダウンロードの手間が省けます。今回はインストールするパッケージ数が多いため、SDKに添付のインストールスクリプトを使用します。実はSDKのisoイメージを、以下のようにそのままmountしてインストールを行います。私はこんな事ができることを始めて知りました。

isoイメージのmout point作成
#mkdir –p /mnt/cellsdk

isoイメージをmount
#mount –o loop CellSDK21.iso /mnt/cellsdk

パッケージの格納ディレクトリに移動してインストールスクリプトを実行
#cd /mnt/cellsdk/software
#./cellsdk install

ISOイメージをCD-ROMに焼いてファイルを消去してしまった方は(何を隠そう私もそうです)、CD-ROMの/sofware ディレクトリをHDDにコピーして、./cellsdk install でインストールスクリプトを実行します(CD-ROM上のファイルを指定しても、書き込み許可がないせいか起動できません)。

前回も書きましたが、私がインストールを行った際はBSCからのダウンロードが途中で止まってしまう現象が何回も発生しました。ダウンロードが進まなくなったら、ダウンロードが再開するのを待つよりも、CTRL-Cで一旦スクリプトを止めて、再度最初からやり直した方が早いと思います。やり直しと言っても、ダウンロード済のパッケージはダウンロードをスキップするので中断した続きから作業を再開することができます。注意しなければならないのは、ダウンロードを中断した際の不完全なファイルが/tmp/cellsdk-2.1に残ってしまうため、このファイルを削除してからインストールスクリプトを再実行する必要があります。不完全なダウンロードファイルが存在すると、このファイルのダウンロードをスキップしてしまうため、ファイルをディスクに展開する段階でエラーが発生します。

インストールが完了したら、以下のコマンドを実行します。
# ./cellsdk verify
INSTALL SUMMARYで全てのモジュールがinstalledと表示されればインストール完了です。

環境変数(PATH)に以下の指定を追加して、SDKのコンパイラ類にPATHを通しておきます。
PATH=$PATH:$HOME/bin:/opt/ibm/systemsim-cell/bin:/opt/cell/bin:/opt/ibmcmp/xlc/8.2/bin:/opt/ibm/cell-sdk/prototype/bin
gccを実行するとx86のコードが生成され、ppu-gccでPPCのコードが生成されるクロス開発環境のできあがりです。

最後に以下のコマンドを実行してサンプルプログラムがビルドできることを確認します。
# ./cellsdk build

Eclipse IDEとCell SDKプラグインのインストール

IDEというと、私はこれまではWindows上で動く、Microsoft Visual StudioやBoland Jbuilderしか使ったことがなく、Eclipseは今回初めて知りました。EclipseはJavaのIDEとしてはメジャーな無償ソフトで、書店のJavaコーナーに行くと関連書籍が多数見つかります。これだけで、私がプログラマーとしてはもぐりであることがバレバレですね。

Eclipseは元々はJavaの開発環境ですが、プラグインによって各種の開発環境に柔軟に拡張が可能です。C/C++用の開発環境としてCDT (C/C++ Development Tools)が存在します。Cell SDKでは、Cell用のプラグインが提供されます。従って、Cellの開発環境としてはCDT+Cell SDKプラグインを使用します。

Eclipseをインストールする前に、先ずJavaの実行環境(JRE)をインストールしておきます。FC6のディストリビューションにはjre-1.4が入っていますが、SDKのドキュメント(Software Development Kit 2.1 Installation Guide)によると、FC6のJava実行環境は不完全なので、IBMもしくはSunのJREをインストールする必要があると書いてあります。FC6に入っているJREを使用した状態でEclipseを動かして、簡単なCのコードをコンパイル・デバックする範囲では特に問題はなかったのですが、念のためにSunのJREをインストールします。確かにFC6標準のJava環境では、Javaアプリが動作しないため、JREをアップデートしておくと何かメリットがありそうです。

JREは以下のSun Javaダウンロードサイトから取得します。
ダウンロードに進み、Linux RPM (自己解凍ファイル)を選択します。その他の詳細はダウンロードサイトに掲載されている「手順」のリンクに従います。インストールが終了したら、環境変数にJREのディレクトリを追加します。旧版のjava-1.4.2-gcj-compatはパッケージマネージャーを使用して削除しました。

JAVA_HOME=/usr/java/jre1.6.0_01
PATH=$PATH:$HOME/bin:/opt/ibm/systemsim-cell/bin:/opt/cell/bin:/opt/ibmcmp/xlc/8.2/bin:/opt/ibm/cell-sdk/prototype/bin:$JAVA_HOME/bin

最後にEclipseの導入になります。
FC6にはEclipseが入っており、パッケージマネージャーで開発-> Eclipseを選択すると、Eclipse本体とCDTがインストールされます。これにCell SDKのプラグインを追加するだけでインストールは終了です。

ただ、一点だけ注意すべき点があります。SDK 2.1に添付のCell SDKプラグインはversion 2.1.0ですが、デバッグ時にPPU/SPUコードをシミュレーターにロードする段階で異常終了してしまう問題があります。私は当初この原因が分からずに思いっきりはまりました。修正版のcom.ibm.celldt_2.1.1.2007032901.tar.gzが公開されているためこちらをダウンロードしてインストールします。インストール方法は以下です。
・上記のプラグインを適当なディレクトリに解凍。
・EscipseのHelpメニュー → Software Updates → Find and Install... を選択
・Search for new features to installを選択して、Nextをクリック
・New Local Site... をクリック
・解凍したファイルを指定して、OKをクリック
・Finishをクリック

これでEclipse上でPPU/SPUプログラムのコーディングとデバックができるようになりました。プログラム開発の流れについては、Helpメニュー → Help Contents → IDE for Cell Broadband Engine SDK にTutorial(チュートリアル)がありますので、こちらを参照して下さい。

これでやっと開発環境が整いました。あとは、SPUのSIMD命令を使用したプログラミングのお勉強や、Pentium4とのベンチマークを行いたいと思います。

YDL5にCell SDK 2.1をインストール

YDL5のインストールが終わったので、次はPS3 LinuxにIBMが配布しているCell SDK 2.1をインストールします。例によって、インストールの方法はフィックスターズさんのwebページを参考にしています。それではインストールの概要と実際にやってみて気がついた点を下記に示します。

ご注意:下記のインストール手順は一発でできたわけではなく、パッケージダウンロードの不調やインストールパッケージの競合など、インストール中に発生した問題をクリアするための試行錯誤を行ってインストールを完了した後に、最短手番でインストールするための手順を再整理したものです。再度下記の手順でインストールをやり直して手順の正常性を確認したわけではありません。そのため、下記手順でインストールした際に、何らかの問題が発生した場合はご容赦下さい。

(2007/5/5追記) Fedora Core 6 (FC6) をPS3にインストールの追記に記載した通り、アドオンCD20070425バージョンを使用すればFC6のインストールが可能になります。私が使用したYDL5はSDK 1.1を前提にしており、SDK 2.1のインストールには適しません(記事に示すように、glibcの入れ替えなど無理をしています)。そのため、これからSDK 2.1をインストールされる方はFC6上にインストールされることをお勧めします。

SDK 1.1の削除

私が使用しているYellow Dog Linux 5.0 (YDL5) では、デフォルトでCell SDK 1.1が導入されていますが最新のSDK 2.1をインストールするために、先ずは以下の操作でSDK 1.1を削除します。

  • GNOME Desktopにrootでログインして、アプリケーションメニュー → Add/Remove Softwareからパッケージマネージャを起動します
  • Base System → Cell Libraries、開発 → Cell SDKのチェックマークを取り消して更新を実行

私の環境では、一部のパッケージが削除されずに残ってしまいました。SDK 2.1のパッケージをインストールする際にエラーになってしまうため、以下のようにマニュアル操作で削除しておきます。

# rpm -qa | grep spu
spu-newlib-3.3-73
spu-binutils-2.17.50-8
上記のspuライブラリーが残っているため削除します。

# rpm -ev spu-newlib-3.3-73 spu-binutils-2.17.50-8

glibcの強制アップデート

Cell SDK2.1はFedora Core6 (FC6) にインストールすることを前提にしているため、FC5ベースのYDL5にインストールすると、一部のパッケージでglibcとの依存性チェックでエラーになってしまいインストールができません。ちなみに、以下のようなエラーが発生します。

# rpm -ivh ppu-binutils-2.17.50-8.ppc.rpm
エラー: 依存性の欠如:
        rtld(GNU_HASH) は ppu-binutils-2.17.50-8.ppc に必要とされています

そのためFC6をインストールしようとして玉砕したのは前回述べたとおりです。しかたがないので、YDL5にFC6に添付のglibcを強制的にインストールします。FC5のUpdate配布サイトから以下のモジュールをダウンロードして適当なディレクトリに格納します(2007/5/3時点の最新モジュールです)。

・glibc-2.5-10.fc6.ppc.rpm
・glibc-2.5-10.fc6.ppc64.rpm
・glibc-common-2.5-10.fc6.ppc.rpm
・glibc-devel-2.5-10.fc6.ppc.rpm
・glibc-devel-2.5-10.fc6.ppc64.rpm
・glibc-headers-2.5-10.fc6.ppc.rpm

次に、以下のコマンドで強制インストールします
#rpm -Uhv glibc* --nodeps --force

インストールが終わったら、以下のコマンドでアップデートの状態をチェックします。
# rpm -qa | grep glibc
glibc-headers-2.5-10.fc6
glibc-common-2.4-11.ydl.1
glibc-2.5-10.fc6
glibc-devel-2.5-10.fc6
glibc-kernheaders-3.0-5.2
glibc-devel-2.5-10.fc6
glibc-2.5-10.fc6
glibc-common-2.5-10.fc6

glibc-common-2.4-11.ydl.1だけ、なぜかYDLのパッケージが残っています。glibc-common-2.5-10.fc6で置き換えられるべきだと思うので、以下のコマンドで削除してしまいます。
# rpm -ev glibc-common-2.4-11.ydl.1

glibc-kernheaders-3.0-5.2はFC6で置き換えるべきモジュールが存在しないため、削除せずそのままにしておきます。
ここまで終わったら念のためにシステムをreload。動作保証外の荒技になると思いますが、今のところはこの処置で動いています。

(2007/5/5更新) glibc-kernheaders-3.0-5.モジュールは、YDL5に含まれるモジュールです。YDL5のインストールでは使用しませんが、FC5をインストールする際に必要となるアドオンCDには、PS3専用のglibc-kernheaders2.6.16-20061207が入っています。PS3用のYDL5に入っているモジュールなので、アドオンCDとバージョンが異なりますがそのままとしておきます。また、yum updateによってPS3 linux専用のモジュールが勝手に更新されないように以下の設定を/etc/yum.confに加えました。
  exclude=kernel-*, glibc-kernheaders-*, kernel-headers-*, kexec-tools-*, spu-*

SDK 2.1インストールに必用なパッケージ

先ずIBMが配布しているCellSDK21.isoをダウンロードします。ダウンロードにはアカウント登録が必用です。上記のisoイメージの他に、SPUコンパイラなどは、バルセロナスーパーコンピュータセンタ(BSC)のLinux on Cellのサイトからダウンロードします。
SDK2.1のisoイメージにインストールスクリプトが収録されており、インストールスクリプトを実行するとBSCから必用なパッケージを自動的にダウンロードします。ただし、BSCのサーバー負荷が高いようで、ダウンロードが途中で止まってしまうことが度々ありました。そのため、必用なパッケージを事前にダウンロードして、マニュアル (rpm -ivh パッケージ名) でインストールするのがよいと思われます。また、インストールスクリプトはCellのシミュレーターもインストールするようになっていますが、PS3ではメモリー不足のため動作しないと思うためインストールの対象外にします。Cellシミュレーターは別途インストールするPC Linux上でのクロス開発環境で使用します。

それでは、以下のパッケージをインストールします。必用なパッケージを/tmp/cellsdk-2.1ディレクトリーにコピーしておいて、rpm -ivh * コマンドを使用してひとまとめにインストールします。

<BSCからダウンロードするパッケージ>
・GNU Toolchain for SPU
spu-binutils-2.17.50-8.ppc.rpm
spu-gcc-4.1.1-9.ppc.rpm
spu-gcc-c++-4.1.1-9.ppc.rpm
spu-gdb-6.6-12.i686.rpm
spu-newlib-1.15.0-7.ppc.rpm
・SPE Runtime Lib v1.2 (deprecated)
libspe-1.2.2-0.ppc64.rpm
libspe-1.2.2-0.ppc.rpm
libspe-devel-1.2.2-0.ppc64.rpm
libspe-devel-1.2.2-0.ppc.rpm
・SPE Runtime Lib v2.1
elfspe2-2.1.0-0.ppc.rpm
libspe2-2.1.0-0.ppc64.rpm
libspe2-2.1.0-0.ppc.rpm
libspe2-devel-2.1.0-0.ppc64.rpm
libspe2-devel-2.1.0-0.ppc.rpm

<SDK2.1のisoイメージに添付>
・SIMD math library
simdmath-2.1-1.ppc.rpm
simdman-2.1-1.noarch.rpm
spu-simdmath-2.1-1.ppc.rpm 
・MASS library
ppu-mass.lib-4.4.0-20.ppc64.rpm
ppu-mass.lib-4.4.0-20.ppc.rpm
spu-mass.lib-4.4.0-20.ppc.rpm 
・Prototype libraries and samples package
cell-sdk-lib-samples-2.1-2.noarch.rpm
・ALF library
cell-alf-2.1-2.noarch.rpm
・Tool
cell-spu-timing-2.1-1.ppc.rpm
fdprpro-5.4.0-8.ppc.rpm

GNU Toolchain for PPUはYDL5のデフォルトでインストールされるモジュールをそのまま使います。

パッケージのインストールが完了したら、SDK2.1 isoイメージの/sofware/cellsdk  をPS3 Linuxの/opt/ibm/cell-sdk/prototype にコピーし、以下のコマンドを実行します。

# /opt/ibm/cell-sdk/prototype/cellsdk verify

IBM Cell System Simulator:
  systemsim-cell-2.1-10.ppc64 ...  missing

Cell System Simulator System Image:
  sysroot_image-2.1-8.noarch ...  missing

GNU Compiler Toolchain:
  spu-newlib-1.15.0-7.ppc ...  found
  spu-gcc-c++-4.1.1-9.ppc ...  found
  spu-gcc-4.1.1-9.ppc ...  found
  spu-binutils-2.17.50-8.ppc ...  found
  spu-gdb-6.6-12.ppc ...  found
  ppu-gcc-c++-4.1.1-10.ppc ...  found
  ppu-gcc-4.1.1-10.ppc ...  found
  ppu-gdb-6.6-15.ppc ...  found
  ppu-binutils-2.17.50-8.ppc ...  found

IBM XL C/C++ Compilers:
  xlc.lib-8.2.0-20.ppc64 ...  missing
  xlc.cmp-8.2.0-20.ppc64 ...  missing
  xlcpp.lib-8.2.0-20.ppc64 ...  missing
  xlcpp.cmp-8.2.0-20.ppc64 ...  missing
  xlcpp.help-8.2.0-20.ppc64 ...  missing

IBM Cell Prototype Libraries and Samples:
  cell-sdk-lib-samples-2.1-2.noarch ...  found
  cell-alf-2.1-2.noarch ...  found

Cell Libraries:
  libspe2-2.1.0-0.ppc ...  found
  libspe2-devel-2.1.0-0.ppc ...  found
  libspe-1.2.2-0.ppc ...  found
  libspe-devel-1.2.2-0.ppc ...  found
  libspe2man-2.1.0-1.noarch ...  found
  simdmath-2.1-1.ppc ...  found
  simdman-2.1-1.noarch ...  found
  ppu-mass.lib-4.4.0-20.ppc ...  found
  spu-mass.lib-4.4.0-20.ppc ...  found
  spu-simdmath-2.1-1.ppc ...  found
  libspe2-2.1.0-0.ppc64 ...  found
  libspe2-devel-2.1.0-0.ppc64 ...  found
  libspe-1.2.2-0.ppc64 ...  found
  libspe-devel-1.2.2-0.ppc64 ...  found
  ppu-mass.lib-4.4.0-20.ppc64 ...  found

Cell FDPR-PRO Utility:
  fdprpro-5.4.0-8_20070226.ppc ...  found

IBM Cell SPU Timing Utility:
  cell-spu-timing-2.1-1.ppc ...  found

INSTALLATION SUMMARY
==============================================================================
IBM Cell System Simulator        : Not Installed  (0 of 1 found)
Cell System Simulator System Image : Not Installed   (0 of 1 found)
GNU Compiler Toolchain         : Installed     (9 of 9 found)
IBM XL C/C++ Compilers                  : Not Installed  (0 of 5 found)
IBM Cell Prototype Libraries and Samples: Installed   (2 of 2 found)
Cell Libraries                : Installed     (15 of 15 found)
Cell FDPR-PRO Utility          : Installed     (1 of 1 found)
IBM Cell SPU Timing Utility        : Installed    (1 of 1 found)

Cell System SimulatorとIBM XL C/C++ Compilersはインストールしていませんので、それ以外がInstalledと表示されればインストール完了です。

動作テスト

SDK付属のsampleプログラムをビルドしてみます。以下のコマンドを入力してエラーが発生せずビルドが終了すれば動作OKです。

# /opt/ibm/cell-sdk/prototype/cellsdk build

長々と手順を記載しましたが、これで最新のCell開発環境がインストールできました。これだけの開発環境が無償で手にはいるのはすばらしいことです。また、SDKのisoイメージでは膨大な量のドキュメントが収録されいます(全部英語ですが、、)。

Yellow Dog Linux 5.0 (YDL5) をPS3にインストール

前回のブログ投稿に引き続き、今回はYDL5インストールのお題です。YDL5はPS3へのインストールを考慮して構築されているため、PCにLinuxディストリビューションをインストールしたことがある方なら問題なくインストールができます。私が感じたYDL5のメリットは以下です;

  • PS3用のカーネルやドライバーモジュールがディストリビューションに組み込まれており、PS3固有デバイスの設定が不要
  • GUIベースのインストーラーが付属
  • インストール時にインストールパッケージは選べないが、適度なパッケージをデフォルトでインストールしてくれる

インストール作業の概要

インストールの手順はフィックスターズさんのYellow Dog Linux for PS3を参考にしています。インストール用DVD-ROMを作成するためのisoイメージですが、以前はKDDI-LabのFTPサーバーに置いてあったのですが、今チェックするとYDL5のisoイメージはなくなっていました。Googleで海外のミラーサイトを検索したところ、いくらかダウンロードが可能なサイトがありました。その他の入手方法としては、本を買う必用がありますが、インプレスから出ているPLAYSTATION3 Linux完全攻略ガイドにDVD-ROMがついてきます。この本は、フィックスターズさんのwebサイトにある記事を半分くらい流用していますが興味のある方は買っても損はないと思います。

(2005/5/5追記) Fedora Coreをインストールするためには、アドオンCDが必要になりますがYDL5の場合は不要です。

使ってみて

インストール後はgdmが起動してX Windowsも問題なく動作します。PS3でLinuxが普通に動作して、Cell開発環境を導入すればLinux上でCellを使用した並列プログラミングの体験ができることは、私のようなLinuxインストールおたく(インストールまではOKだが、その後の使いこなしが今一歩、、)にとっては画期的な出来事です。
標準でCell SDK 1.1がインストールされますが、最新のCell SDK 2.1をインストールするためにはCell SDK 1.1は削除する必用があります。Cell SDK 2.1のインストールは別途投稿します。

ではLinuxマシンとして実用的かと言うと今一歩と言わざるおえません。インストール前から想定していたのですが、PS3のメインメモリー256MB(OSやアプリケーションが使用できる領域は200MB程度です)がLinuxマシンとしては決定的な制約となります。Firefoxを使ってwebを閲覧する程度ならなんとかなりますが(こちらはXMBのブラウザーより軽快かも)、Eclipse統合開発環境のようなJavaをバリバリ使ったメモリー喰いのアプリケーションではswapの嵐となり使い物になりません。また既に言われていることですが、Cellのスカラー演算(普通のCPUとして使用する演算)性能は、Pentium4やCore2より劣るため全体的に軽快感に欠けます。例えば、パッケージを大量にインストールする際の依存性チェック(diskアクセスはないのでswapは起きていないと思います)の時間が、Pentium4 530 3.0GのMy PCに比べて体感的に2倍程度かかるように思えます。ですので、実用的なLinux環境を構築するならメモリーを1GB積んだPentium4 or Core2搭載PCを用意する方がよいです。

とはいえ、繰り返しになりますが、Cellを使った並列プログラミングの醍醐味はPCでは味わえません。リベンジとして、SPEでのSIMD/並列化を駆使した演算で、少なくともMy PCのPentium4はぶち抜ける性能を出せることを確認してみたいと思っています。

トラブル対策

YDL5のインストールで遭遇した問題点2点の対応策を下記します。

1. SCIMの依存性チェック問題

YDL5に同梱されているSCIM(日本語入力関係のパッケージ)にはlibstdc++との依存性チェックに問題があります。標準で自動的にSCIMがインストールされますが、その後yum updateでパッケージのアップデートを行うと以下のエラーが表示されupdateが止まってしまいます。

Error: Missing Dependency: libstdc++-20060428.so.7(GLIBCXX_4.2) is needed by package scim
Error: Missing Dependency: libstdc++-20060428.so.7(CXXABI_1.4) is needed by package scim

私は、yum updateを一括で行うために(excludeという技があることを知らず)、scimを一旦削除したら今度は上記のエラーでインストールができなくなってしまいました。やっぱり日本語入力が使えないと不便なのでこれは何とかしないといけません。
YDL5のインストールDVDに添付されているのはscim-1.4.4-9.7.fc5.ppc.rpmとなっており、FC5(Ferora Core5)のパッケージをそのまま流用しているようです。FC5のupdateサーバーを調べるとscim-1.4.4-9.8.fc5.ppc.rpmが公開されています。ということで、最新版のscimをダウンロードしてインストールしてみます。

# rpm -ivh scim-1.4.4-9.8.fc5.ppc.rpm
 準備中...                ########################################### [100%]
 1:scim                   ########################################### [100%]
# rpm -ivh scim-anthy-1.2.2-1.fc5.ppc.rpm
 準備中...                ########################################### [100%]
 1:scim-anthy          ########################################### [100%]

今度はうまくいきました。日本語入力の動作も、(数行程度入力しただけですが)問題ないようです。

2. kbootでportmapのtimeout errorが発生する

同一ネットワーク上にnfsが動いている他のLinuxマシンが存在すると、kbootのプロンプトが出る直前に以下のtimeoutメッセージが数回繰り返され起動に時間がかかってしまいます。

portmap:  server localhost not responding, timeout
RPC:  faild to connect portmap (errno -5)

起動時の問題なので、kboot(ブートローダー)に問題があるようです。PS3用のkbootには、 YDLのサポートサイトで公開されているotheros.bldと、Sony PS3 Linuxのftpサイトで公開されているアドオンCDに添付のものがあります。YDL5のインストールには前者が必用なのですが、インストール後はkbootを後者に入れ替えても問題なく起動できます。kbootを後者に入れ替えると、問題のtimeoutは発生しなくなりました。またkbootのプロンプトが出るまでの時間も、まわりでnfsが動いていない条件で比較して若干短くなったように思えます。

3. 追記(2007/5/5)

yumの設定で注意点があることが分かりました。PS3用にビルドされたkernelなどPS3専用パッケージがyum updateで更新されないように、/etc/yum.confに以下の設定を追加しました。

exclude=kernel-*, glibc-kernheaders-*, kernel-headers-*, kexec-tools-*, spu-*

Fedora Core 6 (FC6) をPS3にインストール

PS3にインストールできるLinux (当然PPC版ですが)は、Yellow Dog Linux (YDL) とFedora Core (FC) があります。

元々My PS3にはYDL5.0がインストールしてあったのですが、次の点が不満で、FC6をインストールしてみました。

  1. IBMが配布しているCell SDK 2.1は、FC6を前提に構築されており、libspe2, spu-gccなどYDL5.1にインストールしようとすると、rpmパッケージの依存性チェックでエラーとなりインストールできない。どうも、FC6で使用しているglibc2.5が必用な模様(YDL5.1はglibc2.4を使用)
  2. YDLはFCに比べてyumで追加インストールできるパッケージの種類が少ない

インストールの方法は、フィックスターズさんのPS3 Linuxのインストールサイトを参考にしました(このサイトは色々な情報があって重宝します)。結果は以下のように惨敗となり、結局はYDL5.0に戻すことになりました。YDL5.0のインストールは次回のネタとしまして、今日はFC6インストールの顛末を書きます。

(2007/5/5更新) PS3 Linuxのインストールには、Sony PS3 Linuxのftpサイトで公開されているアドオンCDが必要です。私がFC6インストールに使用したのは20061208バージョンでした。最新版をチェックしたところ、20070425バージョンが公開されておりました。Readme.txtを見ると、20070425バージョンはFC6に対応していると記載があります。もう少し早く20070425バージョンに気がついていればFC6がインストールができたことになります。残念!!

YDL5.0に比べるとインストーラーが貧弱です
カーネルがブートできる最小限の構成で開発環境・X Windowsなど一切インストールされないminimun installか、インストール後のディスク占有量が9GB超にもなるfull installのどちらかしか選べません(10GBのHDD区画を確保しても空き容量が0になってしまいます)。
先ずは、full installしてから不要なパッケージを削る方針で作業をはじめましたが、full installに3時間ちょっとかかりました。削除はyum groupremoveコマンドに以下のgroup名を指定してやるとgroup単位で削除ができてらくちんです。
   Office/Productivity
  Authoring and Publishing
   Games and Entertainment

FC6に限った話ではなく、PS3 Linixのインストールの速度はは遅いです
My PC (Pentium4 3.0GHz, 1GB memory) では、FC6の標準的なインストール(HDD占有量4GBくらい)は30分強で終了します。想像ですが、PS3はメモリーが256MBしかないため処理が遅くなってしまうと思われます。
ちなみに、yum groupremoveで不要パッケージを削除するのも1時間以上かかりました。

ETH0がupしないぞ
インストールが終了してすぐ気がつくのが、イーサネットインタフェース (ETH0) がupしないことです。ifup eth0を実行してもデバイスが存在しない旨のエラーが返ってきます。ifconfigを実行すると確かにloしか見えません。dhclientを実行するとIPアドレスは取得できちゃいます。後で気がついたのですが、ネットワークドライバが正しく認識されていないのが原因だと思われます。PS3のネットワークドライバは、"Gelic Network Driver"と呼ばれるモジュールですが、/etc/modprobe.confに以下の行を加えることでインタフェースを認識してくれる筈です(環境を壊してしまったので確認できないのですが)。
   alias eth0 Gelic Network Driver

X Windowsが正しく起動しない
system-config-displayがスクリプトエラーを吐いて動かないのでいやな予感がしつつ、startxでX Windowsを起動すると画面がぐちゃぐちゃです。ディスプレー・ドライバーがまともに動いていない感じです。xorg.confを眺めてみると、
  Driver      "fbdev"
となっており、ドライバーの指定は問題なさそう。Section "Module"にOpenGL関係と思われる以下の設定があるのでコメントアウトして再度起動。
   #Load   "dri"
   #Load   "glx"
やはり状況は変わりません。xserverの起動ログを見ると致命的なエラーは吐いていません。xorg.confを確認するとコメントアウトした行が元に戻っているではありませんか! これはちょっとお手上げです、、、

かくなるうえはカーネルの再構築か
FC6はkernel-2.6.20をベースに構築されています。また、FC6と一緒に配布されているppc用のkernelはPS3用の固有ハードサポートを有効にした形でビルドされておらずPS3用に使用することはできません。
PS3用のkernelはPS3固有ハードのサポートが組み込まれた、Sony PS3 Linuxのftpサイトで配布されているアドオンCDのkernal imageをインストールします(インストーラーがアドオンCDを要求して自動的にインストールを実行)。アドオンCDのkernelは2.6.16 (FC5時代のkernel) となっています。また、YDL5.0はFC5をベースに構築されています。このため、FC5やYDL5.0はPS3用kernelと相性がよいのですが、FC6とPS3用のkernel (FC5時代の版) は相性が悪いようです 。
PS3用のkernelコードは公開されているので、かくなるうえはkernel-2.6.20のソースからPS3用kernel-2.6.20をビルドするかとも考えたのですが今回は力尽きました。何せ連休中にプログラム開発環境まで作るのが目標ですから。

ということで、一日がかりで取り組んだFC6インストールは結局廃棄してYDLに戻ることになりました。YDL5.0のインストール記録は明日にでもアップします。

(2007/5/5追記) 冒頭にも記載しましたが、アドオンCD 20070425バージョンが公開されています。最新アドオンCDを使用すればX Windowsの問題も解消するはずです(アドオンCDのChanges-j.txtにもFC6をインストールした際に X Window が使えない不具合を修正したと記載があります)。FC6で再度環境を構築したいところですが、インストール4時間コースを再度行うのも億劫なのでまたの機会にトライします。

« 2007年4月 | トップページ | 2007年6月 »

2018年10月
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31      
無料ブログはココログ