You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(UPDATE (22/3/2019): Added some corrections provided by the original author.)
Writing your own OS to run on a handmade CPU is a pretty ambitious project, but
I've managed to get it working pretty well so I'm going to write some notes
about how I did it.
Making Rust a perfect fit for high-performance computations
Hello, Rust community!
My name is Hadrien and I am a software performance engineer in a particle physics lab. My daily job is to figure out ways to make
scientific software use hardware more efficiently without sacrificing its correctness, primarily by adapting old-ish codebases to
the changes that occured in the software and computing landscape since the days where they were designed:
CPU clock rates and instruction-level parallelism stopped going up, so optimizing code is now more important.
Multi-core CPUs went from an exotic niche to a cheap commodity, so parallelism is not optional anymore.
Core counts grow faster than RAM prices go down, so multi-processing is not enough anymore.
SIMD vectors become wider and wider, so vectorization is not a gimmick anymore.
Here's a list of mildly interesting things about the C language that I learned mostly by consuming Clang's ASTs. Although surprises are getting sparser, I might continue to update this document over time.
There are many more mildly interesting features of C++, but the language is literally known for being weird, whereas C is usually considered smaller and simpler, so this is (almost) only about C.
Software Transactional Memory in C++: Pure Functional Approach (tutorial)
Software Transactional Memory in C++: pure functional approach (Tutorial)
In this article I’ll tell you about my pure functional library for Software Transactional Memory (STM) that I’ve built in C++. I adopted some advanced functional programming concepts that make it composable and convenient to use. Its implementation is rather small and robust, which differentiates the library from competitors. Let’s discuss what STM is and how to use it.
Why should programmers care about Monoids? Because Monoids are a common pattern that shows up over and over in programming. And when patterns show up, we can abstract them and leverage work we've done in the past. This allows us to quickly develop solutions on top of proven, stable code.
Add Commutative Property to a Monoid (Commutative Monoid) and you have something that can be executed in parallel. With the end of Moore's Law, parallelism is our only hope to increasing processing speeds.
What follows is what I've learned after studying Monoids. It is hardly complete, but hopefully will prove to be helpful as an introduction for others.