CELLプロセッサ--環境


環境

環境構築 (Fedora Core 5 編)

デスクトップ PC が届いたので、Fedora Core 5 と Cell SDK 1.1 をインストールしました。順番は逆になりますが、まずは Cell SDK 1.1 のインストールから。IBM Cell Broadband Engine Software Development Kit:Download から CellSDK11.iso と SDK Installation and User's Guide を取ってきて、Guide に書いてある通りに実行すればあっさりとインストールできます。

次に Fedora Core 5 (FC5) のインストールですが、届いたデスクトップ PC のスペックはこんな感じで、今話題の Core 2 Duo (E6600) の搭載された PC です。

CPU: Intel Core 2 Duo E6600 (2.4GHz)
MOTHER: Intel D975XBXLKR (BIOS Version 1334)
AUDIO CODEC: SigmaTel STAC9221D A2
ETHER: Intel 82573L
VGA: WinFast PX7900GTTDH256M

また、使用した FC5 のインストールは CPU や MOTHER のトラブルをできるだけ避けたかったので、素の FC5 ではなく、以下の Fedora Unity Project にある Fedora Core 5 Re-Spin 20060621 版を使用しました。こちらのインストールも特にこれといったトラブルもなく、あっさり終わります。続いて Fedora Core 5 インストール個人的ノート を参考にシステムのアップデート (yum update) と nvidia ドライバのインストールを行うことで、ほとんどのデバイスが認識し、機能するようになりました。HARDWARE MONITOR (lm_sensors) も /usr/sbin/sensors-detect を実行することで動作するようになります。AUDIO CODEC は動かないかも、、と思っていましたが、音も鳴ってます。ただ、ささいな問題もありますが、、

o speed step も動作はしていますが、実際に動作している周波数が 2 種類 (1596MHz と 2394MHz) しかないような気がする (もっとありますよね?)。
o 起動時に以下のように怒られる
  - PCI: BIOS Bug: MCFG area at f0000000 is not E820-reserved
  - PCI: Failed to allocate mem resource #6:20000@90000000 for 0000:01:00.0

以下にインストール後のシステム情報を幾つか挙げておきますので、同様の PC に FC5 をインストールする人は参考にしてください。

# cat /proc/version
Linux version 2.6.17-1.2174_FC5smp (brewbuilder@hs20-bc2-3.build.redhat.com) (gcc version 4.1.1 20060525 (Red Hat 4.1.1-1)) #1 SMP Tue Aug 8 16:00:39 EDT 2006

# cat /proc/cpuinfo
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 15
model name      : Intel(R) Core(TM)2 CPU          6600  @ 2.40GHz
stepping        : 6
cpu MHz         : 1596.000
cache size      : 4096 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 2
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 10
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm
bogomips        : 4805.39

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 15
model name      : Intel(R) Core(TM)2 CPU          6600  @ 2.40GHz
stepping        : 6
cpu MHz         : 1596.000
cache size      : 4096 KB
physical id     : 0
siblings        : 2
core id         : 1
cpu cores       : 2
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 10
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx lm constant_tsc pni monitor ds_cpl vmx est tm2 cx16 xtpr lahf_lm
bogomips        : 4800.36

# lspci
00:00.0 Host bridge: Intel Corporation Memory Controller Hub
00:01.0 PCI bridge: Intel Corporation PCI Express Graphics Port
00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 01)
00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 01)
00:1c.4 PCI bridge: Intel Corporation 82801GR/GH/GHM (ICH7 Family) PCI Express Port 5 (rev 01)
00:1c.5 PCI bridge: Intel Corporation 82801GR/GH/GHM (ICH7 Family) PCI Express Port 6 (rev 01)
00:1d.0 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #1 (rev 01)
00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #2 (rev 01)
00:1d.2 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #3 (rev 01)
00:1d.3 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #4 (rev 01)
00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 01)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev e1)
00:1f.0 ISA bridge: Intel Corporation 82801GH (ICH7DH) LPC Interface Bridge (rev 01)
00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 01)
00:1f.2 IDE interface: Intel Corporation 82801GB/GR/GH (ICH7 Family) Serial ATA Storage Controllers cc=IDE (rev 01)
00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 01)
01:00.0 VGA compatible controller: nVidia Corporation Unknown device 0291 (rev a1)
04:00.0 Ethernet controller: Intel Corporation 82573L Gigabit Ethernet Controller
05:04.0 FireWire (IEEE 1394): Texas Instruments TSB43AB23 IEEE-1394a-2000 Controller (PHY/Link)
05:05.0 RAID bus controller: Silicon Image, Inc. SiI 3114 [SATALink/SATARaid] Serial ATA Controller (rev 02)

