These are the rules which specify what different concurrent read/write memory accesses from different threads/processes can or cannot see.
Notable such set of rules include:
- C++ memory model. These are also reflected on the semantics of memory of the corresponding instruction set architecture
- SQL transaction isolation level
That's what usually fucks up parallel programs.
- superuser.com/questions/133082/what-is-the-difference-between-hyper-threading-and-multiple-cores/995858#995858
- stackoverflow.com/questions/680684/what-are-the-differences-between-multi-cpu-multi-core-and-hyper-thread/73405312#73405312
- unix.stackexchange.com/questions/88283/so-what-are-logical-cpu-cores-as-opposed-to-physical-cpu-cores/739296#739296
Articles by others on the same topic
Parallel computing performs multiple parts of a computation simultaneously, typically on several processors or execution units. It requires decomposing work and coordinating data dependencies, communication and synchronization. Concurrent computing also permits overlapping activities on a single processor, so concurrency alone does not imply simultaneous hardware execution.
If fraction of a fixed computation remains serial and the rest divides perfectly among processors, the idealized runtime is . Thus Amdahl's law gives speedupfor . With a 10 percent serial fraction and 10 processors, the ideal speedup is about 5.26, before communication overhead. The calculation assumes a fixed workload; changing the workload size changes the question. Load imbalance and limited memory bandwidth can further reduce the achieved gain.