Lynx: Using OS and Hardware Support for Fast Fine-Grained Inter-Core Communication Konstantina Mitropoulou, Vasileios Porpodas, Xiaochun Zhang and Timothy M. Jones Computer Laboratory UKMAC 2016, Edinburgh slide 1 of 30 http://www.cl.cam.ac.uk/~km647/
Outline • Background: • Lamport’s queue • Multi-section queue • Lynx queue • Performance evaluation slide 2 of 30 http://www.cl.cam.ac.uk/~km647/
Lamport’s Queue Bottlenecks enqueue_ptr ������������ ������������ ������������ ������������ ������������ ������������ ������������ ������������ dequeue_ptr slide 3 of 30 http://www.cl.cam.ac.uk/~km647/
Lamport’s Queue Bottlenecks enqueue_ptr ������������ ������������ ������������ ������������ ������������ ������������ ������������ ������������ dequeue_ptr while ( next enqueue ptr == dequeue ptr ) { ; } slide 3 of 30 http://www.cl.cam.ac.uk/~km647/
Lamport’s Queue Bottlenecks enqueue_ptr ������������ ������������ ������������ ������������ ������������ ������������ ������������ ������������ dequeue_ptr while ( next enqueue ptr == dequeue ptr ) { ; } Performance degradation due to: slide 3 of 30 http://www.cl.cam.ac.uk/~km647/
Lamport’s Queue Bottlenecks enqueue_ptr ������������ ������������ ������������ ������������ ������������ ������������ ������������ ������������ dequeue_ptr while ( next enqueue ptr == dequeue ptr ) { ; } Performance degradation due to: • Frequent thread synchronisation slide 3 of 30 http://www.cl.cam.ac.uk/~km647/
Lamport’s Queue Bottlenecks enqueue_ptr ������������ ������������ ������������ ������������ ������������ ������������ ������������ ������������ dequeue_ptr while ( next enqueue ptr == dequeue ptr ) { ; } Performance degradation due to: • Frequent thread synchronisation • Cache ping-pong slide 3 of 30 http://www.cl.cam.ac.uk/~km647/
Cache Ping-Pong L3 cache L2 cache L2 cache L1 cache L1 cache dequeue_ptr enqueue_ptr core 1 core 2 while ( next enqueue ptr == dequeue ptr ) { ; } slide 4 of 30 http://www.cl.cam.ac.uk/~km647/
Cache Ping-Pong L3 cache L2 cache L2 cache L1 cache L1 cache dequeue_ptr enqueue_ptr core 1 core 2 while ( next enqueue ptr == dequeue ptr ) { ; } • Queue pointers ping-pong across cache hierarchy slide 4 of 30 http://www.cl.cam.ac.uk/~km647/
Cache Ping-Pong L3 cache L2 cache L2 cache L1 cache L1 cache dequeue_ptr enqueue_ptr core 1 core 2 while ( next dequeue ptr == enqueue ptr ) { ; } • Queue pointers ping-pong across cache hierarchy slide 5 of 30 http://www.cl.cam.ac.uk/~km647/
Multi-Section Queue(MSQ): state-of-the-art enqueue_ptr section 1 section 2 dequeue_ptr slide 6 of 30 http://www.cl.cam.ac.uk/~km647/
Multi-Section Queue(MSQ): state-of-the-art enqueue_ptr ������������ ������������ section 1 section 2 ������������ ������������ ������������ ������������ ������������ ������������ dequeue_ptr • Each section is exclusively used by one thread slide 6 of 30 http://www.cl.cam.ac.uk/~km647/
Multi-Section Queue(MSQ): state-of-the-art enqueue_ptr ������������ ������������ section 1 section 2 ������������ ������������ ������������ ������������ ������������ ������������ dequeue_ptr • Enqueue thread cannot access section 1 because dequeue thread still uses it slide 7 of 30 http://www.cl.cam.ac.uk/~km647/
Multi-Section Queue(MSQ): state-of-the-art enqueue_ptr ������������ ������������ section 1 section 2 ������������ ������������ ������������ ������������ ������������ ������������ dequeue_ptr • Enqueue thread cannot access section 1 because dequeue thread still uses it • Enqueue thread waits (spins) at the end of section 2 slide 7 of 30 http://www.cl.cam.ac.uk/~km647/
Multi-Section Queue(MSQ): state-of-the-art enqueue_ptr ���������� ���������� section 1 section 2 ���������� ���������� ���������� ���������� ���������� ���������� dequeue_ptr • Dequeue thread reached the end of section 1 slide 8 of 30 http://www.cl.cam.ac.uk/~km647/
Multi-Section Queue(MSQ): state-of-the-art enqueue_ptr ���������� ���������� section 1 section 2 ���������� ���������� ���������� ���������� ���������� ���������� dequeue_ptr • Dequeue thread reached the end of section 1 • Enqueue thread enters section 1 slide 9 of 30 http://www.cl.cam.ac.uk/~km647/
Multi-Section Queue(MSQ): state-of-the-art enqueue_ptr ���������� ���������� section 1 section 2 ���������� ���������� ���������� ���������� ���������� ���������� dequeue_ptr Performance optimisations: slide 10 of 30 http://www.cl.cam.ac.uk/~km647/
Multi-Section Queue(MSQ): state-of-the-art enqueue_ptr ���������� ���������� section 1 section 2 ���������� ���������� ���������� ���������� ���������� ���������� dequeue_ptr Performance optimisations: • Infrequent boundary checks (less frequent synchronisation) slide 10 of 30 http://www.cl.cam.ac.uk/~km647/
Multi-Section Queue(MSQ): state-of-the-art enqueue_ptr ���������� ���������� section 1 section 2 ���������� ���������� ���������� ���������� ���������� ���������� dequeue_ptr Performance optimisations: • Infrequent boundary checks (less frequent synchronisation) • Reduced cache ping-pong slide 10 of 30 http://www.cl.cam.ac.uk/~km647/
MSQ Control-Flow Graph and Internals 1 1 2 2 3 3 4 4 5 5 6 enqueue function dequeue function slide 11 of 30 http://www.cl.cam.ac.uk/~km647/
MSQ Control-Flow Graph and Internals enqueue 1 2 3 4 5 6 enqueue function slide 11 of 30 http://www.cl.cam.ac.uk/~km647/
MSQ Control-Flow Graph and Internals enqueue 1 synchronisation code 2 3 4 5 6 enqueue function slide 11 of 30 http://www.cl.cam.ac.uk/~km647/
MSQ Control-Flow Graph and Internals enqueue 1 synchronisation code checks if next section is free 2 3 4 5 6 enqueue function slide 11 of 30 http://www.cl.cam.ac.uk/~km647/
MSQ Control-Flow Graph and Internals enqueue 1 synchronisation code checks if next section is free 2 spin loop 3 4 5 6 enqueue function slide 11 of 30 http://www.cl.cam.ac.uk/~km647/
MSQ Control-Flow Graph and Internals enqueue 1 synchronisation code checks if next section is free 2 spin loop 3 update local variables 4 5 6 enqueue function slide 11 of 30 http://www.cl.cam.ac.uk/~km647/
MSQ Control-Flow Graph and Internals enqueue 1 synchronisation code checks if next section is free 2 spin loop 3 update local variables 4 update shared variable 5 6 enqueue function slide 11 of 30 http://www.cl.cam.ac.uk/~km647/
MSQ Control-Flow Graph and Internals enqueue 1 synchronisation code checks if next section is free 2 spin loop 3 update local variables 4 update shared variable 5 join basic−block 6 enqueue function slide 11 of 30 http://www.cl.cam.ac.uk/~km647/
Recommend
More recommend