|
COM‐пропагандист
|
|
Тест быстроты сгенерированного кода10.05.2021, 18:45. Показов 15217. Ответов 100
Синтетический тест быстроты сгенерированного кода разных компиляторов на основе алгоритма быстрой сортировки.
## Требования 1. Алгоритм быстрой сортировки (сортировка Хоара с разбиением по Хоару). 2. Сортировка по возрастанию: от маленького значения к большему. 3. Посторонние библиотеки для сортировки не использовать. 4. Сортировка в одном потоке. ### Измерения 1. Измеряется время сортировки массива. 2. Десять циклов измерений времени, выводится среднее. ### Данные 1. Длина массива 50000000 (пятьдесят миллионов). 2. Тип данных массива: структура из двух полей типа Double: {LowPart, HighPart}. 3. На каждом цикле массив заполняется случайными значениями в интервале `[0, 1)`. 4. Генератор случайных чисел инициализируется заново перед каждым заполнением массива. 5. Количество рекурсивных вызовов функции сотировки должно быть одинаковым на одном и том же наборе данных. 6. Затравка для генератора случайных чисел равна нулю. 7. Функция сравнения переменных a и b (возможна оптимизация): ``` (a.HighPart < b.HighPart) Or ((a.HighPart = b.HighPart) And (a.LowPart < b.LowPart)) ``` ### Вывод 1. Время выполнения сортировки по каждому циклу. 2. Количество рекурсивных вызовов сортировки (должно быть одинаковым). 3. Среднее время. Для компиляции этой программы необходим gcc (для "-gen gcc" на x86) и mingw (для утилиты mingw32-make). Необходимые пути к компилятору и утилитам указаны в пакетных файлах. В результате: FreeBASIC с задником GCC 5.2.0: среднее время 12080 миллисекунд. FreeBASIC с задником GCC 8.1.0: среднее время 12445 миллисекунд. FreeBASIC с задником GCC 10.2.0: среднее время 10993 миллисекунд. Забавно, что звучащая фоном музыка может замедлять задачу на 1000 миллисекунд. Приглашаю вступить в игру пропагандистам других диалектов бесика.
1
|
|
| 10.05.2021, 18:45 | |
|
Ответы с готовыми решениями:
100
Ошибки сгенерированного кода Выполнение кода, сгенерированного Roslyn Чтение сгенерированного кода в Visual Studio |
|
COM‐пропагандист
|
|||
| 20.05.2021, 16:17 [ТС] | |||
|
Ещё можно в GCC отправить «-fdata-sections -ffunction-sections», если ничего большого нет в секции .bss. Добавлено через 1 час 55 минут
0
|
|||
|
Кормпилятор
|
|
| 20.05.2021, 23:20 | |
|
Боже как мне не нравится вот эта вся херня, разбивать диалект по кускам и таскать ещё тысячи говнофайлов.
Всё и на PB и на FB было прекрасно и тут начинается это, там быстрее тут быстрее. Да насрать просто. Лишняя возня и гемор.
0
|
|
|
|
|||
| 20.05.2021, 23:37 | |||
|
Вот что побудило Фреда (разработчика PB) написать транслятор в Си https://www.purebasic.fr/blog/?p=480 Перевод гугла
0
|
|||
|
Кормпилятор
|
||
| 21.05.2021, 00:37 | ||
|
много было(FASM то чужой). Короче ясно, ARM они захотели, денег с эпловодов. Лёгкой наживы. Подвязав себя, прогнулись под чужое решение. Посмотрим как у них это получится.
0
|
||
|
Кормпилятор
|
|
| 21.05.2021, 01:23 | |
|
Короче держите резы. Ryzen 3900X
Просто откомпилировал версией (FreeBASIC Compiler - Version 1.07.2 (2020-12-25), built for win32 (32bit)) В кастомный кусорт вникать не буду, нафиг надо.
0
|
|
|
|
||
| 21.05.2021, 07:08 | ||
|
Вот у тебя один только процессор в общем дороже всего моего компа, и в частности моего процессора примерно в 7 раз ![]() Не оптимизированная версия программы у тебя отработала в среднем за 14.6 сек. Оптимизированная версия на моём компе отработала за 8.9 сек., на ~ 35% быстрее. Вот и думай, почему для современных программ людям навязывают такие компы как у тебя, хотя если бы всё оптимизировать и вылизать до байта, как ты любишь, то хватило бы такого компа, как у меня, и ещё бы на 30 % быстрее работало! PS. И заметь, что скорость разработки тут не страдает, код один и тот же. Мы получаем реальный прирост только лишь сменив один компилятор на другой.
1
|
||
|
COM‐пропагандист
|
|||||||
| 21.05.2021, 10:06 [ТС] | |||||||
|
* сохраняются отступы; * много пустых меток; * нет подавления предупреждений; * встроенные типы данных транслируются в псевдонимы с чётким указанием разрядности и знаковости; * все используемые в файле типы данных объявляются в этом же файле; * структуры объявляются без псевдонима и используются в тексте без псевдонима; * имена функций переводятся в верхний регистр (если не было модификатора Alias); * имена переменных переводятся в верхний регистр и добавляется суффикс $ с цифрой; * операторы и функции‐члены декорируются по правилам, стремящимся к совместимости с C++; * переменные объявляются не в начале функции, а в месте кода где они объявлены по тексту программы; * переменные из текста объявляются без инициализирующего значения, инициализирующее значение присваивается переменной на следующей строке; * результат вызова функций сначала записывается во временную переменную, затем значение временной переменной сохраняется в настоящей переменной; * встроенные дефиниции компиляции транслируются в константы и литералы, а не переменные; * использует встроенные функции типа __builtin_memcpy, __builtin_memset и подобные; * нет индексации по указателю для полей структур, вместо этого указатель приводится к uint8*, прибавляется смещение в байтах и результат приводится обратно к типу данных; * для указателей ставит звёздочку рядом с типом данных, но это неправильно, звёздочку необходимо ставить рядом с именем переменной; * не добавляет __stdcall для функций на x64; * на x64 у числовых литералов всегда есть префикс типа данных; * строковые литералы записываются не как массив кодов символов, а как текст в кавычках "text literal", к широким литералам добавляется приставка L"text literal"; * все циклы редуцируются до переходов GOTO по метке с проверкой условия; * условные операторы типа «не равно», «больше», «меньше» могут быть инвертированы, и тела условий переставлены местами; Добавлено через 8 минут Вот модифицированный код быстрой сортировки. Он работает с той же скоростью, однако выглядит понятнее и соответствует коду из Педивикии:
0
|
|||||||
|
|
|||
| 21.05.2021, 12:25 | |||
|
1
|
|||
|
COM‐пропагандист
|
|||
| 21.05.2021, 12:30 [ТС] | |||
|
2. Возьмите также версию с задником GCC 8.1.0, она быстрее. 3. Добавляйте опцию компиляции -gen gcc.
0
|
|||
|
|
||
| 21.05.2021, 13:37 | ||
0
|
||
|
COM‐пропагандист
|
|
| 21.05.2021, 14:49 [ТС] | |
|
0
|
|
|
Кормпилятор
|
||||
| 21.05.2021, 15:32 | ||||
|
И скорость разработки страдает, разные задачи часто приходится компилировать сотни раз, проверяя те или иные вещи, возросшее время компиляции в три раза - это такое себе. Оптимизировать нужно нормальную задачу, а не какую-то пустотелую сортировку. Плюс эти промежуточные тесты на утках мало чего дают. В приложении с миксом задач разной структуры и сложности таких приростов не будет. Эффект вау на лёгких прогонных задачах меня мало интересует. Касаемо компа, его взял чтобы решить проблему с секвенсором, в итоге нифига не решил. Работает в RT это чудо как говно и это видно даже по этим результатам, никто и не сомневался что ядра интел местами по однопотоку вкуснее, но есть нюансы, эти ЦП заточены под тяжёлые, хорошо кешируемые, сильно распараллеливаемые задачи и в них они действительно неплохи. А так у меня есть ноут, 3-й пень, целерон 1200 с 98-й виндой и мне его хватает, причём и второго бы хватало чисто для кодинга, но нужен интернет и максимально быстрая работа с браузером, для этого кстати мне хватает и X5470, поставлю туда XPx64 и будет отпад. Рязань эту долбаную ещё даже не настроил толком, времени и хардов свободных нет. Просто этой всей возьнёй должны не программисты заниматься, а разработчики средств разработки. И по итогу конечно хочется иметь один файл вида FBC.EXE, как бы не буду заглядывать внутрь, мне это не нужно доверяю разработчикам. Но если это монстр на 500 мегабайт как у QB64 и ожиданием начала компиляции в 4 секунды - то они уйдут лесом. Мне нужно что-то не толстое, минимальное, компилирующее в клик, чтобы не ждал пока запустится один транслятор, второй, третий, пока оно выкакает мне экзешник. В этом плане старенький QuickBasic вне конкуренции. Добавлено через 32 секунды
0
|
||||
|
|
|||
| 21.05.2021, 16:20 | |||
|
С оптимизацией компилятором код работает в два раза быстрее.
0
|
|||
|
|
|||
| 21.05.2021, 17:39 | |||
|
0
|
|||
|
Кормпилятор
|
|||
| 21.05.2021, 22:44 | |||
|
это лютая, абсолютно бесполезная херня. Спроси любого демщика из нормальной демогруппы выступавшей годах в 95-х. Они об оптимизации знают всё. И нет каких-то других приёмов оптимизации, чем общеизвестные. В нормальных, нашпигованных логикой задачах автоматический оптимизатор может обосраться так, что мама не горюй. Измерение же скоростей на 20 строках кода "этопять". И да, нормальные люди никогда рекурсию не оставят у себя в серьёзном проекте. Повторюсь, мы тут ничего сейчас не измеряем, задача не позволяет. По поводу ассемблера - те кто под x86-64 винду\линукс пишут - применяют и не парятся. Как бы от него не хотели избавиться "ценители современных тенденций" - это ключевое звено в оптимизации. И то, что Фред там что-то считает - это его личное мнение, у меня своё есть, пусть дальше "прогибается под изменчивый мир" и жопу лижет, с ним всё ясно, захотел лёгких денег, потом начнутся проблемы. Лучшие годы как PB так и FB - далеко позади. С таким подходом оно всё будет загибаться дальше. Перерождения не случится, это вопрос чисто идеологический. Фортран тому прекрасный пример, умерло поколение программистов - умер язык. Качество компилятора важно, когда ты чётко понимаешь, что он делает на НУ, когда ты это не пасёшь, то - один фиг, это как подбросить монетку: соптимизирует или сделает хуже. В нормальной задаче конечно. Поэтому архитектура в сто крат важнее, т.к. её ты знаешь и тут даже лучше, чтобы компилятор не делал лишних телодвижений, а какую-то минимальную базу, которая в него заложена. Это даст в разы большую стабильность, чем слепо полагаться на автоматический "супер умный" оптимизатор. По поводу чистового варианта - если будут билды от разработчиков - можно потестить свои проекты, почему нет, разумеется если оно будет компилироваться, а не начнёт мозги компостировать варнингами. А самому чё-то там крутить одно к другому припаивать - нафиг надо, жизнь коротка чтобы тратить её на этот бред.
0
|
|||
|
COM‐пропагандист
|
|
| 22.05.2021, 07:21 [ТС] | |
|
0
|
|
|
|
|||||||
| 22.05.2021, 11:45 | |||||||
![]() Он выполняет большую работу по разработке и отладке PB, а стоимость лицензии почти нулевая. Он не требует денег за новые версии. Лицензия покупается один раз и распространяется на все версии в том числе выпущенные после ее покупки. Действительно думаете что так можно много заработать? ![]()
0
|
|||||||
|
Кормпилятор
|
||
| 22.05.2021, 15:22 | ||
|
тогда будешь просить. Иш молодёжь пошла охамевшая. Всё им покажи да докажи.
0
|
||
| 22.05.2021, 15:22 | |
|
Как сравнить эффективность сгенерированного кода Си VS2003 VS Pelles C ver.7
C-Extension для быстроты Пайтона
Какие сервисы можно преспокойно выключить для быстроты загрузки? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
|
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет)
Содержание проекта
Симуляция вековой (50 лет) экологической сукцессии в почве леса
Основные участники: АМ-гриб, ЭКМ-гриб,. . .
|
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов
Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
|
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация
В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
|