Context is Everything
?
?
W, K, P / S, J, N Jump to previous / next timestamp
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)
X, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus
Keyboard Navigation
Global Keys
[, < / ], > Jump to previous / next episodeW, K, P / S, J, N Jump to previous / next timestamp
t / T Toggle theatre / SUPERtheatre mode
V Revert filter to original state Y Select link (requires manual Ctrl-c)
Menu toggling
q Quotes r References f Filter y Link c CreditsIn-Menu and Index Controls
a
w
s
s
d
h
j
k
l
←
↑
↓
↓
→
Esc Close menu / unfocus timestamp
Quotes and References Menus and Index
Enter Jump to timestampQuotes, References and Credits Menus
o Open URL (in new tab)Filter Menu
x, Space Toggle category and focus nextX, ShiftSpace Toggle category and focus previous
v Invert topics / media as per focus
Filter and Link Menus
z Toggle filter / linking modeCredits Menu
Enter Open URL (in new tab)⏫
Previous: 'Nushell'
⏫
0:00Welcome to the talk
0:00Welcome to the talk
0:00Welcome to the talk
0:08Intro - Andreas
0:08Intro - Andreas
0:08Intro - Andreas
0:52Low-Level Thinking = High-level wins?
0:52Low-Level Thinking = High-level wins?
0:52Low-Level Thinking = High-level wins?
1:49The Secret
1:49The Secret
1:49The Secret
2:17Scenario: Making Coffee
2:17Scenario: Making Coffee
2:17Scenario: Making Coffee
3:23Everything Costs Something
3:23Everything Costs Something
3:23Everything Costs Something
4:36Scenario: Make a web app
4:36Scenario: Make a web app
4:36Scenario: Make a web app
5:25"Your web app is slow" - Death by Layer
5:25"Your web app is slow" - Death by Layer
5:25"Your web app is slow" - Death by Layer
6:24In Defense of Negativity Bias
6:24In Defense of Negativity Bias
6:24In Defense of Negativity Bias
7:39Case: The JSON Library
7:39Case: The JSON Library
7:39Case: The JSON Library
8:15What does the data look like?
8:15What does the data look like?
8:15What does the data look like?
10:01JSON schema by example
10:01JSON schema by example
10:01JSON schema by example
10:23Let's get an off the shelf JSON library
10:23Let's get an off the shelf JSON library
10:23Let's get an off the shelf JSON library
11:19How does it perform? 41.40 MB/s
11:19How does it perform? 41.40 MB/s
11:19How does it perform? 41.40 MB/s
12:19Intel® Xeon® W-2295 Processor specifications1
12:19Intel® Xeon® W-2295 Processor specifications1
12:19Intel® Xeon® W-2295 Processor specifications1
13:02Regret2
13:02Regret2
13:02Regret2
13:47Mistake
13:47Mistake
13:47Mistake
14:20Let's profile
14:20Let's profile
14:20Let's profile
15:00Cost of solving the wrong problem
15:00Cost of solving the wrong problem
15:00Cost of solving the wrong problem
16:26Linear Allocation To The Rescue? 82.26 MB/s
16:26Linear Allocation To The Rescue? 82.26 MB/s
16:26Linear Allocation To The Rescue? 82.26 MB/s
17:23Let's profile
17:23Let's profile
17:23Let's profile
17:51OK now what?
17:51OK now what?
17:51OK now what?
19:05Let's parse some JSON
19:05Let's parse some JSON
19:05Let's parse some JSON
20:00JSON predictive parser code
20:00JSON predictive parser code
20:00JSON predictive parser code
20:51Code structure follows schema
20:51Code structure follows schema
20:51Code structure follows schema
21:25How did we do? 462.32 MB/s
21:25How did we do? 462.32 MB/s
21:25How did we do? 462.32 MB/s
22:16Let's profile
22:16Let's profile
22:16Let's profile
22:47Why are we in isspace() so much?
22:47Why are we in isspace() so much?
22:47Why are we in isspace() so much?
23:46Fixing isspace()
23:46Fixing isspace()
23:46Fixing isspace()
24:39How did we do? 700.09 MB/s
24:39How did we do? 700.09 MB/s
24:39How did we do? 700.09 MB/s
25:28We can still do better
25:28We can still do better
25:28We can still do better
27:05squash_ws_simd()
27:05squash_ws_simd()
27:05squash_ws_simd()
28:14Left-packing chars
28:14Left-packing chars
28:14Left-packing chars
29:14Pro-tip: Use awful Perl scripts to make LUTs
29:14Pro-tip: Use awful Perl scripts to make LUTs
29:14Pro-tip: Use awful Perl scripts to make LUTs
30:05How did we do? 905.40 MB/s
30:05How did we do? 905.40 MB/s
30:05How did we do? 905.40 MB/s
31:15What is whitespace, anyway?
31:15What is whitespace, anyway?
31:15What is whitespace, anyway?
32:15squash_ws_simd() throwing away all non-printable characters
32:15squash_ws_simd() throwing away all non-printable characters
32:15squash_ws_simd() throwing away all non-printable characters
32:38How did we do? 1184.79 MB/s
32:38How did we do? 1184.79 MB/s
32:38How did we do? 1184.79 MB/s
33:36Let's profile
33:36Let's profile
33:36Let's profile
34:05Expecting Integers
34:05Expecting Integers
34:05Expecting Integers
35:30Branch mispredictions are expensive
35:30Branch mispredictions are expensive
35:30Branch mispredictions are expensive
36:16SIMD how?
36:16SIMD how?
36:16SIMD how?
37:54expect_int()
37:54expect_int()
37:54expect_int()
38:23Factor table
38:23Factor table
38:23Factor table
39:07About that subtraction to generate a mask…
39:07About that subtraction to generate a mask…
39:07About that subtraction to generate a mask…
40:56How did we do? 1229.03 MB/s
40:56How did we do? 1229.03 MB/s
40:56How did we do? 1229.03 MB/s
41:42Let's profile
41:42Let's profile
41:42Let's profile
42:00Where there's one, there's many
42:00Where there's one, there's many
42:00Where there's one, there's many
42:35parse_int_array_branchfree()
42:35parse_int_array_branchfree()
42:35parse_int_array_branchfree()
42:52Branch-free?
42:52Branch-free?
42:52Branch-free?
44:59How did we do? 1254.08 MB/s
44:59How did we do? 1254.08 MB/s
44:59How did we do? 1254.08 MB/s
45:27Low-Level Thinking Recap: JSON
45:27Low-Level Thinking Recap: JSON
45:27Low-Level Thinking Recap: JSON
46:41Thought Experiments: Hash Tables
46:41Thought Experiments: Hash Tables
46:41Thought Experiments: Hash Tables
48:14Thought Experiments: Memory Allocation
48:14Thought Experiments: Memory Allocation
48:14Thought Experiments: Memory Allocation
49:21Scenario: Omelet
49:21Scenario: Omelet
49:21Scenario: Omelet
50:05Scenario: Memory Corruption Crash
50:05Scenario: Memory Corruption Crash
50:05Scenario: Memory Corruption Crash
50:48Final Words
50:48Final Words
50:48Final Words
51:45Q&A: Thanks for listening3
51:45Q&A: Thanks for listening3
51:45Q&A: Thanks for listening3
⏬
Next: 'Profiling: Principles and Practices for Performant Processing'
⏬