Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Ср апр 24, 2024 10:47

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Ответить
Имя пользователя:
Заголовок:
Текст сообщения:
Введите текст вашего сообщения. Длина сообщения в символах не более: 60000

Размер шрифта:
Цвет шрифта
Настройки:
BBCode ВКЛЮЧЕН
[img] ВЫКЛЮЧЕН
[flash] ВЫКЛЮЧЕН
[url] ВКЛЮЧЕН
Смайлики ВЫКЛЮЧЕНЫ
Отключить в этом сообщении BBCode
Не преобразовывать адреса URL в ссылки
Вопрос
Теперь гостю придется вводить здесь пароль. Не от своей учетной записи, а ПАРОЛЬ ДЛЯ ГОСТЯ, получить который можно после регистрации на форуме через ЛС.:
Этот вопрос предназначен для выявления и предотвращения автоматических регистраций.
   

Обзор темы - и еще про оптимизацию
Автор Сообщение
  Заголовок сообщения:   Ответить с цитатой
Для мультипроцессорной оптимизации целевого кода
имеет смысл описать архитектуру CPU в рамках некоего языка.
Для этой цели, если ничего не напутал, можно использовать ADML ( XADML)
Architecture Description Markup Language (ADML) на базе XML


http://www.opengroup.org/architecture/a ... l_home.htm

P.S. Встретил его использование случайно для описания процессора
при замене MD файлов.
( MD - расширение файла, используемых для описания архитектуры CPU )
Сообщение Добавлено: Ср ноя 21, 2007 11:36
  Заголовок сообщения:   Ответить с цитатой
Гость писал(а):
Видется мне, что твой оптимизатор для более качественной оптимизации должен уметь распознать в потоке инструкций ассемблера высокоуровневые операции Форта ( например реализацию команды CMOVE) чтобы без анализа состояния стека сформировать оптимальный
регистрово зависимый код.

Это можно сделать заранее написав второй вариант реализации CMOVE на ассемблере оптимально по скорости его выполнения и при компиляции прямо его подставить в код. Но тогда рушится вся концепция виртуальной Форт-машины.
Сообщение Добавлено: Пт авг 18, 2006 10:43
  Заголовок сообщения:   Ответить с цитатой
Mihail писал(а):
Я просто смотрю листинг программы и нахожу часто
встречающийся избыточный код. Найдя, создаю правило. Правило - это
условный запуск корректной замены.

Может вместо анализа листинга использовать Vtune от Intel, вроде неплохой анализатор скорости исполнения кода.
Сообщение Добавлено: Пт авг 18, 2006 09:23
  Заголовок сообщения:   Ответить с цитатой
Mihail писал(а):
... Большенство Фортофобов указывают на тормозной код
генерируемый Фортом.

Интересный диагноз Фортофобия сродни противоположному Фортомания:)

Видется мне, что твой оптимизатор для более качественной оптимизации должен уметь распознать в потоке инструкций ассемблера высокоуровневые операции Форта ( например реализацию команды CMOVE) чтобы без анализа состояния стека сформировать оптимальный
регистрово зависимый код.
Но информация о Форт команде в процессорных инструкциях уже отсутствует.
И если завязываться на конкретное правило, то небольшое изменение высокоуровневого кода
сделает применение данного правила бесполезным.
Сообщение Добавлено: Пт авг 18, 2006 07:01
  Заголовок сообщения:   Ответить с цитатой
mrack писал(а):
я как паверхностный пользователь spf4 могу сказать толькото что мощностей процесора хватает выше крышы


Пользователи spf4 заинтересованы в том, чтобы spf4 использовался как
можно шире. Чтобы было больше наработок и людей с которыми можно
посоветоваться. Большенство Фортофобов указывают на тормозной код
генерируемый Фортом.
Сообщение Добавлено: Чт авг 17, 2006 16:19
  Заголовок сообщения:   Ответить с цитатой
chess писал(а):
Если правил наберется много лучше их использовать последовательно - при первом проходе одно правило, при втором проходе - второе правило и т.д. Общее время оптимизации сократится, так как при каждом проходе быстрее будет поиск и замена.


