Parsing JSON Really Quickly: Lessons Learned
InfoQ3 HN recommenders · recommended in 3 months, 2020-2026
86K views · 6 years ago · talk · evergreen
Daniel Lemire's QCon talk on how simdjson parses gigabytes of JSON per second. It covers SIMD vectorization, branch prediction and the lessons learned building a fast parser.
HN points to it as the best explanation of simdjson internals and of why fast parsing is rarely disk-bound.
1:50:07JSON Parser 100% From Scratch in Haskell (only 111 lines)
Tsoding
205K views • 6 years ago
1:00:17Stephan T. Lavavej “Floating-Point <charconv>: Making Your Code 10x Faster With C++17's Final Boss”
CppCon
41K views • 7 years ago
27:43Bringing SIMD to the Web via Dart
InfoQ
11K views • 13 years ago
1:13:41CppCon 2014: Chandler Carruth "Efficiency with Algorithms, Performance with Data Structures"
CppCon
235K views • 12 years ago
13:45A 10x faster TypeScript
Microsoft Developer
608K views • 1 year ago
1:21:39Making R run Fast - Jan Vitek
John O'Neill
860 views • 10 years ago
59:11How to Speed up a Python Program 114,000 times.
InfoQ
171K views • 13 years ago
31:19CppCon 2016: Nicholas Ormrod “The strange details of std::string at Facebook"
CppCon
122K views • 10 years ago
1:02:17'Fastware' - Andrei Alexandrescu [ ACCU 2016 ]
ACCU Conference
34K views • 10 years ago
36:31Hey Underscore, You're Doing It Wrong!
InfoQ
141K views • 13 years ago
2:50:14Simple Code, High Performance
Molly Rocket
463K views • 5 years ago
1:02:44Chris Seaton @ VMSS16: JRuby+Truffle: Why it’s Important to Optimise the Tricky Parts
softdevteamuk
5K views • 10 years ago
52:54Rust at speed — building a fast concurrent database
Jon Gjengset
225K views • 7 years ago
59:34CppCon 2017: Matt Kulukundis “Designing a Fast, Efficient, Cache-friendly Hash Table, Step by Step”
CppCon
137K views • 9 years ago
55:49CppCon 2016: Chandler Carruth “High Performance Code 201: Hybrid Data Structures"
CppCon
119K views • 10 years ago
1:29:55Sorting Algorithms: Speed Is Found In The Minds of People - Andrei Alexandrescu - CppCon 2019
CppCon
184K views • 7 years ago
38:38"Tree-sitter - a new parsing system for programming tools" by Max Brunsfeld
Strange Loop Conference
63K views • 8 years ago
30:37High-performance Tree Wrangling, the APL Way // Aaron Hsu // Dyalog '18
Dyalog User Meetings
6K views • 7 years ago
50:11Twitter’s Quest for a Wholly Graal Runtime by Chris Thalinger
Scala Days Conferences
3K views • 8 years ago
1:04:26CppCon 2018: G. Nishanov “Nano-coroutines to the Rescue! (Using Coroutines TS, of Course)”
CppCon
40K views • 8 years ago
5 comments from Hacker News
Github: link It showcases an especially ingenious scheme for escaping json strings, as well as the other tokens necessary to parse json. Daniel Lemire - One of the authors at QCon 2019: ▶ this video Another Youtube video that explains it: link
Daniel Lemire has an interesting talk on this: ▶ this video . They key takeaway is that the disk is rarely the bottleneck.
I find these optimizations fascinating. Anyone familiar with Lemire likely knows about this, but I listened to a podcast episode[1] with him a few days ago and learned about `simdjson`, the tool he authored that parses JSON at 25x the speed of the standard C++ library.[2][3] It's worth looking at if you're into this sort of thing. 1. link 2. ▶ this video 3. link
The GitHub page links to a video that explains some of the internals [1]. Can someone comment on the result that they show at 14:26? My understanding is that they run a code that does 2000 branches based on a pseudo-random sequence. Over around 10 runs of that code, the CPU supposedly learns to correctly predict those 2000 branches and the performance steadily increases. Do the modern branch predictors really have the capability to remember an exact sequence of past 2000 decisions on the same branch instruction? Also, why would the performance increase incrementally like that? I would imagine that it would remember the loop history on the first run and achieve maximum performance on the second run. I doubt that there's really a neural net in the silicon doing this as the author speculates. [1] ▶ this video
I can relate. I have been one of those who started writing a CSV library and went down the rabbit hole of edge cases and configurability. Looking back (and only thinking on productivity) my time would have been better spent doing something else. I did, however, learn quite a lot along the way: - how text is represented in a computer (and all its caveats), - how to identify and tune slow code, - how to vectorize code (thanks to Daniel Lemire's ▶ this video ), - how to encapsulate code better, - how to use some great CSV tools out there (thanks to Leon's link ) - how to better manage and communicate an open source project. All in all, I am still not sure it was a mistake. Moreover when Swift didn't really had, at the time, a good Codable interface to CSV. Next time I encounter a similar problem I will probably just wrap a C library and create a good interface, though. In any case, if you are coding in Swift and find yourself in need of a CSV encoder/decoder, you might want to check link