本サイトは、マルチコア トータルソリューションカンパニー -フィックスターズの技術者有志が運営するサイトです。

MARS

出典: PS3 Linux Information Site / Cell/B.E.のパワーを体験しよう

目次

What is MARS(Multicore Application Runtime System)

MARSは2008年7月10日にソニーからリリースされた、SPE主導でプログラムを実行するための実行環境ライブラリ群です。

従来のLibspeを用いたプログラム実行では、PPEのプログラムでSPEのプログラムの実行順番や何スレッドで実行するか等をあらかじめ考えなければならず、同じプログラムを並列に動作させたり、小さなプログラムをSPEでパイプライン的に処理させたい場合には、プログラマがその制御ルーチンを書く必要がありました。MARSを利用すると、タスクと呼ばれる単位で実行したいプログラム群を管理したり同期をとったりする機構がライブラリ化されており、Libspeを利用してプログラマが制御ルーチンを書くよりも効率よくSPEプログラムを実行することが可能になります。

  • 2009年8月8日 MARS 1.1.4がリリースされました
  • カーネルスケジューラのバグフィックスが行われました
  • エラーハンドリングやテストスイートも改善されました
  • 2009年6月5日 MARS 1.1.3がリリースされました
  • テストスイートの充実化が行われました
  • 異常系テスト
  • ストレステスト
  • バグフィックスと、MARS 本体の最適化が行われました
  • 2009年3月31日 MARS 1.1.2がリリースされました
  • ホストコールバックフレームワークのAPIが追加されました
  • パフォーマンスの最適化が行われました
  • パフォーマンステストが追加されました
  • 2009年2月18日 MARS 1.1.1がリリースされました
  • MARSが使用するkernelエリアが12KBに削減されました
  • タスクモジュールが使用するエリアも4KBに削減されました
  • カーネルスケジューラの最適化とバグフィックスが行われました
  • 2008年12月22日 MARS 1.1.0がリリースされました
  • 品質向上のためにtest suiteがパッケージに含まれました
  • 1つのノードの中に2つのCellがあるような状況でのnumaアーキテクチャに対応しました
  • taskモデル以外のプログラミングモデルを追加しやすいようになりました
  • 2008年11月11日 MARS 1.0.1がリリースされました
  • 1.0.0のバグ修正版になります。
  • 2008年10月24日 MARS 1.0.0がリリースされました
  • 2008年9月12日 MARS 0.9.2がリリースされました
  • サンプルとして提供されていたOpenSSLがバージョンアップされ、新たなサンプルとしてzlibが追加されました



MARSの情報

  • 公式サイト:ソースおよび発表資料、ドキュメント等がまとまっています
  • 上記サイトのライブラリリファレンスへのリンク
  • MARSで実装されているサンプル
mars-src.1.1.3.tgzには機能別に豊富なサンプルが付属しています。MARSを理解するにはこのサンプル群のソースを見るのがいいでしょう。
他にも以下のMARSを使ったサンプルがあります。
  • OpenSSL
  • zlib


MARSのビルド方法

  • tarballを展開します
% tar xvzf mars-1.1.4.tar.gz
  • 展開してできた'mars-1.1.4'へ移動して、次の手順でソースをビルドしてインストールします
% cd mars-1.1.4
(32bit版)
% ./configure --with-mars-platform=cell SPU_CC=spu-gcc PPU_CC=ppu-gcc PPU_CFLAGS=-m32
% make
# su
# make install
(64bit版)
% ./configure --libdir="/usr/lib64" --with-mars-platform=cell SPU_CC=spu-gcc PPU_CC=ppu-gcc PPU_CFLAGS=-m64
% make
% su
# make install

RPMのインストール方法

  • バージョン1.0.1からRPMが用意されました。RPMを使うことで簡単にインストールすることができます
  • MARSサイトから
  • mars-1.1.4-1.ppc.rpm
  • mars-devel-1.1.4-1.ppc.rpm
  • mars-doc-1.1.4-1.ppc.rpm
  • を取得し、次の手順でインストールします
% rpm -Uvh mars-1.1.4-1.ppc.rpm mars-devel-1.1.4-1.ppc.rpm mars-doc-1.1.4-1.ppc.rpm
  • RPMはFedora 9でCellSDK 3.1を使っている人向けに用意されています。それ以外のディストリビューションや他のバージョンのCellSDKを使っている人は、ソースからビルドすることをお勧めします。

RPMのビルド方法

  • RPMソースは以下の方法でビルドします
  • MARSサイトから
  • mars-1.1.4-1.src.rpm
  • を取得します
  • rpmbuild コマンドを使ってビルドします
# rpmbuild --rebuild mars-1.1.4-1.src.rpm
  • ビルドが終われば /usr/src/redhat/RPMS/ppc64 以下にRPMができます
  • 32bit版が必要な場合は、--target ppc オプションを付けてrpmbuildを使います
# rpmbuild --target ppc --rebuild mars-1.1.4-1.src.rpm
  • 一般ユーザがrpmbuildする場合は、以下のようにします
  • ホームディレクトリにRPMビルドに必要なディレクトリを作ります
% mkdir -p ~/RPM/{BUILD,SOURCES,SPECS,SRPMS,RPMS/{ppc,ppc64}}
  • 作ったディレクトリをRPMビルドのディレクトリとして使うようにホームディレクトリの .rpmmacros に以下のように書きます($(HOME)は置き替えてください)
%_topdir /$(HOME)/RPM
  • rpmbuild すると ~/RPM/RPMS/ppc64 以下にrpmができます。
% rpmbuild --rebuild mars-1.1.4-1.src.rpm

RPMのビルド方法(YDL)

  • SRPMが用意されているので、SRPMからYDL用に再構築します。
  • mars-1.1.4-1.src.rpmを取得します。
# rpm -ivh mars-1.1.4-1.src.rpm
  • YDL標準のppu-gcc/spu-gccではバージョンが古いためSPECSを修正する必要があります。
  • mars.specに以下のパッチを当てます
# cd /usr/src/yellowdog/SPECS
# patch < mars.spec.patch
  • mars.spec.patch
*** mars.spec.orig	2009-02-19 12:37:37.000000000 +0900
--- mars.spec	2009-02-19 12:39:26.000000000 +0900
***************
*** 60,66 ****
  %define mars_configure_opts \\\
  	PPU_CC="$PPU_CC" \\\
  	PPU_CFLAGS="$PPU_CFLAGS -g -O2" \\\
- 	PPU_LDFLAGS="-Wl,--build-id" \\\
  	--host=%{_host} \\\
  	--build=%{_build} \\\
  	--prefix=%{_prefix} \\\
--- 60,65 ----
  • rpmをビルドします。
# rpmbuild -ba /usr/src/yellowdog/SPECS/mars.spec
  • ビルドが終わると /usr/src/yellowdog/RPMS/ppc64 以下に64bit版のRPMが作成されます。
  • 32bit版は、--target ppcを指定することで作成できます。
# rpmbuild --target ppc -ba /usr/src/yellowdog/SPECS/mars.spec
  • ビルドが終わると /usr/src/yellowdog/RPMS/ppc 以下に32bit版のRPMが作成されます。
表示
個人用ツール
オープンソースプロジェクト
ツールボックス