2012-06-01から1ヶ月間の記事一覧

C++でOpenMPI入門8 一対一でノンブロッキング通信

話がちょっと戻るが, 入門のその6で試したブロッキング通信をノンブロッキング通信を用いてやってみた.http://d.hatena.ne.jp/bettamodoki/20120627/1340797509ブロッキング通信では, 送受信が完了するまでその関数を出なかったが, ノンブロッキング通信では…

C++でOpenMPI入門8 コミュニケータ2

というわけで早速, 2次元座標で前回と同様のことをしてみる. #include <iostream> #include <mpi.h> int main(int argc, char **argv) { MPI::Init(argc, argv); int procs = MPI::COMM_WORLD.Get_size(); int dims[2] = {0, 0}; MPI::Compute_dims(procs, 2, dims); bool per</mpi.h></iostream>…

C++でOpenMPI入門7 コミュニケータ1

前回に続いて, 一対一のブロッキング通信を用いてランク(int型)の送受信を行う. 今度はSendrecvによって, ひとつ隣のプロセスに自分のランクを送信する. 0は1へ, 1は2へ, 2は3への要領. 4プロセス並列の場合, 3はまた0へ送信することで周期的な関係を用いた.…

C++でOpenMPI入門6 一対一のブロッキング通信

並列化のより効率の良い制御をしようとすると, ブロードキャストではなく, プロセス間の一対一の通信が不可欠になる. #include <iostream> #include <mpi.h> int main(int argc, char **argv) { MPI::Init(argc, argv); int rank = MPI::COMM_WORLD.Get_rank(); int send_valu</mpi.h></iostream>…

C++でOpenMPI入門5 構造体のブロードキャスト2

前回, 構造体のブロードキャストをバイト数を用いて行った. この場合, ようするに構造体でもなんでもMPI_BYTEとして送ってしまおうという考え方だが, 他のプリミティブな型と同様に自分の作成した構造体も扱えるようになると便利である.従って次に構造体を独…

C++でOpenMPI入門4 構造体のブロードキャスト1

前回はプリミティブ型であるintをブロードキャストしたが, 複数の型の変数をまとめて同期したいときなどは構造体にしてブロードキャストできると便利. #include <iostream> #include <mpi.h> struct parameter { int seed; double temperature; }; int main(int argc, char **</mpi.h></iostream>…

C++でOpenMPI入門3 ブロードキャスト

お次はブロードキャスト.標準入力から情報を得たいときに, ランクを気にせず普通にやってしまうと, プロセス全てから値を尋ねられて大変な事になる. そこで, 0番目のプロセスでだけ入力を得て, 後は他のプロセスに0番目から教えてやる, という方式をとる. #i…

C++でOpenMPI入門2 サイズ, バリア, リダクション

リダクションを試してみる.以下では各プロセスから各自のランクをリダクションで通信して, そのランクの平均値を求めている. #include <iostream> #include <stdlib.h> #include <mpi.h> int main(int argc, char **argv) { MPI::Init(argc, argv); int rank = MPI::COMM_WORLD.Get_rank</mpi.h></stdlib.h></iostream>…

C++でOpenMPI入門1 ランク

おもむろにOpenMPIに取り組んでみようと思う. FortranやC言語でも情報が散逸しているのが現状のようだが, C++となると基本は同じとは言え, いまいちよくわからん.というわけで, ここにサンプルを示しながら, 勉強していきたい. サンプルはここに従って試して…

gitでリモートレポジトリをbareに変更

gitでローカルのディレクトリから別のディレクトリへcloneして作業した後, pushしようとしたところ, 以下のようなエラーが出てしまい, pushできなかった. error: refusing to update checked out branch: refs/heads/master error: By default, updating the…

Emacsで画面3分割

以下のをまるぱくりしただけのメモです.http://d.hatena.ne.jp/yascentur/20110621/1308585547 (defun split-window-vertically-n (num_wins) (interactive "p") (if (= num_wins 2) (split-window-vertically) (progn (split-window-vertically (- (window-…

EmacsとEightyColumnRuleでソースを読みやすく

ソースコードを書いていると, 1行を80列を渡らないようにすべしという法がある. といっても通常コンソールで作業している分にはちょうどその位置で行が変わるので良いのだが, 画面が広がり, どこで改行すべきか意識しなくなる傾向にある. Lines longer than …

Autotools入門

これが一番わかりやすかった.http://www.spa.is.uec.ac.jp/~kinuko/slidemaker/autotools/Overview.html

g++でのライブラリを指定する順番でハマる

g++で簡単なプログラムを実行するのに, "/usr/lib/libgsl.so: undefined reference to 'cblas_ctrmv'"などのエラーが大量に出て困った.調べると以前までは特に問題なかったが, ライブラリオプションを指定する順番によってエラーが生じるらしい.つまり, "-lm…

verificationとvalidation

以前, ソフトウェア開発におけるverificationとvalidationの使い分けというような話を聞いたのを思い出して調べてみた. Validation とは要求に対して、正しいものが定義されているか否かを検証する際に用いる用語です。 (中略) これに対して Verification は…

matplotlibで図の縦横比に関するあれこれ

matplotlibを用いて図を作成する際に, 縦横比をどうすれば変えられるのか聞かれたのであれこれ考えてみたが, 今ひとつ決定打が無い.方法1. Figure自体の縦横比を指定する. from matplotlib.figure as figure fig = plt.figure(figsize=matplotlib.figure.fig…

UbuntuでPDFの結合と分割

1から4と6ページ目だけのファイルを作る. $ pdftk original.pdf cat 1-4 6 output new.pdf 複数のファイルを結合して1つのファイルを作る. $ pdftk original1.pdf original2.pdf original3.pdf cat output new.pdf http://blog.livedoor.jp/arakusa/archives…