Calculating Pi: My Attempt at Breaking the Pi World Record
blog.timothymullican.com
blog.timothymullican.com
If anything it got me a lot more curious about this y-cruncher program and all the fun optimizations it must implement.
For a sysadmin/hardware nerd this post was really interesting, although I would have probably have appreciated even more details (quick example, how many disks failed partially/totally during the process?).
[1] https://cloud.google.com/blog/products/compute/calculating-3...
I have to say though, I think it's very cool if he came on budget. I'm very interested to see what he can do for STEM research.
These cloud vendors are way too expensive compared to what he can do off ebay.
https://news.ycombinator.com/item?id=9167781 Number of legal 18x18 Go positions computed. One more to go
https://news.ycombinator.com/item?id=10950875 Number of legal Go positions computed
Not much point in breaking that record, as 19x19 is the largest (and standard size) Go board.
It's much different than remembering a story or a travel route or an image.
Ouch!!!
I remember a time back freshman year of collage... It was an extra credit assignment. Who could factor the largest number (or something like this) in the least time before the due date. My friend and I devised an algorithm, and launched it on my computer. I honestly don't remember anything other than the fact the god damn power transformer downtown blew and fucked up our tests because of a large scale power outage. I assume we'd have not even come in top #5 for that assignment (who knows), but it's just so frustrating.
Basically, OSs should have better fail recovery mechanics than are the default.
Except I wasn't working on anything academically meaningful, more spiritual. I was the only one that could fit a keg in my trunk. Thankfully it was a day party in the spring.
Air-conditioning units with ionizers generate ozone, it's why they smell sweet.
P.S. Ozone is meant to be pretty bad for you.
It was your program that did not
I can’t reply to your below comment I’m not sure why - but you seem experienced in alternative computing environments, whereas I’m mostly a HPC python / c++ developer that’s spent the last 10ish years doing deep learning and scientific computing - the newer environment doesn’t have to be practical at all, I’m interested to use it for a change in perspective
I wish I had a recommendation based on experience for one of these really strange operating systems like EUMEL, Guardian, OS/400, and L3. But I don't. I've used CP/M and MS-DOS, but those are just really limited, not really interesting. Although, with ZCPR and 4DOS, you could make them reasonably usable, it was like coming out of Plato's cave when I switched my primary operating environment from 4DOS to csh on Ultrix.
Squeak is a pretty different operating environment that isn't simply primitive. Oberon is another. They can both run as user processes on top of Linux, as well as on bare metal. Both of them are somewhat alien.
Are you comfortable with embedded development? If not, try Arduino. It starts out easy, since you program the boards in C++, but you have the opportunity to build things that will run for months on a AA battery with submicrosecond interrupt response time — because there's no OS. (It's routine for even programming novices to write their own interrupt handlers.) Arduino instantly gives you the ability to measure things on microsecond timescales, a thousand times faster than you can normally see. Modern boards like the Blue Pill have response latencies in the 100-nanosecond range when they're awake. That's the time it takes light to go 30 meters, as you're probably aware.
In retrocomputing land, VMS was the first OS I used that was really usable. The OpenVMS Hobbyist Program still exists, and it's actually possible to run old versions of Mozilla on it. F-83 was an interactive Forth IDE that provided higher-order programming, virtual memory, and multithreading under MS-DOS, in 1983 — without syntax or types. Turbo Pascal was also an IDE, in a way the first modern IDE, around the same time; the first versions ran on CP/M and MS-DOS. But I think that you kind of had to be grappling with the limitations of BASIC on those systems to appreciate that.
There are Pick systems that still have enthusiastic users: https://www.pickwiki.com/index.php/Pick_Operating_System but they don't sound appealing to me. Other systems with cult fanbases include FileMaker, HyperCard, and Lotus Agenda, which last I think you can run successfully under FreeDOS. Agenda is interesting in part because it's so alien. (It's easy to forget that it was normal at the time to have to use the program manual to figure out how to exit.)
There are a bunch of modern specialized development environments that can do strange things. Radare2 is an environment focused on reverse engineering. Emacs is focused on text editing, but for some reason it's also the main user interface for interactive proof assistants like Coq and Lean, which are shaping up to be pretty interesting. R is focused on statistics. Jupyter is sort of focused on data visualization, although not really. (Now I see you've been doing deep learning for 10 years, so I guess Jupyter is your best friend.) LibreOffice Calc is focused on rectangular arrays of mostly numerical data (although in many cases their most advanced users use Excel instead). You can develop applications in all of them.
How about math? It's one thing to invoke a Runge-Kutta integration method; it's another to be able to prove convergence bounds on it. And machine-checked formal proof is shaping up to be an interesting thing, like I said.
How about cryptography? That has the advantage that there are right answers and wrong answers, so you can test your code.
How about shaders? Shadertoy is accessible and super fun. Maybe that's too similar to HPC, but the shader parallelism model (similar to ispc) is pretty different from both AVX and MPI.
How about mobile development? SIGCHI papers are full of experimental user interface ideas to explore, and Android Studio is free and relatively usable, if clumsy. Have you seen Onyx Ashanti's Beatjazz?
In the neighborhood of beatjazz, there's livecoding. It's a thrill to get a nightclub full of people dancing to your code, and there are a bunch of different environments.
GNU Radio with an RTL-SDR makes it possible for you to run DSP algorithms on RF signals over a pretty wide frequency range, with applications in communications and sensing. Maybe if you've been doing HPC, DSP is already second nature, but if not it might be rewarding. And DSP has close connections to control theory and image processing, as well as the more obvious applications.
How about alternative programming paradigms? If you're comfortable in procedural and OO programming, how about extreme alternatives — answer-set programming like miniKANREN, constraint-logic programming (as supported by modern Prologs https://www.metalevel.at/prolog/clpz not just Mozart/Oz), Erlang-style fault-tolerance-focused programming, APL-style array programming (though maybe you're familiar enough with that to take it for granted), or Forth? How about strongly typed programming like Haskell, Rust, or OCaml? (And of course Haskell is purely functional, and OCaml is mostly so.)
And STM solvers like Z3 can easily solve problems now that were infeasible only a few years ago.
Also, wasm.
Or maybe try hacking together some games in Godot.
I don't know, myself I find that it's hard to avoid getting out of my comfort zone in some direction, just because the world is so big and my knowledge is so small. Deep learning is the out-of-my-comfort-zone programming thing I want to try next!
I started writing several replies but felt I wasn't able to give you the praise you deserved, but the passage of time compels me to respond so please know you have my full gratitude
Thank you so much for such a detailed reply
STM is either a scanning tunneling microscope or software transactional memory, both of which are pretty interesting, but Z3 is neither.
Also, it occurred to me that I didn't even mention browsers, probably because I myself am so comfortable with them. The big software platforms right now are POSIX, Android, Java, browsers, and whatever Microsoft is doing now — it's enough effort to reuse code written for one environment for another that people often just rewrite it. Browsers have by far the best GUI library — not that the DOM is a great or even acceptable interface, but things like React and D3 are — and the major advantage that if you write stuff in a browser you can immediately show it to many people. The development tools are insane, and HTML5 supports most cellphone peripherals in a cross-platform way.
Idea is to not use “one digit per byte”, but to keep addressing individual digits cheap.
”I thought they were incompressible like random.”
They’re easily compressed, if you accept taking this program and it’s configuration file as a compressed version.
(And yes, the output of a pseudo-random number generator compresses extremely well, too)
Your guess is correct, y-cruncher uses that exact format [1].
This project seems pointless to me. There's no scientific value in knowing this many digits of pi. He used off the shelf components and off the shelf software. So there was no new engineering that advance the state of the art. At the end of the day the only thing of meaning that happened her is he used a bunch of electricity (and a corresponding CO2 release) for no socially valuable purpose.
> Did you win the Putnam? [0]
He may have stayed below $10K in hardware, but there is no way that includes the electricity needed to run the machines 24/7 for half a year.
1-digit-per-byte requires about 45TiB [1].
Can anyone explain how it requires 38TiB for final output?
[0] https://www.google.com/search?q=8+*+%285e13+%2F+19%29+%2F+10...
[1] https://www.google.com/search?q=5e13+%2F+1048576+%2F+1048576
With AWS, you pay (dearly) for the ability to scale at a moments notice. You do not save money for predictable workloads.
While not applicable to this case, bandwidth costs are absurdly marked up expensive as well; like by a factor of 10x.
You can't go with a single instance and a ton of EBS storage, because it caps out at 16TB of disk, and 19Gbit[0] of EBS bandwidth, even on an instance with 100Gbit networking.
So, depending on how you can allocate storage, you're probably going to need some kind of clustered filesystem like GlusterFS
It's also not clear how well the application can spread it's writes - if it's all focussed on writing one file at a time, we need the most throughput to a single node at a time.
Storage:
Option 1: "GlusterFS: Hope it spreads writes" 20x c5n.9xlarge (36x vcpu/96GB RAM/50Gbit NIC / 9.5Gbit EBS) + 16TB st1 HDD storage each = $43k
Option 2: "GlusterFS: more EBS IO" 20x c5n.9xlarge (72x vcpu/192GB RAM/100Gbit NIC / 19Gbit EBS) + 16TB gp2 SSD storage each = $89k
Option 3: "GlusterFS: hey local storage is faster/cheaper" 6x i3en.24xlarge (96x vcpu/768GB RAM/100Gbit NIC/ no EBS) = $47k
I was wondering about insane ideas like using mdadm in RAID0 over NFS Mounts presented by (say) 281 t3.2xlarge instances each with 1x 1TB EBS volume. That comes out at around 62k for the storage instances.
Compute: I don't know how important CPU vs Disk IO bandwidth is. The instance the author is using has 4x 15 cores (60 cores total). The most I can get with standard EC2 instances is 64 cores, but that has 25Gbit network, and the next down from that is 48 cores.
1x i3en.24xlarge (96x vcpu/768GB RAM/100Gbit NIC/ no EBS) = $7.9k
There are bare metal instances with more cores/memory and up to 100Gbit networking[1], but I can't find any pricing on them.
All up, I think $51-55k/month using standard instances would probaably do the job.
[0] There are the bare metal instances mentioned in the link below that get up to 28Gbit EBS per instance, but again no details on pricing.
[1] https://aws.amazon.com/blogs/aws/ec2-high-memory-update-new-...
I just used the calculator to price out a single instance without issue. Just type in nineteen 16TB EBS volumes (you’d create an LVM volume group for them if launched). I used to have EC2 instances (albeit not by choice, I inherited the bad architecture) with 42TB total of EBS volumes using LVM without issue.
I didn't realise they'd upped the maximum volume size from 1TB to 16TB, so thought the calculator was telling me it was capped at 16x EBS volumes per instance. The new calculator isn't helping things here[1] telling me that I can only assign 16TB to an instance.
So, given that - then the issue becomes is 25Gbit NIC / 19Gbit EBS bandwidth enough IO to at least equal the needs of the task. On paper the total bandwidth of the author's disk controller was 24Gbit, but that will depend on how the output is spread and whether the EBS limit includes any overheads that aren't present in DAS.
Interestingly, if the requirements are mostly sequential, you can get better performance/$ going with throughput-optimised HDDs rather than gp2 SSD.
Applying striping in either case will ensure you saturate the per-instance EBS bandwidth limits.
So, single instance calculations:
r5.24xlarge (96vCPU/768GB RAM/25Gbit NIC/19Gbit EBS) = $4.4k
Storage: 18x 16TB gp2 SSD (250MB/sec / 16K IOPS) = $31k 18x 16TB st1 HDD (500MB/sec / 500 IOPS) = $14.5k
GCP Pricing Page: https://cloud.google.com/products/calculator#id=2eca3cef-746...
So ~$200 - $250k
Could probably save a good bit with committed use discounts.
Spot / Preemptible instances would not work, in fact before Emma did this calculation a lot of people thought this kind of thing wasn't possible on public cloud because of perceived instabilities in a multi-tenant system.
Edit: on a more serious note, a site[0] that tracks these records says:
> Downloading of digits is no longer available due to the massive bandwidth requirements. Your best bet is to directly contact one of the record holders and see if they still have a copy of the digits.
Assuming the author has a typical home internet connection with about 5 Mbps upload rate, the transfer would take 2 years longer than it took to actually run the calculation in the first place!
For those of us with less insane needs, they also exposed an API to grab the specific digits of interest - https://pi.delivery/
In any case, heat that is created without convection fans to spread it quickly, will still diffuse into the home albeit at a slower pace. It has to go somewhere..
Surely anyone who's used a computer with a fan in it knows this…
Of course, there are some heating methods that are cheaper than electricity - like natural gas. So one would have to factor that in, along with power plant emissions vs home emissions.
It's a complex entrenchment. It'd be interesting to produce a video of street interviews just to see what the average person thinks about electronics getting hot. It would make for a good case study of the intersection between common sense/basic physics knowledge/and energy/eco politics.