ホーム

OFF-SOFT.net

OFF-SOFT.net

ウェブやソフトウェアに関するサポート&情報サイトです。サイト構築からソフトウェアの作成、利用まであなたの助けになるかも・・・・しれません。たぶん・・。

GCCとVC++の最適化について

公開日| 2009年09月22日 | コメントはまだありません。
概要 :
 よく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本柱でやっていく以外にないように思います。


入門 Qt 4 プログラミング

Qtで簡単 GUIプログラミング―Qt入門書を読む前に読む「入門書」

プログラムを作ろう! Microsoft Visual C++ 2008 Express Edition 入門 (マイクロソフト公式解説書)
もっと、Boostについて詳しく知りたい方は、以下の本なども良いと思います。
本から学ぶことは多いと思います。ネットだけでは判らない様々な事に気づかされます。
Boost C++ Librariesプログラミング
Boost C++ Librariesプログラミング
Boost C++をチューンアップする最先端ライブラリ
Boost C++をチューンアップする最先端ライブラリ

コメント

コメントをどうぞ







  • はてなブックマークへ追加する
  • Facebookでシェアする
  • twitter でつぶやく
  • Google Plusでシェアする
  • Pocketでシェアする
ページトップへ