Сравниваем Huawei ExaGear с Apple Rosetta 2 и решением от Microsoft

c62ba3d33adf8d2d140e5420d4f5df83

10 ноября 2020 года произошло во многом эпохальное событие в индустрии микропроцессоров — компания Apple презентовала новый Mac Mini, главной фишкой которого являлся чип собственной разработки Apple M1. Данный процессор, без преувеличения, является знаковым достижением для экосистемы ARM — наконец-то был сделан чип, обошедший конкурентов из Intel в той нише, где архитектура x86 доминировала десятилетия.

Но для нас главным интересом является не сам процессор M1, а технология двоичной трансляции Rosetta 2, разработанная с целью запуска legacy x86 кода, не успевшего переехать на архитектуру ARM. Компания Apple имеет большой опыт в разработке решений по двоичной трансляции и является признанным лидером в данной области. Первая версия двоичного транслятора Rosetta появилась в 2006-ом году, когда помогла компании Apple совершить переход с архитектуры PowerPC на x86. И хотя в этот раз гостевая и целевая платформы отличались от тех, которые были в 2006-ом, очевидно, что весь опыт, накопленный инженерами Apple за эти годы, был учтён и вложен в следующую версию Rosetta 2. Тем интреснее было сравнить решение от Apple с аналогичным продуктом Huawei ExaGear (ведущего свою родословную от Eltechs ExaGear), разрабатываемого нашей командой. Заодно, мы оценили производительность двоичной трансляции из x86 в ARM от компании Microsoft (входящей в состав MS Windows 10 для Arm устройств) на лэптопе Huawei MateBook E. На текущий момент, это все известные нам решения по двоичной трансляции из X86 в ARM, доступные на широком рынке.

Т.к. все решения изначально созданы под разные операционные системы (Huawei Exagear — под Linux, Apple Rosetta 2 — под MacOS, Microsoft binary translator — под MS Windows), возникла необходимость найти корректный метод сравнения, т.к. напрямую провести запуски было невозможно. Мы приняли за основу метрику «эффективности трансляции» — это отношение показателя времени исполнения бенчмарка в нативном для платформы режиме (ARM в нашем случае) ко времени запуска этого же бенчмарка в x86-кодах запущенного под двоичным транслятором (или же обратная величина в случае измерения попугаев «больше-лучше»). Иными словами, мы сравнивали то, сколько процентов от нативного исполнения достигает бенчмарк в режиме двоичной трансляции. Такой же метрикой пользовались эксперты с сайта Anandtech, выпустившие обзорную статью про Apple M1, где также были приведены цифры производительности Rosetta 2.

Все замеры проведены в однопоточном режиме, т.к. для нас было важно замерить именно качество оттранслированного кода, насколько он уступает нативному.

Huawei ExaGear vs Apple Rosetta 2

Итак, начнём сравнение Huawei ExaGear с Apple Rosetta 2 на Apple MacBook Pro (M1). Тесты под Rosetta 2 запускаются в родной MacOS BigSur 11.1, тесты под ExaGear — в виртуалке с Linux kernel 5.4.1.

Geekbench 5.4.1 (чем выше — тем лучше):

Bench name

ARM64 MacOS

Rosetta 2 (x86)

Rosetta 2 efficiency

ARM64 Linux (VM)

Exagear (x86)

Exagear efficiency

AES-XTS

2769

1720

62.1%

2703

1823

67.4%

Text Compression

1502

1319

87.8%

1438

1349

93.8%

Image Compression

1356

1056

77.9%

1335

1230

92.1%

Navigation

1716

1678

97.8%

1717

1605

93.5%

HTML5

1642

1066

64.9%

1717

1302

75.8%

SQLite

1400

1000

71.4%

1328

1229

92.6%

PDF Rendering

1600

1324

82.8%

1738

1464

84.2%

Text Rendering

1778

1290

72.6%

1726

1480

85.8%

Clang

1661

1244

74.9%

1738

1335

76.8%

Camera

1612

1278

79.3%

1464

1148

78.4%

N-Body Physics

1789

1503

84.0%

1830

1616

88.3%

Rigid Body Physics

1772

1352

76.3%

1690

1176

69.6%

Gaussian Blur

1407

1251

88.9%

1435

1297

90.4%

Face Detection

2215

1500

67.7%

2216

1632

73.7%

Horizon Detection

1964

1268

64.6%

1879

1386

73.8%

Image Inpainting

3214

2893

90.0%

3345

2903

86.8%

HDR

2486

2250

90.5%

2761

2690

97.4%

Ray Tracing

2553

1970

77.2%

2055

1992

96.9%

Structure from Motion

1406

1068

76.0%

1507

1150

76.3%

Speech Recognition

1601

1371

85.6%

1485

1355

91.3%

Machine Learning

1243

713

57.4%

1229

727

59.2%

GeoMean

76.9%

82.4%

Как видно, средняя производительность Huawei ExaGear (82.4%) обгоняет Apple Rosetta 2 (76.9%), причём проигрывает ExaGear только на 4-х тестах из 21-го — Navigation, Camera, Rigid Body Physics и Image Inpainting.

Тут надо сделать небольшое, но достаточно интересное отступление. Дело в том, что при более детальном изучении процессора M1 можно обнаружить, что несмотря на то, что он официально вышел только в ноябре 2020-го года (а значит его система команд была зафиксирована задолго до этого момента, явно не позднее 2019-го года), он содержит в себе набор расширений архитектуры ArmV8.7, которая официально была принята и опубликована только осенью 2020-го года. Причём существенная часть этого расширения является ничем иным, как аппаратной поддержкой двоичной трансляции, призванной упростить трансляцию некоторых операций из архитектуры x86. Т.е. компания Apple разрабатывала процессор с расширением, которое на тот момент не было официальным. Более того, при внимательно ретроспективном взгляде на более ранние расширения видно, что ArmV8.5 и ArmV8.4 также включали в себя операции для поддержки двоичной трансляции. Таким образом очевидно, что компания Apple достаточно давно в кооперации с Arm Ltd. работало над аппартной поддержкой своего решения. Apple Rosetta 2 использует все данные возможности и поэтому имеет определённое преимущество, по сравнению с Huawei Exagear, который данные расширения не использует.

Именно поэтому данные 4 теста Apple Rosetta 2 исполняет эффективнее. Но тем не менее, на остальных тестах, даже с учётом имеющегося гандикапа у решения от Apple, Huawei ExaGear показывает более высокие результаты.

Также стоит отметить, что цифры производительности в нативном Arm-режиме на MacOS и Linux в целом достаточно близки, что подтверждает общую корректность нашего подхода по сравнению производительности двоичных трансляторов.

Далее, сравним запуски на SpecCPU2006 и SpecCPU2017. Измеряется время работы каждого подтеста в секундах. Исключены бенчмарки, написанные на Fortran.

SpecCPU2006 (секунды)

Компилятор: clang 11.0 -O3 –flto

INT tests

ARM64 MacOS

Rosetta 2 (x86)

Rosetta 2 efficiency

ARM64 Linux (VM)

ExaGear (x86)

ExaGear efficiency

400.perlbench

157

218

72.0%

145

166

87.3%

401.bzip2

248

326

76.1%

247

282

87.6%

429.mcf

106

118

89.8%

129

123

104.9%

445.gobmk

178

198

89.9%

183

193

94.8%

456.hmmer

159

170

93.5%

164

142

115.5%

458.sjeng

246

300

82.0%

253

281

90.0%

462.libquantum

94

107

87.9%

101

128

78.9%

464.h264ref

203

328

61.9%

201

271

74.2%

471.omnetpp

146

179

81.6%

173

193

89.6%

473.astar

184

203

90.6%

196

201

97.5%

483.xalancbmk

82

104

78.8%

96

112

85.7%

GeoMean Int

81.7%

90.8%

FP tests

433.milc

95

130

73.1%

98

127

77.2%

444.namd

139

172

80.8%

139

164

84.8%

447.dealII

108

117

92.3%

115

151

76.2%

450.soplex

91

104

87.5%

95

107

88.8%

453.povray

60

78

76.9%

52

65

80.0%

470.lbm

113

119

95.0%

114

99

115.2%

482.sphinx3

194

207

93.7%

195

215

90.7%

GeoMean FP

85.2%

86.7%

SpecCPU2017 (секунды)

Компилятор: clang 11.0 -O3 –flto

INT tests

ARM64 MacOS

Rosetta 2 (x86)

Rosetta 2 efficiency

ARM64 Linux (VM)

ExaGear (x86)

ExaGear efficiency

500.perlbench_r

216

282

76.6%

210

241

87.1%

502.gcc_r

125

164

76.2%

125

153

81.7%

505.mcf_r

202

235

86.0%

217

231

93.9%

520.omnetpp_r

277

360

76.9%

295

324

91.0%

523.xalancbmk_r

166

204

81.4%

189

197

95.9%

525.x264_r

154

176

87.5%

161

189

85.2%

531.deepsjeng_r

175

221

79.2%

190

197

96.4%

541.leela_r

282

294

95.9%

285

277

102.9%

557.xz_r

275

319

86.2%

307

335

91.6%

GeoMean Int

82.7%

91.6%

FP tests

508.namd_r

111

134

82.8%

111

133

83.5%

510.parest_r

308

331

93.1%

304

336

90.5%

511.povray_r

211

320

65.9%

196

253

77.5%

519.lbm_r

121

153

79.1%

127

142

89.4%

526.blender_r

149

179

83.2%

