README
上传用户:qaz666999
上传日期:2022-08-06
资源大小:2570k
文件大小:5k
源码类别:

数学计算

开发平台:

Unix_Linux

  1. Copyright 2000, 2001 Free Software Foundation, Inc.
  2. This file is part of the GNU MP Library.
  3. The GNU MP Library is free software; you can redistribute it and/or modify
  4. it under the terms of the GNU Lesser General Public License as published by
  5. the Free Software Foundation; either version 3 of the License, or (at your
  6. option) any later version.
  7. The GNU MP Library is distributed in the hope that it will be useful, but
  8. WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  9. or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
  10. License for more details.
  11. You should have received a copy of the GNU Lesser General Public License
  12. along with the GNU MP Library.  If not, see http://www.gnu.org/licenses/.
  13.                       AMD K7 MPN SUBROUTINES
  14. This directory contains code optimized for the AMD Athlon CPU.
  15. The mmx subdirectory has routines using MMX instructions.  All Athlons have
  16. MMX, the separate directory is just so that configure can omit it if the
  17. assembler doesn't support MMX.
  18. STATUS
  19. Times for the loops, with all code and data in L1 cache.
  20.                                cycles/limb
  21. mpn_add/sub_n             1.6
  22. mpn_copyi                 0.75 or 1.0    varying with data alignment
  23. mpn_copyd                 0.75 or 1.0   /
  24. mpn_divrem_1             17.0 integer part, 15.0 fractional part
  25. mpn_mod_1                17.0
  26. mpn_divexact_by3          8.0
  27. mpn_l/rshift              1.2
  28. mpn_mul_1                 3.4
  29. mpn_addmul/submul_1       3.9
  30. mpn_mul_basecase          4.42 cycles/crossproduct (approx)
  31.         mpn_sqr_basecase          2.3 cycles/crossproduct (approx)
  32.   or 4.55 cycles/triangleproduct (approx)
  33. Prefetching of sources hasn't yet been tried.
  34. NOTES
  35. cmov, MMX, 3DNow and some extensions to MMX and 3DNow are available.
  36. Write-allocate L1 data cache means prefetching of destinations is unnecessary.
  37. Floating point multiplications can be done in parallel with integer
  38. multiplications, but there doesn't seem to be any way to make use of this.
  39. Unsigned "mul"s can be issued every 3 cycles.  This suggests 3 is a limit on
  40. the speed of the multiplication routines.  The documentation shows mul
  41. executing in IEU0 (or maybe in IEU0 and IEU1 together), so it might be that,
  42. to get near 3 cycles code has to be arranged so that nothing else is issued
  43. to IEU0.  A busy IEU0 could explain why some code takes 4 cycles and other
  44. apparently equivalent code takes 5.
  45. OPTIMIZATIONS
  46. Unrolled loops are used to reduce looping overhead.  The unrolling is
  47. configurable up to 32 limbs/loop for most routines and up to 64 for some.
  48. The K7 has 64k L1 code cache so quite big unrolling is allowable.
  49. Computed jumps into the unrolling are used to handle sizes not a multiple of
  50. the unrolling.  An attractive feature of this is that times increase
  51. smoothly with operand size, but it may be that some routines should just
  52. have simple loops to finish up, especially when PIC adds between 2 and 16
  53. cycles to get %eip.
  54. Position independent code is implemented using a call to get %eip for the
  55. computed jumps and a ret is always done, rather than an addl $4,%esp or a
  56. popl, so the CPU return address branch prediction stack stays synchronised
  57. with the actual stack in memory.
  58. Branch prediction, in absence of any history, will guess forward jumps are
  59. not taken and backward jumps are taken.  Where possible it's arranged that
  60. the less likely or less important case is under a taken forward jump.
  61. CODING
  62. Instructions in general code have been shown grouped if they can execute
  63. together, which means up to three direct-path instructions which have no
  64. successive dependencies.  K7 always decodes three and has out-of-order
  65. execution, but the groupings show what slots might be available and what
  66. dependency chains exist.
  67. When there's vector-path instructions an effort is made to get triplets of
  68. direct-path instructions in between them, even if there's dependencies,
  69. since this maximizes decoding throughput and might save a cycle or two if
  70. decoding is the limiting factor.
  71. INSTRUCTIONS
  72. adcl       direct
  73. divl       39 cycles back-to-back
  74. lodsl,etc  vector
  75. loop       1 cycle vector (decl/jnz opens up one decode slot)
  76. movd reg   vector
  77. movd mem   direct
  78. mull       issue every 3 cycles, latency 4 cycles low word, 6 cycles high word
  79. popl    vector (use movl for more than one pop)
  80. pushl    direct, will pair with a load
  81. shrdl %cl  vector, 3 cycles, seems to be 3 decode too
  82. xorl r,r   false read dependency recognised
  83. REFERENCES
  84. "AMD Athlon Processor X86 Code Optimization Guide", AMD publication number
  85. 22007, revision K, February 2002.  Available on-line,
  86. http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/22007.pdf
  87. "3DNow Technology Manual", AMD publication number 21928G/0-March 2000.
  88. This describes the femms and prefetch instructions.  Available on-line,
  89. http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/21928.pdf
  90. "AMD Extensions to the 3DNow and MMX Instruction Sets Manual", AMD
  91. publication number 22466, revision D, March 2000.  This describes
  92. instructions added in the Athlon processor, such as pswapd and the extra
  93. prefetch forms.  Available on-line,
  94. http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/22466.pdf
  95. "3DNow Instruction Porting Guide", AMD publication number 22621, revision B,
  96. August 1999.  This has some notes on general Athlon optimizations as well as
  97. 3DNow.  Available on-line,
  98. http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/22621.pdf
  99. ----------------
  100. Local variables:
  101. mode: text
  102. fill-column: 76
  103. End: