Apple M1 Microarchitecture Research by Dougall Johnson

Firestorm: Overview | Base Instructions | SIMD and FP Instructions
Icestorm:  Overview | Base Instructions | SIMD and FP Instructions

FMIN (vector, 4H)

Test 1: uops

Code:

  fmin v0.4h, v0.4h, v1.4h
  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.000

Load/store unit issues: 0.000

SIMD/FP unit issues: 1.000

retire (01)cycle (02)031e3f4e51inst issue (52)~issue fp/simd (54)~dispatch fp/simd (57)huge thing fp/simd (5b)60696d6edispatch stall (70)scheduler rewind (75)scheduler stall (76)~dispatch op (78)~map op fp/simd (7e)~map lookup fp/simd (81)8283pipeline redirect (84)85inst all (8c)inst neon or fp (9a)a8cfd5d6ddinst fetch restart (de)e0? fp/simd (ee)f5f6f7f8fd
100420371615611687251000100010002646801201820372037157231895100010002000203720371110011000073116111787100020382038203820382038
10042037150611687251000100010002646801201820372037157231895100010002000203720371110011000073116111787100020382038203820382038
10042037150841687251000100010002646801201820372037157231895100010002000203720371110011000073116111787100020382038203820382038
1004203716129611687251000100010002646801201820372037157231895100010002000203720371110011000173116111787100020382038203820382038
10042037150611687251000100010002646801201820372037157231895100010002000203720371110011000073116111787100020382038203820382038
10042037150611687251000100010002646801201820372037157231895100010002000203720371110011000073116111787100020382038203820382038
10042037150611687251000100010002646801201820372037157231895100010002000203720371110011000073116111787100020382038203820382038
100420371501701687251000100010002646801201820372037157231895100010002000203720371110011000073116111787100020382038203820382038
10042037150611687251000100010002646801201820372037157231895100010002000203720371110011000073116111787100020382038203820382038
10042037150611687251000100010002646801201820372037157231895100010002000203720371110011000073116111787100020382038203820382038

Test 2: Latency 1->2

Code:

  fmin v0.4h, v0.4h, v1.4h
  movi v0.16b, 1
  movi v1.16b, 2

(fused SUBS/B.cc loop)

100 unrolls and 100 iterations

Result (median cycles for code): 2.0037

retire (01)cycle (02)031e3f4e51inst issue (52)~issue int (53)~issue fp/simd (54)~dispatch int (56)~dispatch fp/simd (57)huge thing int (59)huge thing fp/simd (5b)60696d6edispatch stall (70)scheduler rewind (75)scheduler stall (76)~dispatch op (78)~map op int (7c)~map op fp/simd (7e)~map lookup int (7f)~map lookup fp/simd (81)8283pipeline redirect (84)85inst all (8c)inst branch (8d)inst branch taken (90)inst b.cc (94)inst integer (97)inst neon or fp (9a)9fa6a8accfd5d6ddinst fetch restart (de)e0? fp/simd (ee)gpr retires (ef)f5f6f7f8fd
1020420037150061196872510100100100001001000050028476801200182003720037184223187451010020010000200200002003720037111020110099100100100001000007101161119791100001002003820038200382003820038
1020420037150061196872510100100100001001000050028476800200182003720037184223187451010020010000200200002003720037111020110099100100100001000107101161119791100001002003820038200382003820038
1020420037150061196872510100100100001001000050028476800200182003720037184223187451010020010000200200002003720037111020110099100100100001000707101161119791100001002003820038200382003820038
1020420037150061196872510100100100001001000050028476801200182003720037184223187451010020010000200200002003720037111020110099100100100001000237101161119791100001002003820038200382003820038
1020420037150061196872510100100100001001000050028476800200182003720037184223187451010020010000200200002003720037111020110099100100100001000007101161119791100001002003820038200382003820038
1020420037150061196872510100100100001001000050028476801200182003720037184223187451010020010000200200002003720037111020110099100100100001000137101161119791100001002003820038200382003820038
1020420037150061196872510100100100001001000050028476801200182003720037184223187451010020010000200200002003720037111020110099100100100001000007101161119791100001002003820038200382003820038
1020420037150061196872510100100100001001000050028476801200182003720037184223187451010020010000200200002003720037111020110099100100100001000107101161119791100001002003820038200382003820038
1020420037150061196872510100100100001001000050028476801200182003720037184223187451010020010000200200002003720037111020110099100100100001000307101161119791100001002003820038200382003820038
10204200371500726196872510100100100001001000050028476801200182003720037184223187451010020010000200200002003720037111020110099100100100001000107101161119791100001002003820038200382003820038

