memory model
play

Memory Model COS 597C 10/5/2010 Example a = Flag = 0 Thread a = - PowerPoint PPT Presentation

Memory Model COS 597C 10/5/2010 Example a = Flag = 0 Thread a = 26; Flag = 1; 2 Memory Model COS 597C, Fall 2010 Example a = Flag = 0 Thread a = 26; Flag = 1; Compiler Transformation Flag = 1; a =


  1. Memory Model COS 597C 10/5/2010

  2. Example a = Flag = 0 � Thread � a = 26; � Flag = 1; � 2 Memory Model COS 597C, Fall 2010

  3. Example a = Flag = 0 � Thread � a = 26; � Flag = 1; � Compiler Transformation ✔ Flag = 1; � a = 26; � 3 Memory Model COS 597C, Fall 2010

  4. Example a = Flag = 0 � Thread 1 � Thread 2 � a = 26; � while (Flag != 1) {}; � Flag = 1; � b = a; � What is the value of b after execution? 4 Memory Model COS 597C, Fall 2010

  5. Example a = Flag = 0 � Thread 1 � Thread 2 � a = 26; � while (Flag != 1) {}; � Flag = 1; � 26 ? b = a; � What is the value of b after execution? 5 Memory Model COS 597C, Fall 2010

  6. Example a = Flag = 0 � Thread 1 � Thread 2 � a = 26; � while (Flag != 1) {}; � Flag = 1; � 0 !! b = a; � What is the value of b after execution? 6 Memory Model COS 597C, Fall 2010

  7. How could this happen?  Compilers can reorder instructions a = Flag = 0 � Thread 1 � Thread 2 � a = 26; � while (Flag != 1) {}; � Flag = 1; � b = a; � 7 Memory Model COS 597C, Fall 2010

  8. How could this happen?  Compilers can reorder instructions a = Flag = 0 � Thread 1 � Thread 2 � Flag = 1; � while (Flag != 1) (1) � (2) � {}; � a = 26; � (4) � b = a; � 0 (3) � 8 Memory Model COS 597C, Fall 2010

  9. How could this happen?  Lets disable compiler reordering. How about now? a = Flag = 0 � Thread 1 � Thread 2 � a = 26; � while (Flag != 1) {}; � Flag = 1; � b = a; � 9 Memory Model COS 597C, Fall 2010

  10. How could this happen?  Lets disable compiler reordering. How about now? a = Flag = 0 � Thread 1 � Thread 2 � a = 26; � while (Flag != 1) {}; � Flag = 1; � b = a; � 0 !! 10 Memory Model COS 597C, Fall 2010

  11. How could this happen?  Hardware out-of-order execution a = Flag = 0 � Thread 1 � Thread 2 � a = 26; � while (Flag != 1) {}; � Flag = 1; � b = a; � 0 !! Reorder buffer of P1 � a = 26; � Flag = 1; � …… � 11 Memory Model COS 597C, Fall 2010

  12. How could this happen?  Hardware out-of-order execution a = Flag = 0 � Thread 1 � Thread 2 � a = 26; � while (Flag != 1) {}; � Flag = 1; � b = a; � 0 !! Reorder buffer of P1 � Flag = 1; � a = 26; � …… � 12 Memory Model COS 597C, Fall 2010

  13. Things could go crazy ….. If we don’t define what is a valid optimization 13 Memory Model COS 597C, Fall 2010

  14. What is Memory (Consistency) Model?  “A formal specification of how the memory system will appear to the programmer, eliminating the gap between the behavior expected by the programmer and the actual behavior supported by a system.” [Adve’ 1995]  Memory model specifies:  How threads interact through memory  What value a read can return  When does a value update become visible to other threads  What assumptions are allowed to make about memory when writing a program or applying some program optimization 14 Memory Model COS 597C, Fall 2010

  15. Why do We Care?  Memory model affects:  Programmability  Performance  Portability JIT Compiler Machine Program Code Hardware Memory Model 1 Memory Model 2 15 Memory Model COS 597C, Fall 2010

  16. The Single Thread Model  Memory access executes one-at-a-time in program order  Read returns value of last write  For hardware & compiler reordering  Optimization must respect data/control dependences  Memory operations must follow the order the program is written  Easy to program and optimize 16 Memory Model COS 597C, Fall 2010

  17. Strict Consistency Model  Any read to memory location X returns the value stored by the latest write to X Timeline Thread 1 � Thread 2 � R1 � 1 � R2 � 1 � X = 1; � …… � X � 1 � …… � R1 = X; � ✔ R2 = X; � 17 Memory Model COS 597C, Fall 2010

  18. Strict Consistency Model  Any read to memory location X returns the value stored by the latest write to X Timeline Thread 1 � Thread 2 � R1 � 0 � R2 � 1 � R1 = X; � X � 1 � X = 1; � …… � ✔ …… � R2 = X; � 18 Memory Model COS 597C, Fall 2010

  19. Strict Consistency Model  Any read to memory location X returns the value stored by the latest write to X Timeline Thread 1 � Thread 2 � R1 � 0 � R2 � 1 � X = 1; � …… � X � 1 � …… � R1 = X; � ✗ R2 = X; � 19 Memory Model COS 597C, Fall 2010

  20. Sequential Consistency  Definition: [Lamport’ 1979] the result of any execution is the same as:  The operations of each thread appears in program order  Operations of all threads were executed in some sequential order atomically  Atomicity  Isolation : no one sees partial memory update  Serialization : memory access appear to occur at the same time for everyone 20 Memory Model COS 597C, Fall 2010

  21. Under Sequential Consistency Model  The operations of each thread appears in program order  Operations of all threads were executed in some sequential order atomically Timeline Thread 1 � Thread 2 � R1 � 0 � R2 � 1 � X = 1; � …… � X � 1 � …… � R1 = X; � ✔ R2 = X; � 21 Memory Model COS 597C, Fall 2010

  22. Under Sequential Consistency Model  The operations of each thread appears in program order  Operations of all threads were executed in some sequential order atomically Timeline Thread 1 � Thread 2 � R1 � 1 � R2 � 0 � X = 1; � …… � X � 1 � …… � R1 = X; � ✗ R2 = X; � 22 Memory Model COS 597C, Fall 2010

  23. Example  Dekker’s algorithm for critical sections Flag1 = Flag2 = 0; � Thread 1 � Thread 2 � Flag1 = 1; � Flag2 = 1; � if (Flag2 == 0) � if (Flag1 == 0) � critical � critical � 23 Memory Model COS 597C, Fall 2010

  24. Example  Dekker’s algorithm for critical sections Flag1 = Flag2 = 0; � Thread 1 � Thread 2 � Flag1 = 1; � Flag2 = 1; � if (Flag2 == 0) � if (Flag1 == 0) � critical � critical � Flags1 � 1 � Flags2 � 0 � 24 Memory Model COS 597C, Fall 2010

  25. Example  Dekker’s algorithm for critical sections Flag1 = Flag2 = 0; � Thread 1 � Thread 2 � Flag1 = 1; � Flag2 = 1; � if (Flag2 == 0) � if (Flag1 == 0) � critical � critical � Flags1 � 1 � Flags2 � 1 � 25 Memory Model COS 597C, Fall 2010

  26. Example  Dekker’s algorithm for critical sections Flag1 = Flag2 = 0; � Thread 1 � Thread 2 � Flag1 = 1; � Flag2 = 1; � if (Flag2 == 0) � if (Flag1 == 0) � critical � critical � Flags1 � 0 � Violation !!! � Flags2 � 1 � 26 Memory Model COS 597C, Fall 2010

  27. How do we violate sequential consistency? Very EASY ! Lets take a look at several hardware/ compiler optimizations that are commonly used for uniprocessor 27 Memory Model COS 597C, Fall 2010

  28. Violation of SC: Architecture without Caches  Write buffers with bypassing Thread 1 � Thread 2 � T1 � T2 � Flag1 = 1; � Flag2 = 1; � Buffer � Buffer � if (Flag2 ==0) � if (Flag1 ==0) � critical � critical � Shared Bus � Flag1 � 0 � Flag2 � 0 � 28 Memory Model COS 597C, Fall 2010

  29. Violation of SC: Architecture without Caches  Write buffers with bypassing Thread 1 � Thread 2 � T1 � T2 � Flag1 = 1; � Flag2 = 1; � (1) 
 if (Flag2 ==0) � if (Flag1 ==0) � Read 
 critical � critical � Flag2 � = 0 � Shared Bus � Flag1 � 0 � Flag2 � 0 � 29 Memory Model COS 597C, Fall 2010

  30. Violation of SC: Architecture without Caches  Write buffers with bypassing Thread 1 � Thread 2 � T1 � T2 � (2) 
 Read 
 Flag1 = 1; � Flag2 = 1; � (1) 
 Flag1 � if (Flag2 ==0) � if (Flag1 ==0) � Read 
 = 0 � critical � critical � Flag2 � = 0 � Shared Bus � Flag1 � 0 � Flag2 � 0 � 30 Memory Model COS 597C, Fall 2010

  31. Violation of SC: Architecture without Caches  Write buffers with bypassing Thread 1 � Thread 2 � T1 � T2 � (2) 
 (3) Read 
 Flag1 = 1; � Flag2 = 1; � (1) 
 Write Flag1 � if (Flag2 ==0) � if (Flag1 ==0) � Read 
 Flag1 � = 0 � critical � critical � Flag2 � = 0 � Shared Bus � Flag1 � 0 � Flag2 � 0 � 31 Memory Model COS 597C, Fall 2010

  32. Violation of SC: Architecture without Caches  Write buffers with bypassing Thread 1 � Thread 2 � T1 � T2 � (2) 
 (3) (4) Read 
 Flag1 = 1; � Flag2 = 1; � (1) 
 Write Write Flag1 � if (Flag2 ==0) � if (Flag1 ==0) � Read 
 Flag1 � Flag2 � = 0 � critical � critical � Flag2 � = 0 � Shared Bus � Flag1 � 0 � Flag2 � 0 � 32 Memory Model COS 597C, Fall 2010

  33. Violation of SC: Architecture without Caches  Overlapping writes Flag = a = 0; � Thread 1 � Thread 2 � T1 � T2 � a = 26; � while (Flag == 0) � {}; � (1) � Flag= 1; � write 
 b = a; � Flag � Memory � a = 0 � Flag = 0 � 33 Memory Model COS 597C, Fall 2010

  34. Violation of SC: Architecture without Caches  Overlapping writes Flag = a = 0; � Thread 1 � Thread 2 � T1 � T2 � (2) read Flag � a = 26; � while (Flag == 0) � {}; � (1) � Flag= 1; � write 
 b = a; � Flag � Memory � a = 0 � Flag = 0 � 34 Memory Model COS 597C, Fall 2010

Recommend


More recommend