Good introduction and history on Numerical Computation with Guaranteed Accuracy

http://w2.gakkai-web.net/gakkai/ieice/vol6pdf/vol6_09.pdf  This is a must see material on numerical computation. The document describes a history of Prof. Oishi’s research on numerical computation with guaranteed accuracy. Prof. Oishi is well known researcher on Numerical Computation with Guaranteed Accuracy(GA is based on interval arithmetic and it includes error free computation, faithful computation, etc) Theory of GuaranttedContinue reading “Good introduction and history on Numerical Computation with Guaranteed Accuracy”

Haskell のスコープの仕様でハマる

久しぶりに MUDA を更新していて、 以下のようなコードでハマりました. test n = muda n where muda 0 = show 0 muda n = concat [ muda (n-1) , “,” , show bora ] bora = n main = putStrLn $ test 3 これを実行すると、 “0, 1, 2, 3” を期待していたのですが、 0,3,3,3 となってしまいます. C とかと違って、Haskell は関数型だから関数単位でのスコープなので(の解釈で合っているはず)、 bora が参照している n は muda の中の n ではなくてContinue reading “Haskell のスコープの仕様でハマる”

Alchemy too slow…?

LLVM を使って C のプログラムを Flash で動かせるようにした Alchemy がリリースされ、 Alchemy はパフォーマンスが必要なプログラムに向くということで、 ベンチマークを取ってみました. ベンチマークに使ったのは AmbientOcclusion レンダラの C 版. (これを今後は AO ベンチマークと呼ぶ事にしよう) http://lucille.svn.sourceforge.net/viewvc/lucille/angelina/proce55ing/c_reference/ C(gcc4.4 -O3) : 2.6 secs Alchemy : 480 secs(8 分) (参考: 前回のパフォーマンス比較) う、遅すぎ… AS3 版 AO の結果よりもさらに 8 倍も遅い… Alchemy 版は、以下の手順でコンパイルして速度を計りました. $ alc-on $ gcc -O3 ao.c $ time ./a.exe /Users/syoyo/src/flex_sdk_3.2/bin/adl _sb_19448/app.xml 2> /tmp/adl.trace &Continue reading “Alchemy too slow…?”

iPhone 3G = 4.8 GFlops?

genki さんと一緒に, iPhone や iPod touch に載っている ARM プロセッサの VFP(ベクトル浮動小数点ユニット) について調べていました. とりあえず現時点で理解したこと. VFP は一度に演算するベクトル長を指定できる. 浮動小数点ステータスレジスタの LEN ビットにベクトル長を書き込むことで、 FP 命令 (fmuls など)はそのベクトル長ぶんの演算を一度に行うという、ちょっと変態なアーキになっている. 通常の FPU としての利用だと、ベクトル長 = 1 ということ. ベクトル長は単精度だと最大 8 個、倍精度だと 4 個まで設定できる. ただし、ベクトル長ぶんのレジスタバンク(レジスタペア)を消費する. 単精度だと全部で 32 レジスタ(s0 ~ s31)、倍精度だと 16 レジスタ(d0 ~ d16)あるけど、 たとえばベクトル長 4 なら、各命令のオペランドは [s8, s11] などという風に 4 個レジスタを消費する. つまり、こんな感じの動作モデルになる. # ベクトル長  = 1 の場合: fmulsContinue reading “iPhone 3G = 4.8 GFlops?”

CPU performance of Amazon EC2 instances.

ちょっとそろそろ lucille を使ってクラウドレンダリング(cloud rendering) を やってみようかと考えているので、まずは Amazon EC2 のインスタンスの CPU パワーはいかほどか、調べてみました. 測定をした CPU インスタンスは, Standard instances から small, それから High-CPU instances から medium と xlarge です. http://aws.amazon.com/ec2/instance-types/ ベンチマークプログラムは himeno bench, コンパイラは gcc 4.2.3, コンパイルオプションは -mfpmath=sse -msse2 -mtune=native -O3 -DSMALL として、SSE 命令を明示的に使うようにしています(No more x87!). 結果. Instance MFLOPS(larger is faster) ======== ====== small 454.6 c1.medium 1016.9 c1.xlarge(64bit) 1416.6Continue reading “CPU performance of Amazon EC2 instances.”

RenderMan BOF in Japan.

http://info.rendersan.org/2008/11/rendersan3.html RednderMan BOF in Japan is scheduled on Nov 22. I’ll do a talk on lucille in this BOF: TITLE: luiclle global illumination renderer RenderMan capable renderer and Beyond. [Ja] 11/22 に、RenderSan という RenderMan 関係野郎の集まりにて、 lucille について話します. RenderMan もサポートしている lucille レンダラの紹介と、 RenderMan をサポートするのを越えて, これからの lucille の野望などについて話ます. 集まりの詳細はリンク先をご参照ください.

iRender : Global Illumination with iPhone.

I’ve ported ambient occlusion renderer to iPhone as a OpenGL ES application. http://lucille.svn.sourceforge.net/svnroot/lucille/angelina/irender irender.tar.gz (project files) The renderer core itself is simple and I already ported it to many platforms. – Proce55ing – Flash10 – JavaScript – Performance comparison Unfortunately I haven’t real iPhone, so I just tested that the renderer runs correctly in theContinue reading “iRender : Global Illumination with iPhone.”

[Problem] Vector swizzle in AVX.

Swizzling vector element(e.g. v.xwvz) in AVX requires a bit sophisticated solution because there’s no single instruction to do it. We have to swizzle vector element with combination of shuffle, permute, blendv instructions. It is like a puzzle solving, thus I need time to solve it optimally. To derive my own solution, I’ve searched and collectedContinue reading “[Problem] Vector swizzle in AVX.”

Eagle eye is rendererd with Arnold

映画イーグルアイで GI レンダラ Arnold が使われたということで、観てきました. http://www.eagleeyemovie.com/intl/jp/ … ほーほー、なるほどこいつに使われているわけね、 これだとたしかに prman じゃやりにくそうだから Arnold にしたのかな? なるほどなるほど… より詳しいメイキングは、ここらへんで手に入ります. http://vfxworld.com/?atype=articles&id=3779 http://www.fxguide.com/article501.html http://digitalcontentproducer.com/mil/features/step_eagleeye/ メイキングを見ると、あのシーンでも使われていたようです. ちなみに、とあるレンダラ野郎に言わせれば、Arnold は漢なレンダラとのこと. まあたしかにそういわれればそんな気もします. 下手な小細工しないで、一直線なレンダラが長期的にはいいのかもしれません.

Introduction to type inference

JS 実装をしようかな、と思い立ち、 まずは型推論の知識をしっかり取得するところから初めようと考えています. そもそも、型推論とはなんぞや、というところからおさらいしてみます. 私が型推論について知りたいことの一番の目的は、 「型推論を行うことで動的言語の事前コンパイルを可能にしプログラムの実行を早くすることができるのではないか」, ということになりますので、それに特化した内容になっています. もちろん型推論には、プログラムを早くするという以外の目的もありますが、 ここではそれらは取り上げないことにします. 型推論(type inference)とは、簡単に言うと、 var muda = 7 というコードがあったら、 「変数 muda って Int 型(整数型)じゃね?」 とコンパイラがよろしく変数の型を決定してくれる(推測してくれる)機能になります. 静的な関数型言語(Ocaml, Haskell)などでは、変数(関数)には型を通常プログラマが指定しませんが、コンパイラが型推論を用いて型を割り付け、文法にエラーが無いかの判断などに使ったり、最適なアセンブラコードの選択に使ったりします. 動的言語でも、この型推論を行うことで、実行時にエラーが起きるようなスクリプトを、あらかじめ実行前にエラー判定したり、実行前に型が不変であることが分かれば事前にコードパスを特定の型に特化してコンパイルすることで、実行時の処理速度を上げることができます. たとえば, def muda(a): print a muda(10) というようなスクリプトがあった場合、muda() 関数の引数 a の型は int しかとらないことが分かるので、int に特化したネイティブコードをあらかじめスクリプト実行前(JIT コンパイルでもよし)に生成することができます. 型推論のアルゴリズム では実際に、型推論ってどうやればいいのでしょうか? 推論っていうくらいだから、なにか AI みたいなことをするのでしょうか? (実はしません) ひとまず型推論のアルゴリズムについて調べてみました. Hindley-Milner 関数型言語向けでは、Hindley-Milner のアルゴリズムが基本になるそうです. Damas, Luis & Milner, Robin (1982),Continue reading “Introduction to type inference”