Sujet : Re: constexpr is really very smart!
De : already5chosen (at) *nospam* yahoo.com (Michael S)
Groupes : comp.lang.c++Date : 16. Dec 2024, 10:28:08
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <20241216112808.00003f74@yahoo.com>
References : 1
User-Agent : Claws Mail 3.19.1 (GTK+ 2.24.33; x86_64-w64-mingw32)
On Sun, 15 Dec 2024 20:20:42 +0000
Student Project <
student@invalid.invalid> wrote:
The constexpr is really very smart because it can speed up algorithms
1000 times according to Dave, Microsoft retired engineer. He has
proved it by creating this video:
<https://youtu.be/8-VZoXn8f9U?si=iy1UimoWcaLG31Xi>
On my computer it took 270 microseconds to calculate fib(35) like in
his example. It was almost instant at the blink of the eyes.
D:\CmdLine\C_Cpp\Chrono02>program
Fibonacci_c: 9227465
Time Taken: 270
D:\CmdLine\C_Cpp\Chrono02>program
Fibonacci_c: 9227465
Time Taken: 257
D:\CmdLine\C_Cpp\Chrono02>program
Fibonacci_c: 9227465
Time Taken: 171
D:\CmdLine\C_Cpp\Chrono02>program
Fibonacci_c: 9227465
Time Taken: 176
Amazing.
I didn't see the video (I never see that type of videos), but 270
microseconds sound astonishingly slow for fib(35).
#include <stdio.h>
#include <stdlib.h>
#include <intrin.h>
static long long fib(long n)
{
if (fib <= 0)
return 0;
long long f0 = 0, f1 = 1;
for (long i = 1; i < n; ++i) {
long long f2 = f0 + f1;
f0 = f1;
f1 = f2;
}
return f1;
}
int main(int argz, char** argv)
{
if (argz < 2) {
printf("Go away!\n");
return 1;
}
char* endp;
long n = strtol(argv[1], &endp, 0);
if (endp == argv[1]) {
printf("%s is not a number. Go away!\n", argv[1]);
return 1;
}
unsigned long long t0 = _rdtsc();
long long f = fib(n);
unsigned long long t1 = _rdtsc();
printf("fib(%ld)=%lld. %lld clock cycles.\n", n, f, t1 - t0);
return 0;
}
$ gcc -s -O2 -Wall fib.c -o fib
$ ./fib 35
fib(35)=9227465. 212 clock cycles.
212 cycles on this 11 y.o. CPU means 62 nanoseconds. Even that time, I
would guess, is mostly a measurement overhead.
$ ./fib 92
fib(92)=7540113804746346429. 281 clock cycles.