1000 unrolls and 10 iterations

Result (median cycles for code): 2.0037

retire (01)cycle (02)0318191e1f3f4e51inst issue (52)~issue int (53)~issue fp/simd (54)~dispatch int (56)~dispatch fp/simd (57)huge thing int (59)huge thing fp/simd (5b)696d6edispatch stall (70)scheduler rewind (75)scheduler stall (76)~dispatch op (78)~map op int (7c)~map op fp/simd (7e)~map lookup int (7f)~map lookup fp/simd (81)8283pipeline redirect (84)85inst all (8c)inst branch (8d)inst branch taken (90)inst b.cc (94)inst integer (97)inst neon or fp (9a)9fa1a7a8accfd5d6ddinst fetch restart (de)e0? fp/simd (ee)gpr retires (ef)f5f6f7f8fd
1002420037150000016819687251001010100001010000502847680200182003720037184443187671001020100002020000200372003711100211091010100001000033640516441978510000102003820038200382003820038
10024200371500000611968725100101010000101000050284768020018200372003718444318767100102010000202000020037200371110021109101010000100033640316331978510000102003820038200382003820038
10024200371500000611968725100101010000101000050284768020018200372003718444318767100102010000202000020037200371110021109101010000100000640316331978510000102003820038200382003820038
100242003715000007261968725100101010000101000050284768020018200372003718444318767100102010000202000020037200371110021109101010000100050640316361978510000102003820038200382003820038
10024200371500000611968725100101010000101000050284768020018200372003718444318767100102010000202000020037200371110021109101010000100060640316331978510000102003820038200382003820038
10024200371500000611968725100101010000101000050284768020018200372003718444318767100102010000202000020037200371110021109101010000100080640316331978510000102003820038200382003820038
10024200371500000611968725100101010000101000050284768020018200372003718444318767100102010000202000020037200371110021109101010000100003640316331978510000102003820038200382003820038
10024200371500000611968725100101010000101000050284768020018200372003718444318767100102010000202000020037200371110021109101010000100050640316331978510000102003820038200382003820038
10024200371500000611968725100101010000101000050284768020018200372003718444318767100102010000202000020037200371110021109101010000100050640316331978510000102003820038200382003820038
10024200371500000611968725100101010000101000050284768020018200372003718444318767100102010000202000020037200371110021109101010000100080640316331978510000102003820038200382003820038

Test 3: Latency 1->3

Code:

  fmin v0.4h, v1.4h, v0.4h
  movi v0.16b, 1
  movi v1.16b, 2

(fused SUBS/B.cc loop)

100 unrolls and 100 iterations

Result (median cycles for code): 2.0037

retire (01)cycle (02)0318191e1f3f4e51inst issue (52)~issue int (53)~issue fp/simd (54)~dispatch int (56)~dispatch fp/simd (57)huge thing int (59)huge thing fp/simd (5b)60696d6edispatch stall (70)scheduler rewind (75)scheduler stall (76)~dispatch op (78)~map op int (7c)~map op fp/simd (7e)~map lookup int (7f)~map lookup fp/simd (81)8283pipeline redirect (84)85inst all (8c)inst branch (8d)inst branch taken (90)inst b.cc (94)inst integer (97)inst neon or fp (9a)9fa1a6a8a9accfd5d6ddinst fetch restart (de)e0? fp/simd (ee)gpr retires (ef)f5f6f7f8fd
1020420037150000886119687251010010010000100100005002847680020018200372003718422318745101002001000020020000200372003711102011009910010010000100002007101161119791100001002003820038200382003820038
102042003715000006119687251010010010000100100005002847680020018200372003718422318745101002001000020020000200372003711102011009910010010000100001007101161119791100001002003820038200382003820038
102042003715000006119687251010010010000100100005002847680020018200372003718422318745101002001000020020000200372003711102011009910010010000100000007101161119791100001002003820038200382003820038
102042003715000006119687251010010010000100100005002847680020018200372003718422318745101002001000020020000200372003711102011009910010010000100001007101161119791100001002003820038200382003820038
102042003715000006119687251010010010000100100005002847680020018200372003718422318745101002001000020020000200372003711102011009910010010000100000007101161119791100001002003820038200382003820038
1020420037150000021019687251010010010000100100005002847680020018200372003718422318745101002001000020020000200372003711102011009910010010000100000007101161119791100001002003820038200382003820038
102042003715000006119687251010010010000100100005002847680020018200372003718422318745101002001000020020000200372003711102011009910010010000100001019667101161119791100001002003820038200382003820038
102042003715000006119687251010010010000100100005002847680020018200372003718422318745101002001000020020000200372003711102011009910010010000100001019887101161119791100001002003820038200382003820038
102042003715000006119687251010010010000100100005002847680020018200372003718422318745101002001000020020000200372003711102011009910010010000100004037101161119791100001002003820038200382003820038
102042003715000006119687251010010010000100100005002847680020018200372003718422318745101002001000020020000200372003711102011009910010010000100000007101161119791100001002003820038200382003820038

