News:

Masm32 SDK description, downloads and other helpful links
Message to All Guests
NB: Posting URL's See here: Posted URL Change

Main Menu

Instruction Timing

Started by nidud, November 23, 2021, 01:57:43 AM

Previous topic - Next topic

nidud

deleted

TimoVJL

#1
Results of AMD Ryzen5 3400G

WinMerge is good for comparing result files.

Hopefully we see more results.
May the source be with you

nidud

#2
deleted

hutch--

Something I have learnt long ago is that different hardware gives you wide ranges or variation on the same code. I once had an AMD CPU box that had some really fast instructions but equally some really slow ones back then compared with early Intel CPUs of the sme era.

LiaoMi

Hi Nidud,

11th Gen Intel(R) Core(TM) i7-11800H @ 2.30GHz (AVX512)
------------------------------------------------
Instr.     Operands         Bytes  Clocks
------------------------------------------------
adc      reg64,reg64          3       4
adc      reg64,mem64          6       3
adc      reg64,imm8           4       3
adc      mem64,reg64          6       6
adc      mem64,imm8           7       8
add      reg64,reg64          3       1
add      reg64,mem64          6       2
add      reg64,imm8           4       1
add      mem64,reg64          6       4
add      mem64,imm8           7       4
and      reg64,reg64          3       1
and      reg64,mem64          6       2
and      reg64,imm8           4       1
and      mem64,reg64          6       4
and      mem64,imm8           7       4
bsf      reg64,reg64          4       5
bsf      reg64,mem64          7       5
bsr      reg64,reg64          4       5
bsr      reg64,mem64          7       5
bswap    reg32                2       2
bswap    reg64                3       5
bt       reg64,reg64          4       2
bt       reg64,imm8           5       2
bt       mem16,reg16          6      22
bt       mem16,imm8           6       2
btc      reg64,reg64          4       2
btc      reg64,imm8           5       2
btc      mem16,imm8           6       3
btr      reg64,reg64          4       2
btr      reg64,imm8           5       2
btr      mem16,imm8           6       3
bts      reg64,reg64          4       2
bts      reg64,imm8           5       2
bts      mem16,imm8           6       3
call     reg64                2      78
cbw                           2       4
cdq                           1       5
clc                           1       1
cld                           1      18
cmp      reg64,reg64          3       1
cmp      reg64,imm8           4       1
cmp      mem64,reg64          6       2
cmp      mem64,imm8           7       2
cmpsb                         1      18
cmpsw                         2      18
cmpsd                         1      18
cmpxchg  reg64,reg64          4      22
cmpxchg  mem64,reg64          7      18
cwd                           2       5
cwde                          1       5
dec      reg8                 2       1
dec      reg64                3       1
dec      mem8                 2       5
dec      mem64                6       5
div      reg64                8      55
enter    imm8,imm8            4      36
idiv     reg8                 5      64
idiv     reg16                8      45
idiv     reg32                7      39
imul     reg8                 2      13
imul     reg16                3      18
imul     reg32                2      19
imul     reg64                3      14
imul     mem8                 2      13
imul     mem16                4      18
imul     mem32                4      19
imul     mem64                6      13
imul     reg16,reg16          4       5
imul     reg32,reg32          3       5
imul     reg64,reg64          4       5
imul     reg16,reg16,imm8     4       5
imul     reg32,reg32,imm8     3       4
imul     reg64,reg64,imm8     4       5
inc      reg8                 2       1
inc      reg64                3       1
inc      mem8                 2       5
inc      mem64                6       5
lahf                          1      13
lar      reg16,reg16          4     562
lar      reg32,reg32          3     559
lea      reg64,mem64          6       1
lodsb                         1       5
lodsw                         2       5
lodsd                         1       5
mov      reg64,reg64          3       1
mov      reg64,mem64          6       2
mov      reg64,imm8           7       1
mov      mem64,reg64          6       2
mov      mem64,imm8          10       2
movsb                         1      18
movsw                         2      18
movsd                         1      18
movsx    reg32,reg8           3       1
movsx    reg32,mem8           4       2
movsx    reg64,reg16          4       1
movsx    reg64,mem16          5       2
movzx    reg32,reg8           3       1
movzx    reg32,mem8           4       2
movzx    reg64,reg16          4       1
movzx    reg64,mem16          5       2
mul      reg8                 2      13
mul      reg16                3      18
mul      reg32                2      19
mul      reg64                3      14
mul      mem8                 2      13
mul      mem16                4      18
mul      mem32                4      19
mul      mem64                6      13
neg      reg8                 2       1
neg      reg64                3       1
neg      mem8                 2       5
neg      mem64                6       4
nop                           1       1
not      reg8                 2       1
not      reg64                3       1
not      mem32                4       5
not      mem64                6       5
or       reg8,reg8            2       1
or       reg64,reg64          3       1
or       reg64,mem64          6       2
or       reg64,imm8           4       1
or       mem8,reg8            3       5
or       mem64,reg64          6       4
or       mem64,imm8           7       4
pop      reg64                1       2
popfq                         4      96
push     reg64                1       2
push     mem64                2       5
pushfq                        1       5
rcl      reg8,imm8            2       7
rcl      reg64,imm8           3       7
rcl      reg8,reg8            2      27
rcl      reg64,reg8           3      27
rcl      mem8,imm8            2      10
rcl      mem64,imm8           6      10
rcr      reg8,imm8            2       7
rcr      reg64,imm8           3       7
rcr      reg8,reg8            2      33
rcr      reg64,reg8           3      23
rcr      mem8,imm8            2      10
rcr      mem64,imm8           6      10
rol      reg8,imm8            2       5
rol      reg64,imm8           3       5
rol      reg8,reg8            2       5
rol      reg64,reg8           3       5
rol      mem8,imm8            2       5
rol      mem64,imm8           6       5
ror      reg8,imm8            2       5
ror      reg64,imm8           3       5
ror      reg8,reg8            2       5
ror      reg64,reg8           3       5
ror      mem8,imm8            2       5
ror      mem64,imm8           6       5
shl      reg8,imm8            2       2
shl      reg64,imm8           3       2
shl      reg8,reg8            2       5
shl      reg64,reg8           3       5
shl      mem8,imm8            2       5
shl      mem64,imm8           6       5
sar      reg8,imm8            2       2
sar      reg64,imm8           3       2
sar      reg8,reg8            2       5
sar      reg64,reg8           3       5
sar      mem8,imm8            2       5
sar      mem64,imm8           6       6
sbb      reg8,reg8            2       4
sbb      reg64,reg64          3       4
sbb      reg8,imm8            3       3
sbb      reg64,imm8           4       3
sbb      mem8,reg8            3       6
sbb      mem64,reg64          6       6
sbb      mem8,imm8            3       8
sbb      mem64,imm8           7       8
scasb                         1       5
scasw                         2       5
scasd                         1       5
setae    reg8                 3       2
setae    mem8                 3       5
setb     reg8                 3       2
setb     mem8                 3       5
setg     reg8                 3       2
setg     mem8                 3       5
setng    reg8                 3       2
setng    mem8                 3       5
shr      reg8,imm8            2       2
shr      reg64,imm8           3       2
shr      reg8,reg8            2       5
shr      reg64,reg8           3       5
shr      mem8,imm8            2       5
shr      mem64,imm8           6       4
shld     reg16,reg16,imm8     5       5
shld     reg32,reg32,imm8     4       5
shld     reg64,reg64,imm8     5       5
shld     mem16,reg16,imm8     7       5
shld     mem64,reg64,imm8     8       5
shrd     reg16,reg16,imm8     5       5
shrd     reg32,reg32,imm8     4       5
shrd     reg64,reg64,imm8     5       5
shrd     mem16,reg16,imm8     7       5
shrd     mem64,reg64,imm8     8       5
smsw     reg32                3    3108
smsw     reg64                4    4187
stc                           1       1
std                           1      24
stosb                         1       5
stosw                         2       5
stosd                         1       5
str      reg16                4    3049
str      reg32                3    3934
sub      reg8,reg8            2       1
sub      reg64,reg64          3       1
sub      reg64,imm8           4       1
sub      reg64,mem64          6       2
sub      mem64,imm8           7       4
sub      mem64,reg64          6       4
test     reg8,reg8            2       1
test     reg64,reg64          3       1
test     reg64,imm8           6       1
test     reg64,mem64          6       2
test     mem64,imm8          10       2
test     mem64,reg64          6       2
xchg     reg8,reg8            2       5
xchg     reg64,reg64          2       5
xchg     reg64,mem64          6      83
xchg     mem64,reg64          6      83
xlat                          1      30
xlatb                         1      30
xor      reg8,reg8            2       1
xor      reg64,reg64          3       1
xor      reg64,mem64          6       2
xor      reg64,imm8           4       1
xor      mem8,reg8            3       5
xor      mem64,reg64          6       4
xor      mem64,imm8           7       4

