Специализация Java-программ - что это? Я не понимаю это - PullRequest
1 голос
/ 30 марта 2010

Я читаю о специализации программ - в частности, Java, и я не думаю, что я понимаю, если честно. До сих пор я понимаю, что это метод оптимизации эффективности программ путем ограничения параметров или входных данных? Как это на самом деле сделано? Может быть, кто-то может объяснить мне, как это помогает, и, возможно, пример того, что он на самом деле делает и как это делается?

Спасибо

Я читал:

Специализация программы - Java

Ответы [ 3 ]

0 голосов
/ 31 марта 2010

Интересно.

Это не очень распространенный термин, по крайней мере, я не встречал его раньше.

У меня нет времени, чтобы прочитать всю статью, но, похоже, это относится к возможности оптимизации программы в зависимости от контекста, в котором она будет выполняться. В примере, приведенном в статье, показана абстрактная операция «power», оптимизируемая путем добавления жестко закодированной операции «cube». Эти оптимизации могут выполняться автоматически или могут требовать «подсказок» программиста.

Вероятно, стоит указать, что специализация не специфична для Java, хотя в статье, на которую вы ссылаетесь, описывается "JSpec", специализация кода Java.

0 голосов
/ 01 апреля 2010

Похоже, Частичная оценка применяется к Java.

Эта идея заключается в том, что если у вас есть общая функция F (A, B), имеющая два параметра A и B, и (только предположим), что каждый раз, когда она вызывается, A всегда одинакова. Затем вы можете преобразовать F (A, B) в новую функцию FA (B), которая принимает только один параметр B. Эта функция должна быть быстрее, потому что ей не нужно обрабатывать информацию в A - она ​​уже «знает» ее. Он также может быть меньше по той же причине.

Это тесно связано с генерацией кода.

При генерации кода вы пишете генератор кода G, который принимает вход A, и пишете небольшую быструю специализированную функцию FA. G(A) -> FA. В специализации вам понадобятся три вещи: общая программа F, специализатор S и ввод A: S(F,A) -> FA.

Я думаю, что это случай разделяй и властвуй. При генерации кода вам нужно только написать G (A), что просто, потому что нужно учитывать только As, в то время как сгенерированная программа учитывает все B. В Частичной оценке вы должны где-то получить S и написать F (A, B), что сложнее, поскольку необходимо учитывать перекрестное произведение всех возможных As и B.

В личном опыте, программа F (A, B) должна была быть написана, чтобы соединить изменения в реальном времени от более старой иерархической базы данных к более новой реляционной базе данных. A было мета-описанием того, как сопоставить старую базу данных новой, в форме другой базы данных. B - изменения, вносимые в исходную базу данных, а F (A, B) вычисляет соответствующие изменения в более новой базе данных. Поскольку А менялся с низкой частотой (еженедельно), F (A, B) записывать не нужно. Вместо этого был написан генератор G (A) (на C) для генерации FA (B) (на C). Экономия времени была примерно на порядок величины времени разработки и на два порядка времени выполнения.

0 голосов
/ 31 марта 2010

Специализация программы - это процесс специализации программы, когда вы заранее знаете, какие аргументы у вас будут.

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

Вы создаете специализированную версию программы для определенного вида ввода.

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

От тех же авторов, я бы порекомендовал работу Tempo.

РЕДАКТИРОВАТЬ

Из статьи Toplas:

Специализация программы - это метод преобразования программы, который оптимизирует фрагмент программы относительно информации оконтекст, в котором он используется, путем генерации реализации, предназначенной для этого контекста использования.Одним из подходов к автоматической специализации программ является частичная оценка, которая выполняет агрессивное межпроцедурное постоянное распространение значений всех типов данных и выполняет постоянное свертывание и упрощение потока управления на основе этой информации [Jones et al.1993].Таким образом, частичная оценка адаптирует программу к известной (статической) информации о контексте ее выполнения, предоставленной пользователем (программистом).Только части программы, контролируемые неизвестными (динамическими) данными, восстанавливаются.Частичная оценка была тщательно исследована для функциональных языков [Bondorf 1990;Consel 1993], логические языки [Lloyd and Shepherdson 1991] и императивные языки [Andersen 1994;Baier et al.1994;Consel et al.1996].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...