No Such Blog or Diary

«Prev || 1 | 2 | 3 |...| 1103 | 1104 | 1105 |...| 1350 | 1351 | 1352 || Next»

GCCのOpenMPでboolの和をとると…

C++のOpenMPでは最大値が取れないと言ったら,「boolなら+で最大値取れるじゃん,嘘言うな.」と返ってきた.意味があるかどうかはさておき,確かに出来ることなので実際にやってみた.

ソースは次のとおり.bsにbool値を適当に入れて,それの和をbool変数rに得る計算をreduction(+:r)で並列化する.最後に結果の出力として r を吐き出す.コンパイルはg++に-fopenmpo付けてやった.

#include<iostream>
#include<vector>
 
int k = 2;
int main(int argc, char *argv[])
{
  int n = 10000000;
  std::vector<bool> bs(n);
  for(int i = 0; i < n; i++) {
    bs[i] = i % k;
  }
  bool r = false;
#pragma omp parallel for reduction(+:r)
  for(int i = 0; i < n; i++) {
    r += bs[i];
  }
  int res = r;
  std::cout << res << std::endl;
}

結果:逐次で動かすと1が返ってくるが,OpenMPで並列化したら8コア(スレッド)で8が返ってきた.

普通に考えればrはboolなのでintへの変換時に0か1にしかならないと思うのだけど…,なぜに8? そもそも逐次と結果違うってのもどうかと.なんとなくreductionの結果をとるときにrの型がboolでなくintとかにされている気がする.ま,詳しくはまた今度調べよう.

もう一回休み

このタイミングで人に移すのもあれなので家で大量のしょうがを入れたスープを飲みながら寝る.

一回休み

風邪引いた.咽ががが…

池袋へ買出しへ

とりあえず東大正門から15分弱でサンシャインに着くことはわかった.が,そこから東武までは意外と遠い…

そしてヴィノスやまざきでUelversheimer Schloss Huxelrebe TROCKENBEERENAUSLESE 2005 MANZとかいうのが10本限定とか書かれていたので購入.でも棚には11本あった気がするのはご愛嬌.海外のサイトを見る限りハズレな予感.

瀬佐味亭で黒担担麺・排骨

おいしい。が、辛さは2倍のホットにしたけどまったく辛くない。今度は4倍でいってみよう。

半寸胴鍋購入

でかい鍋は良い.

«Prev || 1 | 2 | 3 |...| 1103 | 1104 | 1105 |...| 1350 | 1351 | 1352 || Next»
Search
Feeds

Page Top