Home > Archives > 2009年06月

2009年06月

CMOVLとかあったのね

コンパイルされたアセンブリ見てたら CMOVL とかいう命令が使われてた.conditional move if less の意味らしい.つーかこんな命令今まで気にしてなかったけど存在してたのね.

http://www.asmpedia.org/とかx86の命令が色々書いてあって便利そう.

さてどうしてか

同じように書いたコードが倍の速度差になる.テンプレート関数を手で展開したのと,元のままにしたものとで,なぜか手で展開したほうのが倍遅い….答えが同じなので同じ計算をしているはずなのだが,何か最適化の聞き具合が違うのだろうか? なぞだ.

ようやく64bitでも頭よく最適化してくれるようになった

const だからコピーしまくっても最適化時にひとつになるだろう、とか思って手を抜いた実装になっていた部分をコピーが無くなる様に改善した.そしたら無駄なことしない最適化されたコードを吐いてくれるようになった.

……あれ? 手で最適化しただけの様に思えてきた…… ま,いっか.

const 万歳

色々付けまくったらコンパイラががんばって最適化してくれるようになった! でもなぜか32bitバイナリへのコンパイル時にしか頭良くない.同じコンパイラなのに(?)64bitへのコンパイルだと頭悪い子になってしまう… もう少し明示的に無駄を省くしかないか.

C++で忘れがちなこと

__LINE__ で行番号が取れる.これ使えば行ごとに一意な静的定数を作れる.便利かもしれない.

typeid と demangle による型情報の出力.Expression Templates で頑張っている時には必須.操作対象が型なので型を出力できないと色々困る.

#include <iostream>
#include <typeinfo>
#include <cxxabi.h>
 
template<typename T>
void showtype() {
  int status;
  std::cout << abi::__cxa_demangle(typeid(T).name(),0,0,&status) << std::endl;
}
template<typename T>
void showtypeof(const T&) {
  showtype<T>();
}

std::inner_product は色々計算できる.

Home > Archives > 2009年06月

Search
Feeds

Page Top