- PVSM.RU - https://www.pvsm.ru -

SMT-решатель на iPhone

Зачем покупать дорогой ПК, если ваш iPhone быстрее решает SMT?

Задача выполнимости формул в теориях (satisfiability modulo theories, SMT) — это задача разрешимости для логических формул с учётом лежащих в их основе теорий. — Википедия

Несколько дней назад я написал в твиттере [1]: «Любопытный эксперимент: на новом iPhone прувер Z3 работает быстрее, чем на моём (довольно дорогом) десктопном Intel. Пора перевести все формальные методы исследований на телефон».

Я читал о невероятном прогрессе, которого добились разработчики процессоров Apple [4], и что скоро маки переведут на собственные ARM-процессоры от Apple [5]. Эти отчёты обычно ссылаются на некоторые кросс-платформенные тесты, такие как Geekbench [6] для демонстрации, что мобильные процессоры Apple не уступают мобильным и настольным процессорам Intel. Но я всегда немного скептически относился к этим кросс-платформенным тестам (как и к другим [7]) — действительно ли они отражают скорость выполнения реальных задач, для которых я использую свои Mac?

Как исследователю формальных методов, мне регулдярно приходится запускать SMT-решатель, обычно это прувер Z3 [8]. Я потратил немало времени на изучение характеристик производительности Z3. У него есть некоторые особенности, которые не учитываются в тестах (Z3 обычно однопоточный). Недавно я купил новый iPhone XS [9] с последним процессором A12 [10] от Apple. И как-то от нечего делать решил скомпилировать Z3 в iOS и посмотреть, насколько быстро работает новый телефон (или гипотетический будущий Mac).

Первый тест

Кросс-компиляция Z3 оказалась на удивление простой, необходимо изменить всего несколько строчек кода. Я выложил исходники для запуска Z3 на вашем собственном устройстве iOS [11]. Для теста я взял несколько запросов из своей недавней работы по профилированию символических вычислений [12]: для каждого случая извлечена выдача SMT, сгенерированная Rosette [13].

В первом тесте я сравнил iPhone XS с одним из десктопов, который работает на Intel Core i7-7700K — лучший чип Intel для потребительского рынка на тот момент, когда я собирал машину 18 месяцев назад. Предполагалось, что Intel выиграет без особых проблем, но вышло иначе:

SMT-решатель на iPhone - 1

В этом 23-секундном тесте iPhone XS оказался примерно на 11% быстрее! Об этом я сообщил в твиттере, но твиттер не оставляет много места для подробностей, поэтому изложу их здесь:

  • Данный бенчмарк — фрагмент QF_BV из SMT, поэтому Z3 решает эту часть с помощью трансляции (bit-blasting) и SAT-солвера.
  • Результат вполне устойчив, даже если прогнать цикл десять раз: iPhone поддерживает эту производительность и вроде бы не начинает тормозить из-за перегрева.1 [14]. Тем не менее, бенчмарк всё-таки довольно скоротечный.
  • Несколько человек спросили, связано ли это с недетерминизмом? Возможно, на разных платформах решатель идёт разным путём из-за использования случайных чисел или по другой причине? Но я довольно тщательно проверил подробную выдачу Z3, и вряд ли результаты можно объяснить этим.
  • Обе системы запускали Z3 4.8.1, который я скомпилировал с помощью Clang с одинаковыми настройками оптимизации. Я также запускал тесты на i7-7700K с готовыми бинарниками Z3 (которые скомпилированы GCC), но они ещё медленнее.

Что происходит?

Как такое возможно? Core i7-7700K — это же десктопный процессор. На однопоточной задаче он потребляет около 45 ватт и работает на частоте 4,5 ГГц. С другой стороны телефон iPhone, отключенный от сети. Вероятно, он не потребляет и 10% этой мощности и работает (мы надеемся) где-то в диапазоне 2 ГГц. Более того, после сравнительного теста я проверил отчёт об использовании батареи iPhone: там говорилось, что Slack использовал в 4 раза больше энергии, чем приложение Z3, несмотря на меньшее время на экране.

Apple не предоставляет достаточно информации, чтобы понять производительность Z3 на iPhone, но, к счастью, Intel даёт эти сведения для своего процессора. Я некоторое время покопался в VTune [15], чтобы найти узкие места производительности при запуске Z3 на десктопе. Как отметил Мэйт Соос [16], основное время SAT-решатель тратит на распространение [17], которое очень чувствительно к кэшу [18]. VTune соглашается и говорит, что Z3 тратит много времени на ожидание в памяти при переборе наблюдаемых литералов. Таким образом, ключом к производительности, кажется, является размер кэша и задержка памяти. Этот эффект может объяснить, почему iPhone настолько силён в этом тесте: у чипа A12 гигантский кэш L2 с низкой задержкой [19], а также, похоже, лучшая задержка памяти после промаха кэша по сравнению с 7700K.

