СПОСОБ ГЕНЕРАЦИИ ПРОФИЛЯ ПРОГРАММЫ НА ОСНОВЕ МАШИННОГО ОБУЧЕНИЯ ДЛЯ ПРОФИЛЬНОЙ ОПТИМИЗАЦИИ ПРОГРАММЫ И РЕАЛИЗУЮЩЕЕ ЕГО ЭЛЕКТРОННОЕ УСТРОЙСТВО
METHOD FOR GENERATING A PROGRAM PROFILE BASED ON MACHINE LEARNING FOR PROFILE OPTIMIZATION OF THE PROGRAM AND AN ELECTRONIC DEVICE IMPLEMENTING IT

Область техники
[0001] Настоящая заявка относится к вычислительной технике и, более конкретно, к способу генерации профилей программ на основе машинного обучения (ML) для профильной оптимизации программ и реализующему его электронному устройству.
Уровень техники
[0002] Производительность программы (скорость, использование памяти, сетевых ресурсов или потребления энергии и т.д.) имеет решающее значение для удовлетворенности пользователей своими электронными устройствами. Пользователи хотят, чтобы программы (например, мобильные приложения) работали быстро и плавно, и использовали как можно меньше памяти и энергии пользовательского электронного устройства. Низкая производительность программы может негативно повлиять на производительность самого электронного устройства и, таким образом, ухудшить взаимодействие пользователя с этим устройством. Для повышения производительности программ предложена оптимизация программного кода. Такая оптимизация может быть выполнена вручную или автоматически, например, компилятором или другими инструментами. Компиляторная оптимизация является этапом компиляции программы, на котором создается код, который является более эффективным (более быстрым при выполнении, более коротким, обеспечивает меньшее потребление энергии устройством, на котором он выполняется и т.д.), чем существующий код.
[0003] Одним из способов компиляторной оптимизации является профильная оптимизация. Профилирование в целом представляет собой способ анализа кода, в ходе которого измеряются характеристики производительности, такие как частота и длительность вызовов функций, используемая память и т. д. В процессе профильной оптимизации на основе существующего профиля программы часть программы выбирается в качестве важной и агрессивно оптимизируется, возможно, за счет другой, менее важной части программы. Профилирование обычно можно разделить на статическое (автономное) и динамическое (во время выполнения). При динамическом профилировании могут использоваться инструментирование, аппаратные счетчики, электромагнитные излучения, предварительный прогон программы, возможно, в гипервизоре/эмуляторе. Динамическое профилирование имеет следующие недостатки: оно требует запуска программного кода по определению, само по себе негативно влияет на производительность выполнения программы, требует репрезентативных данных и является времязатратным. При статическом профилировании могут использоваться абстрактная интерпретация, эвристики (например, для прогнозирования переходов), Марковские процессы (например, для оценки относительной частоты выполнения базовых блоков), анализ потоков данных (например, для определения области значений констант, числовых переменных), классические алгоритмы ML (например, для прогнозирования критического пути, обнаружения параллелизма), глубокое обучение (например, для прогнозирования критического пути, оценки скорости обработки базовых блоков) или повторное использование старого профиля.
[0004] Чтобы пользователю получить преимущества профильной оптимизации, профиль должен быть доступен на пользовательском устройстве до запуска программы. Для этого профили могут быть подготовлены и доставлены из облачного хранилища (например, профили из облачного хранилища Google Play для приложений Android). Когда приложение используется множеством пользователей и в хранилище имеется много профилей, профиль может быть подготовлен и доступен во время загрузки. В этом случае приложение может быть скомпилировано с профилем и оптимизировано с самого начала, чтобы получить улучшенную производительность. Несмотря на то, что достигается улучшенная производительность, такой подход все же имеет свои недостатки. Для создания профилей требуется запуск приложения. Как следствие, профили могут быть недоступны для новых приложений или новых версий приложений. Кроме того, для создания профиля программы в облачном хранилище требуется передача данных об исполнении упомянутой программы на пользовательском устройстве, а также, возможно, данных о пользовательском устройстве или даже о самом пользователе, что является нежелательным с точки зрения конфиденциальности (например, в форме пользовательского/программного профиля). Наконец, агрегированный (т.е. «усредненный») профиль может не подходить для конкретного пользователя или электронного пользовательского устройства.
[0005] В хранилище приложений профиль для приложения может быть не доступен, если имеется полностью новое приложение, новая версия старого приложения, если недостаточно пользователей использовали приложение или недостаточно пользователей использовали конкретную модель устройства, архитектуру, языковый регион и так далее. В этом случае, альтернативно приведенному выше, профиль может быть сгенерирован на устройстве во время выполнения конкретного приложения. Таким образом, приложение загружается из хранилища без профиля, профиль затем генерируется на электронном пользовательском устройстве после того, как приложение было использовано в течение некоторого времени, а затем сгенерированный профиль используется для оптимизации. Этот профиль может быть дополнительно отправлен в хранилище для агрегирования. Несмотря на то, что некоторые аспекты выполнения программ могут быть улучшены с помощью такого подхода, этот подход все же имеет следующие недостатки. Поскольку профиль недоступен при первом запуске приложения, приложение не является оптимизированным во время первого запуска, и производительность приложения может быть снижена во время этого периода. Кроме того, профиль генерируется только на основе пользовательских данных. Таким образом, такой профиль может не отражать различные этапы выполнения приложения, и когда пользователь в конечном итоге сталкивается с этими этапами, производительность приложения может быть не оптимальной.
«Bootstrapping Profile-Guided Compilation and Verification»
[0006] Публикация US20190272180A1 патентной заявки США от 5 сентября 2019 года под названием раскрывает способ, включающий сбор информации о выполнении приложения (AEI) на устройствах, которые выполнили это приложение хотя бы один раз, и отправку AEI на сервер. Затем вся AEI по пользователям, версиям приложений, версиям ОС агрегируется с использованием методов объединения, пересечения, подсчета значений, превышающих пороговые значения. При получении запроса на предоставление программного пакета для приложения AEI включается в этот пакет. AEI используется для предоставления подсказок компилятору для оптимизации или компиляции некоторого кода заранее. AEI может быть сгенерирована с использованием эвристик статического профилирования: анализа потока данных, метода абстрактной интерпретации, эвристик символьного анализа и так далее. AEI может также включать в себя сведения о: памяти, потреблении энергии, виртуализации, иерархии классов, вычислительной среде, API и т.д. Решение, раскрытое в вышеупомянутой публикации патентной заявки США, использует существующую информацию профиля и теоретически позволяет создавать AEI без запуска приложения за счет использования эвристик статического профилирования. В общем случае раскрытое решение требует достаточного количества устройств для исполнения приложения для получения профилей, что приводит к задержке (от нескольких дней и более) до момента, когда агрегированный профиль будет доступен. Кроме того, раскрытое решение требует передачи пользовательского/программного профиля в облако. Наконец, такой агрегированный профиль может не быть оптимальным с точки зрения использования на устройстве конкретного пользователя и с помощью такого профиля невозможно получить свежий профиль для предустановленных приложений.
«Differentiated static analysis for dynamic code optimization»
[0007] В публикации US20180373515A1 патентной заявки США от 27 декабря 2018 года под названием  предлагается анализировать зависимости в потоке управления/данных, классифицировать программные элементы как имеющие высокую вероятность или низкую вероятность использования на основе правил и эвристик, а также компилировать или оптимизировать программные элементы, имеющие высокую вероятность использования. Решение, раскрытое в вышеупомянутой патентной заявке США, не требует выполнения программы. Тем не менее, оно основано на сгенерированных человеком правилах и эвристиках, не может учитывать информацию, содержащуюся в уже существующем профиле, и не учитывает различия в отдельных пользовательских устройствах, среде и сценариях использования.
«Profile guided optimization in the presence of stale profile data»
[0008] В публикации US2016004518A1 патентной заявки США от 07 января 2016 года под названием предлагаетсяпроверять граф вызовов функции для старой и новой версий программы, идентифицировать неизмененные пути, выполнять построение нового профиля с использованием частей старого профиля, соответствующих неизмененным путям, и оптимизировать программы с помощью нового профиля. Решение, раскрытое в вышеупомянутой патентной заявке США, не требует выполнения программы, и использует информацию, содержащуюся в уже существующем профиле. Однако это решение может использоваться только в том случае, если предыдущая версия программы и соответствующий профиль являются доступными. Качество генерируемых профилей снижается в данном раскрытом решении по мере отдаления версии программы от версии, для которой существует профиль.
[0009] Таким образом, проблемы, имеющие место в решениях уровня техники, связанных с генерацией профилей программ и профильной оптимизацией программ, можно резюмировать следующим образом. (1) Профили генерируются при выполнении программы. Динамические методы генерации профилей требуют выполнения кода. Например, среда выполнения Android собирает профили приложений только во время запуска приложения. (2) Инструментирование является ресурсоемким и может привести к задержкам и визуальным эффектам, мешающим пользователю при использовании программы. Когда инструкции профильной оптимизации вставляются в программный код, они конкурируют с самой программой за машинные ресурсы. Таким образом, выполнение программы может замедляться. (3) Профили, основанные на статических эвристиках, могут быть неточными. Эти профили могут не отражать поведение программы при вводе данных реальным пользователем. (4) Аппаратные методы сбора профиля также не являются точными. Они не могут обнаружить переход в фазе программы, могут неоднократно обнаруживать одни и те же критические области, в результате чего профили не являются полными. (5) Облачные профили не всегда доступны. Облачные профили доступны не для каждого приложения и не для каждой версии приложения. (6) Агрегированный облачный профиль, формируемый для разных пользователей и разных пользовательских устройств, является «усредненным». Таким образом, профиль может не учитывать различия между отдельными пользовательскими устройствами, средой и сценариями. (7) Профили, полученные из предыдущих версий приложения, иногда не могут быть использованы для профильной оптимизации. Кроме того, подход с повторным использованием старых профилей работает для следующих версий программ только тогда, когда на устройство установлены старые версии и для них собраны профили. (8) Использование старых профилей для профильной оптимизации может приводить к худшей производительности, чем использование вновь созданных профилей. Чем меньше новая версия приложения похожа на старую версию, тем хуже эффект от профильной оптимизации со старым профилем. (9) Предварительный запуск программы в фоновом режиме является ресурсоемким и может привести к задержкам и визуальным эффектам, мешающим пользователю при использовании программы. Запуск программ в гипервизоре/эмуляторе на устройстве является рискованным из-за потенциальных экранных эффектов, которые могут нарушить работу пользователя. (10) Конфиденциальность пользователей. Сбор и агрегирование профилей пользователей требует передачи пользовательских данных и других данных с пользовательского устройства, и пользователю необходимо дать согласие на эту передачу.
Сущность изобретения
[0010] Настоящее изобретение предназначено для смягчения или разрешения, по меньшей мере, некоторых из вышеописанных проблем/недостатков, присущих решениям из уровня техники. Таким образом, в первом аспекте настоящего изобретения предусмотрен способ генерации профиля программы на основе машинного обучения (ML) для профильной оптимизации программы. Способ содержит извлечение одного или более элементов кода из программного кода программы, подлежащей оптимизации; построение вектора признаков для каждого из одного или более элементов кода; предсказание одной или более характеристик производительности для каждого из одного или более элементов кода путем прогона соответствующего вектора признаков через по меньшей мере одну основанную на ML модель предсказания из одной или более основанных на ML моделей предсказания, обученных предсказывать эту одну или более характеристик производительности для элементов кода; формирование профиля программы на основе сравнения предсказанных характеристик производительности одного или более элементов кода с соответствующими пороговыми значениями или на основе включения в профиль всех элементов кода с их предсказанными характеристиками без использования порогового значения; и выполнение профильной оптимизации программы на основе профиля программы, используя по меньшей мере сгенерированный профиль программы.
[0011] Во втором аспекте настоящего изобретения предусмотрено электронное устройство, содержащее процессор и память, хранящую одну или более основанных на ML моделей предсказания, обученных предсказывать характеристики производительности элементов кода, при этом одна или более основанных на ML моделей предсказания хранятся в виде по меньшей мере весов и параметров, полученных в ходе обучения, при этом память дополнительно содержит исполняемые компьютером инструкции, побуждающие процессор выполнять способ согласно первому аспекту настоящего изобретения или согласно любому развитию/модификации любой модификации способа согласно первому аспекту настоящего изобретения для выполнения профильной оптимизации программы, используя по меньшей мере одну из одной или более основанных на ML моделей предсказания.
[0012] Таким образом, поскольку в настоящем изобретении генерация профиля программы основана на машинном обучении, а не, например, на выработанных человеком эвристиках и правилах, профиль, генерируемый основанной на ML моделью предсказания согласно настоящему изобретению, является более полным и, в какой-то степени, более точным. Следовательно, программная оптимизация на основе такого профиля обладает повышенной эффективностью. Кроме того, способ применим в любой момент времени, когда доступен программный код. Таким образом, это позволяет избежать задержек, вызванных необходимостью предварительного сбора информации об исполнении программы (как в предшествующем уровне техники). Кроме того, конфиденциальность пользователя согласно настоящему изобретению может быть гарантирована с помощью предлагаемого способа, поскольку предсказание характеристик производительности может быть выполнено на пользовательском устройстве (т.е. без передачи какой-либо информации за пределы пользовательского устройства).
Краткое описание чертежей
[0013] Вышеуказанные и другие аспекты, признаки и преимущества настоящего изобретения станут более очевидными из следующего подробного описания при его рассмотрении вместе с сопроводительными чертежами, на которых:
Фиг. 1 иллюстрирует блок-схему способа профильной оптимизации программ с использованием основанной на машинном обучении (ML) генерации профиля программы согласно варианту осуществления настоящего изобретения.
Фиг. 2 иллюстрирует неограничивающий пример извлечения признаков из элементов кода.
На Фиг. 3 представлен график, наглядно иллюстрирующий то, как элементы кода выбираются для включения в генерируемый профиль на основе порогового значения производительности.
Фиг. 4 иллюстрирует первую возможную последовательность действий обработки, применимую при реализации способа согласно настоящему изобретению; на данной фигуре показана как стадия обучения моделей предсказания, так и стадия использования ансамблевой модели предсказания, полученной в результате обучения.
Фиг. 5 иллюстрирует первую альтернативную реализацию стадии использования первой возможной последовательности действий обработки, показанной в общих чертах на фиг. 4; на данной фигуре показана стадия использования модели предсказания, которая выбирается согласно извлеченным признакам кодовых элементов.
Фиг. 6 иллюстрирует вторую альтернативную реализацию стадии использования первой возможной последовательности действий обработки, показанной в общих чертах на фиг. 4; на данной фигуре показана стадия использования различных моделей предсказания с последующей агрегацией их предсказаний.
Фиг. 7 иллюстрирует вторую возможную последовательность действий обработки, применимую при реализации способа согласно настоящему изобретению; на данной фигуре показана как стадия обучения универсальной модели предсказания, так и стадия использования этой модели предсказания.
Фиг. 8 иллюстрирует третью возможную последовательность действий обработки, применимую при реализации способа согласно настоящему изобретению; на данной фигуре показана как стадия обучения разных моделей под разные типы кодовых элементов, так и стадия их использования с объединением в каскад моделей или ансамблевую модель.
Фиг. 9 иллюстрирует четвертую возможную последовательность действий обработки, применимую при реализации способа согласно настоящему изобретению; на данной фигуре показана как стадия обучения модели предсказания на сервере сборки встроенного программного обеспечения, так и стадия ее использования на пользовательском устройстве.
Фиг. 10 иллюстрирует пятую возможную последовательность действий обработки, применимую при реализации способа согласно настоящему изобретению; на данной фигуре показана как стадия обучения модели предсказания на сервере сборки встроенного программного обеспечения, так и стадия ее дообучения и использования на пользовательском устройстве.
Фиг. 11 иллюстрирует шестую возможную последовательность действий обработки, применимую при реализации способа согласно настоящему изобретению; на данной фигуре показана как стадия обучения модели предсказания, так и стадия ее использования на пользовательском устройстве.
Фиг. 12 иллюстрирует седьмую возможную последовательность действий обработки, применимую при реализации способа согласно настоящему изобретению; на данной фигуре показана стадия использования модели предсказания на сервере сборки встроенного программного обеспечения с последующим этапом профильной оптимизации, который выполняется на пользовательском устройстве.
Фиг. 13 иллюстрирует восьмую возможную последовательность действий обработки, применимую при реализации способа согласно настоящему изобретению; на данной фигуре показана стадия использования модели предсказания и оптимизации программы на сервере сборки встроенного программного обеспечения с последующим этапом доставки сборки с уже оптимизированным приложением на пользовательское устройство.
Фиг. 14 иллюстрирует девятую возможную последовательность действий обработки, применимую при реализации способа согласно настоящему изобретению; на данной фигуре показана стадия использования модели предсказания в облачном хранилище (магазине приложений) с последующим этапом профильной оптимизации, который выполняется на пользовательском устройстве.
Фиг. 15 иллюстрирует десятую возможную последовательность действий обработки, применимую при реализации способа согласно настоящему изобретению; на данной фигуре показана стадия использования модели предсказания и оптимизации программы в облачном хранилище (магазине приложений) с последующим этапом доставки пакета приложения с уже оптимизированным приложением на пользовательское устройство.
Фиг. 16 иллюстрирует упрощенную схему электронного устройства 200 (пользовательского устройства), сконфигурированного для выполнения способа генерации профиля программы на основе ML для профильной оптимизации программы.
Подробное описание вариантов осуществления
Фиг. 1
[0015] Компьютерная программа передается, обрабатывается и хранится в виде по меньшей мере одного программного файла. В данном варианте осуществления программным файлом является файл APK. Однако в других возможных модификациях варианта осуществления программный файл может иметь другое расширение и может иметь вид установочного пакета, установленного файла, архива, файла кода и так далее. Программный файл может быть проанализирован и, при необходимости, декомпилирован для извлечения соответствующих элементов кода. На данном этапе могут использоваться любые синтаксические анализаторы или декомпиляторы (например, дизассемблер Android Runtime от Google (dexdump), дизассемблер файлов класса Java (javap), дизассемблер LLVM (llvm-dis), дизассемблер IL (Ildasm) и т.д.), известные в области техники. Таким образом, один или более элементов кода, извлеченных на этапе S100, могут содержать элементы кода различных типов, включая, но без ограничения, базовые блоки программного обеспечения, методы, классы, функции, процедуры, подпрограммы, модули или пакеты (в зависимости от терминологии используемого языка программирования) или любую их комбинацию. После извлечения одного или более элементов кода на этапе S100 процесс переходит к этапу S105 построения вектора признаков для каждого из упомянутых одного или более элементов кода. Этап S105 может быть использован не только на стадии использования (предсказания), но и на стадии обучения для сбора обучающих данных, т.е. одного или более обучающих элементов кода.
[0016] Этап S105 построения вектора признаков содержит построение векторного представления одного или более элементов кода для получения векторов признаков упомянутых элементов кода. Частным случаем построения векторного представления является эмбеддинг (от англ. «embedding»). Элементы кода могут быть непосредственными элементами кода или их иными представлениями (например, графами, изображениями), обрабатываемыми для извлечения связанных с элементами кода признаков. Неограничивающие примеры методик и алгоритмов векторного представления для построения векторов признаков элементов кода включают: 1) извлечение базовых свойств элементов кода, непосредственно доступных в коде элемента кода и программы в целом, например, количество методов класса; 2) алгоритмы кодирования последовательности токенов, например, кодирование на основе частотности (от англ. «count»), унитарное кодирование (от англ. «one-hot»), TF-IDF (частота слова-обратная частота документа); 3) нейронные сети, такие как модели типа word2vec, двунаправленные RNN, энкодер-декодеры, трансформеры. Вектор признаков может быть дополнительно обработан с использованием одного или более известных методов выбора признаков (например, методы обертывания (от англ. «wrapper»), фильтров (корреляционный анализ, рекурсивное устранение признаков), а также методы, встраиваемые в алгоритмы обучения), и/или методов уменьшения размерности (анализ главных компонентов (PCA), неотрицательное матричное разложение (NMF), линейный дискриминантный анализ (LDA) и другие). Кроме того, для извлечения признаков элемента кода может использоваться синтаксический анализатор, выполненный с возможностью построения абстрактного дерева, которое впоследствии может быть векторизовано. Кроме того, вектор признаков может быть нормализован. Нормализация значений вектора признаков может быть полезной, поскольку основанные на ML модели предсказания зачастую работают лучше, если на вход они получают нормализованные значения. Вышеуказанные опциональные подэтапы этапа S105 обработки могут быть выполнены в любом порядке. Признаки в векторе признаков элемента кода могут быть представлением в векторном пространстве одной или более из следующих сущностей: инструкций, данных, имен и типов, используемых в элементе кода; вложенности, например, имен и типов, используемых в элементе кода; потока управления, связанного с элементом кода; потока данных, связанного с элементом кода; графа вызовов, связанного с элементом кода; метаинформации программы, связанной с элементом кода; совместно используемых библиотек программ, связанных с элементом кода; существующих характеристик производительности программы или одного или более элементов кода, составляющих программу; информации о пользователе, связанной с элементом кода; информации об устройстве, связанной с элементом кода; информации о среде выполнения, связанной с элементом кода и в сущности любым другим элементом кода. Таким образом, уникальная комбинация признаков элемента кода, извлеченная на этапе S100 из элементов кода и их окружения, подвергается векторизации на данном этапе S105.
[0017] Этап S105 позволяет генерировать один или более векторов признаков элементов кода любых программ или приложений, или даже их отдельных частей, что позволяет упростить сбор обучающих данных для стадии обучения основанной на ML модели предсказания, и, в конечном счете, повысить точность предсказаний характеристик производительности элементов кода посредством такой основанной на ML модели предсказания для последующего формирования профиля программы. Кроме того, на этапе использования (предсказания) настоящее изобретение может быть применено для оптимизации программ, которые вообще не имеют предыдущих версий или предыдущих профилей производительности. Данный этап S105 может применяться не только во время стадии использования, но и во время стадии обучения для сбора обучающих данных, т.е. векторов признаков элементов кода, входящих в обучающую выборку. Так как признаки в векторе признаков элемента кода могут представлять в векторном пространстве, помимо других аспектов элементов кода, существующие характеристики производительности программы или одного или более элементов кода, составляющих программу, информацию о пользователе, информацию об устройстве и/или информацию о среде выполнения, может выполняться генерация предсказаний производительности, специфичных для данной программы/пользователя/устройства/среды выполнения (с помощью одной или более основанных на ML моделей предсказания, как будет описано ниже со ссылкой, по меньшей мере, на этап S115), например, в сценарии использования данного способа на устройстве (например, на смартфоне).
фиг. 2
[0018] На  показан неограничивающий пример извлечения признаков. Как показано на фиг. 2, APK файл («.apk») приложения содержит DEX-файл («class.dex»), содержащий код, представляющий классы («class1..classN») и методы («method2..methodN»), используемые в приложении. Эта проиллюстрированная структура файла APK хорошо известна в технике как таковая. Четыре проиллюстрированных вектора признаков построены в неограничивающем примере на фиг. 2, первый (сверху) для «class1», второй для «method2», третий для «method3» и четвертый для «classN». Важно отметить, что пример на фиг. 2 чрезмерно упрощен, т.е. его не следует интерпретировать в ограничивающем смысле, так как в фактической реализации могут иметь место гораздо большее количество элементов кода и, соответственно, результирующих векторов признаков.
Первый класс
бинарными
дискретными
непрерывными
Второй класс
последовательности токенов
[0019] В варианте осуществления используются два класса элементов кода, которые могут быть включены в вектор признаков элемента кода. (1)  содержит базовые свойства элемента кода, непосредственно извлекаемые из кода элемента кода и программы в целом. Признаки этого класса могут быть  (наличие ключевых слов «static», «final» в сигнатуре метода и т.д.),  (количество методов в классе, количество входящих или исходящих аргументов, размер списка инструкций, количество регистров, количество обработок исключений (от англ. «catches»), количество разделителей в типах или именах, т.е. вложенность и т.д.), , т.е. теми признаками, которые могут принимать любое значение на некотором интервале, в противоположность дискретным (например, среднее число методов в классе, среднее количество инструкций в методах и т.д.). Указанные типы признаков первого класса проиллюстрированы в примере на фиг. 2: «false», «true», «public», «2», «0», «3». (2)  предполагает кодирование . Любая часть элемента кода, весь элемент кода, или одна или более совокупностей элементов кода может рассматриваться как упомянутая последовательность токенов, которая может быть векторизована любым из известных способов и алгоритмов, например, основанное на частоте кодирование (унитарное, частотное, TF-IDF) и т.д., а также построение эмбеддингов (от англ. «embedding», векторное представление) (например, взятие представлений одного из слоев обученной модели типа word2vec, двунаправленной RNN, энкодер-декодера, трансформера и т.п.). В проиллюстрированном примере имена и типы классов, методов и параметров и байт-код Dalvik (например, «newArray», «[Ljava/lang/Object;», «arg0», «I», код между тегами <bytecode> и </bytecode> в конкретном примере на фиг. 2) могут рассматриваться как упомянутые последовательности токенов. В случае, когда они обфусцированны они также могут рассматриваться как упомянутые последовательности токенов, но должно быть понятно, что в этом случае качество последующих предсказаний будет уступать качеству предсказаний в случае отсутствия такой обфускации.
[0020] Тем не менее, не следует ограничивать настоящее изобретение вышеупомянутыми классами/типами элементов кода и соответствующими им векторами признаков, поскольку в одной или более модификациях данного варианта осуществления могут использоваться и другие типы признаков и соответствующие методы их векторизации, например: информация байт-кода, векторизуемая с помощью различных способов (например, методами кодирования изображений для операционных кодов (от англ. «opcodes») или байт-кодов в целом); потоки управления, потоки данных, признаки графа вызовов (например, в виде абстрактного синтаксического дерева или графа потока управления с соответствующим видом кодирования графов), статически извлекаемые из программных файлов; признаки, извлекаемые из метаинформации приложения и совместно-используемых библиотек; признаки, извлекаемые из существующей информации о производительности; признаки, извлекаемые из данных о пользователе, устройстве, среде исполнения и так далее. Во время стадии обучения основанной на ML модели предсказания, которая будет подробно описана ниже, могут использоваться все извлеченные признаки или только те признаки, которые дают прирост точности предсказаний и, как следствие, качества программной оптимизации. Реализация такого «отбора» признаков может быть осуществлена посредством использования, например, L1 регуляризации (для линейных моделей) или любого другого подходящего метода.
[0021] Возвращаясь к фиг. 1, как только на этапе S105 построен один или более векторов признаков одного или более элементов кода, способ переходит на этап S110 предсказания характеристик производительности для каждого из одного или более элементов кода путем прогона соответствующего вектора признаков через по меньшей мере одну основанную на ML модель предсказания из одной или более основанных на ML моделей предсказания, обученных предсказанию характеристик производительности для элементов кода. В одном неограничивающем примере алгоритм машинного обучения Random Forest может быть использован обучения и реализации упомянутой одной или более основанных на ML моделей предсказания. В других неограничивающих примерах упомянутые одна или более основанных на ML моделей предсказания могут быть обучены и реализованы как искусственные нейронные сети, классические ML-модели обучения с учителем (линейная и логистическая регрессия, Naïve Bayes, Decision Tree, SVM и т.д.), другие ансамблевые модели (бустинг (boosting) и бэггинг (bagging)), или как их комбинация. Вероятность исполнения элемента кода по меньшей мере некоторое предопределенное количество раз (то есть, является ли данный элемент кода «горячим») предсказывается как характеристика производительности элемента кода на этапе S110 согласно данному варианту осуществления способа. Однако различные другие типы характеристики производительности могут в равной степени использоваться в качестве предсказываемой характеристики производительности кодового элемента в одном или более других вариантах осуществления, например, время, затрачиваемое на исполнение элемента кода; количество исполнений и места вызова элемента кода; объем памяти, выделяемый и используемый во время исполнения элемента кода; мощность, потребляемая во время исполнения элемента кода; загрузка процессора, распараллеливание, поток сообщений/событий, информация о девиртуализации и кэшировании, связанных с исполнением элемента кода; информация об иерархии элементов кода; сведения о том, как часто используется конкретная ветвь инструкции управления конкретного элемента кода; сведения об одной или более программных переменных в программе, сведения о количестве итераций повторяющейся программной структуры, выполняемых конкретным элементом кода, а также информация о значениях управляющих переменных повторяющейся программной структуры элемента кода.
[0022] Для различных типов предсказываемых характеристик задача построения по ним профиля может выглядеть немного по-разному, и то, что нужно в профиле для оптимизации, также будет зависеть от типов предсказываемых характеристик. Например, для задач оптимизации распараллеливания или кеширования профиль может быть похожим на профиль текущей задачи: список выбранных элементов кода (которые будут выполняться на GPU или результаты которых будут кешироваться для оптимизации). Такая модель обучается как классификатор (есть потенциал распараллелить выполнение элемента кода или нет; надо кешировать результат работы элемента кода или нет) и выдает некоторую вероятность. В профиль добавляются те элементы, у которых эта вероятность превышает пороговое значение. Для задач оптимизации, для которых потребуется, например, предсказать поток сообщений или места вызовов элементов кода, профиль может выглядеть по-другому. Не нужно будет выбирать элементы кода, а, например, каждому элементу сопоставить список других элементов кода, которые вызывают исходный элемент кода. Здесь тоже может работать классификатор (вызывается ли исходный элемент кода из данного или нет) и нужно будет выбрать пороговое значение предсказанной вероятности. Или здесь может работать sequence2sequence нейронная сеть, которая одной последовательности (элемент кода) ставит в соответствие другую (список элементов кода, вызывающих исходный). Но в профиле будут все элементы кода - каждому из них будет сопоставлен выбранный список.
[0023] В альтернативном варианте осуществления способа для каждой программы обучается и используется отдельная основанная на ML модель предсказания. В еще одном альтернативном варианте осуществления способа для каждой предсказываемой характеристики производительности кодового элемента обучается и используется отдельная основанная на ML модель предсказания. Однако в других вариантах осуществления способа потенциально для всех программ может быть использована только одна основанная на ML модель предсказания или одна основанная на ML модель предсказания может использоваться для предсказания двух или более предсказываемых характеристик производительности кодовых элементов. В варианте осуществления способа одна основанная на ML модель предсказания обучается и используется для всех типов элементов кода (например, классов, методов и т.д.). Однако в других вариантах осуществления способа может быть использован каскад основанных на ML моделей предсказания, сначала предсказывающих характеристики производительности классов, затем методов и так далее. В общем, в ансамбле моделей предсказания разными моделями выполняются одновременно, а затем происходит агрегирование полученных предсказаний в одно агрегированное предсказание. Альтернативно, предпредсказанные характеристики производительности элементов кода могут быть получены каскадом основанных на ML моделей предсказания, когда сначала выполняются предсказания для некоторых элементов кода (например, классов), а затем эти предсказания используются в качестве признаков для других элементов кода (например, методов). Каскады имеют смысл, когда существует какая-то иерархия между элементами кода, например, различные методы принадлежат к разным классам. Заранее невозможно сказать, каскад или ансамбль моделей будет работать лучше, например, с точки зрения точности предсказанных характеристик производительности элементов кода. Кроме того, каскад или ансамбль моделей могут быть объединены: каскад может включать ансамбль, или ансамбль может включать каскад и т.д.
[0024] Характеристики производительности, предсказываемые на этапе S110 раскрытого способа, по меньшей мере частично, основаны на реальных пользовательских вводах (переданных или в некотором смысле «учтенных» при обучении одной или более основанных на ML моделей предсказания на обучающих выборках, содержащих такие реальные пользовательские вводы). Таким образом, такие предсказанные характеристики производительности потенциально являются более точными, чем при только статическом анализе/эвристиках. Процесс предсказания на этапе S110 может быть выполнен в любой момент, когда доступен программный код. Таким образом, возможно избежать задержки, вызванной необходимостью предварительного сбора информации о производительности. Кроме того, конфиденциальность пользователя может быть гарантирована, поскольку предсказание характеристик производительности может быть выполнено на пользовательском устройстве (т.е. без передачи какой-либо информации из пользовательского устройства вовне). Наконец, предсказания характеристик производительности, которые генерируются на основе отдельных моделей для каждой программы или типа элемента кода, являются более точными.
[0025] После того, как характеристики производительности предсказаны на этапе S110, способ переходит на этап S115 генерации профиля программы для программы на основе предсказанных характеристик производительности одного или более элементов кода. Профиль программы содержит, например, в виде списка, элементы кода, для которых предсказанные характеристики производительности превышают пороговое значение. В варианте осуществления способа соответствующие пороговые значения для различных предсказываемых характеристик производительности предопределяются при обучении соответствующих основанных на ML моделей предсказания. Например, во время обучения и валидации может быть выбрано такое пороговое значение, которое оптимизирует метрику качества модели (например, точность, полноту, F-меру или любую другую метрику качества классификации) или некоторую характеристику производительности, например, время запуска, используемую память и т.д. Альтернативно, пороговое значение может быть предопределено независимо от обучения конкретной основанной на ML модели предсказания. Например, может быть выбрано пороговое значение, которое соответствует конкретному количеству или соотношению элементов кода, выбираемых для включения в профиль. Более конкретно, если в профиль желательно включать, скажем, 1000 (или, например, 10% от общего количества) классов, пороговое значение может быть найдено так, чтобы количество классов с предсказанной вероятностью выше этого порогового значения составляло 1000 классов (или, например, 10%). В качестве неограничивающих примеров, пороговые значения могут быть определены во время обучения или установлены отдельно для некоторых программ или групп программ для обеспечения лучшего качества профиля.
фиг. 3
[0026] На  показан график, иллюстрирующий, какие элементы кода выбираются для включения в генерируемый профиль на основе порогового значения предсказаний производительности для классификационных задач. Для других типов задач могут иметь место другие характеристики производительности, которые потребуют другого типа предсказания, например, регрессии. В этом случае этап выбора может отсутствовать. В этом случае в профиль могут включаться все элементы кода с предсказанными моделью характеристиками. Возможна и другая ситуация: например, необходимо оптимизировать элементы кода, которые очень долго выполняются. Тогда может предсказываться время выполнения (например, в секундах), а потом в профиль могут помещаться все элементы, для которых предсказанное значение выше порогового значения. То есть для задач регрессии тоже может использоваться пороговое значение. В общем случае предсказание осуществляется на основе векторов признаков всех извлеченных элементов кода, поэтому профиль должен содержать все предсказания. На фиг. 3 для выбора элементов кода используется предопределенное пороговое значение. Должно быть понятно, что несмотря на то, что на фиг. 3 показано лишь одно пороговое значение, таких предопределенных пороговых значений может быть множество, например разным типам элементов кода (т.е. предсказанным для них характеристикам производительности) могут соответствовать соответствующие разные пороговые значения. Как показано на фиг. 3, для включения в профиль программы на этапе S115 выбираются те элементы кода, для которых предсказанные характеристики производительности превышают пороговое значение. В альтернативном варианте осуществления, который на фиг. 3 не показан, в формируемый профиль могут включаться все элементы кода с соответствующими им предсказанными характеристиками производительности. В этом альтернативном варианте осуществления пороговое значение не используется. Выбранные элементы кода, например, в виде списка, могут быть переданы в модуль генерации профиля, например, profman для Android Runtime, выполненный с возможностью генерирования профиля программы. В альтернативном варианте осуществления профиль может быть составлен из самих предсказаний. В другом примере результатом этапа S115, показанного на фиг. 1, может быть, но без ограничения, файл оптимизации программы компилятором (от англ. «profile-guided optimization, PGO») для компиляторов gcc и clang. В еще одном варианте осуществления может быть предусмотрен модуль преобразования предсказаний в нужный формат (то есть, генерации профиля) под конкретный компилятор. Такой модуль может быть написан на любом подходящем языке программирования в зависимости от формы предсказаний, требований к профилю определенного компилятора или от других характеристик предсказаний или компилятора.
[0027] Таким образом, иерархическое (т.е. каскадное, например, сначала классы, затем методы, как описано выше) построение профиля может быть использовано для статической профильной оптимизации элементов кода. Для генерации профиля не требуется выполнение программного кода или инструментирование кода, что является еще одним преимуществом данного подхода.
фиг. 1,
[0028] Возвращаясь к после того как профиль программы сгенерирован на этапе S115 для подлежащей оптимизации программы, способ переходит на этап S120 выполнения оптимизации программы на основе, по меньшей мере, сгенерированного профиля для данной программы. Таким образом, сгенерированный профиль программы может предоставить компилятору информацию о том, какие элементы кода следует компилировать заранее. В качестве альтернативы, сгенерированный профиль программы может быть использован для оптимизации программы другими способами. Например, профиль программы может использоваться для более продвинутых методов оптимизации, чем компиляция перед исполнением (от англ. «ahead-of-time»), например, в качестве подсказок для компилятора, следует ли встраивать (от англ. «inline») элементы кода; профили времени выполнения могут использоваться для обнаружения критических изменений производительности в системе непрерывной интеграции (от англ. «Continuous Integration, CI»); профили памяти можно использовать для прогнозирования ошибок, связанных с недостаточностью памяти (от англ. «out-of-memory»); профили мощности могут использоваться для маркировки изменений для тестирования энергопотребления в системе CI; профили использования процессора могут использоваться для прогнозирования нагрузки на сервер и определения того, когда требуется обновление; предсказания возможности параллельного исполнения могут использоваться для эффективного распределения заданий между процессорами; поток сообщений/событий может использоваться для обнаружения критических источников событий и/или состояний, где требуется оптимизация производительности; предсказания кэширования могут использоваться в функциональных языках программирования для определения того, когда кэшировать результат функции, и в файловой системе для определения того, когда конкретный блок файла должен быть кэширован; прогнозы частоты выполнения ветвей могут использоваться для обновления данных PGO для более новой версии приложения без сбора новых данных PGO.
[0029] Ниже описаны некоторые модификации вышеописанного варианта осуществления способа. Каждая основанная на ML модель предсказания (используемая на этапе S110) из одной или более основанных на ML моделей предсказания может быть обучена для предсказания характеристик производительности одного типа элементов кода из множества типов элементов кода, а характеристики производительности каждого типа элементов кода предсказываются с помощью соответствующей основанной на ML модели предсказания.
под конкретную программу
под работу с конкретным типом элементом кода
[0030] Способ может дополнительно содержать, при предсказании на этапе S110 характеристик производительности для элементов кода, выбор по меньшей мере одной основанной на ML модели предсказания из одной или более основанных на ML моделей предсказания, которая обучена , которая в настоящий момент подлежит оптимизации. Кроме того или в качестве альтернативы способ может содержать, при предсказании на этапе S110 характеристик производительности для элементов кода, выбор по меньшей мере одной основанной на ML модели предсказания из одной или более основанных на ML моделей предсказания, которая обучена , характеристика(и) производительности которого должна быть спрогнозирована в настоящий момент.
[0031] Упомянутая по меньшей мере одна основанная на ML модель предсказания, используемая для предсказания, на этапе S110, характеристик производительности одного или более элементов кода, может быть ансамблевой основанной на ML моделью предсказания или каскадом (т.е. последовательностью) основанных на ML моделей предсказания.
[0032] В ансамблевой модели несколько отдельно обученных моделей генерируют предсказания, которые затем агрегируются. Например, алгоритм машинного обучения Random Forest может быть применен для формирования ансамбля деревьев решений, который может состоять из различных моделей. В качестве альтернативы, можно взять две разные по архитектуре модели (например, Random Forest и логистическую регрессию) и объединить их в ансамбль. Ансамбли моделей предсказания обычно дают лучшие результаты, с точки зрения метрики качества модели, например, точности, полноты, F-меры и т.д., чем одиночные модели, поскольку ошибки в предсказаниях разных моделей в ансамбле моделей предсказания могут компенсироваться предсказаниями других моделей из упомянутого ансамбля. Для каскада основанных на ML моделей предсказания каждая модель может быть обучена работе с одним типом обрабатываемых элементов кода.
соответствие
[0033] Таким образом, способ может дополнительно содержать этапы агрегирования (например, посредством усреднения) векторов признаков, построенных на этапе S105, вычисления меры подобия между агрегированными векторами признаков (т.е. агрегированными признаками, подлежащими обработке на этапе S110 раскрытого способа во время стадии использования) и различными наборами агрегированных векторов признаков элементов кода, где каждый набор из различных наборов агрегированных векторов признаков элементов кода получен ранее при обучении соответствующей одной основанной на ML модели предсказания. В результате может быть определено  (например, наилучшее соответствие или наилучшее частичное соответствие) между конкретным набором из различных наборов агрегированных векторов признаков и конкретной моделью предсказания на основе ML, которая была обучена с использованием векторов, агрегированных в данный конкретный набор. Следовательно, модель может быть выбрана с помощью агрегированных векторов признаков, но для каждой программы может быть построен другой вектор признаков, который будет сравниваться с векторами других программ и использоваться для выбора модели.
[0034] В альтернативных вариантах осуществления основанная на ML модель предсказания из множества таких обученных моделей может быть выбрана каким-либо другим способом, не основанным на векторах признаков. В качестве примеров, может быть применено правило, что для приложений одного типа (например, мессенджеров или приложений от одного производителя) используется одна конкретная основанная на ML модель предсказания, для приложений другого типа (например, игр или приложений от другого производителя) - другая конкретная основанная на ML модель предсказания, и так далее.
[0035] После вычисления меры подобия для каждой пары агрегированных векторов признаков (во время стадии использования) и каждого из различных наборов агрегированных векторов признаков (из обучающей выборки), по меньшей мере одна основанная на ML модель предсказания может быть выбрана из одной или более основанных на ML моделей предсказания на основании вычисленной меры подобия. Другими словами, может быть выбрана основанная на ML модель предсказания, обученная на векторах признаков, которые являются наиболее похожими на вектора признаков, обрабатываемые в настоящее время во время стадии использования. Мера подобия может быть основана на векторной мере подобия (такой как коэффициент подобия Dice, Жаккардово расстояние, косинусная близость, евклидово расстояние и т.д.) или на мерах подобия графов или изображений, или их комбинации. Необходимо отметить, что не во всех вариантах осуществления настоящего изобретения предусмотрено вычисление меры подобия, т.е. такое вычисление может применяться только при необходимости выбора модели предсказания, наилучшим образом подходящей для определенной конкретной ситуации во время стадии использования. В варианте осуществления, в котором используется, например, универсальная одиночная модель, универсальная ансамблевая модель или универсальный каскад моделей, в описанном выше вычислении меры подобия нет необходимости.
фиг. 4
[0036] Различные последовательности действий обработки (альтернативно называемые структурами модели работы) могут быть реализованы для осуществления способа, раскрытого в настоящем описании. На проиллюстрирована первая возможная последовательность действий обработки, применимая при реализации способа согласно настоящему изобретению. На данной фигуре показана как стадия обучения (верхняя часть фигуры) моделей предсказания, так и стадия использования (нижняя часть фигуры) ансамблевой модели предсказания, полученной в результате обучения. В показанной первой последовательности действий обработки различные основанные на ML модели предсказания обучаются для каждого еще неоптимизированного приложения в обучающем наборе данных с использованием по меньшей мере соответствующих эталонных профилей 1...N. Обучение основанных на ML моделей предсказания здесь и далее осуществляется таким образом, чтобы минимизировать ошибку классификатора на тестовой выборке, или выборке (от англ. «hold-out sample»), которая не вошла в обучающий набор данных. При обучении Random Forest может быть использован индекс Джини, Gini index (impurity), один из классических вариантов оценки качества разбиения одного узла дерева. При выборе модели максимизируются метрики качества классификации, которые были описаны выше. Эталонные профили могут быть получены различными способами, например, но без ограничения: 1) из Google Play (как профили для текущей версии приложения, так и для прошлых, если они существуют), 2) с устройства (например смартфона), на котором имеется представляющее интерес приложение и оно использовалось тем или иным образом (например, реальным пользователем или тестировщиком или автоматическим скриптом). Данное обучение является обучением с учителем. Если используется глубокое обучение, которое может применяться в альтернативном варианте осуществления, тогда для обучения могут быть применены стандартные функции потерь для классификации (например, кросс-энтропия). Затем различные основанные на ML модели предсказания, когда обучены, объединяются в ансамблевую основанную на ML модель предсказания, используемую для последующего предсказания во время стадии использования. Частные случаи стадии использования, которая показана в общих чертах на фиг. 4, проиллюстрированы на фиг. 5-6. Частные случаи стадии использования, проиллюстрированные на фиг. 5-6, могут быть рассмотрены как альтернативные реализации стадии использования.
Фиг. 5
[0037]  иллюстрирует первую альтернативную реализацию стадии использования первой возможной последовательности действий обработки, применимую для формирования профиля программы согласно настоящему изобретению. На данной фигуре показана стадия использования модели предсказания, которую выбирают согласно извлеченным признакам кодовых элементов. В проиллюстрированной на фиг. 5 первой альтернативной реализации стадии использования ближайшая основанная на ML модель предсказания из ансамбля основанных на ML моделей предсказания выбирается с помощью сравнения агрегированных векторов признаков (с помощью выбранной меры подобия, как описано выше), и предсказание характеристик производительности выполняется выбранной основанной на ML моделью предсказания. Обучение основанных на ML моделей предсказания, из которых выбирают одну, используемую для предсказания, как показано на фиг. 5, может проводиться аналогично обучению, описанному выше со ссылкой по меньшей мере на фиг. 4.
Фиг. 6
[0038] иллюстрирует вторую альтернативную реализацию стадии использования первой возможной последовательности действий обработки, применимую для формирования профиля программы согласно настоящему изобретению. На данной фигуре показана стадия использования различных моделей (1..N) предсказания с последующей агрегацией их предсказаний. Обучение основанных на ML моделей предсказания, показанных на фиг. 6, может проводиться аналогично обучению, описанному выше со ссылкой по меньшей мере на фиг. 4. В проиллюстрированной на фиг. 6 второй альтернативной реализации ансамблевое предсказание, например, усредненное предсказание или взвешенное предсказание, производится на основе характеристик производительности, предсказанных для одной программы различными основанными на ML моделями предсказания, которые агрегируются.
Фиг. 7
[0039]  иллюстрирует вторую возможную последовательность действий обработки, применимую при реализации способа согласно настоящему изобретению; на данной фигуре показана как стадия обучения универсальной модели предсказания, так и стадия использования этой модели предсказания. Вторая возможная последовательность действий обработки отличается от первой возможной последовательности действий обработки, показанной на фиг. 4, тем, что одна основанная на ML модель предсказания обучается для всех приложений в обучающем наборе данных. Такую модель можно считать универсальной в смысле работы со всеми приложениями. Обучение основанной на ML модели предсказания, показанной на фиг. 7, может проводиться аналогично обучению, описанному выше со ссылкой по меньшей мере на фиг. 4.
Фиг. 8
[0040]  иллюстрирует третью возможную последовательность действий обработки, применимую при реализации способа согласно настоящему изобретению; на данной фигуре показана как стадия обучения разных моделей под разные типы кодовых элементов, так и стадия их использования с объединением в каскад моделей или ансамблевую модель. Каскад моделей также может быть рассмотрен в качестве единой каскадной модели. Как проиллюстрировано на фиг. 8, для каждого типа элементов кода обучается отдельная основанная на ML модель предсказания. На фиг. 8 показан пример, когда отдельные основанные на ML модели предсказания обучаются для классов и методов, однако ограничивать настоящее изобретение этими типами кодовых элементов не следует, поскольку отдельные основанные на ML модели предсказания могут обучаться для любых других, раскрытых в данной заявке, типов элементов кода. Затем основанные на ML модели предсказания для каждого из типов элементов кода могут быть объединены в каскадную основанную на ML модель предсказания или ансамблевую основанную на ML модель предсказания. Должно быть понятно, что может обучаться и объединяться в каскад или ансамбль более двух основанных на ML моделей предсказания для типов элементов кода, выбранных в числе более двух. В качестве альтернативы, одна основанная на ML модель предсказания может быть обучена для всех типов элементов кода (данная альтернатива не проиллюстрирована). Такую модель можно считать универсальной в смысле работы со всеми типами элементов кода. Обучение основанных на ML моделей предсказания, показанных на фиг. 8, может проводиться аналогично обучению, описанному выше со ссылкой по меньшей мере на фиг. 4.
Фиг. 9
[0041] иллюстрирует четвертую возможную последовательность действий обработки, применимую при реализации способа согласно настоящему изобретению; на данной фигуре показана как стадия обучения модели предсказания на сервере сборки встроенного программного обеспечения, так и стадия ее использования на пользовательском устройстве. В четвертой возможной последовательности действий обработки основанную на ML модель предсказания заранее обучают на сервере сборки встроенного программного обеспечения (ПО) для определенного пользовательского устройства и поставляют на пользовательское устройство вместе с образом встроенного ПО (от англ. «firmware»). Доставка обученной модели предсказания и/или сборки встроенного ПО может быть осуществлена любым способом. Сборка встроенного программного обеспечения (ПО) для определенного пользовательского устройства может осуществляться любым используемым в уровне техники способом. Обучение основанной на ML модели предсказания, показанное в верхней части фиг. 9, может проводиться аналогично обучению, описанному выше со ссылкой по меньшей мере на фиг. 4. Единственным отличием показанного на фиг. 9 обучения от обучения, показанного на фиг. 4, является то, что такое первое обучение выполняется не на том же устройстве, на котором осуществляется стадия использования, а на другом (на упомянутом сервере). После того, как встроенное ПО доставлено на пользовательское устройство, основанную на ML модель предсказания используют на пользовательском устройстве для генерации профиля и последующего выполнения оптимизации программы с помощью сгенерированного профиля. Профили могут быть предсказаны для любых приложений, будь то предустановленные или загруженные из хранилища приложений. Таким образом, приложения могут быть скомпилированы на основе профилей, предсказанных на пользовательском устройстве.
Фиг. 10
[0042] иллюстрирует пятую возможную последовательность действий обработки, применимую при реализации способа согласно настоящему изобретению; на данной фигуре показана как стадия обучения модели предсказания на сервере сборки встроенного программного обеспечения, так и стадия ее дообучения и использования на пользовательском устройстве. Пятая возможная последовательность действий обработки отличается от четвертой последовательность действий обработки тем, что на пользовательском оборудовании дополнительно выполняется (опциональный) этап дообучения основанной на ML модели предсказания, предварительно обученной на сервере сборки встроенного ПО. Этап дообучения может выполняться на основе профилей, которые были получены на пользовательском устройстве при использовании различных других приложений или других версий одного и того же приложения. Этап дообучения может выполняться, например, после доставки на пользовательское устройство основанной на ML модели предсказания, но перед ее фактическим использованием для предсказания характеристик производительности элементов кода программы, подлежащей оптимизации. В одном неограничивающих примеров, имея файл.apk приложения и соответствующие профили на конкретном устройстве в качестве входных данных модели, на пользовательском устройстве запускается дообучение с возможными дополнительными или измененными параметрами, например, может быть применен теплый старт (от англ. «warm start»), адаптированная регуляризация и т.д. Предварительное обучение основанной на ML модели предсказания, которую затем дообучают на пользовательском устройстве, как показано на фиг. 10, может проводиться аналогично обучению, описанному выше со ссылкой по меньшей мере на фиг. 4.
Фиг. 11
[0043] иллюстрирует шестую возможную последовательность действий обработки, применимую при реализации способа согласно настоящему изобретению; на данной фигуре показана как стадия обучения модели предсказания, так и стадия ее использования на пользовательском устройстве. Шестая возможная последовательность действий обработки отличаются от четвертой или пятой последовательности действий обработки тем, что основанную на ML модель предсказания полностью обучают на пользовательском устройстве. В шестой возможной последовательности действий обработки встроенное ПО, поставляемое с сервера сборки встроенного ПО (не проиллюстрирован на фиг. 11), может дополнительно включать в себя обучающий набор данных. В альтернативных реализациях обучающий набор данных (например, множество приложений и соответствующих им эталонных профилей) может загружаться из других источников или даже собираться самим пользовательским устройством. Обучение основанной на ML модели предсказания на пользовательском устройстве, как показано на фиг. 11, может проводиться аналогично обучению, описанному выше со ссылкой по меньшей мере на фиг. 4.
Фиг. 12
[0044] иллюстрирует седьмую возможную последовательность действий обработки, применимую при реализации способа согласно настоящему изобретению; на данной фигуре показана стадия использования модели предсказания на сервере сборки встроенного программного обеспечения с последующим этапом профильной оптимизации, который выполняется на пользовательском устройстве. В седьмой возможной последовательности действий обработки одна или более основанных на ML моделей предсказания обучаются и хранятся на сервере сборки встроенного ПО (стадия фактического обучения на фиг. 12 не показана), затем на упомянутом сервере, используя одну или более основанных на ML моделей предсказания, предсказываются характеристики производительности элементов кода для программ, которые подлежат включению в сборку встроенного ПО, которая подлежит доставке в пользовательское устройство. После того, как сборка сформирована, она доставляется в пользовательское устройство любым известным способом. Затем, пользовательское устройство может выполнять основанную на предварительно предсказанном профиле оптимизацию для любой программы, которая была включена в сборку встроенного ПО, которая доставлена с сервера сборки встроенного ПО. В седьмой возможной последовательности действий обработки предварительно предсказанный профиль может быть доступен до первого запуска предустановленных приложений на пользовательском устройстве, следовательно, основанная на таком профиле оптимизация может быть выполнена на пользовательском устройстве перед первым запуском, поэтому приложение оптимизируется, а пользователь получает улучшенную производительность уже при первом запуске. Обучение (не показанное на фиг. 12) основанной на ML модели предсказания на сервере сборки встроенного ПО может проводиться аналогично обучению, описанному выше со ссылкой по меньшей мере на фиг. 4.
Фиг. 13
[0045] иллюстрирует восьмую возможную последовательность действий обработки, применимую при реализации способа согласно настоящему изобретению; на данной фигуре показана стадия использования модели предсказания и оптимизации программы на сервере сборки встроенного программного обеспечения с последующим этапом доставки сборки с уже оптимизированным приложением на пользовательское устройство. Восьмая возможная последовательность действий обработки отличается от седьмой возможной последовательности действий обработки тем, что профильная оптимизация выполняется на сервере сборки встроенного ПО, а уже оптимизированное приложение или его установочный пакет включается в сборку, доставляемую на пользовательское устройство. Таким образом, пользовательское устройство получает от сервера сборки встроенного ПО уже оптимизированное приложение или его установочный пакет. Как и в седьмой возможной последовательности действий обработки пользователь получает улучшенную производительность приложения из доставленной сборки встроенного ПО уже при первом запуске. Обучение (не показанное на фиг. 13) основанной на ML модели предсказания на сервере сборки встроенного ПО может проводиться аналогично обучению, описанному выше со ссылкой по меньшей мере на фиг. 4.
Фиг. 14
[0046] иллюстрирует девятую возможную последовательность действий обработки, применимую при реализации способа согласно настоящему изобретению; на данной фигуре показана стадия использования модели предсказания в облачном хранилище (магазине приложений) с последующим этапом профильной оптимизации, который выполняется на пользовательском устройстве. В девятой возможной последовательности действий обработки одна или более основанных на ML моделей предсказания обучается (не показано на фиг. 14) на одном или более серверах, на которых размещено хранилище приложений (например магазин приложений). Обучение моделей предсказания на упомянутом сервере ПО может проводиться аналогично обучению, описанному выше со ссылкой по меньшей мере на фиг. 4. Далее, на упомянутом одном или более серверах может выполняться предсказание характеристик производительности, используя одну или более обученных основанных на ML моделей предсказания, и формирование профилей приложений для различных приложений, доступных в хранилище приложений. Сформированные профили приложений включаются в соответствующие пакеты приложений, загружаемые пользовательскими устройствами из хранилища приложений. После загрузки пакета приложения на пользовательское устройство оптимизация, основанная на таком профиле, подготовленном на упомянутом одном или более серверах, может быть выполнена на самом пользовательском устройстве.
Фиг. 15
[0047] иллюстрирует десятую возможную последовательность действий обработки, применимую при реализации способа согласно настоящему изобретению; на данной фигуре показана стадия использования модели предсказания и оптимизации программы в облачном хранилище (магазине приложений) с последующим этапом доставки пакета приложения с уже оптимизированным приложением на пользовательское устройство. Десятая возможная последовательность действий обработки отличается от девятой возможной последовательности действий обработки тем, что профильная оптимизация выполняется на одном или более серверах, на которых размещено хранилище приложений, и поэтому на пользовательское устройство из хранилища приложений загружается уже оптимизированное приложение или его установочный пакет. Таким образом, улучшенная производительность достигается уже при первой загрузке приложения.
[0048] Несмотря на то, что со ссылкой на фигуры 4-15 проиллюстрированы конкретные примеры последовательностей действий обработки, реализуемых раскрытым изобретением, их не следует интерпретировать в качестве ограничений настоящего изобретения, поскольку после ознакомления с проиллюстрированными примерами последовательностей обычному специалисту в данной области станут очевидны другие (явным образом не показанные) варианты таких последовательностей, которые могут быть в равной степени реализованы, не выходя за рамки объема и сути настоящего изобретения.
Фиг. 16
[0049] иллюстрирует упрощенную схему электронного (вычислительного) устройства 200, сконфигурированного для выполнения способа согласно фиг. 1, в том числе любых раскрытых модификаций или усовершенствований, или последовательности действий обработки. Электронное устройство 200 содержит процессор 210 и память 220. В памяти 220 хранится одна или более основанных на ML моделей 220.1 предсказания, обученных предсказывать характеристики производительности элементов кода. Упомянутая одна или более основанных на ML моделей 220.1 предсказания может храниться в памяти 220 в виде по меньшей мере весов и параметров, полученных в ходе предыдущего обучения. Память 220 дополнительно содержит исполняемые компьютером инструкции 220.2, которые побуждают процессор 210 выполнять любой аспект способа, как описано выше, используя по меньшей мере одну или более основанных на ML моделей предсказания. Электронное устройство 200 может представлять собой, но без ограничения упомянутыми устройствами, смартфон, планшет, смарт-часы, смарт-очки, ПК, ноутбук, информационно-развлекательную систему в автомобиле или, по меньшей мере, ее вычислительную/обрабатывающую часть.
[0050] Электронное устройство 200 или любое другое вычислительное устройство может быть дополнительно оснащено нейронным процессором (NPU), графическим процессором (GPU), цифровым сигнальным процессором (DSP) для ускорения обработки, связанной с машинным обучением. Электронное устройство 200 может включать в себя более одного процессора (данный вариант на фиг. 16 не показан). Процессор 210 может представлять собой процессор общего назначения, такой как центральный процессор (CPU), процессор прикладных программ (AP) или тому подобное, графический процессор, такой как графический процессор (GPU), процессор обработки визуальной информации (VPU) и/или процессор, предназначенный для искусственного интеллекта, такой как нейронный процессор (NPU). Любой из вышеперечисленных процессоров может быть реализован в виде специализированной интегральной схемы (ASIC), программируемой вентильной матрицы (FPGA). Система на кристалле (SoC) также возможна в качестве аппаратной архитектуры процессора 210. Память 220 может содержать любые типы памяти (например, ROM, RAM, флэш-память и т.д.). Электронное устройство 200 может дополнительно содержать любые другие компоненты, которые традиционно включаются в смартфоны, например, блок ввода/вывода (дисплей с сенсорным экраном, клавишную панель, кнопки, микрофон, динамик(и) и т.д.), одну или более камер, блок связи (например, 3G, LTE, 5G, Bluetooth, Wi-Fi, WiMax и т.д.) и так далее.
[0051] Предлагаемый способ также может быть реализован на считываемом компьютером носителе, на котором сохранены исполняемые компьютером инструкции, которые при исполнении обрабатывающим или вычислительным блоком любого устройства заставляют это устройство выполнять любой этап (этапы) раскрытого способа. Любые типы данных могут обрабатываться интеллектуальными системами, обученными с использованием вышеописанных подходов. Этап обучения может выполняться онлайн или оффлайн. Обученные нейронные сети (в виде весов и других параметров/исполняемых компьютером инструкций) или любые модели ML (AI) могут быть переданы пользовательскому устройству и сохранены на нем для использования во время стадии использования (при предсказании) любыми известными способами.
[0052] Некоторые этапы раскрытого способа могут быть реализованы с помощью модели ИИ. Функция, связанная с моделью ИИ, может выполняться с использованием, по меньшей мере, памяти 220 и процессора 210. Процессор управляет обработкой входных данных в соответствии с заранее определенным правилом работы или моделью искусственного интеллекта (ИИ), хранящейся в памяти 220. Заранее определенное операционное правило или модель искусственного интеллекта предоставляется посредством обучения. Здесь, «предоставление посредством обучения» означает, что, применяя раскрытый алгоритм обучения к множеству обучающих данных, обеспечивается определенное рабочее правило или модель ИИ с желаемой характеристикой (характеристиками). Как уже было описано выше, стадия обучения и по меньшей мере частично стадия использования могут быть выполнены в самом устройстве 200, в котором выполняется ИИ согласно варианту осуществления, и/или может быть реализовано на удаленном сервере/системе.
[0053] ИИ модель может состоять из множества слоев нейронной сети. Каждый слой имеет множество весовых коэффициентов и выполняет операцию слоя путем вычисления предыдущего слоя и операции с множеством весовых коэффициентов. Примеры нейронных сетей включают, но без ограничения упомянутыми, сверточные нейронные сети (CNN), глубокие нейронные сети (DNN), рекуррентные нейронные сети (RNN), ограниченные машины Больцмана (RBM), глубокие сети доверия (DBN), двунаправленные рекуррентные глубокие нейронные сети (BRDNN), генеративные состязательные сети (GAN) и глубокие Q-сети. Модель ИИ также может быть классической моделью ML.
[0054] Алгоритм обучения является способом обучения модели, который использует множество обучающих данных, чтобы вызвать, разрешить или контролировать выполнение моделью операций определения или предсказания. Примеры алгоритмов обучения включают, но не ограничиваются ими, обучение с учителем, обучение без учителя, обучение с частичным привлечением учителя или обучение с подкреплением и так далее.
Промышленная применимость
[0055]
Расширенная профильная оптимизация программ для большей оптимизации производительности.
[0056] В дополнение к основному применению настоящей технологии, т.е. профильной оптимизации программ с использованием профилей, сгенерированных с помощью машинного обучения (ML), настоящая технология может также применяться, по меньшей мере, в следующем.  Ускорение может быть достигнуто при запуске с помощью выборочной предварительной компиляции. Профили могут быть использованы для достижения ускорения и на других этапах использования программ, например, в разных фазах нормальной работы (от англ. «steady state») и при закрытии приложения (от англ. «shutdown»). Профили могут указывать, какие элементы кода должны быть оптимизированы во время компиляции. Альтернативно, профили могут предоставлять информацию о том, какой конкретный метод оптимизации компилятора следует использовать (например, распределение памяти/регистров (от англ. «memory/register allocation»), встраивание (от англ. «inlining»), компоновка (от англ. «layout»).
Средства разработки.
Разработка статической спецификации:
[0057]  Предсказанные профили могут использоваться для предоставления подсказок компилятору, какие элементы кода нужно инструментировать. Предсказанные профили могут использоваться как по меньшей мере часть отчета статического анализа. Кроме того, раскрытая технология может быть использована для ранжирования отчетов об ошибках, создаваемых статическими анализаторами: ошибки в более важных (например, часто выполняемых) элементах кода могут быть приоретизированы.  вывод формальных описаний правильного поведения программы. Поведение, которое имеет место много раз, может рассматриваться в качестве правильного, а отклонения от упомянутого поведения могут указывать на ошибки.
[0058] Наконец, преимущества (которые не обязательно достигаются все сразу в конкретном варианте осуществления), реализуемые настоящим изобретением, перечисляются ниже еще один раз. Методика или алгоритм векторного представления элемента кода позволяют извлекать признаки из элементов кода любой программы. Таким образом, настоящая технология может быть применена к программам, которые не имеют предыдущих версий или предыдущих программных профилей. Кроме того, свойства пользовательского устройства, среды исполнения и существующая информация о производительности могут быть векторизованы в качестве признаков. Поэтому, например, в сценарии предсказания на устройстве могут быть сделаны предсказания, специфичные для конкретного пользователя.
[0059] Генерация профилей программ с использованием предсказания характеристик производительности элементов кода на основе ML повышает точность предсказанных характеристик производительности, поскольку предсказанные характеристики производительности в некоторой степени основаны на данных использования программ реальными пользователями (передаваемых с помощью обучающих выборок, используемых во время стадии обучения). Таким образом, предсказание является относительно более точным, чем при использовании статического анализа/эвристик, традиционно используемых в предшествуемом уровне техники. Предсказанные характеристики производительности могут быть сгенерированы на основе отдельных моделей для каждой программы или для каждого типа элемента кода, тем самым обеспечивая более точные предсказания/профиль программы, чем предсказания с одной универсальной основанной на ML моделью предсказания. Оптимальные пороговые значения могут быть определены во время обучения или установлены отдельно для определенных программ или групп программ, таким образом может быть достигнуто высокое качество профиля. Сгенерированный профиль программы может предоставить компилятору информацию о том, какие элементы кода необходимо компилировать заранее или как следует оптимизировать программу для ускорения ее выполнения. Предсказание характеристик может быть выполнено в любой момент, когда доступен программный код, поэтому можно избежать задержки сбора информации о производительности для выработки профиля программы. Наконец, не требуется никакого инструментирования или выполнения кода программы, что исключает ухудшения пользовательского опыта работы с программой. Как обучение, так и использование (предсказание-оптимизация) могут быть сделаны на пользовательском устройстве, тем самым обеспечивая конфиденциальность пользователя.
[0060] Следует понимать, что не все технические эффекты, упомянутые в настоящем документе, достигаются в каждом варианте осуществления настоящей технологии. Например, варианты осуществления настоящей технологии могут быть реализованы без некоторых из вышеописанных технических эффектов, в то время как другие варианты осуществления могут быть реализованы с другими техническими эффектами, или вообще без них.
[0061] Модификации и усовершенствования вышеописанных реализаций настоящей технологии могут стать очевидными для специалистов в данной области техники. Вышеуказанное описание призвано быть примерным, а не ограничивающим. Таким образом, объем настоящей технологии предполагается ограничить исключительно объемом прилагаемой формулы изобретения. Хотя вышеописанные реализации были описаны и показаны со ссылкой на конкретные этапы, выполненные в определенном порядке, будет понятно, что эти этапы могут быть объединены, разделены или переупорядочены, не отходя от учений настоящей технологии. Соответственно, порядок и группировка этапов не является ограничением настоящей технологии. Использование формы единственного числа по отношению к любому элементу, раскрытому в настоящей заявке, не исключает того, что два или более таких элементов могут иметь место в фактической реализации, и наоборот.