Techniques for Efficient Placement of Synchronization Primitives
Alexandru Nicolau, Guangqiang Li, Arun Kejariwal
Gokulan R
CS15B033
30 April 2020
Summary of the paper
No-DOALL Loop: Loops which have loop-carried dependencies
Goal: Efficient placement of synchronization primitives to boost TLP
Novelty: The synchronization problem could not be solved using other techniques like privatisation of variables, OpenMP-reduction, etc.
As long as synchronization primitives are present correctly in the source program, the optimizer transforms the code to improve performance.
Transformations
Move-Op-{Up/Down}: Move an assignment statement
Move-Test: Move conditional statement
Unify-{Up/Down}: Eliminate redundant copies of nodes, created during Move-Op-* and Move-Test transforms
Delete: Delete empty node
Future Work
Analysis of pipeline buffers on performance: Paper claims that bubbles in pipeline affects performance. Analysis on how much stalls happen because of bubbles, how much performance degradation baseline suffers can be studied
Movement of statements with atomic guarantees
The current transformations are applicable for 2-thread case. The same can be extended for many threads.
OpenMP can be extended to implement this transformation.