1000 unrolls and 10 iterations

Result (median cycles for code): 2.0037

retire (01)cycle (02)03181e3f4e51inst issue (52)~issue int (53)~issue fp/simd (54)~dispatch int (56)~dispatch fp/simd (57)huge thing int (59)huge thing fp/simd (5b)696d6edispatch stall (70)72scheduler rewind (75)scheduler stall (76)~dispatch op (78)~map op int (7c)~map op fp/simd (7e)~map lookup int (7f)~map lookup fp/simd (81)8283pipeline redirect (84)85inst all (8c)inst branch (8d)inst branch taken (90)inst b.cc (94)inst integer (97)inst neon or fp (9a)9fa0a1a8accfd5d6ddinst fetch restart (de)e0? fp/simd (ee)gpr retires (ef)f5f6f7f8fd
10024200371500061196872510010101000010100005028476802001820037200371844403187671001020100002020000200372003711100211091010100001000140640216221978510000102003820038200382003820038
1002420037150046119687251001010100001010000502847680200182003720037184440318767100102010000202000020037200371110021109101010000100000640216221978510000102003820038200382003820038
1002420037150006119687251001010100001010000502847680200182003720037184440318767100102010000202000020037200371110021109101010000100000640216221978510000102003820038200382003820038
1002420037150006119687251001010100001010000502847680200182003720037184440318767100102010000202000020037200371110021109101010000102000640216221978510000102003820038200382003820038
1002420037151006119687251001010100001010000502847680200182003720037184440318767100102010000202000020037200371110021109101010000100000640216221978510000102003820038200382003820038
10024200371500010319687251001010100001010000502847680200182003720037184440318767100102010000202000020037200371110021109101010000100000640216221978510000102003820038200382003820038
1002420037150006119687251001010100001010000502847680200182003720037184440318767100102010000202000020037200371110021109101010000100000640216221978510000102003820038200382003820038
1002420037150066119687251001010100001010000502847680200182003720037184440318767100102010000202000020037200371110021109101010000100000640216221978510000102003820038200382003820038
1002420037150006119687251001010100001010000502847680200182003720037184440318767100102010000202000020037200371110021109101010000100000640216221978510000102003820038200382003820038
1002420037150006119687251001010100001010000502847680200182003720037184440318767100102010000202000020037200371110021109101010000100000640216221978510000102003820038200382003820038

Test 4: throughput

Count: 8

Code:

  fmin v0.4h, v8.4h, v9.4h
  fmin v1.4h, v8.4h, v9.4h
  fmin v2.4h, v8.4h, v9.4h
  fmin v3.4h, v8.4h, v9.4h
  fmin v4.4h, v8.4h, v9.4h
  fmin v5.4h, v8.4h, v9.4h
  fmin v6.4h, v8.4h, v9.4h
  fmin v7.4h, v8.4h, v9.4h
  movi v8.16b, 9
  movi v9.16b, 10

(fused SUBS/B.cc loop)

100 unrolls and 100 iterations

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

