Manual Parallelization
When parallelizing a program (or part of it) manually, one needs to consider the following:
- what is the highest level of parallelism (Coarse-grain vs fine-grain parallelism)
-
- which data should be shared and which is private
-
- how the data should be distributed between processors (this is special optimization with CC-NUMA programming)
-
- how the work should be distributed between processors (or select automatic work distribution by the compiler)
-
- can threads have simultaneous access to shared data, such that race conditions can occur