Оптимизация для процессоров семейства Pentium: 29. Список периодов выполнения инструкций и задержек микроопераций для PPro, PII и PIII

Дата публикации 22 авг 2002

Оптимизация для процессоров семейства Pentium: 29. Список периодов выполнения инструкций и задержек микроопераций для PPro, PII и PIII — Архив WASM.RU

Пояснения:

Операнды: r = регистр, m = память, i = число, sr = сегментный регистр, m32 = 32-х битный операнд в памяти и так далее.

Микрооперации: количество микроопераций, которые генерит инструкция для каждого порта выполнения.

  • p0: порт 0: ALU и т.д.
  • p1: порт 1: ALU, переходы
  • p01: инструкции, которые могут попасть как в порт 0, так и в порт 1 (какой будет свободен первым)
  • p2: порт 2: загрузка данных и т.д.
  • p3: порт 3: генерация адреса для сохранения
  • p4: порт 4: сохранение данных

Задержка:

Это задержка, которую генерирует инструкция в цепочке зависимости. (Это не то же самое, что время, потраченное в модуле выполнения. Значения могут быть неточны в тех ситуациях, когда они не могут быть измерены точно, особенно, что касается операндов в памяти). Значения являются минимальными. Промахи кэша, невыравненность и исключения могут повысить количество тактов весьма значительно. Предполагается, что операнды с плавающей запятой являются нормальными. Ненормальные числа, NAN'ы и бесконечность увеличивают задержку на 50-150 тактов, кроме перемещений XMM, перемешиваний и булевых инструкций. Переполнения FPU, потеря значимости, ненормальные или NAN-результаты дают аналогичную задержку.

Производительность: максимальная производительность для нескольких инструкций одного вида. Например, производительность в 1/2 для FMUL означает, что новая инструкция FMUL может начинать выполнение каждые 2 такта.

29.1 Целочисленные инструкции (PPro, PII и PIII)

 Инструкции          Операнды     микрооперации         задержка производительность
                                  p0 p1 p01  p2 p3  p4

 NOP                                    1
 MOV                 r,r/i              1
 MOV                 r,m                     1
 MOV                 m,r/i                      1   1
 MOV                 r,sr               1
 MOV                 m,sr               1       1   1
 MOV                 sr,r         8                     5
 MOV                 sr,m         7          1          8
 MOVSX MOVZX         r,r                1
 MOVSX MOVZX         r,m                     1

 CMOVcc              r,r          1     1
 CMOVcc              r,m          1     1    1
 XCHG                r,r                3
 XCHG                r,m                4    1  1   1   high b)
 XLAT                                   1    1
 PUSH                r/i                1       1   1
 POP                 r                  1    1
 POP                 (E)SP              2    1
 PUSH                m                  1    1  1   1
 POP                 m                  5    1  1   1

 PUSH                sr                 2       1   1
 POP                 sr                 8    1
 PUSHF(D)                         3     11      1   1
 POPF(D)                          10    6    1
 PUSHA(D)                               2       8   8
 POPA(D)                                2    8
 LAHF SAHF                              1
 LEA                 r,m          1                     1 c)
 LDS LES LFS LGS
 LSS                 m                  8    3

 ADD SUB AND OR XOR  r,r/i              1
 ADD SUB AND OR XOR  r,m                1    1
 ADD SUB AND OR XOR  m,r/i              1    1  1   1
 ADC SBB             r,r/i              2
 ADC SBB             r,m                2    1
 ADC SBB             m,r/i              3    1  1   1
 CMP TEST            r,r/i              1
 CMP TEST            m,r/i              1    1
 INC DEC NEG NOT     r                  1
 INC DEC NEG NOT     m                  1    1  1   1

 AAS DAA DAS                         1
 AAD                              1     2               4
 AAM                              1  1  2               15
 MUL IMUL            r,(r),(i)    1                     4       1/1
 MUL IMUL            (r),m        1          1          4       1/1
 DIV IDIV            r8           2     1               19      1/12
 DIV IDIV            r16          3     1               23      1/21
 DIV IDIV            r32          3     1               39      1/37

 DIV IDIV            m8           2     1    1          19      1/12
 DIV IDIV            m16          2     1    1          23      1/21
 DIV IDIV            m32          2     1    1          39      1/37
 CBW CWDE                               1
 CWD CDQ                          1
 SHR SHL SAR ROR
 ROL                 r,i/CL       1
 SHR SHL SAR ROR
 ROL                 m,i/CL       1          1  1   1
 RCR RCL             r,1          1     1
 RCR RCL             r8,i/CL      4     4

 RCR RCL             r16/32,i/CL  3     3
 RCR RCL             m,1          1     2    1  1   1
 RCR RCL             m8,i/CL      4     3    1  1   1
 RCR RCL             m16/32,i/CL  4     2    1  1   1
 SHLD SHRD           r,r,i/CL     2
 SHLD SHRD           m,r,i/CL     2     1    1  1   1
 BT                  r,r/i              1
 BT                  m,r/i        1     6    1
 BTR BTS BTC         r,r/i              1
 BTR BTS BTC         m,r/i        1     6    1  1   1

 BSF BSR             r,r             1  1
 BSF BSR             r,m             1  1    1
 SETcc               r                  1
 SETcc               m                  1       1   1
 JMP                 short/near      1                          1/2
 JMP                 far          21         1
 JMP                 r               1                          1/2
 JMP                 m(near)         1       1                  1/2
 JMP                 m(far)       21         2

 conditional jump    short/near      1                          1/2
 CALL                near            1  1       1   1           1/2
 CALL                far          28         1  2   2
 CALL                r               1  2       1   1           1/2
 CALL                m(near)         1  4    1  1   1           1/2
 CALL                m (far)      28         2  2   2
 RETN                                1  2    1                  1/2
 RETN                i               1  3    1                  1/2

 RETF                             23         3
 RETF                i            23         3
 J(E)CXZ             short           1  1
 LOOP                short        2  1  8
 LOOP(N)E            short        2  1  8
 ENTER               i,0                12      1   1
 ENTER               a,b          ca. 18+4b     b-1 2b
 LEAVE                                  2    1
 BOUND               r,m          7     6    2
 CLC STC CMC                            1
 CLD STD                                4

 CLI                              9
 STI                              17
 INTO                                   5
 LODS                                        2
 REP LODS                               10+6n
 STOS                                        1  1   1
 REP STOS                               ca. 5n a)
 MOVS                                   1    3  1   1
 REP MOVS                               ca. 6n a)
 SCAS                                   1    2
 REP(N)E SCAS                           12+7n

 CMPS                                   4    2
 REP(N)E CMPS                           12+9n
 BSWAP                            1     1
 CPUID                            23-48
 RDTSC                            31
 IN                               18                    >300
 OUT                              18                    >300
 PREFETCHNTA  d)     m                        1
 PREFETCHT0  d)      m                        1
 PREFETCHT1  d)      m                        1

 PREFETCHT2  d)      m                        1
 SFENCE  d)                                      1   1          1/6

Примечания:

a) быстро при определенных условиях: смотри главу 26.3.
b) смотри главу 26.1.
c) 3, если константа без базового или индексного регистра.
d) только PIII.

29.2 Инструкции FPU (PPro, PII и PIII)

 Инструкции         Операнды     микрооперации      задержка производительность
                              p0  p1 p01  p2 p3  p4

 FLD                r         1
 FLD                m32/64                1         1
 FLD                m80       2           2
 FBLD               m80       38          2
 FST(P)             r         1
 FST(P)             m32/m64                  1   1  1
 FSTP               m80       2              2   2
 FBSTP              m80       165            2   2
 FXCH               r                               0      3/1 f)
 FILD               m         3           1         5

 FIST(P)            m         2              1   1  5
 FLDZ                         1
 FLD1 FLDPI FLDL2E etc.       2
 FCMOVcc            r         2                     2
 FNSTSW             AX        3                     7
 FNSTSW             m16       1              1   1
 FLDCW              m16       1      1    1         10
 FNSTCW             m16       1              1   1
 FADD(P) FSUB(R)(P) r         1                     3      1/1
 FADD(P) FSUB(R)(P) m         1           1         3-4    1/1

 FMUL(P)            r         1                     5      1/2 g)
 FMUL(P)            m         1           1         5-6    1/2 g)
 FDIV(R)(P)         r         1                     38 h)  1/37
 FDIV(R)(P)         m         1           1         38 h)  1/37
 FABS                         1
 FCHS                         3                     2
 FCOM(P) FUCOM      r         1                     1
 FCOM(P) FUCOM      m         1           1         1
 FCOMPP FUCOMPP               1      1              1

 FCOMI(P) FUCOMI(P) r         1                     1
 FCOMI(P) FUCOMI(P) m         1           1         1
 FIADD FISUB(R)     m         6           1
 FIMUL              m         6           1
 FIDIV(R)           m         6           1
 FICOM(P)           m         6           1
 FTST                         1                     1
 FXAM                         1                     2
 FPREM                        23
 FPREM1                       33
 FRNDINT                      30

 FSCALE                       56
 FXTRACT                      15
 FSQRT                        1                     69     e,i)
 FSIN FCOS                    17-97                 27-103 e)
 FSINCOS                      18-110                29-130 e)
 F2XM1                        17-48                 66     e)
 FYL2X                        36-54                 103    e)
 FYL2XP1                      31-53                 98-107 e)
 FPTAN                        21-102                13-143 e)

 FPATAN                       25-86                 44-143 e)
 FNOP                         1
 FINCSTP FDECSTP              1
 FFREE              r         1
 FFREEP             r         2
 FNCLEX                              3
 FNINIT                       13
 FNSAVE                       141
 FRSTOR                       72
 WAIT                                2

