紆余、曲折を経て、

たぶん、これでほとんど仕上がったはず。

久しぶりに、C 言語で書いたもんだからいろいろ忘れていたりした。
例えば、

void do_something(struct spam* s, int N){
    for(int i=0; i<N; ++i)
        (s+i)->member = i;
}

みたいなのにひっかかった。なんという基本的なところだろう。

あとは assert を書きまくった。
こういのを offensive programming っていうんだっけ?
C99 は例外も使えるらしいが、assert で十分だと思ふ。

あとはメモリ使用量。
Mac Pro だと少なくとも4GB×8枚の32GB までは載せられるはずなので 、
潤沢なメモリで計算できるはず。

あとは速度面の改善とかもあって並列化もしないといけない、でもこれは簡単なはず。
メモリ使用量と速度でいくらか書き方のヴァリエィションが存在しうるので、
あとは、branch を作っておくべきかね。

こういう速度測定には、Shark が使えるので便利だわね。

あれだけ、C++ をばかにして C で書くといっていたけど、
使っているのは C99 だったりするのは許されたし*1

でも、C++ で実現したいと思える要素なんてものは全く無い。

*1: for(int i=0; i