Что за проходы? По исходному тексту?
Сейчас правил далеко за тысячу.
В принципе, одного прохода исходного текста достаточно.
Какие-бы мы задачи перед собой не ставили. Т.к. второй проход
нам не дает ничего нового. Одноко, в некоторых случаях, многократный
проход может упростить интерпретатор.
Команда OPT-RULES (условный вызов одного из правил)
выполняется в цикле, пока он не сможет применить не одного из правила.
Т.о. большое правило (преобразование большого фрагмента кода)
может быть автоматически выражено рядом мелких.
Сообщение Добавлено: Чт авг 17, 2006 16:07
  Заголовок сообщения:   Ответить с цитатой
Думаю при таком способе оптимизации правила иссякнут ко второму проходу:)

Есть ли какая то зависимость выражения правила для Форт языка, а не машинных
инструкций?
Сообщение Добавлено: Чт авг 17, 2006 15:56
  Заголовок сообщения:   Ответить с цитатой
Mihail писал(а):
Мой оптимизатор работает на уровне машинных кодов, поправляя работу
инлайн подстановщика. Я просто смотрю листинг программы и нахожу часто
встречающийся избыточный код. Найдя, создаю правило. Правило - это
условный запуск корректной замены.

Если правил наберется много лучше их использовать последовательно - при первом проходе одно правило, при втором проходе - второе правило и т.д. Общее время оптимизации сократится, так как при каждом проходе быстрее будет поиск и замена.
Сообщение Добавлено: Чт авг 17, 2006 15:24
  Заголовок сообщения:   Ответить с цитатой
я как паверхностный пользователь spf4 могу сказать толькото что мощностей процесора хватает выше крышы
а задачь вида кантроля в реал тайме режимов работы реактивного двигателя мне не ставятся,
и тема оптимизатора мне неимнтересна ,
ну так офтопик маленький :)
Сообщение Добавлено: Чт авг 17, 2006 15:21
  Заголовок сообщения:   Ответить с цитатой
Mihail писал(а):
Если еж будет умным.


Если еж напишет такую простую функцию качества, как была приведена выше, он тут же увидит, что она монотонна на всей области определения. А монотонная функция, да еще от единственного аргумента - это на 99% признак того, что речь идет не об оптимальности, а попросту об аккуратном программировании. Когда самый короткий и самый быстрый вариант - это одно и то же.

Mihail писал(а):
Мой оптимизатор работает на уровне машинных кодов, поправляя работу
инлайн подстановщика. Я просто смотрю листинг программы и нахожу часто
встречающийся избыточный код. Найдя, создаю правило. Правило - это
условный запуск корректной замены.


Я знаю, видел исходники. Но еще раз повторюсь, замена избыточного кода по шаблону - далеко не вся оптимизвция. То же самое можно было добавить и в компилятор, чтобы, к примеру, mov eax, 0 он заменял на xor eax, eax.

Mihail писал(а):
Почему оптимизация должна быть обязательно не очевидной?


Потому что очевидные случаи могут быть исправлены автором транслятора.
Сообщение Добавлено: Чт авг 17, 2006 14:39
  Заголовок сообщения:   Ответить с цитатой
Mihail писал(а):
Мой оптимизатор работает на уровне машинных кодов, поправляя работу
инлайн подстановщика. Я просто смотрю листинг программы и нахожу часто
встречающийся избыточный код. Найдя, создаю правило. Правило - это
условный запуск корректной замены.
Почему оптимизация должна быть обязательно не очевидной?


Вопрос:
А как конвеер процессора будет ускорять программу рассматривался?
( он, наверное, тоже работает на условных правилах).

Оптимизация может быть как очевидной так и нет.
Хорошо бы иметь в листинге ссылку на правило оптимизации конкретного случая.
Сообщение Добавлено: Чт авг 17, 2006 13:08
  Заголовок сообщения:   Ответить с цитатой
Хищник писал(а):
Ежику понятно, что n следует взять равным 0.

Если еж будет умным.
Цитата:
Оптимизировать тут нечего, можно вести речь разве что об удалении избыточного кода, что как раз и делается выделением шаблонов.

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

Цитата:
Так вот, весь вопрос будет заключаться в том, что будет чаще выполняться при работе программы: myword myword2 или myword myword3.

Мой оптимизатор работает на уровне машинных кодов, поправляя работу
инлайн подстановщика. Я просто смотрю листинг программы и нахожу часто
встречающийся избыточный код. Найдя, создаю правило. Правило - это
условный запуск корректной замены.
Цитата:
Вот тут уже оптимизационная задача во всей красе. Но ее и не решить так просто, надо же еще иметь информацию о частоте запуска того или иного фрагмента в рантайме.

