Why are software and hardware encoding not called CPU and GPU encoding instead? [closed]
Solution 1:
Because while the CPU is a hardware piece what it runs is, exclusively, software. You give it code loaded from hard disks and other storage devices. The code is entirely volatile and can be changed at any point by simply downloading some new software. It is not tied down to any hardware in any given system, except that the software runs on an x86 compatible platform. It's not tied to the CPU even, a software encoder could make use of a blend of CPU instructions, GPU shader programs (not the hardware encoder or decoder) or any amount of other software capable of running on the platform.
If you replace the computer platform, but keep the same piece of software then you should still get what is essentially an identical output. The software may work faster or slower, but it is not down to the CPU how the software achieves the task, except in that the CPU executes the instructions provided by the software.
The hardware encoder on the GPU on the other hand is a pure hardware block. NVENC, QuickSync and the AMD equivalent are hardware blocks built into the GPU. At one point long ago there actually were dedicated MPEG2 encode/decoder hardware cards you could buy. Hardware cannot be changed without replacing the hardware.
If you replace the hardware then you have potentially replaced or changed the capabilities of the encoder. The hardware block will operate exactly the same way, with the exception of whatever quality settings or switches the hardware block has. You cannot change that without throwing away the hardware.
There was, for a while, an intermediate solution. There were CUDA and similar GPGPU based video encoders and decoders that were superseded by the dedicated hardware blocks in modern GPUs. These are essentially "GPU Software" solutions.
Calling it a "GPU encoder" doesn't distinguish between whether it is a program (software) running in the GPU shaders, or if it is using the GPU hardware encoder block. It is not precise enough.