ソースコードを読むための環境整備

普段からほとんど Linux 上で生活してますが、特にソースコードを読んだり書いたりする時には以下のソフトを使用しています。

xemacs (emacsen), ctags, global, quilt, git

これらは Fedora Core 5 (FC5) なら Extras にあるので yum install すれば簡単にインストールできます。以下はソースコード (特に Linux kernel) を読む場合に便利な設定例です。

ctags (Exuberant Ctags)

global にも当然 parser はありますが、ctags を使うと構造体の型の定義自体にも跳べるようになるので global の parser として使ってます (cscope とかでも可能かもしれませんが、、)。これがあるのとないのとでは、特に Linux kernel のような巨大ソースコードでは大違いです。

ただ、ctags を使用すると、Linux kernel のソースコードの一部をうまく解析できなくなります (gtags-parser を使用する場合は大丈夫)。

kernel/sched.c:

static inline runqueue_t *task_rq_lock(task_t *p, unsigned long *flags)
    __acquires(rq->lock)

static inline void task_rq_unlock(runqueue_t *rq, unsigned long *flags)
    __releases(rq->lock)

__acquires, __releases の部分なんですが、ctags 実行時のオプションを指定することで対策できます (実際には global の設定ファイルで指定してます)。

他にも ./drivers/scsi/oktagon_io.S の解析にも失敗しますが、こちらは重要ではないので global の設定ファイルで対象から除外します。

global

最近ではメジャーになってきたので説明不要かと、、ググれば沢山説明がありますが、ここでは ctags, xemacs, quilt, git と併用する場合の設定 (.globalrc) を載せておきます。

#
# default target を変更
#
default:\
        :tc=ctags-devel:tc=htags:
#
# .git, .pc, patches, ./drivers/scsi/oktagon_io.S を tags 作成対象から外す
#
common:\
        :skip=GPATH,GTAGS,GRTAGS,GSYMS,HTML/,html/,tags,TAGS,ID,y.tab.c,y.tab.h
,.notfunction,cscope.out,.gd
binit,SCCS/,RCS/,CVS/,CVSROOT/,{arch}/,.svn/,.cvsrc,.cvsignore,.cvspass,.cvswrappers,.deps/,autom4te.cache/
,.snprj/,.git/,.pc/,patches/,oktagon_io.S:\

# デフォルトで用意されている ctags-exuberant target を元に ctags-devel
# target を作ります。違いは以下
# o 関数定義を解析する parser として ctags を使用
# o 構造体の型名等も対象となるように ctags のオプションを指定
# o __acquires, __releases 対策
# o 参照とシンボルのデータも作成
ctags-devel|Exuberant Ctags|ctags by Darren Hiebert:\
        :tc=common:\
        :suffixes=s,a,sa,asm,C,H,cpp,cxx,hxx,hpp,cc,c,h,y,S,inc:\
        :extractmethod:\
        :GTAGS=/usr/bin/ctags -I __acquires+ -I__releases+\
                --c-types=fdst --asm-types=fl -x %s | perl -ne '\
                if (/^operator \\S+\\s+function\\s/) { s/^operator //; }\
                ($name, $type, $no, $path, $line) = split(/[ \\t]+/, $_, 5);\
                printf(STDOUT "%-16s %4d %-16s %s", $name, $no, $path, $line);':\
        :GRTAGS=gtags-parser -dtr %s:\
        :GSYMS=gtags-parser -dts %s:

xemacs (emacsen)

global 付属の gtags.el を使用することで、マウスクリックで跳ぶことができるようになりますが、定義、参照、シンボルに関して明示的に跳べるようにするため、以下のように .xemacs/init.el (emacs なら .emacs) に設定してます。

