将来課題

簡潔に記述したい。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…

Simon Peyton-JonesがPFIにやってくる!

http://www.ustream.tv/recorded/17411671 (本編は31:46頃から) Simon先生が「そっちの話も何か聞かせてよ」というので不束ながら前座をつとめさせていただくことに。サイモンさんはすごく気さくで何事にも前向きな人(あの台風でも却ってはしゃいでいた位…

Paraiso 0.1.0.0公開

あの日胸に抱いたのは、ささやかな希望と憧れ。訪れたのは、速すぎるコードと尽きせぬ課題。 http://hackage.haskell.org/package/Paraiso-0.1.0.0 うごごご・・・以前はただ文字列の結合でコードを生成していたバックエンドまわりを大幅に強化し、データフ…

ParaisoにDead Code Eliminationを実装

劇的ビフォー/アフターほんとはHoopl使いたいんだお・・・ でも今の俺じゃ歯が立たないお・・・ だからまずは基本的な最適化を自前で実装するお!!!renumberのところがちょっとApplicative使って綺麗に書けたのはうれしかった newNodes = catMaybes $ fma…

ICFPC2011 マルチスレッド版LTGモナド

未だにICFP programming contest 2011の余韻から抜け出せないでいます。打ち上げでもいろんなプログラマーやジャッジ側と交流ができて楽しかったです。さて、その打ち上げ当時から「1ターンで殺してゾンビ化して次弾Getまで出来るよね」「それで浮いたター…

ICFPC2011 参加記録

ICFPコンテスト2011に参加してきました。近年は予定がかぶったりでまともに参加できていませんでしたが、今回は久々にちゃんと参加できました。実は遠隔でなく泊まり込みで参加するのは初めての体験です。ひとまず実装や作戦の詳細に関してはチームのページ …

流体力学 on Paraiso が かんせいした!

クリックすると動画に飛びます見よ!流体力学ソルバーのParaiso実装を! cell2 <- proceedSingle 1 (dt/2) dR cell cell -- まず時間1次精度でdt/2だけ進めておいて、 cell3 <- proceedSingle 2 dt dR cell2 cell -- それを使ってもとの量をdtだけ進める。 …

Arch Linux

継ぎ目すら無い美しいローリングアップデートで評判のArch Linuxを主力採用してみようかと思うが、アーチの本ってなんかあるんだろうか。ぱっと見つかったのは Arch Linux Handbook 2.0: A Simple, Lightweight Handbook作者: Dusty Phillips出版社/メーカー…

Paraisoうごきはじめた

Paraisoでとにかく何か動いているように見えるものが生成できるようになりました。 https://github.com/nushio3/Paraiso/遊び方はREADMEに書いてあります。ライフゲームのルールを記述したソースはこれで、本質的なとこだけ抜き出すと adjVecs :: [Vec2 Int]…

それは、数値計算の概念を変えてしまうような出会い。それは、新たなるプログラミング言語の始まり。

Data.Traversable

みなさんいかがお過ごしでしょうか。きれいな象さん本が出た昨今、皆様におかれましても急速にHaskell熱が高まっておられるものと思います。え?高まってない?KY*1 さて、象さん本を読んだことで僕もFunctor, Applicative, Monoid, Monadといった型クラスが…