GCCとVC++の最適化について
概要 :
よくWindowsでは、GCCとVC++のコンパイラが比較されます。
個人的な見解では、いずれも優れたコンパイラであり、どちらを用いるかは、開発者の好みのような気がしています。
今回は、あえて、この疑問について、ひとつの参考になるように最適化を施した実行プログラムが、どれくらい早いかを
簡単なサンプルプログラムで確認してみました。
ここで記載していることは、実際に筆者のPC(WindowsXP)で実行した結果を記載しております。
しかしながら、サンプルは1例に過ぎないことを、あらかじめご了解ください。
サンプルソースコード
実証実験を行う前に、そテストに用いるサンプルプログラムを簡単に作成しました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| #include <iostream>
#include <ctime>
using namespace std;
int main(int argc, char *argv[])
{
int ni;
int nmax = 10000000;
double d1,d2,d3;
{
// timer
std::clock_t _start_time = std::clock();
d2=4;d3=1.001;
for(ni=0;ni<nmax;ni++){
d1=d2*d3;
d2=d1;
if((ni%10)==0){
d1=d2/1.01001;
d2=d1;
}
}
d1 = (double(std::clock() - _start_time) / (double)CLOCKS_PER_SEC);
cout << d1 << "(s)" << endl;
cout << "(val)" << d2 << endl;
cout << "(count)" << ni << endl;
}
return 0;
}
|
これは、非常に単純なサンプルです。乗算、剰余、除算の計算処理を10,000,000回繰り返しているだけです。
ただし、この最終的な答えが、アンダーフロー、オーバーフローしないようにしています。
この演算結果は、
5.04832e+015となります。
これを、GCC 3.4.5 ,GCC 4.4.0 , VC++7.1(2003),VC++9(2008) でコンパイルします。
ランタイムライブラリは、DLLのマルチスレッド対応とし、最適化は、O2のオプションを設定しました。
結果
コンパイラ | 処理時間 (秒) |
GCC 3.4.5 | 0.171 |
GCC 4.4.0 | 0.234 |
VC7.1 | 0.171 |
VC9 | 0.062 |
このような結果になりました。
この結果は、偶然かもしれませんが、GCC 3.4.5よりもGCC 4.4.0の処理が遅くなっていることは、興味深いです。
また、VC7.1(VC++ Tookit 2003) の最適化とGCC 3.4.5が、ほとんど変わらなかったのも興味深いですね。
参考までに、サイズは、VC7.1の場合が、もっとも小さくなっていました。
※サイズに関しては、GCCは、非常に不利ですので、ここでは、あえて記述を避けています。
あくまで、上記のサンプルプログラムの結果です。
他のプログラムでは、別の結果を得ることもあると思います。
現に、色々なサイトでは、GCCの結果が良かったという記事も、よく目にします。
あくまで、ご参考程度にお願いします。
ただ、この結果が、何かの参考になれば幸いです。

もっと、Qt関連について詳しく知りたい方は、以下の本なども良いと思います。
Qtに関する日本語の本が少ないですね。「入門書」は、さすがに、このページを読まれるくらいの方は不要だと思います。
やっぱり、本+ネット+試してみる!!の3本柱でやっていく以外にないように思います。
もっと、Boostについて詳しく知りたい方は、以下の本なども良いと思います。
本から学ぶことは多いと思います。ネットだけでは判らない様々な事に気づかされます。
コメントをどうぞ