4 ms·
>By design, VLIW instruction sets encode a lot about how the execution units work in the instruction format. For example, Itanium is designed for a machine with
by sillywalk 3y ago
>By design, VLIW instruction sets encode a lot about how the execution units work in the instruction format. For example, Itanium is designed for a machine with three execution units and each instruction pack has up to three instructions, one for each of them. But what if you want to put more execution units into the CPU in a future iteration of the design? Well, it's not straightforward. One approach is to ship executables in a bytecode, which is only scheduled and encoded on the machine it is installed on, allowed the instruction encoding and thus number of ports to vary.
This was how Sun's MAJC[0] worked -
" For instance, if a particular implementation took three cycles to complete a floating-point multiplication, MAJC compilers would attempt to schedule in other instructions that took three cycles to complete and were not currently stalled. A change in the actual implementation might reduce this delay to only two instructions, however, and the compiler would need to be aware of this change.
This means that the compiler was not tied to MAJC as a whole, but a particular implementation of MAJC, each individual CPU based on the MAJC design.
...
The developer ships only a single bytecode version of their program, and the user's machine compiles that to the underlying platform. "[0]
[0] https://en.wikipedia.org/wiki/MAJC https://en.wikipedia.org/wiki/MAJC
- sillywalk 3y agoFor posterity more info: They also had general instruction units, not a specific one for floating point or integer or SIMD, they were all the same.