The Curious Engineer

All blogs / Performance / optimization

Computer, Enhance!

computerenhance.com

Programming Courses and Interviews, by Casey Muratori. Click to read "Computer, Enhance!", by Casey Muratori, a Substack publication with tens of thousands of subscribers.

Performance / optimizationCPU / microarchitectureAssembly

Posts
276 from 5 Jul 2022 to 27 Oct 2026
Posting
weekly (47 in the last year)
Kind
personal blog
Feed
https://www.computerenhance.com/feed

2026 43

  1. What’s in a Token?
  2. Horizontal Operations
  3. SIMD Unpacks
  4. SIMD Shuffles
  5. Q&A #88 (2026-10-02)
  6. Nested SIMD Predicates
  7. SIMD Mask Registers
  8. What Is AI Doing to Math?
  9. High-Performance Database Architecture
  10. 520 Pages Per Hour
  11. Is AI a Good Research Assistant?
  12. SIMD Masking
  13. The Root of the Root of All Evil
  14. Q&A #87 (2026-08-25)
  15. The Pit of Success
  16. The Pattern Behind x64 CMPPS/PD Immediates
  17. SIMD Predicates
  18. Branchless Absolute Value
  19. What New Jobs?
  20. Three Steps from Scalar to SIMD
  21. Why AI Companies Need Scale
  22. Let's Decode the Mystery Bytes!
  23. Will AI End the Open Internet?
  24. Q&A #86 (2026-06-10)
  25. Intuitive Random Selection (with Marc LeBlanc)
  26. Will AI Make Me Worse?
  27. The First Entity Component System
  28. How to Use uops.info
  29. Q&A #85 (2026-05-26)
  30. Let's Answer Ray's Question!
  31. Block Interleaving
  32. The Ethics of Generative AI
  33. Q&A #84 (2026-04-20)
  34. "Am I Crazy?"
  35. In-order Interleaving
  36. My Thoughts on Notch's DLSS Post
  37. Making Sense of the Hype
  38. Q&A #83 (2026-03-11)
  39. Should You Be A Carpenter?
  40. Dependency Chain Stalls
  41. The Sitdown: Types of DRAM and the DRAM Shortage
  42. Q&A #82 (2026-01-27)
  43. DynamoDB, Don't Leave Me Hanging!

2025 42

  1. Dead Code Elimination Prevention Macros
  2. Q&A #81 (2025-12-22)
  3. Our Nemesis Returns
  4. Q&A #80 (2025-10-31)
  5. Better Prevention of Dead Code Elimination - Or Is It?
  6. Q&A #79 (2025-09-28)
  7. Catch the Tower Stream Live Today
  8. New Collaboration with Marco Behler
  9. A Brief Status Update
  10. Reading CPU Diagrams
  11. The Montana Mini-Computer (feat. Carson Gross)
  12. My Cyber Rush Week Conversation with Josiah Stearns
  13. Q&A #78 (2025-07-21)
  14. The Big OOPs: Anatomy of a Thirty-Five Year Mistake
  15. Catch the Live Broadcast of My BSC Talk!
  16. Selectively Preventing Optimizations
  17. Q&A #77 (2025-06-19)
  18. Simplified Haversine Candidates
  19. Computer Enhance Summer News!
  20. Q&A #76 (2025-05-23)
  21. The Micro Group
  22. Removing Waste
  23. Our Very Own Haversine
  24. Q&A #75 (2025-05-02)
  25. Extending Arcsine to the Full Input Range
  26. Approximating Arcsine
  27. Q&A #74 (2025-04-01)
  28. An Interview with Zen Chief Architect Mike Clark
  29. Coefficient Arrays for Polynomial Evaluation
  30. Q&A #73 (2025-03-03)
  31. Fused Multiply-Add
  32. Q&A #72 (2025-02-17)
  33. Horner's Rule
  34. Approximation Using Higher-Power Polynomials
  35. Q&A #71 (2025-02-03)
  36. Math Tester Retcon
  37. Range Reduction
  38. Function Approximation
  39. Q&A #70 (2025-01-20)
  40. Introduction to SSE Intrinsics
  41. Q&A #69 (2025-01-13)
  42. Q&A #68 (2025-01-06)