163

175

93.1%

538.imagick_r

210

345

60.9%

227

271

83.8%

544.nab_r

156

186

83.9%

150

174

86.2%

GeoMean FP

77.7%

86.1%

Как видим, на SpecCPU2006/2017 ситуация аналогична тестам на Geekbench — в среднем Huawei ExaGear обыгрывает Apple Rosetta 2, хотя на отдельных подтестах ситуация обратная.

Huawei ExaGear vs Microsoft binary translator

Теперь сравним производительность Huawei ExaGear с двоичным транслятором от Microsoft на Huawei MateBook E.

ExaGear запускается в окружении WSL, транслятор от Microsoft в родной MS Windows 10.

В запусках ExaGear в окружении WSL обнаружилась проблема, что WSL не предоставляет используемые нами для профилирования таймеры, из-за чего не включается режим дооптимизации кода и ExaGear не демонстрирует максимальные цифры производительности. Потери скорости в таком случае можно оценить в 10–20% в зависимости от бенчмарка. Тем не менее, с учётом вышеприведённых результатов сравнения с Apple Rosetta 2, общая картина будет ясна.

Geekbench 5.4.1 (чем выше — тем лучше):

Bench name

ARM64 Windows

MS BT (x86)

MS BT efficiency

ARM64 WSL

ExaGear (x86)

ExaGear efficiency

AES-XTS

872

437

50.1%

892

437

49.0%

Text Compression

514

381

74.1%

518

451

87.1%

Image Compression

577

328

56.8%

606

433

71.5%

Navigation

402

393

97.8%

522

502

96.2%

HTML5

517

224

43.3%

522

371

71.1%

SQLite

534

240

44.9%

565

412

72.9%

PDF Rendering

515

253

49.1%

574

462

80.5%

Text Rendering

530

264

49.8%

544

430

79.0%

Clang

485

187

38.6%

601

405

67.4%

Camera

437

221

50.6%

479

308

64.3%

N-Body Physics

390

253

64.9%

390

317

81.3%

Rigid Body Physics

634

299

47.2%

717

485

67.6%

Gaussian Blur

279

217

77.8%

282

238

84.4%

Face Detection

598

301

50.3%

657

387

58.9%

Horizon Detection

484

235

48.6%

542

331

61.1%

Image Inpainting

580

419

72.2%

775

504

65.0%

HDR

637

481

75.5%

1035

843

81.4%

Ray Tracing

758

296

39.1%

762

513

67.3%

Structure from Motion

379

203

53.6%

457

289

63.2%

Speech Recognition

346

283

81.8%

355

312

87.9%

Machine Learning

252

108

42.9%

240

128

53.3%

GeoMean

55.6%

70.9%

SpecCPU2017 (секунды)

Компилятор: clang 11.0 -O3 -flto

INT tests

ARM64 Windows

MS BT (x86)

MS BT efficiency

ARM64 WSL

ExaGear (x86)

ExaGear efficiency

500.perlbench_r

824

1526

54.0%

800

1042

76.8%

502.gcc_r

716

1119

64.0%

690

820

84.1%

505.mcf_r

781

1069

73.1%

792

992

79.8%

520.omnetpp_r

1280

2025

63.2%

1186

1414

83.9%

525.x264_r

460

771

59.7%

481

638

75.4%

531.deepsjeng_r

507

711

71.3%

524

629

83.3%

541.leela_r

564

897

62.9%

547

652

83.9%

557.xz_r

733

938

78.1%

733

827

88.6%

GeoMean Int

65.4%

81.9%

FP tests

508.namd_r

423

698

60.6%

429

619

69.3%

510.parest_r

1006

1274

79.0%

970

1179

82.3%

511.povray_r

808

1540

52.5%

761

1027

74.1%

519.lbm_r

428

767

55.8%

429

549

78.1%

526.blender_r

474

688

68.9%

484

716

67.6%

538.imagick_r

560

1075

52.1%

566

847

66.8%

544.nab_r

522

1050

49.7%

517

617

83.8%

GeoMean FP

59.0%

74.3%

Сборка SpecCPU2006 под Windows вызвала многочисленные ошибки компиляции. Поэтому было решено не тратить время на запуск данного бенчмарка при наличии результатов для SpecCPU2017, которые в целом достаточно идентичны SpecCPU2006.

Резюме

Инженеры компании Apple выпустили не только выдающийся процессор, но и снабдили его очень приличным двоичным транслятором для запуска x86-приложений, показывающим достойные результаты производительности. Тем не менее, Huawei ExaGear уверенно обыгрывает Apple Rosetta 2.

Решение от компании Microsoft существенно уступает по производительности вышеуказанным оппонетам, что достаточно ожидаемо, ввиду отсутствия такого большого опыта в разработке двоичных трансляторов.

© Habrahabr.ru