首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

主流 C/C++ 編譯器數值運算效能大比拚

     編輯:關於C++

測試環境與編譯器版本

  • 平台:Intel Core 2 Duo
  • GCC (TDM-2 for MinGW) 4.3.0
  • VC 9.0 (cl 15.00.21022.08)
  • Intel C++ Compiler (icl 10.1)
  • PGI (pgcc 7.16)
  • CodeGear (bcc32 6.10)

測試程式:數值積分基準測試

來源於 Intel 編譯器範例,修改頭檔使各編譯器均可編譯。計算 |sin(x)| 在 [0, 2π] 積分,使用中點法則,內部矩形數從 2^2 到 2^26。

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>

#define INTEG_FUNC(x) fabs(sin(x))

int main() {
    unsigned int i, j, N;
    double step, x_i, sum;
    double start, finish, duration;
    double interval_begin = 0.0;
    double interval_end = 2.0 * 3.141592653589793238;

    start = clock();
    for (j = 2; j < 27; j++) {
        N = 1 << j;
        step = (interval_end - interval_begin) / N;
        sum = INTEG_FUNC(interval_begin) * step / 2.0;
        for (i = 1; i < N; i++) {
            x_i = i * step;
            sum += INTEG_FUNC(x_i) * step;
        }
        sum += INTEG_FUNC(interval_end) * step / 2.0;
        printf("%10d | %14e\n", N, sum);
    }
    finish = clock();
    duration = (finish - start);
    printf("Application Clocks = %10e\n", duration);
    return 0;
}

測試結果 (時鐘週期數,越低越好)

Intel Core 2 Duo - 無優化 (-O0 /Od)

GCCVCIntelPGICodeGear
1716114461124411051413400
171331443011687995612917
1715514476118711009913026

通用優化 (-O2 /O2)

GCCVCIntelPGICodeGear
1301177374540934812636
1657177064185914813026
1657377064042918313057

針對平台優化

選項GCCVCIntelPGI
指令-march=core2 -O2/arch:SSE2 /O2-QxT-tp core2 -O2
結果16060771019389578

CodeGear 無對應平台優化選項。

其他平台驗證

Pentium 4 1.5GHz / Linux

GCCICCPGCC
-O224,920,00010,840,00022,270,000
-O028,290,00019,210,00024,320,000
平台優化-march=pentium4 -O2-xN-tp piv -O2
結果24,990,0006,640,00022,150,000

Athlon X2 4800+ / Linux

GCCICCPGCC
-O09,390,00014,950,0009,950,000
-O28,910,0009,240,0009,400,000
平台優化-march=amdfam10 -O2-msse3 -O2-tp k8-32 -O2
結果8,800,0003,800,0009,030,000

結論與排名

  1. Intel C++ Compiler (icc/icl):數值計算效能最強,針對特定 CPU 優化提升極大,甚至在 AMD CPU 上配合正確選項 (-msse3) 亦有顯著提升。
  2. Microsoft Visual C++ (cl):優化效果明顯,-O2 後大幅領先 GCC、PGI、CodeGear。
  3. PGI (pgcc):優化提升有限,AMD 平台表現中規中矩,可能未找到最佳選項組合。
  4. CodeGear (bcc32):優化幅度極小,表現接近無優化水平。
  5. GCC (MinGW):表現令人失望,-O2 提升不明顯,平台優化 (-march=core2) 反而變慢,可能是版本或配置問題。

總結:在數值計算領域,「最快」的選擇屬於 Intel 編譯器。但需注意測試程式源自 Intel 範例,可能對 Intel 編譯器有利。實際專案選型還需考慮相容性、授權、跨平台需求等因素。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved