27. マンデルブロ(普通の計算方法)
複素数配列
実部→
2. 配列についてループ
虚 -2.0-1.0i -1.9-1.0i … 1.0-1.0i
部 -2.0-0.9i -1.9-0.9i 1.0-0.9i
↓ … …
-2.0+1.0i -1.9+1.0i … 1.0+1.0i
1. 要素ごとに漸化式ループ
def mandel_pix(cr, ci)
limit = 30
c = Complex(cr,ci)
z = Complex(0.0,0.0)
for i in 1..limit
z = z**2 + c # 漸化式
return i if z.abs>2 # 条件式
end
return limit
end
2011-7-4 東大本郷 27
28. マンデルブロ(NArrayでの計算方法)
def mandel_narray(c) for ループの途中経過:
limit = 30 (白い部分が計算途中)
w,h = c.shape
z = NArray.dcomplex(w,h)
a = NArray.int(w,h) i=6
idx = NArray.int(w,h).indgen!
for i in 1..limit
z = z**2 + c # 漸化式 (配列ループ)
idx_t,idx_f = (z.abs>2).where2 # 条件式
a[idx[idx_t]] = i
idx = idx[idx_f] i=12
z = z[idx_f]
c = c[idx_f]
end
a[idx] = limit
return a NArrayの使い方のコツ: i=18
end
1. ループの順序を入れ替える
2. 条件分岐にwhere を使う
2011-7-4 東大本郷
i=30 28
29. NArray speed
• Float Array with 106 elements
• Ruby 1.9.2 :
(0...n).map{|i| a[i]*b[i]}
– elapsed time : 180 ms
• NArray with Ruby 1.9.2 :
a*b
– elapsed time : 6.4 ms
• NArray is ~ 28 times faster
2011-7-4 東大本郷 29
66. Gfarm 広域分散ファイルシステム
• 各ノードのストレージを統合
• 統一したディレクトリ空間
• 広域でファイルを共有
• http://datafarm.apgrid.org/
Internet
Gfarm File System
Computer nodes /
/dir1 /dir2
Local Local Local Local Local Local
Storage Storage Storage Storage Storage Storage
file1 file2 file3 file4
2011-7-4 東大本郷 66
75. 依存関係がファイルに書かれている
場合
• File dependency is given as a list written in a file:
$ cat depend_list
dif_1_2.fits image1.fits image2.fits
dif_1_3.fits image1.fits image3.fits
dif_2_3.fits image2.fits image3.fits
...
image1 image2 image3 …
dif_1_2 dif_1_3 dif_2_3 …
•
2011-7-4 東大本郷 75
76. Dependency is given as a file list
• Make:
– 依存関係を記述したファイルから、Makefile を作
成するプログラムが必要
• Rake: ファイルを読み、タスクを定義
open("depend_list") { |f|
f.readlines.each { |line|
name, file1, file2 = line.split
file name => [file1,file2] do |t|
sh “prog #{t.prerequisites.join(' ')} #{t.name}"
end
}
}
2011-7-4 東大本郷 76
79. Rakeにおける動的タスク生成(失敗)
task :A do • task A の実行中に
task :B do task B を生成
puts “B” • しかし task B は実行さ
end れない
– task B が生成される前
end に、すでに依存関係が
task :default => :A 決定
2011-7-4 東大本郷 79
80. Rakeにおける動的タスク生成(成功)
task :A do • 変数 b に、Taskオブ
b = task :B do ジェクトを格納
puts “B” • invoke メソッドにより、
end 明示的に実行
b.invoke • Rake により、動的な
ワークフローが実現
end
task :default => :A
2011-7-4 東大本郷 80
81. 天文データ処理の例
• Montage
– software for producing a custom mosaic image
from multiple shots of images.
– http://montage.ipac.caltech.edu/
2011-7-4 東大本郷 81