プログラミング

本日のMTG指摘

CG書けば 早く動かせ 全くでございます。

sched_setaffinityで特定のCPUにプロセスを固定する

タイトルの通り。 #define _GNU_SOURCE #include <sched.h> /* 略 */ int rank; /* プロセスのランク */ int proc; /* プロセス数 */ cpu_set_t mask; CPU_ZERO(&mask); CPU_SET(rank % proc, &mask); sched_setaffinity(0, sizeof(mask), &mask); D_GNU_SOURCEを忘れ</sched.h>…

mdのSPMD化

もっとローカリティを出さねばならない。 セルごとに27方向のキャッシュを持つ=無駄が多すぎるけどとりあえずこれで実装するしかないかな。 縁だけをちゃんと自分の配列の縁にうまく配置する。domainのナイスな機能でできたらいいけど… とはいえブロック分割…

1/14日メモ

今日の先生からの指摘は特に気になったのでメモ 結局DMIの処理と一緒じゃないの? DMIでDMI_group_read()をINVALIDATEキャッシュで実行して、実際に必要な値をDMI_read()で取ってくることを考える。 こうすると、最初にまとめてローカルに持ってくる=通信のa…

2011-01-07の指摘点

HPF (High Performance Fortran)は通信のaggregateをしているのでは?調べてみてもいいかもしれない。 Inspector / Executorとの違いは?(確かに初回にこれを作ってやっているところが同じなので)

卒論のBNF

もっとちゃんとrangeというものを扱えるといいんだけど、こればっかりはなんとも。 slice-expr := identifier '[' range-expr-list ']' sync-target := slice-expr ( ',' sync-target ) ? range-expr-list := range-expr | range-expr ',' range-expr-list r…

卒論の実装方針 - 完全なメモ書き

まず CC -M でプリプロセッサを処理してもらう。 とりあえず sync (sync-target-expr) { ... } を探す。 sync-target-expr は例のあれ。 braceの内側はforやwhileなどのstatementか、式か宣言が入る。 そこで、statementを読もうとする。 hoge;のようであれ…

Chapelメモ - 5

書いてるプログラムがいよいよ排他制御が無いとまともに動かなくなつて來たので、ここで排他制御に触れよう。Chapelには排他制御の爲にsync變數とsingle變數がある。どちらも型に附け加へることで宣言する。 var A: sync int; var B: single int; sync變數 s…

Chapelメモ - 4

dmapな配列 Chapelで普通に配列を宣言すると、單一ロケール上の配列ができる。共有メモリ上の普通の配列といふことだ。 しかしPGAS處理系を名乘る以上、(假想的な)分散メモリ上にデータを配置することも可能である。こんなふうに書けばいい。 const Space = …

Chapelメモ - 3

配列を気軽に作らない プログラム中で気軽に var xyz: [1..3] real;とかしてたら死ぬほど時間がかかったので、 var xyz: 3*real;に変えたところC言語の10倍以内のスローダウンで済んだ。しかしそれでも遅すぎるのでC言語の二倍以内にはなって欲しいところ。 …

Chapelメモ - 2

前置き さうさう、云ひ忘れてゐたけれど、Chapelと云ふのは竝列言語處理系の一つであり、その中でもPGASと呼ばれる部類に入り、MPI等より高水準・高生産な言語である。http://chapel.cray.com/で色々ダウンロードしたりできるので試してみたい方はどうぞ。 …

Chapelメモ - 1

Chapelの仕様を読んでいて気になった部分をメモしていく。 zipとtensor zipが次。 for (i, j) in (1..3, 4..6) do write(i, " ", j, " "); これは 1 4 2 5 3 6 と表示される。 一方tensorは次。 for (i, j) in [1..3, 4..6] do write(i, " ", j, " "); これ…

Pythonのジェネレータを再帰的に呼ぶ

かなり便利な気がする。 class Hoge: def __init__(self, array): self.array = array def parse(self, suf=""): while len(self.array) > 0: s = self.array.pop(0) if s=="(": string = s+suf in_paren = (i for i in self.parse(suf+"x")) yield string f…

疎行列の表現方法 その3 Matrix Marketの詳細

