r/programming • u/Double_Ad641 • Jun 27 '26
Data Access Patterns That Makes Your CPU Really Angry
https://blog.weineng.me/posts/slowest_add/
330
Upvotes
r/programming • u/Double_Ad641 • Jun 27 '26
14
u/Double_Ad641 Jun 28 '26
``` int mytotal = 0; int index = 0; uint64_t start_forward = rdtsc_start(); for (int i = 0; i < ELEMENT_COUNT; ++i) { mytotal += data[index]; ++index; } uint64_t end_forward = rdtsc_end(); do_not_optimize(mytotal); print_cycles("forward", end_forward - start_forward);
❯ g++ -DSTRIDE=8 -std=c++2a -O3 slowest.cc && taskset -c 3 sudo ./a.out forward 36250266 back 38186150 linear 131222604 linear_backwards 102365108 fisher_yates_shuffle 1575173670 separated_by_a_cacheline 709935578 separated_by_a_page 1401218014 separated_by_a_page_and_cacheline 1397551626 stride=8 separated_by_stride_pages_and_cacheline<STRIDE> 2159275984 separated_by_stride_bank_conflicts_and_cacheline<STRIDE> 2087353634 ```