ビルド設定がよく分からない
64bitOSで32bitアプリを(プロセス上*32ってなってるやつ)動かすと32bitで動かすよりも遅くなる、的な話を聞いた。加えてその理由が4byteと8byte走査に主な原因がある、という話を聞いたので自分で適当なコードを打って試してみようと思った。
メモリ上の走査の話なのでメモリを一杯使ってランダムにアクセスしてやればいけるんじゃないかなぁ、と思ったので下記のようなコードで計測しようとした・・・・・のだが
#include<random> #include<iostream> #include<boost/timer.hpp> #include<boost/format.hpp> int main() { const int SIZE = 1024; const unsigned LOOP_TIME = 10000000; int array[SIZE] = {}; std::mt19937 engine; std::uniform_int_distribution<int> distribution( 0, SIZE-1 ) ; boost::timer time; for(std::size_t i = 0;i<LOOP_TIME;++i) { array[distribution(engine)] = distribution(engine); } for(std::size_t i = 0;i<10;++i) { std::cout << array[distribution(engine)] << std::endl; } std::cout << boost::format("%0.10lfSec\n") % time.elapsed(); getchar(); return 0; }
ビルドしてみるとcmd自体が*32って付いててexeを起動してもOSに関係なく*32なプログラムが出来上がる。ううむ、何か良い方法は無いものかって感じ。
VisualStudioもといVisualC++2010で、64bitOSようのプログラムを吐かせる方法がわからない。昔、何かx86とx64を選べるところがあったような気がするんだけれどねー。
後、結果としては少なくとも倍ほど違ってもらって無くては困る。何故なら走査には半分ずつバイトを格納するそうだからだ。メモリの性能が一緒ならおそらくそうなるのではないかと推測してみる(単純&詳しくないのが原因)。
ということでここにメモしておいて何か方法が見つかったら検証してみたい.....
追記
64bit版cmdは見つけました。wow64フォルダの中に発見〜。