Анимация
JavaScript


Главная  Библионтека 

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 [ 80 ] 81 82 83 84 85 86 87 88

FCHS

FCOM(P) FUCOM

FCOM(P) FUCOM

FCOMPP FUCOMPP

FCOMI(P) FUCOMI(P)

FCOMI(P) FUCOMI(P)

FIADD FBUB(R)

FIMUL

FIDIV(R)

FICOM(P)

FTST

FXAM

FPREM

FPREMl

FRNDINT

FSCALE

FXTRACT

FSQRT

e,i)

FSIN FCOS

17-97

27-103

FSINCOS

18-110

29-130

F2XM1

17-48

FYL2X

36-54

FYL2XP1

31-53

98-107

FPTAN

21-102

13-143

FPATAN

25-86

44-143

FNOP

FINCSTP FDECSTP

FFREE

FFREEP

FNCLEX

I ifAasa 6. Оптимизация для процессоров семейства Pentium

Ir.......................................................................................

[jNINn IriNSAVE

FRSTOR

WAIT

Примечания

e) не конвейеризуется;

f) FXCH генерирует 1 микрооперацию, что делается с помощью переименован регистром, порты при этом не задействуются;

g) FMUL использует ту же схему, что и целочисленное умножение. Поэтому комб нированная производительность целочисленных умножений и умножений FPU равна FMUL + 1 IMUL за 3 такта;

h) задержка FDIV зависит от заданной в контрольном слове точности: 64 бита да? задержку в 38 тактов, 53 - в 32 такта, 24 - в 18. Деление на степень от двух занимает тактов. Производительность равна 1/(задержка-1);

i) быстрее для низкой точности.

6.29.3 Инструкции ММХ (Р2 и РЗ)

Таблица 6.12. Время выполнения инструкций ММХ. Процессоры Р2 и I

с

>,

EX X

Ql Ф С О

микрооперации

с «1 1-

О а.

MOVD MOVQ

MOVD MOVQ

r64,m 32/64

MOVD MOVQ

т32/б4,г64

PADD PSUB PCMP

г64,гб4

PADD PSUB

гб4,т64

PMUL PMAOD

г64,гб4

PMUL PMADD

г64,т64

PAND PANDN POR

PXOR

г64,г64

PAND PANDN TOR



PXOR

r64,m64

PSRA PSRL PSLL

r64,r64/i

PSRA PSRL PSLL

r64,m64

PACK PUNPCK

г64,г64

PACK PUNPCK

г64,т64

EMMS

6 к)

MASKMOVQ d)

г64,г64

1/30

PMOVMSKB d)

г32,г64

MOVNTQ d)

т64,г64

1/30-

PSHUFW d)

г64,гб4,1

PSHUFW d)

г64,т64,1

PEXTRW d)

г32,гб4,1

PISRW d)

г64,г32,1

PBRW d)

r64,ml6,i

PAVGB PAVGW d)

г64,г64

PAVGB PAVGW d)

г64,т64

PMINUB PMAXUB PMINSW

PMAXSW d)

г64,г64

PMINUB PMAXUB PMINSW

PMAXSW d)

г64,т64

PMULHUW d)

г64,г64

PMULHUW d)

г64,т64

PSADBW d)

г64,г64

. 1/2

PSAOBW d)

г64,т64

1/2

Примечания

d) только РЗ;

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

Таблица 6.13 «Время выполнения инструкций ХММ. Процесс

микрооперации

с

X IT

га a.

Ql 0) EX

о а. с

MOVAPS

rl28,rl28

MOVAPS

rl28,ml28

MOVAPS

ml28,rl28

MOVUPS

rl28,ml28

MOVUPS

ml28,rl28

MOVSS

rl28,rl28

MOVSS

rl28,m32

MOVSS

m32,rl28

MOVHPS MOVLPS

rl28,m64

MOVHPS MOVLPS

m64,rl28

MOVLHPS MOVHLPS

rl28,rl28

MOVMSKPS

r32,rl28

MOVNTPS

mlZ8,rl28

-1/2

CVTPI2PS

rl28,r64

CVTPI2PS

rl28,m64

CVTPS2PI

CVTTPS2PI

r64,rl28

CVTPS2PI

r64,ml28

CVTSI2SS

rl28,r32

CVTSI2SS

rl28,m32

CVTSS2SI

CVTTSS2SI

r32,rl28

CVTSS2SI

r32,ml28

6.29.4. Инструкции ХММ (РЗ)



AOOPS SUBPS

rl28,rl28

ADDPS SUBPS

rl28,ml28

ADDSS SUBSS

rl28,rl28

ADDSS SUBSS

rl28,m32

MULPS

rl28,rl28

MULPS

rl28,ml28

MULSS

rl28,rl28

MULSS

rl28,m32

DIV PS

rl28,rl28

1/34

DIV PS

rl28,ml28

1/34

DIVSS

rl28,rl28

1/17

DIVSS

rl28,m32

1/17

ANDPS ANDNPS ORPS

XORPS

rl28,rl28

ANDPS ANDNPS ORPS

XORPS

rl28,ml28

MAXPS MINPS

rl28,rl28

MAXPS MINPS

rl28,ml28

MAXSS MINSS

rl28,rl28

MAXSS MINSS

rl28,m32

CMPccPS

rl28,rl28

CMPccPS

rl28,ml28

l/2

CMPccSS

rl28,rl28

1/1

CMPccSS

rl28,m32

1/1

COMISS UCOMISS

rl28,rl28

COMBS UCOMISS

rl28,m32

SORT PS

rl28,rl28

l/56

SORT PS

rl28,ml28

l/56

SQRTSS

rl28,rl28

V28

SQRTSS

rl28,m32

l/28

RSQRTPS

rl28,rl28

RSQRTPS

rl28,ml28

RSQRTSS

rl28,rl28

RSQRTSS

rl28,m32

RCPPS

rl28,rl28

RCPPS

rl28,ml28

RCPSS

rl28,rl28

RCPSS

rl28,m32

SHUFPS

rl28,rl28,i

SHUFPS

rl28,ml28,i

UNPCKHPS UNPCKLPS

rl28,rl28

UNPCKHPS UNPCKLPS

rl28,ml28

LOMXCSR

1/15

STMXCSR

FXSAVE

m4096

FXRSTOR

m4096

630. Тестирование скорости

у микропроцессоров семейства Pentium есть встроенный 64-х битный счетчик, кото можно считывать в EDX:EAX, используя инструкцию RDTSC (read time stamp counter), инструкция очень полезна для того, чтобы точно узнать, сколько тактов занял кусок кода.

Программа ниже полезна для измерения количества тактов, которое занимает i Программа выполняет код 10 раз и сохраняет 10 значений счетчика. Программу мо: использовать как в 16-ти, так и в 32-х битном режиме на Р1 и РММХ.

;************ Тестовая программа для Р1 и РММХ: ********************

ITER EQU 10 ; количество повторений

OVERHEAD EQU 15 ; 15 для PI, 17 для РММХ

RDTSC MACRO ; определяем инструкцию RDTSC

DB 0FH,31H

ENDM

;************ Data segment: *****************i

•DATA ALIGN 4

; сегмент данных



0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 [ 80 ] 81 82 83 84 85 86 87 88