Примечания:

e) не конвееризуется
f) FXCH генерирует 1 микрооперацию, что делается с помощью переименования
регистром, порты при этом не задействуются.
g) FMUL использует ту же схему, что и целочисленное умножение. Поэтому 
комбинированная производительность целочисленных умножений и умножений FPU
равна 1 FMUL + 1 IMUL за 3 такта.
h) задержка FDIV зависит от заданной в контрольном слове точности: 64 бита
дают задержку в 38 тактов, 53 - в 32 такта, 24 - в 18. Деление на степень от
двух занимает 9 тактов. Производительность равна 1/(задержка-1).
i) быстрее для низкой точности.

29.3 Инструкции MMX (PII и PIII)

 Инструкция              Операнды       микрооперации  задержка производительность
                                     p0 p1 p01  p2 p3 p4  

 MOVD MOVQ               r,r               1                    2/1
 MOVD MOVQ               r64,m32/64             1               1/1
 MOVD MOVQ               m32/64,r64                1  1         1/1
 PADD PSUB PCMP          r64,r64           1                    1/1
 PADD PSUB PCMP          r64,m64           1    1               1/1
 PMUL PMADD              r64,r64     1                    3     1/1
 PMUL PMADD              r64,m64     1          1         3     1/1

 PAND PANDN POR
 PXOR                    r64,r64           1                    2/1
 PAND PANDN POR
 PXOR                    r64,m64           1    1               1/1
 PSRA PSRL PSLL          r64,r64/i      1                       1/1
 PSRA PSRL PSLL          r64,m64        1       1               1/1
 PACK PUNPCK             r64,r64        1                       1/1
 PACK PUNPCK             r64,m64        1       1               1/1
 EMMS                                11                   6 k)

 MASKMOVQ  d)            r64,r64            1       1  1  2-8   1/30-1/2
 PMOVMSKB  d)            r32,r64         1                 1     1/1
 MOVNTQ  d)              m64,r64                    1  1        1/30-1/1
 PSHUFW  d)              r64,r64,i       1                 1     1/1
 PSHUFW  d)              r64,m64,i       1       1         2     1/1
 PEXTRW  d)              r32,r64,i       1  1              2     1/1
 PISRW  d)               r64,r32,i       1                 1     1/1

 PISRW  d)               r64,m16,i       1       1         2     1/1
 PAVGB PAVGW  d)         r64,r64            1              1     2/1
 PAVGB PAVGW  d)         r64,m64            1    1         2     1/1
 PMINUB PMAXUB PMINSW
 PMAXSW  d)              r64,r64            1              1     2/1
 PMINUB PMAXUB PMINSW
 PMAXSW  d)              r64,m64            1    1         2     1/1
 PMULHUW  d)             r64,r64      1                    3     1/1
 PMULHUW  d)             r64,m64      1          1         4     1/1

 PSADBW  d)              r64,r64      2     1              5     1/2
 PSADBW  d)              r64,m64      2     1    1         6     1/2

Примечания:

d) только PIII.

k) Вы можете спрятать задержку, вставив другие инструкции между EMMS и 
последующими инструкциями FPU.

