Tuesday, 25 April 2000 22:51 Stefano Tommesani

The latest trend in PC games is 3D graphics: during the past few years, almost all kinds of games have turned to 3D graphics, greatly increasing the demand of processors with strong floating-point performance, because the front end of a typical 3D game software pipeline must perform object physics, geometry transformations, clipping and lighting calculations. On the screen, 3D objects consist of thousands of polygons, usually triangles. The smaller and more numerous the polygons, the more detailed the object. When an object moves on the screen, rotates to a different viewing angle, or moves forward or backward in virtual space, the program must recalculate every vertex of every polygon. This is a geometry transformation, and it requires heavy-duty matrix multiplication: the program must multiply a 1x4 vector of coordinates against a 4x4 transform matrix. This requires up to 16 FP multiplies and 12 FP additions for each vertex, so the floating-point unit of the processor is usually the performance bottleneck of 3D games. Intel’s processors have always had strong numeric performance, given that they were designed not only for typical business applications, but also for scientific programs that are usually floating-point intensive. AMD processors have been designed to run business software fast, but they lack the floating-point performance of Intel chips. To gain a share of the rapidly-growing gaming market, AMD has introduced the 3D Now! instructions, designed to exceed the performance of the Intel Pentium II when running 3D games.
The AMD 3D Now! technology provides 21 additional instructions to support high-performance 3D graphics and audio processing. The 3D Now! instructions are vector instructions that operate on 64-bit registers, divided into two 32-bit single-precision floating-point words that are compatible with the IEEE-754, single-precision format. This format comprises a 1-bit sign, an 8-bit biased exponent, and a 23-bit significand with one hidden integer bit for a total of 24 bits in the significand. In contrast to the IEEE standard that dictates four rounding modes, the AMD K6 processors support only the round-to-nearest mode. 
The AMD K6/Athlon processors implement eight 3D Now! registers that are mapped onto the floating-point registers just like MMX registers: aliasing the 3D Now! registers onto the floating-point stack provides a safe method to introduce this technology, because it does not require modifications to existing operating systems; furthermore it is possible to write x86 programs containing both integer, MMX and SIMD floating point instructions with no performance penalty for switching between the integer MMX and the floating-point 3D Now! units.
The following sections give a brief overview of each group of instructions in the 3D Now! set and the instructions within each group.


Update: there are rumours that the next Athlon core, code-named Palomino, will support SSE instructions. Current AMD processors already support integer SSE instructions, but the adoption of floating-point SSE instructions means the end of 3D-Now!. AMD's market share is steadily rising, due to its excellent price / performance ratio, but it still does not grab more than one quarter of the market; this means that developer are more likely to write SSE code than 3D-Now! code. At the same time, SSE is a more powerful instruction set, designed without the compatibility problems that limited the level of parallelism of 3D-Now!.

Update: the Athlon XP processor supports SSE instructions (curiously named 3DNow! Pro)

Last Updated on Friday, 26 April 2013 00:08