Fortran (90以上) を書く時に気をつけると良いこと

ここ1年以上メイン言語は Fortran90 です.ここでは,Fortran そのものに関する賛否はさておき,(個人的に) Fortran でこのように書かれていると良いだろうという話をしていきます *1. implicit none を必ず書く これが何かわからなくてもいいのでとにかく…

autotools の出力について

最近,autotools に苦戦しているのでメモ.autotools を使った時に make のログが以下のように表示される事があるが,これは configure の --enable-silent-rules が有効になっているため. CXX hoge.o CXX fuga.o AR libx.aそれ以外の方法では,configure.i…

カーネルをなんとかして関数テンプレートにしたい

はてなブログに移行しました.そして最初の記事です.最近 Xeon Phi なるものを触ったりしていますが,かなりとても書きづらいというか pragma ベースで書くのは (OpenMP で楽に並列化できるレベルなら良いですが) 決して楽ではないと僕は感じています.なぜ…

ログインシェルが bash/sh 以外で MPI のプログラムを動かすときに環境変数が渡らないときは

MPI

最近,研究室の環境も zsh で動かしています.しかし,MPI のプログラムを走らせるときにどうしても環境変数に頼ってしまう部分があって,そのままプログラムを実行すると環境変数が他のノードに渡らなくてプログラムがクラッシュします.(もしかしたら実装…

MPI ことはじめ資料 (研究室向け)

MPI

この間の高速化,並列化みたいなスライドの MPI 版です.OpenMPI を使う必要があるとのことで,OpenMPI を対象として (といってもビルドと実行方法が OpenMPI 用になっているだけですが) 作りました.C++ と書いておきながらほぼ C です.# MPI は素で書くの…

for のループカウンタがいじれて辛い問題

C++

ぶんちょうさんが Twitter / yutopp: forループで for(int i=0; ...と おっしゃっていたので.boost::for_each(boost::irange(begin, end), [](int i) { ...; }); な書き方は良いんですが,個人的にめんどくさいので for みたいに書けた方が良い.ただループ…

並列化の入門的な資料 (研究室向け)

研究室の大先輩が某所の*1某プロジェクトに入るそうなので,これまで並列化とか高速計算とかあまりやっていないけど,これからやらないとまずいってことだったので,僕が勉強会で教えていました.昨日のうちに slideshare にアップロードしていましたけど言…

Boost.勉強会 #11 で発表してきた

Boost.勉強会 #11 東京 - boostjp茨城の山奥に行ったりとか,書類書いてたりとかして1週間も経ってしまいましたが書きます."CilkPlus, TBB, OpenMP 〜 並列プログラミングを支える技術" という大層なタイトルで発表してましたが,つまるところこの辺のライ…

CilkPlus について

C++

コード書くの疲れたので休憩も兼ねて書きます.知っている人も多いと思いますが,CilkPlus は並列処理を容易にするため,Intel が自社のコンパイラに用意している C/C++ 用の言語拡張です. 元々は MIT で作られていた C 言語用の拡張だったとかなんだとか.…

PLplot でコマンドライン引数にデータファイルを指定する方法

最近 TeX に載せるグラフを書くために Numbers とか使って EPS に変換したりとかしてたのですが, よくある2段組み用に使うと汚くてかなり見づらい.今日とうとう諦めて PLplot を使って描画プログラムを書くことにしました.PLplot Home Page - MainPLplot は …

FreeBSD サーバと Moodle による Web 学習環境

これをやるきっかけは, 大学の1年生が主に使っているシステム (がマウントしているファイルサーバだったかな) が今年度でサポート完全停止でいつ壊れても修理できないそうで, 今学内全体で使うためのクラウドシステムの準備中らしく, その期間安全に使えるシ…

Boost.MPI は実際 MPI_Allgatherv や MPI_Scatterv をサポートできてない

Tutorial - 1.53.0Boost.MPI ドキュメントの "Table 19.5. Collectives" を見てもらえると分かりますが, Boost.MPI では MPI_Allgatherv といった collectives はそれぞれ非 v な collectives でサポートされているかのように書かれています.ちなみに MPI_Al…

Boost.MPI, Serializationで動的確保した配列がメンバに含まれるクラスインスタンスをシリアライズして送る.

できるのかと思ってたんですが, Boost.Serialization のチュートリアルちゃんと読んだら書いてありました.Serialization配列のサイズが分かっていればできそうです.(2013/02/11 追記) 動的確保されたメモリの場合, serialize 関数でメモリ確保は行われないた…

Intel C++ Compiler で C++ 標準ライブラリを使うときに気をつけたいこと

C++

2ヶ月以上ぶりです.最近 Intel C++ Compiler (icpc) を使う機会が増えたのですが, GCC で書いたプログラムを他のコンピュータ (自分でシステム管理ができないタイプ) でコンパイル/実行しようとしたときに躓いたのでメモ.Intel C++ Compiler Linux 版は GCC …

C++ Advent Calendar 2012 「18日 : Cer に知って欲しい C++」

C++

この記事は, C++ Advent Calendar 2012 (C++ Advent Calendar 2012 - PARTAKE) の18日目です.温いネタをやりたいので C 言語を使っている人 (Cer) に C++ の知って欲しい/今すぐ使える機能を Tips 的に書いていこうと思います.対象は特に設けなくていい気が…

Boost.MPI に MVAPICH2 を用いる

Boost.MPI は MPICH や OpenMPI では Default Configuration が良い感じに走って using mpi するだけで問題ないのですが, MVAPICH2 はコンパイラの名前が異なっているため, そのままでは動きません./tools/build/v2/user-config.jam に以下のように書きます.…

Environment Modules で複数のバージョンのソフトウェアを扱う

Modules -- Software Environment Management *1これはユーザーが異なる複数のバージョンのソフトウェアを使用できるようにするために, load/unload を提供して管理を楽にする為のソフトウェアのようです.PC クラスタ(OSCAR Project)などでの運用実績があ…

メモ:jasmine + Coffeescript でテストを書く.

テストと言っていいのか, BDD ではスペックというのが一般的なのかはよくわからないのですが, gem の jasmine でテスト環境を準備したのでメモ.jasmine 自体の説明は公式といい感じのページあったので.pivotal/jasmine · GitHub Jasmineでテスティング | fee…

最近気になるもの

大体 CUDA か GPU 関係.Boost.ODEIntが採択されました - Faith and Brave - C++で遊ぼうODEInt は常微分方程式を解くためのライブラリ. 無条件採択されたらしい. Thrust を使用して GPU で計算もできるとかなんとか.書いてるの反復法といくつかなので使い道…

guard-coffeescript と guard-shell で Coffeescript と jade を自動ビルド

jade だけだったら watch とか使えば良いと思うんですが, Coffeescript も自動ビルドしたい. しかしぱっと見 guard-jade とかなさそう.Coffeescript の自動ビルドは guard-coffeescript でなんとかして頂きたい. ということで jade については自分で書く. $ …

PhoneGap (Apache Cordova) について追記.

この間の闇鍋で PhoneGap について発表したのですが, あの後わかったり, 言うの忘れていたことがあったのでここに書きます. PhoneGap Build Adobe に置いてあるクラウドサービスで, Javascript や HTML をアップロードすれば, それを Adobe 側のサーバでビル…

第2回闇鍋プログラミング勉強会 各発表のスライド

ngx_small_lightを使った画像変換 @cubicdaiya さんの発表. ngx_small_light at 第2回闇鍋プログラミング勉強会 from Tatsuhiko Kubo Intel AVX で SIMD 入門 id:kawa0810 さんの発表. Yaminabe simd from kawa0810 ATL に見る黒魔術 id:egtra さんの発表. A…

第2回闇鍋プログラミング勉強会を開催しました.

第2回 闇鍋プログラミング勉強会 - Togetterまとめ * 9/17 追記: @sters9 さんがまとめてくれました!ありがとうございます!昨日9月15日に闇鍋プログラミング勉強会第2回を開催しました.当日は, 参加者が迷ったりするのはまあ今回の会場が初見の人はいいと…

ある変数がメソッドを呼び出せるかで SFINAE

C++

auto func(...) -> decltype(...) を使えば, 渡された変数がメソッドを持つか持たないかで SFINAE とかできる. #include <iostream> struct memory { std::string to_string() const { return "is memory."; } }; struct device { std::string to_string() const { ret</iostream>…

カーネル関数を分離して C++11 コードをビルド.

nvcc でないとビルドできないのはカーネル関数なので, ここと通常の C++ コードを分離してそれぞれビルドしたオブジェクトをリンクすれば, 普通に C++11 を使ったコードが(カーネル関数以外で)書けるようになる.後, CUDA を使うために必要なライブラリとか, …

わんくま横浜勉強会に参加したら発表してきた話.

わんくま同盟昨日行われたわんくま横浜, nyaocat さんが発表するとのことでふらっと参加するかーと思ったら, 当日 nyaocat さんが風邪で病欠になっており, たまたま居合わせた僕があおいさんに見つかってしまい代理発表させられるすることになりました.別に…

CUDA の CRS spmv についてのメモ

Efficient Sparse Matrix-Vector Multiplication on CUDA | NVIDIA の論文の、CRS spmv vector のメモ。CRS spmv の場合、1行に複数のスレッドが計算したほうが効率がよい。 しかしある行で各スレッドが計算した結果を全て足し算 (parallel reduction) をす…

第2回闇鍋プログラミング勉強会のお知らせ

ようやく会場とか日時とか決まりました。第2回 闇鍋プログラミング勉強会 : ATND日時:9/15(土) 会場:IIJ 東京本社 大会議室1(神保町)希望調査時からご登録いただいた方には ATND にメッセージをお送りしました。発表者がいないので誰か発表しましょう…

gettimeofday よりも clock_gettime よりも boost.chrono.Clock

実行時間を図るとき、posix 系列なら gettimeofday で実行時間を測っていた。だいたいこんな感じ。 #include <cstdio> #include <sys/time.h> double second() { struct timeval t; gettimeofday(&t, NULL); return t.tv_sec + t.tv_usec * 1e-6; } int main(int argc, char** ar</sys/time.h></cstdio>…

Boost.勉強会 #10 に参加しました

Boost.勉強会 #10 東京 - boostjpもう二日経ったけど書く。色々あったけど、最後に書くとして、各発表の感想。 Boost ライブラリ一周の旅 1.45.0 〜 1.50.0 C++Now! 2012 参加レポート local function については、「あれ、auto でラムダ式を束縛すれば良い…