Навіщо процесору нейрони, Комп’ютера

Комп'ютери класичні та нейронні йдуть близько, але все-таки нарізно. І ми, погодьтеся, до такого поділу не просто звикли, а й вважаємо природним — бо насамперед у них різні сфери застосування. Класична архітектура бере на себе рутину механічного перемелювання цифр, тоді як штучні нейромережі займаються розпізнаванням образів у порівняно рідкісних поки що особливих випадках. Смичка, мабуть, колись станеться, але коли і де вона станеться — хто може передбачити?

Мікропроцесор, про який йдеться, це восьмиядерна система-на-чіпі (SoC) Exynos 8890. Там три стандартні ядра ARM Cortex-A53, одне графічне, а чотири, що залишилися, якраз і представляють особливий інтерес: вони теж ARM-похідні (ARM v8 ), Але Samsung багато і сильно в них змінила, витративши на це три роки і практично створивши свою мікроархітектуру, названу Exynos M1. Це мобільна енергоекономічна суперскалярна багатоконвеєрна архітектура, але не цим вона є унікальною. Унікальною серед побратимів її робить блок передбачення розгалужень, заснований на штучній нейромережі.

комп

Тут, однак, абсолютно необхідно відволіктися і зробити екскурс в історію та пристрій обчислювальної техніки. Залишаючи за кадром експериментальні малосерійні конструкції, еволюцію масових CPU загалом можна уявити як не тільки гонитву за мініатюризацією та тактовою частотою, а й як нарощування «інтелектуальної» потужності процесора для передбачення порядку виконання інструкцій.

8-бітні мікропроцесори були тривіальними - ось, до речі, чудовий симулятор, який прямо в браузері дозволяє по кроках вивчити роботу чіпа, на кшталт суперпопулярного в 8-бітному світі Intel 8080. Такий процесор працює механічно, тупо,майже як пам'ятна машина Тьюринга: ось він вибирає чергову інструкцію з оперативної пам'яті, ось її виконує, записує результат, ось інкрементує програмний лічильник на одиницю і повторює процес. Сьогодні здається неймовірним та смішним, що подібне колись взагалі могло застосовуватися для вирішення серйозних завдань. Але особисто я перші свої гроші заробив програмування саме таких машин, та й серед вас напевно знайдуться ті, хто ще не забув восьмибітний асемблер.

Але вже у 90-х все стало інакше. Мікропроцесори наділили «конвеєром» і не одним, і навчили виконувати інструкції не по порядку. Я, звичайно, сильно спрощу і скомкаю, але суть у наступному. Замість того, щоб чекати закінчення виконання поточної команди, процесор завантажував у конвеєр кілька наступних інструкцій по ходу дії і виконував їх одночасно - ну або принаймні намагався виконати, якщо їхня робота не залежала від результатів попередніх дій (здорово допомагає розбивка CISC-команда на дрібніші RISC-складові, що на PC вперше було реалізовано в Pentium Pro). Це суперскаляр: за один машинний цикл (або навіть такт) можна було виконати кілька команд.

ютера
Ах, як все просто у 8-бітному світі!

А в міру того, як конвеєр подовжувався, стало необхідно навчитися припускати результат умовних переходів. Таке виконання назвали спекулятивним — у тому сенсі, що коли процесор натикався на команду умовного переходу, то «спекулював», тобто передбачав, чи потрібно цей перехід виконувати чи ні, після чого завантажував у конвеєр інструкції з обраної гілки та продовжував роботу. Мінус очевидний: якщо прогноз було зроблено неправильно, конвеєр доведеться завантажувати інструкціями заново. І це прямо виводить нас на завдання передбачення розгалужень.

Завдання це називають однією з найважливіших для напівпровідникової техніки останніх двадцяти років. В умовах глухого кута мініатюризації, що проглядається, це не перебільшення: навчившись передбачати результат умовних переходів максимально ефективно («з мінімальним штрафом») можна істотно підвищити продуктивність процесора, що вичерпав інші ресурси.

Аж до нульових років тут застосовувалися два підходи. Перший і грубий: статичні методи передбачення. Просто робиться якесь припущення щодо спрацьовування того чи іншого умовного переходу — причому, що важливо, це не залежить від попередніх результатів прогону даного шматка або взагалі програми. Недалеко пішли від них і методи динамічні або, як правильніше було б їх назвати, статистичні. Тут припущення робиться з урахуванням попередніх результатів виконання: грубо кажучи, що частіше перехід спрацьовував у минулому, то частіше провісник розгалужень припускатиме його спрацювання у майбутньому. Незважаючи на примітивність, обидва методи працюють напрочуд добре, даючи близько 90% правильних передбачень. Але настав день, коли цього стало недостатньо. На щастя, рішення вже було запропоновано вченими. Так, застосувати штучну нейромережу!

Тут, щоправда, ми ступаємо на землю, якщо не недосліджену, то маловідому. Проблема, по-перше, у тому, що сама тема ще порівняльна юна: перші теоретичні роботи з нейронних предикторів розгалуження належать до початку нульових. А по-друге, виробники не горять бажанням розкривати секрети особисто своїх конструкцій — і навіть Samsung, яка здивувала всіх визнанням (а розповіла вона про це на прес-конференції, і навіть дала деякі ілюстративні матеріали), не виняток, бо розповіла тільки в загальних рисах.

комп
Просто длякраси: один із останніх процесорів Intel. Я не знаю, чи тут захований і якщо захований, то де, нейронний блок.

Сама ідея проста. Замість грубого статистичного передбачення, поставити багатошарову нейромережу (добре підходить, зокрема, класичний перцептрон, який ефективно реалізується на напівпровідниках), яка вчитиметься і передбачатиме розгалуження коду. Виграшів передбачається два. Насамперед, вже перші теоретичні дослідження показали, що нейронний предиктор може бути як мінімум настільки ж ефективним, як і статистичний. І потім, ресурси, ним займані (пам'ять і час), зростають із збільшенням виконаного коду не експоненційно, як у простих провісників, а лише лінійно. І їх, звісно, ​​почали застосовувати.

Ось тільки прикладів я, на жаль, дати не зможу. Навіть у найсвіжішому та детальному описі мікроархітектур різних процесорів, деталі нейронних блоків відсутні. Відомо лише, що їх тепер застосовує Samsung, що AMD поставила такий блок у Zen, що Intel підозрюється у використанні нейронів у своїх чіпах. Але й годі. Все інше – секрет! З досвіду (знову-таки більше теоретичного) ясно, що великою проблемою має стати чи вже стала порівняльна повільність нейроструктур у порівнянні з грубо-механічними провісниками - і ведеться пошук обхідних шляхів; на щастя, по штучних нейромереж взагалі накопичений великий практичний матеріал.

Звичайно, нейронний предиктор розгалужень не застосовуєш для вирішення повсякденних завдань. Це вузькоспеціалізована схематика, захована у самого "серця" чіпа, щоб мінімізувати затримки. Але лихо біда почало: почнемо з розгалужень, а там уже проглядає і нейросопроцесор!