29.4 Инструкции XMM (PIII)

 Инструкция        Операнды           микрооперации      задержка производительность
                              p0   p1  p01   p2   p3  p4  

 MOVAPS            r128,r128           2                   1     1/1
 MOVAPS            r128,m128                 2             2     1/2
 MOVAPS            m128,r128                      2   2    3     1/2
 MOVUPS            r128,m128                 4             2     1/4
 MOVUPS            m128,r128       1              4   4    3     1/4
 MOVSS             r128,r128           1                   1     1/1
 MOVSS             r128,m32            1     1             1     1/1

 MOVSS             m32,r128                       1   1    1     1/1
 MOVHPS MOVLPS     r128,m64            1                   1     1/1
 MOVHPS MOVLPS     m64,r128                       1   1    1     1/1
 MOVLHPS MOVHLPS   r128,r128           1                   1     1/1
 MOVMSKPS          r32,r128   1                            1     1/1
 MOVNTPS           m128,r128                       2   2         1/15-1/2
 CVTPI2PS          r128,r64        2                       3     1/1

 CVTPI2PS          r128,m64        2         1             4     1/2
 CVTPS2PI
 CVTTPS2PI         r64,r128        2                       3     1/1
 CVTPS2PI          r64,m128        1         2             4     1/1
 CVTSI2SS          r128,r32        2         1             4     1/2
 CVTSI2SS          r128,m32        2         2             5     1/2
 CVTSS2SI
 CVTTSS2SI         r32,r128        1         1             3     1/1
 CVTSS2SI          r32,m128        1         2             4     1/2

 ADDPS SUBPS       r128,r128       2                       3     1/2
 ADDPS SUBPS       r128,m128       2         2             3     1/2
 ADDSS SUBSS       r128,r128       1                       3     1/1
 ADDSS SUBSS       r128,m32        1         1             3     1/1
 MULPS             r128,r128  2                            4     1/2
 MULPS             r128,m128  2              2             4     1/2
 MULSS             r128,r128  1                            4     1/1

 MULSS             r128,m32   1              1             4     1/1
 DIVPS             r128,r128  2                            48    1/34
 DIVPS             r128,m128  2              2             48    1/34
 DIVSS             r128,r128  1                            18    1/17
 DIVSS             r128,m32   1              1             18    1/17
 ANDPS ANDNPS ORPS
 XORPS             r128,r128       2                       2     1/2
 ANDPS ANDNPS ORPS
 XORPS             r128,m128       2         2             2     1/2

 MAXPS MINPS       r128,r128       2                       3     1/2
 MAXPS MINPS       r128,m128       2         2             3     1/2
 MAXSS MINSS       r128,r128       1                       3     1/1
 MAXSS MINSS       r128,m32        1         1             3     1/1
 CMPccPS           r128,r128       2                       3     1/2
 CMPccPS           r128,m128       2         2             3     1/2
 CMPccSS           r128,r128       1         1             3     1/1

 CMPccSS           r128,m32        1         1             3     1/1
 COMISS UCOMISS    r128,r128       1                       1     1/1
 COMISS UCOMISS    r128,m32        1         1             1     1/1
 SQRTPS            r128,r128  2                            56    1/56
 SQRTPS            r128,m128  2              2             57    1/56
 SQRTSS            r128,r128  2                            30    1/28
 SQRTSS            r128,m32   2              1             31    1/28

 RSQRTPS           r128,r128  2                            2     1/2
 RSQRTPS           r128,m128  2              2             3     1/2
 RSQRTSS           r128,r128  1                            1     1/1
 RSQRTSS           r128,m32   1              1             2     1/1
 RCPPS             r128,r128  2                            2     1/2
 RCPPS             r128,m128  2              2             3     1/2
 RCPSS             r128,r128  1                            1     1/1

 RCPSS             r128,m32   1              1             2     1/1
 SHUFPS            r128,r128,i     2   1                   2     1/2
 SHUFPS            r128,m128,i     2         2             2     1/2
 UNPCKHPS UNPCKLPS r128,r128       2   2                   3     1/2
 UNPCKHPS UNPCKLPS r128,m128       2         2             3     1/2
 LDMXCSR           m32        11                           15    1/15
 STMXCSR           m32        6                            7     1/9

 FXSAVE            m4096      116                          62
 FXRSTOR           m4096      89                           68
© Агнер Фог, пер. Aquila

0 792
archive

archive
New Member

Регистрация:
27 фев 2017
Публикаций:
532