A very brief BitKnit retrospective

BitKnit is a LZ77+RANS lossless general-purpose compressor that was designed 8 years ago (1.0 release on May 20, 2015) to replace the aging and very slow to encode LZ77+arithmetic coding codec built into Granny 3D, and also worked – somewhat unintentionally – as a LZ77/entropy co … | Continue reading


@fgiesen.wordpress.com | 1 year ago

On AlphaTensor’s new matrix multiplication algorithms

Two acquaintances independently asked about this today, so it seems worth a write-up: recently (as of this writing), DeepMind published a new paper about a new practical fast matrix multiplication … | Continue reading


@fgiesen.wordpress.com | 1 year ago

Entropy decoding in Oodle Data: x86-64 3-stream Huffman decoders

The adventure continues! Last time I went over the core decoder loop we use on AMD Jaguar-based consoles, i.e. Xbox One and PS4. I felt that one was a good example to start with since the target ha… | Continue reading


@fgiesen.wordpress.com | 1 year ago

Frustum Planes from the Projection Matrix

Another quick one. Now this is another old trick, but it’s easy to derive and still not as well-known as it deserves to be, so here goes. All modern graphics APIs ultimately expect vertex coo… | Continue reading


@fgiesen.wordpress.com | 2 years ago

Thoughts on the Witness

I have been playing The Witness since it came out this Tuesday. The Witness is what is probably best described as a “puzzle game”, and if you haven’t heard about it yet and that s… | Continue reading


@fgiesen.wordpress.com | 2 years ago

Entropy Decoding in Oodle Data: Huffman Decoding on the Jaguar

In the last part we went over the general ideas of Huffman coding as implemented in the newer Oodle Data coders, this time we’ll be looking at one particular implementation that is both inter… | Continue reading


@fgiesen.wordpress.com | 2 years ago

Migrating Thunderbird profiles: A story in three acts

Prologue This is a slight bit of a departure from the usual themes in this blog, but I thought it was interesting enough to write it up anyway. It also makes for a nice break from the Trip through … | Continue reading


@fgiesen.wordpress.com | 2 years ago

Reading bits in far too many ways (part 1) (2018)

Resurrecting an old tradition of this blog, let’s take a simple problem, go over a way too long list of alternative solutions, and evaluate their merits. Our simple problem is this: we want t… | Continue reading


@fgiesen.wordpress.com | 2 years ago

Memory Bandwidth

Absolute memory bandwidth figures tend to look fairly large, especially for GPUs. This is deceptive. It’s much more useful to relate memory bandwidth to say the number of clock cycles or inst… | Continue reading


@fgiesen.wordpress.com | 2 years ago

Entropy coding in Oodle Data: the big picture

April 26, 2016 was the release date of Oodle 2.1.5 which introduced Kraken, so it celebrated its 5-year anniversary recently. A few months later we launched Selkie and Mermaid, which were already d… | Continue reading


@fgiesen.wordpress.com | 2 years ago

How many x86 instructions are there?

It’s surprisingly hard to give a good answer (the question was raised in this article). It depends on how you count, and the details are interesting (to me anyway). To not leave you hanging: … | Continue reading


@fgiesen.wordpress.com | 3 years ago

Network latencies and speed of light (2018)

In this short post I’m going to attempt to convince you that current network (Internet) latencies are here to stay, because they are already within a fairly small factor of what is possible u… | Continue reading


@fgiesen.wordpress.com | 3 years ago

A whirlwind introduction to dataflow graphs

While in the middle of writing “Reading bits in far too many ways, part 3”, I realized that I had written a lot of background material that had absolutely nothing to do with bit I/O and… | Continue reading


@fgiesen.wordpress.com | 4 years ago

Triangle Rasterization in Practice

This post is part of a series – go here for the index. Welcome back! The previous post gave us a lot of theoretical groundwork on triangles. This time, let’s turn it into a working tria… | Continue reading


@fgiesen.wordpress.com | 4 years ago

Metaprogramming for Madmen (2012)

This post is part of the series “Debris: Opening the box”. Okay, previous posts from this series aimed to actually convey useful technical information: assuming you actually want to wri… | Continue reading


@fgiesen.wordpress.com | 4 years ago

Frequency responses of half-pel filters – The ryg blog

In the previous post, I looked at repeated application of FIR filters on the same signal and laid out why their frequency response is the thing to look at if we’re wondering about their long-… | Continue reading


@fgiesen.wordpress.com | 4 years ago

What Happens When Iterating Filters?

Casey Muratori posted on his blog about half-pixel interpolation filters this week, where he ends up focusing on a particular criterion: whether the filter in question is stable under repeated appl… | Continue reading


@fgiesen.wordpress.com | 5 years ago

Rate-distortion optimization in compression

“Rate-distortion optimization” is a term in lossy compression that sounds way more complicated and advanced than it actually is. There’s an excellent chance that by the end of thi… | Continue reading


@fgiesen.wordpress.com | 5 years ago

Planar rotations and the DCT

I’ve been looking a bit at DCT algorithms recently. Most fast DCTs are designed under two assumptions that are worth re-examining: 1. Multiplies are a lot more expensive than additions and sh… | Continue reading


@fgiesen.wordpress.com | 5 years ago

Intervals in modular arithmetic

I wrote about regular interval overlap checking before. Let’s consider a somewhat trickier case, where our intervals are not defined over the real numbers or regular integers, but are instead… | Continue reading


@fgiesen.wordpress.com | 5 years ago

Reading bits in far too many ways (part 3)

(Continued from part 2. “A whirlwind introduction to dataflow graphs” is required reading.) Last time, we saw a whole bunch of different bit reader implementations. This time, I’l… | Continue reading


@fgiesen.wordpress.com | 5 years ago

A trip through the Graphics Pipeline (2011)

Welcome. This is the index page for a series of blog posts I’m currently writing about the D3D/OpenGL graphics pipelines as actually implemented by GPUs. A lot of this is well known among gra… | Continue reading


@fgiesen.wordpress.com | 5 years ago