2012-01-01から1年間の記事一覧
簡潔に記述したい。TemplateHaskellとかつかう? レコードに型変数持たせて多相にしたい Maybeを意識しないといけない箇所を減らしたい(Control.Lens.Prismをつかえば良いらしい?) Object型以外の型にも特異メソッドを追加できる型をいろいろ作りたい(Objec…
https://github.com/nushio3/practice/tree/master/duck {-# LANGUAGE DeriveDataTypeable #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE Rank2Types #-} {-# LANGUAGE TypeFamilies #-} module Data.Object wh…
(この記事はHaskell Advent Calendar 2012の記事です。)HaskellでReal World Problemを解いていると、オブジェクト指向でいうところのオブジェクトを作りたくなることはよくあります。Haskellでは、だいたい代数データ型とレコード構文がその役割を担って…
いろんなことがあった今年ももうすぐ終わりです。みなさんのcabalにもこの一年の勉強、チャレンジの成果が積もっているのではないでしょうか。反面、衝突を起こして新しいパッケージが入れられず壊れたままになってしまっているかもしれませんね。折しもマヤ…
http://ja.pk.paraiso-lang.org/Hackage/ad/mainそうこうするうちに http://hackage.haskell.org/package/dvda なんてのも視界に入ってきたからこっちも試さんとなー
(愛用していたKinesisのチャタリングが酷くなってきたので黒いのを買ってみた。正直強く叩きすぎた。今度は大事に使おう)
「価格性能比と消費電力効率を極限まで追求した超並列計算機システムの実用化に関する研究」第一回シンポジウムというのに行って、JavaRockという言語でFPGAプログラミングを学び、Pongみたいなゲームを作ってきました。ソース: https://github.com/nushio3/…
シミュレーションを始めるには、まず初期条件を設定できる必要があります。初期条件の場を計算する仕事は、Paraiso式づくりのとっかかりとしても優れています。やってみましょう。サンプルを見てください。 table :: Named (StaticValue TArray Double) tabl…
Paraisoを実用的な問題で試してみましょう。そうですね、生命現象のシミュレーションなどが実用的で良いのではないでしょうか。さっそくサンプルプログラムを見ていきましょう。まずはインポートです。 #!/usr/bin/env runhaskell {-# LANGUAGE NoImplicitPr…
直胞機械のshift命令は配列変数全体を平行移動する命令です。実際のコードが扱う配列変数は常に有限サイズですから、平行移動によりはみ出す部分の処理を境界条件により指定してやる必要があります。Paraisoは、データフローグラフの中のshift命令を解析して…
Paraisoのプログラムは、Builderモナドを組み合わせることで記述します。Builderモナドは、実のところ作りかけのデータフローグラフを状態にもつStateモナドです。それぞれのBuilderモナドは、データフローグラフの頂点をいくつか引数に取って、新たな頂点を…
先輩の関口さんがサイトを作ったらしいが検索にでてこないらしい。どうしたのだろう。 http://sites.google.com/site/yisekig/ などと、google juiceを与えてみるテスト。
それでは、いよいよGPUプログラミングをやってみましょう。C++コードの生成器をCUDA用のもの.に書き換えるのは、実際すごく簡単です。 $ diff HelloWorld/Generator.hs HelloGPU/Generator.hs 40c40,42 < { Native.directory = "./dist/" --- > { Native.dir…
NGS現場の会 第二回研究会に行ってきた。
今回はParaisoが生成するコードの使い方を見ていきます。HelloWorldフォルダでGenerator.hsを実行すると、distというフォルダが作られてその下にC++のヘッダやソースが生成されているはずです。まずはヘッダを見てください。 class TableMaker{ private: std…
Paraisoは、一様メッシュ上での偏微分方程式の陽解法という分野に特化し、その分野の計算を、直胞機械(OrthotopeMachineの訳語、今決めた)と呼ばれる仮想機械のプログラムとして表します。直胞機械は、配列変数とその操作を表現する仮想機械であり、解きたい…
Paraisoの論文がAcceptしました。確かにこれで、偏微分方程式の解法を記述する数式を処理し、並列仮想マシンを経てCPU/GPU向けのコードを生成し、さらに遺伝的アルゴリズムで自動チューンするまでを一つのシステムとして実証するという一歩を進めることがで…
を目指して、銀河白地図をプロットするスクリプトを書いた。 スクリプト本体のチェックアウトはこちら。 生成されるepsファイルも。 こんな感じに仕上がります。
昨日のやつのモナド版を作ってみます。 recMapM :: forall a b m. (Data a, Data b, Monad m) => (b -> m b) -> a -> m a recMapM f x = do let recurse = gmapM (recMapM f) x case cast x of Nothing -> recurse Just bx -> do z <- f bx case cast z of N…
折角ですから、Haskellで新年の挨拶をしてみましょう。以下のコードをMain.hsといったファイル名で保存し、ghciから読み込んでみてください。 {-# LANGUAGE DeriveDataTypeable, RankNTypes#-} {-# OPTIONS -Wall #-} import Data.Data import Data.Maybe(ma…