retire (01)cycle (02)030708090b18191e1f3a3f51inst issue (52)~issue int (53)~issue fp/simd (54)~dispatch int (56)~dispatch fp/simd (57)huge thing int (59)huge thing fp/simd (5b)60696d6edispatch stall (70)scheduler rewind (75)scheduler stall (76)~dispatch op (78)~map op int (7c)~map op fp/simd (7e)~map lookup int (7f)~map lookup fp/simd (81)8283pipeline redirect (84)85inst all (8c)inst branch (8d)inst branch taken (90)inst b.cc (94)inst integer (97)inst neon or fp (9a)9fa6a8a9acc2c5cdcfd5d6ddinst fetch restart (de)e0? int output thing (e9)? fp/simd (ee)gpr retires (ef)f5f6f7f8fd
802042006015000000000040258010010080000100800005006400001200192003820038997339996801002008000020016000020038200381180201100991001008000010002100000511041622200350800001002003920039200392003920039
80204200381500001000004025801001008000010080000500640000120019200382003899733999680100200800002001600002003820038118020110099100100800001000003000511021622200350800001002003920039200392003920039
80204200381500000000004025801001008000010080000500640000120019200382003899733999680100200800002001600002003820038118020110099100100800001000000000511021622200350800001002003920039200392003920039
80204200381500000000004025801001008000010080000500640000120019201462003899733999680100200800002001600002003820038118020110099100100800001000000000511021622200350800001002003920039200392003920039
80204200381500000000004025801001008000010080000500640000120019200382003899733999680100200800002001600002003820038118020110099100100800001000000000511021622200350800001002003920039200392003920039
802042003815000000000040258010010080000100800005006400001200192003820038997339996801002008000020016000020038200381180201100991001008000010000087000511021622200350800001002003920039200392003920039
80204200381500000000004025801001008000010080000500640000120019200382003899733999680100200800002001600002003820038118020110099100100800001000000000511021622200350800001002003920039200392003920039
80204200381500000000004025801001008000010080000500640000120019200382003899733999680100200800002001600002003820038118020110099100100800001000000000511021622200350800001002003920039200392003920039
802042003815000000000051525801001008000010080000500640000120019200382003899733999680100200800002001600002003820038118020110099100100800001000000000511021622200350800001002003920039200392003920039
80204200381500000000004025801001008000010080000500640000120019200382003899733999680100200800002001600002003820038118020110099100100800001000000000511021622200350800001002003920039200392003920039

1000 unrolls and 10 iterations

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

retire (01)cycle (02)030408090a191e3a3f51inst issue (52)~issue int (53)~issue fp/simd (54)~dispatch int (56)~dispatch fp/simd (57)huge thing int (59)huge thing fp/simd (5b)60696b6d6edispatch stall (70)scheduler rewind (75)scheduler stall (76)~dispatch op (78)~map op int (7c)~map op fp/simd (7e)~map lookup int (7f)~map lookup fp/simd (81)8283pipeline redirect (84)85inst all (8c)inst branch (8d)inst branch taken (90)inst b.cc (94)inst integer (97)inst neon or fp (9a)9fa0a6a8a9accfitlb miss (d4)d5d6ddinst fetch restart (de)e0? int output thing (e9)? fp/simd (ee)gpr retires (ef)f5f6f7f8fd
80024200391501000000392580010108000010800005064000002001902003820038999631001880010208000020160000200382003811800211091010800001000000502001816171420035080000102003920039200392003920039
8002420038150000000039258001010800001080000506400000200190200382003899963100188001020800002016000020038200381180021109101080000100000050200151618920035080000102003920039200392003920039
80024200381500000000392580010108000010800005064000002001902003820038999631001880010208000020160000200382004111800211091010800001000009502001916191920035080000102003920039200392003920039
80024200381500000000392580010108000010800005064000002001902003820038999631001880010208000020160000200382003811800211091010800001000000502001816151820035080000102003920039200392003920039
8002420038150000000039258001010800001080000506400000200190200382003899967100448001020801952016039620103200381180021109101080000102202535502111730152020083280000102015020102201162010520106
800242010315111111001832580010108000010800005064000002035402003820140999631001880010208000020160000200382003811800211091010800001000103502112030181620035080000102003920039200392003920039
80024200381501010000882580010108000010800005064000002001902003820038999631001880010208000020160000200382003811800211091010800001000000502111830181820035080000102003920039200392003920039
80024200381501010000882580010108000010800005064000002001902003820038999631001880010208000020160000200382003811800211091010800001000000502111830181520035080000102003920039200392003920039
80024200381501010000882580010108000010800005064000002001902003820038999631001880010208000020160000200382003811800211091010800001000000502111530181820035080000102003920039200392003920039
8002420038150101000088258001010800001080000506400000200193200382003899963100188001020800002016000020038200381180021109101080000100000050211194617920035080000102003920039200392003920039