Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Сб янв 16, 2021 15:43

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 49 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Сб окт 09, 2010 15:09 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7122
Благодарил (а): 17 раз.
Поблагодарили: 119 раз.
Mihail писал(а):
Хищник писал(а):
А польскую запись потом можно будет превратить в исходный граф?

Какие могут быть сомнения?


Вот такие: :))
Mihail писал(а):
Граф можно заполнять по разному.


Mihail писал(а):
Но при восприятии инфиксной нотации,естественным образом,
получается именно в порядке польской записи.

Это очевидно. Но если посмотреть на граф, то можно обнаружить, что обходить его можно разными способами. Для процессоров, начиная с Pentium, доступны несколько конвейеров, которые могут на уровне команд распараллелить вычисления. Однако для этого может потребоваться обход графа с разных веток. Например, при сложении a + b + c + d прямой перевод в стековое представление даст a b + c + d +, и никакого распараллеливания не получается - следующая команда должна знать результат предыдущей. Требуется переупорядочить команды, выполнив сначала a + b и c + d, которые могут быть запущены процессором параллельно на аппаратном уровне. Если у процессора больше исполнительных устройств, он может пустить параллельно много веток вычислений. Вот для этого и может быть полезно промежуточное представление, отличное от стекового.
Mihail писал(а):
Хищник писал(а):
то тут и проявилось бы понятие оптимальности

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

Мда... все изложенное выше ты попросту пустил мимо ушей. :?
Mihail писал(а):
Хищник писал(а):
А ничего, что второй сотрудник, который знает ассемблер, может и игнорировать существование твоего продукта, а писать самостоятельно?

Да. Ассемблер второй сотрудник не знать не может. Но он может ничего не знать
о предметной области, под которую создается программа. Как-раз требуется -
не навалить все на одного сотрудника, а распараллелить задачу ради сокращения сроков выполнения.

Таким образом, ты существенно сузил набор ситуаций, в которых оптимизация путем замены машинного кода вообще представляет какой-то интерес. Специалист строго по ассемблеру, который что-то пишет, но не знает, для чего это надо? Чудеса какие-то. Обычно ассемблер начинают изучать как раз предметники, которые прекрасно представляют, что им надо, видят, что это плохо получается с помощью известных инструментов, и при этом не связаны соображениями "моды" в программировании, так что священного негодования от низкоуровневости ассемблера от них ожидать вобщем-то сложно. А специальные отделы по оптимизации кода характерны для достаточно крупных коллективов. Специализация по направлениям работы рекомендуется при числе сотрудников от 15 и выше.
Mihail писал(а):
Я мел ввиду: можно найти что нибудь по данным категориям.

А я не имел в виду категории. А то получится, что велосипед - это freeware-самолет :) Я сразу писал, что заказчик может захотеть продукт, обладающий существенной конкурентоспособностью. При чем тут вообще "что-нибудь"??? Тебе заказали разработку новой САПР, а ты говоришь "ага, сейчас скачаю что-нибудь открытое, поковыряю, и продам". Ну это BolgenOS...
Mihail писал(а):
и нам приходится
пользоваться монстроидальными черными ящиками, вместо того, чтобы использовать Форт.

Да, например, монстроидальная связка СПФ+оптимизатор... ;) А попытки использовать Форт как таковой почему-то вызывают реакцию "зачем вы что-то делаете, когда вам лучше развивать уже готовое".
Mihail писал(а):
Но тенденции, к появлению полноценной системы микроплатежей, прослеживаются.
Т.ч. у фортеров есть надежда.

Это у тебя надежда, а не у фортеров.
Mihail писал(а):
Я стараюсь не принимать желаемое за действительное.
Но и действительное за желаемое принимать не собираюсь.

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

Mihail писал(а):
Формулировка проблемы + 1 доллар может быть значительно меньше чем самостоятельная
правка незнакомых исходников (не говоря уже о написании ПО с нуля).
При развитой системе микроплатежей, четкая формулировка может не потребоваться.
Можно будет приобретать появляющиеся варианты и сообща о том, чем они не устраивают.

Ты посчитал, за какое время можно заработать этот 1 доллар? При месячной зарплате в 1000 и 22 рабочих днях получается около 50 долларов в день. 8 рабочих часов - 6 долларов в час. Доллар - это 10 минут рабочего времени.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Сб окт 09, 2010 16:22 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7122
Благодарил (а): 17 раз.
Поблагодарили: 119 раз.
mOleg писал(а):
речь как раз о том, что процесс оптимизации ведется не под конкретную платформу, а под машину с бесконечным количеством регистров, и только на последней стадии происходит распределение по регистрам реальной машины. Т.е. сначала получается псевдокод, который в самом конце транслируется в систему команд.