jj2007

\Masm32\Members\Nidud\it>InstructionTiming.exe
Intel(R) Core(TM) i5-2450M CPU @ 2.50GHz (AVX)
------------------------------------------------
Instr.     Operands         Bytes  Clocks
------------------------------------------------
"asmc64" non รจ riconosciuto come comando interno o esterno,
un programma eseguibile o un file batch.
error reading: bin\mov_reg64_reg64.bin


Interesting stuff. I'd like to see the difference between movsx eax, byte ptr [reg32] and the simple mov al, [reg
32]

TimoVJL

Just copy asmc64.exe to InstructionTiming-folder for testing.

Hopefully we see other Ryzen series too.
Is 12th intel available at someone ?

May the source be with you

jj2007

Quote from: TimoVJL on November 23, 2021, 09:50:05 AM
Just copy asmc64.exe to InstructionTiming-folder for testing.

Yep, that worked. Nidud probably uses environment variables instead of a simple \Masm32\bin\Asmc64.exe :cool:

nidud

#8
deleted

TimoVJL

Odd results
Instr. Operands Bytes Intel AMD Intel 11th
smsw reg32 3 34 12 3108
smsw reg64 4 33 13 4187
...
str reg16 4 25 13 3049
str reg32 3 26 12 3934
...

Attached Excel macrotable for collecting results.
May the source be with you