2024 79

  1. Determining Input Ranges
  2. Identifying Non-inlined Math Functions
  3. Reference Haversine Code
  4. Q&A #67 (2024-11-18)
  5. Meow Hash
  6. Real-time PMCs on Windows with ETW
  7. Halloween Spooktacular Day 15: Use GetEventProcessorIndex to Help Track Profile Regions
  8. Halloween Spooktacular Day 14: Use SysCallEnter to Mark Stop Points
  9. Halloween Spooktacular Day 13: Use SysCallExit to Mark Start Points
  10. Halloween Spooktacular Day 12: Find Another PMC Event Type
  11. Halloween Spooktacular Day 11: Define Your Own Event UserData
  12. Halloween Spooktacular Day 10: Use TraceEvent
  13. Halloween Spooktacular Day 9: What's Left?
  14. Halloween Spooktacular Day 8: Mārtiņš Možeiko's Miniperf
  15. Halloween Spooktacular Day 7: Look for PMCs in the ExtendedData
  16. Halloween Spooktacular Day 6: PMCs Only Work for A Subset of Event Types
  17. Halloween Spooktacular Day 5: Call TraceSetInformation Twice
  18. Halloween Spooktacular Day 4: Use TraceQueryInformation
  19. Halloween Spooktacular Day 3: Trace in Real-Time Mode
  20. Halloween Spooktacular Day 2: Reboot Your Machine
  21. Halloween Spooktacular Day 1: The Challenge
  22. Announcing the 2024 Halloween Spooktacular Challenge!
  23. Q&A #66 (2024-10-01)
  24. The Case of the Missing Increment
  25. Q&A #65 (2024-09-09)
  26. Zen, CUDA, and Tensor Cores, Part I: The Silicon
  27. Q&A #64 (2024-08-26)
  28. Q&A #63 (2024-08-19)
  29. Q&A #62 (2024-08-08)
  30. Testing Memory-Mapped Files
  31. Q&A #61 (2024-07-30)
  32. Esoterica: Next-gen x64 Cores and Micro-op Caches
  33. A Brief Note on the CrowdStrike Outage and "Tech Influencer" YouTube
  34. Q&A #60 (2024-07-22)
  35. A Closer Look at the Prefetching Performance Graph
  36. Q&A #59 (2024-07-15)
  37. A.N.A.L.O.G. Computing Adventures
  38. Overlapping File Reads with Computation
  39. Q&A #58 (2024-06-24)
  40. 2x Faster File Reads
  41. Me and Prime Talk Game Engine Basics
  42. Q&A #57 (2024-06-17)
  43. Prefetching Wrap-up
  44. The World's First CG Commercial
  45. Q&A #56 (2024-06-10)
  46. Podcast Appearances, New Video on the Way, etc.
  47. Q&A #55 (2024-05-20)
  48. Q&A #54 (2024-05-13)
  49. Prefetching
  50. Q&A #53 (2024-05-06)
  51. Non-temporal Stores
  52. Q&A #52 (2024-04-29)
  53. A Brief Note on the FTC Noncompete Rule
  54. Q&A #51 (2024-04-18)
  55. Does x86 Need to Die?
  56. Cache Sets and Indexing
  57. Q&A #50 (2024-04-08)
  58. Q&A #49 (2024-04-02)
  59. The Apple M-Series GoFetch Attack
  60. Q&A #48 (2024-03-25)
  61. Unaligned Load Penalties
  62. Q&A #47 (2024-03-18)
  63. Latency and Throughput, Again
  64. Q&A #46 (2024-03-11)
  65. Non-Power-of-Two Cache Size Testing
  66. Q&A #45 (2024-03-04)
  67. Cache Size and Bandwidth Testing
  68. Q&A #44 (2024-02-26)
  69. Increasing Read Bandwidth with SIMD Instructions
  70. Q&A #43 (2024-02-06)
  71. Execution Ports and the Scheduler
  72. Q&A #42 (2024-01-29)
  73. Q&A #41 (2024-01-23)
  74. Reader Poll: Sponsored Job Offers
  75. The RAT and the Register File
  76. Q&A #40 (2024-01-18)
  77. MSVC PDBs Are Filled With Stale Debug Info
  78. Q&A #39 (2024-01-09)
  79. Byte Positions Are Better Than Line Numbers

2023 108

  1. Code Alignment
  2. Q&A #38 (2023-12-11)
  3. Branch Prediction
  4. Q&A #37 (2023-12-04)
  5. A Few Quick Notes
  6. CPU Front End Basics
  7. Q&A #36 (2023-11-27)
  8. Linking Directly to ASM for Experimentation
  9. Q&A #35 (2023-11-20)
  10. Analyzing Dependency Chains
  11. Q&A #34 (2023-11-13)
  12. Intuiting Latency and Throughput
  13. Q&A #33 (2023-11-06)
  14. Inspecting Loop Assembly
  15. Q&A #32 (2023-10-30)
  16. Memory-Mapped Files
  17. Q&A #31 (2023-10-23)
  18. Faster Reads with Large Page Allocations
  19. Q&A #30 (2023-10-09)
  20. Powerful Page Mapping Techniques
  21. Q&A #29 (2023-10-02)
  22. Analyzing Page Fault Anomalies
  23. Q&A #28 (2023-09-25)
  24. Four-Level Paging
  25. Q&A #27 (2023-09-18)
  26. Game Development Post-Unity
  27. Probing OS Page Fault Behavior
  28. Q&A #26 (2023-09-11)
  29. Page Faults
  30. Q&A #25 (2023-09-04)
  31. Monitoring OS Performance Counters
  32. Q&A #24 (2023-08-28)
  33. Repetition Testing
  34. Q&A #23 (2023-08-21)
  35. Measuring Data Throughput
  36. Q&A #22 (2023-08-15)
  37. Efficient DDA Circle Outlines
  38. Microsoft Intern Interview Question #3: Flood Fill Detection
  39. Microsoft Intern Interview Question #2: String Copy
  40. Microsoft Intern Interview Question #1: Rectangle Copy
  41. The Four Programming Questions from My 1994 Microsoft Internship Interview
  42. Monday Q&A #21 (2023-07-31)
  43. Comparing the Overhead of RDTSC and QueryPerformanceCounter
  44. A Tale of Two Radio Shacks
  45. New Q&A Process
  46. A First Look at Profiling Overhead
  47. Monday Q&A #20 (2023-07-17)
  48. Profiling Recursive Blocks
  49. Monday Q&A #19 (2023-07-10)
  50. Profiling Nested Blocks
  51. Monday Q&A #18 (2023-07-03)
  52. Instrumentation-Based Profiling
  53. Monday Q&A #17 (2023-06-26)
  54. How does QueryPerformanceCounter measure time?
  55. Monday Q&A #16 (2023-06-19)
  56. Introduction to RDTSC
  57. Monday Q&A #15 (2023-06-12)
  58. Initial Haversine Processor Code Review
  59. Monday Q&A #14 (2023-06-05)
  60. Writing a Simple Haversine Distance Processor
  61. Monday Q&A #13 (2023-05-29)
  62. Generating Haversine Input JSON
  63. Monday Q&A #12 (2023-05-22)
  64. The First Magic Door
  65. Part One Q&A and Homework Showcase
  66. 8086 Simulation Code Review
  67. Monday Q&A #11 (2023-05-15)
  68. How to Play Trinity
  69. 8086 Internals Poll
  70. From 8086 to x64
  71. Monday Q&A #10 (2023-05-08)
  72. Estimating Cycles
  73. Performance Excuses Debunked
  74. Monday Q&A #9 (2023-04-24)
  75. The Stack
  76. Other Common Instructions
  77. Monday Q&A #8 (2023-04-17)
  78. Simulating Real Programs
  79. Simulating Memory
  80. Monday Q&A #7 (2023-04-10)
  81. Response to a Reporter Regarding "Clean Code, Horrible Performance"
  82. Simulating Conditional Jumps
  83. Simulating ADD, SUB, and CMP
  84. New Schedule Experiment
  85. Homework Poll!
  86. Simulating Non-memory MOVs
  87. Using the Reference Decoder as a Shared Library
  88. Monday Q&A #6 (2023-03-20)
  89. 8086 Decoder Code Review
  90. Monday Q&A #5 (2023-03-13)
  91. Opcode Patterns in 8086 Arithmetic
  92. Monday Q&A #4 (2023-03-06)
  93. Decoding Multiple Instructions and Suffixes
  94. Instruction Decoding on the 8086
  95. "Clean" Code, Horrible Performance
  96. The Haversine Distance Problem
  97. Monday Q&A #3 (2023-02-20)
  98. Python Revisited
  99. Multithreading
  100. Monday Q&A #2 (2023-02-12)
  101. Caching
  102. Single Instruction, Multiple Data
  103. Monday Q&A (2023-02-05)
  104. Instructions Per Clock
  105. Waste
  106. Welcome to the Performance-Aware Programming Series!
  107. Performance-Aware Programming Series Begins February 1st
  108. Table of Contents

2022 4

  1. Turns are Better than Radians
  2. Why isn't there a CreateProcess that completely isolates Windows processes?
  3. The Problem with RISC-V V Mask Bits
  4. No really, why can't we have raw UDP in JavaScript?