No Such Blog or Diary

«Prev || 1 | 2 | 3 |...| 960 | 961 | 962 |...| 1349 | 1350 | 1351 || Next»

寒いので

風邪予防にねぎと鶏肉のシチュー.どっちも特価だったし.

そろそろワイシャツを長袖にチェンジ.黒い.

冬用ジャケット用意

前回の旅で冬の寒さに結構ダメージを食らったので冬用ジャケットをゲットした.

ドリームからホンダのカタログが来てたので,車体の色に合わせて Super Bold'or ウインターA/Wライディングブルゾン ベーシック TN-M3M の黒赤で.デフォルトだと胸部のプロテクタがないので ボディプロテクター セパレート TH-L91 も追加.

うーん,胸部に比べると他の部分のプロテクタが弱い気がしなくもない.バックプロテクターは別にあったほうが安心かねぇ.

ついでにメンテスタンド入手.これでチェーンを掃除できる.

雨やまねーかなぁ…

dot2tex が良いかも知れない

dot (Graphviz) でグラフ描いて TeX の文章に張り付けたけどラベルが汚いなぁ… とか思ったので,ラベルを TeX で書けるものがないか探して見つけた.dot を読んで tex (PGF/TikZ/PSTricks) を吐き出すので,あとは適当に eps に変換すれば TeX ラベルのグラフが手に入る.

インストールは sudo apt-get install dot2tex とかで可能.インストールが楽な点も素晴らしい.

ノードのサイズに対して文字のサイズをうまく調整するやり方が分からなかったり,描画例としてあがっているやつのコンパイルができなかったり,微妙に細かい調整部分がまだ掴みきれていないけどとりあえずは使えそう.

3000キロ

自転車のオドメーターが3000キロを突破してた.記録によると2006年4月28日に手元に来たらしいから,4年半でようやく3000キロ達成.

もう一つの軽い折りたたみの方は930キロだった.こっちは2年弱だった気がする.

とりあえず,平均で年に850キロ程度は走っているらしい.1日平均にすると2.4キロなので大したことない距離だなぁ.平日毎日14キロ走って学校通ってた頃が懐かしい.

TeX で普通に記号を書きたい

\textbackslash, \textasciitilde, \textasciicircum, \textdollar, \textasteriskcentered など.

忘れた頃に必要になるのでメモっておく.

lastprivate の罠

OpenMP の parallel for でローカルの値を外に持ち出す指定のひとつ lastprivate の意味を間違って覚えていると罠にハマる.last private であって last assigned private ではなかった.

下のようなプログラムを書いた.いつでも 2 が表示されて欲しい,つまり,lastprivate指定の変数は最後に代入された値を外に持ち出してくれると期待していた.

#include <omp.h>
#include <iostream>
 
struct mystruct {
  int f;
  mystruct() : f(-1) {}
  mystruct(int f) : f(f) {}
};
 
int main(int argc, char *argv[])
{
  mystruct ms(1);
#pragma omp parallel for lastprivate(ms)
  for(int i = 0; i < 4; i++) {
    if(i == 2) {
      mystruct msi(2);
      ms = msi;
    }
  }
  std::cout << ms.f << std::endl;  
  return 0;
}

が,実行してみると以下のような結果になった.

> OMP_NUM_THREADS=1 ./lastprivate 
2
> OMP_NUM_THREADS=2 ./lastprivate 
2
> OMP_NUM_THREADS=3 ./lastprivate 
2
> OMP_NUM_THREADS=4 ./lastprivate 
-1

何かというと,lastprivate指定の変数は最後のプロセスの持つローカルな値をグローバルにコピーしてループを終了する,という仕組みであったと.確かにOpenMPの仕様にはそう書いてあるし,逐次実行時に最後に実行される反復で値を代入しない場合にはオブジェクトの初期値になっちゃうよ,とも書いてある.上のプログラムでの最終反復(i = 3)では変数 ms に値が代入されないため,その初期値(-1)になってループ終了と.

うーん,find みたいに最後に条件を満たすインデックスを探すとかいうループすらもOpenMPだと簡単に書けないのか… (FORTRAN なら MAX での reduction 指定ができるので可能だけど).

lastassignedprivate とかいうディレクティブの方が使い勝手が良いと思うのは気のせいだろうか? 変数についてフラグ一個持てば直ぐに実装できるのに… とりあえず OpenMP の reduction の制限がきつすぎるのが良くない.

«Prev || 1 | 2 | 3 |...| 960 | 961 | 962 |...| 1349 | 1350 | 1351 || Next»
Search
Feeds

Page Top