Cache or cores? Biscuit or cake?
It's about three years since I built my Ryzen system. It's a Ryzen 5 3600 (Zen 2, Socket AM4) with 32GB RAM.
Since dual core became a thing I have been meaning to take over the world with cunning multi-threaded code but about as far as I've got is some shell scripts that do things in parallel.
I figured I should upgrade the machine while AM4 CPUs are still available. I noted that AMD had some CPUs out with this newfangled 3D cache, and that they were pretty fast on certain workloads.
So my decision was biscuit or cake? Cache or cores?
It's taken me a few weeks, and much deliberation but today I decided to go for the cake. I think it will be more fun to have more cores to play with. I have ordered a Ryzen 9 5900X (12 core/24 thread Zen 3) and a cooler with two great big fans and fancy quiet bearings to go with it.
I'll need to revisit my old tests from three years ago and see what sort of a difference all those extra cores make. Obviously, there will be more contention for memory bandwidth. If I get around to it, I might post the results together with the results for the old CPU.
Meantime, I have been writing a little bit of C, finally getting around to something I've been meaning to do for 15 years. One day I'll write something about procrastination. I have an anecdote.
(Score: 2) by DannyB on Thursday May 25, @05:30PM
When I got out of college in 82 and began work, my employer was using Pascal. I learned the same lessons you did. I had studied a bit of Pascal in college, but not formally. I read books on my own, and the one minicomputer had a Pascal compiler.
I learned the same lessons you describe. The importance of type safety. The expressiveness of sets, yet the compiler turns these into simple bit manipulation instructions. Interfaces/Implementations, etc. Later when 'classes' were introduced into Pascal, I saw immediately the benefits if used correctly. It's like a C programmer using structs (or Pascal using RECORD). But instead of having tons of global functions that operate on various structs, you hide the names of those functions inside the class and use a different calling convention via the pointer to access those methods. As the size of your code base goes to a million lines, it becomes important to not be polluting the global name space. Especially avoiding collisions with authors of other third party libraries you may be using.
In the mid 80s I became fascinated with Modula 2 and later Modula 3. Alas there were no working compilers for that various platforms we supported. We would very likely have used Modula 3 if there had been.