Стремительный прогресс процессоров Apple

Чтобы подтвердить результаты, я провёл более обширный эксперимент, собрав все устройства Apple, которые смог достать. Я также выбрал примерно в 10 раз более продолжительный бенчмарк (т.е. 4 минуты на десктопе), чтобы снять опасения по поводу всплесков производительности мобильного CPU.

Вот результаты для этих устройств (с указанием дат их выпуска) относительно A7, первого 64-разрядного пользовательского процессора от Apple:

SMT-решатель на iPhone - 2

Сразу нужно отметить, что настольный процессор i7-7700K превосходит iPhone XS на этом более длинном тесте. Но iPhone невероятно конкурентоспособен, показывая результат между i7-7700K и его предшественником i7-6700K, который был самым быстрым потребительским настольным процессором чуть менее двух лет назад.

По приколу я добавил ещё процессор Core m7-6Y75 из своего макбука 2016 года. В тесте Z3 мой телефон примерно на 50% быстрее, чем ноутбук.

Действительно примечательной вещью здесь является тенденция: довольно последовательное улучшение на 30% в год для этого бенчмарка Z3. Очевидно, что не следует делать далекоидущие выводы из одного глупого теста, но похоже, что через пару итераций процессоры Apple станут вполне пригодны для рабочих нагрузок.2 [20]. Я честно не ожидал, что мы уже так близко: современные архитектуры смартфонов просто невероятны!

Спасибо Меган Коуэн [21], Максу Уиллси [22] и Эдди Яну [23] за помощь в проведении тестов на других устройствах.


Макс [22] обратил внимание, что iPhone водонепроницаем, поэтому теорию можно проверить, погрузив его в ледяную ванну. Но я заплатил много денег за телефон и не хочу добровольно проводить такой опыт. [24]

iPad Pro [25] ещё быстрее благодаря большему [26]

Автор: m1rko

Источник [27]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/matematika/298598

Ссылки в тексте:

[1] написал в твиттере: https://twitter.com/siderealed/status/1057682481334218752

[2] pic.twitter.com/9Faz9qNvAI: https://t.co/9Faz9qNvAI

[3] October 31, 2018: https://twitter.com/siderealed/status/1057682481334218752?ref_src=twsrc%5Etfw

[4] разработчики процессоров Apple: https://www.bloomberg.com/graphics/2018-apple-custom-chips/

[5] собственные ARM-процессоры от Apple: https://www.bloomberg.com/news/articles/2018-04-02/apple-is-said-to-plan-move-from-intel-to-own-mac-chips-from-2020/

[6] Geekbench: https://www.geekbench.com/

[7] другим: https://www.realworldtech.com/forum/?threadid=136526&curpostid=136666

[8] прувер Z3: https://github.com/z3prover/z3

[9] iPhone XS: https://www.apple.com/iphone-xs/

[10] A12: https://en.wikipedia.org/wiki/Apple_A12

[11] запуска Z3 на вашем собственном устройстве iOS: https://github.com/jamesbornholt/z3-ios

[12] профилированию символических вычислений: https://unsat.cs.washington.edu/projects/sympro

[13] Rosette: https://emina.github.io/rosette

[14] 1: #1

[15] VTune: https://software.intel.com/en-us/vtune

[16] Мэйт Соос: https://www.msoos.org/

[17] тратит на распространение: https://www.msoos.org/2010/07/propagating-faster/

[18] очень чувствительно к кэшу: https://www.msoos.org/2010/04/optimisations/

[19] гигантский кэш L2 с низкой задержкой: https://www.anandtech.com/show/13392/the-iphone-xs-xs-max-review-unveiling-the-silicon-secrets/3

[20] 2: #2

[21] Меган Коуэн: https://cowanmeg.github.io/

[22] Максу Уиллси: https://mwillsey.com/

[23] Эдди Яну: https://homes.cs.washington.edu/~eqy/

[24] ↑: #1_1

[25] iPad Pro: https://www.apple.com/ipad-pro/

[26] ↑: #2_2

[27] Источник: https://habr.com/post/429318/?utm_campaign=429318