这是以下代码
Sieve.c
/* -*- mode: c -*-
* $Id$
* http://www.bagley.org/~doug/shootout/
*/
#include <stdio.h>
#include <stdlib.h>
int
main(int argc, char *argv[]) {
#ifdef SMALL_PROBLEM_SIZE
#define LENGTH 17000
#else
#define LENGTH 170000
#endif
int NUM = ((argc == 2) ? atoi(argv[1]) : LENGTH);
static char flags[8192 + 1];
long i, k;
int count = 0;
while (NUM--) {
count = 0;
for (i=2; i <= 8192; i++) {
flags[i] = 1;
}
for (i=2; i <= 8192; i++) {
if (flags[i]) {
/* remove all multiples of prime: i */
for (k=i+i; k <= 8192; k+=i) {
flags[k] = 0;
}
count++;
}
}
}
printf("Count: %d\n", count);
return(0);
}
这是我的CMakeLists.txt
cmake_minimum_required(VERSION 3.16)
project(sieve)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_C_COMPILER "gcc")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O3")
add_executable(sieve "Sieve.c")
由CMakeLists.txt构建 结果:
time ./sieve
Count: 1028
real 0m15.436s
user 0m15.431s
sys 0m0.000s
command:
gcc Sieve.c -O3 -o sieve
结果:
time ./sieve
Count: 1028
real 0m3.087s
user 0m3.086s
sys 0m0.000s
为什么会有如此显著的差异?如果有人能给我一个答案,我将不胜感激.
CPU:英特尔(R)至强(R)白金8255C CPU@2.50 GHz
操作系统:ubuntu22.04 LTS