<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Компания ЗАО Кибер Системы &#187; Особенности оптимитизации</title>
	<atom:link href="http://www.cybergenesys.ru/osobennosti-optimizacii/feed" rel="self" type="application/rss+xml" />
	<link>http://www.cybergenesys.ru</link>
	<description>Инновации в кибернетике и мехатронике</description>
	<lastBuildDate>Sat, 26 Dec 2009 14:35:23 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.4</generator>
		<item>
		<title>оптимальное использование промежуточных регистров</title>
		<link>http://www.cybergenesys.ru/ispolzovanie-promezhutochnyx-registrov.html</link>
		<comments>http://www.cybergenesys.ru/ispolzovanie-promezhutochnyx-registrov.html#comments</comments>
		<pubDate>Sat, 13 Sep 2008 10:56:05 +0000</pubDate>
		<dc:creator>ljsdfffosdnfvsdvc</dc:creator>
				<category><![CDATA[Особенности оптимитизации]]></category>
		<category><![CDATA[компилятор]]></category>
		<category><![CDATA[пример]]></category>
		<category><![CDATA[промежуточные регистры]]></category>
		<category><![CDATA[регистр]]></category>

		<guid isPermaLink="false">http://www.cybergenetic.ru/?p=87</guid>
		<description><![CDATA[Последняя область для оптимального использования промежуточных регистров является весьма важной и может дать существенный выигрыш. Засчет общего распределения этих регистров для нескольких процедур при совместной компиляции подпрограмм. Тем самым могут быть сняты накладные расходы по сохранению (восстановлению) регистров и по передаче фак тических параметров. Однако этот вопрос не будет обсуждаться в рамках этой статьи. Он [...]]]></description>
			<content:encoded><![CDATA[<p>Последняя область для оптимального использования промежуточных регистров является весьма важной и может дать существенный выигрыш. Засчет общего распределения этих регистров для нескольких процедур при совместной компиляции подпрограмм. Тем самым могут быть сняты накладные расходы по сохранению (восстановлению) регистров и по передаче фак тических параметров. Однако этот вопрос не будет обсуждаться в рамках этой статьи. Он представляет самостоятельную большую тему.</p>
<p>Когда в дальнейшем мы будем говорить об объектах, размещаемых на В/Т регистрах, мы будем понимать под ними не только явные переменные, определенные в программе, но и не явные, рабочие переменные компиляторы, константы и т. п.</p>
<p>Отметим, что различные языки могут налагать дополнительные, специфические условия на использование В/Т регистров. Например, языки с блочной структурой существенным образом используют стековую дисциплину распределения памяти. Эти специфические моменты мы здесь не будем рассматривать.</p>

	<h4>Связанные записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.cybergenesys.ru/upravlenie-operativnoj-pamyatyu.html" title="Управление внутренней оперативной памятью (September 13, 2008)">Управление внутренней оперативной памятью</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/primer-generacii.html" title="Пример генерации по сбалансированному дереву (September 13, 2008)">Пример генерации по сбалансированному дереву</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/cikly.html" title="Циклы (September 13, 2008)">Циклы</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/struktura-mnogoproxodnyx-kompilyatorov.html" title="Структура Многопроходных Компиляторов (July 7, 2008)">Структура Многопроходных Компиляторов</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/rezultat-generacii-primera-2.html" title="Результат генерации примера 2 (September 13, 2008)">Результат генерации примера 2</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.cybergenesys.ru/ispolzovanie-promezhutochnyx-registrov.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Объекты на Т регистрах</title>
		<link>http://www.cybergenesys.ru/obekty-na-t-registrax.html</link>
		<comments>http://www.cybergenesys.ru/obekty-na-t-registrax.html#comments</comments>
		<pubDate>Sat, 13 Sep 2008 10:49:53 +0000</pubDate>
		<dc:creator>ljsdfffosdnfvsdvc</dc:creator>
				<category><![CDATA[Особенности оптимитизации]]></category>
		<category><![CDATA[команды]]></category>
		<category><![CDATA[перераспределение регистров]]></category>
		<category><![CDATA[планирование потока команд]]></category>
		<category><![CDATA[последовательность команд]]></category>
		<category><![CDATA[распределение регистров]]></category>
		<category><![CDATA[регистры]]></category>

		<guid isPermaLink="false">http://www.cybergenetic.ru/?p=86</guid>
		<description><![CDATA[Предположим, что мы вначале выполняли планирование потока команд, не распределив В/Т регистры. Выполнить это планирование мы можем, следовательно, только в некоторых предположениях, предполагается, например, что все операнды будут находиться на В/Т регистрах или напротив в памяти. В результате может быть получена некоторая последовательность команд. Однако, реальное распределение В/Т регистров может привести, во-первых, к тому, что [...]]]></description>
			<content:encoded><![CDATA[<p>Предположим, что мы вначале выполняли планирование потока команд, не распределив В/Т регистры. Выполнить это планирование мы можем, следовательно, только в некоторых предположениях, предполагается, например, что все операнды будут находиться на В/Т регистрах или напротив в памяти. В результате может быть получена некоторая последовательность команд. Однако, реальное распределение В/Т регистров может привести, во-первых, к тому, что не все объекты могут быть распределены на В/Т регистры. Отсюда возникают не учтенные задержки, и таким образом, полученная последовательность команд не будет являться, вообще говоря, «лучшей» из возможных, во-вторых, влияние окажут перезагрузки. Иначе говоря, процесс теперь нужно повторить, для того чтобы получить лучший код.</p>
<p>Но то же самое можно сказать и в том случае, когда мы прежде распределяем В/Т регистры, а затем выполняем планирование. В результате планирования могут быть исключены фактические задержки, связанные со считыванием некоторых операндов, которые после распределения регистров остались в памяти, но остались не исключенными задержки, которые можно было бы исключить перераспределив В/Т регистры.</p>
<p>Иначе говоря, выполнить планирование точно мы можем, только моделируя время выполнения команд. Для этого необходимо распределить В/Т регистры. Но в результате планирования может потребоваться их перераспределение.</p>
<p>В этом смысле мы можем сказать, что вообще задачи распределения регистров и планирования предъявляют взаимо исключающие требования.</p>
<p>Мы предполагаем, что генерация идет по правой ветви и что все объекты находятся на Т регистрах, причем свободен всего один Т регистр, тогда получим следующую последовательность команд:</p>
<p>S1 Т.В</p>
<p>S2 Т.С</p>
<p>SI S1*S2 (4)</p>
<p>S2 ТА</p>
<p>SI S2—S1</p>
<p>распределив регистры находим, что только С находится там, но тогда реально команда (3) задержана командой (1), а команда (5) командой (4) и при этом распределении регистров лучшей была бы последовательность команд:</p>
<p>S1 В</p>
<p>S2 А</p>
<p>S3 Т.С (5)</p>
<p>SI S/#S3</p>
<p>SI S2—S1.</p>
<p>Теперь пробуем распределить В/Т регистры до генерации: пусть А получает регистр Т. Мы получим последовательность команд (6), но максимальная задержка будет по команде (2).</p>
<p>Эту задержку, вообще говоря, можно было бы устранить, если отдать регистр под (С).</p>
<p>В данном примере мы могли бы получить выигрыш, если бы пришли к последовательности (5)</p>
<p>S1 В</p>
<p>S2 С</p>
<p>SI S/*S2 (6)</p>
<p>S3 ТА</p>
<p>SI S3—S1.</p>
<p>Заметим, что, говоря о распределении регистров, о переста новке команд, о выигрыше, мы имели ввиду, что применяем их к некоторой последовательности команд, более широкой, чем подвыражение, анализируя ее в целом.</p>
<p>Распределение A/S регистров оказывается также тесно связанным с задачей выбора последовательности команд. Так, на пример, если осуществлять перестановку команд после распределения A/S регистров, то тем самым будет резко сужена область возможного перемещения команд. С другой стороны в перестановке до распределения Л/5 регистров трудно учесть команды их перезагрузки. Таким образом, и в этом случае она может быть несколько неточной.</p>
<p>Хотя мы выделили и сформулировали 3 задачи, мы видим, что, по сути, они являются настолько связанными, что возможно было бы правильнее сказать о том, что это 3 стороны одной общей задачи.</p>

	<h4>Связанные записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.cybergenesys.ru/primer-generacii.html" title="Пример генерации по сбалансированному дереву (September 13, 2008)">Пример генерации по сбалансированному дереву</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/raspredelenie-osnovnyx-registrov.html" title="Распределение основных регистров (September 13, 2008)">Распределение основных регистров</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/raspredelenie-vt-registrov.html" title="Распределение В/Т регистров (July 6, 2008)">Распределение В/Т регистров</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/naznachenie-virtualnyx-registrov.html" title="Повторное назначение виртуальных регистров (September 13, 2008)">Повторное назначение виртуальных регистров</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/otladchik.html" title="Отладчик ИК ВК ЭВМ (July 4, 2008)">Отладчик ИК ВК ЭВМ</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.cybergenesys.ru/obekty-na-t-registrax.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Общая схема компиляции</title>
		<link>http://www.cybergenesys.ru/obshhaya-sxema-kompilyacii.html</link>
		<comments>http://www.cybergenesys.ru/obshhaya-sxema-kompilyacii.html#comments</comments>
		<pubDate>Sat, 13 Sep 2008 09:48:28 +0000</pubDate>
		<dc:creator>ljsdfffosdnfvsdvc</dc:creator>
				<category><![CDATA[Виды преобразований]]></category>
		<category><![CDATA[генерация триплетов]]></category>
		<category><![CDATA[перестановка псевдокоманд]]></category>
		<category><![CDATA[планирование по балансу]]></category>
		<category><![CDATA[схема компиляции]]></category>

		<guid isPermaLink="false">http://www.cybergenetic.ru/?p=85</guid>
		<description><![CDATA[Рассмотрим общую схему компиляции и последовательность оптимизирующих преобразований. Компилятор строится по многопроходной схеме . Такая схема, в частности, выбрана для того, чтобы обеспечить промежуточные представления исходной программы наилучшим образом, удовлетворяющим выбранным алгоритмам оптимизационных преобразований. В данном случае нас будут интересовать следующие фазы компиляции: фаза генерации триплетов, фаза распределения В/Т регистров, фазы генерации псевдокода, фаза перестановки [...]]]></description>
			<content:encoded><![CDATA[<p>Рассмотрим общую схему компиляции и последовательность оптимизирующих преобразований.</p>
<p>Компилятор строится по многопроходной схеме .</p>
<p>Такая схема, в частности, выбрана для того, чтобы обеспечить промежуточные представления исходной программы наилучшим образом, удовлетворяющим выбранным алгоритмам оптимизационных преобразований. В данном случае нас будут интересовать следующие фазы компиляции: фаза генерации триплетов, фаза распределения В/Т регистров, фазы генерации псевдокода, фаза перестановки псевдокоманд и фаза распределения основных регистров.</p>
<p>Этим фазам компиляции соответствует следующая последовательность оптимизационных преобразований.</p>
<p>1) планирование по балансу,</p>
<p>2) распределение В/Т регистров,</p>
<p>3) перестановка псевдокоманд,</p>
<p>4) распределение A/S регистров.</p>
<p>На входе фазы генерации триплетов поступает исходная программа в промежуточном представлении. Семантическая информация хранится в словаре. В результате работы данной фазы выполняется планирование по балансу и собирается дополнительная информация, необходимая для фазы распределения В/Т регистров.</p>
<p>В компиляторе предусмотрена возможность совместной компиляции пакета п/п. Все необходимые для этого работы вы полняются предыдущими фазами. Таким образом, если задана совместная компиляция с открытой подстановкой подпрограмм, то на входе данной фазы имеется уже собранная единая программа.</p>
<p>На входе данной фазы программа представляет собой лес деревьев — триплетов.</p>
<p>Данное представление после распределения промежуточных регистров и памяти поступает на вход генератора псевдокода. Результатом его работы является последовательность псевдокоманд. Она отличается от команд, прежде всего тем, что вместо основных регистров в псевдокомандах содержатся виртуальные основные регистры. Окончательное распределение основных регистров выполняется фазой (4).</p>

	<h4>Связанные записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.cybergenesys.ru/planirovanie-po-balansu.html" title="Планирование по балансу (July 6, 2008)">Планирование по балансу</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.cybergenesys.ru/obshhaya-sxema-kompilyacii.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Пример 2</title>
		<link>http://www.cybergenesys.ru/primer-2.html</link>
		<comments>http://www.cybergenesys.ru/primer-2.html#comments</comments>
		<pubDate>Sat, 13 Sep 2008 09:38:52 +0000</pubDate>
		<dc:creator>ljsdfffosdnfvsdvc</dc:creator>
				<category><![CDATA[Виды преобразований]]></category>
		<category><![CDATA[пример]]></category>

		<guid isPermaLink="false">http://www.cybergenetic.ru/?p=84</guid>
		<description><![CDATA[Пример (2) выражения a + b^c+d+e 1. S.S1 а 2. S.S2 Ъ 3. S.S3 с 4. S.S4 S.S2*S.S3 5. S.S5 S.S1+S.S4 (7) 6. S.S6 d 7. S.S7 S.S5+S.S6 8. S.S8 е 9. S.S9 S.S8+S.S7 легко видеть, что мы не можем практически переставить никакие команды, чтобы уменьшить задержки выполнения команд 5, 7, 9. Целью планирования по [...]]]></description>
			<content:encoded><![CDATA[<p>Пример (2) выражения a + b^c+d+e</p>
<p>1. S.S1 а</p>
<p>2. S.S2 Ъ</p>
<p>3. S.S3 с</p>
<p>4. S.S4 S.S2*S.S3</p>
<p>5. S.S5 S.S1+S.S4 (7)</p>
<p>6. S.S6 d</p>
<p>7. S.S7 S.S5+S.S6</p>
<p>8. S.S8 е</p>
<p>9. S.S9 S.S8+S.S7</p>
<p>легко видеть, что мы не можем практически переставить никакие команды, чтобы уменьшить задержки выполнения команд 5, 7, 9.</p>
<p>Целью планирования по балансу является получение такого дерева, которое обеспечивало лучшие возможности для последующей перестановки команд, которые могли быть получены обычной генерацией по этому дереву.</p>
<p>Для получения такого дерева вводится некоторая весовая функция на дереве. Эта функция позволяет оценить любую ветвь или поддерево. Функция строится с учетом каждого узла дерева, которое фактически эквивалентно некоторому функци ональному устройству со своим временем выполнения команды. Весовая функция на ветви, входящей в некоторый узел или на этом же узле, точнее говоря, принимается равной максимальному значению функций на всех ветвях сыновьях, плюс время выполнения команды в этом же узле. Мы стремимся построить такое дерево, которое соответствует минимальной весовой функции по всем возможным деревьям. При этом ищем его в виде сбалансированного дерева. Это означает, что для любых двух поддеревьев, исходящих из одного узла их весовые функции будут или равны, или иметь разницу минимальную из всех возможных. Время всех однотипных листовых узлов принимается равным.</p>
<p>Здесь подразумевается, что время выполнения команды умножения соответствует приблизительно времени выполнения 2-х команд сложения, вторая из которых использует результат первой.</p>
<p>Рассматривая полученное дерево, можно также сказать, что при генерации команд по оптимизированному дереву будет обеспечена возможность независимого параллельного запуска большего числа функциональных устройств, чем по исходному дереву.</p>
<p>Тем самым мы имеет большую свободу в перестановке команд.</p>
<p>Замечание: Если бы в качестве оптимизационной задачи становилась задача обеспечения кода с максимальной степенью совмещения работы функциональных устройств, то, вероятно, можно было бы прийти к аналогичному виду оптимизации, воз можно с другой весовой функцией. В нашем же случае это не определялось в качестве критерия, хотя планирование по балансу улучшает в определенной мере дерево и по совмещению функциональных устройств.</p>

	<h4>Связанные записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.cybergenesys.ru/upravlenie-operativnoj-pamyatyu.html" title="Управление внутренней оперативной памятью (September 13, 2008)">Управление внутренней оперативной памятью</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/rezultat-generacii-primera-2.html" title="Результат генерации примера 2 (September 13, 2008)">Результат генерации примера 2</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/programmnoe-obespechenie.html" title="Программное обеспечение векторно-конвейерной ЭВМ (September 14, 2008)">Программное обеспечение векторно-конвейерной ЭВМ</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/programmno-virtualnaya-pamyat.html" title="Программно-управляемая виртуальная память (September 13, 2008)">Программно-управляемая виртуальная память</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/primer-generacii.html" title="Пример генерации по сбалансированному дереву (September 13, 2008)">Пример генерации по сбалансированному дереву</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.cybergenesys.ru/primer-2.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Результат генерации примера 2</title>
		<link>http://www.cybergenesys.ru/rezultat-generacii-primera-2.html</link>
		<comments>http://www.cybergenesys.ru/rezultat-generacii-primera-2.html#comments</comments>
		<pubDate>Sat, 13 Sep 2008 09:37:05 +0000</pubDate>
		<dc:creator>ljsdfffosdnfvsdvc</dc:creator>
				<category><![CDATA[Виды преобразований]]></category>
		<category><![CDATA[пример]]></category>

		<guid isPermaLink="false">http://www.cybergenetic.ru/?p=83</guid>
		<description><![CDATA[В результате генерации по сбалансированному дереву получим следующую последовательность команд (пример 2) S.S1 а S.S2 d S.S3 S.S2 + S.S1 S.S4 е S.S5 S.S3 + S.S4 S. S6 b S. S7 с операция умножения (8) S. S8 5.56*5.57J S. S9 5. 58 + 5. 55. В данной последовательности команд команда (9) задержи вается командой (8). [...]]]></description>
			<content:encoded><![CDATA[<p>В результате генерации по сбалансированному дереву получим следующую последовательность команд (пример 2)</p>
<p>S.S1 а</p>
<p>S.S2 d</p>
<p>S.S3 S.S2 + S.S1</p>
<p>S.S4 е</p>
<p>S.S5 S.S3 + S.S4</p>
<p>S. S6 b</p>
<p>S. S7 с операция умножения (8)</p>
<p>S. S8 5.56*5.57J</p>
<p>S. S9 5. 58 + 5. 55.</p>
<p>В данной последовательности команд команда (9) задержи вается командой (8). Однако эту задержку мы можем частично связать, переставив впоследствии операцию умножения перед командой (3). Принцип перестановки будет объяснен далее. Для данного примера тем самым мы получим лучший код, по сравнению с исходным.</p>
<p>Кроме того, на данном этапе оптимизации выполняется так же работа по выносу триплетов вызова функций, входящих в выражение вперед, с учетом скобочной структуры выражения. Полученный таким образом код обеспечивает первоначальное выполнение всех возможных функций, а затем уже вычисление собственно выражения. Вычисление выражения (соответствую щий поток команд) не будет прерываться командами вызова функций.</p>

	<h4>Связанные записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.cybergenesys.ru/upravlenie-operativnoj-pamyatyu.html" title="Управление внутренней оперативной памятью (September 13, 2008)">Управление внутренней оперативной памятью</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/programmnoe-obespechenie.html" title="Программное обеспечение векторно-конвейерной ЭВМ (September 14, 2008)">Программное обеспечение векторно-конвейерной ЭВМ</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/programmno-virtualnaya-pamyat.html" title="Программно-управляемая виртуальная память (September 13, 2008)">Программно-управляемая виртуальная память</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/primer-generacii.html" title="Пример генерации по сбалансированному дереву (September 13, 2008)">Пример генерации по сбалансированному дереву</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/primer-2.html" title="Пример 2 (September 13, 2008)">Пример 2</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.cybergenesys.ru/rezultat-generacii-primera-2.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Пример генерации по сбалансированному дереву</title>
		<link>http://www.cybergenesys.ru/primer-generacii.html</link>
		<comments>http://www.cybergenesys.ru/primer-generacii.html#comments</comments>
		<pubDate>Sat, 13 Sep 2008 09:31:42 +0000</pubDate>
		<dc:creator>ljsdfffosdnfvsdvc</dc:creator>
				<category><![CDATA[Виды преобразований]]></category>
		<category><![CDATA[баланс]]></category>
		<category><![CDATA[возможности]]></category>
		<category><![CDATA[время]]></category>
		<category><![CDATA[генерация]]></category>
		<category><![CDATA[команды]]></category>
		<category><![CDATA[перестановка команд]]></category>
		<category><![CDATA[последовательность команд]]></category>
		<category><![CDATA[пример]]></category>
		<category><![CDATA[псевдокод]]></category>
		<category><![CDATA[псевдокоманды]]></category>
		<category><![CDATA[регистр]]></category>
		<category><![CDATA[сбалансированное дерево]]></category>

		<guid isPermaLink="false">http://www.cybergenetic.ru/?p=82</guid>
		<description><![CDATA[Пример. b+ (a^.d+e) +с Пусть в результате генерации по сбалансированному дереву получили следующую последовательность команд: 1. S.S1 а 2. S.S2 d 3. S.S3 S.S2*S.S1 4. S.S4 е 5. S.S5 S.S3+S.S4 (9) 6. S.S6 Ь 7. S.S7 с 8. S.S8 S.S6+S.S7 9. S.S9 S.S8 + S.S5. Для облегчения перестановки команд, связанных непосредственно с командой, вызывающей задержку [...]]]></description>
			<content:encoded><![CDATA[<p>Пример. b+ (a^.d+e) +с</p>
<p>Пусть в результате генерации по сбалансированному дереву получили следующую последовательность команд:</p>
<p>1. S.S1 а</p>
<p>2. S.S2 d</p>
<p>3. S.S3 S.S2*S.S1</p>
<p>4. S.S4 е</p>
<p>5. S.S5 S.S3+S.S4 (9)</p>
<p>6. S.S6 Ь</p>
<p>7. S.S7 с</p>
<p>8. S.S8 S.S6+S.S7</p>
<p>9. S.S9 S.S8 + S.S5.</p>
<p>Для облегчения перестановки команд, связанных непосредственно с командой, вызывающей задержку (в примере (9) команды 6, 7), иначе говоря, поддерева на данном представлении псевдокоманд сохраняется информация, отражающая древовидную структуру или взаимозависимость команд, полученных при генерации по дереву.</p>
<p>В примере (9) команда (8) вызывает задержку команды (9). Для устранения этой задержки требуется вместе с командой (8) переставить команды (6) и (7), иначе говоря, поддерево.</p>
<p>Имеется две возможности: 1) переставить поддерево перед командой (1). В этом случае время жизни регистра S.S8 распространяется на весь интервал (команда (1)—команда (9)).</p>
<p>Мы можем также переставить поддерево между командами (3) и (4). Команда (5) не может быть начата пока не будет получен результат команды (3). Команда (4) не оказывает влияния, поэтому чтобы уменьшить время жизни регистра S.S4, мы переставляем поддерево в указанное место. Таким образом, в «окне» будут начаты команда умножения, выполняемая па раллельно с командой сложения (4).</p>
<p>Данный вид оптимизации выполняется на линейном участке, по представлению, которое получается в ходе работы генератора псевдокода. Как уже отмечалось, полученные в результате псевдокоманды отличаются от команд в том, что они содержат виртуальные, а не действительные номера A/S регистров.</p>

	<h4>Связанные записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.cybergenesys.ru/otladchik.html" title="Отладчик ИК ВК ЭВМ (July 4, 2008)">Отладчик ИК ВК ЭВМ</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/ispolzovanie-promezhutochnyx-registrov.html" title="оптимальное использование промежуточных регистров (September 13, 2008)">оптимальное использование промежуточных регистров</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/obekty-na-t-registrax.html" title="Объекты на Т регистрах (September 13, 2008)">Объекты на Т регистрах</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/identifikator-peremennoj.html" title="Идентификатор переменной есть ее вхождение (September 13, 2008)">Идентификатор переменной есть ее вхождение</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/utochnenie-imen-v-yazyke-assembler.html" title="Уточнение имен в языке ассемблер (September 13, 2008)">Уточнение имен в языке ассемблер</a> (1)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.cybergenesys.ru/primer-generacii.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Виртуальные Л/5 регистры</title>
		<link>http://www.cybergenesys.ru/virtualnye-l5-registry.html</link>
		<comments>http://www.cybergenesys.ru/virtualnye-l5-registry.html#comments</comments>
		<pubDate>Sat, 13 Sep 2008 09:28:28 +0000</pubDate>
		<dc:creator>ljsdfffosdnfvsdvc</dc:creator>
				<category><![CDATA[Виды преобразований]]></category>
		<category><![CDATA[виртуальные регистры]]></category>
		<category><![CDATA[регистры]]></category>

		<guid isPermaLink="false">http://www.cybergenetic.ru/?p=81</guid>
		<description><![CDATA[Виртуальные Л/5 регистры назначаются для текущего зна чения объекта (переменной промежуточного результата). Если значение переменной изменено, то для этого нового значения назначается новый виртуальный A/S регистр. Если при генера ции псевдокоманд для переменной уже был назначен виртуаль ный регистр и ее значение не изменилось, то команда загрузки не порождается. Предполагается, что будет использован уже распределенный [...]]]></description>
			<content:encoded><![CDATA[<p>Виртуальные Л/5 регистры назначаются для текущего зна чения объекта (переменной промежуточного результата). Если значение переменной изменено, то для этого нового значения назначается новый виртуальный A/S регистр. Если при генера ции псевдокоманд для переменной уже был назначен виртуаль ный регистр и ее значение не изменилось, то команда загрузки не порождается. Предполагается, что будет использован уже распределенный виртуальный регистр.</p>
<p>Последнее, однако, справедливо лишь для определенных интервалов, которые порождаются в процессе генерации. Пере становка команд на слишком большое расстояние приводит к увеличению времени жизни виртуальных регистров. Это, в свою очередь, может затруднить их распределение на основные A/S регистры и на резервированные В/Т регистры для промежуточ ных результатов. В конечном счете, при их нехватке могут воз никнуть команды обмена с памятью, которых желательно из бежать. Однако, перестановки удобнее выполнять на виртуаль ных регистрах.</p>
<p>В связи с этим генератор псевдокода оперирует не «бесконечным» множеством виртуальных регистров, а работает лишь с некоторым конечным их числом. Размер этого «пула» виртуальных регистров определяется как число основных A/S регистров плюс число резервированных промежуточных В/Т регистров.</p>
<div></div>

	<h4>Связанные записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.cybergenesys.ru/naznachenie-virtualnyx-registrov.html" title="Повторное назначение виртуальных регистров (September 13, 2008)">Повторное назначение виртуальных регистров</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/raspredelenie-osnovnyx-registrov.html" title="Распределение основных регистров (September 13, 2008)">Распределение основных регистров</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/obekty-na-t-registrax.html" title="Объекты на Т регистрах (September 13, 2008)">Объекты на Т регистрах</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/zadacha-raspredeleniya-osnovnyx-registrov.html" title="Задача распределения основных регистров (July 6, 2008)">Задача распределения основных регистров</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/bazovye-apparatnye-sredstva.html" title="Базовые аппаратные средства вычислительной системы (July 13, 2008)">Базовые аппаратные средства вычислительной системы</a> (2)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.cybergenesys.ru/virtualnye-l5-registry.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Повторное назначение виртуальных регистров</title>
		<link>http://www.cybergenesys.ru/naznachenie-virtualnyx-registrov.html</link>
		<comments>http://www.cybergenesys.ru/naznachenie-virtualnyx-registrov.html#comments</comments>
		<pubDate>Sat, 13 Sep 2008 09:27:07 +0000</pubDate>
		<dc:creator>ljsdfffosdnfvsdvc</dc:creator>
				<category><![CDATA[Виды преобразований]]></category>
		<category><![CDATA[виртуальные регистры]]></category>
		<category><![CDATA[назначение вертуальных регистров]]></category>
		<category><![CDATA[оператор]]></category>
		<category><![CDATA[повторное назначение регистров]]></category>
		<category><![CDATA[регистр]]></category>
		<category><![CDATA[регистры]]></category>

		<guid isPermaLink="false">http://www.cybergenetic.ru/?p=80</guid>
		<description><![CDATA[При исчерпании виртуальных регистров из этого пула в процессе генерации происходит их повторное назначение. Таким образом, в процессе генерации линейный участок может быть разбит на интервалы, определяемые повторным назначением конечных виртуальных регистров, образующих пул. На каждом интервале виртуальные регистры назначаются по описанным выше правилам. Однако, каждый интервал содержит одни и те же виртуальные регистры. Поэтому [...]]]></description>
			<content:encoded><![CDATA[<p>При исчерпании виртуальных регистров из этого пула в процессе генерации происходит их повторное назначение. Таким образом, в процессе генерации линейный участок может быть разбит на интервалы, определяемые повторным назначением конечных виртуальных регистров, образующих пул. На каждом интервале виртуальные регистры назначаются по описанным выше правилам. Однако, каждый интервал содержит одни и те же виртуальные регистры. Поэтому диапазон перестановок псевдокоманд фактически определен этими интервалами, иначе говоря, повторным использованием виртуального регистра.</p>
<p>Размер интервала существенно зависит от размера пула. В первом варианте предполагается использовать пул объемом 16 регистров. Как показывает опыт, это позволяет проводить перестановки в диапазоне нескольких операторов, возможно в линейном блоке целиком.</p>
<p>Следует также отметить, что в конце оператора все промежуточные значения перестают существовать.</p>
<p>Граница между интервалами может быть выровнена по концу оператора.</p>
<p>При этом результаты промежуточных вычислений будут размещаться на A/S регистрах или на промежуточных В/Т регистрах.</p>

	<h4>Связанные записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.cybergenesys.ru/bazovye-apparatnye-sredstva.html" title="Базовые аппаратные средства вычислительной системы (July 13, 2008)">Базовые аппаратные средства вычислительной системы</a> (2)</li>
	<li><a href="http://www.cybergenesys.ru/virtualnye-l5-registry.html" title="Виртуальные Л/5 регистры (September 13, 2008)">Виртуальные Л/5 регистры</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/yazyk-assemblera-vk-evm.html" title="Язык ассемблера ВК ЭВМ (July 5, 2008)">Язык ассемблера ВК ЭВМ</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/raspredelenie-osnovnyx-registrov.html" title="Распределение основных регистров (September 13, 2008)">Распределение основных регистров</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/raspredelenie-vt-registrov.html" title="Распределение В/Т регистров (July 6, 2008)">Распределение В/Т регистров</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.cybergenesys.ru/naznachenie-virtualnyx-registrov.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Распределение основных регистров</title>
		<link>http://www.cybergenesys.ru/raspredelenie-osnovnyx-registrov.html</link>
		<comments>http://www.cybergenesys.ru/raspredelenie-osnovnyx-registrov.html#comments</comments>
		<pubDate>Sat, 13 Sep 2008 09:18:28 +0000</pubDate>
		<dc:creator>ljsdfffosdnfvsdvc</dc:creator>
				<category><![CDATA[Виды преобразований]]></category>
		<category><![CDATA[команды перезагрузки распределение регистров]]></category>
		<category><![CDATA[основные регистры]]></category>
		<category><![CDATA[регистры]]></category>

		<guid isPermaLink="false">http://www.cybergenetic.ru/?p=79</guid>
		<description><![CDATA[Распределение основных регистров выполняется одним из методов распределения регистров на линейном участке, например, методом счетчика использования на каждом интервале. Если виртуальные регистры не удается целиком отобразить на A/S регистры, то могут возникать команды перезагрузки A/S регистров с использованием промежуточных BIT регистров, однако появление команд обмена с памятью здесь уже не возникает. Команды перезагрузки вставляются в [...]]]></description>
			<content:encoded><![CDATA[<p>Распределение основных регистров выполняется одним из методов распределения регистров на линейном участке, например, методом счетчика использования на каждом интервале. Если виртуальные регистры не удается целиком отобразить на A/S регистры, то могут возникать команды перезагрузки A/S регистров с использованием промежуточных BIT регистров, однако появление команд обмена с памятью здесь уже не возникает.</p>
<p>Команды перезагрузки вставляются в поток именно в том месте, по временной диаграмме, где сохраняемое значение уже готово, поэтому они не должны породить дополнительных за держек. С другой стороны, они не должны ставиться слишком «далеко», чтобы освободить регистр как можно раньше.</p>
<p>Рассмотрим последовательность команд (9) после выполнения перестановки:</p>
<p>1.<br />
5.5/<br />
а</p>
<p>2.<br />
5.52<br />
d</p>
<p>3.<br />
5. S3<br />
S.</p>
<p>SI</p>
<p>4.<br />
S.S6<br />
Ъ</p>
<p>5.<br />
S.S7<br />
с</p>
<p>6.<br />
S.S8<br />
S.<br />
S6+S.<br />
57</p>
<p>7.<br />
S.S4<br />
е</p>
<p>8.<br />
5.55<br />
S.<br />
S3 + S.<br />
S4</p>
<p>9.<br />
S.S9<br />
S.<br />
S8 + S.<br />
55.</p>
<p>Предположим, что мы имеем в распоряжении 3 регистра 5 и нам необходимо сохранить 5.53 для дальнейших вычислений. В результате получим следующий код:</p>
<p>1. S/ а</p>
<p>2. S2 d</p>
<p>3. S/ S1*S2</p>
<p>4. S2 b</p>
<p>5. S3 с</p>
<p>6. S2 S2 +S3 #. T.R1 SI</p>
<p>7. S3 e</p>
<p>8. S7 S1 + S3</p>
<p>9. SI S1 + S2.</p>
<p>Команда сохранения отмечена звездочкой. К моменту ее запуска значение регистра S/ уже готово.</p>

	<h4>Связанные записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.cybergenesys.ru/zadacha-raspredeleniya-osnovnyx-registrov.html" title="Задача распределения основных регистров (July 6, 2008)">Задача распределения основных регистров</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/naznachenie-virtualnyx-registrov.html" title="Повторное назначение виртуальных регистров (September 13, 2008)">Повторное назначение виртуальных регистров</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/obekty-na-t-registrax.html" title="Объекты на Т регистрах (September 13, 2008)">Объекты на Т регистрах</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/virtualnye-l5-registry.html" title="Виртуальные Л/5 регистры (September 13, 2008)">Виртуальные Л/5 регистры</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/bazovye-apparatnye-sredstva.html" title="Базовые аппаратные средства вычислительной системы (July 13, 2008)">Базовые аппаратные средства вычислительной системы</a> (2)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.cybergenesys.ru/raspredelenie-osnovnyx-registrov.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Циклы</title>
		<link>http://www.cybergenesys.ru/cikly.html</link>
		<comments>http://www.cybergenesys.ru/cikly.html#comments</comments>
		<pubDate>Sat, 13 Sep 2008 09:11:53 +0000</pubDate>
		<dc:creator>ljsdfffosdnfvsdvc</dc:creator>
				<category><![CDATA[Виды преобразований]]></category>
		<category><![CDATA[алгоритм векторизации]]></category>
		<category><![CDATA[компилятор]]></category>
		<category><![CDATA[циклы]]></category>

		<guid isPermaLink="false">http://www.cybergenetic.ru/?p=78</guid>
		<description><![CDATA[В первой версии разрабатываемого компилятора с Паскаля векторизации подвергается for циклы, в тело которых входят только операторы присваивания и вложенные операторы for. Таким образом, структура и уровень вложенности циклов мо­гут быть произвольными, в то время, как наличие в теле лю­бых других операторов языка (ввода/вывода, условных, goto, вызовов процедур, за исключением вызовов стандартных функ­ций, имеющих векторный [...]]]></description>
			<content:encoded><![CDATA[<p>В первой версии разрабатываемого компилятора с Паскаля векторизации подвергается for циклы, в тело которых входят только операторы присваивания и вложенные операторы for. Таким образом, структура и уровень вложенности циклов мо­гут быть произвольными, в то время, как наличие в теле лю­бых других операторов языка (ввода/вывода, условных, goto, вызовов процедур, за исключением вызовов стандартных функ­ций, имеющих векторный аналог) исключает попытку распа­раллеливания соответствующего цикла.</p>
<p>Следует отметить, что некоторые из ограничений, например, выход из цикла по goto носят принципиальный характер, в рамках применяемого подхода. Остальные ограничения могут быть сняты в порядке усовершенствования компилятора, без су­щественного изменения основного алгоритма векторизации. Во­прос о целесообразности внесения тех или иных дополнений должен решаться в процессе анализа эффективности использо­вания данного метода в целом, и поэтому в настоящей работе способы снятия ограничений не рассматриваются.</p>

	<h4>Связанные записи</h4>
	<ul class="st-related-posts">
	<li><a href="http://www.cybergenesys.ru/upravlenie-operativnoj-pamyatyu.html" title="Управление внутренней оперативной памятью (September 13, 2008)">Управление внутренней оперативной памятью</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/struktura-mnogoproxodnyx-kompilyatorov.html" title="Структура Многопроходных Компиляторов (July 7, 2008)">Структура Многопроходных Компиляторов</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/struktura-arxiva.html" title="Структура архива файловой подсистемы (September 13, 2008)">Структура архива файловой подсистемы</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/podsistema-yazykovogo-urovnya.html" title="Подсистема языкового уровня (ЯУП) (September 13, 2008)">Подсистема языкового уровня (ЯУП)</a> (0)</li>
	<li><a href="http://www.cybergenesys.ru/ispolzovanie-promezhutochnyx-registrov.html" title="оптимальное использование промежуточных регистров (September 13, 2008)">оптимальное использование промежуточных регистров</a> (0)</li>
</ul>

]]></content:encoded>
			<wfw:commentRss>http://www.cybergenesys.ru/cikly.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

