Исследователи Массачусетского технологического института обучили нейронную сеть, чтобы сказать вам, как быстро будет выполняться любой код, который вы ему представите. Звучит забавно, но зачем нам это нужно?
Чип 4004 — вы действительно знали, что он делает!
В те времена можно было посмотреть на выходные данные компилятора или какого-нибудь ассемблера ручной работы и иметь разумное представление о том, как быстро будет выполняться код. Вы могли бы выполнить эту работу, просто подсчитав тактовые циклы для каждой инструкции в конкретной версии, которую вы использовали. Потом все стало еще сложнее.
Стремясь ускорить процессоры занялись переупорядочением инструкций, предсказанием ветвей, пропусками кэша, спекулятивным выполнением, барьерами выполнения, несколькими ядрами и гиперпотоками. Это не только затрудняет вычисление того, сколько тактов потребуется для выполнения какого-либо конкретного фрагмента кода, но даже не является фиксированным и неизменным числом в зависимости от того, принимаются ветви или нет и так далее.
Так что же с этим делать?
Единственное разумное решение-опробовать код и собрать статистически достоверные данные за большое количество запусков и надежд. На самом деле это не делает оптимизацию кода особенно простой, так как время цикла выполнения процедуры довольно велико. Теперь команда из Массачусетского технологического института обучила нейронную сеть оценивать время, которое «базовые блоки» кода, то есть общие фрагменты кода, занимают для выполнения на разных архитектурах. Размер выборочных данных впечатляет — 300 000 блоков, взятых из различных типов приложений. Теперь это доступно как BHive, набор данных с открытым исходным кодом.
Что удивительно, так это то, что получившейся в результате программе Ithemal удалось предсказать время работы на новейших процессорах Intel более точно, чем модели ручной работы, созданные Intel,-и вы можете предположить, что она знает свои собственные процессоры. Обычно частота ошибок Ithemal составляет 10%, в то время как у моделей ручной работы частота ошибок составляет 20%.
Программа также может иметь приложения для создания оптимизаций для процессоров «черного ящика», т. Е. устройств, для которых точный дизайн неизвестен. Нейронная сеть не имеет ни малейшего представления о структуре процессора, вместо этого она использует блоки кода, чтобы выяснить, что процессор работает быстро, а что медленно. Это полностью эмпирический подход. Этот подход также защищен от ошибок в документации, поскольку он учится на реальных реализациях.
Конечно, будучи сама по себе черным ящиком, нейронная сеть не дает никакого представления о том, почему один код быстрее других. Нет никаких полезных идей, генерируемых инструментом. Исследователи рассматривают поиск интерпретаций выходных данных нейронной сети как важный следующий шаг. Возможно, удастся вложить эти знания в какие — то понятные человеку правила-например, всегда ставить наиболее вероятный выбор на путь, не связанный с ответвлением.
Вы можете видеть, что это будет полезно для разработчиков компиляторов в качестве способа оптимизации сгенерированного кода. Мне интересно, отражает ли он какую-либо структуру процессора и может ли это быть использовано для проверки или улучшения аппаратного обеспечения. ИИ, безусловно, меняет то, что представляет собой программное обеспечение.