[go: up one dir, main page]
More Web Proxy on the site http://driver.im/

RU2206119C2 - Способ получения объектного кода - Google Patents

Способ получения объектного кода Download PDF

Info

Publication number
RU2206119C2
RU2206119C2 RU2000124183A RU2000124183A RU2206119C2 RU 2206119 C2 RU2206119 C2 RU 2206119C2 RU 2000124183 A RU2000124183 A RU 2000124183A RU 2000124183 A RU2000124183 A RU 2000124183A RU 2206119 C2 RU2206119 C2 RU 2206119C2
Authority
RU
Russia
Prior art keywords
program
intermediate program
execution time
linear
planned
Prior art date
Application number
RU2000124183A
Other languages
English (en)
Other versions
RU2000124183A (ru
Inventor
В.Ю. Волконский
А.Ю. Останевич
А.Л. Сушенцов
Original Assignee
Закрытое акционерное общество "МЦСТ"
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Закрытое акционерное общество "МЦСТ" filed Critical Закрытое акционерное общество "МЦСТ"
Priority to RU2000124183A priority Critical patent/RU2206119C2/ru
Application granted granted Critical
Publication of RU2206119C2 publication Critical patent/RU2206119C2/ru
Publication of RU2000124183A publication Critical patent/RU2000124183A/ru

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

Изобретение относится к области оптимизирующей компиляции программ для повышения уровня параллелизма при исполнении на современных архитектурных платформах. Технический результат заключается в обеспечении возможности сокращения времени выполнения объектного кода исходной программы, особенно при статическом распараллеливании вычислений. Способ реализует итеративный алгоритм на базе использования профиля программы с пошаговым контролем за ходом оптимизации путем оценки целевой функции, характеризующей время исполнения программы, который последовательно применяется ко всем линейным участкам исходной программы, начиная с участков, потенциально дающих наибольшее ускорение. 4 з.п.ф-лы, 5 ил.

Description

Изобретение относится к технологии получения объектного кода программ, используемой как в трансляторах с языков высокого уровня, так и в двоичных транслирующих системах. Изобретение может быть особенно эффективно использовано в промышленных компиляторах для архитектурных платформ с явно выраженным параллелизмом на уровне отдельных операций, ориентированных на статическое управление вычислениями. Возможно его использование в традиционных суперскалярных архитектурах.
В процессе трансляции исходная программа переводится с языка программирования в некоторую промежуточную программу, на базе которой выполняются оптимизации, ориентированные на конкретную архитектурную платформу, а также осуществляется генерация объектного кода программы. Целью проводимых оптимизаций является, как правило, повышение скорости работы программы. Одним из главных показателей при этом является достигнутый в ходе оптимизации параллелизм на уровне отдельных операций.
В современных микропроцессорах реализуются два подхода к параллельному выполнению отдельных операций. Первый из них это динамических подход, который принят во многих традиционных суперскалярных архитектурах. Процессор просматривает последовательность команд во время исполнения, определяет возможные зависимости между операциями, решает, какие из них и на каком оборудовании можно выполнить параллельно.
Второй подход чисто статистический, он принят в архитектурах с явно выраженным параллелизмом. Отдельные операции образуют в объектном коде явно выделенные группы, подготовленные компилятором, которые могут исполняться процессором параллельно. Аппаратура при этом подходе упрощается, однако анализ и генерация явного параллельного кода теперь возлагается на компилятор.
Методы, при помощи которых компиляторы оптимизируют код с целью повышения уровня параллелизма, традиционно объединяются термином "планирование операций". Локальное планирование переупорядочивает операции в пределах линейных участков, т. е. фрагментов линейного кода, оканчивающихся операцией перехода. Однако для достижения предельной производительности современных процессоров с высокой архитектурной скоростью локального планирования операций оказывается явно недостаточно.
Глобальное планирование позволяет перемещать операции через границы линейных участков, что дает больше возможностей распараллеливания. Известно несколько решений задачи глобального планирования операций в пределах совокупности линейных участков. Одним из них является алгоритм планирования трасс. Оптимизируют некоторый наиболее часто исполняемый путь в объектном коде программы (трассу). Линейные участки, вошедшие в трассу, оптимизируют за счет остальных редко исполняемых участков. Операции переносят через границы участков трассы, при необходимости добавляют компенсирующий код для сохранения семантики программы. Этот подход сводит глобальное планирование к задаче локального планирования, он описан в работе Р. Geoffrey Lowney et al., "The Multiflow Trace Scheduling Compiler", J. Supercomputing 7, 51 (1993). Сперва идентифицируется ациклический часто исполняемый путь на множестве линейных участков, т. е. трасса, затем отдельные операции перемещают в пределах трассы через границы участков: переходы и метки (места в трассе, куда возможен вход из-за ее пределов). Наконец, вставляют необходимый корректирующий код. Так операции, которые были перемещены ниже некоторого перехода в трассе, требуют построения своей копии на определенном линейном участке вне трассы. Хотя такой способ в целом уменьшает количество операций внутри трассы, но это уменьшение происходит за счет увеличения кода за ее пределами.
Другим методом глобального планирования является так называемое "фильтрование", как это описано в работе A. Nicolau, "Percolation Scheduling: A Parallel Computation Technique", Technical Report, Cornell University (1984). Основой этого решения является набор базовых преобразований, применяемых к информационно-управляющему графу программы. При помощи "жадного" алгоритма операции перемещаются вверх по графу управления, на сколько это возможно с учетом зависимостей. Поскольку при такой технике оптимизации никак не учитывается реальная аппаратура, возможна ситуация, при которой оборудование будет загружено операциями с редко исполняемых участков исходной программы, результат которых требуется редко.
Как и техника планирования трасс, фильтрование требует компенсирующего кода.
Еще один подход, известный как "техника часового", описан в работе S. А. Mahlke, "Sentinel scheduling for VLIW and superscalar processors". Annual Symposium on Programming Languages and Operating Systems, vol. 27, p. 238 (1992). Здесь используется профиль программы, на базе которого совокупность линейных участков, удовлетворяющую определенным требованиям, планируют как один большой участок (суперблок).
Особенностью еще одного подхода к глобальному планированию является попытка ограничить дублирование кода. Хотя операции по-прежнему перемещают через границы линейных участков, область применения оптимизации ограничивается цикловыми регионами. Такой способ описан в работе D. Bernstein, M. Rodeh, "Global instruction Scheduling for superscalar machines". Conference on Programming Language Design and Implementation, SIGPLAN'91, p. 241 (1991).
Наиболее близким аналогом данного изобретения является способ получения объектного кода, описанный в патенте США 5557761. Согласно данному способу сначала выбирают два линейных участка объектного кода исходной программы: источник и приемник. Затем осуществляют построение максимального множества операций в пределах участка-источника, которые можно переместить на участок-приемник без нарушения зависимостей между операциями и с учетом доступных аппаратных ресурсов. Для этого используют специальную модель оценки общей стоимости такого переноса операций, на основе которой принимают окончательное решение об оптимизации выбранной пары линейных участков. Программу в целом оптимизируют путем выполнения вышеуказанных операций по отношению ко всевозможным парам линейных участков, связанных по управлению.
Недостатками перечисленных способов, при которых обеспечивается увеличение степени параллелизма исходной программы, являются: плохо контролируемое разрастание кода, слабая привязка оптимизации к параметрам и характеристикам целевой архитектурной платформы, отсутствие четкой стратегии оптимизации.
Задачей, на решение которой направлено настоящее изобретение, является устранение указанных недостатков и обеспечение возможности сокращения времени выполнения объектного кода исходной программы, особенно при статическом распараллеливании вычислений.
Настоящее изобретение представляет собой способ получения объектного кода, заключающийся в том, что:
по исходной программе в ЭВМ с выбранной архитектурной платформой получают неоптимизированный объектный код в виде совокупности линейных участков и соответствующий указанному коду профиль программы с информацией о числе исполнений каждого линейного участка неоптимизированного объектного кода, причем указанную информацию получают с помощью счетчика и сохраняют на носителе;
в указанной ЭВМ переводят исходную программу или неоптимизированный объектный код в первичную промежуточную программу, имеющую совокупность линейных участков, соответствующую совокупности линейных участков неоптимизированного объектного кода;
каждый линейный участок первичной промежуточной программы планируют и затем определяют время исполнения полученного спланированного участка в тактах;
определяют полное время исполнения первичной промежуточной программы по следующей формуле:
Figure 00000002

где Т - полное время исполнения первичной промежуточной программы в тактах;
Lj - время исполнения j-го спланированного линейного участка первичной промежуточной программы в тактах;
Nj - число исполнений упомянутого j-го линейного участка;
j = 1...m - число линейных участков;
для каждого спланированного линейного участка первичной промежуточной программы определяют ожидаемое уменьшение полного времени исполнения первичной промежуточной программы в результате выноса совокупности операций, спланированных в первом такте указанного участка, с учетом числа исполнений указанного участка, полученного из сохраненного профиля программы;
осуществляют оптимизацию первичной промежуточной программы путем выполнения заданного числа циклов следующих действий, определяемого из условия завершения оптимизации:
- устанавливают последовательность спланированных линейных участков текущей промежуточной программы по убыванию ожидаемого уменьшения полного времени исполнения текущей промежуточной программы;
- переносят совокупность операций, спланированных в первом такте первого линейного участка указанной последовательности, на предшествующие ему по управлению спланированные линейные участки текущей промежуточной программы, включая в их число тот же спланированный участок в случае программного цикла, при этом получают преобразованную промежуточную программу, имеющую по меньшей мере два модифицированных участка;
- определяют полное время исполнения преобразованной промежуточной программы, полученное с учетом планирования ее участков, и реальное уменьшение указанного времени по сравнению с полным временем исполнения текущей промежуточной программы и полученное реальное уменьшение сравнивают с ожидаемым уменьшением полного времени исполнения текущей промежуточной программы для следующего линейного участка указанной последовательности; при этом:
- если первое из упомянутых уменьшений не меньше второго, сохраняют преобразованную промежуточную программу, после чего выполняют для нее указанный цикл действий, полагая ее текущей промежуточной программой в данном цикле, причем реальное уменьшение полного времени исполнения полученной последующей преобразованной промежуточной программы определяют по сравнению с полным временем исполнения предыдущей преобразованной промежуточной программы,
- если первое из упомянутых уменьшений меньше второго, восстанавливают состояние модифицированных участков, причем при положительном значении реального уменьшения его запоминают и выполняют указанный цикл действий с учетом этого значения, а при отсутствии реального уменьшения выполняют указанный цикл действий, осуществляя его с действия по переносу совокупности операций, спланированных в первом такте следующего линейного участка последней полученной последовательности спланированных линейных участков для текущей промежуточной программы;
- на основе полученной в результате оптимизации совокупности линейных участков последней преобразованной промежуточной программы формируют в указанной ЭВМ с помощью компилятора оптимизированный объектный код, который сохраняют на носителе информации.
Полное время исполнения преобразованной промежуточной программы в ходе оптимизации можно определить либо по формуле:
Figure 00000003

где Top - полное время исполнения преобразованной промежуточной программы в тактах с учетом дублирования операций в процессе оптимизации;
Lj - время исполнения j-го спланированного линейного участка преобразованной промежуточной программы в тактах;
Nj - число исполнений упомянутого j-го линейного участка;
К - положительное число, характеризующее замедление работы преобразованной промежуточной программы на выбранной архитектурной платформе из-за увеличения размеров кода;
Rj - число операций на j-м линейном участке с учетом результатов переноса;
j = 1...m - число линейных участков в совокупности;
либо по формуле
Figure 00000004

где Tmem - полное время исполнения преобразованной промежуточной программы в тактах с учетом увеличения числа обращений в память в процессе оптимизации;
Lj - время исполнения j-го спланированного линейного участка преобразованной промежуточной программы в тактах:
Nj - число исполнений упомянутого j-го линейного участка;
Kmem - положительное число, характеризующее замедление работы преобразованной промежуточной программы в процессе оптимизации на выбранной архитектурной платформе из-за увеличения числа обращений в память;
Mj - число операций обращения в память на j-м линейном участке с учетом результатов переноса;
j = 1...m - число линейных участков в совокупности.
При этом условием завершения оптимизации первичной промежуточной программы может быть, например, отсутствие реального уменьшения полного времени исполнения преобразованной промежуточной программы для всех линейных участков либо отсутствие реального уменьшения полного времени исполнения преобразованной промежуточной программы для заданного числа оптимизируемых линейных участков.
На фиг.1 изображена общая схема получения объектного кода программы.
На фиг.2 - схема работы компилятора для случая с использованием исходной программы.
На фиг. 3 и 4 представлена работа алгоритма, по которому осуществляют оптимизацию объектного кода.
На фиг. 5 дан пример состояния трех линейных участков программного кода до и после работы одной итерации алгоритма оптимизации.
Получение объектного кода программы, написанной на языке высокого уровня, может быть представлено последовательностью действий, изображенной на фиг. 1. Исходную программу (1) подают на вход стандартной компоненты программного обеспечения ЭВМ - компилятора (2). Результатом работы компилятора является файл неоптимизированного объектного кода (3) исходной программы, представляющего собой совокупность линейных участков. Файл записывают на каком-либо носителе информации. Полученный код может быть исполнен аппаратными средствами (4) данной ЭВМ за некоторое время То, характеризующее скорость работы программы. Настоящее изобретение позволяет оптимизировать объектный код программы, при этом оптимизированный код, выполняющий все действия, предусмотренные исходной программой, будет выполнен на той же аппаратуре за время Т<То.
Оптимизирующие преобразования неоптимизированного объектного кода, значительно повышающие скорость работы, можно выполнить, если известна информация о поведении программы и отдельных ее частей в ходе исполнения (прогона). Технологией оптимизации предусмотрен такой пробный или тренировочный прогон неоптимизированного кода программы, условно обозначенный позицией (5). Результатом этого прогона является профиль программы (6), характеризующий поведение отдельных частей программы. Необходимой составной частью профиля программы, используемого в настоящем изобретении, является информация о числе исполнений каждого линейного участка неоптимизированного кода, получаемая с помощью счетчика.
Для выполнения оптимизирующих преобразований неоптимизированного кода программы в качестве исходных данных используют либо непосредственно неоптимизированный объектный код (3), либо исходную программу (1) на языке высокого уровня. Кроме того, используют профиль программы (6), сохраненный на подходящем носителе, которым может быть, например, жесткий диск или магнитная лента. Компилятор (2), используя дополнительную информацию, преобразует неоптимизированный объектный код (3) или исходную программу (1) в оптимизированный объектный код программы (7), также сохраняемый на носителе информации. Прогоны данного кода, обозначенные условно как (8), покажут меньшее время исполнения программы.
На фиг.2 изображена упрощенная структурная схема компилятора (2), используемого в способе получения объектного кода программы по настоящему изобретению. Показан пример осуществления с использованием исходной программы. Исходную программу (1) переводят при помощи компоненты языкового разбора (9) в первичную промежуточную программу (10) в виде совокупности линейных участков, соответствующей совокупности линейных участков неоптимизированного объектного кода. Компонента оптимизатора (11), получая профиль программы (6), при взаимодействии с планировщиком команд (12) реализует итеративный алгоритм модификации линейных участков. В результате получают преобразованную в процессе оптимизации промежуточную программу (13). Генератор кода (14) получает оптимизированный объектный код (15) исходной программы.
На фиг.3 представлена подготовка к началу работы итеративного алгоритма оптимизации, который реализует функцию оптимизатора (11). Каждый линейный участок первичной промежуточной программы (10) исходной программы (1), совокупность которых обозначена как множество {В}, планируют (16) с получением значения времени его исполнения L(j) в тактах. Аналогичные действия по планированию осуществляют и по отношению к линейным участкам преобразованных промежуточных программ, получаемых в процессе оптимизации. Из профиля программы (6) берут соответствующие числа исполнений (17) каждого линейного участка. Теперь каждому спланированному участку B(j) из множества {В} (j = 1. . m) соответствует некоторое число N(j), характеризующее число исполнений этого участка. Далее определяют (18) полное время Т исполнения первичной промежуточной программы по следующей формуле:
Figure 00000005

где Т - полное время исполнения первичной промежуточной программы в тактах;
Lj - время исполнения j-го спланированного линейного участка промежуточной (первичной или преобразованной) программы в тактах;
Nj - число исполнений упомянутого j-го линейного участка;
j = 1...m - число линейных участков;
Поскольку дальнейшая оптимизация участков идет с учетом результатов планирования, в качестве множества операций, выносимых с выбранного участка, берется совокупность операций, спланированных в первом такте данного участка. Максимальный ожидаемый эффект, в данном случае максимальное ожидаемое уменьшение полного времени исполнения первичной промежуточной программы, при таком выносе равно одному машинному такту, умноженному на число исполнений оптимизируемого участка. Таким образом, для каждого участка B(j) можно определить ожидаемый эффект оптимизации P(j), который сперва полагается равным P(j)= N(j) (19). После подсчета возможного эффекта участки сортируют (20) так, что P(j)>=P(j+1). Тем самым устанавливают последовательность спланированных линейных участков первичной промежуточной программы по убыванию ожидаемого уменьшения полного времени ее исполнения. Выбирают участок с номером j=1 как первый претендент на модификацию (21).
На фиг.4 показана блок-схема итеративного алгоритма оптимизации. Сперва запоминают (22) значение возможного эффекта оптимизации D=P(j+1) для участка B(j+1), следующего по порядку в полученной упомянутой последовательности за выбранным линейным участком. Это необходимо для принятия решения о продолжении оптимизации участка B(j) или переходе к участку B(j+1). Затем множество операций, спланированных в первом такте участка B(j), переносят (23) на участки {В'}, предшествующие по управлению, включая и сам участок B(j), если он является программным циклом. Модифицированные участки {B(j), B'} перепланируют (24). С учетом результатов планирования определяют (25) значение полного времени Т' исполнения преобразованной в процессе оптимизации промежуточной программы. При получении реального уменьшения указанного времени по сравнению с полным временем исполнения первичной промежуточной программы сравнивают (26) это реальное уменьшение с ожидаемым уменьшением D полного времени исполнения первичной промежуточной программы для участка B(j+1). Если T-T'>= D, то принимают решение о сохранении (27, 30) результатов проделанной оптимизации, после чего заново сортируют (31) множество участков с получением новой последовательности спланированных линейных участков по убыванию ожидаемого уменьшения полного времени исполнения полученной преобразованной промежуточной программы, при этом учитывается полученное на шаге 30 реальное уменьшение. Снова выбирают участок с максимальным ожидаемым эффектом (32), и итерацию алгоритма повторяют уже по отношению к ранее полученной преобразованной промежуточной программе, которую при этом полагают текущей промежуточной программой. Если полученное реальное уменьшение меньше D, то участки B(j) {В'} восстанавливают (28) к исходному виду. При этом, если определено (29), что полученное реальное уменьшение имеет положительное значение, то оно запоминается P(j)=T-T' (30) и множество участков заново сортируется с учетом этого нового значения (31). Снова выбирается участок с максимальным ожидаемым эффектом (32), и итерация алгоритма повторяется. Если же на проверке (29) эффект оптимизации оказался нулевым, то принимают решение о переходе к следующему участку j=j+1 (33) полученной перед этим последовательности спланированных линейных участков для первичной промежуточной программы (или, применительно к последующим циклам действий по оптимизации, для текущей промежуточной программы) или окончании работы алгоритма, если это был последний участок упорядоченной последовательности.
Чтобы учесть специфику работы программы на конкретной архитектурной платформе и контролировать различные характеристики программы в процессе оптимизации, т. е. в ходе переноса операций, полное время исполнения преобразованной промежуточной программы в процессе оптимизации можно определить как с учетом разрастания ее кода, так и с учетом увеличения обращений программы в память. Поэтому в первом случае указанное время определяют по формуле
Figure 00000006

где Top - полное время исполнения преобразованной промежуточной программы в тактах с учетом дублирования операций в процессе оптимизации;
Lj - время исполнения j-го спланированного линейного участка преобразованной промежуточной программы в тактах;
Nj - число исполнений упомянутого j-го линейного участка;
Кор - положительное число, характеризующее замедление работы преобразованной промежуточной программы на выбранной архитектурной платформе из-за увеличения размеров кода;
Rj - число операций на j-м линейном участке с учетом результатов переноса;
j = 1...m - число линейных участков в совокупности.
Во втором случае указанное время определяют по формуле
Figure 00000007

где Tmem - полное время исполнения преобразованной промежуточной программы в тактах с учетом увеличения числа обращений в память в процессе оптимизации;
Lj - время исполнения j-го спланированного линейного участка преобразованной промежуточной программы в тактах;
Nj - число исполнений упомянутого j-го линейного участка;
Kmem - положительное число, характеризующее замедление работы преобразованной промежуточной программы в процессе оптимизации на выбранной архитектурной платформе из-за увеличения числа обращений в память;
Mj - число операций обращения в память на j-м линейном участке с учетом результатов переноса;
j = 1...m - число линейных участков в совокупности.
Следует также отметить, что планирование линейных участков при осуществлении способа получения объектного кода по настоящему изобретению обеспечивает учет возможностей архитектурной платформы и знание времени выполнения участков до и после оптимизации на выбранной архитектуре с точностью до одного машинного такта.
Фиг. 5 иллюстрирует результаты работы одной итерации алгоритма при модификации участка (34) с переносом операции (35) на участки, предшествующие по управлению (34), (36) и (37) с длинами, т.е. временем исполнения участков, в 2, 4, 2 такта и счетчиками N1, N2, N3 соответственно. До оптимизирующего преобразования имелось некоторое значение Т1 полного времени исполнения текущей промежуточной программы (первичной или преобразованной). В результате переноса исходная операция (35) продублирована (38), (39), (40) и помещена на каждый из участков, предшествующих по управлению. По результатам планирования операций длина участка (41) стала на один такт короче по сравнению с исходным участком (36). Длины остальных линейных участков не изменились. Новое значение полного времени исполнения преобразованной вышеописанным образом промежуточной программы в результате этого оптимизирующего преобразования стало равно T2 = T1-N2, оно меньше предыдущего значения. Поэтому результаты оптимизации в данном случае будут сохранены в преобразованной промежуточной программе.
Предлагаемый способ получения объектного кода был применен в оптимизирующем компиляторе с языков С, Фортран-77 для получения параллельного кода микропроцессора "Эльбрус-3М". Для программ целочисленных вычислений, которые трудно поддаются оптимизации традиционными методами, было получено ускорение исполнения кода на модели архитектуры микропроцессора в 1,5-2,2 раза. Предпочтительно использовались задачи пакета замеров производительности SPEC CPU95, известного специалистам в данной области. Пакет задач поставляется компанией Standard Performance Evaluation Corporation (SPEC) и рекомендуется для сравнения производительности архитектурных платформ и вычислительных систем.

Claims (5)

1. Способ получения объектного кода, отличающийся тем, что по исходной программе в ЭВМ с выбранной архитектурной платформой получают неоптимизированный объектный код в виде совокупности линейных участков и соответствующий указанному коду профиль программы с информацией о числе исполнений каждого линейного участка неоптимизированного объектного кода, причем указанную информацию получают с помощью счетчика и сохраняют на носителе, в указанной ЭВМ переводят исходную программу или неоптимизированный объектный код в первичную промежуточную программу, имеющую совокупность линейных участков, соответствующую совокупности линейных участков неоптимизированного объектного кода; каждый линейный участок первичной промежуточной программы планируют и затем определяют время исполнения полученного спланированного участка в тактах, определяют полное время исполнения первичной промежуточной программы по следующей формуле:
Figure 00000008

где Т - полное время исполнения первичной промежуточной программы в тактах;
Lj - время исполнения j-того спланированного линейного участка первичной промежуточной программы в тактах;
Nj - число исполнений упомянутого j-того линейного участка;
j=1...m - число линейных участков;
для каждого спланированного линейного участка первичной промежуточной программы определяют ожидаемое уменьшение полного времени исполнения первичной промежуточной программы в результате выноса совокупности операций, спланированных в первом такте указанного участка, с учетом числа исполнений указанного участка, полученного из сохраненного профиля программы, осуществляют оптимизацию первичной промежуточной программы путем выполнения заданного числа циклов следующих действий, определяемого из условия завершения оптимизации: устанавливают последовательность спланированных линейных участков текущей промежуточной программы по убыванию ожидаемого уменьшения полного времени исполнения текущей промежуточной программы, переносят совокупность операций, спланированных в первом такте первого линейного участка указанной последовательности, на предшествующие ему по управлению спланированные линейные участки текущей промежуточной программы, включая в их число тот же спланированный участок в случае программного цикла, при этом получают преобразованную промежуточную программу, имеющую по меньшей мере два модифицированных участка, определяют полное время исполнения преобразованной промежуточной программы, полученное с учетом планирования ее участков, и реальное уменьшение указанного времени по сравнению с полным временем исполнения текущей промежуточной программы и полученное реальное уменьшение сравнивают с ожидаемым уменьшением полного времени исполнения текущей промежуточной программы для следующего линейного участка указанной последовательности, при этом, если первое из упомянутых уменьшений не меньше второго, сохраняют преобразованную промежуточную программу, после чего выполняют для нее указанный цикл действий, полагая ее текущей промежуточной программой в данном цикле, причем реальное уменьшение полного времени исполнения полученной последующей преобразованной промежуточной программы определяют по сравнению с полным временем исполнения предыдущей преобразованной промежуточной программы, если первое из упомянутых уменьшений меньше второго, восстанавливают состояние модифицированных участков, причем при положительном значении реального уменьшения его запоминают и выполняют указанный цикл действий с учетом этого значения, а при отсутствии реального уменьшения выполняют указанный цикл действий, осуществляя его с действия по переносу совокупности операций, спланированных в первом такте следующего линейного участка последней полученной последовательности спланированных линейных участков для текущей промежуточной программы, на основе полученной в результате оптимизации совокупности линейных участков последней преобразованной промежуточной программы формируют в указанной ЭВМ с помощью компилятора оптимизированный объектный код, который сохраняют на носителе информации.
2. Способ по п.1, отличающийся тем, что полное время исполнения преобразованной промежуточной программы в ходе оптимизации определяют по формуле
Figure 00000009

где Тор - полное время исполнения преобразованной промежуточной программы в тактах с учетом дублирования операций в процессе оптимизации;
Lj - время исполнения j-того спланированного линейного участка преобразованной промежуточной программы в тактах;
Nj - число исполнений упомянутого j-того линейного участка;
Kop - положительное число, характеризующее замедление работы преобразованной промежуточной программы на выбранной архитектурной платформе из-за увеличения размеров кода;
Rj - число операций на j-том линейном участке с учетом результатов переноса;
j=1...m - число линейных участков в совокупности.
3. Способ по п.1, отличающийся тем, что полное время исполнения преобразованной промежуточной программы в ходе оптимизации определяют по формуле
Tmem j=m j=1 = ∑ (Lj+Kmem•Mj)•Nj,
где Тmem - полное время исполнения преобразованной промежуточной программы в тактах с учетом увеличения числа обращений в память в процессе оптимизации;
Lj - время исполнения j-того спланированного линейного участка преобразованной промежуточной программы в тактах;
Nj - число исполнений упомянутого j-того линейного участка;
Kmem - положительное число, характеризующее замедление работы преобразованной промежуточной программы в процессе оптимизации на выбранной архитектурной платформе из-за увеличения числа обращений в память;
Mj - число операций обращения в память на j-ом линейном участке с учетом результатов переноса;
j=1...m - число линейных участков в совокупности.
4. Способ по любому из пп.1-3, отличающийся тем, что условием завершения оптимизации первичной промежуточной программы является отсутствие реального уменьшения полного времени исполнения преобразованной промежуточной программы для всех линейных участков.
5. Способ по любому из пп.1-3, отличающийся тем, что условием завершения оптимизации первичной промежуточной программы является отсутствие реального уменьшения полного времени исполнения преобразованной промежуточной программы для заданного числа оптимизируемых линейных участков.
RU2000124183A 2000-09-22 2000-09-22 Способ получения объектного кода RU2206119C2 (ru)

Priority Applications (1)

Application Number Priority Date Filing Date Title
RU2000124183A RU2206119C2 (ru) 2000-09-22 2000-09-22 Способ получения объектного кода

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
RU2000124183A RU2206119C2 (ru) 2000-09-22 2000-09-22 Способ получения объектного кода

Publications (2)

Publication Number Publication Date
RU2206119C2 true RU2206119C2 (ru) 2003-06-10
RU2000124183A RU2000124183A (ru) 2003-06-27

Family

ID=29209088

Family Applications (1)

Application Number Title Priority Date Filing Date
RU2000124183A RU2206119C2 (ru) 2000-09-22 2000-09-22 Способ получения объектного кода

Country Status (1)

Country Link
RU (1) RU2206119C2 (ru)

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007040419A1 (fr) * 2005-10-04 2007-04-12 Georgy Mikhailovich Shagov Procede d'assemblage (de montage) d'un logiciel
US8191052B2 (en) 2006-12-01 2012-05-29 Murex S.A.S. Producer graph oriented programming and execution
US8266609B2 (en) 2005-12-07 2012-09-11 Microsoft Corporation Efficient placement of software transactional memory operations around procedure calls
US8307337B2 (en) 2006-12-01 2012-11-06 Murex S.A.S. Parallelization and instrumentation in a producer graph oriented programming framework
US8332827B2 (en) 2006-12-01 2012-12-11 Murex S.A.S. Produce graph oriented programming framework with scenario support
US8799882B2 (en) 2005-12-07 2014-08-05 Microsoft Corporation Compiler support for optimizing decomposed software transactional memory operations
RU2691860C1 (ru) * 2018-06-25 2019-06-18 Открытое Акционерное Общество "Информационные Технологии И Коммуникационные Системы" Способ распараллеливания программ в среде логического программирования в вычислительной системе

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2007040419A1 (fr) * 2005-10-04 2007-04-12 Georgy Mikhailovich Shagov Procede d'assemblage (de montage) d'un logiciel
US8799882B2 (en) 2005-12-07 2014-08-05 Microsoft Corporation Compiler support for optimizing decomposed software transactional memory operations
US8266609B2 (en) 2005-12-07 2012-09-11 Microsoft Corporation Efficient placement of software transactional memory operations around procedure calls
US8645929B2 (en) 2006-12-01 2014-02-04 Murex S.A.S. Producer graph oriented programming and execution
US8332827B2 (en) 2006-12-01 2012-12-11 Murex S.A.S. Produce graph oriented programming framework with scenario support
US8607207B2 (en) 2006-12-01 2013-12-10 Murex S.A.S. Graph oriented programming and execution
US8307337B2 (en) 2006-12-01 2012-11-06 Murex S.A.S. Parallelization and instrumentation in a producer graph oriented programming framework
US8191052B2 (en) 2006-12-01 2012-05-29 Murex S.A.S. Producer graph oriented programming and execution
US9201766B2 (en) 2006-12-01 2015-12-01 Murex S.A.S. Producer graph oriented programming framework with scenario support
US9424050B2 (en) 2006-12-01 2016-08-23 Murex S.A.S. Parallelization and instrumentation in a producer graph oriented programming framework
US10083013B2 (en) 2006-12-01 2018-09-25 Murex S.A.S. Producer graph oriented programming and execution
US10481877B2 (en) 2006-12-01 2019-11-19 Murex S.A.S. Producer graph oriented programming and execution
RU2691860C1 (ru) * 2018-06-25 2019-06-18 Открытое Акционерное Общество "Информационные Технологии И Коммуникационные Системы" Способ распараллеливания программ в среде логического программирования в вычислительной системе

Similar Documents

Publication Publication Date Title
JP3707727B2 (ja) プログラムの最適化方法及びこれを用いたコンパイラ
JP3311462B2 (ja) コンパイル処理装置
US6718541B2 (en) Register economy heuristic for a cycle driven multiple issue instruction scheduler
US6487715B1 (en) Dynamic code motion optimization and path tracing
US6381739B1 (en) Method and apparatus for hierarchical restructuring of computer code
US6044222A (en) System, method, and program product for loop instruction scheduling hardware lookahead
US11243816B2 (en) Program execution on heterogeneous platform
US20050144602A1 (en) Methods and apparatus to compile programs to use speculative parallel threads
US6412105B1 (en) Computer method and apparatus for compilation of multi-way decisions
Mehrara et al. Dynamic parallelization of JavaScript applications using an ultra-lightweight speculation mechanism
US20050289530A1 (en) Scheduling of instructions in program compilation
WO2007055875A1 (en) Method and apparatus for software scouting regions of a program
JPH0734178B2 (ja) 変換コードを実行するための効果的エラー報告
JPH02217926A (ja) コード生成方法
JP2009524866A (ja) プログラムの並列実行のためのシステム及び方法
EP2924559A2 (en) Program, compiler method, and compiler apparatus
JPH04330527A (ja) プログラムの最適化方法及びコンパイラ・システム
US5721893A (en) Exploiting untagged branch prediction cache by relocating branches
JPH0738158B2 (ja) コード最適化方法およびコンパイラ・システム
RU2206119C2 (ru) Способ получения объектного кода
Koopman A preliminary exploration of optimized stack code generation
US6564372B1 (en) Critical path optimization-unzipping
JP6427053B2 (ja) 並列化コンパイル方法、及び並列化コンパイラ
Briggs et al. Goal-directed interprocedural optimization
Popov et al. Piecewise holistic autotuning of compiler and runtime parameters

Legal Events

Date Code Title Description
MM4A The patent is invalid due to non-payment of fees

Effective date: 20100923

NF4A Reinstatement of patent

Effective date: 20130110