daydreamer

Quote from: hutch-- on November 23, 2021, 07:42:13 AM
Something I have learnt long ago is that different hardware gives you wide ranges or variation on the same code. I once had an AMD CPU box that had some really fast instructions but equally some really slow ones back then compared with early Intel CPUs of the sme era.
Old knowledge like Pentium u and V execution units, also in help files,useful in dos16bit, because you know most people will run dosbox that emulates old Pentium,but I am unsure about Movsd/stosd vs fpu doing REAL10 memory moves is best?
Fpu was faster on amd,while Intel developed newer SSE instructions
So I am interested in timings of .alternative like fild/Fidiv/fistp which let you use eax,edx for other purposes vs
pushes to preserve gp registers,div,pop registers?
Stosq 64 bit version?
The faster register preservation : Movd xmm,eax /Movd eax,xmm vs push eax/pop eax?



my none asm creations
https://masm32.com/board/index.php?topic=6937.msg74303#msg74303
I am an Invoker
"An Invoker is a mage who specializes in the manipulation of raw and elemental energies."
Like SIMD coding

jj2007

Quote from: nidud on November 23, 2021, 12:17:00 PM
Quote from: jj2007 on November 23, 2021, 09:37:59 AM
Interesting stuff. I'd like to see the difference between movsx eax, byte ptr [reg32] and the simple mov al, [reg
32]

The test is 64-bit so that wont work.

Oh, really :tongue:
0000000140001232 | 48:BE 5A1D004001000000   | mov rsi,140001D5A        | 140001D5A:"Test"
000000014000123C | 8A06                     | mov al,[rsi]             |


Quote
Quote from: jj2007 on November 23, 2021, 11:34:58 AM
Yep, that worked. Nidud probably uses environment variables instead of a simple \Masm32\bin\Asmc64.exe :cool:

Asmc64 is not part of Masm32 so that wont work.

1. Putting Asmc64 in \Masm32\bin\Asmc64.exe works perfectly.
2. Copying AsmC64.exe in every project folder works less perfectly.
3. Environment variables are stone age.

jj2007

Quote from: jj2007 on November 23, 2021, 09:37:59 AMI'd like to see the difference between movsx eax, byte ptr [reg32] and the simple mov al, [reg32]

Core i5
1560 ticks for mov al+inc
1201 ticks for movzx+inc
1701 ticks for lodsb
This program was assembled with UAsm64 in 64-bit format

1607 ticks for mov al+inc
1248 ticks for movzx+inc
1778 ticks for lodsb
This program was assembled with UAsm64 in 32-bit format

TimoVJL

AMD Ryzen 5 3400G with Radeon Vega Graphics     (SSE4)719 ticks for mov al+inc
594 ticks for movzx+inc
1515 ticks for lodsb
This program was assembled with UAsm64 in 32-bit format.
719 ticks for mov al+inc
640 ticks for movzx+inc
1500 ticks for lodsb
This program was assembled with UAsm64 in 64-bit format.
May the source be with you

nidud

#14
deleted