Random ASCII
randomascii.wordpress.com · Personal blog · on HN since 2011
Bruce Dawson, a Chrome engineer, writes about Windows performance debugging, floating-point math, and CPU and OS bugs he has tracked down.
What HN saysCommenters call it an excellent resource on obscure native code and platform details, and point to it for learning Windows Performance Analyzer.
274HN people shared it
163linked it in comments
195stories submitted
13Kstory points
3 months agolast shared
2011people per year2026
Most-shared posts
- 1There are only four billion floats, so test them all (2014)23 people · 1.1K points · first shared 2014 · 175 comments on HN
- 2Homepage22 people · first shared 2014
- 3Floating-Point Determinism (2013)19 people · 90 points · first shared 2013 · 15 comments on HN
- 4Comparing floating-point numbers (2012)16 people · 50 points · first shared 2012 · 3 comments on HN
- 524-core CPU and I can’t move my mouse15 people · 1.0K points · first shared 2017 · 499 comments on HN
- 6Intel Underestimates Error Bounds by 1.3 Quintillion12 people · 601 points · first shared 2014 · 73 comments on HN
- 7Finding a CPU Design Bug in the Xbox 36011 people · 837 points · first shared 2018 · 76 comments on HN
- 8Arranging Invisible Icons in Quadratic Time9 people · 440 points · first shared 2021 · 111 comments on HN
- 9The surprising subtleties of zeroing a register (2012)9 people · 293 points · first shared 2012 · 59 comments on HN
- 10Etw central9 people · first shared 2017
- 11O(n^2), again, now in Windows Management Instrumentation8 people · 526 points · first shared 2019 · 224 comments on HN
- 12Stop using strncpy already (2013)8 people · 91 points · first shared 2013 · 78 comments on HN
- 13Windows Timer Resolution: Megawatts Wasted7 people · 157 points · first shared 2013 · 41 comments on HN
- 1463 Cores Blocked by Seven Instructions6 people · 480 points · first shared 2019 · 84 comments on HN
- 15Everything Old Is New Again, and a Compiler Bug6 people · 30 points · first shared 2016 · 2 comments on HN
What HN people wrote when they linked it
moregrist · 2026-02-13
It clearly didn’t come out of game dev. Many people doing high performance work on either embedded or “big silicon” (amd64) in that era were fully aware of the importance of locality, branch prediction, etc
But game dev, in particular Mike Acton, did an amazing job of making it more broadly known. His CppCon talk from 2014 [0] is IMO one of the most digestible ways to start thinking about performance in high throughput systems.
In terms of heroes, I’d place Mike Acton, Fabian Giesen [1], and Bruce Dawson [2] at the top of the list. All solid performance-oriented people who’ve taken real time to explain how they think and how you can think that way as well.
I miss being able to listen in on gamedev Twitter circa 2013 before all hell broke loose.
[0] https://youtu.be/rX0ItVEVjHc?si=v8QJfAl9dPjeL6BI
[1] https://fgiesen.wordpress.com/
[2] https://randomascii.wordpress.com/
dwattttt · 2025-08-17
Windows Performance Analyser is pretty amazing. Not the simplest tool to use, but not particularly hard. Bruce Dawson's blog (https://randomascii.wordpress.com) has lots of articles using it.
theandrewbailey · 2025-04-29
I feel that Bruce Dawson's blog falls into the same/similar category, though he hasn't had a great technical post in a while. I wonder what multithreading bug he'll find next.
https://randomascii.wordpress.com/
daniel-thompson · 2022-01-01
Some favorites:
- Bruce Dawson - Chrome engineer (https://randomascii.wordpress.com/)
- Matt Pharr - Graphics researcher (https://pharr.org/matt/blog/)
- Pete Shirley - Graphics researcher (http://psgraphics.blogspot.com/)
fsloth · 2021-05-27
Bruce Dawson's https://randomascii.wordpress.com/ is excellent resource for obscure and complex details of native code and modern platforms.
rusanu · 2016-09-19
On the topic of ETW is worth mentioning UIforETW [0] and in general Bruce Dawson's blog [1].
[0] https://github.com/google/UIforETW
[1] https://randomascii.wordpress.com/
azth · 2014-09-11
Bruce Dawson has some excellent posts about profiling performance issues on Windows: http://randomascii.wordpress.com/
criddell · 2026-06-18
I know IT people often aren't given the time to dig into this stuff, but xperf and event tracing should reveal the culprit fairly quickly.
The best resource for this kind of stuff is Bruce Dawson's blog:
https://randomascii.wordpress.com/2015/09/24/etw-central/
lanstin · 2026-05-20
That's true for product development, but it's not true for mathy libraries. Perfect is achievable. For a released software that humans will decide to use or not, rapid iteration is great. But also: https://randomascii.wordpress.com/2014/01/27/theres-only-four-billion-…
Precision and exactitude and formally proven correct software can exist in some problem domains, and it's kind of silly to not achieve that when it's achievable.
guenthert · 2026-04-08
" until you have proven it works, it is broken!"
immediately followed by
"Time to run some tests!"
Prompted a grin. Then however
"If we wanted to test this using directed testing we would need to test for all 2^32 input combinations, which sounds like a terrible idea …
… and exactly what I am going to do "
Wait, exhaustively testing float number space ... I read about that before. Might have been https://randomascii.wordpress.com/2014/01/27/theres-only-four-billion-…
covered also here https://news.ycombinator.com/item?id=34726919
Arainach · 2026-02-19
Raymond generally discusses public things and history. That's allowable plenty of places.
Bruce Dawson was publishing debugging stories (including things debugged about Google products done as part of his job) for the entire time he was working at Google: https://randomascii.wordpress.com/
nsm · 2025-12-23
https://randomascii.wordpress.com/ - former Chrome engineer about all things performance engineering and particularly focused on Windows.
ryuuchin · 2025-12-03
The browser isn't exposing it to websites. It's simply due to the fact of playing media that it's lowering the minimum timer resolution on Windows. In the past it would also do this when just scrolling among other things if I remember correctly, I'm not sure if it still does this.
Firefox uses a different method that doesn't require lowering the minimum timer resolution.
Either way the global behavior of this is no longer true on modern Windows 10/11 machines (as of Windows 10 2004) as each process must now call timeBeginPeriod if it wants increased timer resolution: https://randomascii.wordpress.com/2020/10/04/windows-timer-resolution-…
https://learn.microsoft.com/en-us/windows/win32/api/timeapi/nf-timeapi…
Someone · 2025-12-01
> If you decode the instruction, it makes sense to use XOR:
> - mov ax, 0 - needs 4 bytes (66 b8 00 00) - xor ax,ax - needs 3 bytes (66 31 c0)
Except, apparently, on the pentium Pro, according to this comment: https://randomascii.wordpress.com/2012/12/29/the-surprising-subtleties… which says:
“But there was at least one out-of-order design that did not recognize xor reg, reg as a special case: the Pentium Pro. The Intel Optimization manuals for the Pentium Pro recommended “mov” to zero a register.”
zX41ZdbW · 2025-08-14
This is a great article!
A few more resources on this topic:
https://randomascii.wordpress.com/category/floating-point/ - a series of articles about floating point, with deeper details.
https://float.exposed/ - explorer of floating point values by Bartosz Ciechanowski.
DavidVoid · 2025-05-24
There's a great Random ASCII blog post about an obscure FPU issue like this [1].
- The crash was in a FPU that Chrome barely uses - The instruction that crashed Chrome was thousands of instructions away from the one that triggered the exception - The instruction that triggered the exception was not at fault - The crash only happened because of third-party code running inside of Chrome - The crash was ultimately found to be caused by a code-gen bug in Visual Studio 2015 I've run into this kind of thing once myself (sharing a process with other companies is fun!). It was real confusing to get a stack trace showing our code suddenly crashing on a line of code that was doing the exact same thing with the exact same values as it had always done before.
[1]: https://randomascii.wordpress.com/2016/09/16/everything-old-is-new-aga…
jwnin · 2025-04-29
Bruce retired following the passing of his wife. Good for him; life is short.
https://randomascii.wordpress.com/2024/10/01/life-death-and-retirement…
mohn · 2024-03-11
> there is a pretty famous former M$ performance engineer who worked on Xbox and bunch of other large projects, he has webpage about how he tracks down bugs and performance issues, don't it have it handy unfortunately.
Bruce Dawson's blog, Random ASCII?
https://randomascii.wordpress.com/
Retr0id · 2024-03-10
The existence of platforms that do not conform to their own specifications does not make an operator non-deterministic.
Edit: I found this pretty great article on the subject https://randomascii.wordpress.com/2013/07/16/floating-point-determinis…
We're both right, depending on how you frame the question.
brucedawson · 2023-01-18
I don't think that is true. If they had that many developers burning down performance issues then bugs like this would (IMHO) be getting fixed earlier. Anecdotally it sounds like a lot of customers are hitting this bug and I'd love to know whether it is known, being investigated, or just noticed now.
I'm sure it has been showing up in their start-menu telemetry.
I also wonder why they haven't fixed this issue:
https://twitter.com/BruceDawson0xB/status/1607163439159611392t
And why this was ever allowed to ship:
https://randomascii.wordpress.com/2022/09/29/why-modern-software-is-sl…
And why this was ever allowed to ship:
https://randomascii.wordpress.com/2022/07/11/slower-memory-zeroing-thr…
raphlinus · 2022-10-02
The actual rules are very complicated. C allows greater precision for intermediate results but compilers are sometimes careful to stick to IEEE rounding. [1] contains a good general overview, and [2] talks about FMA in particular. And in [3] I've set up a Godbolt example to play with. By default -O3 gives you FMA, but -O or -O3 with -ffp-contract=off don't. So you absolutely can get different results depending on optimization levels.
[1]: https://randomascii.wordpress.com/2012/03/21/intermediate-floating-poi…
[2]: https://kristerw.github.io/2021/11/09/fp-contract/
[3]: https://godbolt.org/z/eTz8o6b3P
cdavid · 2022-03-31
relative tolerance is not always enough, especially near 0. This classic article gives a nice overview of absolute, relative, ulp-based and other methods for comparison of float numbers: https://randomascii.wordpress.com/2012/02/25/comparing-floating-point-…
asicsp · 2022-02-07
Bruce Dawson: https://randomascii.wordpress.com/
+1 for Julia Evans already mentioned in another comment, who also has a favorite blogs post that may help you further: https://jvns.ca/blog/2016/04/09/some-of-my-favorite-blogs/
https://blogsurf.io/ has a huge directory, you could search by tags/topics and see if something interests you
Specifically for Python, I have a list of blogs here: https://learnbyexample.github.io/py_resources/miscellaneous.html#blogs
Bartosz Ciechanowski: https://ciechanow.ski (more of a tech blog explaining things visually, interactively, etc)
Pr0ject217 · 2022-02-07
EDIT:
Paste this hacky snippet into your browser's console to save all of the links into your clipboard:
(() =>
{
let result = [...document.querySelectorAll('td a')]
.map((link) =>
link &&
!link.href.includes('ycombinator') &&
!link.href.includes('javascript:void')
? link.href
: ''
)
.filter(Boolean);
result = [...new Set(result)];
result.sort();
copy(result.join('\n\n'));
})();
Just to help, here's a compiled-list of all of the links shared here so…
zonovar · 2021-11-16
https://randomascii.wordpress.com/ - Random ASCII – tech blog of Bruce Dawson (Google programmer working on Chrome, focusing on optimization and reliability)
plorkyeran · 2021-04-05
This post was written by Bruce Dawson and is very similar to his normal blog content: https://randomascii.wordpress.com/
MarekKnapek · 2021-03-01
Please don't compute speed-up like that.
Old time: 6 minutes (360 seconds).
New time: 1 minute and 50 seconds (110 seconds).
Speed-up calculated by article author: 1-110/360=0.694 (69.4% saved).
Speed-up calculated by me: 360/110=3.27 (3 times faster).
Please calculate it the other way around. It makes great difference when you say you made something 10× faster than when you say you saved 90% of work even if both mean exactly the same thing.
Bruce Dawson has great article about this: https://randomascii.wordpress.com/2018/02/04/what-we-talk-about-when-w…
com2kid · 2021-03-01
Remember this story from a few days ago?
https://randomascii.wordpress.com/2021/02/16/arranging-invisible-icons…
I've seen plenty of interesting bugs, best I found personally was a compiler that was outputting files 1 byte at a time.
Games are riff with these sorts of bugs, but the volume of released games vs other types of software makes any sort of comparison unfair.
kiddico · 2021-02-16
This is my personal favorite: https://randomascii.wordpress.com/2018/01/07/finding-a-cpu-design-bug-…
nayuki · 2021-01-30
The author of the page writes: "This post was an accidental duplicate. The content has been deleted from this copy. You can find the (updated) original here."
Please change the URL from https://randomascii.wordpress.com/2021/01/29/windows-timer-resolution-… to https://randomascii.wordpress.com/2020/10/04/windows-timer-resolution-…