Apple Microarchitecture Research by Dougall Johnson

M1/A14 P-core (Firestorm): Overview | Base Instructions | SIMD and FP Instructions
M1/A14 E-core (Icestorm):  Overview | Base Instructions | SIMD and FP Instructions

AESD

Test 1: uops

Code:

  aesd v0.16b, v1.16b
  movi v0.16b, 1
  movi v1.16b, 2

(no loop instructions)

1000 unrolls and 1 iteration

Retires: 1.000

Issues: 1.000

Integer unit issues: 0.001

Load/store unit issues: 0.000

SIMD/FP unit issues: 1.000

retire uop (01)cycle (02)schedule uop (52)schedule int uop (53)schedule simd uop (54)dispatch simd uop (57)ldst uops in schedulers (5b)dispatch uop (78)map simd uop (7e)map simd uop inputs (81)? int output thing (e9)? simd retires (ee)
1004303310011100010007590510001000200011000
1004303310011100010007590510001000200011000
1004303310011100010007590510001000200011000
1004303310011100010007590510001000200011000
1004303310011100010007590510001000200011000
1004303310011100010007590510001000200011000
1004303310011100010007590510001000200011000
1004303310011100010007590510001000200011000
1004303310011100010007590510001000200011000
1004303310011100010007590510001000200011000

Test 2: Latency 1->1

Code:

  aesd v0.16b, v1.16b
  movi v0.16b, 1
  movi v1.16b, 2

(fused SUBS/B.cc loop)

100 unrolls and 100 iterations

Result (median cycles for code): 3.0033

retire uop (01)cycle (02)schedule uop (52)schedule int uop (53)schedule simd uop (54)dispatch int uop (56)dispatch simd uop (57)int uops in schedulers (59)ldst uops in schedulers (5b)dispatch uop (78)map int uop (7c)map simd uop (7e)map int uop inputs (7f)map simd uop inputs (81)? int output thing (e9)? simd retires (ee)? int retires (ef)
1020430033101011011000010010000300768905101002001000320020006110000100
1020430033101011011000010010000300768905101002001000320020006110000100
1020430033101011011000010010000300768905101002001000320020006110000100
1020430033101011011000010010000300768905101002001000320220082110000100
1020430033101011011000010010000300768905101002001000320020006110000100
1020430033101011011000010010000300768905101002001000320020006110000100
1020430033101011011000010010000300768905101002001000320020006110000100
1020430033101011011000010010000300768905101002001000320020006110000100
1020430033101011011000010010000300768905101002001000320020006110000100
1020430033101011011000010010000300768905101002001000320020006110000100

1000 unrolls and 10 iterations

Result (median cycles for code): 3.0033

retire uop (01)cycle (02)schedule uop (52)schedule int uop (53)schedule simd uop (54)dispatch int uop (56)dispatch simd uop (57)int uops in schedulers (59)ldst uops in schedulers (5b)dispatch uop (78)map int uop (7c)map simd uop (7e)map int uop inputs (7f)map simd uop inputs (81)? int output thing (e9)? simd retires (ee)? int retires (ef)
1002430033100111110000101000030768905100102010003202000011000010
1002430033100111110000101000030768905100102010000202000011000010
1002430033100111110000101000030768905100102010000202000011000010
1002430033100111110000101000030768905100102010000202000011000010
1002430033100111110000101000030768905100102010000202000011000010
1002430033100111110000101000030768905100102010000202000011000010
1002430033100111110000101000030768905100102010000202000011000010
1002430033100111110000101000030768905100102010000202008611000010
1002430033100111110000101000030768905100102010000202000011000010
1002430033100111110000101000030768905100102010000202000011000010

Test 3: Latency 1->2

Code:

  aesd v0.16b, v0.16b
  movi v0.16b, 1

(fused SUBS/B.cc loop)

100 unrolls and 100 iterations

Result (median cycles for code): 3.0033