Это естественно. Но промежуточное представление выбирается не просто так, а с определенной целью. Можно выбрать наиболее универсальное, наиболее простое, или наиболее подходящее для последующей кодогенерации. В этом смысле для PowerPC будут хороши четверки, поскольку система команд трехадресная. А вот тройки или стек несколько сузят возможности процессора, поскольку из них не следуют последовательности команд вида add r1, r2, r3 и add r4, r5, r6 - при многоконвейерном процессоре они могут быть запущены параллельно и сразу поместят результаты куда надо. Точно так же четверки на стековом процессоре заставят превращать получившийся псевдокод в совершенно неподходящие для эффективного исполнения стековые команды. Все это не означает, что стековое представление - единственное.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Сб окт 09, 2010 16:43 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
Хищник писал(а):
Точно так же четверки на стековом процессоре заставят превращать получившийся псевдокод в совершенно неподходящие для эффективного исполнения стековые команды. Все это не означает, что стековое представление - единственное.

Кстати, да. GCC использует адские трюки, чтобы команды плавающей точки из внутреннего "четверочного" представления адаптировать к стеку x87.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Сб окт 09, 2010 18:00 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5016
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 22 раз.
Поблагодарили: 58 раз.
Хищник писал(а):
Но промежуточное представление выбирается не просто так, а с определенной целью.

Тройки из четверок получаются просто (только количество этих самых троек возрастает в два раза по отношению к четверкам и количество использованных регистров тоже увеличивается). Однако с ix86 платформой это пофигистично, т.к. есть и 0 операндные команды, а есть и трехоперандные.

dynamic-wind писал(а):
Мне как-то трудно представить ТАКИЕ преобразования, которые там делаются

Ну вот, а зачем сразу "такие"?
(для данного обсуждения о "высшем пилотаже" говорить бессмысленно).
Кроме всего прочего, хочется отметить, что простые методики в процентном отношении дают больший выигрыш, нежели сложные. Тут очень близкая параллель с перемещением в пространстве: чтобы попасть из точки А в точку Б пешком требуется, к примеру час, если бежать, то можно это время сократить в два раза (что демонстрирует оптимизатор Михаила, где даже больше двух раз выигрыш), напрягаясь все больше и больше можно отыгрывать секунды и доли секунд, но никогда дистанцию, проходимую за час вы не пробежите за 10 минут.

dynamic-wind писал(а):
-без сборки мусора,pattern-matching'a и других вкусностей.

этого я вообще не понял (к чему это относится, к устройству оптимизатора, или к оптимизируемому коду?)

dynamic-wind писал(а):
а форт до сих пор компилируют в 1 проход с peephole-оптимизацией.

Потому что, во-первых, это самый простой метод, во-вторых, дающий достаточно высокий прирост производительности.

dynamic-wind писал(а):
Олег, чтобы эффективно (и без лишнего геморроя) оптимизировать, язык должен иметь простую и четкую семантику.

зачем? Когда есть четверки\тройки, уже пофигу семантика языка.

dynamic-wind писал(а):
Как связана длина определений с количеством проходов--не понял

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

_________________
Мне бы только мой крошечный вклад внести,
За короткую жизнь сплести
Хотя бы ниточку шёлка.
fleur


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Сб окт 09, 2010 18:16 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июн 25, 2009 11:12
Сообщения: 412
Благодарил (а): 41 раз.
Поблагодарили: 8 раз.
mOleg писал(а):
dynamic-wind писал(а):
-без сборки мусора,pattern-matching'a и других вкусностей.

этого я вообще не понял (к чему это относится, к устройству оптимизатора, или к оптимизируемому коду?)
К устройству компилятора, конечно.

mOleg писал(а):
dynamic-wind писал(а):
Олег, чтобы эффективно (и без лишнего геморроя) оптимизировать, язык должен иметь простую и четкую семантику.

зачем? Когда есть четверки\тройки, уже пофигу семантика языка.

Тенденция, однако: высокоуровневые оптимизации выполнять над промежуточным представлением, что ниже входного языка, но выше всяких троек-четверок. (Замумукаешься описывать некоторые преобразования в терминах троек-четверок, и сложность алгоритмов типа O(N^3) дасть о себе знать, когда N велико)

mOleg писал(а):
речь идет о том, что оптимизация в форте должна быть локальной (т.е. оптимизируем последнее созданное определение), такие куски кода обычно невелики, и там практически нечего крутить много раз. Понятно, что тут будет своя специфика.

Ну раз должна быть... ничего не попишешь. Но многие возможности для оптимизации не проявятся без подстановки. И программист будет вынужден нарушать парадигму форта (и не только форта) "много коротких определений" в погоне за быстродействием.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Сб окт 09, 2010 18:29 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2129
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
dynamic-wind писал(а):
Олег, чтобы эффективно (и без лишнего геморроя) оптимизировать, язык должен иметь простую и четкую семантику.

Насмешили. Язык геморрою ничего не должен. :))

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Сб окт 09, 2010 20:11 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7122
Благодарил (а): 17 раз.
Поблагодарили: 119 раз.
mOleg писал(а):
Тройки из четверок получаются просто (только количество этих самых троек возрастает в два раза по отношению к четверкам и количество использованных регистров тоже увеличивается). Однако с ix86 платформой это пофигистично, т.к. есть и 0 операндные команды, а есть и трехоперандные.