Почему оптимизация должна быть обязательно не очевидной?
Сообщение Добавлено: Чт авг 17, 2006 12:29
  Заголовок сообщения:   Ответить с цитатой
Еще насчет оптимизации.
Изображение
Нарисовал картинку процесса Peephole(глазок-англ.) оптимизации.
Красным показан исходный объем кода программы(это площадь).
Синим показан идеальный конечный результат(ИКР)-минимальный объем кода для программы.
Время выполнения программы понимается как время за которое при постоянной скорости можно
пройти по краю красной площади(не путать с москвовской :lol:)-это для реального кода, и по синей- для ИКР. Видно, что время(длина) исполнения уменьшается, при этом площадь(объем кода) может тоже уменьшиться, а может и увеличиться. Но уменьшение времени незначительно.
Критерии локальной оптимизации могут быть разными, например сведение нескольких следующих
друг за другом операций с параметрами на стеке данных к одной операции, реализованной без использования стека, замена арифметических операций над параметрами на стеке на другие без использования стека, с минимальным использованием памяти(на регистрах) и т.п. Результат при однопроходной компиляции будет незначительным. Но если сделать много проходов, а за метод
локальной оптимизации принять выбор оптимального варианта реализации заданного программой алгоритма изменения данных в памяти на отрезке оптимизации кода на уровне команд процессора,
то можно выпрямить код до близкого к ИКР. То есть работа оптимизатора должна идти на уровне
машинного кода.
Сообщение Добавлено: Чт авг 17, 2006 12:14
  Заголовок сообщения:   Ответить с цитатой
Mihail писал(а):
Думаю, существует множество определений оптимизации.
Однако, определять следует цель которую мы преследуем.
Естественно даром ничего не дается. Но какой смысл завязываться
на исдержках, определяя позитивное понятие?


Почему "завязываться"? Без издержек нет оптимизации. Вообще нет, по определению. К примеру, вот код

2 2 +
2 2 dup drop +
2 2 dup drop dup drop +
2 2 dup drop dup drop dup drop +
...

Допустим, что каждая команда выполняется 5 тактов. Тогда в зависимости от числа n совершенно лишних пар dup drop общее число тактов будет 15+10*n. Обычная монотонная функция. Ежику понятно, что n следует взять равным 0. Оптимизировать тут нечего, можно вести речь разве что об удалении избыточного кода, что как раз и делается выделением шаблонов. Другой пример:

: myword ( n -- ) бубубу рырыры фырфырфыр drop ;

Делать ли последний drop? В принципе, Броуди рекомендует "пусть слова поглощают свои параметры". Отложим в сторону стилистику и посмотрим. Пусть слово myword2, идущее за myword, требует себе тот же самый параметр (так что drop делать не надо), а слово myword3 этот параметр не требует (и drop делать надо). Так вот, весь вопрос будет заключаться в том, что будет чаще выполняться при работе программы: myword myword2 или myword myword3. Вот тут уже оптимизационная задача во всей красе. Но ее и не решить так просто, надо же еще иметь информацию о частоте запуска того или иного фрагмента в рантайме. Однако именно подобные вещи в сумме и позволяют выиграть существенные проценты производительности на коде общего вида. Для специализированного же кода эффективность определяется прежде всего стилем кодирования. Если я уже использовал инструкции SSE, ни один оптимизатор уже не улучшит этого кода, поскольку он и так представляет собой наиболее производительное для данной архитектуры решение.
Сообщение Добавлено: Ср авг 16, 2006 21:41
  Заголовок сообщения:   Ответить с цитатой
Хищник писал(а):
Вот именно. И производительность выросла, и объем уменьшился. Это не есть оптимизация в наиболее строгом понимании, поскольку речь идет об очевидных улучшениях кода.


Думаю, существует множество определений оптимизации.
Однако, определять следует цель которую мы преследуем.
Естественно даром ничего не дается. Но какой смысл завязываться
на исдержках, определяя позитивное понятие?
Сообщение Добавлено: Ср авг 16, 2006 16:54

Часовой пояс: UTC + 3 часа [ Летнее время ]


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB