« 2008年2月 | トップページ | 2008年6月 »

2008年5月の記事

Core2 Quadの最大演算性能

連休に自宅PCのCPUをCore2 Quad Q9450に更新しました。今回はCellプログラミングネタではありませんが、Core2 Quadの演算性能測定結果を掲載します。

測定方法はCellの最大演算性能で、Pentium4の性能測定に使用したGoto BLASによる行列積の計算です。

Goto BLASのビルド

BLAS(Basic Linear Algebra Subprograms)とは、シミュレーションなどで使用する行列演算やベクトル演算のライブラリー集です。Fedora 7にはBLAS・ATLAS、Cell SDK 3.0にはLAPACKというパッケージが提供されています。Goto BLASは独自の最適化を行っており、CPU性能の限界が引き出せることで有名なため、Goto BLASを性能測定用に使用しました。

Goto BLASはその名の通り、テキサス大学 Texas Advanced Computing Center (TACC)の後藤和茂さんによって開発されたパッケージで、TACCのWebサイトからソースコードがダウンロードできます(アカウント登録が必要)。

以下の手順で、Goto BLASのビルドを行います。 ビルドの方法はこちらを参考にさせていただきました。

  • ソースをダウンロードしたら適当なディレクトリに展開します
    (例えば; /usr/src/GotoBLAS)
  • quickbuild.32bitを実行
  • libgoto_penrynp-r1.26.a、libgoto_penrynp-r1.26.soがソースディレクトリに生成されます(ファイル名のpenrynpの部分はコンパイルを行うCPU種別によって変化します)
  • libgoto_xxx.a, libgoto_xxx.soを/usr/libにコピー(ユーザープログラムとリンクする際にデフォルトのライブラリパスが使用できるようにするため)
  • /usr/libに移動してlibgoto.a, libgoto.soにシンボリックリンクを作成
      # ln -s libgoto_penrynp-r1.26.a libgoto.a
      # ln -s libgoto_penrynp-r1.26.so libgoto.so

CBLASのビルド

BLASは元々FORTRAN用に作成されているため、Cから呼び出すこと(リンクすること)ができません。CからBLASを利用するためのInterfaceがCBLASになります。CBLASのソースを、BLAS Technical Forumの「Reference implementation for the C interface to the Legacy BLAS」からダウンロードして、以下の手順でビルドします。

  • 事前にFORTRANコンパイラをインストールする必要があります。今回は、gfortran(GNU Fortran)を使用しました
  • ソースを適当なディレクトリに展開(例えば; /usr/src/CBLAS)
  • ソースディレクトリに移動して以下のリンクを作成
    # ln -s Makefile.LINUX Makefile.in
  • Makefine.LINUXの以下を編集
      BLLIB = /usr/lib/libgoto.a   --- GotoBLASのパスを指定
      CBDIR = /usr/src/CBLAS   -- CBLASのソースディレクトリ
      FC = gfortran  -- FORTRANコンパイラの指定
  • make alllib
    make allを指定すると、ライブラリの生成に加えて、テストプログラムのビルドを行うのですが、こちらは途中でエラー終了してしまいました。libgotoをリンクするところでエラーになっているのですが、Goto BLASをマルチスレッド版でビルドしているのに対して、テストプログラムがシングルスレッドのためエラーになっているように見えます。そのため、make alllibでライブラリが生成できればよしとします。
  • ./lib/LINUX/cblas_LINUX.a を/usr/libにコピー
  • /usr/libに移動して、# ln -s cblas_LINUX.a libcblas.a にてシンボリックリンクを作成
  • /usr/src/CBLAS/src/cblas.hを/usr/includeにコピー

行列積計算

Cellの最大演算性能でPentium4の性能測定に使用したプログラムを実行します(ソースファイルをダウンロード )。Goto BLASを使用する際のポイントを以下に示します。

  • マルチコアCPUを使用した場合、Goto BLASが自動的にコア数分のスレッドを生成します。並列処理を加味した計算データーの分割を考えなくてもよいため、非常に楽ちんです
  • スレッド数を制限したい場合は、環境変数 GOTO_NUM_THREADS=1 等を設定します(数字は最大スレッド数)
  • プログラムにcblas.hをインクルードし、プロトタイプ宣言に従ってBLASライブラリを呼び出します。行列積を求める関数名はcblas_sgemmです。
  • リンクの際は、ライブラリとしてcbras, goto, pthreadを指定します (リンカオプションに-lcblas -lgoto -lpthreadを指定)
  • マルチスレッド版のGoto BLASを使用する場合、pthreadの指定が必要です

計算結果

単精度浮動小数点4096 x 4096要素の行列積を5回繰り返した際の性能値は以下となりました。CPUはCore2 Quad Q9450(3GHzで動作)です。

コア数(スレッド数)GFLOPS
1 22.50
2 44.75
3 64.66
4 88.50
  • コアあたりの演算性能は22 GLOPSとなり、コア数(スレッド数)に比例してリニアに性能が伸びました
  • コア数を増やした際に、メモリアクセス競合によって性能が低下するようなことはありませんでした。行列積は計算量に対してメモリアクセスが比較的少なく、複数のコアが同時にメモリアクセスを行った際に、片方のコアで計算がストールするシーンがないものと思われます
  • Pentium 4(3.4GHz)で同様の計算を行った際の性能値が11.22GFLOPSでしたので、Core 2でコアあたりの性能は2倍に向上しました
  • CellはSPUあたり23.21GFLOPS、6 SPU時139.36GFLOPSの性能が出せるため、この手のピーク性能競争では、SPUコア数が多い分Cellが優位を保っています

PS

コア数を変化させた際の性能特性を計りたいために、まだまだ高価なCore 2 Quad Q9450を購入してしまいました(これまで買ったCPUでもっとも高価、、)。安くなったQ6600のと比較では最後まで悩んだのですが、そこは新しいもの好きの血が騒ぎ、結局は9450となりました、、

MB(P5K-E)、CPU FAN(サントラスト薙刀)はPentium4時代に買ったものを継続使用しているのですが、4コアフル稼働時でもファンの回転速度がP4フル稼働時より低くなることから、性能に加えて、発熱の点でも改善された印象があります。(ただ、温度センサーの動作がP4, Core2では異なるため厳密な比較はできませんが)。FANの騒音は低負荷時・負荷時とも確実に下がっており、この点は非常にうれしいです。

日常の利用シーンではP4に対して8倍(2倍x4コア)の性能向上を実感できることはないのですが、騒音低減、いざというときの予備性能(?)で、自己満足度は100%です。

« 2008年2月 | トップページ | 2008年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      
無料ブログはココログ