No Such Blog or Diary

«Prev || 1 | 2 | 3 |...| 774 | 775 | 776 |...| 1326 | 1327 | 1328 || Next»

ジャケットを新しくする

半年間着続けていた麻のジャケットの袖に穴が開いた(というレベルを超えてるが)ので新しいジャケットを購入.麻のいいのが無かったので今度は普通にウールで.

とりあえず暫く着てみて暑かったらまた麻のでも探すか.

閑話休題.

今日の発表練習は内容がひどかった…… 結局発表者より多く喋った気がする.喉がおかしい.

CPU依存なのか

手元のCPUだと cmovb を使ったプログラムが速いのだけど,別のCPUのマシンで動かしたら jb のが速かった.悩ましい.

とりあえずコンパイラとCPUの気分次第なのでどうのしようもないという結論にしちゃえ.

箱詰め

パッキング問題を解きまくる日々.思ったより箱の数が多くなりそうな予感……

つーか夏タイヤ邪魔だなぁ.

閑話休題.

論文なおすべ.

閑話休題.

キーボードの e の反応が鈍くなってて入力ミス頻発で困る.

コンパイラとの戦い再び

意味的に下のループと等価な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日終わった.はぁ.

締切伸びた

寝る.

古いコンパイラはやっぱお馬鹿よね

クラスタに標準で入っているコンパイラが古い(gcc 4.1.2)せいで,同等の速度のコードにコンパイルされるべき2つのプログラムの実行時間に大きな差が出てしまって困った.手元の環境(gcc 4.6.3)では同じ速さのコードにコンパイルされたのに…… お話が狂ってしまう.

ということで,コンパイラの進化を直に感じた今日このごろ.

«Prev || 1 | 2 | 3 |...| 774 | 775 | 776 |...| 1326 | 1327 | 1328 || Next»
Search
Feeds

Page Top