市面主流 C/C++ 編譯器包含 Microsoft CL、GCC、Intel ICC、PGI PGCC、CodeGear BCC(前身 Borland)。Windows 平台最常用 CL,跨平台首選 GCC,但效能優化排名不一定與市佔率掛鉤。本文以一個積分計算程式為基準,實測各編譯器優化後的數值運算效能。
程式計算 |sin(x)| 在 [0, 2π] 區間的積分,使用中點法則,迭代次數從 22 到 226,測量總執行時間。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define INTEG_FUNC(x) fabs(sin(x))
double dclock(void);
int main(void) {
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;
}
/O2、-O3、-fast 等)。-march=native 常能追平或超越 ICC。/arch:AVX2 等指令集選項表現優異。編譯器效能差異在現代優化器下已縮小。專案選型應綜合考量:目標平台、工具鏈成熟度、除錯體驗、授權成本、生態系統支援。關鍵熱點路徑可嘗試多編譯器編譯並實測,搭配 PGO(Profile-Guided Optimization)往往能獲得超越單純編譯器選擇的提升。