Free Pascal быстрее Си

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Re: Free Pascal быстрее Си

Сообщение iskander » 28.03.2020 21:56:09

Возвращаюсь к своим баранам.
Сравнительный тест производительности имеющихся хеш-таблиц(согласно лазаревской вике) + Delphi TDictionary для общей оценки.

Задача: приложение читает текстовый файл(собранный из исходников Лазаря размером ~82МБ), нарезает его на слова и подсчитывает количество вхождений. Полученные пары key-count сортируются по невозрастанию count и сохраняются в текстовый файл. Процедура выполняется пять раз с отсечкой времени, в качестве результата берется лучшее время(в миллисекундах). Имена исходного и выходного файлов задаются в параметрах командной строки.

Код: Выделить всё
Delphi TDictionary                     - 2574
fcl-base TFPDataHashTable              - 1903
fcl-stl THashMap                       - 9172
rtl-generics TDictionary               - 3791
CL4L TStrHashMap                       - 1627877(~27 мин)
Fundamentals TGeneralLongIntDictionary - 1905
StringHashMap TStringHashMap           - 1997
GContnrs TGenHashMap                   - 2605
CL4fpc LinkedHashMap                   - 1856(с первого раза не взлетело)
LGenerics TGLiteChainHashMap           - 1201   

Исходники и тестовый файл можно найти здесь.

Добавлено спустя 1 час 2 минуты 13 секунд:
GeorgiPrivet писал(а):iskander
Может после каждого запуска теста необходимо почистить оперативную память? Вполне вероятно, что после нескольких подряд тестов тайминг ее работы будет хромать. Почитай тут как это правильно сделать https://tehnichka.pro/customize-ram-in-bios/ Если не поможет, то jdk версией пониже попробуй поставить.

Эээм, после какого каждого?
Последний раз редактировалось iskander 29.03.2020 16:30:29, всего редактировалось 1 раз.
iskander
постоялец
 
Сообщения: 290
Зарегистрирован: 08.01.2012 18:43:34

Re: Free Pascal быстрее Си

Сообщение SSerge » 29.03.2020 09:25:04

iskander, а что оно у вас во всех случаях $mode delphi? Без этого режима никак?
SSerge
энтузиаст
 
Сообщения: 889
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Free Pascal быстрее Си

Сообщение iskander » 29.03.2020 10:30:06

Просто писанины меньше, а вообще разницы особо нет.

Добавлено спустя 9 минут 40 секунд:
Сравнительный прогон этого же теста для различных языков/компиляторов в виртуальной машине:
Код: Выделить всё
python     - 13794
go         - 2736
Delphi     - 2700
rust       - 2575
java       - 2220
nim        - 1411
c++(clang) - 1401
c++(gcc)   - 1403
fpc        - 1212   

Тесты запускались в указанном порядке с интервалом 5 мин. Исходники и ключи сборки можно найти здесь же.
FPC-3.3.1-r44364 c ключами -CX -Xs -XX -O3
Delphi 10.3.2 CE release WIN64, запускалась в вайне.
Вполне вероятно, что написанные тесты далеки от оптимальных, буду рад любым констуктивным замечаниям и правкам.
Последний раз редактировалось iskander 30.03.2020 09:32:37, всего редактировалось 1 раз.
iskander
постоялец
 
Сообщения: 290
Зарегистрирован: 08.01.2012 18:43:34

Re: Free Pascal быстрее Си

Сообщение ev » 29.03.2020 12:02:30

интересные числа
а компилятор для c++ какой? llvm? оптимизация включена?
ev
долгожитель
 
Сообщения: 1727
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Re: Free Pascal быстрее Си

Сообщение iskander » 29.03.2020 12:15:16

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

Добавлено спустя 21 час 19 минут 53 секунды:
Скормил wcnt.cpp шлангу, соответственно обновил табличку и архив.
iskander
постоялец
 
Сообщения: 290
Зарегистрирован: 08.01.2012 18:43:34

Re: Free Pascal быстрее Си

Сообщение iskander » 01.04.2020 08:35:10

Немного улучшил джава-код, добавил c# и запустил бенч еще раз:
Код: Выделить всё
python     - 13758
go         - 2729
Delphi     - 2706
rust       - 2571
java       - 2102
c#         - 1809
nim        - 1419
c++(clang) - 1392
c++(gcc)   - 1401
fpc        - 1208
iskander
постоялец
 
Сообщения: 290
Зарегистрирован: 08.01.2012 18:43:34

Re: Free Pascal быстрее Си

Сообщение Mirage » 02.04.2020 18:28:09

iskander писал(а):Delphi TDictionary                     - 2574fcl-base TFPDataHashTable              - 1903fcl-stl THashMap                       - 9172rtl-generics TDictionary               - 3791CL4L TStrHashMap                       - 1627877(~27 мин)Fundamentals TGeneralLongIntDictionary - 1905StringHashMap TStringHashMap           - 1997GContnrs TGenHashMap                   - 2605CL4fpc LinkedHashMap                   - 1856(с первого раза не взлетело)LGenerics TGLiteChainHashMap           - 1201   


Предлагаю добавить вариант с темплейтообразными коллекциями/сортировкой:
https://github.com/casteng/tacl
Это другая техника, нежели дженерики, интересно в сравнении с другими.

Что касается JVM, то для скорости лучше ставить либо 8-ю от Оракла, т.е. Hotspot, либо поновее что нравится. Проследить, что JIT компилятор включен (опция -server).
Mirage
энтузиаст
 
Сообщения: 875
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Free Pascal быстрее Си

Сообщение iskander » 02.04.2020 21:14:03