(setq gtags-mode-hook
      '(lambda ()
         (if (not gtags-running-xemacs) nil
           (define-key gtags-mode-map 'button2 'gtags-find-tag)
           (define-key gtags-mode-map '(shift button2) 'gtags-find-rtag)
           (define-key gtags-mode-map '(control button2) 'gtags-find-symbol))
         (if gtags-running-xemacs nil
           (define-key gtags-mode-map [mouse-2] 'gtags-find-tag)
           (define-key gtags-mode-map [S-mouse-2] 'gtags-find-rtag)
           (define-key gtags-mode-map [C-down-mouse-2] 'gtags-find-symbol)
           (define-key gtags-mode-map [C-mouse-2] 'gtags-find-symbol))
         ))

こうすることで、真ん中ボタンクリックで実体へ、シフト押しながら真ん中ボタンで参照へ、コントロール+真ん中ボタンでシンボルへ跳べるようになります。
emacs 用の設定では [C-down-mouse-2] と [C-mouse-2] を設定していますが、実はよくわかってなくて、試行錯誤の結果こうなってます。

quilt

もともとは Andrew Morton が開発していた?バージョン管理ツールです。これの良い所は、複数の patch を適用したり、はずしたり、任意の patch を変更したりが簡単に出来る所です。BSC にある Cell 用の Linux kernel patch もこれで管理されています。特別な設定はしていません。

git

upstream の linus tree や -mm 等がこれで管理されています。ホントは upstream との比較を簡単にできるように quilt じゃなく、git (stgit) を使いたい所です。git-quiltimport というコマンドがあるので quilt から git への移行は簡単にできそうですが、、、後日やってみようかな、、

環境構築 (Momonga 編)

最初はお決まりの SDK (Toolchain) のインストールです。CBE の SDK (現在の最新は 1.1) は FC5 指定のようですが、個人的に使用しているのが Momonga なので、出来ればこれでも動くのかトライしてみます。インストールスクリプトを見ると freeglut という FC5 固有のパッケージを要求するようですが、まあ、Toolchain を使用するだけなら glibc のバージョンが同じ (v2.4 系列) なら動くでしょう、、実は SDK 用に買ったデスクトップ PC がまだ届いてないだけだったりするんですが、こっちが届いたら FC5  で環境構築します。

で、実際のインストールですが、ひたすら rpm -ivh するだけでインストールできます (とりあえずはコンパイル環境が整えばいいので、シミュレータ本体と sysroot image はインストールしていません)。

ppu 用 Toolchain のインストール

rpm -ivh ppu-binutils-3.2-4.i686.rpm \
         ppu-gcc-3.2-4.i686.rpm ppu-gcc-c++-3.2-4.i686.rpm \
         ppu-sysroot-3.2-4.noarch.rpm  ppu-sysroot64-3.2-4.noarch.rpm \
         ppu-toolchain-debuginfo-3.2-4.i686.rpm

spu 用 Toolchain のインストール

rpm -ivh spu-binutils-3.2-6.i686.rpm \
         spu-gcc-3.2-6.i686.rpm spu-gcc-c++-3.2-6.i686.rpm \
         spu-newlib-3.2-6.i686.rpm \
         spu-toolchain-debuginfo-3.2-6.i686.rpm

xlc Toolchain のインストール

rpm -ivh  xlc-cell-cmp-1.1-9.i386.rpm xlc-cell-lib-1.1-9.i386.rpm \
          xlcpp-cell-cmp-1.1-9.i386.rpm xlcpp-cell-lib-1.1-9.i386.rpm \
          cell-spu-timing-1.1-2.i686.rpm

サンプルソースのインストール

このパッケージは freeglut-devel という OpenGL 関連のパッケージを要求しますが、これがナンなのかは後で調べることにして --nodeps 指定でインストールします。
rpm -ivh --nodeps cell-sdk-lib-samples-1.1-10.noarch.rpm

簡単な動作確認

libspe-1.1.0 がコンパイルできるかどうかで確認しました。といっても展開して make するだけです。libspe は Toolchain の場所を絶対パスで指定しているので make するだけですが、実際は以下のように .bashrc 等にパスを設定しておきます。

export PATH="$PATH:/opt/sce/toolchain-3.2/ppu/bin/"
export PATH="$PATH:/opt/sce/toolchain-3.2/spu/bin/"
export PATH="$PATH:/opt/IBM/cell-sdk-1.1/bin/"
export PATH="$PATH:/opt/ibmcmp/xlc/1.0/bin/"

ちなみに、

glibc-2.3 だと、spu-gdb 以外はインストール (rpm -ivh) はできますが、spu-gcc 実行時に glibc のバージョンで怒られますのであきらめましょう。

HOME |  企業情報 |  事業内容 |  採用情報 |  社内活動 |  お問合せ |  サイトマップ
.
Copyright(c)2006 Sijam.Inc all rights Reserved
システム開発 株式会社シジャム