Скорость FPC в сравнении с Delphi

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

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

Скорость FPC в сравнении с Delphi

Сообщение Tango » 04.04.2018 13:23:38

Как то много лет назад, ещё на версии FPC 2.4.Х, и D7 я сравнивал скорость выполнения кода, это был архиватор на паскале. Тогда сравнение вышло не в пользу FPC, D7 оказалась быстрее ровно в два раза.
А тут вспомнил тест и решил повторить, версия FPC 3.0.4, версия делфи XE7. Сжимался 744 Мб sql файл.

Получилось следующее:
FPC 3.0.4:
x64 - 29.64

Delphi XE7:
x64 - 60.39

Delphi 10.2:
x64 - 47.49

к результатам добавил ещё D10.

Ссылка на git с проектом, кто хочет может повторить, можно сжимать Calgary:
https://github.com/Tango600/Compress
Аватара пользователя
Tango
постоялец
 
Сообщения: 155
Зарегистрирован: 31.05.2012 17:07:30

Re: Скорость FPC в сравнении с Delphi

Сообщение sts » 04.04.2018 14:10:02

Не удивлюсь если 32битная Д7 будет по прежнему в два раза быстрее
sts
постоялец
 
Сообщения: 406
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Скорость FPC в сравнении с Delphi

Сообщение Tango » 05.04.2018 11:00:33

Да надо попробовать.
Нет не быстрее.

D7
x32 - 67,31
Аватара пользователя
Tango
постоялец
 
Сообщения: 155
Зарегистрирован: 31.05.2012 17:07:30

Re: Скорость FPC в сравнении с Delphi

Сообщение sts » 05.04.2018 13:30:58

странно в коде нет ничего особенного к чему можно применить какие нибудь современные инструкции которые не знает компилятор d7
а вот 32 битные программы несколько быстрее работают на 64битных процессорах (ну раньше такое наблюдал), больше в кеш попадает и за одно заполнение 64бит регистра заполняется 2 32бит.

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

Добавлено спустя 2 минуты 37 секунд:
во, надо 32 фпц проверить

Добавлено спустя 21 секунду:
32бит всмысле

Добавлено спустя 1 час 15 минут 12 секунд:
Провел простой тест, текстовый файл 500мег (куча склееных в один файл исходников pas):

function GetTimeExecute(TickCount: Integer): String;
begin
case TickCount of
0..59000: Result := Format('%d,%d сек',[TickCount div 1000,TickCount mod 1000]);
60000..3600000:Result := Format('%d:%d,%d сек',[TickCount div 60000,(TickCount mod 60000) div 1000,(TickCount mod 60000) mod 1000]);
else
result := 'Ну очень долго!! :((';
end;
end;

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
CurTick : Cardinal;

begin
CurTick := GetTickCount;

with TStringList.Create do try
LoadFromFile('D:\tr20\444.txt');
finally
Free;
end;
Memo1.Lines.Add(Format('Время выполнения: %s',[GetTimeExecute(GetTickCount - CurTick)]));
end;

WinXP 32бит 4гб

D6 Upd3
7.34 +/- 0.3 сек
стабильный результат (независит первое или нет), более 10 нажатий Button1.

Laz 1.8.2, FPC 3.0.4 (седня установил)
10.8 +/- 0.5 сек
стабильный результат, только одно нажатие, при повторном оутофмемори

Эх, лазарус все еще не пригоден для работы.

Настройки базовые, из коробки
sts
постоялец
 
Сообщения: 406
Зарегистрирован: 04.04.2008 12:15:44
Откуда: Тольятти

Re: Скорость FPC в сравнении с Delphi

Сообщение Vadim » 05.04.2018 16:52:56

Самый правильный тест - это скорость вычисления системы линейных уравнений (СЛАУ). Не зря все суперкомпьютеры меряются именной этой, кхм, мерялкой... :-)
Вот, когда-то писал тестовую программу:
http://files.kraslib.ru/testslau/test.zip

Внутри два файла - generator.pas, которая генерирует текстовый файл с данными. там только при запуске нужно задать ограничение в используемом ОЗУ, чтобы не изгрызть ногти до локтей, если данных будет больше, чем оперативной памяти. :-) Вторая программа - slau.pas, собственно сам тест, решение СЛАУ методом Гаусса.
Давайте сравним свои крутые компы наподобие топ-500 у суперкомпьютеров... :-)

