Home | History | Annotate | Line # | Download | only in p6
README revision 1.1.1.3
      1      1.1  mrg Copyright 2000, 2001 Free Software Foundation, Inc.
      2      1.1  mrg 
      3      1.1  mrg This file is part of the GNU MP Library.
      4      1.1  mrg 
      5      1.1  mrg The GNU MP Library is free software; you can redistribute it and/or modify
      6  1.1.1.3  mrg it under the terms of either:
      7  1.1.1.3  mrg 
      8  1.1.1.3  mrg   * the GNU Lesser General Public License as published by the Free
      9  1.1.1.3  mrg     Software Foundation; either version 3 of the License, or (at your
     10  1.1.1.3  mrg     option) any later version.
     11  1.1.1.3  mrg 
     12  1.1.1.3  mrg or
     13  1.1.1.3  mrg 
     14  1.1.1.3  mrg   * the GNU General Public License as published by the Free Software
     15  1.1.1.3  mrg     Foundation; either version 2 of the License, or (at your option) any
     16  1.1.1.3  mrg     later version.
     17  1.1.1.3  mrg 
     18  1.1.1.3  mrg or both in parallel, as here.
     19      1.1  mrg 
     20      1.1  mrg The GNU MP Library is distributed in the hope that it will be useful, but
     21      1.1  mrg WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
     22  1.1.1.3  mrg or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
     23  1.1.1.3  mrg for more details.
     24      1.1  mrg 
     25  1.1.1.3  mrg You should have received copies of the GNU General Public License and the
     26  1.1.1.3  mrg GNU Lesser General Public License along with the GNU MP Library.  If not,
     27  1.1.1.3  mrg see https://www.gnu.org/licenses/.
     28      1.1  mrg 
     29      1.1  mrg 
     30      1.1  mrg 
     31      1.1  mrg 
     32      1.1  mrg 
     33      1.1  mrg                       INTEL P6 MPN SUBROUTINES
     34      1.1  mrg 
     35      1.1  mrg 
     36      1.1  mrg 
     37      1.1  mrg This directory contains code optimized for Intel P6 class CPUs, meaning
     38      1.1  mrg PentiumPro, Pentium II and Pentium III.  The mmx and p3mmx subdirectories
     39      1.1  mrg have routines using MMX instructions.
     40      1.1  mrg 
     41      1.1  mrg 
     42      1.1  mrg 
     43      1.1  mrg STATUS
     44      1.1  mrg 
     45      1.1  mrg Times for the loops, with all code and data in L1 cache, are as follows.
     46      1.1  mrg Some of these might be able to be improved.
     47      1.1  mrg 
     48      1.1  mrg                                cycles/limb
     49      1.1  mrg 
     50      1.1  mrg 	mpn_add_n/sub_n           3.7
     51      1.1  mrg 
     52      1.1  mrg 	mpn_copyi                 0.75
     53      1.1  mrg 	mpn_copyd                 1.75 (or 0.75 if no overlap)
     54      1.1  mrg 
     55      1.1  mrg 	mpn_divrem_1             39.0
     56      1.1  mrg 	mpn_mod_1                21.5
     57      1.1  mrg 	mpn_divexact_by3          8.5
     58      1.1  mrg 
     59      1.1  mrg 	mpn_mul_1                 5.5
     60      1.1  mrg 	mpn_addmul/submul_1       6.35
     61      1.1  mrg 
     62      1.1  mrg 	mpn_l/rshift              2.5
     63      1.1  mrg 
     64      1.1  mrg 	mpn_mul_basecase          8.2 cycles/crossproduct (approx)
     65      1.1  mrg 	mpn_sqr_basecase          4.0 cycles/crossproduct (approx)
     66  1.1.1.2  mrg 				  or 7.75 cycles/triangleproduct (approx)
     67      1.1  mrg 
     68      1.1  mrg Pentium II and III have MMX and get the following improvements.
     69      1.1  mrg 
     70      1.1  mrg 	mpn_divrem_1             25.0 integer part, 17.5 fractional part
     71      1.1  mrg 
     72      1.1  mrg 	mpn_l/rshift              1.75
     73      1.1  mrg 
     74      1.1  mrg 
     75      1.1  mrg 
     76      1.1  mrg 
     77      1.1  mrg NOTES
     78      1.1  mrg 
     79      1.1  mrg Write-allocate L1 data cache means prefetching of destinations is unnecessary.
     80      1.1  mrg 
     81      1.1  mrg Mispredicted branches have a penalty of between 9 and 15 cycles, and even up
     82      1.1  mrg to 26 cycles depending how far speculative execution has gone.  The 9 cycle
     83      1.1  mrg minimum penalty comes from the issue pipeline being 9 stages.
     84      1.1  mrg 
     85      1.1  mrg A copy with rep movs seems to copy 16 bytes at a time, since speeds for 4,
     86      1.1  mrg 5, 6 or 7 limb operations are all the same.  The 0.75 cycles/limb would be 3
     87      1.1  mrg cycles per 16 byte block.
     88      1.1  mrg 
     89      1.1  mrg 
     90      1.1  mrg 
     91      1.1  mrg 
     92      1.1  mrg CODING
     93      1.1  mrg 
     94      1.1  mrg Instructions in general code have been shown grouped if they can execute
     95      1.1  mrg together, which means up to three instructions with no successive
     96      1.1  mrg dependencies, and with only the first being a multiple micro-op.
     97      1.1  mrg 
     98      1.1  mrg P6 has out-of-order execution, so the groupings are really only showing
     99      1.1  mrg dependent paths where some shuffling might allow some latencies to be
    100      1.1  mrg hidden.
    101      1.1  mrg 
    102      1.1  mrg 
    103      1.1  mrg 
    104      1.1  mrg 
    105      1.1  mrg REFERENCES
    106      1.1  mrg 
    107      1.1  mrg "Intel Architecture Optimization Reference Manual", 1999, revision 001 dated
    108      1.1  mrg 02/99, order number 245127 (order number 730795-001 is in the document too).
    109      1.1  mrg Available on-line:
    110      1.1  mrg 
    111      1.1  mrg 	http://download.intel.com/design/PentiumII/manuals/245127.htm
    112      1.1  mrg 
    113      1.1  mrg "Intel Architecture Optimization Manual", 1997, order number 242816.  This
    114      1.1  mrg is an older document mostly about P5 and not as good as the above.
    115      1.1  mrg Available on-line:
    116      1.1  mrg 
    117      1.1  mrg 	http://download.intel.com/design/PentiumII/manuals/242816.htm
    118      1.1  mrg 
    119      1.1  mrg 
    120      1.1  mrg 
    121      1.1  mrg ----------------
    122      1.1  mrg Local variables:
    123      1.1  mrg mode: text
    124      1.1  mrg fill-column: 76
    125      1.1  mrg End:
    126