町野/日誌
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[町野]]
*2009/1/22 [#w45f1765]
健康診断。肝臓がフォアグラで、虫歯が一本(汗
三次元復元のプログラムに手をつけてみたが、いろいろと思うところが・・・。
頭が痛い
*2009/1/21 [#f87a906e]
研究室が寒い・・・(汗)
暖かいSSBで論文を書くことにした。
明日は健康診断受けてこよう(汗
俺たちは機械以下なのか・・・
It is not 19 degrees C in the rooms of my lab.
Your management of facilities violates the
goals set by the prefecture (namely said 19
degrees Celcius).
Freezing people cannot think and be
creative.!!! Freezing people include our
precious customers (including my students in
my lab who sit with me in coats in the lab for
working sessions). Not to mention that students
sit in coats+blankets in my classes.
The computers in ISTC's data center have a well-
tempered room. I conclude that professors and
students are treated worse than machines in this
institution.
Your management is an utter failure.
*2009/1/20 [#db99bd73]
ispellとqqでスペルチェックと文法チェック。この段階でとりあえず先生に出す。
週末は%%牛タンを食べに%%[[Open Source Conference:http://www.ospn.jp/osc2009-sendai/]]に参加するために仙台へ。
*2009/1/18 [#z70f0623]
追加実装をしようと久々にプログラムを動かそうとしたら・・・、ライブラリがないと言われ実行出来ない(大汗 どーしよ・・・。
とりあえずの手段として、LD_LIBRARY_PATHを設定することにより解決。なんでやろ。
*2009/1/17 [#d389e828]
金曜はまた発熱。あぁ・・・。
後輩に「隠れた優良企業を教えてくれ」といわれた。もし知ってたら俺が行きたいわ(泣)
大体全体が見渡せてきた
#ref(thesis0117.pdf)
*2009/1/14 [#q409d17f]
病院にいこうとしたら、スリップで車が止まらず、赤信号で交差点に突っ込む(汗)
大和田、児島、町野と風邪でダウンしてしまい、周りを囲まれている前田君が危ない・・・。
インフルエンザだと思ったら風邪らしいし、熱も微熱程度まで下がったので大学にきてみた。
*2009/1/13 [#r427cb6e]
韓国料理の店にいく。ラーメンはインスタントらしい。なんじゃそりゃ。まあ、事前に自己申告しただけ許す。石焼ビビンバはそこそこうまい。Hospitalityの点から、もう一度いくかどうかと言われると・・・。
風邪で頭がくらくらする。
2DCDPをもっと速くできないものかといじったけど、遅くなるだけだった・・・
*2009/1/12 [#ge604d5c]
因子分解法の定式化と説明が、もらった論文を読んでも、どう書けばよいのかがわからず・・・。
しゃっくりがとまらない。死にそう。
何気に[[ソースカツ丼の会:http://aizu-katudon.com/index.html]]に学食が加盟しているのを発見。
気になる店 [[韓国料理の店:http://gourmet.yahoo.co.jp/0007812981/0011829733/]] [[米熊:http://gourmet.yahoo.co.jp/0003324218/]] [[山葵:http://the-timely.com/yamaaoi/]]
*2009/1/11 [#j3d2aa58]
病み上がりの矢口さんを捕まえて、いろいろほじくりだす。
load命令とshuffleは、一個前のループで二命令同時発行で隠蔽し、(1)、(3)、(5)は一命令で実行。問題は(2)、(4)、(6)だが、loadで1命令、mag01の値を決定するのに3命令、yを右シフトするのに1命令、mt_[kk+M]をロードしてshuffleするのに3命令、xorを二回とって2命令、storeで1命令。ここの部分をもっと簡略化できればいけそうなんだけど・・・。
for(i = 0; i < num_rand; i++) {
static unsigned int mag01[2]={0x0UL, MATRIX_A};
if (mti >= N) {
int kk;
for (kk=0;kk<N-M;kk++) {
y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK); // (1)
mt[kk] = mt[kk+M] ^ (y >> 1) ^ mag01[y & 0x1UL]; // (2)
}
for (;kk<N-1;kk++) {
y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK); // (3)
mt[kk] = mt[kk+(M-N)] ^ (y >> 1) ^ mag01[y & 0x1UL]; // (4)
}
y = (mt[N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK); // (5)
mt[N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & 0x1UL]; // (6)
mti = 0;
}
y = mt[mti++];
y ^= (y >> 11);
y ^= (y << 7) & 0x9d2c5680UL;
y ^= (y << 15) & 0xefc60000UL;
y ^= (y >> 18);
r = r + y;
}
*2009/1/9 [#i0a0564d]
SPUの命令セットを見ていると、ビットごとのセレクト命令であるspu_sel(A,B,C)が、(A and ~C) or (B and C)というMUXであるということが分かり、これを何とかうまく使えないかと朝方までA xor B and CやA xor B xor Cをいろいろいじくりまわしたが、うまくいかず…。まだ凡人の域にいるようだ。
このお店が気になる
http://r.tabelog.com/fukushima/A0705/A070501/7001825/
最初の数個はおいしかったけど、だんだん飽きました・・・。
*2009/1/8 [#p6949977]
30倍でとりあえず放置しておこうと思ったが、2chを見ていると50倍越えが4人ぐらい出てきたので、あせって再開。とりあえず39.8倍ぐらいまでになった。IPCがぎりぎりなので、ビット演算を簡略化しないと超えられそうにない。
課題が発表される前からメルセンヌツイスタをCellで実装している、%%変態%%すごい人の日記。50倍一番乗りの人
http://tripper.kousaku.in/
*2009/1/7 [#f29a0ca8]
おとなしく論文を書き進める。
夕方、Hack the Cellの課題の変更があり、コンパイラのバージョンが変わったので試したところ、元のソースが3割以上遅くなっているので、新しい基準だと28〜30倍程度の高速化になってしまったが、最適化したソースも5%〜10%弱ぐらい遅くなっているので、原因をプロファイル中。
実行時間は一番最初のループがほぼすべて。その中にある、1番目と3番目のループの実行時間が5割増し、4番目のループが1割増になっている模様。
コンパイラは変えてはいけないけど、前のコンパイラで吐いたアセンブリを今のコンパイラでバイナリ作るってのでもいいのか?
あー論文かかないとなー。
*2009/1/5 [#i38f8ca6]
単一SPEで23〜24倍を達成。ループの数は固定なので、ループの比較や分岐命令を消すことができる状態。
アルゴリズム的に高速化を目指す。
*2009/1/1 [#ta35daa7]
とりあえず15倍達成。20倍を目指す。
20倍達成。30倍を目指す。
*2008/12/30 [#tacf1081]
Hack the Cellの課題の検討。
単一のSPEで10倍以上速く出来ないと入賞の最低ラインを満たさないので、
まずはそれを目標に。分岐の削除で1.8倍程度上がったので、ぼちぼちSIMD化していく。
論文もかかないとなー。
ぱっと見てすぐSIMD出来るところをやった。ループ間の依存関係はないけど、命令間の依存関係があるので、ループアンロールしてデータ依存ストールを埋める。それだけでも1割以上速くなるから面白い。
全体の6〜7割をSIMD化で、全体の実行結果は現在4.5〜4.8倍の高速化。このままだと10倍は厳しいかも。
*2008/12/27 [#c2616b93]
長崎は意外と寒いです。
スライド
#ref(fcst3.ppt)
ホテルで発表の練習中。一人で英語でぶつぶつつぶやくのは不気味だ(汗)
欠席者がいたので、心の準備がなく発表へ。とりあえずしゅうりょう。
Hack the Cellの課題も発表
http://cell.fixstars.com/challenge/challenge.html
*2008/12/26 [#xf0e9e98]
雪のせいで、磐越西線が遅れ、おのずと新幹線にも一本後のものに。
Sunのオフィスでスライドの手直し中
*2008/12/25 [#f6ad2a04]
今朝になって発表時間・日程が変更。ぐだぐだ感満載。
明日旅立ちます。良いお年を。
*2008/12/21 [#dfc06b5a]
結局、昼11時までにループ間の依存関係を解消しSIMD化。現状、2.5〜3倍ぐらい高速化。元々並列化されているので、普通にやる最適化ならこんなもんかなと。
去年の結果を見ていると、Cellが得意な行列演算だったせいもあるけど、元ソースの100倍以上(コア数はどちらも同じ)の成果が出ているので、根本的なアルゴリズムから見直さないと、入賞はおろか、決勝進出もきついと思われる。
*2008/12/20 [#h2939767]
朝四時まで飲み会
あの醜態では、会社の未来が危ぶまれる・・・
論文や発表の準備などをやろうとするが、Speed Challengeの方が気になり、結局ずっとそれにつきっきり。ループ間の依存関係を見落としを発見し、それをどううまくやるか。
*2008/12/19 [#m30053a9]
午前一時半より、発表の練習の練習。英語を使う機会がなくなったせいか、前よりしゃべったり聞いたりするのが劣ってきた(汗
こんな夜遅くにお付き合いいただいた、おばらくん、まつもとくん、さとうさん、ありがとう
Speed ChallengeはDPのコストを求めるSIMDではまりまくり。腰をすえてやってみたい。。。
*2008/12/18 [#q648abfd]
Cell Speed Challenge 2009の課題の作戦を練るつもりが、気が付いたら実装を始めていた(わらい)
並列化はすでにされているので、主にSPEのチューニング。とりあえず、分岐をばすばす削って、1.2〜1.4倍の高速化。
ベクトル化もなんとなく出来そうな感じ。後はダブルバッファーでデータ転送の時間を隠蔽。動的分岐予測の出番はなさげなところが残念。
もし本気でかかるなら、並列化の部分から手を入れた方がよさげかもしれない。
学生じゃないと出場出来ないので、影武者を探すか・・・。
*2008/12/17 [#g7c9233d]
昨日、今日とCellの勉強会と演習
実装・論文からは遠ざかり、FCSTのスライド作り
そのうちやりたいこと
・2DCDPをUltraSPARC T2で走らせる
・6年ぶりにPCを購入。Core i7 920がほしい
・禁煙を解禁したい・・・
*2008/12/11 [#t3c1e2f4]
勇者二名現る!
喫煙者連中からの誘惑が多すぎる(汗
*2008/12/10 [#x5eed7db]
FCSTのスライド作りとカンペ作成
禁煙は明日から
*2008/12/9 [#i1c1557f]
禁煙・禁(節)酒・節食の刑が言い渡される
*2008/12/6 [#i0bf1f08]
焼肉食べてたっぷり寝たせいか、体調がすごぶる良くなった。
お昼に大学に来たが、研究室に誰もいなくてびっくり。
研究室で鳥インフルエンザが蔓延か・・・
http://jp.youtube.com/watch?v=NrHgWX_hVBM
*2008/12/3 [#bf47cc55]
文章書きが大嫌いなので、先に論文を書いてしまおうとぼちぼち書いているところ。
なんとなくノリで始めた禁煙生活。24時間経って、そろそろ禁断症状が出てきた(汗)禁煙するために、しばらく家にでも引きこもるか・・・。
*2008/11/26 [#q8ef5134]
11/25 黒田先生と中間発表。修論の表紙を作る
11/26 修論のサンプルファイルをいろいろいじくりまわす。書けるところから書こうと、HPC(CMP, GPGPU, OS, コンパイラ, 並列言語など)についてのSurveyとCellの説明
11/27 13:10 気が付いたら今。ねむい。
*2008/11/21 [#j42b7d0e]
今週 -> 中間発表のまとめ
腰の爆弾が・・・
*2008/11/14 [#i7a61474]
factorizationのホットスポットを探し、PPE上で最適化
処理時間の70%ぐらいしめていた箇所は
元の時間 0.062
転置行列を作らずに計算 0.027
OpenCVを使わずに計算 0.0095
それをベクトル化 0.0015
まで速くなった。
全体的に、そのままデータをシーケンシャルにアクセスして処理出来るのに、
わざわざ転置して、ランダムアクセスをしていたりするので、
その辺を変更するだけでも十分速くなった。
0.09秒かかっていた計算時間が、今は0.004秒ぐらいに。
精度的には、double -> floatで誤差が出たのに加え、
ベクトル処理において多少誤差が出ている模様だが、確認したところ、小数点第三位以下の誤差で、問題ないだろうとのこと。
*2008/11/13 [#acc43215]
double->floatへ置き換え。これだけで10%ぐらい速くなった。
PPEの上で一部ベクトル化。元の状態から20%アップ。
*2008/11/12 [#c6753ef3]
OpenCVがようわからん。
ねもとくんが奨学金+サンフランシスコにものすごーく興味を持っていた。
*2008/11/11 [#o7a43d77]
奨学金がほしい人はこれで
http://cell.fixstars.com/challenge/index.html
*2008/11/10 [#m3d0b3ac]
OpenCVを利用していない版のソースをもらう。データ単位で分割して並列化は難しそうなので、さて、どうやって実装するか・・・。
*2008/11/9 [#j49ecc2d]
PS3のアップデート、Cell SDKのアップグレード
OpenCVからどう置き換えるか検討
*2008/11/8 [#i141cb66]
2DCDPとFactorizationをつなげる処理を検討
2DCDPはPPEのプログラムが64ビットで動くことが前提で作られているのだが、
Factorizationから呼び出すCell用OpenCVは32ビットで作られているため、Factorizationは32ビットでコンパイルしなければならず、単純にはいかなさそう。
Cell用OpenCVはうまく動きそうにないので、OpenCVを使わない実装で64ビットに統一した方がよさそうな気もしてきた。
*2008/11/7 [#q6e5a0ce]
井関君とFactorizationの中身でいろいろと確認
Cell用のOpenCVがどうもPPEでしか動いていないので、MLに質問のメールを投げようとしたら、廊下でたまたまFixstarsの人がいたので質問
矢口さんの勉強会に参加
*2008/11/5 [#p734e425]
矢口さんから画像をもらい、3D復元用のデータを作成
早速プログラムにかけてみるが、ちゃんと結果が出ているのかどうかが怪しげな感じ。確認中
*2008/11/4 [#l22044d2]
対応点のファイルを出力部分を作る。画像出力はちょっと難しそうなのでとりあえずおいておく。
FactorizationをCellで動かそうと、OpenCVにCell用のパッチを当てて実行するが、どうもSPEが使われていない感じ。
*2008/10/31 [#b09808d5]
現状のCell版2DCDPから、3D復元に必要な情報が抜き出せそうな感じ。
しかし、Cell版2DCDPではマッチング後の画像の出力がされていないため、今の状態でちゃんと出来ているのか微妙。
とりあえず、
1. 画像を出力させる
2. 3D復元に必要な情報を抜き出して、実際にやらせる
*2008/10/29 [#x9b3902d]
doubleからfloatへの変更は、精度の面でも問題なし
PS3での2DCDPにFactorizationをつなげる件については、2DCDPの対応点を出力させればいいとのことだが、未実装なので難儀しそう。(元のソースではそれらしきものを実装しているが、それをCellに対して実装する必要性あり)
Backtraceの後、単調連続性を確保する処理をやらないと精度が上がらないが、PS3版では未実装。それをやったとしても、精度の問題できちんと3D復元出来るかは微妙とのこと。
対応点の数は、今のサンプルだと7005で、あちらが行っている実験の中でも平均的。多くても1万ぐらいとのこと。
*2008/10/27 [#r74dc061]
24日からの記録
井関君に聞いたけどなかなか返事がもらえなかったので、最新バージョンの2DCDPのソースを読んだり、SIMD周辺をやってみた。
26日は体調不良
やっと井関君と連絡がつき、3D復元のプログラムを実行することができた。
学会の飛行機予約。年末年始でFull Fareしかなく、高い。
3D復元は、データ型がdoubleなんだけど、floatに変えられるのだろうか。。。確認中
*2008/10/23 [#w20aa8aa]
校正から戻ってきた原稿の編集。
Camera Readyの締切と同じぐらいに出したのに、Camera Readyの締切自体が伸びに伸びて間に合ってしまうという逆転劇
*2008/10/22 [#d1f4dd02]
今までの記録
2DCDPをベクトル演算しやすいようにデータの並びを変更
とりあえずそれは置いておいて、3D復元の方にシフト
OpenCVをビルド。いろいろと手間取ったがOpenMPで並列化。コンパイラの自動並列化も結構効いたみたい
Factorizationのビルド。いざためそうと思ったが、もらったファイルの中にテスト用のデータが入っていないことに気づく。
データ入手。早速動かしてみるも、Segmentation Fault
井関君にいろいろ質問して、返答待ち
*2008/10/17 [#x3dad00f]
2DCDPのlocal distanceを求める部分をいじくりまわす。
ループの入れ替えや、一部ベクトル化により、1.00秒から0.85秒程度に短縮。
その他いろいろ難しい問題あり。
とりあえず、よくわからないということはよくわかった。
*2008/10/16 [#ue687b5f]
xmmintrin.hなどで、アセンブラとの一対一対応しているヘッダファイルがあるらしいのだが、アライメントの関係なのか、gccでは正常に動作せず。
インテルコンパイラのお試し版を試してみる。
昔、Sedukhin先生がSSEを使っていろいろやっていたので聞いたところ、インテルコンパイラがいいらしい。
いろいろすんなりとはいかなかったが、インテルコンパイラのインストール完了。BLASのコンパイルが出来ないものの、2DCDPの方をやったら7秒ぐらいと、1秒短縮。
SSEを使って、簡単なプログラムを二つ作ってみた。一つは動いたけど、もう一つは思った動作をしてくれなかった。。。
*2008/10/14 [#y32f765c]
gccでSSEって、どうやって使えばええんだろ?という調査
*2008/10/9 [#e3016655]
短期留学生Dukeを出迎え
ACMもOKぽいそうです。
ここ数日、頭痛にめまい、腹痛にはじまり、肩こり腰痛、すごぶる体調が悪い・・・
*2008/10/8 [#i9af781a]
向こう1,2週間の目標
・ボトルネックになっている箇所とその原因の調査
・SSEの練習がてら、プログラムをちょっといじる
*2008/10/4 [#t102f63c]
Oprofileを入れてみる。ちょっと苦戦
動かして、とりあえず「実行された分岐命令」と「実行された分岐の分岐予測が外れたもの」を測定。500命令おきにカウント
CPU: AMD64 processors, speed 2611.97 MHz (estimated)
Counted RETIRED_BRANCH_INSTRUCTIONS events (Retired branches (conditional, uncon
ditional, exceptions, interrupts)) with a unit mask of 0x00 (No unit mask) count 500
Counted RETIRED_MISPREDICTED_BRANCH_INSTRUCTIONS events (Retired Mispredicted Br
anch Instructions) with a unit mask of 0x00 (No unit mask) count 500
samples % samples % symbol name
590749 83.7145 30463 94.2310 accumulation
72707 10.3032 1098 3.3964 nextcdp
20585 2.9171 557 1.7230 initBuffer
18861 2.6728 139 0.4300 cblas_snrm2
2494 0.3534 16 0.0495 InitBmp
248 0.0351 1 0.0031 ATL_snrm2_xp0yp0aXbX
23 0.0033 0 0 ReadBmp
4 5.7e-04 54 0.1670 ATL_snrm2
続いてデータキャッシュのアクセス数とミス
CPU: AMD64 processors, speed 2611.97 MHz (estimated)
Counted DATA_CACHE_ACCESSES events (Data cache accesses) with a unit mask of 0x00 (No unit mask) count 500
Counted DATA_CACHE_MISSES events (Data cache misses) with a unit mask of 0x00 (No unit mask) count 500
samples % samples % symbol name
639733 80.4728 6674 76.5191 accumulation
57388 7.2189 166 1.9032 cblas_snrm2
52717 6.6313 417 4.7810 nextcdp
39372 4.9527 1377 15.7877 initBuffer
3710 0.4667 63 0.7223 InitBmp
1144 0.1439 14 0.1605 ATL_snrm2
515 0.0648 5 0.0573 ATL_snrm2_xp0yp0aXbX
387 0.0487 6 0.0688 ReadBmp
1 1.3e-04 0 0 .plt
1 1.3e-04 0 0 fileReading
はかり方が悪いのか何なのか・・・。もうちょっと調べる必要有り。
*2008/09/29 [#n14595e2]
GPUの性能比較
http://pc.watch.impress.co.jp/docs/article/gpu/
http://www.leoplanet.co.jp/3d_videochip.htm
http://mizushima.ne.jp/topic/GPU-benchmark/index.php
GTX280か、HD4870のどちらか?
*2008/09/28 [#jb2ff301]
マシンその2で、コンパイラをSparCompilerで、最適化オプションはとりあえず-fast
Buffer Init 2.29sec
Local Distance 1.09sec
Accumulation 5.00sec
Ranking 0.0028sec
Backtrace 0.01sec
8.5秒以下で動作している。
時間を表示するくるくるまわるやつ(?)を消したら、0.5sec早くなって、8秒切りました。
*2008/09/27 [#eff004ca]
2DCDPを演習室のマシンで動かしてみる。BLASは、並列化・SIMD化の最適化をかけてある。それ以外はgcc -O3
マシンその1 Sun Ultra 24(CPU Core2Duo E4500 2.2GHz, MEM 1GB)
Buffer Init 714.4sec
Local Distance 32.0sec
Accumulation 715.0sec
Ranking 0.1sec
Backtrace 6.6sec
マシンその2 Sun Fire X4150(CPU XeonE5440 2.8GHz 2個, MEM 8GB)
Buffer init 2.7sec
Local Distance 1.2sec
Accumulation 6.1sec
Ranking 0.002sec
Backtrace 0.014sec
マシンその1ではCPUがほとんど使われていない状態なので、swapが原因だと思われる。
LocalDistance対Accumulationが、1:5ぐらいなので、Accumulationの処理に時間がかかっているが、処理自体はほとんどないので、キャッシュのヒットミスによるものなのか、メモリ不足によるswapが原因なのか、分岐のミスによるものなのかを検討する必要があるかも。
oprofileあたりでプロファイリングしてみたいが、メモリ8Gつんでrootになれるマシンがない・・・。
*2008/09/26 [#eec61bb6]
2DCDPの様子を伺いにいく
アルゴリズムの改良により、計算時間が100秒から15秒になり、さらに精度が上がっている模様。
計算時間の内訳は、Local Distance4.2秒、Accumulateが9.2秒ぐらいで、Accumulateの割合が多い。がしかし、Accumulateの方は分岐が入り組んでいるだけで計算はそれほどない模様。
今までのはLocal Distanceの処理がほぼすべてを占めていたけど、Accumulateの割合が大きいので、GPUには適さないかも?
*2008/09/20 [#mca89764]
CUDAでプログラミングを試してみようとしたが、FX500には対応していなかった。
Final Manuscriptをsubmit
#ref(TakahiroMachino-finalmanuscript.pdf)
*2008/09/18 [#m4abce47]
FCST2008にAccept。なんというか、いい加減だなぁという印象(いろんな意味で)
Appleが提唱しているOpenCLについても調べてみる。
*2008/09/09 [#fcab5553]
GPUについていろいろ調べてみる。NVidiaの方が資料がいろいろあって、やりやすそうな予感。PS3のGPUもハックされたらしいけど、いろいろ難あり。
SunSPOTが動いた。
*2008/09/03 [#hecf2083]
第四版
#ref(latex8-4.pdf)
*2008/08/27 [#g8569d03]
第二版
#ref(latex8-2.pdf)
第三版(8/28 0:45)
#ref(latex8-3.pdf)
*2008/08/15 [#jf499177]
とりあえず書いた
#ref(latex8.pdf)
*2008/08/13 [#eebad3f9]
Module1の実行を、一回ずつmailboxで指示していたが、4回分まとめて実行できるように改良。
Module2の実行のスケジューリングをpthreadにすれば、ちょっと速くなるかなと思ったけど、逆効果だった。
実行結果は1.5前半台ぐらい。うーむ、これ以上速くなるのか・・・?
昼間も夜も全然人がいなくて、ちょっと不気味。
*2008/08/12 [#k807809d]
Pthreadで、SPEへのタスク動的割り当てがおじゃんになったが、IDLE時間は全体の1/10ぐらいなので、これ以上減らすことが出来たとしても、飛躍的な性能向上はあまり期待できないかも。
またもやSPEのソースを改変してみる。ほんのちょっぴり速くなったけど、実時間への影響はなさげ。
*2008/08/11 [#m940e06b]
メモ書き
大学に入れない or 研究室に入れない日
8/29-9/1 (停電作業)
8/20 (カーペット清掃)
9/11 (空調作業)
これ
http://www.hpcc.jp/sacsis/2008/cell/
の上位三チームのレポートを眺める。誰か来年参加して、液晶テレビゲットする人いないですかね?
*2008/08/10 [#tad64528]
Module1をSPEに配布する際に、動的にスケジューリングが出来るようにPPE側でpthreadで実装してみた。
スレッドのスケジューリングがうまくいっていないせいか、Module2のスレッドが動かなかったり、動いたとしてもかなり遅い(2.3秒ぐらい)
pthreadのスケジューリングをRound Robinなんかに変えたけど、変わらず。
2スレッド動くところに、12スレッド動かしているから無理もないか・・・。
*2008/08/07 [#a94e7368]
どうにかこうにか、Module1の処理をほぼすべてベクトル化できた。分岐に対しては__builtin_expectで分岐予測もつけてみたが、あまり速くならず。
アセンブラで調べてみると、ヒント命令と分岐の間の命令数を調整するために、nopをがんがんつっこんでいることが判明(意味ねぇ…)。
静的に決めうちにするか、自分でアセンブラで書いた方がよい。
SIMDの計算の見直し。Multiply addなんかに直せる部分があった。
ここ
http://plaza.rakuten.co.jp/miyazblog/diary/200704100000/
に書いてある通りにMailboxをやらせてみたが、逆に遅くなった。
かろうじて1.5秒前半台も出せる感じになった。
SIGGRAPH2008で、インテルが発表するLarrabeeがひじょーに気になるけど、Cellに似ている気がして、怪しいにおいもする。
http://pc.watch.impress.co.jp/docs/2008/0804/kaigai457.htm
*2008/08/06 [#gd205bc7]
いろいろがんばって、1.6秒ぐらいになりました。
Module1は0.8-0.9秒/行ぐらいに
そして、1.55〜1.6秒になりました。Pathを記憶するところでベクトル化出来れば1.5秒に近づきそうな予感がするけど、その部分のベクトル化でちょっと苦戦中
*2008/08/05 [#v17fe42b]
Module1のプロファイリング
Single Issue 39%
Dual Issue 29%
Dependency stall 24%
Channel stall 6.2%
Dependency stallの内訳は、ShuffleとLS系の命令で半々ぐらいの割合
SIMDの計算方法を変えてみるか・・・
spu_shuffle使ったら、1.9秒後半だったのが、1.8秒ぐらいになった。
*2008/08/04 [#b62a958b]
実験をまとめる。
Cellに対して最適化した2DCDPを評価する比較対象として、Intel Xeon 5160 (3.0GHz)と比較した。プログラムは単一プロセッサコアを使用し、ベクトル化はされていない。
Intel Xeon 5160 23.41秒
Cell 1.95秒
Intel Xeon 5160と比較すると、およそ12倍ほどの性能向上が見られた。
ベクトル化・並列化 (岩崎さんが最適化した部分)(単位 秒/行)
Module1 0.12/行
Module2 0.021/行
Module3 0.00009/行
SPEプログラムを起動するときの最適化、Module1と2をパイプライン並列化、分岐の削除、DMA転送の最適化、動的分岐予測、その他細かいところを (町野が最適化した部分)(単位 秒/行)
Module1 0.10/行
Module2 0.003/行
Module3 0.00003/行
Module3に対する、ソフトウェアによる動的分岐予測について(単位 クロックサイクル(全体から見た割合))
ヒント無し
トータル 分岐ストール
203479 32754(16.1%)
199545 28869(14.5%)
214775 31241(14.5%)
217708 34465(15.8%)
221122 38605(17.5%)
218402 36027(16.5%)
ヒント有り
トータル 分岐ストール
188873 18152(9.6%)
189070 18392(9.7%)
204221 20692(10.1%)
207641 24397(11.7%)
215277 32766(15.2%)
211705 29823(14.1%)
それぞれ、7.7%, 5.5%, 5.2%, 4.8%, 2.7%, 3.2%の性能向上。平均で4.9%の性能向上(と言っていいんだろうか・・・)
*2008/08/02 [#h1123334]
2DCDPの実行時間を測定するために、大和田君と星野君に協力してもらう。
C2D 1.8GHz (大和田君のやつ) 38.69
P4 3.4GHz (星野君のやつ) 42.92
製造プロセス、クロック周波数がCellに近い、矢口さんのXeonでもはからせてもらった。
Xeon 5160 3.0GHz (65nm) 23.41
そしたら、矢口さんの周りの人たちも計ってくれと言われ、やらせてもらった。
C2D 6600 2.4GHz (65nm) 27.66
C2D T8100 2.1GHz (45nm) 29.62
C2D E8400 3.0GHz (45nm) 21.06
C2D E8500 3.16Ghz (45nm) 18.55
注:単一コアで、非ベクトル化です(涙)
*2008/07/31 [#med396db]
ポスターを急いで作る
筑波大学のHPCサマーセミナーに行くのをやめ、代わりにネット中継を眺める。
http://www.ccs.tsukuba.ac.jp/workshop/HPCseminar/2008/
*2008/07/28 [#jceb7abf]
分岐先のアドレスを計算するのではなく、直前に分岐命令に渡した値をヒント命令に渡すだけでいいということに気づき、PS3で実験。5%-10%ほど性能向上。早速シミュレータにかける(結果は12時間後)
*2008/07/26 [#qbb47bcb]
分岐先のアドレスとして、仮に予測した分岐先を.L10とすると、.L10を渡していたが、どうも実態は、.L10+0x0100にところにあるらしい(なぞ)
とりあえずそれで試してみる。
*2008/07/25 [#yd93327c]
CellSDK2.1にはいっていたxlcでやろうとしたが、ヘッダファイル周りの問題でうまく動かず。gccのヘッダファイルをxlc用に変換しながらコンパイルしてくれるらしいのだが、元々入っているのは3.0なので、そのせいかと思われる。
分岐予測については停滞中
時間について、もうちょっと細かくはかってみた
init 0.010834
Module1,2 1.937619
Module3 0.009668
plot 0.011720
元々のプログラムの実行時間を計りたいけど、3.2GHzで65nm(90nm?)のプロセッサで計測させてくれる人を探す
*2008/07/19 [#mfcc7b16]
分岐ストール自体は20%ほど削減しているが、DMA転送でのストールが大きくなってしまったため、全体としては遅くなってしまった。
*2008/07/16 [#ab93f6b8]
前に分岐予測のコードを挿入して測定したプロファイルは、一番最後の一行分に対してしか結果が表示されていなかったので、全ての行に対して出来るように計測し直したところ、悪化していることがわかった。
bi命令だといずれにせよフェッチが外れているはずなので、少しでも当たれば性能は上がるはずなのだが、もう一度確認する必要があると思われる。
Module3のDMA転送は、最大3パターンということがわかったので、3パターンをあらかじめ読み込み、使わない物は捨てるという方式でやらせてみたところ、性能が10%ほど悪くなってしまった…。一回あたりの実行だと早いのだが。
*2008/07/15 [#af000a2d]
シミュレータで全SPEをPileモードで動かすと、今のプログラムで18時間ぐらいかかることがわかった。
make cleanをしたら、アセンブラでごりごり書いたプログラムまで消えて、泣きたくなった・・・。
*2008/07/13 [#n42a7114]
Module1と2を並列動作するようにする。2.1秒で実行できるようになった。Module1と2で1.99秒、Module3で0.02秒。
*2008/07/12 [#t37a648d]
DMA転送の最適化やまだベクトル化されていない部分を最適化などをして、3.7秒までに落とし込む。Module1と2で3.6秒、Module3で0.02秒
*2008/07/11 [#p3b16b23]
Module2も同様に最適化を加えたが、あまり性能向上せず。
時間を計り直す。Time Base Registerを使った計測だと4.18秒、clock()を使った計測だと3.31秒、timeコマンドだと、real4.28秒、user0.732秒、sys2.677秒。Module1・2でかかる時間が4.02秒で、module3でかかる時間が0.16秒であった。
岩佐さんが作ったプログラムは、Visual Studioの形式になっているため、gccでは実行出来ず。
SPEのプログラムを起動する際を書き換えて、4.18秒から4.02秒に短縮できた。
*2008/07/10 [#l7603c7f]
手で最適化を加えて、19000サイクルを下回った。Module3だけでみれば、5.9%性能向上
*2008/07/09 [#nf896ef8]
どうもシミュレーション用のマシンが死んだっぽい…。
北道先生のお力をお借りして、たぶん大丈夫。
*2008/07/08 [#n2972994]
Module3のbranch missによるペナルティは全体実行時間(20000サイクル)の17.2%ということがわかった。switch-caseにおいて、前のcaseと同じところを予測するようにしたところ、分岐ミスによるペナルティがしめる割合は12.7%まで落ち、1000サイクル削減し19000サイクル程度で実行することができた。
*2008/07/07 [#n9b89f99]
Pipeモードで細かいところまでシミュレーションするように実行させているが、一日半たっても終わらず…。1つのコアだけPipeモードにして、後はFastモードで動くようにしてやり直す。
*2008/07/06 [#v0065fa0]
シミュレータで2DCDPを動かす。Module1とModule2が同時に動いているところは、Module1だけで動き、後にModule2だけが動いているので、この辺を変えるとスピードがあがるかもしれない。
*2008/07/05 [#s0a45151]
シミュレータがうまく動かなかったので、入れ直し。
*2008/06/27 [#e6fb4a95]
SPEの分岐命令に対して、条件分岐の場合は分岐が起こらないと仮定して命令フェッチを開始しているが、間接分岐(switch-caseのような)の命令(bi命令)に対してはどうなっているのかを調査中。間接分岐に対する予測手法も合わせて。シミュレータが必要かも。
*2008/06/20 [#e7d1f8e8]
Module3のswitch-caseの分岐のアセンブラを見る。LSに分岐先のアドレスを格納し、分岐条件の値が決まってからLSからレジスタへアドレスを読み込み、bi命令で分岐している。
*2008/06/13 [#b5064b9f]
Module1全体の流れを追っていき、分岐予測が適応出来そうな部分を把握。Module2,3も同じようにやるつもり。
週末は論文書きを進めようかと。
*2008/06/11 [#w9e42d3b]
Module1の流れがわかってきたので、アセンブラに落として分岐予測を適用できるような分岐を探す。適用出来そうな分岐の構造を一つ見つけたが、早くなるのかどうかはこれから検討。
そっちばっかりやっていて、論文書きは全然進んでいない…(汗
*2008/06/06 [#tb4eeefc]
章立て後、書けるところから書こうとCellのbackgroundから書いていく。
*2008/06/05 [#z5d89861]
2DCDPのソースを読む。PS3のlinuxでemacs -nwやると、なぜかSegmentation faultで落ちる…。
*2008/06/04 [#k83e7756]
論文の章立て、Introductionをちょこっと書く
*2008/06/02 [#w0c6691c]
奥山先生とミーティング
- 2DCDPについて、これまでの理解について
- CELLに最適化された2DCDPのソースを読む
頭が痛いので早めに帰る
*2008/05/31 [#a18cc016]
奥山先生とミーティング
- 2DCDPについて
-- やりたいことはわかったけど、ようわからん。。。
とりあえず、DPから勉強
矢口さんに聞きに行く
- DP -> 1次元DP -> CDP -> Line Image CDP -> 2DCDPの流れで説明をしてもらう
-- なんとなくわかってきたつもり
*2008/05/30 [#sb19cf44]
PS3にFedora8を入れる
- PS3のファームウェアを2.35にアップデート
- PS3 Addon 2008.03.17版をインストール
- rootのパスワードはaslps3
- X関係は最初からインストールしない
- Cell SDK 3.0.0.3をインストール
-- 3.0.0.3は一部のパッケージだけ、bseからrpmをダウンロードしてインストールする必要がある
*2008/05/29 [#gbee72a9]
昨日の続き。VirtualBoxにFedora7を入れる。
- Cellシミュレータを入れたが、予想通り重い
-- Pipeline modeだと、40分たっても起動せず
-- Fast modeだと10分ぐらいで、割と早く立ち上がる
*2008/05/28 [#o2191e16]
とりあえず、Windows入れなおし。
VirtualBoxにFedora9を入れて、Cellのシミュレータを入れようとしたが、
tkのバージョンが新しすぎて入らず…。
- tkのバージョンを落として入れてみたがインストールできず、Fedora7をいれる
終了行:
[[町野]]
*2009/1/22 [#w45f1765]
健康診断。肝臓がフォアグラで、虫歯が一本(汗
三次元復元のプログラムに手をつけてみたが、いろいろと思うところが・・・。
頭が痛い
*2009/1/21 [#f87a906e]
研究室が寒い・・・(汗)
暖かいSSBで論文を書くことにした。
明日は健康診断受けてこよう(汗
俺たちは機械以下なのか・・・
It is not 19 degrees C in the rooms of my lab.
Your management of facilities violates the
goals set by the prefecture (namely said 19
degrees Celcius).
Freezing people cannot think and be
creative.!!! Freezing people include our
precious customers (including my students in
my lab who sit with me in coats in the lab for
working sessions). Not to mention that students
sit in coats+blankets in my classes.
The computers in ISTC's data center have a well-
tempered room. I conclude that professors and
students are treated worse than machines in this
institution.
Your management is an utter failure.
*2009/1/20 [#db99bd73]
ispellとqqでスペルチェックと文法チェック。この段階でとりあえず先生に出す。
週末は%%牛タンを食べに%%[[Open Source Conference:http://www.ospn.jp/osc2009-sendai/]]に参加するために仙台へ。
*2009/1/18 [#z70f0623]
追加実装をしようと久々にプログラムを動かそうとしたら・・・、ライブラリがないと言われ実行出来ない(大汗 どーしよ・・・。
とりあえずの手段として、LD_LIBRARY_PATHを設定することにより解決。なんでやろ。
*2009/1/17 [#d389e828]
金曜はまた発熱。あぁ・・・。
後輩に「隠れた優良企業を教えてくれ」といわれた。もし知ってたら俺が行きたいわ(泣)
大体全体が見渡せてきた
#ref(thesis0117.pdf)
*2009/1/14 [#q409d17f]
病院にいこうとしたら、スリップで車が止まらず、赤信号で交差点に突っ込む(汗)
大和田、児島、町野と風邪でダウンしてしまい、周りを囲まれている前田君が危ない・・・。
インフルエンザだと思ったら風邪らしいし、熱も微熱程度まで下がったので大学にきてみた。
*2009/1/13 [#r427cb6e]
韓国料理の店にいく。ラーメンはインスタントらしい。なんじゃそりゃ。まあ、事前に自己申告しただけ許す。石焼ビビンバはそこそこうまい。Hospitalityの点から、もう一度いくかどうかと言われると・・・。
風邪で頭がくらくらする。
2DCDPをもっと速くできないものかといじったけど、遅くなるだけだった・・・
*2009/1/12 [#ge604d5c]
因子分解法の定式化と説明が、もらった論文を読んでも、どう書けばよいのかがわからず・・・。
しゃっくりがとまらない。死にそう。
何気に[[ソースカツ丼の会:http://aizu-katudon.com/index.html]]に学食が加盟しているのを発見。
気になる店 [[韓国料理の店:http://gourmet.yahoo.co.jp/0007812981/0011829733/]] [[米熊:http://gourmet.yahoo.co.jp/0003324218/]] [[山葵:http://the-timely.com/yamaaoi/]]
*2009/1/11 [#j3d2aa58]
病み上がりの矢口さんを捕まえて、いろいろほじくりだす。
load命令とshuffleは、一個前のループで二命令同時発行で隠蔽し、(1)、(3)、(5)は一命令で実行。問題は(2)、(4)、(6)だが、loadで1命令、mag01の値を決定するのに3命令、yを右シフトするのに1命令、mt_[kk+M]をロードしてshuffleするのに3命令、xorを二回とって2命令、storeで1命令。ここの部分をもっと簡略化できればいけそうなんだけど・・・。
for(i = 0; i < num_rand; i++) {
static unsigned int mag01[2]={0x0UL, MATRIX_A};
if (mti >= N) {
int kk;
for (kk=0;kk<N-M;kk++) {
y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK); // (1)
mt[kk] = mt[kk+M] ^ (y >> 1) ^ mag01[y & 0x1UL]; // (2)
}
for (;kk<N-1;kk++) {
y = (mt[kk]&UPPER_MASK)|(mt[kk+1]&LOWER_MASK); // (3)
mt[kk] = mt[kk+(M-N)] ^ (y >> 1) ^ mag01[y & 0x1UL]; // (4)
}
y = (mt[N-1]&UPPER_MASK)|(mt[0]&LOWER_MASK); // (5)
mt[N-1] = mt[M-1] ^ (y >> 1) ^ mag01[y & 0x1UL]; // (6)
mti = 0;
}
y = mt[mti++];
y ^= (y >> 11);
y ^= (y << 7) & 0x9d2c5680UL;
y ^= (y << 15) & 0xefc60000UL;
y ^= (y >> 18);
r = r + y;
}
*2009/1/9 [#i0a0564d]
SPUの命令セットを見ていると、ビットごとのセレクト命令であるspu_sel(A,B,C)が、(A and ~C) or (B and C)というMUXであるということが分かり、これを何とかうまく使えないかと朝方までA xor B and CやA xor B xor Cをいろいろいじくりまわしたが、うまくいかず…。まだ凡人の域にいるようだ。
このお店が気になる
http://r.tabelog.com/fukushima/A0705/A070501/7001825/
最初の数個はおいしかったけど、だんだん飽きました・・・。
*2009/1/8 [#p6949977]
30倍でとりあえず放置しておこうと思ったが、2chを見ていると50倍越えが4人ぐらい出てきたので、あせって再開。とりあえず39.8倍ぐらいまでになった。IPCがぎりぎりなので、ビット演算を簡略化しないと超えられそうにない。
課題が発表される前からメルセンヌツイスタをCellで実装している、%%変態%%すごい人の日記。50倍一番乗りの人
http://tripper.kousaku.in/
*2009/1/7 [#f29a0ca8]
おとなしく論文を書き進める。
夕方、Hack the Cellの課題の変更があり、コンパイラのバージョンが変わったので試したところ、元のソースが3割以上遅くなっているので、新しい基準だと28〜30倍程度の高速化になってしまったが、最適化したソースも5%〜10%弱ぐらい遅くなっているので、原因をプロファイル中。
実行時間は一番最初のループがほぼすべて。その中にある、1番目と3番目のループの実行時間が5割増し、4番目のループが1割増になっている模様。
コンパイラは変えてはいけないけど、前のコンパイラで吐いたアセンブリを今のコンパイラでバイナリ作るってのでもいいのか?
あー論文かかないとなー。
*2009/1/5 [#i38f8ca6]
単一SPEで23〜24倍を達成。ループの数は固定なので、ループの比較や分岐命令を消すことができる状態。
アルゴリズム的に高速化を目指す。
*2009/1/1 [#ta35daa7]
とりあえず15倍達成。20倍を目指す。
20倍達成。30倍を目指す。
*2008/12/30 [#tacf1081]
Hack the Cellの課題の検討。
単一のSPEで10倍以上速く出来ないと入賞の最低ラインを満たさないので、
まずはそれを目標に。分岐の削除で1.8倍程度上がったので、ぼちぼちSIMD化していく。
論文もかかないとなー。
ぱっと見てすぐSIMD出来るところをやった。ループ間の依存関係はないけど、命令間の依存関係があるので、ループアンロールしてデータ依存ストールを埋める。それだけでも1割以上速くなるから面白い。
全体の6〜7割をSIMD化で、全体の実行結果は現在4.5〜4.8倍の高速化。このままだと10倍は厳しいかも。
*2008/12/27 [#c2616b93]
長崎は意外と寒いです。
スライド
#ref(fcst3.ppt)
ホテルで発表の練習中。一人で英語でぶつぶつつぶやくのは不気味だ(汗)
欠席者がいたので、心の準備がなく発表へ。とりあえずしゅうりょう。
Hack the Cellの課題も発表
http://cell.fixstars.com/challenge/challenge.html
*2008/12/26 [#xf0e9e98]
雪のせいで、磐越西線が遅れ、おのずと新幹線にも一本後のものに。
Sunのオフィスでスライドの手直し中
*2008/12/25 [#f6ad2a04]
今朝になって発表時間・日程が変更。ぐだぐだ感満載。
明日旅立ちます。良いお年を。
*2008/12/21 [#dfc06b5a]
結局、昼11時までにループ間の依存関係を解消しSIMD化。現状、2.5〜3倍ぐらい高速化。元々並列化されているので、普通にやる最適化ならこんなもんかなと。
去年の結果を見ていると、Cellが得意な行列演算だったせいもあるけど、元ソースの100倍以上(コア数はどちらも同じ)の成果が出ているので、根本的なアルゴリズムから見直さないと、入賞はおろか、決勝進出もきついと思われる。
*2008/12/20 [#h2939767]
朝四時まで飲み会
あの醜態では、会社の未来が危ぶまれる・・・
論文や発表の準備などをやろうとするが、Speed Challengeの方が気になり、結局ずっとそれにつきっきり。ループ間の依存関係を見落としを発見し、それをどううまくやるか。
*2008/12/19 [#m30053a9]
午前一時半より、発表の練習の練習。英語を使う機会がなくなったせいか、前よりしゃべったり聞いたりするのが劣ってきた(汗
こんな夜遅くにお付き合いいただいた、おばらくん、まつもとくん、さとうさん、ありがとう
Speed ChallengeはDPのコストを求めるSIMDではまりまくり。腰をすえてやってみたい。。。
*2008/12/18 [#q648abfd]
Cell Speed Challenge 2009の課題の作戦を練るつもりが、気が付いたら実装を始めていた(わらい)
並列化はすでにされているので、主にSPEのチューニング。とりあえず、分岐をばすばす削って、1.2〜1.4倍の高速化。
ベクトル化もなんとなく出来そうな感じ。後はダブルバッファーでデータ転送の時間を隠蔽。動的分岐予測の出番はなさげなところが残念。
もし本気でかかるなら、並列化の部分から手を入れた方がよさげかもしれない。
学生じゃないと出場出来ないので、影武者を探すか・・・。
*2008/12/17 [#g7c9233d]
昨日、今日とCellの勉強会と演習
実装・論文からは遠ざかり、FCSTのスライド作り
そのうちやりたいこと
・2DCDPをUltraSPARC T2で走らせる
・6年ぶりにPCを購入。Core i7 920がほしい
・禁煙を解禁したい・・・
*2008/12/11 [#t3c1e2f4]
勇者二名現る!
喫煙者連中からの誘惑が多すぎる(汗
*2008/12/10 [#x5eed7db]
FCSTのスライド作りとカンペ作成
禁煙は明日から
*2008/12/9 [#i1c1557f]
禁煙・禁(節)酒・節食の刑が言い渡される
*2008/12/6 [#i0bf1f08]
焼肉食べてたっぷり寝たせいか、体調がすごぶる良くなった。
お昼に大学に来たが、研究室に誰もいなくてびっくり。
研究室で鳥インフルエンザが蔓延か・・・
http://jp.youtube.com/watch?v=NrHgWX_hVBM
*2008/12/3 [#bf47cc55]
文章書きが大嫌いなので、先に論文を書いてしまおうとぼちぼち書いているところ。
なんとなくノリで始めた禁煙生活。24時間経って、そろそろ禁断症状が出てきた(汗)禁煙するために、しばらく家にでも引きこもるか・・・。
*2008/11/26 [#q8ef5134]
11/25 黒田先生と中間発表。修論の表紙を作る
11/26 修論のサンプルファイルをいろいろいじくりまわす。書けるところから書こうと、HPC(CMP, GPGPU, OS, コンパイラ, 並列言語など)についてのSurveyとCellの説明
11/27 13:10 気が付いたら今。ねむい。
*2008/11/21 [#j42b7d0e]
今週 -> 中間発表のまとめ
腰の爆弾が・・・
*2008/11/14 [#i7a61474]
factorizationのホットスポットを探し、PPE上で最適化
処理時間の70%ぐらいしめていた箇所は
元の時間 0.062
転置行列を作らずに計算 0.027
OpenCVを使わずに計算 0.0095
それをベクトル化 0.0015
まで速くなった。
全体的に、そのままデータをシーケンシャルにアクセスして処理出来るのに、
わざわざ転置して、ランダムアクセスをしていたりするので、
その辺を変更するだけでも十分速くなった。
0.09秒かかっていた計算時間が、今は0.004秒ぐらいに。
精度的には、double -> floatで誤差が出たのに加え、
ベクトル処理において多少誤差が出ている模様だが、確認したところ、小数点第三位以下の誤差で、問題ないだろうとのこと。
*2008/11/13 [#acc43215]
double->floatへ置き換え。これだけで10%ぐらい速くなった。
PPEの上で一部ベクトル化。元の状態から20%アップ。
*2008/11/12 [#c6753ef3]
OpenCVがようわからん。
ねもとくんが奨学金+サンフランシスコにものすごーく興味を持っていた。
*2008/11/11 [#o7a43d77]
奨学金がほしい人はこれで
http://cell.fixstars.com/challenge/index.html
*2008/11/10 [#m3d0b3ac]
OpenCVを利用していない版のソースをもらう。データ単位で分割して並列化は難しそうなので、さて、どうやって実装するか・・・。
*2008/11/9 [#j49ecc2d]
PS3のアップデート、Cell SDKのアップグレード
OpenCVからどう置き換えるか検討
*2008/11/8 [#i141cb66]
2DCDPとFactorizationをつなげる処理を検討
2DCDPはPPEのプログラムが64ビットで動くことが前提で作られているのだが、
Factorizationから呼び出すCell用OpenCVは32ビットで作られているため、Factorizationは32ビットでコンパイルしなければならず、単純にはいかなさそう。
Cell用OpenCVはうまく動きそうにないので、OpenCVを使わない実装で64ビットに統一した方がよさそうな気もしてきた。
*2008/11/7 [#q6e5a0ce]
井関君とFactorizationの中身でいろいろと確認
Cell用のOpenCVがどうもPPEでしか動いていないので、MLに質問のメールを投げようとしたら、廊下でたまたまFixstarsの人がいたので質問
矢口さんの勉強会に参加
*2008/11/5 [#p734e425]
矢口さんから画像をもらい、3D復元用のデータを作成
早速プログラムにかけてみるが、ちゃんと結果が出ているのかどうかが怪しげな感じ。確認中
*2008/11/4 [#l22044d2]
対応点のファイルを出力部分を作る。画像出力はちょっと難しそうなのでとりあえずおいておく。
FactorizationをCellで動かそうと、OpenCVにCell用のパッチを当てて実行するが、どうもSPEが使われていない感じ。
*2008/10/31 [#b09808d5]
現状のCell版2DCDPから、3D復元に必要な情報が抜き出せそうな感じ。
しかし、Cell版2DCDPではマッチング後の画像の出力がされていないため、今の状態でちゃんと出来ているのか微妙。
とりあえず、
1. 画像を出力させる
2. 3D復元に必要な情報を抜き出して、実際にやらせる
*2008/10/29 [#x9b3902d]
doubleからfloatへの変更は、精度の面でも問題なし
PS3での2DCDPにFactorizationをつなげる件については、2DCDPの対応点を出力させればいいとのことだが、未実装なので難儀しそう。(元のソースではそれらしきものを実装しているが、それをCellに対して実装する必要性あり)
Backtraceの後、単調連続性を確保する処理をやらないと精度が上がらないが、PS3版では未実装。それをやったとしても、精度の問題できちんと3D復元出来るかは微妙とのこと。
対応点の数は、今のサンプルだと7005で、あちらが行っている実験の中でも平均的。多くても1万ぐらいとのこと。
*2008/10/27 [#r74dc061]
24日からの記録
井関君に聞いたけどなかなか返事がもらえなかったので、最新バージョンの2DCDPのソースを読んだり、SIMD周辺をやってみた。
26日は体調不良
やっと井関君と連絡がつき、3D復元のプログラムを実行することができた。
学会の飛行機予約。年末年始でFull Fareしかなく、高い。
3D復元は、データ型がdoubleなんだけど、floatに変えられるのだろうか。。。確認中
*2008/10/23 [#w20aa8aa]
校正から戻ってきた原稿の編集。
Camera Readyの締切と同じぐらいに出したのに、Camera Readyの締切自体が伸びに伸びて間に合ってしまうという逆転劇
*2008/10/22 [#d1f4dd02]
今までの記録
2DCDPをベクトル演算しやすいようにデータの並びを変更
とりあえずそれは置いておいて、3D復元の方にシフト
OpenCVをビルド。いろいろと手間取ったがOpenMPで並列化。コンパイラの自動並列化も結構効いたみたい
Factorizationのビルド。いざためそうと思ったが、もらったファイルの中にテスト用のデータが入っていないことに気づく。
データ入手。早速動かしてみるも、Segmentation Fault
井関君にいろいろ質問して、返答待ち
*2008/10/17 [#x3dad00f]
2DCDPのlocal distanceを求める部分をいじくりまわす。
ループの入れ替えや、一部ベクトル化により、1.00秒から0.85秒程度に短縮。
その他いろいろ難しい問題あり。
とりあえず、よくわからないということはよくわかった。
*2008/10/16 [#ue687b5f]
xmmintrin.hなどで、アセンブラとの一対一対応しているヘッダファイルがあるらしいのだが、アライメントの関係なのか、gccでは正常に動作せず。
インテルコンパイラのお試し版を試してみる。
昔、Sedukhin先生がSSEを使っていろいろやっていたので聞いたところ、インテルコンパイラがいいらしい。
いろいろすんなりとはいかなかったが、インテルコンパイラのインストール完了。BLASのコンパイルが出来ないものの、2DCDPの方をやったら7秒ぐらいと、1秒短縮。
SSEを使って、簡単なプログラムを二つ作ってみた。一つは動いたけど、もう一つは思った動作をしてくれなかった。。。
*2008/10/14 [#y32f765c]
gccでSSEって、どうやって使えばええんだろ?という調査
*2008/10/9 [#e3016655]
短期留学生Dukeを出迎え
ACMもOKぽいそうです。
ここ数日、頭痛にめまい、腹痛にはじまり、肩こり腰痛、すごぶる体調が悪い・・・
*2008/10/8 [#i9af781a]
向こう1,2週間の目標
・ボトルネックになっている箇所とその原因の調査
・SSEの練習がてら、プログラムをちょっといじる
*2008/10/4 [#t102f63c]
Oprofileを入れてみる。ちょっと苦戦
動かして、とりあえず「実行された分岐命令」と「実行された分岐の分岐予測が外れたもの」を測定。500命令おきにカウント
CPU: AMD64 processors, speed 2611.97 MHz (estimated)
Counted RETIRED_BRANCH_INSTRUCTIONS events (Retired branches (conditional, uncon
ditional, exceptions, interrupts)) with a unit mask of 0x00 (No unit mask) count 500
Counted RETIRED_MISPREDICTED_BRANCH_INSTRUCTIONS events (Retired Mispredicted Br
anch Instructions) with a unit mask of 0x00 (No unit mask) count 500
samples % samples % symbol name
590749 83.7145 30463 94.2310 accumulation
72707 10.3032 1098 3.3964 nextcdp
20585 2.9171 557 1.7230 initBuffer
18861 2.6728 139 0.4300 cblas_snrm2
2494 0.3534 16 0.0495 InitBmp
248 0.0351 1 0.0031 ATL_snrm2_xp0yp0aXbX
23 0.0033 0 0 ReadBmp
4 5.7e-04 54 0.1670 ATL_snrm2
続いてデータキャッシュのアクセス数とミス
CPU: AMD64 processors, speed 2611.97 MHz (estimated)
Counted DATA_CACHE_ACCESSES events (Data cache accesses) with a unit mask of 0x00 (No unit mask) count 500
Counted DATA_CACHE_MISSES events (Data cache misses) with a unit mask of 0x00 (No unit mask) count 500
samples % samples % symbol name
639733 80.4728 6674 76.5191 accumulation
57388 7.2189 166 1.9032 cblas_snrm2
52717 6.6313 417 4.7810 nextcdp
39372 4.9527 1377 15.7877 initBuffer
3710 0.4667 63 0.7223 InitBmp
1144 0.1439 14 0.1605 ATL_snrm2
515 0.0648 5 0.0573 ATL_snrm2_xp0yp0aXbX
387 0.0487 6 0.0688 ReadBmp
1 1.3e-04 0 0 .plt
1 1.3e-04 0 0 fileReading
はかり方が悪いのか何なのか・・・。もうちょっと調べる必要有り。
*2008/09/29 [#n14595e2]
GPUの性能比較
http://pc.watch.impress.co.jp/docs/article/gpu/
http://www.leoplanet.co.jp/3d_videochip.htm
http://mizushima.ne.jp/topic/GPU-benchmark/index.php
GTX280か、HD4870のどちらか?
*2008/09/28 [#jb2ff301]
マシンその2で、コンパイラをSparCompilerで、最適化オプションはとりあえず-fast
Buffer Init 2.29sec
Local Distance 1.09sec
Accumulation 5.00sec
Ranking 0.0028sec
Backtrace 0.01sec
8.5秒以下で動作している。
時間を表示するくるくるまわるやつ(?)を消したら、0.5sec早くなって、8秒切りました。
*2008/09/27 [#eff004ca]
2DCDPを演習室のマシンで動かしてみる。BLASは、並列化・SIMD化の最適化をかけてある。それ以外はgcc -O3
マシンその1 Sun Ultra 24(CPU Core2Duo E4500 2.2GHz, MEM 1GB)
Buffer Init 714.4sec
Local Distance 32.0sec
Accumulation 715.0sec
Ranking 0.1sec
Backtrace 6.6sec
マシンその2 Sun Fire X4150(CPU XeonE5440 2.8GHz 2個, MEM 8GB)
Buffer init 2.7sec
Local Distance 1.2sec
Accumulation 6.1sec
Ranking 0.002sec
Backtrace 0.014sec
マシンその1ではCPUがほとんど使われていない状態なので、swapが原因だと思われる。
LocalDistance対Accumulationが、1:5ぐらいなので、Accumulationの処理に時間がかかっているが、処理自体はほとんどないので、キャッシュのヒットミスによるものなのか、メモリ不足によるswapが原因なのか、分岐のミスによるものなのかを検討する必要があるかも。
oprofileあたりでプロファイリングしてみたいが、メモリ8Gつんでrootになれるマシンがない・・・。
*2008/09/26 [#eec61bb6]
2DCDPの様子を伺いにいく
アルゴリズムの改良により、計算時間が100秒から15秒になり、さらに精度が上がっている模様。
計算時間の内訳は、Local Distance4.2秒、Accumulateが9.2秒ぐらいで、Accumulateの割合が多い。がしかし、Accumulateの方は分岐が入り組んでいるだけで計算はそれほどない模様。
今までのはLocal Distanceの処理がほぼすべてを占めていたけど、Accumulateの割合が大きいので、GPUには適さないかも?
*2008/09/20 [#mca89764]
CUDAでプログラミングを試してみようとしたが、FX500には対応していなかった。
Final Manuscriptをsubmit
#ref(TakahiroMachino-finalmanuscript.pdf)
*2008/09/18 [#m4abce47]
FCST2008にAccept。なんというか、いい加減だなぁという印象(いろんな意味で)
Appleが提唱しているOpenCLについても調べてみる。
*2008/09/09 [#fcab5553]
GPUについていろいろ調べてみる。NVidiaの方が資料がいろいろあって、やりやすそうな予感。PS3のGPUもハックされたらしいけど、いろいろ難あり。
SunSPOTが動いた。
*2008/09/03 [#hecf2083]
第四版
#ref(latex8-4.pdf)
*2008/08/27 [#g8569d03]
第二版
#ref(latex8-2.pdf)
第三版(8/28 0:45)
#ref(latex8-3.pdf)
*2008/08/15 [#jf499177]
とりあえず書いた
#ref(latex8.pdf)
*2008/08/13 [#eebad3f9]
Module1の実行を、一回ずつmailboxで指示していたが、4回分まとめて実行できるように改良。
Module2の実行のスケジューリングをpthreadにすれば、ちょっと速くなるかなと思ったけど、逆効果だった。
実行結果は1.5前半台ぐらい。うーむ、これ以上速くなるのか・・・?
昼間も夜も全然人がいなくて、ちょっと不気味。
*2008/08/12 [#k807809d]
Pthreadで、SPEへのタスク動的割り当てがおじゃんになったが、IDLE時間は全体の1/10ぐらいなので、これ以上減らすことが出来たとしても、飛躍的な性能向上はあまり期待できないかも。
またもやSPEのソースを改変してみる。ほんのちょっぴり速くなったけど、実時間への影響はなさげ。
*2008/08/11 [#m940e06b]
メモ書き
大学に入れない or 研究室に入れない日
8/29-9/1 (停電作業)
8/20 (カーペット清掃)
9/11 (空調作業)
これ
http://www.hpcc.jp/sacsis/2008/cell/
の上位三チームのレポートを眺める。誰か来年参加して、液晶テレビゲットする人いないですかね?
*2008/08/10 [#tad64528]
Module1をSPEに配布する際に、動的にスケジューリングが出来るようにPPE側でpthreadで実装してみた。
スレッドのスケジューリングがうまくいっていないせいか、Module2のスレッドが動かなかったり、動いたとしてもかなり遅い(2.3秒ぐらい)
pthreadのスケジューリングをRound Robinなんかに変えたけど、変わらず。
2スレッド動くところに、12スレッド動かしているから無理もないか・・・。
*2008/08/07 [#a94e7368]
どうにかこうにか、Module1の処理をほぼすべてベクトル化できた。分岐に対しては__builtin_expectで分岐予測もつけてみたが、あまり速くならず。
アセンブラで調べてみると、ヒント命令と分岐の間の命令数を調整するために、nopをがんがんつっこんでいることが判明(意味ねぇ…)。
静的に決めうちにするか、自分でアセンブラで書いた方がよい。
SIMDの計算の見直し。Multiply addなんかに直せる部分があった。
ここ
http://plaza.rakuten.co.jp/miyazblog/diary/200704100000/
に書いてある通りにMailboxをやらせてみたが、逆に遅くなった。
かろうじて1.5秒前半台も出せる感じになった。
SIGGRAPH2008で、インテルが発表するLarrabeeがひじょーに気になるけど、Cellに似ている気がして、怪しいにおいもする。
http://pc.watch.impress.co.jp/docs/2008/0804/kaigai457.htm
*2008/08/06 [#gd205bc7]
いろいろがんばって、1.6秒ぐらいになりました。
Module1は0.8-0.9秒/行ぐらいに
そして、1.55〜1.6秒になりました。Pathを記憶するところでベクトル化出来れば1.5秒に近づきそうな予感がするけど、その部分のベクトル化でちょっと苦戦中
*2008/08/05 [#v17fe42b]
Module1のプロファイリング
Single Issue 39%
Dual Issue 29%
Dependency stall 24%
Channel stall 6.2%
Dependency stallの内訳は、ShuffleとLS系の命令で半々ぐらいの割合
SIMDの計算方法を変えてみるか・・・
spu_shuffle使ったら、1.9秒後半だったのが、1.8秒ぐらいになった。
*2008/08/04 [#b62a958b]
実験をまとめる。
Cellに対して最適化した2DCDPを評価する比較対象として、Intel Xeon 5160 (3.0GHz)と比較した。プログラムは単一プロセッサコアを使用し、ベクトル化はされていない。
Intel Xeon 5160 23.41秒
Cell 1.95秒
Intel Xeon 5160と比較すると、およそ12倍ほどの性能向上が見られた。
ベクトル化・並列化 (岩崎さんが最適化した部分)(単位 秒/行)
Module1 0.12/行
Module2 0.021/行
Module3 0.00009/行
SPEプログラムを起動するときの最適化、Module1と2をパイプライン並列化、分岐の削除、DMA転送の最適化、動的分岐予測、その他細かいところを (町野が最適化した部分)(単位 秒/行)
Module1 0.10/行
Module2 0.003/行
Module3 0.00003/行
Module3に対する、ソフトウェアによる動的分岐予測について(単位 クロックサイクル(全体から見た割合))
ヒント無し
トータル 分岐ストール
203479 32754(16.1%)
199545 28869(14.5%)
214775 31241(14.5%)
217708 34465(15.8%)
221122 38605(17.5%)
218402 36027(16.5%)
ヒント有り
トータル 分岐ストール
188873 18152(9.6%)
189070 18392(9.7%)
204221 20692(10.1%)
207641 24397(11.7%)
215277 32766(15.2%)
211705 29823(14.1%)
それぞれ、7.7%, 5.5%, 5.2%, 4.8%, 2.7%, 3.2%の性能向上。平均で4.9%の性能向上(と言っていいんだろうか・・・)
*2008/08/02 [#h1123334]
2DCDPの実行時間を測定するために、大和田君と星野君に協力してもらう。
C2D 1.8GHz (大和田君のやつ) 38.69
P4 3.4GHz (星野君のやつ) 42.92
製造プロセス、クロック周波数がCellに近い、矢口さんのXeonでもはからせてもらった。
Xeon 5160 3.0GHz (65nm) 23.41
そしたら、矢口さんの周りの人たちも計ってくれと言われ、やらせてもらった。
C2D 6600 2.4GHz (65nm) 27.66
C2D T8100 2.1GHz (45nm) 29.62
C2D E8400 3.0GHz (45nm) 21.06
C2D E8500 3.16Ghz (45nm) 18.55
注:単一コアで、非ベクトル化です(涙)
*2008/07/31 [#med396db]
ポスターを急いで作る
筑波大学のHPCサマーセミナーに行くのをやめ、代わりにネット中継を眺める。
http://www.ccs.tsukuba.ac.jp/workshop/HPCseminar/2008/
*2008/07/28 [#jceb7abf]
分岐先のアドレスを計算するのではなく、直前に分岐命令に渡した値をヒント命令に渡すだけでいいということに気づき、PS3で実験。5%-10%ほど性能向上。早速シミュレータにかける(結果は12時間後)
*2008/07/26 [#qbb47bcb]
分岐先のアドレスとして、仮に予測した分岐先を.L10とすると、.L10を渡していたが、どうも実態は、.L10+0x0100にところにあるらしい(なぞ)
とりあえずそれで試してみる。
*2008/07/25 [#yd93327c]
CellSDK2.1にはいっていたxlcでやろうとしたが、ヘッダファイル周りの問題でうまく動かず。gccのヘッダファイルをxlc用に変換しながらコンパイルしてくれるらしいのだが、元々入っているのは3.0なので、そのせいかと思われる。
分岐予測については停滞中
時間について、もうちょっと細かくはかってみた
init 0.010834
Module1,2 1.937619
Module3 0.009668
plot 0.011720
元々のプログラムの実行時間を計りたいけど、3.2GHzで65nm(90nm?)のプロセッサで計測させてくれる人を探す
*2008/07/19 [#mfcc7b16]
分岐ストール自体は20%ほど削減しているが、DMA転送でのストールが大きくなってしまったため、全体としては遅くなってしまった。
*2008/07/16 [#ab93f6b8]
前に分岐予測のコードを挿入して測定したプロファイルは、一番最後の一行分に対してしか結果が表示されていなかったので、全ての行に対して出来るように計測し直したところ、悪化していることがわかった。
bi命令だといずれにせよフェッチが外れているはずなので、少しでも当たれば性能は上がるはずなのだが、もう一度確認する必要があると思われる。
Module3のDMA転送は、最大3パターンということがわかったので、3パターンをあらかじめ読み込み、使わない物は捨てるという方式でやらせてみたところ、性能が10%ほど悪くなってしまった…。一回あたりの実行だと早いのだが。
*2008/07/15 [#af000a2d]
シミュレータで全SPEをPileモードで動かすと、今のプログラムで18時間ぐらいかかることがわかった。
make cleanをしたら、アセンブラでごりごり書いたプログラムまで消えて、泣きたくなった・・・。
*2008/07/13 [#n42a7114]
Module1と2を並列動作するようにする。2.1秒で実行できるようになった。Module1と2で1.99秒、Module3で0.02秒。
*2008/07/12 [#t37a648d]
DMA転送の最適化やまだベクトル化されていない部分を最適化などをして、3.7秒までに落とし込む。Module1と2で3.6秒、Module3で0.02秒
*2008/07/11 [#p3b16b23]
Module2も同様に最適化を加えたが、あまり性能向上せず。
時間を計り直す。Time Base Registerを使った計測だと4.18秒、clock()を使った計測だと3.31秒、timeコマンドだと、real4.28秒、user0.732秒、sys2.677秒。Module1・2でかかる時間が4.02秒で、module3でかかる時間が0.16秒であった。
岩佐さんが作ったプログラムは、Visual Studioの形式になっているため、gccでは実行出来ず。
SPEのプログラムを起動する際を書き換えて、4.18秒から4.02秒に短縮できた。
*2008/07/10 [#l7603c7f]
手で最適化を加えて、19000サイクルを下回った。Module3だけでみれば、5.9%性能向上
*2008/07/09 [#nf896ef8]
どうもシミュレーション用のマシンが死んだっぽい…。
北道先生のお力をお借りして、たぶん大丈夫。
*2008/07/08 [#n2972994]
Module3のbranch missによるペナルティは全体実行時間(20000サイクル)の17.2%ということがわかった。switch-caseにおいて、前のcaseと同じところを予測するようにしたところ、分岐ミスによるペナルティがしめる割合は12.7%まで落ち、1000サイクル削減し19000サイクル程度で実行することができた。
*2008/07/07 [#n9b89f99]
Pipeモードで細かいところまでシミュレーションするように実行させているが、一日半たっても終わらず…。1つのコアだけPipeモードにして、後はFastモードで動くようにしてやり直す。
*2008/07/06 [#v0065fa0]
シミュレータで2DCDPを動かす。Module1とModule2が同時に動いているところは、Module1だけで動き、後にModule2だけが動いているので、この辺を変えるとスピードがあがるかもしれない。
*2008/07/05 [#s0a45151]
シミュレータがうまく動かなかったので、入れ直し。
*2008/06/27 [#e6fb4a95]
SPEの分岐命令に対して、条件分岐の場合は分岐が起こらないと仮定して命令フェッチを開始しているが、間接分岐(switch-caseのような)の命令(bi命令)に対してはどうなっているのかを調査中。間接分岐に対する予測手法も合わせて。シミュレータが必要かも。
*2008/06/20 [#e7d1f8e8]
Module3のswitch-caseの分岐のアセンブラを見る。LSに分岐先のアドレスを格納し、分岐条件の値が決まってからLSからレジスタへアドレスを読み込み、bi命令で分岐している。
*2008/06/13 [#b5064b9f]
Module1全体の流れを追っていき、分岐予測が適応出来そうな部分を把握。Module2,3も同じようにやるつもり。
週末は論文書きを進めようかと。
*2008/06/11 [#w9e42d3b]
Module1の流れがわかってきたので、アセンブラに落として分岐予測を適用できるような分岐を探す。適用出来そうな分岐の構造を一つ見つけたが、早くなるのかどうかはこれから検討。
そっちばっかりやっていて、論文書きは全然進んでいない…(汗
*2008/06/06 [#tb4eeefc]
章立て後、書けるところから書こうとCellのbackgroundから書いていく。
*2008/06/05 [#z5d89861]
2DCDPのソースを読む。PS3のlinuxでemacs -nwやると、なぜかSegmentation faultで落ちる…。
*2008/06/04 [#k83e7756]
論文の章立て、Introductionをちょこっと書く
*2008/06/02 [#w0c6691c]
奥山先生とミーティング
- 2DCDPについて、これまでの理解について
- CELLに最適化された2DCDPのソースを読む
頭が痛いので早めに帰る
*2008/05/31 [#a18cc016]
奥山先生とミーティング
- 2DCDPについて
-- やりたいことはわかったけど、ようわからん。。。
とりあえず、DPから勉強
矢口さんに聞きに行く
- DP -> 1次元DP -> CDP -> Line Image CDP -> 2DCDPの流れで説明をしてもらう
-- なんとなくわかってきたつもり
*2008/05/30 [#sb19cf44]
PS3にFedora8を入れる
- PS3のファームウェアを2.35にアップデート
- PS3 Addon 2008.03.17版をインストール
- rootのパスワードはaslps3
- X関係は最初からインストールしない
- Cell SDK 3.0.0.3をインストール
-- 3.0.0.3は一部のパッケージだけ、bseからrpmをダウンロードしてインストールする必要がある
*2008/05/29 [#gbee72a9]
昨日の続き。VirtualBoxにFedora7を入れる。
- Cellシミュレータを入れたが、予想通り重い
-- Pipeline modeだと、40分たっても起動せず
-- Fast modeだと10分ぐらいで、割と早く立ち上がる
*2008/05/28 [#o2191e16]
とりあえず、Windows入れなおし。
VirtualBoxにFedora9を入れて、Cellのシミュレータを入れようとしたが、
tkのバージョンが新しすぎて入らず…。
- tkのバージョンを落として入れてみたがインストールできず、Fedora7をいれる
ページ名: