home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #20 / NN_1992_20.iso / spool / comp / sys / ibm / pc / hardware / 24346 < prev    next >
Encoding:
Text File  |  1992-09-15  |  62.7 KB  |  934 lines

  1. Newsgroups: comp.sys.ibm.pc.hardware
  2. Path: sparky!uunet!paladin.american.edu!darwin.sura.net!jvnc.net!yale.edu!ira.uka.de!rz.uni-karlsruhe.de!usenet
  3. From: S_JUFFA@iravcl.ira.uka.de (|S| Norbert Juffa)
  4. Subject: What you always wanted to know about math coprocessors 2/4
  5. Message-ID: <1992Sep15.162718.11001@rz.uni-karlsruhe.de>
  6. Sender: usenet@rz.uni-karlsruhe.de (USENET News System)
  7. Organization: University of Karlsruhe (FRG) - Informatik Rechnerabt.
  8. Date: Tue, 15 Sep 1992 16:27:18 GMT
  9. X-News-Reader: VMS NEWS 1.23
  10. Lines: 922
  11.  
  12.          Cyrix EMC87    is basically a special version of the Cyrix 83D87.
  13.                         In addition to the normal 387 operating mode, in
  14.                         which coprocessor-CPU communication is handled thru
  15.                         reserved IO-ports, it also offers a memory-mapped
  16.                         mode of operation similar to the operation principle
  17.                         of the Weitek Abacus. Please note that the EMC87 is
  18.                         *not* compatible with Weitek's Abacus coprocessor.
  19.                         They both use the same interface technique (memory
  20.                         mapping) but while the EMC87 uses the standard 387
  21.                         instruction set, the Weitek coprocessors use a
  22.                         different instruction set of their own. Like the
  23.                         Weitek Abacus, the EMC87 occupies a 64 kByte memory
  24.                         block starting at physical address C0000000h. It can
  25.                         therefore only be accessed in the protected or virtual
  26.                         modes of the 386 CPU. DOS programs can access the
  27.                         EMC87 with the help of DOS-extenders or memory
  28.                         managers like EMM386 which run in protected/virtual
  29.                         mode themself. Since the EMC87 provides also the
  30.                         standard CPU interface via IO-ports, it can be used
  31.                         just like any other 387 compatible coprocessor and
  32.                         delivers the same performance as the Cyrix 83D87 in
  33.                         this mode. However, using the memory mapped mode of
  34.                         the EMC87 provides a significant speed advantage.
  35.                         The traditional 387 CPU-coprocessor interface via
  36.                         IO-ports has an overhead of about 14-20 clock cycles.
  37.                         Since the Cyrix 83D87 executes some operations like
  38.                         addition and multiplication in much less time, its
  39.                         performance is limited by the CPU-coprocessor
  40.                         interface. The memory-mapped mode has much less
  41.                         overhead and allows all coprocessor instructions to
  42.                         be executed at full speed and with no penalty. For
  43.                         this reason, Cyrix introduced the EMC87 in 1990.
  44.                         In a test, the EMC87 at 33 MHz ran the single
  45.                         precision Whetstone benchmark at 7608 kWhetstones/sec,
  46.                         while the Cyrix 83D87 at 33 MHz had a speed of
  47.                         only 5049 kWhetstones/sec, an increase of 50.6% [63].
  48.                         In another test, the EMC87 ran a fractal computation
  49.                         at two times the speed of the Cyrix 83D87 and 2.6
  50.                         times as fast as an Intel 387DX [64]. A third test
  51.                         found the EMC87's overall performance to be 20%
  52.                         higher than the performance of the Cyrix 83D87
  53.                         [65]. The Cyrix FasMath EMC87 has also been sold
  54.                         as Cyrix AutoMATH by Cyrix. The two chips are 100%
  55.                         identical. Unlike the Cyrix 83D87, which fits into
  56.                         the 68-pin 387 coprocessor socket, the EMC87 comes
  57.                         in a 121-pin PGA and requires the 121-pin EMC
  58.                         (Extended Math Coprocessor) socket. Note that not
  59.                         all boards have such a socket, a notable exception
  60.                         being IBM's PS/2s, for example. Originally, Cyrix
  61.                         claimed support for the fast memory mapped mode of
  62.                         the EMC87 from a lot of software vendors (including
  63.                         Borland and Microsoft). However, there are only
  64.                         very few applications that make use of it, among
  65.                         them Evolution Computing's FastCAD 3D, MicroWay
  66.                         Inc.'s NDP FORTRAN-386 compiler, Metaware's High-C
  67.                         compiler version 1.6 and newer, and Intusofts's
  68.                         Spice [63,73]. Cyrix has implemented some additional
  69.                         instructions in the EMC87: FRICHOP, FRINT2, and
  70.                         FRINEAR. These instructions enable rounding to
  71.                         integer without setting the rounding mode by
  72.                         manipulating the coprocessor control word and are
  73.                         intended to make life easier for compiler writers.
  74.                         The EMC87 is available 25 and 33 MHz versions. Cyrix
  75.                         is currently phasing out the EMC87.
  76.          Cyrix 387+     is the successor to the Cyrix 83D87. The name 387+
  77.                         is only used for European distribution. In other
  78.                         parts of the world, the second generation 387 'clone'
  79.                         from Cyrix still goes by the name 83D87. In my tests,
  80.                         I found the Cyrix 387+ to be about five to 10 percent
  81.                         *slower* than the Cyrix 83D87. However, some
  82.                         instructions like the square root (FSQRT) now
  83.                         run at only half the speed at which they ran in
  84.                         the 83D87 and the transcendental functions show
  85.                         a 40% drop in performance comapred with the 83D87
  86.                         on the average (see performance results below). I
  87.                         also found the transcendental functions on the 387+
  88.                         to be a bit *more* accurate than those implemented
  89.                         in the 83D87. According to a source with Cyrix [73],
  90.                         the 387+ was designed to make a smaller and thus
  91.                         cheaper coprocessor chip, that also can go at
  92.                         higher frequencies than the 83D87. The new design
  93.                         uses a slower hardware multiplier that needs 6
  94.                         clock cycles to multiply the floating point mantissa
  95.                         of an internal precision number, while the multiplier
  96.                         in the 83D87 takes only 4 clocks to accomplish the
  97.                         same task. Since the transcendental functions are
  98.                         generated by polynomial and rational approximations
  99.                         in Cyrix math coprocessors, this slows them down
  100.                         quite a bit. The divide/square root logic has also
  101.                         been changed from the 83D87 design. The original design
  102.                         used an algorithm that could generate both, the
  103.                         quotient and square root, so the excution times for
  104.                         these instructions were nearly identical. The algorithm
  105.                         choosen for the division in the 387+ doesn't allow
  106.                         the square root to be taken so easily, so it takes
  107.                         nearly twice as long. The 387+ is available in
  108.                         versions of up to 40 MHz. In the 387+, the available
  109.                         argument range for the FYL2XP1 instruction has been
  110.                         extended from the usual range -1+sqrt(2)/2..sqrt(2)/2,
  111.                         that is found on all 80x87 coprocessors, to all
  112.                         floating-point numbers. Also, four additional
  113.                         instructions have been implemented: FRICHOP (opcode
  114.                         DD FC), FRINT2 (opcode DB FC), FRINEAR (opcode DF FC),
  115.                         and FTSTP (opcode D9 E6)..
  116.          Cyrix 83S87    is the SX version of the Cyrix 83D87. Just like the
  117.                         Cyrix 83D87 is the fastest 387 compatible coprocessor,
  118.                         the Cyrix 83S87 is the fastest of the 387SX compatible
  119.                         coprocessor [1]. Besides being the fastest 387SX
  120.                         'clone', the Cyrix 83S87 also features the most
  121.                         accurate transcendental functions. 83S87 chips sold
  122.                         after about August 1992 use the internals of the
  123.                         Cyrix 387+, the successor to the original 83D87 [73].
  124.                         The 83S87 is packaged in a 68-pin PLCC and is available
  125.                         in 16, 20 and 25 MHz versions. Due to the advanced
  126.                         power saving features of the Cyrix coprocessor, the
  127.                         typical power consumption of the 20 MHz version is
  128.                         about 350 mW [67].
  129.          ULSI 83C87     is a 387 'clone' that came out in early 1991, well
  130.                         after the IIT 3C87 and Cyrix 83D87. Like all clones,
  131.                         it is somewhat faster than the Intel 387DX. Especially
  132.                         the basic arithmetic functions are fast, while the
  133.                         transcendental functions show only a slight speed
  134.                         improvement over the Intel 387DX (see benchmark
  135.                         results below). In my tests, the ULSI had the most
  136.                         inaccurate transcendental functions. However, the
  137.                         maximum relative error is still within the limits
  138.                         set by Intel, so this is probably not an important
  139.                         issue in all but very few applications. The ULSI
  140.                         83C87 shows some minor flaws in the tests for IEEE
  141.                         754 compatiblity, but this, too, is unimportant
  142.                         under typical operating conditions. It is interesting
  143.                         to note that an ULSI 83S87 manufactured in 92/17
  144.                         showed less errors in the IEEETEST test run [74] than
  145.                         the ULSI 83C87, manufactured in 91/48, I used in
  146.                         my original test. This indicates that ULSI might
  147.                         have applied some quick fixes to newer revisions
  148.                         of their math coprocessors. ULSI claims that the
  149.                         program IEEETEST, which was used to test for IEEE
  150.                         compatibility, contains many personal interpretations
  151.                         of the IEEE standard by the program's author and
  152.                         states that there is no ANSI-certified IEEE-754
  153.                         complicency test. While this is may be true, it
  154.                         is also a fact that the IEEE test vectors used in
  155.                         IEEETEST are sort of an industry standard and that
  156.                         Intel's 387, 486, and RapidCAD chips pass it
  157.                         without a single failure, as do the coprocessors from
  158.                         Cyrix. Since the ULSI Math*Co 83C87 fails some of
  159.                         the tests, it is certainly less than 100% compatible
  160.                         with Intel's chips, although this will hardly make
  161.                         any difference in typical operating conditions.
  162.                         The ULSI 83C87 fails to be compatible with the
  163.                         IEEE-754 in that is does not implement the precision
  164.                         control feature. While all the internal operations of
  165.                         80x87 coprocessors are usually done with the maximum
  166.                         precision available (double extended presision with
  167.                         64 mantissa bits), the 80x87 also offer the possiblity
  168.                         to force lower precision to be used for the basic
  169.                         arithmetic functions add, subtract, multiply, divide,
  170.                         and square root. This feature is required by IEEE-754
  171.                         for all coprocessor that can not store results
  172.                         *directly* to a single or double precision location.
  173.                         Since the 80x87 coprocessors lack this capability,
  174.                         the have to implement this capability to provide
  175.                         correctly rounded single and double precision results
  176.                         according to the floating-point standard. All 80x87
  177.                         coprocessors except the ones from ULSI support this
  178.                         feature. For programs that make use of precision
  179.                         control, e.g. Interactive UNIX, correct implementation
  180.                         of the feature may be essential for correct arithmetic
  181.                         results. Like the other 387 'clones', the 83C87 does
  182.                         not support asynchronous operation of the CPU and the
  183.                         coprocessor. This means that the 83C87 always runs at
  184.                         the full speed of the CPU. The ULSI 83C87 is available
  185.                         in 20, 25, 33, and 40 MHz versions. The ULSI is
  186.                         produced in high perfromance, low power CMOS. Power
  187.                         consumption at 20 MHz is max. 800 mW (400 mW typical),
  188.                         at 25 MHz it is max. 1000 mW (500 mW typical), at 33
  189.                         MHz it is max. 1250 mW (625 mW), and at 40 MHz the
  190.                         ULSI Math*Co 83C87 consumes max. 1500 mW (750 mW
  191.                         typical) [58]. The 83C87 is packaged in a 68-pin
  192.                         ceramic PGA. ULSI coprocessors come with a lifetime
  193.                         warranty. ULSI Systems, Inc. will replace the
  194.                         coprocessor up to three times free of charge should
  195.                         it ever fail.
  196.          ULSI 83S87     is the SX version of the ULSI 83C87 for operation
  197.                         with an Intel 387SX or an AMD Am387SX. It is
  198.                         functionally equivalent to the 83C87. To aid low
  199.                         power laptop designs, the ULSI 83S87 features an
  200.                         advanced power saving design with a sleep mode and
  201.                         a standby mode with only minimal power requirements.
  202.                         Power consumption under normal operating conditions
  203.                         (dynamic mode) is max. 400 mW at 16 MHz (300 mW
  204.                         typical), max. 450 mW at 20 MHz (350 mW typical),
  205.                         and max. 500 mW at 25 MHz (400 mW typical) [58].
  206.                         The ULSI 83S87 is packaged in a 68-pin PLCC.
  207.          C&T 38700DX    is the latest entry into the 387 'clone' market.
  208.                         Originally announced in October, 1991, it has
  209.                         apparently not been available to end users before
  210.                         third quarter of 1992, at least here in Germany.
  211.                         The C&T 38700DX is compatible with the Intel 387DX.
  212.                         My tests show that compatibility is indeed very good,
  213.                         even for the more arcane features of the 387DX and
  214.                         comparable to the coprocessors from Cyrix. Like
  215.                         the coprocessors from Cyrix and Intel, it passes
  216.                         the IEEETEST program without a single failure. It
  217.                         passes, of course, all tests in Chips & Technologies
  218.                         own compatibility test program SMDIAG. However, some
  219.                         of the tests (transcendental functions) in this program
  220.                         are selected in such a way that the C&T 38700 passes
  221.                         while the Cyrix 83D87 or Intel RapidCAD fail, so they
  222.                         are not very useful. There is also a 'bug' in the test
  223.                         for FSCALE that hides a true bug in the C&T 38700. In
  224.                         my own speed tests [see below] and those reported in
  225.                         [1], the C&T 38700DX showed performance at about 90-
  226.                         100% the level of the Cyrix 83D87, which is the 387
  227.                         'clone' with the highest performance. For floating
  228.                         point intensive benchmarks the C&T 38700DX provides up
  229.                         to 50% more computational power than the Intel 387DX.
  230.                         However, as with all other 387 compatible coprocessors,
  231.                         the speed advantage over the Intel 387DX is hardly
  232.                         measurable in real application. The accuracy of the
  233.                         transcendental functions on the C&T 38700DX varies.
  234.                         Overall accuracy of the transcendental function is
  235.                         slightly better than on the Intel 387DX. The SuperMATH
  236.                         38700DX is implemented in 1.2 micron CMOS with on-chip
  237.                         power managment, which makes for low power consumption.
  238.                         The 38700DX is packaged in a 68-pin ceramic PGA (pin
  239.                         grid array and available in speeds of 16, 20, 25, 33,
  240.                         and 40 MHz.
  241.          C&T 38700SX    is the SX version of the 38700DX and compatible to
  242.                         the Intel 387SX. It provides performance similar to
  243.                         the Cyrix 83S87 [1], the 387SX 'clone' with the
  244.                         highest performance. Compatibility with the Intel
  245.                         387SX is very good and comparable with high degree
  246.                         of the compatibility found in the Cyrix 83S87. It
  247.                         has low power consumption. The SuperMATH 38700SX is
  248.                         packaged in a 68-pin PLCC (plastic leaded chip carrier)
  249.                         and available in speeds of 16, 20, and 25 MHz.
  250.          Intel RapidCAD is not a coprocessor, strictly seen, although it
  251.                         is marketed as one. Rather, it is a CPU replacement.
  252.                         It is basically an Intel 486DX without the cache and
  253.                         with a 386 pinout. RapidCAD is delivered as a set of
  254.                         two chips. RapidCAD-1 goes into the 386 socket and
  255.                         contains the CPU and FPU, RapidCAD-2 goes into the
  256.                         coprocessor socket and contains a PAL that generates
  257.                         the Ferr signal that is normally generated by a
  258.                         coprocessor and used by the motherboard circuitry to
  259.                         provide 287 compatible coprocessor exception handling
  260.                         in 386/387 systems. The RapidCAD instruction set is
  261.                         compatible with the 386, so it doesn't know the 486
  262.                         specific instructions like BSWAP. Since the RapidCAD
  263.                         CPU core is very similar to 486 CPU core, most of the
  264.                         register to register instructions execute in the same
  265.                         number of clock cycles as on the 486. The use of the
  266.                         386 bus interface causes instructions that access memory
  267.                         to execute at about the same speed as on the 386. The
  268.                         integer performance on the RapidCAD is definitely
  269.                         limited by the low memory bandwidth provided by the
  270.                         386 bus interface (2 clock cylces per bus cycle)
  271.                         and the lack of an internal cache. CPU instructions
  272.                         often execute faster than they can be fetched from
  273.                         memory, even with a big and fast external cache.
  274.                         Therefore, the integer performance of the RapidCAD
  275.                         exceeds that of a 386 by *at most* 35%. This value
  276.                         was derived by running some programs that use
  277.                         mostly register-to-register operations and few
  278.                         memory accesses. This finding is supported by the
  279.                         SPEC ratings that Intel reports for the 386-33
  280.                         and the RapidCAD-33. While the 386-33 has a
  281.                         SPECint of 6.4, the RapidCAD has a SPECint of 7.3
  282.                         [28], a 14% increase. Note that these tests used
  283.                         the old (1989) SPEC benchmarks suite. While CPU
  284.                         instructions often execute in one clock cycle on
  285.                         the RapidCAD, FPU instructions always take more
  286.                         than seven clock cycles. They are therefore rarely
  287.                         slowed down by the low memory bandwidth provided
  288.                         by the 386 bus interface. My tests show a 70%-100%
  289.                         performance increase for floating-point intensive
  290.                         benchmarks (see below) over a 386 based system
  291.                         using the Intel 387DX math coprocessor. This is
  292.                         consistent with the SPECfp rating reported by Intel.
  293.                         The 386/387 at 33 MHz is rated at 3.3 SPECfp, while
  294.                         the RapidCAD is rated at 6.1 SPECfp at the same
  295.                         frequency, a 85% increase. This means that a system
  296.                         that uses the RapidCAD is faster than any 386/387
  297.                         combination, regardless of the type of 387 used
  298.                         (Intel 387DX or faster clone). The diagnostic disk
  299.                         for the RapidCAD also gives some application
  300.                         performance data for the RapidCAD compared to the
  301.                         Intel 387DX:
  302.  
  303.                         Application    Time w/ 387DX  Time w/ RapidCAD  Speedup
  304.  
  305.                         AUTOCAD 11            52 sec         32 sec       63%
  306.                         AutoShade/Renderman  180 sec        108 sec       67%
  307.                         Mathematica(Windows) 139 sec        103 sec       35%
  308.                         SPSS/PC+ 4.01         17 sec         14 sec       21%
  309.  
  310.                         RapidCAD is available in 25 MHz and 33 MHz versions.
  311.                         It is distributed through other channels than the
  312.                         other Intel math coprocessors. Therefore, I have been
  313.                         unable to obtain a data sheet for it. The RapidCad-1
  314.                         chip gets quite hot when operating and it can be
  315.                         assumed that its power consumption is similar to
  316.                         the 486-33. Therefore, I recommend extra cooling
  317.                         for this chip (see the paragraph below on the 486 for
  318.                         details). The RapidCAD-1 is packaged in a 132-pin
  319.                         PGA, just like the 80386, and the RapidCAD-2 is
  320.                         packaged in a 68-pin PGA like a 80387 coprocessor.
  321.          Intel 486DX    is not a coprocessor. This chip, brought out in
  322.                         1989 functionally combines the CPU (a heavily pipelined
  323.                         implementation of the 386 architecture) with an
  324.                         enhanced 387 (the floating-point unit, FPU) and
  325.                         8 kB of unified code/data cache on one chip. Of
  326.                         course, this description is simplified, for a
  327.                         detailed hardware description, see [52]. The
  328.                         486DX offers about two to three times the integer
  329.                         performance of a 386 at the same frequency.
  330.                         Floating point performance is about three to four
  331.                         times as high as on the Intel 387DX at the same
  332.                         clock rate [29]. Since the FPU is on the same
  333.                         chip as the CPU, the considerable communication
  334.                         overhead between CPU and coprocessor in a 386/387
  335.                         system is omitted, letting FPU instructions run
  336.                         at the full speed permitted by the implementation.
  337.                         The FPU also takes advantage of the on-chip cache
  338.                         and the highly pipelined execution unit. Besides
  339.                         the higher speed, the 486 FPU features more accurate
  340.                         transcendental functions than the Intel 387DX
  341.                         coprocessor according to tests run by me (see below).
  342.                         To achieve better interrupt latency, FPU instructions
  343.                         with a long execution time have been made abortable
  344.                         in the case an interrupt occurs during their
  345.                         execution. The concurrent execution of CPU and
  346.                         coprocessor instructions typical for 80x86/80x87
  347.                         systems is still in existence on the 486, but
  348.                         some FPU instructions like FSIN have nearly no
  349.                         concurrency with CPU instructions, indicating
  350.                         that they make heavy use of both, CPU and FPU
  351.                         resources [53, 1]. The 486DX comes in a 168 pin
  352.                         ceramic PGA (pin grid array). It is available in
  353.                         25 MHz and 33 Mhz versions. Since the end of 1991,
  354.                         there is also a 50 MHz version available done in
  355.                         a CHMOS V process (the 25 MHz and 33 MHz are
  356.                         produced using the CHMOS IV process). Maximum
  357.                         power consumption is 3500 mW for the 25 MHz 486
  358.                         (2600 mW typical), 4500 mW for the 33 MHz version
  359.                         (3500 mW typical), and 5000 mW (4000 mW typical)
  360.                         for the 50 MHz chip. Due to the considerable amount
  361.                         of heat produced by these chips, and taking into
  362.                         consideration the slow air flow provided by the
  363.                         fan in garden variety PC tower cases, I recommend
  364.                         an extra fan directly above the CPU for safer
  365.                         operation. If you measure the surface temperature
  366.                         of an i486 in a normal tower case without extra
  367.                         cooling after some time of operation, you may well
  368.                         come up with something like 80 - 90 degrees Celsius
  369.                         (that is 176 - 194 degrees Fahrenheit for those not
  370.                         familiar with metric units) [54,55]. You don't need
  371.                         the well known and expensive IceCap(tm) to effectively
  372.                         cool your CPU. A simple fan mounted directly above
  373.                         the CPU can bring the temperature down to about 50
  374.                         to 60 degrees Celsius (122 - 140 degrees Fahrenheit)
  375.                         depending on the room temperature and the temperature
  376.                         within the PC case (which depends on the total power
  377.                         dissipation of all the components and the cooling
  378.                         provided by the fan in the power unit). According
  379.                         to a simple rule known as Arrehnius' Law, lowering
  380.                         the temperature by 10 degrees Celsius slows down
  381.                         chemical reactions by a factor of two, thus lowering
  382.                         the temperature of your CPU by 30 degrees should
  383.                         prolong the live of the device by a factor of eight
  384.                         due to the slower aging process. If you are reluctant
  385.                         to add a fan to your system because of the additional
  386.                         noise, settle for a low-noise fan like those
  387.                         available from the German manufacturer Pabst (this
  388.                         is not meant to be an advertisement. I am just the
  389.                         happy owner of such a fan. Besides that, I have no
  390.                         connections to the firm).
  391.          Intel 486DX2   is the name for Intel latest generation of 486 CPUs.
  392.                         Using the DX2 suffix instead of simply DX is meant
  393.                         to be an indicator that these are clock-doubled
  394.                         versions. A normal 486DX operates at the frequency
  395.                         provided by the incoming clock signal. A 486DX2
  396.                         generates a new clock signal from the incoming clock
  397.                         by means of a PLL (phase locked loop). In the DX2,
  398.                         this clock signal has twice the frequency of the
  399.                         incoming clock, hence the name clock-doubler. All
  400.                         internal parts of the 486DX2 (cache, CPU core, FPU)
  401.                         run at this higher frequency. Only the bus interface
  402.                         runs at the normal speed. That way, a 486DX-50 can
  403.                         run on a motherboard designed for 25 MHz operation.
  404.                         Since motherboards for 50 MHz operations are much
  405.                         harder to design than those for 25 Mhz, this makes
  406.                         a 486DX2-50 system easier to built and cheaper than
  407.                         a 486DX-50 system. For all operations that don't
  408.                         access off-chip resources (e.g. register operations)
  409.                         a 486DX2-50 provides exactly the same performance as
  410.                         a 486DX-50 and twice the performance of a 486DX-25.
  411.                         However, since the main memory in a 486DX2-50 systems
  412.                         still operates at 25 MHz, all instructions involving
  413.                         memory accesses are potentially slower than in a
  414.                         486DX-50 system, whose memory also runs at 50 Mhz.
  415.                         The internal cache of the 486 helps this problem a
  416.                         bit, but overall performance of a 486DX2-50 is still
  417.                         lower than that of a 486DX-50, although Intel's
  418.                         documentation [32] shows this drop to be quite small.
  419.                         It depends a lot on the code one runs, though. The
  420.                         nice thing about the 486DX2 is that it allows easy
  421.                         upgrading of 25 and 33 Mhz 486 systems, since the
  422.                         486DX2 is completely pin-compatible with the 486DX.
  423.                         Just take out the 486DX and plug in the new 486DX2.
  424.                         Note that power consumption of the 486DX2-50 equals
  425.                         that of the 486DX-50 (4000 mW typical), and that the
  426.                         486DX2-66 exceeds this by about 30%. These chips get
  427.                         really hot in a standard PC case with no extra cooling.
  428.                         See the above paragraph for more detailed information
  429.                         on this problem.
  430.          Intel 487SX    is the coprocessor intended for use in 486SX systems.
  431.                         The 486SX is basically a 486DX without the floating-
  432.                         point unit (FPU) [48, 50]. Originally Intel sold
  433.                         486DXs with a defective FPU as 486SXs but it has
  434.                         now completly removed the FPU part from the 486SX
  435.                         mask for mass production. The introduction of the
  436.                         486SX in 1991 has been viewed mainly as a marketing
  437.                         'trick' by Intel to take market share from the 386
  438.                         based systems once AMD became successful with their
  439.                         Am386 (AMD has taken as much as 40% of the 386 market
  440.                         due to some superior features such as higher clock
  441.                         frequency, lower power consumption, and a fully
  442.                         static design). A 486SX at 20 MHz delivers a bit
  443.                         less integer performance than a 40 MHz Am386. To add
  444.                         floating-point capabilities to a 486SX based system,
  445.                         it would be easiest to swap the 486SX with a 486DX
  446.                         which includes the FPU. However, Intel has prevented
  447.                         this easy solution by giving the 486SX a slightly
  448.                         different pin out [48, 51]. Since only three pins
  449.                         are assigned differently, clever board manufacturers
  450.                         have come out with boards that accept anything from
  451.                         a 486SX-20 to a 486DX2-50 in their CPU socket and
  452.                         provide a clean upgrade path this way. A set of
  453.                         three jumpers ensures correct signal assignment to
  454.                         the pins for either configuration. To upgrade systems
  455.                         without this feature, one has to buy the 487SX and
  456.                         put it into the "Performance Upgrade Socket" present
  457.                         in most 486SX systems. Once the 487SX was available,
  458.                         it was quickly found out that it is just a normal
  459.                         486DX with a slightly different pin out [49]. Inserting
  460.                         the 487SX effectively shuts down the 486SX in the
  461.                         486SX/487SX system, so the 486SX could be removed
  462.                         once the 487SX is installed. Since the shut down is
  463.                         logical, not electrical, the 486SX still uses power
  464.                         if used with the 487SX, although it is unoperational.
  465.                         Technically speaking, the solution Intel chose was
  466.                         the only practical way to provide a 486SX system with
  467.                         the high level of floating-point performance the
  468.                         486DX offers. The CPU and FPU have to be on the same
  469.                         chip, otherwise the FPU can not make use of the cache
  470.                         on the CPU chip and there would be considerable
  471.                         overhead in CPU-FPU communication (similar to a
  472.                         386/387 system), nullifying most of the arithmetic
  473.                         speedups over the 387. That the 486SX, 487SX, and
  474.                         486DX are not pin-compatible seems to be purely for
  475.                         marketing reasons. To upgrade a 486SX based system,
  476.                         Intel also offers the OverDrive chip, which is just
  477.                         the same as a 487SX with internal clock doubling. It
  478.                         goes also goes into the "Performance Upgrade Socket"
  479.                         found in 486SX systems. The OverDrive roughly doubles
  480.                         the performance of a 486SX/487SX based system. For a
  481.                         explanation of clock doubling, see the description
  482.                         of the 486DX2 above. As the 486SX, the 487SX is
  483.                         available in 20 MHz and 25 MHz versions. At 20 MHz,
  484.                         the 487SX has a power consumption of max. 4000 mW.
  485.                         It is available in a 169 pin ceramic PGA (pin grid
  486.                         array).
  487.          Weitek 1167    was the predecessor to the Weitek Abacus 3167 math
  488.                         coprocessor. It was actually a small printed circuit
  489.                         board with three chips mounted on it. As opposed to
  490.                         the Weitek 3167, the 1167 did not have a square root
  491.                         instruction, instead the square root function was
  492.                         computed by means of a subroutine in the Weitek
  493.                         transcendental function library. However, the 1167
  494.                         did have a mode in which it supported denormals.
  495.                         The Weitek 3167 and 4167 only implement the 'fast'
  496.                         mode, in which denormals are not supported. Overall
  497.                         performance of the 1167 is slightly less than that
  498.                         of the Weitek 3167.
  499.          Weitek 3167    was introduced in 1989 to provide the fastest
  500.                         floating point performance possible on a 386 based
  501.                         system at that time. The Weitek Abacus 3167 is not
  502.                         a real coprocessor, strictly speaking, but rather
  503.                         a memory mapped peripheral device. The Weitek 3167
  504.                         was optimized for speed wherever possible. Besides
  505.                         using the faster memory mapped interface to the CPU
  506.                         (the 80x87 uses IO-ports), it does not support many
  507.                         of the features of the 80x87 coprocessors, allowing
  508.                         all of the chip's ressources to be concentrated on
  509.                         the fast execution of the basic arithmetic operations.
  510.                         For a more detailed description of the Weitek 3167 see
  511.                         the first chapter of this document. In benchmark
  512.                         comparisons, the Weitek 3167 provided up to 2.5 times
  513.                         the performance of an Intel 387DX coprocessor. For
  514.                         example, on a 33 MHz 3167 the Whetstone benchmark
  515.                         performed at 7574 kWhetstones/sec compared with the
  516.                         the 3743 kWhetstones/s for the Intel 387DX. Note
  517.                         however that these are single precision results and
  518.                         that the Weitek 3167's performance would drop to
  519.                         about half the stated rate for double precision,
  520.                         while the value for the Intel 387DX would not change
  521.                         much. Anyhow, before the advent of the Intel RapidCAD,
  522.                         the Weitek 3167 usually beat all 387 compatible
  523.                         coprocessors even for double precision operations
  524.                         [63,65,69]. For typical applications the advantage
  525.                         of the Weitek 3167 over the 387 clones is much smaller.
  526.                         In a benchmark test using AutoDesk's 3D-Studio the
  527.                         Weitek 3167 performed at 123% of the Intel 487DX's
  528.                         perfromance comapred with 106% for the Cyrix FasMath
  529.                         83D87 and 118% for the Intel RapidCAD. The Weitek
  530.                         Abacus 3167 is packaged in a 121-pin PGA that fits
  531.                         into an EMC socket provided by most 386 based systems.
  532.                         It does *not* fit into the normal coprocessor socket
  533.                         designed to hold a 387 compatible coprocessor in a
  534.                         68-pin PGA. To get the best of both worlds, one might
  535.                         want to use a Weitek 3167 and a 387 compatible
  536.                         coprocessor in the same system. These coprocessors
  537.                         can coexist in the same system just fine. Only problem
  538.                         is that most 386 based systems contain only one
  539.                         coprocessor socket, usually of the EMC (extended math
  540.                         coprocessor) type. Thus, you can install either a
  541.                         387 coprocessor or a Weitek 3167, but not both. There
  542.                         are little daughter boards available though that fit
  543.                         into the EMC socket and provide two sockets, an EMC
  544.                         and a standard coprocessor socket. At 25 MHz, the
  545.                         Weitek 3167 has a power consumption of max. 1750 mW.
  546.                         At 33 MHz, the max. power consumption is 2250 mW.
  547.          Weitek 4167    is a memory mapped coprocessor that has the same
  548.                         architecture as the 3167 and is designed to provide
  549.                         486 based systems with the highest floating point
  550.                         performance available. It executes coprocessor
  551.                         instructions at three to four times the speed of
  552.                         the Weitek 3167. Although it is up to 80% faster
  553.                         than the Intel 468 in some benchmarks [1,69], the
  554.                         performance advantage for real application is more
  555.                         like 10%. The introduction of the 486DX2 processors
  556.                         has more or less obliterated the need for a Weitek
  557.                         4167, since the DX2 CPUs provide the same performance
  558.                         and all the additional features the 80x87 has over
  559.                         the Weitek Abacus. The Weitek 4167 is packaged in
  560.                         a 142-pin PGA package that is only slightly smaller
  561.                         than the 486's package. At 25 MHz, it has a max.
  562.                         power consumption of 2500 mW [32].
  563.  
  564.  
  565.  
  566.          Pricing
  567.  
  568.          Due to a recent price slashing by Cyrix and subsequently by Intel
  569.          for 387 coprocessors, prices have dropped significantly for all
  570.          287 and 387 compatible coprocessors with hardly any price difference
  571.          between manufacturers. 387DX compatible coprocessors typically sell
  572.          for ~US$ 100 for all speeds except for 40 MHz versions which are
  573.          typically ~US$ 130. 387SX compatible coprocessors sell for ~US$ 90
  574.          regardless of speed with the exception of the 33 MHz versions, which
  575.          are ~US$ 100. The Intel 287XL sells for ~US$ 100, while the IIT 2C87
  576.          and Cyrix 82S87 sell for about US$ 70. 8087s may be more expensive,
  577.          the price of an 8087-10 being US$ 150. I bought the Intel RapidCAD
  578.          for US$ 320 and haven't seen it offered for a better price. I see
  579.          the Weitek Abacus 3167-33 being offered for US$ 780 and the 4167-33
  580.          being offered for US$ 1100. This price information reflects the
  581.          price situation as of 08-14-92. Prices can be expected to drop
  582.          slightly in the near future.
  583.  
  584.          If you have a demand for high floating-point performance, you
  585.          should consider to buy a 486 based system rather than buying
  586.          a 386 based system with an additional coprocessor. A 386 mother
  587.          board for 33 MHz operation sells for ~ US$ 300, together with the
  588.          coprocessor, cost totals ~ US$ 400. A 486-33 ISA-board sells for
  589.          US$ 650. While the 486-33 system is 60% more expensive than the
  590.          386/387 system, it also provides 100% more integer and floating-
  591.          point performance (twice the performance). If you want to push
  592.          your 386 based system to maximum floating-point performance and
  593.          can't switch to a 486 based system for some reason, I recommend
  594.          the Intel RapidCAD. It is both faster [1] and cheaper than installing
  595.          a Weitek Abacus 3167 with your 386, which used to be the highest
  596.          performing combination before the RapidCAD came out. Similarily,
  597.          the introduction of the 486DX2 clock-doubler chips have obliterated
  598.          the need for a Weitek 4167 to get maximum floating-point performance
  599.          out of a 486 based system. A 486DX2-66 performs at or above the
  600.          performance level of a 33 Mhz Weitek 4167, even if the latter
  601.          uses single precision rather than double precision. The 486DX-66
  602.          is rated by Intel at 24700 double precision kWhetstones/sec and
  603.          3.1 double precision Linpack MFLOPS. Of course, these benchmarks
  604.          used the highest performance compilers available. But even with
  605.          a Turbo Pascal 6.0 program, I managed to squeeze 1.6 double precision
  606.          MFLOPS out of the 486DX2-66 for the LLL benchmark (for a description
  607.          of the benchmarks mentioned, see the paragraph on benchmarks below).
  608.          Although I haven't yet seen 486DX2-66 processors being offered
  609.          to end users for upgrade purposes, I recommend the 486DX2-66
  610.          to those that need highest floating-point performance and are
  611.          planning to buy a new PC. The price difference between a 33 MHz
  612.          486DX motherboard and a 486DX2-66 motherboard is around US$ 600,
  613.          well below the price for the Weitek Abacus 4167.
  614.  
  615.  
  616.  
  617.          Operation
  618.  
  619.          In a 80x86/80x87 system CPU instructions and coprocessor
  620.          instructions are executed concurrently. This means that
  621.          the CPU can execute CPU instructions while the coprocessor
  622.          executes a coprocessor instruction at the same time. The
  623.          concurrency is restricted somewhat by the fact that the
  624.          CPU has to aid the coprocessor in certain operations. As
  625.          the CPU and the coprocessor are fed from the same instruction
  626.          stream and both instruction streams may operate on the same
  627.          data, there has to be a synchronizing mechanism between the
  628.          CPU and the coprocessor.
  629.  
  630.          8086/8087 or 8088/8087 system, both of the chips look at the
  631.          opcodes coming in from the bus. To do this, both chips have
  632.          the same BIU (bus interface unit) and the 8086 BIU sends the
  633.          status signals of its prefetch queue to the 8087 BIU. This
  634.          assures that both processors always decode the same instructions
  635.          in parallel. Since all coprocessor instruction start with the
  636.          bit pattern 11011, it is easy for the 8087 to ignore all other
  637.          instructions. Likewise the CPU ignores all coprocessor instructions
  638.          except if they access memory. In this case, the CPU computes
  639.          the address of the LSB (least significant byte) of the memory
  640.          operand and does a dummy read. The 8087 then takes the data                                                                                    and does a dummy read.
  641.          from the data bus. If more than one meory access is needed to
  642.          load an memory operand, the 8087 requests the bus from the CPU,
  643.          generates the consecutive addresses of the operand's bytes
  644.          and fetches them from the data bus. After completing the operation,
  645.          the 8087 hands bus control back to the CPU. Since 8087 and CPU
  646.          are hooked up to the same synchronous bus, they have to run at
  647.          the same speed. This means that with the 8087, only synchronous
  648.          operation of CPU and coprocessor is possible. Another 8087
  649.          coprocessor instruction can only be started if the previous one
  650.          has been completed in the NEU (numerical execution unit) of the
  651.          8087. To prevent the 8086 from decoding a new coprocessor
  652.          instruction while the 8087 is still excuting the previous
  653.          coprocessor instruction, the following mechanism is used: The
  654.          compilers and assemblers automatically generate a WAIT instruction
  655.          before each coprocessor instruction. The WAIT instruction tests
  656.          the /TEST pin until its input becomes "LOW". In 8086/8087 systems,
  657.          the 8086 /TEST pin is connected to the 8087 BUSY pin. As long
  658.          as the NEU executes a coprocessor instruction, it forces its
  659.          BUSY pin "HIGH". Thus the WAIT instruction in front of every
  660.          coprocessor instruction stops the CPU until a still executing
  661.          previous coprocessor instruction has finished. The same
  662.          synchronization is used before the CPU accesses data that
  663.          was written by the coprocessor. A WAIT instruction after the
  664.          coprocessor instruction that writes to memory causes the CPU to
  665.          stop until the coprocessor has transferred the data to memory,
  666.          after which the CPU can safely access the data.
  667.  
  668.          With the help of an additional chip, the 8087 can also be inter-
  669.          faced to the 80186 [36]. The 80186 was the CPU in some PCs (e.g.
  670.          from Philips, Siemens) in the 1982/1983 time frame, but with
  671.          the introduction of the IBM AT which used the 80286, it lost all
  672.          significance for the PC market. The 80C186 (CMOS version of the
  673.          80186) nowadays sells as an embedded controller and can be combined
  674.          with a 80C187 coprocessor which is based on the internals of the
  675.          Intel 387 [37].
  676.  
  677.          The 80287 CPU-interface is totally different from the solution
  678.          used in the 8087. Since the 80286 implements memory protection
  679.          via an MMU based on segmentation, it would have been much to
  680.          expensive to duplicate the whole protection logic on the coprocessor
  681.          for an interface solution similar to the 8087. In a 80286/80287
  682.          system, the CPU fetches and stores all opcodes and operands for
  683.          the coprocessor. Information is passed through ports F8h - FFh.
  684.          As these ports are accessible under program control, care must
  685.          be taken to not accidentally perform write operation to them, as
  686.          this could corrupt the information in the math coprocessor.
  687.          The execution unit of the 80287 is practically identical to that
  688.          of the 8087, that is, nearly all coprocessor instructions execute
  689.          in the same number of clock cycles on both coprocessors. Due to
  690.          the additional overhead of the CPU/coprocessor interface (at
  691.          least ~40 clock cycles), a 8 MHz 80286/80287 combination can be
  692.          slower than a 8086/8087 system running at the same speed for
  693.          floating point intensive programs. Additionally, most of the
  694.          older 286 boards were configured to run the coprocessor at 2/3
  695.          the speed of the CPU, making use of the ability of the 80287
  696.          to run asynchronous with the CPU. The 80287 has a CKM pin that
  697.          causes the incoming system clock to be divided by three for
  698.          the coprocessor if it is tied to ground. The 80286 always
  699.          divides the system clock by two internally. Thus the ratio 2/3.
  700.          However, when the CKM (ClocK Mode) pin is tied high on the 80287,
  701.          it does not divide the CLK input. This feature has been exploited
  702.          by the maker of coprocessor speed sockets. These sockets tie
  703.          CKM high and supply their own CLK signal with a built-in oscillator,
  704.          thereby allowing the 80287 or compatible to run at a much higher
  705.          speed than the CPU. With an IIT or Cyrix 287 one can have a
  706.          20 MHz coprocessor running with a 8 MHz 80286. Note however that
  707.          the floating-point performance in such a configuration does not
  708.          scale linearly with the coprocessor clock, since all the data
  709.          has to be passed through the much slower CPU. If the coprocessor
  710.          executes mostly simple intructions such as addition and multiplication
  711.          doubling the coprocessor clock in a 10 MHz system to 20 MHz does
  712.          not show any performance increase at all [24]. The 80C287 by AMD
  713.          is a 100% clone of the original Intel 80287, but is produced in
  714.          CMOS not in NMOS as the original Intel chip. This makes for lower
  715.          power consumption.
  716.  
  717.          The 80287XL, the Cyrix 82S87, and the IIT 2C87 contain the internals
  718.          of a 387 coprocessor, but are pin-compatible to the original 287.
  719.          However, these chips divide the system clock by two internally,
  720.          as opposed to three in the original Intel 80287. Since the 80286
  721.          also divides the system clock by two, they usually run synchronously
  722.          with the CPU. They can also run asynchronously, though.
  723.  
  724.          The 8087/8087 combination can be characterized as a cooperation of
  725.          partners with equal rights, while the 80286/287 is more a master-
  726.          slave relationship. This makes synchronization much more easy, since
  727.          the complete instruction and data flow of the coprocessor goes thru
  728.          the CPU. Before executing most coprocessor instructions, the 80286
  729.          tests its /BUSY pin which is hooked up to the 287 coprocessor and
  730.          signals if the 80287 is still executing a previous coprocessor
  731.          instruction or has encountered an exception. The 80286 then waits
  732.          until the 80287 is not busy before loading the coprocessor instruction
  733.          into the coprocessor. Therefore, a WAIT instruction before every
  734.          coprocessor instruction is not required. These WAITs are permissible,
  735.          but not necessary in 80287 programs. The second form of WAIT
  736.          synchronisation after the coprocessor has written a memory operand is
  737.          still necessary on 286/287 systems.
  738.  
  739.          The coprocessor interface in 80386/80387 systems is very similar to
  740.          the one found in 286/287 systems. However, to prevent corruption
  741.          of the coprocessor's contents by programming errors, the IO-ports
  742.          800000F8 - 800000FF are used which are not user accessible. The
  743.          interface has been optimized and uses 32-bit transfers. The overhead
  744.          of the interface has been reduced to about 16-20 clock cycles. For
  745.          some operations on the 387 'clones', that take less than 16 clock
  746.          cycles to complete this effectively limits the execution rate of
  747.          coprocessor instructions. The only sensible solution to provide
  748.          even higher floating point performance was to integrate the CPU
  749.          and coprocessor functionality onto the same chip. This is what
  750.          Intel did with the 80486. The FPU in the 486 also benefits from
  751.          the instruction pipelining and from the integrated cache.
  752.  
  753.  
  754.  
  755.          Performance
  756.  
  757.          Several computer magazines have published performance comparisons
  758.          at the application level for the 387 coprocessors and Weitek's
  759.          ABACUS 3167 and 4167 chips [1,25,68,70]. Applications tested included
  760.          AutoCAD R11, RenderStar, Quattro Pro, Lotus 1-2-3, and AutoDesk's
  761.          3D-Studio. For most tests, performance improvements for the 387
  762.          clones over Intel's 387DX were small to marginal, the clones running
  763.          the applications no more than 5% to 15% faster than the Intel 387DX.
  764.          In the test of 3D-Studio, one of the few programs that supports
  765.          the Weitek Abacus, the Weitek 3167 improved performance by 23%
  766.          over an Intel 387DX and the 4167 improved performance by 10% over
  767.          the 486 [1].
  768.  
  769.  
  770.          The Intel Math Coprocessor Utilities Disk that accompanies the
  771.          Intel 387DX coprocessor has a demonstration program that shows
  772.          the speedup of certain application programs when run with the
  773.          Intel coprocessor vs. a system with no coprocessor.
  774.  
  775.          Application      Time w/o 387   Time w/ 387  Speedup
  776.  
  777.          Art&Letters          87.0 sec      34.8 sec     150%
  778.          Quattro Pro           8.0 sec       4.0 sec     100%
  779.          Wingz                17.9 sec       9.1 sec      97%
  780.          Mathematica         420.2 sec     337.0 sec      25%
  781.  
  782.  
  783.          The following table is an excerpt from [70]:
  784.  
  785.          Application      Time w/o 387   Time w/ 387  Speedup
  786.  
  787.          Corel Draw          471.0 sec     416.0 sec      13%
  788.          Freedom Of Press    163.0 sec      77.0 sec     112%
  789.          Lotus 1-2-3         257.0 sec      43.0 sec     597%
  790.  
  791.  
  792.          The following table is an excerpt from [25]:
  793.  
  794.          Application      Time w/o 387   Time w/ 387  Speedup
  795.  
  796.          Design CAD, Test1    98.1 sec      50.0 sec      96%
  797.          Design CAD, Test2    75.3 sec      35.0 sec     115%
  798.          Excel, Test 1         9.2 sec       6.8 sec      35%
  799.          Excel, Test 1        12.6 sec       9.3 sec      35%
  800.  
  801.  
  802.  
  803.          The performance statistics below were put together with the
  804.          help of four widely known numeric benchmarks and two benchmarks
  805.          developed by me. Three Pascal programs, one FORTRAN program,
  806.          and two assembly language program were used. The assembly language
  807.          programs were linked with Turbo-Pascal 6.0 for library support,
  808.          especially to include the coprocessor emulator of the TP 6.0
  809.          run-time library. The Pascal programs were compiled with Turbo
  810.          Pascal 6.0 from Borland International, a non-optimizing compiler
  811.          that produces 16-bit code. The FORTRAN program was compiled using
  812.          MS FORTRAN 5.0, an optimizing compiler that generates 16-bit
  813.          code. All programs except PEAKFLOP and SAVAGE, which use double
  814.          extended precision, use double precision variables. Note that
  815.          using a highly optimizing compiler producing 32-bit code you
  816.          will see much higher performance for some benchmarks. For example,
  817.          Intel rates the 33 MHz 386/387DX at 3290 KWhetstones/sec and 0.4
  818.          double precision LINPACK MFLOPS [28,29]. The 33 MHz Intel 486 is
  819.          rated by Intel at 12300 KWhetstones/sec and 1.6 double precision
  820.          LINPACK MFLOPS [30]. The compilers used in these benchmarks run by
  821.          the chip vendor are the ones that give the highest performance
  822.          available. These compilers are in the US$ 1000+ price range.
  823.          Some of them may be experimental or prereleased versions not
  824.          available to the general public. The relative performance of
  825.          one coprocessor to another could vary depending on the code
  826.          generated by compilers. Non-optimizing compilers tend to generate
  827.          a high percentage of operations which access variables in memory,
  828.          while optimizing compiler produce code that contains many
  829.          operations involving registers. Thus it is well possible that
  830.          coprocessor A beats coprocessor B running benchmark Z if compiled
  831.          with compiler C, but B beats A when the same benchmark is compiled
  832.          using compiler D. All benchmark in this overview were run from
  833.          floppy under a 'bare-bones' MS-DOS 5.0 without the CONFIG.SYS
  834.          and AUTOEXEC.BAT files. This way, it was made sure no TSR or
  835.          other program unnecessarily stole computing resources from the
  836.          benchmarks.
  837.  
  838.          Coprocessor performance also depends on the motherboard, or more
  839.          specifically the chip set used on the motherboard. In [34] and [35]
  840.          identically configured motherboards using different 386 chip sets
  841.          were tested. Among other tests a coprocessor benchmark was run
  842.          which is based on a fractal computation and its execution time
  843.          recorded. The following tables showing coprocessor performance
  844.          to vary with the chip set have been copied from these articles
  845.          in abridged form.
  846.  
  847.                        Cyrix                                   Cyrix
  848.          chip set      387+                 chip set           83D87
  849.  
  850.          Opti, 40 MHz  24.57 sec   97.0%    PC-Chips, 33 MHz  26.97 sec   93.0%
  851.          Elite,40 MHz  24.46 sec   97.4%    UMC,      33 MHz  27.69 sec   90.5%
  852.          ACT,  40 MHz  23.84 sec  100.0%    Headland, 33 MHz  25.08 sec  100.0%
  853.          Forex,40 MHz  23.84 sec  100.0%    Eteq,     33 MHZ  27.38 sec   91.6%
  854.  
  855.          This shows that performance of the same coprocessor can vary by
  856.          up to ~10% depending on the chip set used on your board, at least
  857.          for 386 motherboards (similar numbers for 286, 386sx, and 486 are
  858.          unfortunately not available). The benchmarks for this article were
  859.          run on a board with the Forex chip set, which is one of the fastest
  860.          386 chip sets there is, not only with respect to floating-point
  861.          performance [35].
  862.  
  863.  
  864.          Description of benchmarks
  865.  
  866.          PEAKFLOP is the kernel of a fractal computation. It consists
  867.          mainly of a tight loop written in assembly code and fine tuned
  868.          to give maximum performance. All variables are held in the
  869.          CPU's and coprocessor's registers, so the only memory access
  870.          is for opcode fetches. The main loop contains three multiplications
  871.          and five additions/subtractions. This ratio is fairly typical
  872.          for other floating point intensive programs as well. The whole
  873.          program fits nicely into even a very small CPU cache. Due to
  874.          the nature of this program, its MFLOPS rate is hardly to be
  875.          exceeded by any program that calculates anything useful. Thus
  876.          the name PEAKFLOP. You will find the source code for PEAKFLOP
  877.          in appendix B.
  878.  
  879.          TRNSFORM multiplies an array of 8191 vectors with a 3D-transformation
  880.          matrix (a 4x4 matrix). Each vector consists of four double precision
  881.          values. Multiplying vectors with a matrix is a typical operation in
  882.          the manipulation (e.g. rotation) of 3D objects which are made up from
  883.          many vectors decribing the object. This benchmark stresses addition
  884.          and multiplication as well as memory access. For each vector, 16
  885.          multiplications and 12 additions are used. About 256 kByte of data
  886.          is accessed during the benchmark. TRNSFORM is implemented as an
  887.          optimized assembler program linked with the Turbo Pascal 6.0 library.
  888.          For the IIT 3C87, a special version was written that makes use of
  889.          the special F4X4 instruction available on that coprocessor. F4X4
  890.          does a full multiplication of a 4x4 matrix by a 4x1 vector in a
  891.          single instruction. The full source code for the TRNSFORM program is
  892.          in appendix B.
  893.  
  894.          LLL is short for Lawrence Livermore Loops [21], a set of kernels
  895.          taken from real floating point extensive programs. Some of these
  896.          loops are vectorizable, but since we don't deal with vector
  897.          processors here, this doesn't matter. For this test, LLL was
  898.          adapted from the FORTRAN original [20] to Turbo Pascal 6.0. By
  899.          variable overlaying (similar to FORTRAN's EQUIVALENCE statement)
  900.          memory allocation for data was reduced to 64 kB, so all data fits
  901.          into a single 64 kB segment. The older version of LLL is used here
  902.          which contains 14 loops. There also exists a newer, more elaborate
  903.          version consisting of 24 kernels. The kernels in LLL exercise only
  904.          multiplication and addition. The MFLOPS rate reported is the
  905.          average of the MFLOPS rate of all 14 kernels as reported by the
  906.          LLL program. LLL and Whetstone results (see below) are reported
  907.          as returned by my COMPTEST test program in which they have been
  908.          included as a measure of coprocessor/FPU performance. COMPTEST
  909.          has been compiled under Turbo Pascal 6.0 with all 'optimizations'
  910.          on and using my own run-time library, which gives higher perfor-
  911.          mance than the one included with TP 6.0. My library is available
  912.          as TPL60N16.ZIP from garbo.uwasa.fi and ftp-sites that mirror
  913.          this site.
  914.  
  915.          Linpack [5] is a well known floating-point benchmark that also
  916.          heavily exercises the memory system. Linpack operates on large
  917.          matrices and takes up about 570 kB in the version used for this
  918.          test. This is about the largest program size a pure DOS system
  919.          can accomodate. Linpack was originally designed to estimate
  920.          performance of BLAS, a library of FORTRAN subroutines that
  921.          handles various vector and matrix operations. It uses two routines
  922.          from BLAS which are thought to be typical of the matrix operations
  923.          used by BLAS. Both routines only use addition/subtraction and
  924.          multiplication. The FORTRAN source code for Linpack can be
  925.          obtained from the automated mail server netlib@ornl.gov. Linpack
  926.          was compiled using MS Fortran 5.0 in the HUGE memory model (which
  927.          can handle data structures larger than 64 kB) and with compiler
  928.          switches set for maximum optimization. Linpack repeatedly does
  929.          the same test. The number reported is the maximum MFLOPS rate
  930.          returned by Linpack. Linpack MFLOPS ratings for a great number
  931.          of machines are contained in [6]. This PostScript document is
  932.          also available from netlib@ornl.gov.
  933.  
  934.