A nice talk from Chandler Carruth at cppcon last year:
Which features this nice table which helps to highlight why data structures are so important.
ns | ms | Notes | |
One cycle on a 3 GHz processor | 1 | ||
L1 cache reference | 0.5 | ||
Branch mispredict | 5 | ||
L2 cache reference | 7 | 14x L1 cache | |
Mutex lock/unlock | 25 | ||
Main memory reference | 100 | 20x L2, 200x L1 | |
Compress 1K bytes with Snappy | 3,000 | ||
Send 1K bytes over 1 Gbps network | 10,000 | 0.01 | |
Read 4K randomly from SSD* | 150,000 | 0.15 | |
Read 1 MB sequentially from memory | 250,000 | 0.25 | |
Round trip within same datacenter | 500,000 | 0.5 | |
Read 1 MB sequentially from SSD* | 1,000,000 | 1 | 4X memory |
Disk seek | 10,000,000 | 10 | 20x datacenter RT |
Read 1 MB sequentially from disk | 20,000,000 | 20 | 80x memory, 20X SSD |
Send packet CA->Netherlands->CA | 150,000,000 | 150 |
Good hash table design : 00:49:00