comp.lang.ada
 help / color / mirror / Atom feed
From: Niklas Holsti <niklas.holsti@tidorum.invalid>
Subject: Re: Not to incite a language war but apparently the Corona lockdown was based on 13 year old undocumented C-Code
Date: Tue, 12 May 2020 22:16:18 +0300
Date: 2020-05-12T22:16:18+03:00	[thread overview]
Message-ID: <hi0b03FgtgnU1@mid.individual.net> (raw)
In-Reply-To: <r9chkr$19s$1@dont-email.me>

On 2020-05-12 0:55, Jeffrey R. Carter wrote:
> On 5/11/20 10:27 PM, Niklas Holsti wrote:
>>
>> I've seen a somewhat longer and better review of this code, but I 
>> didn't save the link (sorry). The following points were criticized IIRC:
> 
> I saw the interpretation of the review that Gautier linked to at 
> https://lockdownsceptics.org/code-review-of-fergusons-model/. From the 
> site name we can conclude that this is not an unbiased interpretation.
> 
>> Moreover, the code is deterministic if executed on a single core 
>> (after some errors were corrected which seemed not to be unusually 
>> alarming).
> 
> It seems clear that the code that was executed to create the predictions 
> was not deterministic on a single core.

The first of the two cases of single-core "non-determinism" described 
and bewailed in the "review" is that the time evolution of the predicted 
epidemic is different depending on the value of a program option -- 
whether the "network" is created anew, or reused -- that should not 
affect the result. No actual non-determinism is claimed in the review, 
just that the epidemic reaches large infection rates sooner for one 
option value than for the other. It seems that the code was using the 
PRN generator slightly differently in the two cases, resulting in 
different PRN sequences.

The program models exponential growth, so the simulated time evolution 
is clearly very sensitive to the small-number statistics (few initial 
infections) at the start of the simulation, which is one reason why one 
should run several simulations. Looking at the predicted growth curves 
for the two option values, they have the same shape and height but are 
just shifted slightly in time.

The same effect is clearly seen in actual data from Covid-19 infections 
in different countries. Initially, newsmedia used to align the starting 
points of the curves at the point of the first detected infection or 
first death, which is clearly a statistically unreliable indication of 
the real starting point, and so the main growth of infections often 
started after different delays in different countries. When the curves 
are aligned at the point, say, of 10 recorded deaths, the differences 
between the curves are much smaller.

The second case of single-core "non-determinism" mentioned in the report 
is that the program gave different results on different computers and 
compilers. This difference is explained (in the bug report) by the 
different compilers using different floating-point instructions: either 
a merged multiply-add or separate multiply and add, resulting in 
different roundings, a well-known and common issue in floating-point 
computations. Such issues are often addressed by running several 
computations with slightly fuzzed inputs or intermediates, which occurs 
naturally if this program is executed several times with differnt PRN 
sequences. Again not what I would call real non-determinism.

In the review, the sentence that speaks of the original "15.000 line 
file" links to a tweet by John Carmack, who "helped a little" on the 
updates to the code. I quote this tweet series 
(https://twitter.com/ID_AA_Carmack/status/1254872369556074496):

"Before the GitHub team started working on the code it was a single 15k 
line C file that had been worked on for a decade, and some of the 
functions looked like they were machine translated from Fortran. There 
are some tropes about academic code that have grains of truth, but it 
turned out that it fared a lot better going through the gauntlet of code 
analysis tools I hit it with than a lot of more modern code. There is 
something to be said for straightforward C code. Bugs were found and 
fixed, but generally in paths that weren't enabled or hit. Similarly, 
the performance scaling using OpenMP was already pretty good, and this 
was not the place for one of my dramatic system refactorings. Mostly, I 
was just a code janitor for a few weeks, but I was happy to be able to 
help a little."

I would call that a rather positive evaluation of the code quality, even 
if it shows some prejudice against Fortran and machine translations.

-- 
Niklas Holsti
niklas holsti tidorum fi
       .      @       .

  reply	other threads:[~2020-05-12 19:16 UTC|newest]

Thread overview: 71+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-11 18:49 Not to incite a language war but apparently the Corona lockdown was based on 13 year old undocumented C-Code Rick Newbie
2020-05-11 20:27 ` Niklas Holsti
2020-05-11 21:12   ` Rick Newbie
2020-05-12 20:11     ` Niklas Holsti
2020-05-12 20:53       ` Dmitry A. Kazakov
2020-05-12 21:54         ` Niklas Holsti
2020-05-12 22:15       ` Rick Newbie
2020-05-13 11:07         ` Niklas Holsti
2020-05-13 13:23           ` Rick Newbie
2020-05-13 13:45             ` Niklas Holsti
2020-05-13 14:58               ` Rick Newbie
2020-05-13 15:31                 ` Dmitry A. Kazakov
2020-05-13 15:48                   ` Niklas Holsti
2020-05-11 21:45   ` gautier_niouzes
2020-05-12 15:56     ` Niklas Holsti
2020-05-11 21:55   ` Jeffrey R. Carter
2020-05-12 19:16     ` Niklas Holsti [this message]
2020-05-12 21:27       ` Jeffrey R. Carter
2020-05-12 22:20         ` Niklas Holsti
2020-05-12 22:39           ` Jeffrey R. Carter
2020-05-13  9:36             ` Niklas Holsti
2020-05-13 13:52               ` Optikos
2020-05-13 14:05                 ` Niklas Holsti
2020-05-13 18:58                   ` Optikos
2020-05-13 20:29                     ` Niklas Holsti
2020-05-13 21:02                       ` Optikos
2020-05-13 21:48                         ` Niklas Holsti
2020-05-13 22:13                           ` Optikos
2020-05-13  9:54         ` Niklas Holsti
2020-05-13  0:25 ` Olivier Henley
2020-05-15 13:23   ` Optikos
2020-05-16  5:01 ` Anatoly Chernyshev
2020-05-28 21:45   ` Optikos
2020-06-11 17:28   ` Olivier Henley
2020-06-11 17:36     ` Olivier Henley
2020-06-11 22:43     ` Anatoly Chernyshev
2020-06-12 12:10       ` Olivier Henley
2020-06-12 12:34         ` Anatoly Chernyshev
2020-06-12 17:36           ` Olivier Henley
2020-06-21  9:18             ` Anatoly Chernyshev
2020-06-22 13:36               ` Olivier Henley
2020-05-16 22:31 ` Niklas Holsti
2020-05-16 23:54   ` Optikos
2020-05-17 15:41     ` Niklas Holsti
2020-05-17 17:38       ` Optikos
2020-05-17 18:00         ` Simon Wright
2020-05-17 20:56           ` Optikos
2020-05-17 21:20             ` Simon Wright
2020-05-17 21:45               ` Optikos
2020-05-18  7:34                 ` Simon Wright
2020-05-17 19:20         ` Niklas Holsti
2020-05-17 21:30           ` Optikos
2020-05-24 21:04 ` Bob Goddard
2020-05-31 15:01 ` Azathoth Hastur
2020-06-09  6:30 ` gautier_niouzes
2020-06-11 15:35 ` Olivier Henley
2020-06-11 15:49   ` Olivier Henley
2020-06-11 18:41     ` Anh Vo
2020-06-11 19:58       ` Olivier Henley
2020-06-11 20:41         ` Anh Vo
2020-06-11 20:47           ` Olivier Henley
2020-06-11 21:34             ` Anh Vo
2020-06-11 21:47               ` Olivier Henley
2020-06-11 21:39             ` Olivier Henley
2020-06-11 23:14               ` Anh Vo
2020-06-11 23:30                 ` Jere
2020-06-11 23:55                   ` Olivier Henley
2020-06-12  0:07                 ` Olivier Henley
2020-06-12  0:42                   ` Anh Vo
2020-06-12 11:08                     ` Olivier Henley
2020-06-12  7:03   ` gautier_niouzes
replies disabled

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox