kaipa: (Default)
[personal profile] kaipa
Неожиданно, комментируя статью [livejournal.com profile] _darkus_ по архитектуре СППР, посмотрел другие материалы "Записок программиста" и увидел подкаст с Ильей Ключниковым о суперкомпиляции. Несколько лет назад я вкратце рассказывал, что это такое. Но в подкасте Илья это раскрывает все гораздо более подробно, включая основные направления исследований, результаты и приложения.

Любопытно, что подкаст опубликован 12го сентября, примерно в то же время, когда мы с ним сидели на одном пляже на Майорке, но там поговорить о суперкомпиляции получилось от силы минут пять.

Date: 2014-09-30 07:14 pm (UTC)
From: [identity profile] igor-abramov.livejournal.com
Интересно, а как все эти функциональные игрища для выявления контрактов в коде соотносятся с более классическим подходом? Когда я просто строю SSA форму, пишу для данных соответствующую моему анализу решетку и нахожу неподвижную точку.

Я такую штуку для Борланда лет 10 назад ваял, на уровне proof-of-concept оно вполне лихо работало, как раз для Java.


Edited Date: 2014-09-30 07:15 pm (UTC)

Date: 2014-09-30 08:22 pm (UTC)
From: [identity profile] ushastyi.livejournal.com
На мой взгляд, разница в том, что суперкомпиляция в принципе может находить любые формализованные свойства программ, вывод контрактов -- это частный случай, приложение.

"Функциональные игрища" -- это не самоцель, а средство. Структура функциональных программ позволяет их анализировать проще, чем императивные и пр.

А как это делается через SSA, объясните поподробнее?

Кстати, если верить википедии, то в HotSpot используется SSA. А ему больше 10 лет.

Date: 2014-09-30 08:51 pm (UTC)
From: [identity profile] igor-abramov.livejournal.com
Некотором смысле анализ потоков данных тоже может находить много чего. Это, собственно, основная техника, лежащая в современных оптимизаторах и статических анализаторах кода.

Подход элементарный, на базовом уровне внятно описан в Книге Дракона. Строим ориентированный граф, вершины его аргументы и результат[ы] операторов программы. Стрелка идет либо от определения к использованию (прямой анализ) либо наоборот (обратный). Далее, мы определяем некую решетку (часто и полурешетки хватает) которая описывает наши знания о данных (может варьироваться от простой булевой решетки описывающей состояния конечного множества до весьма изощренных структур). Для ситуации когда две стрелки сходятся в одной точки оцениваем значения максимальным/минимальным элементов.

Операторы у нас описываются в терминах перобразования значений.
В итоге получается система уравнений, которую, можно решить. Если повезет, за приемлемое время. Любымый способ --- метод итераций, а SSA/SSI очень хорошо влияет на сходимость.

Этим техникам уже много лет, они неплохо развились и давно и активно используются на практике. У нас подобные вещи относили к "Теории схем программ", но там теория чуть более отвлеченная от практики.

Date: 2014-09-30 09:22 pm (UTC)
From: [identity profile] ushastyi.livejournal.com
А под "мы определяем некую решетку" -- кто имеется ввиду под "мы"?

В суперкомпиляции, насколько я понимаю, никто ничего не определяет. Прогонка происходят на всех возможных значениях данных. Если есть некоторые свойства, те же инварианты, то они получаются "как бы" автоматически (ну или доказываются).

Но возможно, я недостаточно это все понимаю. Попробуйте спросить Илью на eax.me. Он отвечал там на вопросы. Регистрация простая.

Date: 2014-10-01 06:19 am (UTC)
From: [identity profile] igor-abramov.livejournal.com
Решетку приходится определять под конкретную задачу.

В простом случае, например, при анализе в целях дальнейшей оптимизации кода, мы используем что-то навроде следующего набора признаков:

1) маски битов, которые точно 0 и точно 1,
2) верхнюю и нижнюю оценки на значение величины

Если же анализатор предназначен, например, для нахождения проблем в драйверах Линукса, то там анализируется, в частности, тип адреса (на какое адресное пространство он указывает - пользовательское или системное), или значение такого неявного параметра кмк текущий уровень прерываний (позволяет находить ситуации, когда при возникновении ошибки устройства драйвер не восстанавливает исходный уровень прерываний).

То есть, надеяться, что такие штуки будут вычисляться "сами" как-то не приходится.


Date: 2014-10-01 10:25 am (UTC)
From: [identity profile] ushastyi.livejournal.com
И тем не менее, некоторые штуки могут сами вычисляться. Суперкомпиляция теоретически позволяет "проверить" программу на всех возможных входных данных. Никакой тест это не покроет. В подкасте, кстати, есть про использование суперкомпиляции для верификации протоколов. Что уже недалеко от драйверов.

Формальная верификация программ тоже теоретически возможна, и проблема, насколько я понимаю, состоит во-первых, в сложности, а во-вторых, что нужно на чем-нибудь описать как программа должна работать правильно, а это порой так же сложно, как написать саму программу.

А вы сейчас где работаете и чем занимаетесь?

Date: 2014-10-01 11:49 am (UTC)
From: [identity profile] igor-abramov.livejournal.com
>>> Суперкомпиляция теоретически позволяет "проверить" программу на всех возможных входных данных.

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

На самом деле, если модель множества возможных значений некой переменной точная (может представить любое множество значений), такие вычисления (любым методом) потребуют нереальных ресурсов (просто из соображений необходимых объемов данных). Поэтому, представление множеств приходится сильно загрублять, притом под конкретную задачу.
Так что, осмелюсь наивно предположить, что реальные суперкомпиляторы тоже весьма компромиссны в этом смысле.

>>> Суперкомпиляция теоретически позволяет "проверить" программу на всех возможных входных данных. Никакой тест это не покроет.

Статические анализаторы присутствуют на рынке уже лет 20 минимум и решают именно эту задачу. Насколько я знаю, решают методами анализа потока данных (конечно, они находят еще множество мелких несообразностей в коде более простыми способами).

>>> Формальная верификация программ тоже теоретически возможна,
опять же с неслабыми оговорками, но да, основная проблема в спецификации. Ее сложно писать, непонятно как отлаживать и верифицировать саму спецификацию. Так что не панацея.

В ИСП РАН этим занимались и даже применяли для практических промышленных систем.

>>> А вы сейчас где работаете и чем занимаетесь?
анализаторами кода не занимаюсь, спрос в промышленности невелик на самом деле.

А занимаюсь двумя вещами: эмуляторами устаревающих систем (в том числе, динамической бинарной трансляцией) для Stromasys, и системой торговли в реальном времени на бирже рекламных объявлений (стартап, пока undisclosed).




Edited Date: 2014-10-01 11:56 am (UTC)

Date: 2014-10-02 02:12 pm (UTC)
From: [identity profile] ushastyi.livejournal.com
>>> >>> Суперкомпиляция теоретически позволяет "проверить" программу на всех возможных входных данных.

>>> Наверное, это слишком сильное утверждение, тем более для слова "теоретически". Как раз теоретически достижимость некого участка программы можно свести к проблеме останова, которая алгоритмически неразрешима.

Да, это одна из проблем, которые существуют при суперкомпиляции, В процессе построения модели программы (граф с циклами), существуют специальные ухищрения и алгоритмы для распознавания циклов (см, например, тут: http://window.edu.ru/library/pdf2txt/721/41721/18879/page2)

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

Но это все теория, "реальные суперкомпиляторы" пока что по большей части модельные примеры, чем что-то реально рабочее.

Статический анализ кода, насколько я понимаю, решает все же несколько другую задачу.

Давайте я повторюсь, может быть. Я не специалист по суперкомпиляции, такие вопросы лучше Илье задавать. Но из того, что я понимаю, это метод, который позволяет общим образом решить разные задачи, в том числе те, которые могут быть, и решаются сейчас другими узкоспециализированными способами.

> и системой торговли в реальном времени на бирже рекламных объявлений (стартап, пока undisclosed).

А, RTB… Мы тоже этим занимаемся. Деньги из воздуха.

Date: 2014-10-02 03:19 pm (UTC)
From: [identity profile] igor-abramov.livejournal.com
>>> Статический анализ кода, насколько я понимаю, решает все же несколько другую задачу.

Да именно ту же самую. И теория этого анализа формулируется именно в терминах абстрактного исполнения схемы программ. И циклы там теми же способами выявляются, что неудивительно. Просто разработчики статических анализаторов идут от продукта и более скромны в своих мечтаниях :). Вообще, меня начинают терзать смутные сомнения что, по-существу, это один и тот же аппарат, только терминология немного разная.

Лет 25 с лишним назад, на мехматовском семинаре выступал Романенко и его там немного и по-дружески троллили, в основном за оптимизм. Ну а я столкнулся с этой тематикой лет 10 назад, когда делал анализатор для Борланда.

>>> А, RTB… Мы тоже этим занимаемся. Деньги из воздуха.
Тесен мир. Деньги-то из воздуха, а вот математика хорошая, пришлось вспомнить даже то, чего не изучал :) Ну и попрограммировать есть чего.

Date: 2014-10-02 03:31 pm (UTC)
From: [identity profile] ushastyi.livejournal.com
> Лет 25 с лишним назад, на мехматовском семинаре выступал Романенко и его там немного и по-дружески троллили, в основном за оптимизм

Лет 25 назад может быть. Судя по всему существенный прогресс пошел в последние лет десять, причем не последнюю роль сыграло в этом второе пришествие функциональных языков, с которыми легко работать. Поживем-увидим ,)

В самом RTB математики, по-моему, нет :) То есть она есть, но в рекламе объявлений вообще, система реального времени добавляет технологические сложности. Впрочем, может это в нашей компании так получилось, потому что сначала мы построили рекламную сеть, в которой решаются похожие задачи и там как раз вся математика, а уже потом пошли в RTB.

Date: 2014-10-02 04:29 pm (UTC)
From: [identity profile] igor-abramov.livejournal.com
>>> То есть она есть, но в рекламе объявлений вообще, система реального времени добавляет технологические сложности.

Пожалуй, почти что так. Тем не менее есть, интересный нетехнологический фрагмент, специфический для RTB, --- собственно стратегия игры на аукционе.

А так да, самый-то содержательный код решает те же задачи, что и просто рекламная сеть. Хотя, признаться. я не задумывался над этим.

А у вас Pay-per-action, или, хотя бы pay-per-click поддерживаются?
Edited Date: 2014-10-02 04:33 pm (UTC)

Date: 2014-10-02 06:13 pm (UTC)
From: [identity profile] ushastyi.livejournal.com
> А у вас Pay-per-action, или, хотя бы pay-per-click поддерживаются?

Конечно. http://www.lifestreetmedia.com/mobile/performance/

Отсюда задачи прогнозирования и оценки рисков.

Date: 2014-10-02 06:24 pm (UTC)
From: [identity profile] igor-abramov.livejournal.com
>>> Отсюда задачи прогнозирования и оценки рисков.
Вот-вот. Именно.

Спасибо

Profile

kaipa: (Default)
kaipa

April 2017

S M T W T F S
       1
2345678
9101112131415
16171819202122
23242526272829
30      

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 24th, 2026 07:42 am
Powered by Dreamwidth Studios