2 ms·
> codecs are not really normal code. Not really a fair comment. They are entirely normal code in most senses. They differ in one important way: they are (frequ
by PaulDavisThe1st 2y ago
> codecs are not really normal code.
Not really a fair comment. They are entirely normal code in most senses. They differ in one important way: they are (frequently) perfect examples of where "single instruction, multiple data" completely makes sense. "Do this to every sample" is the order of the day, and that is a bit odd when compared with text processing or numerical computation.
But this is true of the majority of signal processing, not just codecs. As simple a thing as increasing the volume of an audio data stream means multiplying every sample by the same value - more or less the definition of SIMD.
- astrange 2y agoThere's a difference because audio processing is often "massively parallel", or at least like 1024 samples at once, but in video codecs operations could be only 4 pixels at once and you have to stretch to find extra things to feed the SIMD operations.
- screcth 2y agoCan you use the remaining SIMD lanes for processing independent data streams? Think encoding or decoding non-overlapping parts of a video.
- astrange 2y agoSo, you can't necessarily do that because video is compression, and compression means not predictable. (If it's predictable it's not compressed well enough.) That means you have to stick to inside the current block. But there are some tricks; like for an IDCT there's a previous stage where you can rearrange the output memory elements for free, so you can shuffle things as you need to fit them into vectors.