Скорость FPC в сравнении с Delphi
Модератор: Модераторы
Скорость FPC в сравнении с Delphi
Как то много лет назад, ещё на версии 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
А тут вспомнил тест и решил повторить, версия 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
Не удивлюсь если 32битная Д7 будет по прежнему в два раза быстрее
Да надо попробовать.
Нет не быстрее.
D7
x32 - 67,31
Нет не быстрее.
D7
x32 - 67,31
странно в коде нет ничего особенного к чему можно применить какие нибудь современные инструкции которые не знает компилятор 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 сек
стабильный результат, только одно нажатие, при повторном оутофмемори
Эх, лазарус все еще не пригоден для работы.
Настройки базовые, из коробки
а вот 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 сек
стабильный результат, только одно нажатие, при повторном оутофмемори
Эх, лазарус все еще не пригоден для работы.
Настройки базовые, из коробки
Самый правильный тест - это скорость вычисления системы линейных уравнений (СЛАУ). Не зря все суперкомпьютеры меряются именной этой, кхм, мерялкой... 
Вот, когда-то писал тестовую программу:
http://files.kraslib.ru/testslau/test.zip
Внутри два файла - generator.pas, которая генерирует текстовый файл с данными. там только при запуске нужно задать ограничение в используемом ОЗУ, чтобы не изгрызть ногти до локтей, если данных будет больше, чем оперативной памяти.
Вторая программа - slau.pas, собственно сам тест, решение СЛАУ методом Гаусса.
Давайте сравним свои крутые компы наподобие топ-500 у суперкомпьютеров...
Добавлено:
Поскольку в архив закрался файл генератора с неправильными потрохами, выкладываю тут другую версию генератора (название совместимое с Матлаб
):
Вот, когда-то писал тестовую программу:
http://files.kraslib.ru/testslau/test.zip
Внутри два файла - generator.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 14:24:04, всего редактировалось 1 раз.
Ага
генератор нулевой длины
еще бы тоже самое на c++ 
32 bit у меня получились ещё медленнее и fpc и dilphi.
А то что lcl медленный, так это реализация самого lcl виновата.
А то что lcl медленный, так это реализация самого lcl виновата.
sts писал(а):чеж проги на лазарусе такие тормозные то получаются емае!?!?
потому что интенсивная работа со строками приводит к генерации огромного числа промежуточных переменных, под каждую из которых выделяется память, и эта память потом деинициализируется. И когда этого всего очень много - вот оно и медленное всё. Впрочем, когда в программе на С++ появляется интенсивная работа с контейнером string, то там всё замедляется куда больше, даже без генерации промежуточных переменных.
vada писал(а):Агагенератор нулевой длины
Можно даже попробовать отрицательной длины...
ev писал(а):еще бы тоже самое на c++
На С++ нету, есть просто на Си. Когда-то делал тесты для четырёх компиляторов: gfortran, gcc, freepascal и freebasic...
В принципе, можно и для С++ сделать. Там на полчасика работы по переделке...
-
ElectroGuard
- новенький
- Сообщения: 71
- Зарегистрирован: 03.06.2016 11:10:22
sts писал(а):по существу - так чеж проги на лазарусе такие тормозные то получаются емае!?!?, скорость работы с датасетами просто удручает.
Так это не компилятор, а датасеты такие.
- *Rik*
- постоялец
- Сообщения: 453
- Зарегистрирован: 19.04.2011 12:18:51
- Откуда: Урал
- Контактная информация:
sts писал(а):по существу - так чеж проги на лазарусе такие тормозные то получаются емае!?!?, скорость работы с датасетами просто удручает.
Когда перевел разработки на Lazarus ни кто в конторе ни чего не заметил. Да и куда Вам торопиться, не уж то атомную станцию автоматизируете?
LCL малость тормозной, но зато собирается все на любой системе, Windows, Linux, ARM-Linux... и т.д.
Пригоден. Я использую его как инструмент для заработка года 4-5.sts писал(а):Эх, лазарус все еще не пригоден для работы.
Linux:



*Rik* писал(а):Пригоден. Я использую его как инструмент для заработка года 4-5.
У меня тоже Lazarus является рабочим инструментом для GUI-приложений ещё с версии 0.23. Пока ещё никто из потребителей не жаловался...
Самая эпическая разработка на Lazarus - система поиска патентов в базе M$SQL. Предыдущая прога на Delphi (не моя