Именно с x86 это не пофигистично, в силу немалой асимметрии в системе команд. Удобно, когда есть 32 регистра по 32 разряда, и команды могут выполняться над любыми их сочетаниями. А когда непонятно, положить результат в ecx (а вдруг потом будет цикл, и нужен jecxz), или в edx (а вдруг mul или in/out), надо специально озаботиться описанием соответствующих правил и зависимостей. Кстати, LEA - это не вполне удачный пример, поскольку речь идет о сложной адресации одного операнда, а не о двух операндах с независимым регистром назначения. И задача оптимизации для x86 - воспользоваться повышенной эффективностью операций над регистрами, положив туда все необходимое при возможно меньшем трафике с памятью. Если процессор 3 ГГц, а память - 1,066, то сам факт работы с памятью уже толстый намек на потерю эффективности. И вот тут становится очень важным, насколько велики возможности процессора по перекладыванию уже прочитанных из памяти данных между своими регистрами.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Сб окт 09, 2010 20:17 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7122
Благодарил (а): 17 раз.
Поблагодарили: 119 раз.
chess писал(а):
Насмешили. Язык геморрою ничего не должен.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Сб окт 09, 2010 22:26 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2129
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
Хищник писал(а):
Если язык претендует на какую-то сверхэффективность, он очень даже должен, и много чего. Или же не надо претендовать на чужое, а просто четко осознать достоинства и недостатки, и работать с ними соответственно. А то это уже похоже на тихую истерику - в отсутствие результатов начинается нахваливание Форта напропалую, вдруг народ проникнется? Вот честное слово, читая Фидо 5-7 летней давности, можно понять, что при таком подходе никто не проникнется.

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

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Сб окт 09, 2010 22:54 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7122
Благодарил (а): 17 раз.
Поблагодарили: 119 раз.
chess писал(а):
По мере решения своих задач постепенно приходит понимание слабых мест языка. Язык позволяет себя модифицировать(форт именно такой) для их исключения. То есть формируется
функция качества конкретной реализации языка, позволяющая гарантированно достигать нужных результатов.
Модификация языка для форта это абсолютно нормальный процесс.

Только я хотел бы заметить, что не обязательно модифицировать язык "в лоб", да еще с целью стать похожим на кого-то. Достижение экстремальной производительности - сложнейшая задача сама по себе, так стоит ли биться в нее лбом, игнорируя все остальное? Если копить деньги на лимузин, можно ведь в процессе накопления и с голоду помереть. Поэтому периоды модификации должны наступать как определенная реакция на недостатки языка, замеченные при выполнении предыдущего проекта на нем.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Сб окт 09, 2010 23:17 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2129
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
Хищник писал(а):
Достижение экстремальной производительности - сложнейшая задача сама по себе, так стоит ли биться в нее лбом, игнорируя все остальное?

Так давно никто и не бьется. Peephole оптимизации хватает. А если сильно прижмет, то
встроенный ассемблер позволит получить предельное ускорение.
Пожалуй только в VFX сильно потрудились видимо им сильно и надо было.

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Вс окт 10, 2010 00:23 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
chess писал(а):
если сильно прижмет, то
встроенный ассемблер позволит получить предельное ускорение

С ассемблером лучше не спешить. Предворительно, следует сообщить в конференцию о том,
что фрагмент на Форте оптимизируется неважно.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Ответ на чат :)
СообщениеДобавлено: Вс окт 10, 2010 00:39 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 7122
Благодарил (а): 17 раз.
Поблагодарили: 119 раз.
Mihail писал(а):
С ассемблером лучше не спешить. Предворительно, следует сообщить в конференцию о том,
что фрагмент на Форте оптимизируется неважно.

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


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: По поводу оптимизации кода
СообщениеДобавлено: Вс окт 10, 2010 08:13 
Не в сети
Moderator
Moderator
Аватара пользователя

Зарегистрирован: Чт май 04, 2006 00:53
Сообщения: 5016
Откуда: был Крым, теперь Новосибирск
Благодарил (а): 22 раз.
Поблагодарили: 58 раз.

M обсуждение оптимизации вынесено в отдельную тему.



Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: По поводу оптимизации кода
СообщениеДобавлено: Вс окт 10, 2010 11:33 
Не в сети

Зарегистрирован: Ср май 03, 2006 11:27
Сообщения: 1394
Откуда: St.Petersburg
Благодарил (а): 2 раз.
Поблагодарили: 11 раз.
Хищник писал(а):
человек, который в состоянии идентифицировать проблему, и отличить хорошую оптимизацию от плохой, настолько беспомощен, что не решит вопрос самостоятельно?


Бывает может, но не хочет. Идентифицировать проблему можно косвенным образом.
Например, переведя программу с другого языка, вдруг она стала работать медленнее.
Не всегда и не для всех ассемблерная вставка желательна. Плохо оптимизирующийся
фрагмент может быть маленьким, но встречаться во многих частях программы.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 49 ]  На страницу Пред.  1, 2, 3, 4  След.

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


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

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