スポンサーサイト [Edit]
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。


スポンサー広告 | 【--------(--) --:--:--】 | Trackback(-) | Comments(-)
入門編lesson10-13~今日から始めるCELLプログラミング [Edit]
lesson10
SPEプログラミングで必要となる3種類のデバッギングについて考察している.詳細はHPをみよう.実行結果は

result=524800
open spe program
Create and Start spe program
0:flag=1
1:flag=1
start:513 end:1024 sum=393472
dma_data.flag=1
dma_data.flag=2
start:1 end:512 sum=131328
dma_data.flag=1
dma_data.flag=2
0:flag=2
1:flag=2
Waiting spe0 program is finish...done
Relese spe0 program
Waiting spe1 program is finish...done
Relese spe1 program
SPE result : 524800 (PPE result : 524800)



lesson11
PPEの処理時間を計測するプログラミング.

result=524800
open spe program
Create and Start spe program
0:flag=1
1:flag=1
start:1 end:512 sum=131328
dma_data.flag=1
dma_data.flag=2
0:flag=2
start:513 end:1024 sum=393472
dma_data.flag=1
dma_data.flag=2
1:flag=2
Waiting spe0 program is finish...done
Relese spe0 program
Waiting spe1 program is finish...done
Relese spe1 program
SPE result : 524800 (PPE result : 524800)
PPE time: 0.014000, SPE time: 5.486000

使っているPCはP4 3.8GHzをHT動作でVMWare.SPEの処理時間がべらぼうに遅いのは,あくまでエミュレータ環境だから,らしい.

lesson12
SPE処理時間をSPE上で計測する方法.デフォルトのspe_main.cだと,時間測定に利用する1周期の時間が2GHzの設定になっているので修正する.1周期の値は

[root@(none) ~]# dmesg | grep decrementer
time_init: decrementer frequency = 25.000000 MHz

で知ることができる.つまり25MHz.よってspe_main.cの65行目

/* 処理時間を出力 */
printf("SPE time by SPU Decrementer: %f\n", profile / 2000000000.0f * 1000.0f);


printf("SPE time by SPU Decrementer: %f\n", profile / 25000000.0f * 1000.0f);

に変更する.実行結果は

result=524800
Open spe program
Create and Start spe program
0:flag=1
1:flag=1
SPE time by SPU Decrementer: 0.001440
start:1 end:512 sum=131328
dma_data.flag=1
dma_data.flag=2
0:flag=2
SPE time by SPU Decrementer: 0.001440
start:513 end:1024 sum=393472
dma_data.flag=1
dma_data.flag=2
1:flag=2
Waiting spe0 program is finish...done
Relese spe0 program
Waiting spe1 program is finish...done
Relese spe1 program
SPE result : 524800 (PPE result : 524800)
PPE time: 0.013000, SPE time: 5.599000

lesson11よりもSPEの処理時間が早くなったのは,SPE内で時間を測定しているからだろう.

lesson13
最後.lesson12のSPEプログラムをSIMD演算に変更し,パフォーマンスを高める.

result=524800
Open spe program
Create and Start spe program
0:flag=1
1:flag=1
SPE time by SPU Decrementer: 0.000400
start:513 end:1024 sum=393472
dma_data.flag=1
dma_data.flag=2
SPE time by SPU Decrementer: 0.000400
start:1 end:512 sum=131328
dma_data.flag=1
dma_data.flag=2
0:flag=2
1:flag=2
Waiting spe0 program is finish...done
Relese spe0 program
Waiting spe1 program is finish...done
Relese spe1 program
SPE result : 524800 (PPE result : 524800)
PPE time: 0.014000, SPE time: 1.601000

結果をlesson12と比べると,5.599/1.601=3.497と約3.5倍高速化できたことがわかる.以上,すべての入門編lessonが無事終了.

スポンサーサイト
[プログラム]CELL | 【2007-05-14(Mon) 20:17:55】 | Trackback:(0) | Comments:(0)
入門編lesson7-9~今日から始めるCELLプログラミング [Edit]
lesson7
簡単な PPE と SPE との同期処理.実行すると

result=524800
Open spe program
Create and Start spe program
flag=1
flag=2
Waiting spe program is finish...done
Relese spe program

というメッセージが出力される.

lesson8
SPE プログラムの演算結果を PPE 側へ返す処理を行う.実行結果は

result=524800
Open spe program
Create and Start spe program
flag=1
flag=2
Waiting spe program is finish...done
Relese spe program
SPE result : 524800 (PPE result : 524800)

となり,無事成功しているようだ.

lesson9
複数のSPEを起動して並列処理.いよいよおもしろくなってきた.実行すると並列個数分の結果がでてくる.

result=524800
Open spe program
Create and Start spe program
0:flag=1
1:flag=1
2:flag=1
3:flag=1
4:flag=1
5:flag=1
6:flag=1
7:flag=1
0:flag=2
1:flag=2
2:flag=2
3:flag=2
4:flag=2
5:flag=2
6:flag=2
7:flag=2
Waiting spe0 program is finish...done
Relese spe0 program
Waiting spe1 program is finish...done
Relese spe1 program
Waiting spe2 program is finish...done
Relese spe2 program
Waiting spe3 program is finish...done
Relese spe3 program
Waiting spe4 program is finish...done
Relese spe4 program
Waiting spe5 program is finish...done
Relese spe5 program
Waiting spe6 program is finish...done
Relese spe6 program
Waiting spe7 program is finish...done
Relese spe7 program
SPE result : 524800 (PPE result : 524800)

長ったらしいが,SPEが8個あるので仕方がない.


[プログラム]CELL | 【2007-05-01(Tue) 20:15:20】 | Trackback:(0) | Comments:(0)
入門編lesson3-6~今日から始めるCELLプログラミング [Edit]
Fixstarsの入門編チュートリアル

http://cell.fixstars.com/pukiwiki/index.php?Cell%A5%D7%A5%ED%A5%B0%A5%E9%A5%DF%A5%F3%A5%B0%A5%C1%A5%E5%A1%BC%A5%C8%A5%EA%A5%A2%A5%EB%C6%FE%CC%E7%CA%D4

のlesson3からlesson6まで実行してみる.

lesson3
SPEを利用するプログラム,というかコンパイルするプログラム.実行結果はlesson2と同じ.spe_mainはprintf関数が記述されてないし,そもそもppe_main.cで読み込まれてないので何もしない.

lesson4
PPEからSPEを読み出すプログラム.結果は

result=524800
Open spe program
Create and Start spe program
Waiting spe program is finish...done
Relese spe program

という表示が現れる.うまく実行できているようだ.

lesson5
メインメモリから SPE 内のローカルストアへのデータ転送(DMA 転送)についてのプログラム.lesson4と同じ結果が出力される.

lesson6
lesson5の逆でSPE 内の ローカルストアからメインメモリへのデータ転送を行う.実行すると,

result=524800
Open spe program
flag=1
Create and Start spe program
Waiting spe program is finish...done
Relese spe program
flag=2

というメッセージが出力される.


[プログラム]CELL | 【2007-04-25(Wed) 20:10:15】 | Trackback:(0) | Comments:(0)
入門編lesson2~今日から始めるCELLプログラミング [Edit]
Fixstarsのサンプルプログラムを実行してみます.詳しいことは本家サイトを参考にしてください.まずは入門編から.その前に共通事項であるプログラムのコンパイル方法と実行方法を説明する.lesson3を実行する場合を例として挙げる.Fixstarsよりlesson3.tar.gzをダウンロードして~/cell_program/に保存し,展開する.

$ cd ~/cell_program
$ gtar –xzf lesson3.tar.gz
$ cd lesson3

SDK2.0に対応させるため,~/cell_program/lesson3/src/ppe/MakefileのIBMBASE, SCEBASE, CCを変更する.

IBMBASE = /opt/ibm/cell-sdk/prototype/sysroot/usr
SCEBASE = /opt/cell/toolchain-3.3
CC = $(SCEBASE)/bin/ppu-gcc

~/cell_program/lesson3/src/speにもMakefileがあるので,SCEBASE, CC, CCFLAGSを変更する(lesson2のみこのファイルは無い).

SCEBASE = /opt/cell/toolchain-3.3
CC = $(SCEBASE)/bin/spu-gcc
CCFLAGS = -O3 –I${SCEBASE}/lib/gcc/spu/4.1.1/include

lesson3ディレクトリにて,make;make installを実行.

$ make;make install

lesson3/binディレクトリに実行ファイル”ppe_main”と”spe_main”がインストールされる.

CELLシミュレータを立ち上げ,コンソールにて実行ファイルppe_mainを読み込む.

[root@(none)]# callthru source /home/ユーザ名/cell_program/lesson3/bin/ppe_main > ppe_main
[root@(none)]# callthru source /home/ユーザ名/cell_program/lesson3/bin/spe_main > spe_main

実行パーミッションを与え,実行する.

[root@(none)]# chmod +x ppe_main spe_main
[root@(none)]# ./ppe_main

以上がコンパイルと実行方法.プログラム内容によって実行結果がコンソールに表示される.

lesson2
1~1024までの総和をCELLのPPEを使って求めるプログラム.文法的にはふつうのCプログラム.若干main関数の引数が違うぐらい.実行すると

[root@(none)]# ./ppe_main
result=524800

確かに1~1024の総和が求まった(エクセルとかで確認してみよう).


[プログラム]CELL | 【2007-04-24(Tue) 21:02:39】 | Trackback:(0) | Comments:(0)
Hello World~今日から始めるCELLプログラミング(仮題) [Edit]
前回までの内容でx86パソコン&FC5 LinuxによるCELLプログラミング環境は整いました.今回から実際にCELLプログラミングを開始します.当面,Fixstarsのホームページに記載してあるプログラムを実行していきます.

最初のプログラムといえば"Hello World".Fixstarsのサンプルが

http://cell.fixstars.com/pukiwiki/index.php?PPE%C8%C7%20Hello%20World

に置いてあるので,ページの一番下hello_ppu.tar.gzをダウンロードし,ホームの下に"cell_program"ディレクトリを作ってそこに保存する(以後,サンプルの保存場所はここ).展開してできた"hello_ppu"フォルダに移動し,binディレクトリを作成しておく(こうしないとmake installで実行ファイルがうまくbin/に作成されなかった).

$ mkdir bin

さて,Fixstarsに掲載されているプログラムはCELLSDK1.1を対象にしているので,Makefileを修正しなくてはならない.src/ppu/Makefileの該当箇所を以下のように編集.

IBMBASE = /opt/ibm/cell-sdk/prototype/sysroot/usr
SCEBASE = /opt/cell/toolchain-3.3
CC = $(SCEBASE)/bin/ppu-gcc

そしたらhello_ppu直下で

$ make;make_install

する.特にErrorがでなければOK.bin/に"ppu_main"という実行ファイルが作成される.

コンパイルした実行ファイルはCellのPPE/SPEを利用することが前提なので,x86のFC5上では実行できない.そこでCELLシミュレータを立ち上げ,CELL環境をエミュレートする.rootじゃないと駄目なので注意.

# cd /opt/ibm/systemsim-cell/run/cell/linux
# ../run_gui

下図に示すセルシミュレータのGUIが出現する.
cellsdk1.png
このままでは駄目で,動かすにはGUIの"GO"ボタンを押さなくてはいけない.するとシミュレータ上でFedora Coreが立ち上がり,仮想Cell計算機がエミュレートされる,という寸法(だと思う).無事立ち上がったら上の画面下にある"mysim"コンソールに

Welcome to Fedora Core
Press ‘I’ to enter interactive startup.
INIT: Entering runlevel: 2
[root@(none) ~]#

が現れる."Press ‘I’"と出てもIキーを押す必要はないので注意.

ここで補足.ふつうに"GO"を押すと起動にめっちゃ時間がかかるので,その前に"Fast Mode"をクリックしておけば,デバッグなし起動になって速く起動する.

ではGOボタンを押してエミュレータを起動し,先ほどコンパイルしたファイルをエミュレータで実行する.エミュレータとFC5のディレクトリは同期していないので,エミュレータにファイルを読み込まなくてはいけない.CELLコンソールにて,

[root(none) ~]# callthru source /home/ユーザ名/cell_program/hello_ppu/bin/ppu_main > ppu_main

を実行するとファイルが転送される.後は実行するのみ.ただし,実行パーミッションがないと怒られるので,chmod +xしておくこと.

[root(none) ~]# chmod +x ./ppu_main
[root(none) ~]# ./ppu_main
Hello World!

無事"Hello World!"が表示された!.

ここでもいっちょ補足.Cellシミュレータは実際にプログラムを動作させるとき以外は起動している必要がない.そこで一度立ち上げたら"Stop"ボタンを押して一時停止しておき,元のFedora上でプログラムの作成(編集)を行い,コンパイルし,完成したらエミュレータで読み込みGOボタン押して転送,実行,という流れにすれば良い.一時停止中は負荷がないので,こうするのが基本.

以上が簡単なCELLプログラミング&シミュレータの使い方.一度シミュレータを落とすとcallthruでとってきたファイルは消えてしまうので注意.


[プログラム]CELL | 【2007-04-23(Mon) 18:41:55】 | Trackback:(0) | Comments:(0)
CellSDKインストール~今日から始めるCELLプログラミング(仮題) [Edit]
Cellプログラムを作成したり,Cell環境をエミュレートするソフトを利用するためのSDKはIBMから提供されている.サイトは

http://www.alphaworks.ibm.com/tech/cellsw?open&S_TACT=105AGX16&S_CMP=DWPA

最新バージョンは2.1だけど,これはFedora Core 6ベースになっている.PS3はFC5じゃないとうまくいかないようなので,2.0をダウンロードしよう.無料のアカウント登録が必要.以下,インストール方法について.

