« PC LinuxにCell SDK2.1をインストールする | トップページ | Cell vs Pentium4 - SIMD演算編 »

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をインストールする | トップページ | Cell vs Pentium4 - SIMD演算編 »

Cellプログラミング」カテゴリの記事

コメント

この記事へのコメントは終了しました。

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      
無料ブログはココログ