No Such Blog or Diary
ジャケットを新しくする
- 2013-02-20 (Wed)
- 一般
半年間着続けていた麻のジャケットの袖に穴が開いた(というレベルを超えてるが)ので新しいジャケットを購入.麻のいいのが無かったので今度は普通にウールで.
とりあえず暫く着てみて暑かったらまた麻のでも探すか.
閑話休題.
今日の発表練習は内容がひどかった…… 結局発表者より多く喋った気がする.喉がおかしい.
- Comments: 0
- TrackBack (Close): -
CPU依存なのか
- 2013-02-19 (Tue)
- 一般
手元のCPUだと cmovb を使ったプログラムが速いのだけど,別のCPUのマシンで動かしたら jb のが速かった.悩ましい.
とりあえずコンパイラとCPUの気分次第なのでどうのしようもないという結論にしちゃえ.
- Comments: 0
- TrackBack (Close): -
箱詰め
- 2013-02-18 (Mon)
- 一般
パッキング問題を解きまくる日々.思ったより箱の数が多くなりそうな予感……
つーか夏タイヤ邪魔だなぁ.
閑話休題.
論文なおすべ.
閑話休題.
キーボードの e の反応が鈍くなってて入力ミス頻発で困る.
- Comments: 0
- TrackBack (Close): -
コンパイラとの戦い再び
- 2013-02-17 (Sun)
- 一般
意味的に下のループと等価な2種類のプログラムをコンパイルして,出てきたバイナリの実行時間に差が出て泣いた.
for(int i = 0; i < n; i++) r += (x[i]&1) ? x[i] : x[i] + x[i];
Expression templates 使いまくってるのでコンパイラのコントロールが難しいのだけど,とりあえずアセンブリ眺めて原因調査してどうにかした.
アセンブリを比べて最初に気づいた実行時間の差の原因は,内側の条件分岐をジャンプ命令で処理するか条件代入命令(cmov)で処理するかの違いだった.どのタイミングで cmov になってくれるのかはよくわからないが,この式のもとになる関数オブジェクト(この中では if を使っている)をゴニョゴニョ書き換えたら cmov になってくれた.
んで,これで速度おなじになるだろうとか思ったら,未だ微妙に違いが残ってて…… よく見比べてみたら,一方では r をメモリに書き戻しているのに対し,もう一方ではメモリに書き戻してないとかいう罠が発生してた.この差は,上記のループの外側に単純な if 文をひとつ置くだけで生じる.ということで,きっと if 文が何かの解析の邪魔になるんだろうなぁとか思って,その条件式を静的に判定できるときには if文を無くすように書き換えてみたら差がなくなってくれた.
とかいう戦いをしたら1日終わった.はぁ.
- Comments: 0
- TrackBack (Close): -
古いコンパイラはやっぱお馬鹿よね
- 2013-02-15 (Fri)
- 一般
クラスタに標準で入っているコンパイラが古い(gcc 4.1.2)せいで,同等の速度のコードにコンパイルされるべき2つのプログラムの実行時間に大きな差が出てしまって困った.手元の環境(gcc 4.6.3)では同じ速さのコードにコンパイルされたのに…… お話が狂ってしまう.
ということで,コンパイラの進化を直に感じた今日このごろ.
- Comments: 0
- TrackBack (Close): -