もっと真面目にMatrix Market形式のヘッダについて書いてみようと思う。 まず前提として、Matrix Market形式ではスペースの個数とか大文字小文字の区別はない。で、ヘッダは1行目。 ヘッダの概要 %%MatrixMarket matrix <format> <field> <symmetry> format フォーマットは疎行列形式</symmetry></field></format>…

CCS的にソートされたMatrix MarketのCRSへの変換 もくろみ

今計算しようとしている行列は実はこんなのだ %%MatrixMarket matrix coordinate real symmetric N N lines 1 1 val 2 1 val ... m 1 val 2 2 val 5 2 val ...symmetricはともかく、これだと縦分割になってしまって、横分割を基本とするCRSには適していない…

疎行列の表現方法 その1 Matrix Market

現在疎行列ベクトル積のプログラムを書く途中なので、よく使われる疎行列の表現形式の一つである(らしい)Matrix Market形式(略してMMらしい)のリファレンス*1を参照しつつ適当に翻訳っぽいものをしてみる。 Introduction 疎行列の座標形式(Coordinate Form…

疎行列の表現方法 その2 Rutherford Boeing

本当はTim Davis: SuiteSparse Matrix Collection : sparse matrices from a wide range of applicationsを計算する予定でMatrix Market記法を見てみたのだけど、どうもCRSに向いてないような気がしてきたのでもう一つの使用されている形式であるRutherford …

psm後始末

clone時にスレッド(pthread)を起こす そのスレッドはpthreadのcond_waitで待っている フラグが立てば(ぬるぽ->ポインタとか)起きる 空いているか、調べる 空いているかを返す(どうやって?) 返すのも共有メモリ経由しかないよね。 cloneするときに管理用領域…

automakeがまったく分からん

なんかあるらしい autoscan autoconf automake だがどこからどこまでが誰の領域かまったく分からない。

鉄道運賃計算プログラムの設計その1

とりあえずその1とか書いてるだけで特にその1に意味はないです。 言語は?アーキテクチャは? 現在のところC++で記述する予定。対象のアーキテクチャはLinuxを主眼に置くが限定はしない方針。 駅などのデータベースは何を使うのか? sqlite3を使う予定。ただ…

運賃計算

計算だけでも相当面倒くさい まずは普通にテーブルを引く 本州か三島か 地方線かどうか ループを構成していないか ループだけなら問題ない? 特定市区内か 大都市近郊区間か 特例運賃か 経路特定か 他にもまだあるはず。 駅のテーブル csvからSQLiteにでもす…

cloneの引数

スレッド? -プロセス間で共有できるメモリの使い方を教えてください。- C言語・C++・C# | 教えて!gooで触れられているとおりcloneの引数にSIGCHLDを付け加えることで親がwaitしてやることができるようになる。これはman cloneにも載っていなくて俺はわざわ…

psmの実装方針

とりあえず実装方針を@xharakenに相談して次のことを決定した。 psm_mmapの管理領域について まずmmapされたアドレスの一覧が必要。 プロセスのメモリ空間に取る。これを共有すると死ねる。 ちなみに後で子供がmmapできるようにするときにこの情報の更新もさ…

PSMの複数mmapの実装

現状 現時点での実装はmmapが呼ばれたらftruncate(size)するだけなので1つの領域を確保することしかできない。この場合とても簡単で プログラマ側が確保サイズの同意をとれば、ライブラリは何も考えなくていい。 管理領域もまったく共有する必要はない。 目…

なんか役に立つもの

strace プログラム中で strace commandとかしてやれば、システムコールの呼び出しを拾ってくれる。 strace -f -F commandってしとかないとforkの子を拾ってくれない? コアダンプ ulimit -c unlimited commandでコアダンプがとれるので、gdbの--coreオプショ…

実装してみた

とりあえず実装した。 当然なんだけどshm_unlinkし忘れてたから次に起動したときにどんどん状態が積み重なってしまってやれやれだった。 なんかtako(64bitの鯖)で動かしたら子がSIGSEGVする。なにやら psm_mmap(); 以後に fprintf(stderr, "hoge", ...); …

PSMのmalloc実装ロードマップ

次のように実装していくべきかな 親だけがmallocを一回だけ呼ぶ。 つまりshmの識別子名は一意でおk。 メモリアドレスはプロセス間で違うかもしれない。 親だけがmallocを呼ぶ。複数でもいい。 shmの識別子をころころと変える。 誰かが割り当てられたメモリ…