Mirage писал(а):Предлагаю добавить вариант с темплейтообразными коллекциями/сортировкой:
https://github.com/casteng/tacl
Это другая техника, нежели дженерики, интересно в сравнении с другими.

Хе-хе, это зелье напрочь сносит крышу лазаревским CodeTools.

Код: Выделить всё
Delphi TDictionary                     - 2574
fcl-base TFPDataHashTable              - 1903
fcl-stl THashMap                       - 9172
rtl-generics TDictionary               - 3791
CL4L TStrHashMap                       - 1627877(~27 мин)
Fundamentals TGeneralLongIntDictionary - 1905
StringHashMap TStringHashMap           - 1997
GContnrs TGenHashMap                   - 2605
CL4fpc LinkedHashMap                   - 1856(с первого раза не взлетело)
LGenerics TGLiteChainHashMap           - 1201
tacl _GenHashMap                       - 1716
iskander
постоялец
 
Сообщения: 290
Зарегистрирован: 08.01.2012 18:43:34

Re: Free Pascal быстрее Си

Сообщение Mirage » 03.04.2020 02:14:49

Спасибо.
Это какой-то доступный публично бенчмарк, или внутренний?
Интересно глянуть за счет чего TGLiteChainHashMap самый быстрый.
Что касается лазаревских code tools, то им и женерики обычные крышу сносят, насколько помню. В т.ч. потому создал I-Pascal.
Mirage
энтузиаст
 
Сообщения: 875
Зарегистрирован: 06.05.2005 20:29:07
Откуда: Russia

Re: Free Pascal быстрее Си

Сообщение iskander » 03.04.2020 10:45:08

Бенч самодельный, по мотивам разных источников, выше есть ссылка на исходники.
Mirage писал(а):Что касается лазаревских code tools, то им и женерики обычные крышу сносят, насколько помню.

Вы конечно правы, но все-таки не столь радикально. Хотя может быть я просто не умею его готовить?
iskander
постоялец
 
Сообщения: 290
Зарегистрирован: 08.01.2012 18:43:34

Re: Free Pascal быстрее Си

Сообщение Seenkao » 05.04.2020 00:29:12

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

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

В противном случае, любая вызванная библиотека может утащить на себя тонну времени.
Seenkao
новенький
 
Сообщения: 40
Зарегистрирован: 01.04.2020 03:37:12

Re: Free Pascal быстрее Си

Сообщение SSerge » 05.04.2020 05:56:24

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

Паскаль в принципе намертво привязан к библиотекам. Каждый компилятор - к своим.
Сравниваете операции с плавающей точкой чуть сложнее чем +/-.* - сравниваете в том числе реализации библиотек.
Массивы любого рода? - Только сравнение качества библиотек и никак иначе.
Строки? - все их механизмы неотделимы от библиотек.
И так в любом языке. Из упоминаемых несколько особняком стоит Си, в котором по теории можно иметь практически чистый код, генерируемый именно компилятором, но этот чистый код... он же ничего не сможет. Первый printf или другой вывод информации - и вэлкам в тонны времени и внешнюю dll.
SSerge
энтузиаст
 
Сообщения: 889
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Free Pascal быстрее Си

Сообщение iskander » 05.04.2020 09:24:24

Seenkao писал(а):Бестолково на разных компиляторах под разными IDE сравнивать какой код быстрее, если вызываются внутренние библиотеки.

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

Ну вот, настоящие знатоки подтягиваются. Всё-таки осталось непонятно, когда, а самое главное, кому, я успел задолжать.
iskander
постоялец
 
Сообщения: 290
Зарегистрирован: 08.01.2012 18:43:34

Re: Free Pascal быстрее Си

Сообщение Seenkao » 05.04.2020 14:07:28

SSerge писал(а):Паскаль в принципе намертво привязан к библиотекам. Каждый компилятор - к своим.
Сравниваете операции с плавающей точкой чуть сложнее чем +/-.* - сравниваете в том числе реализации библиотек.
Массивы любого рода? - Только сравнение качества библиотек и никак иначе.
Строки? - все их механизмы неотделимы от библиотек.

Вы серьёзно? Вы не умеете всё делать вручную? Я бы вам посоветовал изучать ассемблер и сделать на нём банальное окно, без библиотек.

Хотя о чём это я... Ведь я же бред несу, люди не делают всё "вручную" и ни кто не спускается на низкий уровень почти равный ассемблеру и вручную не прописывает вызовы нужных процедур из внешних библиотек (которые так же вызываются во внутренних).

Ну и после сравнения "низкоурвневово" кода, уже можно дальше делать сравнение с внутренними библиотеками, и посмотреть, хорошо сделаны внутренние библиотеки или в них заложили тонну лишнего (как в компилятор bcc, которым пользуется DelphiXE, хотя сам компилятор может и довольно шустро делает всё, только всё равно уверен, что просто тонны ненужного с собой несёт).
Seenkao
новенький
 
Сообщения: 40
Зарегистрирован: 01.04.2020 03:37:12

Re: Free Pascal быстрее Си

Сообщение SSerge » 05.04.2020 15:18:36

Seenkao
У вас есть что - нибудь конструктивное по поводу улучшения тех тестов, которые представлены в этой теме? Если есть - напишите автору тестов непосредственно или выложите ваше предложение здесь. Окна на ассемблере без вызова библиотек под windows - тоже можете описать в отдельной теме, это наверняка ценный и актуальный опыт. Можете также выложить ваш анализ генерируемого разными компиляторами машинного кода, если таковой состоялся, особенно для java, python и подобных. Думаю, подобная систематизация была бы очень интересна окружающим.
SSerge
энтузиаст
 
Сообщения: 889
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Пред.След.

Вернуться в Free Pascal Compiler

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

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

Рейтинг@Mail.ru