Deutsch English Français Italiano |
<20241216112808.00003f74@yahoo.com> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Michael S <already5chosen@yahoo.com> Newsgroups: comp.lang.c++ Subject: Re: constexpr is really very smart! Date: Mon, 16 Dec 2024 11:28:08 +0200 Organization: A noiseless patient Spider Lines: 79 Message-ID: <20241216112808.00003f74@yahoo.com> References: <vjndub$2glcu$1@paganini.bofh.team> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Injection-Date: Mon, 16 Dec 2024 10:27:13 +0100 (CET) Injection-Info: dont-email.me; posting-host="e2e82e4ce411a49e9565e352070f744c"; logging-data="1121749"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX19j1vmHEJZI0Maiz1aLpx6P4BzBr6F2Omo=" Cancel-Lock: sha1:VFp5O2Ni2cg7IRJtqxw+rM1xCNo= X-Newsreader: Claws Mail 3.19.1 (GTK+ 2.24.33; x86_64-w64-mingw32) Bytes: 2906 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.