retire uop (01)cycle (02)schedule uop (52)schedule int uop (53)schedule simd uop (54)dispatch int uop (56)dispatch simd uop (57)int uops in schedulers (59)ldst uops in schedulers (5b)dispatch uop (78)map int uop (7c)map simd uop (7e)map int uop inputs (7f)map simd uop inputs (81)? int output thing (e9)? simd retires (ee)? int retires (ef)
1020430033101011011000010010000300768905101002001000320020006110000100
1020430033101011011000010010000300768905101002001000320020006110000100
1020430033101011011000010010000300768905101002001000320020006110000100
1020430033101011011000010010000300768905101002001000320020006110000100
1020430033101011011000010010000300768905101002001000320020006110000100
1020430033101011011000010010000300769247101312001004320020006110000100
1020430033101011011000010010000300768905101002001000320020006110000100
1020430033101011011000010010000300768905101002001000320020006110000100
1020430033101011011000010010000300768905101002001000320020006110000100
1020430033101011011000010010000300768905101002001000320020006110000100

1000 unrolls and 10 iterations

Result (median cycles for code): 3.0033

retire uop (01)cycle (02)schedule uop (52)schedule int uop (53)schedule simd uop (54)dispatch int uop (56)dispatch simd uop (57)dispatch ldst uop (58)int uops in schedulers (59)simd uops in schedulers (5a)ldst uops in schedulers (5b)dispatch uop (78)map int uop (7c)map ldst uop (7d)map simd uop (7e)map int uop inputs (7f)map simd uop inputs (81)? int output thing (e9)? simd retires (ee)? int retires (ef)
1002430033100111110000101000003007689051001020010003202000011000010
1002430033100111110000101000003007689051001020010000202000011000010
1002430033100111110000101000003007689051001020010000202000011000010
1002430033100111110000101000003007689051001020010000202000011000010
1002430033100111110000101000003007689051001020010000202000011000010
1002430033100111110000101000003007689051001020010000222008221000010
1002430033100111110000101000003007689051001020010000202000011000010
1002430033100111110000101000003007689051001020010000202000011000010
1002430033100111110000101000003007689051001020010000202000011000010
1002430033100111110000101000003007689051001020010000202000011000010

Test 4: throughput

Count: 8

Code:

  movi v0.16b, 0
  aesd v0.16b, v8.16b
  movi v1.16b, 0
  aesd v1.16b, v8.16b
  movi v2.16b, 0
  aesd v2.16b, v8.16b
  movi v3.16b, 0
  aesd v3.16b, v8.16b
  movi v4.16b, 0
  aesd v4.16b, v8.16b
  movi v5.16b, 0
  aesd v5.16b, v8.16b
  movi v6.16b, 0
  aesd v6.16b, v8.16b
  movi v7.16b, 0
  aesd v7.16b, v8.16b
  movi v8.16b, 9

(fused SUBS/B.cc loop)

100 unrolls and 100 iterations

Result (median cycles for code divided by count): 0.5011

retire uop (01)cycle (02)schedule uop (52)schedule int uop (53)schedule simd uop (54)dispatch int uop (56)dispatch simd uop (57)int uops in schedulers (59)ldst uops in schedulers (5b)dispatch uop (78)map int uop (7c)map simd uop (7e)map int uop inputs (7f)map simd uop inputs (81)? int output thing (e9)? simd retires (ee)? int retires (ef)
1602044053980110101800091008001330032005680113200800132001600261160000100
1602044011580109101800081008001230032005680113200800132001600241160000100
1602044009180110101800091008001330032005680113200800132001600261160000100
1602044009180110101800091008001330032005680113200800132001600261160000100
1602044009180110101800091008001330032005680113200800132001600261160000100
1602044009180110101800091008001330032018480145200800452001600261160000100
1602044009180110101800091008001330032005680113200800132001600901160000100
1602044011280109101800081008001230032005680113200800132001600261160000100
1602044009180110101800091008001330032005680113200800132001600901160000100
1602044009180110101800091008001330032005680113200800132001600261160000100

1000 unrolls and 10 iterations

Result (median cycles for code divided by count): 0.5057