CellSDK2.0だけでは必要なパッケージが揃っていない.インストール時にダウンロードできるようにはなっているのだが,しょっちゅう接続がとぎれてうまくいかない.よって次のサイト

http://www.bsc.es/projects/deepcomputing/linuxoncell/cellsimulator/sdk2.0/

にすべてのファイルがあるので,ダウンロードして/tmp/cellsdk-2.0/に保存しておこう.こうすればSDKインストール時にこれらのファイルを参照してインストールしてくれる.さらに,tkとfreeglut-develが事前に必要なので,

# yum install tk
# yum install freeglut-devel

でインストールしておく.

ではダウンロードしたCellSDK20.isoをマウントし,インストール実行する.

# mkdir -p /mnt/cellsdk
# mount -t iso9660 -r -o loop ./CellSDK20.iso /mnt/cellsdk
# cd /mnt/cellsdk/software
# ./cellsdk install

ダウンロードファイルが正常だと

Cell SDK Install complete.
You can now build the samples by executing ‘./cellsdk build [--gcc| --xlc]”.

と出力される.言われるがままサンプルをビルドする.結構時間がかかる(5分ぐらい?).

#./cellsdk build

以上でインストール作業は終わり.しかし,一部パッケージにバグがあるらしく,以下を実行して解決する.下記のサイト

http://cell.fixstars.com/ps3linux/download/cell-linux-20061208/CELL-Linux-CL_20061208-ADDON/spu/

からファイルをすべてダウンロードして,適当な位置(ここでは/root/bugfix)に保存しrootユーザで以下を実行.

# rpm -ivh --force --nodeps --noscripts --ignorearch --root /opt/ibm/cell-sdk/prototype/sysroot /root/bugfix/*.ppc.rpm
# rpm -ivh --force --nodeps --noscripts --ignorearch --root /opt/ibm/cell-sdk/prototype/sysroot /root/bugfix/*.ppc64.rpm

無事終了したら,ダウンロードしたファイルはいらないので削除.マウントしたISOイメージを解放し,ファイルは削除しよう.

# umount /mnt/cellsdk



[プログラム]CELL | 【2007-04-20(Fri) 19:48:03】 | Trackback:(0) | Comments:(0)
VMWare PlayerでVMware Toolsインストール~今日から始めるCELLプログラミング(仮題) [Edit] [Edit]
VMWareをより使いやすいものにするため,VMWare Toolsなるものをインストールする.これを入れると解像度を変更したり,マウスがホストとゲストの間をスムーズに動くようになる.

まずは

http://www.vmware.com/ja/download/server/

からVMWare ServerのLinux版(VMware-server-1.0.2-39867.tar)をダウンロードする.登録すればフリー.展開すると,vmware-server-distrib\lib\isoimagesにlinux.isoファイルがある.これをfc5.vmdkを置いているフォルダにコピーしておく.コピーしたら展開したフォルダはいらないので削除してもOK.linux.isoをマウントするようにfc5.vmxを書き換える.

ide1:0.fileName = "linux.iso"

fc5.vmxをダブルクリックして起動する.fc5にログインすると,デスクトップにCDイメージがあり,マウントされてるのがわかる.
fc5@vmware28.png
さて,このlinux.isoの中にVMWare Toolsインストールパッケージがあるのだが,その前にFC5へkernel-develパッケージをインストールしなくてはならない.suにて

# yum install kernel-devel

を実行しよう.そしたら/root直下でも良いので以下を実行.

# cd /root
# cp /media/VMware Tools/VMwareTools-1.0.2-39867.tar.gz .
# gtar –xzf VMwareTools-1.0.2-39867.tar.gz
# cd vmware-tools-distrib
# ./vmware-install.pl

インストールが始まる.すべてデフォルトでOKと思われるので,リターンを押していけば問題ないはず.ただ,途中でShared Foldersの設定でエラーがでたどうのこうのと言われるが,特に関係ないので無視してエンター.最後まで進んでいくと,
fc5@vmware30.png
の画面が現れる.お好きな画面サイズを選びましょう.無事終了すると,
fc5@vmware31.png
の画面になるので,再起動.起動後,画面サイズの拡大とマウスの自由移動が可能になる.

これでlinux.isoをマウントしておく必要はないので,いったんFC5をシャットダウンし,fc5.vmxのlinux.isoに関する記述を削除し,代わりに

ide1:0.fileName = "auto detect"
ide1:0.deviceType = "cdrom-raw"

のように変更しておこう.


[プログラム]CELL | 【2007-04-18(Wed) 20:32:00】 | Trackback:(0) | Comments:(0)
次のページ
FC2カウンター
現在の閲覧者数:
リンク
RSSフィード
ブログ内検索
フリーエリア

カテゴリー
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。