OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 16 Апрель, 2024 03:34

Часовой пояс: UTC + 3 часа


Правила форума


Посмотреть правила форума



Начать новую тему Ответить на тему  [ Сообщений: 649 ]  На страницу Пред.  1 ... 29, 30, 31, 32, 33
Автор Сообщение
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Воскресенье, 21 Январь, 2024 04:34 
Аватара пользователя

Зарегистрирован: Воскресенье, 09 Декабрь, 2018 15:14
Сообщения: 113
Откуда: Equestria
arisu писал(а):
выравнивание по границам процессорного кэша местами сильно роялит. в процессе создания форта получилось забавное: синтетический бенчмарк стал в два раза быстрее, когда я повыравнивал все слова на 64 байта. есть смысл сделать то же самое в CP2. эффект, конечно, минимальный, но присутствует. на самом деле выравнивать лучше даже не процедуры, а циклы — но увы, нет способа автоматически определить, какие циклы hot. если равнять все подряд — то будет хуже, а не лучше.
В ящике есть какой-то профайлер, может его можно приспособить для поиска таких мест и делать подсказки кодогену для следующей компиляции.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Вторник, 23 Январь, 2024 13:25 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
в ящике нет никакого профайлера. то, что там есть — это профанация; завезено для галочки «мы типа как взрослые». посмотри в его код — и очень ох… умилишься.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Вторник, 23 Январь, 2024 23:19 
Аватара пользователя

Зарегистрирован: Воскресенье, 09 Декабрь, 2018 15:14
Сообщения: 113
Откуда: Equestria
Ну сделать "как у взрослых". Проблема чтоли.
Для микрооптимизаций он и не делался.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Вторник, 23 Январь, 2024 23:26 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
SovietPony писал(а):
Для микрооптимизаций он и не делался.

он вообще делался непонятно для чего, потому что реально показывает инфу с потолка. может попадёт на мелкую часто вызываемую процедуру, может нет, может иногда… я с таким же успехом могу и костяшку кинуть: результат по надёжности не будет сильно отличаться.

эту чушь надо просто выкинуть, и ввести в компилятор режим создания «инструментированого» кода.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Четверг, 25 Январь, 2024 11:21 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
итак, форт-система теперь генерирует честный машинный код. пока тупой, сейчас буду делать для неё промежуточное представление, и SSA-кодоген.

а потом сделать компилятор компонентного паскаля на форте, и пересадить ящик на это Чудовище, хихихи. ну, или просто кодоген для стековой вм, которую использует компилятор форта.

вообще, кстати, если подумать — то зачем ящик сохраняет сгенерированый машинный код на диск? какой смысл? даже символьные файлы — и те не особо нужны (хотя они удобны для определения изменений в модулях). ну, нужен базовый образ: ядро и минимальный набор модулей поддержки, плюс компилятор. всё остальное можно тупо компилировать в память при необходимости, не сохраняя на диск вообще. скорость компиляции сейчас быстрее, чем запись на внешний носитель, лол.

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Понедельник, 05 Февраль, 2024 01:17 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
а вы знали, знали?! часть очередная.

а вы знаете, что инструкция xchg reg32, reg32 на том, что сейчас называется x86 — адовый тормоз? обменивать регистры местами при помощи трёх mov и промежуточного регистра быстрее. причём ощутимо быстрее. судя по таймингам, в интеле посчитали, что это совершенно бесполезная инструкция, и выкинули её в микрокод. не удивлюсь, если она вообще не взаимодействует нормально с register remapper'ом, адово сталит и всё ломает.

спасибо, интели, низкий вам поклон! головы себе в микрокод засуньте, они ж вам всё равно не нужны.

p.s.: я в курсе про автолочку на xchg с памятью. но два регистра никакой автолочки не делают. (хахахаха, так написано в официальной документации, вот ты лох, ведёшься до сих пор!)

мой форт, если что, переключает стеки через "xchg ebp, esp". блин. да, замена на три "mov" дала выигрыш на всём, начиная с пересборки самой системы.

и пэпээс: я не в состоянии читать талмуды Агнера Фокса: у меня для этого слишком маленький мозг. не помещается.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Вторник, 06 Февраль, 2024 11:10 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
опытным путём выяснено: равнять начало цикла на 4 байта смысл есть. небольшой, но есть. равнять сильнее смысла нет никакого, разница в пределах статпогрешности. вот это вполне можно в CP2 засунуть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Вторник, 13 Февраль, 2024 03:53 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
по итогам живых наблюдений совсем неоптимального генератора машинного кода я пришёл к выводу, что CP2 даже чересчур оптимизирует. потому что он иногда способен запомнить значение регистра после выражения, и использовать в следующем — шибко уж умный.

а старательная оптимизация для современных x86 имеет очень мало смысла. ну вот, 38 кб довольно прямолинейного peephole (который даже не весь код сканирует, а только последние несколько инструкций после инлайна) всего примерно в 2.5 раз медленней, чем сотни мегабайт gcc -O2. это на самом деле очень прискорбно с учётом моей любви к написанию компиляторов. в peephole примерно 20 паттернов, если что, и код всё ещё выглядит как куча push и pop (форт потому что).

в общем, сканирование файла в 2гб, разбитие его на строки, и создание двух aa-деревьев на сишечке занимает ~1.5 секунды, а на Beast: Devastator — ~3.9. код более-менее одинаковый, структуры данных тоже. даже файл оба читают порциями по 4 кб. и, естественно, оба кода при непрогретых кэшах одинаково упираются в i/o, и оба пыхтят примерно 15 секунд.

в общем, лично себе я экспериментально и на реальном коде доказал, что при необходимости проще переписать пару процедур и горячих циклов на асме, нежели пытаться учить компилятор оптимизировать сложнее, чем описано в Compiler Construction.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: BlackBox: Lament Configuration
СообщениеДобавлено: Пятница, 22 Март, 2024 11:13 

Зарегистрирован: Воскресенье, 25 Декабрь, 2022 23:14
Сообщения: 1163
удивительное дело: как только плюнул слюной на стандарт форта — мой код сразу стал переносимым. вот давеча делал форт для z80 — взял, например, кусок x86-системы, который парзер (это и разбор буфера, и парзинг чисел с кучей фич, много, короче) — и оно Просто Скомпилилось. и заработало, как только я поправил баги в паре примитивов. как-то не особо парясь, что с 32 бит на 16 перетащили. и всё это без идиотии типа "CELL" и прочих «стандартных механизмов обеспечения переносимости», которые стандартизаторы считают обязательными.

это я, собственно, к тому, что рулят правильные API, и забота о ненарушении границ абстракций.

кстати сказать, мои любимые конструкции парнаса тоже мигрируют из системы в систему практически без изменений. дёшево, удобно, сердито. реально офигеть какая удобная штука. как будет очередное Великое Допиливание CP2 — обязательно добавлю.

если что — у меня пока что Всё Работает, поэтому BBCB допиливать не надо. собственно, когда-то ж пора и использовать же, а не только фичи добавлять. общая беда всех хороших систем, кстати: после некоторого порога они «перестают развиваться» (по современным понятиям). а потому что всё работает, всё хорошо. не идеально — но хорошо. а кто любит фичи ради фич — сбежал ещё раньше.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 649 ]  На страницу Пред.  1 ... 29, 30, 31, 32, 33

Часовой пояс: UTC + 3 часа


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

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


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

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB