No Such Blog or Diary
gcc の OpenMP で遊ぶ
とりあえずやってみることその一.演算子のオーバロードがダメと言われても試したくなるのが人間.
struct DOUBLE { double x; double y; DOUBLE() : x(0), y(0) { } DOUBLE(int d) { x = d; y = d; } DOUBLE operator+(const DOUBLE& a) const { DOUBLE z; z.x = x + a.x; z.y = y + a.y; return z; } }; DOUBLE a1(int n, DOUBLE *a) { int i; DOUBLE r = 0; #pragma omp parallel for reduction(+:r) for(i = 0; i < n; i++) { r = r + a[i]; } return r; }
コンパイルしたら
error: 'r' has invalid type for 'reduction'
と文句を言われた.だめらしい.
次,中途半端にオーバーロードしてみる.
struct DOUBLE { double x; double y; DOUBLE() : x(0), y(0) { } DOUBLE(int d) { x = d; y = d; } }; double operator+(double a, DOUBLE b) { return b.x - a; } double a1(int n, DOUBLE *a) { int i; double r = 0; #pragma omp parallel for reduction(+:r) for(i = 0; i < n; i++) { r = r + a[i]; } return r; }
コンパイルしても文句言われない.でも演算子の結合性がないので当然ながら結果はおかしい.各スレッドでの結果をマージする部分では通常の + になってしまうので当り前だけど.
ついでに,次の無意味なオーバーロードは正しい計算がされる.
double operator+(double a, DOUBLE b) { return a - b.x; }
結局,全要素に - を map して + で reducction するだけだから.
結論:reduction に演算子オーバーロードはやっぱり使えなかった.でもこうなると行列を for 文で掛けまくるとかいう操作は並列化してくれないのかぁ.行列積自体は結合的だけど展開した式での各要素は reduction の式にならないし.使えん.
- Comments: 0
- TrackBack (Close): -
Xming 続き
最新版を手に入れて試してみたら composite extension 効いてないみたい… 確かに履歴を見ると composite extension を無効にしたという記述がある.こうなったら自前でソースいじろうか?
- Comments: 0
- TrackBack (Close): -
Xming を試す
http://www.straightrunning.com/XmingNotes/
X.Org のソースをベースに Windows native にコンパイルされた X sever とのこと.で,なにやら OpenGL 部分が Windows のを使ってるらしいので速いらしい.試しに Planet Penguin Racer を動かしてみたら少々クリッピングが変だったげど普通に遊べた.
ついでに,composite extension もあるらしいので compiz とかできるかなと思って試したけど… こちらは普通に強制終了してしまいましたとさ.残念.寄付して最新版のバイナリを手に入れようか?
- Comments: 0
- TrackBack (Close): -
Linux を大量にインストールするには?
- 2007-10-25 (Thu)
- ソフトウェア ( Linux/coLinux )
大量の同じPCにLinux をまったく同じ構成でインストールするには・・・
1.通常のインストールディスクを用い,パッケージの選択などを手順書に従い頑張ってもらう
2.必要なパッケージだけを収めたインストールディスクを作って頑張ってもらう
3.HDDのMBRとLinuxのインストール先パーティションを dd でコピー
4.HDD抜き出して丸ごとコピーし,組み立てを頑張ってもらう
どれが一番楽なのか?
- Comments: 0
- TrackBack (Close): -
SRM 373 DIV 1
- 2007-10-24 (Wed)
- プログラミング
体力が尽きているので一番簡単な問題だけ解いて寝なおした.
250点問題:フォントを小さい方から試せばいいだけなのですぐ終わる.
500点問題:チェックしなければならない時刻は,任意の歩行者の組の間隔が車幅になるときと歩行者と横断歩道の開始点との差が車幅になるときなので,これらをチェックするだけ.でも書くのが面倒なので寝た.
1000点問題:螺旋かどうかの判定に線分の交差判定とか考えないといけないから… パス.まあ,判定ができたとしても総当たりでいいのかどうかよくわからん.
- Comments: 0
- TrackBack (Close): -