トップページ⇒tech
45コメント10KB

各種Cコンパイラ最適化比較

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさんNGNG
例えば x86 だけでに限定したとして以下のコンパイラが
あるわけです。

VC++ BC Watcom GNU-C Symantic

これら各コンパイラの最適化オプションをmaxにした状態で
比較した場合、実際の性能はどんな感じなんでしょう?

当然、この手の議論は「case by case」なんでしょうけど
「自分ならそのケースでの比較はこうだったよ」だとかの情報交換に
このスレを利用してみてください
0002デフォルトの名無しさんNGNG
cygnusとVC++が、1:1.5という評価データがあった。
0003デフォルトの名無しさんNGNG
>>2 1:1.5ってのはVCがcygnusの1.5倍の高速性を持つって意味?

>>1には書いてないけどintelのコンパイラとVCを比べると
総合的にはVCの方が速いようなんだけど、

extern int table[5][7];

uchar a, b;
c = table[a][b];

みたいな簡単な2次元配列へのアクセスだと明らかにintelが速かったよ。
0004デフォルトの名無しさんNGNG
intel のコンパイラって一般パッケージ販売されてるもの
なのでしょうか?ショップを見てもないもので・・・
0005デフォルトの名無しさんNGNG
>>4 http://www.intel.com/jp/developer/vtune/compilers/cpp/
0006デフォルトの名無しさんNGNG
あーおれもintelコンパイラの比較ベンチマークと
C++の最新使用への適合度知りたい
0007デフォルトの名無しさんNGNG
gccよりは速いとか逝ってるよ。
0008デフォルトの名無しさんNGNG
誰かVC++と比較してみた人いないの?
0009デフォルトの名無しさんNGNG
それより2は何処の評価データだ?
出典きぼん
0010デフォルトの名無しさんNGNG
ていうかgccが遅いアルね。ろくに最適化しないアルよ。
0011名前ついてますか?NGNG
やっぱり x86は競争が激しいのだなあ...
gccはもっと registerが多い CPU向けなんじゃないの?
と言い訳してみる。
0012デフォルトの名無しさんNGNG
Intelコンパイラは
VTuneって製品で供給されるよ。

20-30%は多分間違いなく高速化される。
0013デフォルトの名無しさんNGNG
>>12
> 20-30%は多分間違いなく高速化される
そうでもないけど・・・

試した限りでは浮動小数点系はIntelの方が早くなってたかな。
整数系の簡単な演算を含むパワフルなループはVCの方が早いこともしばしば。
0014デフォルトの名無しさんNGNG
>>13
すまそ。俺の思い違いだ。
俺の使ってるフリーのライブラリなら。って事でした。

値段に見合う価値は俺のところでは合ったよ。
0015デフォルトの名無しさんNGNG
templateのinline展開後のコードの速度とかはどう?
0016デフォルトの名無しさんNGNG
>>14
値段に見合う価値ってVCの方が高いんだが、糞だったのけ?
0017デフォルトの名無しさんNGNG
VCなくても使えたっけか?<IntelC
0018デフォルトの名無しさんNGNG
あぐぇ
0019デフォルトの名無しさんNGNG
>17
IntelのVer.5お試し版とやら(40MB)をダウンして、インストールしたら、
VC++ねえぞ。おととい来やがれと言われた(泣
0020デフォルトの名無しさんNGNG
>>19
どこんにあるのん?
002120NGNG
見つかったわ。スマソ
0022デフォルトの名無しさんNGNG
Code Warrior ってどうよ
0023名無しさん@お腹いっぱい。NGNG
IntelのコンパイラってBorland C++の4.5あたりにに付いてなかったっけ?
バグだらけで使い物にならなかったんで5.0で消えたやつ。
0024デフォルトの名無しさんNGNG
組み込みマクロを拾ってきて、いいとこ取りすべし
0025:デフォルトの名無しさんNGNG
LSI-Cは驚異的なオブジェクトを吐くんだぜ。マジで。
0026デフォルトの名無しさんNGNG
↑速度的にという意味にですか?
0027:デフォルトの名無しさんNGNG
>>26
パッケージにそう書いてある。
0028デフォルトの名無しさんNGNG
>>25
8080用としてはね。
0029デフォルトの名無しさんNGNG
BDS-Cとかがライバルだった頃のハナシな。
0030デフォルトの名無しさんNGNG
いまどきLSI-Cを買う人はほとんどいないんだろうなぁ・・・
0031名無しさん@お腹いっぱい。NGNG
ROM化するならLSI-Cは今でも有力な候補だと思うけどなぁ
86でもZ80でも。
0032デフォルトの名無しさんNGNG
試食版はいまだに使ってます>30
コンパイル速度が遅いのがアレですね。(TurboC++とかと比べてですが)
でもDOSで作るならこれとTurboC++できまり・・
TurboC++はほんと速いね。
0033デフォルトの名無しさんNGNG
WatcomCはどうなの?
オープンソース化されたと聞いたけど、まだ公開されてないのかな?
0034デフォルトの名無しさんNGNG
http://www.openwatcom.org/
まだドキュメント公開だけ. 長い目で見ましょう.
0035名無しさん@お腹いっぱい。NGNG
>>34
ほぇ〜、そういうことになってたのか。
昔散々使いまくったHI-TECH Cはどうなったかなぁ?
0036デフォルトの名無しさんNGNG
>>35
ほれ。
http://www.hitech.com.au/

コマンドライン版は、Pacific C という名でフリーになっちょる。
0037名無しさん@お腹いっぱい。NGNG
HI-TECH Cは1.xから2.xのZ80用と8086用を使ってたんだけど
86用はversion upしてるのにZ80用はしばらくしなかったので
開発終わっちゃったのかなと思ってたらある日突然versino upして
Z80用の担当者がスキーで足を折って入院してたから
updateできなかったという断り書きが付いていたのには笑った。
オーストラリア人って呑気なのかね。
0038>36NGNG
ありがとう
0039testNGNG
sage
0040このスレの趣旨とは違う気もするがNGNG
for(i=0;i<n/2;i++){
sum+=i;
}
を
k=n/3;
for(i=0;i<k;i++){
sum+=i;
}
って書いた方が速くなるかなとも思ったが
こんなものはコンパイラが最適化するだろうと思いつつ
一応コンパイラ(BCC)が吐いたコード見たら最適化されてなかった…。
#つまりループ毎に2で割ってた。(1右シフト)
そういうもんかな?
004140NGNG
× k=n/3
○ k=n/2
0042デフォルトの名無しさんNGNG
>>40
デバッグモードでビルドしてるんじゃない?

VC++でも最適化OFFでビルドすると、シフトに置き換えないよ。
004340NGNG
>>42
シフトは別にいいのだが(というかするべきだろ?)
ループ毎にやるのがいかんって言ってるのじゃ。
ループに入る前に一回だけやって値を保持しとけばすむことなのに。
004442NGNG
>>すまぬ、勘違い。
とりあえず、VC++6.0の最適化ONでコンパイルしてみたけど

xor esi, esi //sum = 0
sar eax, 1 //n >> 1
xor ecx, ecx //i = 0
test eax, eax
jle Label2
Label1:
add esi, ecx //sum+=i
inc ecx
cmp ecx, eax
jl Label1
Label2:

ちゃんとループの外に出していたね。

BCCアホ説浮上。
0045デフォルトの名無しさんNGNG
nを一旦const変数にコピーしてもだめ?
const int nn = n;
for(i=0;i<nn/2;i++){
sum+=i;
}
これで毎回/2してたらアホ説確定。
■ このスレッドは過去ログ倉庫に格納されています