ICFDP

Paraisoでシミュレーションを始める

シミュレーションを始めるには、まず初期条件を設定できる必要があります。初期条件の場を計算する仕事は、Paraiso式づくりのとっかかりとしても優れています。やってみましょう。サンプルを見てください。 table :: Named (StaticValue TArray Double) tabl…

人生っていいもんだ

Paraisoを実用的な問題で試してみましょう。そうですね、生命現象のシミュレーションなどが実用的で良いのではないでしょうか。さっそくサンプルプログラムを見ていきましょう。まずはインポートです。 #!/usr/bin/env runhaskell {-# LANGUAGE NoImplicitPr…

Paraisoの境界条件

直胞機械のshift命令は配列変数全体を平行移動する命令です。実際のコードが扱う配列変数は常に有限サイズですから、平行移動によりはみ出す部分の処理を境界条件により指定してやる必要があります。Paraisoは、データフローグラフの中のshift命令を解析して…

Builderモナド

Paraisoのプログラムは、Builderモナドを組み合わせることで記述します。Builderモナドは、実のところ作りかけのデータフローグラフを状態にもつStateモナドです。それぞれのBuilderモナドは、データフローグラフの頂点をいくつか引数に取って、新たな頂点を…

はじめてのGPUプログラミング

それでは、いよいよGPUプログラミングをやってみましょう。C++コードの生成器をCUDA用のもの.に書き換えるのは、実際すごく簡単です。 $ diff HelloWorld/Generator.hs HelloGPU/Generator.hs 40c40,42 < { Native.directory = "./dist/" --- > { Native.dir…

Paraisoが生成するC++コードのAPI

今回はParaisoが生成するコードの使い方を見ていきます。HelloWorldフォルダでGenerator.hsを実行すると、distというフォルダが作られてその下にC++のヘッダやソースが生成されているはずです。まずはヘッダを見てください。 class TableMaker{ private: std…

はじめてのParaisoプログラミング

Paraisoは、一様メッシュ上での偏微分方程式の陽解法という分野に特化し、その分野の計算を、直胞機械(OrthotopeMachineの訳語、今決めた)と呼ばれる仮想機械のプログラムとして表します。直胞機械は、配列変数とその操作を表現する仮想機械であり、解きたい…

Paraisoで始める数値流体力学

Paraisoの論文がAcceptしました。確かにこれで、偏微分方程式の解法を記述する数式を処理し、並列仮想マシンを経てCPU/GPU向けのコードを生成し、さらに遺伝的アルゴリズムで自動チューンするまでを一つのシステムとして実証するという一歩を進めることがで…