home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #18 / NN_1992_18.iso / spool / comp / sys / intel / 1533 < prev    next >
Encoding:
Internet Message Format  |  1992-08-19  |  62.0 KB

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