投稿

1月, 2012の投稿を表示しています

OpenMPI

授業で必要だったので、 MacBook で OpenMPI を使ってみました。 使う前に「あぁ、でかいなぁ」とか思う感じで。 インストール とりあえず OpenMPI をインストール。 安定の MacPorts ……ではなく、そろそろ Homebrew にしてもいいかなぁとか考えてます。 ……が、MacPorts で。 sudo port install openmpi とかそんな感じで。 めっちゃ時間取ります。測ってはいませんが、体感時間は20分とかでした。 超絶。ずっとMacBookがあほみたいに悲鳴上げます。port のせいなのですかねぇ。 MacBook Pro の Core i5 ですが。 使用 open mpi のコマンドがいくつか。 openmpig++ openmpicc openmpirun とかあります。 使うのはC言語なので、 openmpicc でコンパイル。 その後、 openmpirun -np 5 のように実行します。実行時は上記の場合5スレッドで、同じプログラムを動かします。 なのでSPMDでコードを書くのになれないといけないようです。

Windows 7 でのCapsLock を Control に

イメージ
レジストリをいじるので、Windows の挙動がおかしくなるかもしれません。 自己責任でお願いします。 レジストリエディタ スタートメニューから検索で regedit と検索し、 regeedit.exe を起動。 レジストリエディタが起動します。 編集 左側のフォルダを、 HKEY_LOCAL_MACHINE→SYSTEM→CurrentControlSet→Control→Keyboard Layout と降りていき、Keyboard Layout の上で右クリック。 下に2つほどフォルダが見えるけど気にしなくていいです。 そこから、 新規→バイナリ と選んで、Scancode Map と名前をつけます。その後そのファイルを開き、 値のデータ欄に 0000 00 00 00 00 00 00 00 00 0008 03 00 00 00 1D 00 3A 00 0010 00 00 00 00 00 00 00 00 0018 と入力し、OKをクリックしてPCを再起動します。 参考 <http://www.papepopc.com/windows7/2009/11/0003.html> <http://uguisu.skr.jp/Windows/winCaps.html>

相互インクルード対策

C++ を使っていて、相互にインクルードしなければならない状況が起きた。 相互にインクルードするとたくさんエラーが出たので片方を抜いた。 そうすると、片方は定義されておらずもう片方が多重定義、みたいな状態に。 Task.h taskQueue.h 以外にもソースファイルがあるので、それらも関係して多重定義担っている模様。 In file included from taskQueue.h:1, from Run.h:2, from Run.cc:5: Task.h:24: error: ‘taskQueue’ has not been declared In file included from Run.h:2, from Run.cc:5: taskQueue.h:5: error: expected unqualified-id before ‘[’ token In file included from Run.cc:6: Task.h:4: error: redefinition of ‘class Task’ Task.h:5: error: previous definition of ‘class Task’ 修正前 taskQueue.h #include "Task.h" class taskQueue { Task task; } Task.h #include "taskQueue" class Task { taskQueue task_list; } と言った感じ。 どうにもエラーが取れないので、いつも通り Google 先生にお伺いを立てる。 こういったページを見つけた。 <http://d.hatena.ne.jp/arvitos/20090213/1234519302> これを解決するには、前方宣言という方法を使う必要があるらしい。 という訳で、上の2つのファイルを修正。 修正後 taskQueue.h class Task; class taskQueue { Task task; } Task.h class taskQueue; class Task { taskQueue task_list

マルチブート

Ubuntu と Windows 7 のマルチブートしてたんだけど、親も使うということなので Windows 7 のみにしようとして行った作業。 MiniTool Partition Wizard Home Edition を使って Ubuntu のパーティションを削除して、はいさようなら。 というわけには行きませんでした。 再起動すると、 grub rescue > なんてものが。 なんだろう、と思ってとりあえず Google さんにお尋ね。 ここを参考にすると、 <http://blog.livedoor.jp/braahmana/archives/1590075.html> するとどうやら、boot loader を Ubuntu の grub が乗っ取ってるっぽい。 一応、 grub rescue > ls で見たあと、 grub rescue > (root partition)/boot/grub とかで選べるっぽいが、Ubuntu のパーティション限定。 自分は Ubuntu のパーティション消したから手遅れ。 なので別の手はないかな、と調べてみたら、 <http://anond.hatelabo.jp/20091031011858> に行き着いた。なるほど。 という訳で、 言われたとおりに ・Windows 7 のインストールディスク投入 ・言語、時間、キーボード ・左下の修復ツール ・完了を押す ・「コマンドプロンプト」を選択 そして開いたコマンドプロンプトに、 bootsect /nt60 ALL /mbr といれると成功。