描画班班ゼミ資料

描画班班ゼミ資料
2004/10/27
飛田伸一
今週やったこと
• Sin関数を使えるように努力
– mathlib
• タイマーを使った測定(続編)
– BS法
• Hccプログラミング
– rocket.hcc
• 非線形問題についての考察
• Hcc manualの読み込み
• Hcc 処理系のソース読み
• Grifonのソース読み
• 時間測定についての考察
※多体問題のサーベイはやらなかった
mathlib
• hccのマニュアルではsinなどの三角関数や
random,absoluteなどの数学に関する関数につい
ては何も触れられていない
• srcディレクトリを見るとmathlib.cというファイルがあ
りその中で定義してある。そしてそれをライブラリに
して動的にリンクすることで、これらの関数を実現し
ようとしている
– #LIBRARY mathlibで使えるようにしてある
• ここで定義されている関数は、
sin,pTsin,cos,pTcos,sqrt,pTsqrt,random,absolute,
tan,signなどである
mathlib
• しかし、現在の処理系ではこれらは使えない
• 原因は探りきれなかった
• 試しにexamplesディレクトリのplane.hccを動
かしてみた。
mathlib
• エラーメッセージは以下の通り
– 自分のマシン(WinXP)のcygwinのエラー
dlopen: Win32 error 193
Segmentation fault (core dumped)
– banonのエラー
./bin/hybrid: /lib/libc.so.6: version `GLIBC_2.3' not found (required by ./bin/hybrid)
Exit 1
– brieのエラー
./mathlib.so: cannot open shared object file: No such file or directory
セグメントエラー
139で終了しました
– 自分のマシンのwin版hccでやったときのエラー
dlopen: Win32 error 193
6 [main] hybrid 3272 handle_exceptions: Exception:
STATUS_ACCESS_VIOLATION
1550 [main] hybrid 3272 open_stackdumpfile: Dumping stack trace to
hybrid.exe .stackdump
mathlib
• エラーについては
http://www.skz.or.jp/ir9/sheela/prog/ayu/win32err
.htmを参照すると良いかもしれない
• 色々といじってみたが、結局解決しなかった
• sinなどはシミュレーションにとって非常に重要なも
のであるから、これが使えないというのは大問題
• Uedalabなどに流して助けを求めても良いかもしれ
ない
タイマーを使った測定(BS法)
• 先週、BS法の測定をやっていなかったので
やってみた
– #INTEGRATOR BS
• 条件は先週のスライドを参照
• 使用マシンはbrie
• RKQCとBSでは#INTEGRATION_INITが無
効であるということが判明
タイマーを使った測定(BS法)
• 何故か、ものすごく処理に時間が掛かった
• しかし、タイムを見てみるとそんなに時間が
たったわけではない
• 理由は不明
• グラフ化は全データが集まってからにしたい
planetの多体問題(相互依存)BS
1
2
1
0
0.01
2
0.02
0.03
3
2.14
4.32
4
5.7
11
5
11.15
22.26
6
20.2
40.56
7
32.75
8
65.9
9
178.39
10
254.41
複数のballの運動(依存関係なし)BS
1
2
1
0.01
0.01
2
0.01
0.01
3
0
0.01
4
0
5
0.01
6
7
8
9
10
4
0
0.03
8.8
21.99
46.51
8
0
0.04
17.57
43.16
92.62
16
0
0.05
34.9
85
181.05
32
0
0.05
70.33
171.36
64
0
0.06
141.23
344.98
4
0
0.01
0.01
0.02
0.02
8
0
0.02
0.03
0.05
16
0.01
0.04
0.06
0.09
32
0.02
0.07
0.11
64
0.04
0.13
0.21
0.38
Hccプログラミング
•
•
•
•
rocket.hcc
ロケットが真上に飛んでいくプログラム
2段(多段)ロケットにしたい
詳細はプログラムを参照のこと
– Waitは待ち時間。自分より下のロケットが燃えて
いる状態
– Fireは自分が燃えている状態
– Nofuelは燃料が無くなり、ロケットから切り離され
て落ちている状態
Hccプログラミング
• 課題点
– ロケット間の関係を見るのにはlistが必要。現在のverで
はforallを使って自分の下のロケットを確認しているので、
処理時間がO(n^2)となっている。→lists.hccを参照して勉
強
– フラグを使って状態遷移を制御しているが、現在うまく
いっていない→hccプログラミングの工夫
– 自分よりも上の重さは、今は引数によって与えているが、
自分で計算できるようにしたい
– 自分の高さは、下の高さと自分の長さを足したものだが、
その辺をうまく計算できない
非線形問題についての考察
• とりあえず非線形が何を示すのかが漠然とし
ているのは先週と同じ
• 積分法について少し調べてみて、Euler法や
ニュートン・ラプソン法を使えば非線形方程式
でも解けるという記述は発見した
• では何故非線形問題で解けないものがある
と言われているのか?
非線形問題についての考察
• 結論としてはその辺はまだ良く分かっていないので、調べる
必要がある。
• 教授に聞くのが早いかも知れない
• おまけ:この前RKQCは4次と5次のRKをステップサイズを
見て使い分けていると、中村さんに言ったが、間違っている
ということに気がついた。本当は4次と5次でやってみて、答
えに差が出てきたらステップサイズを動的に小さくするという
方法だった。
• この辺(integrator)については、まとめたものをwikiに載せて
おいた方が良いだろう
(参
考:http://science3.2ch.net/test/read.cgi/sim/948899815/)
Hcc mamualの読み込み
• 7章、8章辺りを読んだ
• ソースも参考にしてみると、かなり分かりやす
かった
• 後で日本語化してpdfか何かにしておく予定
• TRAIL_CHUNK (p22)が良く分からない
Grifonのソース読み(簡単に)
• Grifonとhccの境目辺りを読んでみた
• どこにバグがあるのかを見つけるのが重要
• EclipseのCVSの使用をもう少し効果的にす
ると良い
• Grifonが使えるようになれば、視覚的効果が
期待できる
時間測定についての考察
• 現在の処理系はclock()を使って時間を計っている。
この関数をつかうと、精度は10ミリ秒ぐらいになる
• 若槻さんからgettimeofday()を使ってみてはとの提
案があったのでそれについて考えてみた
• 調べてみたところgettimeofday()は、「CPU時間で
はない」、「機種依存しない」、という特徴があること
が分かった
• clock()はCPU時間で、機種に依存する
時間測定についての考察
• 結局CPU時間でないと、測定時に困るのでclock()のほうが
良いのではないか
• getrusage()というclock()の精度を良くした関数もある
• しかし、精度が10ミリ秒あれば、現行のhccでは困らないと思
われる。何故なら、アニメーションの特性上、長時間hccを動
かさなければならないはずなので、そうなってくると10ミリ秒
の精度があればことが足りるからである
• というわけでclock()でもそんなに問題は無いはず
• 誰か暇な人がgetrusage()を使った処理系を実装
(参考:http://www.super-computing.org/sr8000/timer.html)
来週の目標
• 多体問題のサーベイ(先が見えないので、や
る気が起きない)
• Grifon周り(やっぱりアニメーションがあると
説得力が出てくるため)
• Hccのソース読み
• 来週は地味に