Добавлено:
Поскольку в архив закрался файл генератора с неправильными потрохами, выкладываю тут другую версию генератора (название совместимое с Матлаб :-) ):
Код: Выделить всё
// Формирование массива элементов, распределенных по равномерному закону
function Rand(Row, Col: Integer): TMatrix;
Var
  i,j: integer;
Begin
  Randomize();
  SetLength(Result, Row, Col);
  For i:=0 To Row-1 Do
    For j:=0 To Col-1 Do
      Result[i,j]:=Random();
End;
Последний раз редактировалось Vadim 28.01.2022 15:24:04, всего редактировалось 1 раз.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Скорость FPC в сравнении с Delphi

Сообщение vada » 06.04.2018 17:24:29

Ага :) генератор нулевой длины
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: Скорость FPC в сравнении с Delphi

Сообщение ev » 06.04.2018 21:45:43

еще бы тоже самое на c++ :roll:
ev
долгожитель
 
Сообщения: 1762
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Re: Скорость FPC в сравнении с Delphi

Сообщение Tango » 06.04.2018 23:11:11

32 bit у меня получились ещё медленнее и fpc и dilphi.
А то что lcl медленный, так это реализация самого lcl виновата.
Аватара пользователя
Tango
постоялец
 
Сообщения: 155
Зарегистрирован: 31.05.2012 17:07:30

Re: Скорость FPC в сравнении с Delphi

Сообщение SSerge » 07.04.2018 04:35:40

sts писал(а):чеж проги на лазарусе такие тормозные то получаются емае!?!?


потому что интенсивная работа со строками приводит к генерации огромного числа промежуточных переменных, под каждую из которых выделяется память, и эта память потом деинициализируется. И когда этого всего очень много - вот оно и медленное всё. Впрочем, когда в программе на С++ появляется интенсивная работа с контейнером string, то там всё замедляется куда больше, даже без генерации промежуточных переменных.
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: Скорость FPC в сравнении с Delphi

Сообщение Vadim » 07.04.2018 14:18:01

vada писал(а):Ага :) генератор нулевой длины

Можно даже попробовать отрицательной длины... :-D

ev писал(а):еще бы тоже самое на c++

На С++ нету, есть просто на Си. Когда-то делал тесты для четырёх компиляторов: gfortran, gcc, freepascal и freebasic... ;-)
В принципе, можно и для С++ сделать. Там на полчасика работы по переделке...
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: Скорость FPC в сравнении с Delphi

Сообщение ElectroGuard » 18.05.2018 16:42:08

sts писал(а):по существу - так чеж проги на лазарусе такие тормозные то получаются емае!?!?, скорость работы с датасетами просто удручает.

Так это не компилятор, а датасеты такие.
ElectroGuard
новенький
 
Сообщения: 71
Зарегистрирован: 03.06.2016 12:10:22

Re: Скорость FPC в сравнении с Delphi

Сообщение *Rik* » 18.05.2018 20:53:24

sts писал(а):по существу - так чеж проги на лазарусе такие тормозные то получаются емае!?!?, скорость работы с датасетами просто удручает.

Когда перевел разработки на Lazarus ни кто в конторе ни чего не заметил. Да и куда Вам торопиться, не уж то атомную станцию автоматизируете?
LCL малость тормозной, но зато собирается все на любой системе, Windows, Linux, ARM-Linux... и т.д.

sts писал(а):Эх, лазарус все еще не пригоден для работы.
Пригоден. Я использую его как инструмент для заработка года 4-5.

Linux:
Изображение

Изображение

Изображение
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 426
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: Скорость FPC в сравнении с Delphi

Сообщение Vadim » 19.05.2018 08:38:18

*Rik* писал(а):Пригоден. Я использую его как инструмент для заработка года 4-5.

У меня тоже Lazarus является рабочим инструментом для GUI-приложений ещё с версии 0.23. Пока ещё никто из потребителей не жаловался... :-)
Самая эпическая разработка на Lazarus - система поиска патентов в базе M$SQL. Предыдущая прога на Delphi (не моя ;-) ) искала патенты от 5 минут до примерно 20-ти. Моя на Lazarus'е по любому набору входных параметров - максимум 15 сек. :-) База - 250 ГБ, полнотекстовая.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск


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

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

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

Рейтинг@Mail.ru