retire uop (01)cycle (02)schedule uop (52)schedule int uop (53)schedule simd uop (54)dispatch int uop (56)dispatch simd uop (57)int uops in schedulers (59)ldst uops in schedulers (5b)dispatch uop (78)map int uop (7c)map simd uop (7e)map int uop inputs (7f)map simd uop inputs (81)? int output thing (e9)? simd retires (ee)? int retires (ef)
1600244398180020118000910800133032005680023208001320160000116000010
1600244127680011118000010800003032000080010208000020160000116000010
1600244038180011118000010800003032000080010208000020160000116000010
1600244045180011118000010800003032000080010208000020160000116000010
1600244044180011118000010800003032000080010208000020160000116000010
1600244046180011118000010800003032000080010208000020160000116000010
1600244045180011118000010800003032000080010208000020160000116000010
1600244045180011118000010800003032000080010208000020160000116000010
1600244045180011118000010800003032000080010208000020160092116000010
1600244053080011118000010800003032000080010208000020160000116000010

Test 5: throughput

Count: 16

Code:

  aesd v0.16b, v16.16b
  aesd v1.16b, v16.16b
  aesd v2.16b, v16.16b
  aesd v3.16b, v16.16b
  aesd v4.16b, v16.16b
  aesd v5.16b, v16.16b
  aesd v6.16b, v16.16b
  aesd v7.16b, v16.16b
  aesd v8.16b, v16.16b
  aesd v9.16b, v16.16b
  aesd v10.16b, v16.16b
  aesd v11.16b, v16.16b
  aesd v12.16b, v16.16b
  aesd v13.16b, v16.16b
  aesd v14.16b, v16.16b
  aesd v15.16b, v16.16b
  movi v16.16b, 17

(fused SUBS/B.cc loop)

100 unrolls and 100 iterations

Result (median cycles for code divided by count): 0.5002

retire uop (01)cycle (02)schedule uop (52)schedule int uop (53)schedule simd uop (54)dispatch int uop (56)dispatch simd uop (57)int uops in schedulers (59)ldst uops in schedulers (5b)dispatch uop (78)map int uop (7c)map simd uop (7e)map int uop inputs (7f)map simd uop inputs (81)? int output thing (e9)? simd retires (ee)? int retires (ef)
160204801091601071011600061001600103006402841601702001600732003200301160000100
160204800401601071011600061001600103006400441601102001600152003201521160000100
160204800401601071011600061001600103006400441601102001600152003200301160000100
160204800401601071011600061001600103006400441601102001600152003201521160000100
160204800401601071011600061001600103006400441601102001600152003200301160000100
160204800401601071011600061001600103006400441601102001600152003201461160000100
160204800401601071011600061001600103006400441601102001600152003200301160000100
160204800401601071011600061001600103006402881601712001600762003200301160000100
160205800881601681011600671001600713006400441601102001600152003200301160000100
160204800401601071011600061001600103006400441601102001600152003200301160000100

1000 unrolls and 10 iterations

Result (median cycles for code divided by count): 0.5002

retire uop (01)cycle (02)schedule uop (52)schedule int uop (53)schedule simd uop (54)dispatch int uop (56)dispatch simd uop (57)dispatch ldst uop (58)int uops in schedulers (59)simd uops in schedulers (5a)ldst uops in schedulers (5b)dispatch uop (78)map int uop (7c)map ldst uop (7d)map simd uop (7e)map int uop inputs (7f)map simd uop inputs (81)? int output thing (e9)? simd retires (ee)? int retires (ef)
160024803911600171116000610160010030064000016001020016000020320000116000010
160024800381600111116000010160000030064000016001020016000020320000116000010
160024800351600111116000010160000030064000016001020016000020320000116000010
160024800351600111116000010160000030064000016001020016000020320122116000010
160024800391600111116000010160000030064000016001020016000020320000116000010
160024800351600111116000010160000030064000016001020016000020320000116000010
160024800351600111116000010160000030064000016001020016000020320000116000010
160024800351600111116000010160000030064000016001020016000020320000116000010
160024800351600111116000010160000030064000016001020016000020320000116000010
160024800351600111116000010160000030064000016001020016000020320000116000010