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で特異メソッド

(この記事はHaskell Advent Calendar 2012の記事です。)HaskellでReal World Problemを解いていると、オブジェクト指向でいうところのオブジェクトを作りたくなることはよくあります。Haskellでは、だいたい代数データ型とレコード構文がその役割を担って…

cabal大掃除

いろんなことがあった今年ももうすぐ終わりです。みなさんのcabalにもこの一年の勉強、チャレンジの成果が積もっているのではないでしょうか。反面、衝突を起こして新しいパッケージが入れられず壊れたままになってしまっているかもしれませんね。折しもマヤ…

自動微分なるものをしてみんとてするなり

http://ja.pk.paraiso-lang.org/Hackage/ad/mainそうこうするうちに http://hackage.haskell.org/package/dvda なんてのも視界に入ってきたからこっちも試さんとなー

激しき闘いに毀れし刃は今くろがねに生まれ変らん

(愛用していたKinesisのチャタリングが酷くなってきたので黒いのを買ってみた。正直強く叩きすぎた。今度は大事に使おう)

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

「価格性能比と消費電力効率を極限まで追求した超並列計算機システムの実用化に関する研究」第一回シンポジウムというのに行って、JavaRockという言語でFPGAプログラミングを学び、Pongみたいなゲームを作ってきました。ソース: https://github.com/nushio3/…

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モナドは、データフローグラフの頂点をいくつか引数に取って、新たな頂点を…

せきじいのサイト

先輩の関口さんがサイトを作ったらしいが検索にでてこないらしい。どうしたのだろう。 http://sites.google.com/site/yisekig/ などと、google juiceを与えてみるテスト。

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

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

NGS現場の会 第二回研究会に行ってきた。

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

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

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

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

Paraisoで始める数値流体力学

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

脱・星座もわからない天文学者

を目指して、銀河白地図をプロットするスクリプトを書いた。 スクリプト本体のチェックアウトはこちら。 生成されるepsファイルも。 こんな感じに仕上がります。

Scrap Your Boilerplate ことはじめ2

昨日のやつのモナド版を作ってみます。 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…

Scrap Your Boilerplate ことはじめ

折角ですから、Haskellで新年の挨拶をしてみましょう。以下のコードをMain.hsといったファイル名で保存し、ghciから読み込んでみてください。 {-# LANGUAGE DeriveDataTypeable, RankNTypes#-} {-# OPTIONS -Wall #-} import Data.Data import Data.Maybe(ma…