powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
25 сообщений из 45, страница 1 из 2
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39615920
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток,

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

Чисто визуально складывается впечатление что FPC (напр. 3.0.4) несколько проигрывает последним компиляторам от идеры но хотелось бы поподробнее посмотреть на какой разрядности, на каких операциях, в идеале почему и как с этим бороться если это возможно.

спасибо.
...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39615967
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mikhail TchervonenkoЧисто визуально складывается впечатление что FPC (напр. 3.0.4) несколько проигрывает последним компиляторам от идеры но хотелось бы поподробнее посмотреть на какой разрядности, на каких операциях, в идеале почему и как с этим бороться если это возможно.
Если речь о "чисто визуально", то дело, скорее всего, не в компиляторе, а в RTL, а конкретно в менеджере памяти. У классических дельфей с 2006 версии по дефолту используется FastMM, у FPC ничего подобного нет.
...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39615971
Василий №2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Имхо, вопрос из серии "что быстрее - java или c#".
Что значит "визуально" - гуй отзывчивей? Так их сравнивать вообще нельзя.
А в плане молотилок - в RTL х32 многие функции сразу на асме, а вот под остальные платформы компилится из Паскаля. Насчет fpc не в курсе.
Что мешает сделать бенчи на интересующие операции да сравнить? Или просто машинный код посмотреть.
Вообще насколько я знаю, родной компилятор Эмбы довольно тупой - никаких тебе особо хитрых оптимизаций или новых инструкций.
...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39615979
Фотография Mikhail Tchervonenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий №2Имхо, вопрос из серии "что быстрее - java или c#".
....
Что мешает сделать бенчи на интересующие операции да сравнить? Или просто машинный код посмотреть.
.......


можно, но зачем повторять работу которую уже наверняка кто то сделал.
...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39615983
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FPC в целом несколько медленней. Но это не правило.
...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39616134
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Оптимизатор Delphi не модифицировался с момента создания. С момента D5 уж точно.
С x64 появилось больше регистров и программы стали пошустрее
Не помню с какой версии, может быть с 2006, в сборку вошёл FastMM

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

У меня есть проект CrystalPathFinding, где реаллоки памяти сведены к нулю, FPU практически нет, чистый процессор. Так вот FPC отрабатывает в 2 раза медленнее. Что повергло меня в шок.
У меня всё.
...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39616139
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU,

Оптимизация на уровне процессора не такая простая и однозначная штука, как кажется. Реальное ускорение, как правило, даёт не распихивание по регистрам, а SIMD или многопоточная обработка. X64 по скорости существенно не отличается от X32, несмотря на большее число регистров.

авторОптимизатор Delphi не модифицировался с момента создания. С момента D5 уж точно.

Я не скажу насчет оптимизатора. Но многие библиотеки существенно улучшены. Работы со строками, математика, FastMM включен в состав. Так что говорить, что общая производительность не выросла неверно. Выросла и существенно. Многое из FastCode добавилось непосредственно в Delphi:

https://en.wikipedia.org/wiki/FastCode
...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39616142
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUС x64 появилось больше регистров и программы стали пошустрее
Медленнее. Как минимум case в x64 не оптимизируется, да и размеры типов данных сказываются на общей производительности.

SOFT FOR YOUВ FPC в свою очередь есть пара клевых оптимизаций.
В FPC дофига клёвых оптимизаций, есть даже векторизация. Вот если бы он ещё и компилитровал всё, вообще цены бы небыло.
...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39616147
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Однако х86 программа на дельфи втупую перекомпилированная на х64 работает как минимум процентов на 10 быстрей.

Многократно мною проверено на многих живых проектах.
...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39616251
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот вам код FPC x64 -O3:

Код: sql
1.
2.
3.
4.
ApnStrings.pas:191                        X := X xor CharMask;
0000000100027BD8 4d89de                   mov    %r11,%r14
0000000100027BDB 4d31ce                   xor    %r9,%r14
0000000100027BDE 4d89f1                   mov    %r14,%r9
...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39616328
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUВот вам код FPC x64 -O3:И что это должно кому-то доказать или опровергнуть? У тебя, как обычно, своеобразная тестовая выборка
...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39616352
kep-ko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SOFT FOR YOUВот вам код FPC x64 -O3:а как должно быть?
в http://agner.org/optimize/instruction_tables.pdf говорят что что эти 3 инструкции будут выполнены за 0.33 такта каждая. Вроде не плохо, не?
...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39616357
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger,

Ты хочешь, чтобы я тебе весь листинг дизассемблерного дерьма привёл? Или что?
...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39616358
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kep-ko,

Эти операции будут выполняться 3 такта, т.к. команды зависимые
А должна быть 1 команда 0.33 такта

Но это не самое отвратительное. Самое отвратительное - что юзается огромное количество лишних регистров, а нужные переменные хранятся на стеке.
...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39616360
kep-ko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SOFT FOR YOU,

- не знаю, надо затестить, но лень
- там щас активно переименование регистров вроде используется
- ну и асмовые объектники слинковать можно, если уж О4 не доставляет )
...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39616421
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кому там не нравился case в x64
Вот вам case на FreePascal.
P.S. сцуко, даже обнуление переменной через mov делается

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
function Test(X: NativeUInt): NativeUInt;
begin
  case X of
    0: Result := 100500;
    1: Result := 100501;
    2: Result := 100502;
    3: Result := 100503;
    4: Result := 100504;
    5: Result := 100505;
    6: Result := 100506;
  else
    Result := 0;
  end;
end;   



Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
uContextManager.pas:164                   case X of
00000001000270F0 4885c9                   test   rcx,rcx
00000001000270F3 7426                     je     0x10002711b <TEST+43>
00000001000270F5 4883e901                 sub    rcx,0x1
00000001000270F9 742c                     je     0x100027127 <TEST+55>
00000001000270FB 4883e901                 sub    rcx,0x1
00000001000270FF 7432                     je     0x100027133 <TEST+67>
0000000100027101 4883e901                 sub    rcx,0x1
0000000100027105 7438                     je     0x10002713f <TEST+79>
0000000100027107 4883e901                 sub    rcx,0x1
000000010002710B 743e                     je     0x10002714b <TEST+91>
000000010002710D 4883e901                 sub    rcx,0x1
0000000100027111 7444                     je     0x100027157 <TEST+103>
0000000100027113 4883e901                 sub    rcx,0x1
0000000100027117 744a                     je     0x100027163 <TEST+115>
0000000100027119 eb54                     jmp    0x10002716f <TEST+127>
uContextManager.pas:165                   0: Result := 100500;
000000010002711B 48b89488010000000000     movabs rax,0x18894
0000000100027125 eb52                     jmp    0x100027179 <TEST+137>
uContextManager.pas:166                   1: Result := 100501;
0000000100027127 48b89588010000000000     movabs rax,0x18895
0000000100027131 eb46                     jmp    0x100027179 <TEST+137>
uContextManager.pas:167                   2: Result := 100502;
0000000100027133 48b89688010000000000     movabs rax,0x18896
000000010002713D eb3a                     jmp    0x100027179 <TEST+137>
uContextManager.pas:168                   3: Result := 100503;
000000010002713F 48b89788010000000000     movabs rax,0x18897
0000000100027149 eb2e                     jmp    0x100027179 <TEST+137>
uContextManager.pas:169                   4: Result := 100504;
000000010002714B 48b89888010000000000     movabs rax,0x18898
0000000100027155 eb22                     jmp    0x100027179 <TEST+137>
uContextManager.pas:170                   5: Result := 100505;
0000000100027157 48b89988010000000000     movabs rax,0x18899
0000000100027161 eb16                     jmp    0x100027179 <TEST+137>
uContextManager.pas:171                   6: Result := 100506;
0000000100027163 48b89a88010000000000     movabs rax,0x1889a
000000010002716D eb0a                     jmp    0x100027179 <TEST+137>
uContextManager.pas:173                   Result := 0;
000000010002716F 48b80000000000000000     movabs rax,0x0
uContextManager.pas:175                   end;
0000000100027179 c3000000000000           ret  
...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39616439
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUВот вам case на FreePascal.
...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39616443
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU,

Вся печаль в том, что ты занимаешься ловлей блох. В реальном приложении - ну да - 10% прирост получишь. Другими словами - ни о чём. Хотя бы порядок, хотя бы двоичный (что, собственно, с simd/мультипоточкой и получается). А лучше два-три порядка и десятичных. Но это - либо алгоритмическое, либо расчет видюхами. Нравится за блохами гоняться - флаг, как говорится, в руки и барабан на шею.

авторсцуко, даже обнуление переменной через mov делается

Сырцы доступны, вредной Идеры нет, обижаться не на кого.
...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39616478
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Код в студию
...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39616481
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon,

Зависит от того, каков характер реального приложения. По каким ещё критериям ты хотел сравнивать FPC и Delphi?
В моём реальном приложении, как я уже говорил, проводились расчёты на процессоре, и FPC сработал в 2 раза медленнее. Как раз из-за "блох", о которых ты говоришь.
...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39616489
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU,

Какой код тебе ещё нужен? Два цикла с вызовом твоей функции?
...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39616491
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Ну откуда я знаю, чего ты там в какой последовательности вызываешь
Выкладывай, посмотрим
...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39616498
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUВ моём реальном приложении, как я уже говорил, проводились расчёты на процессоре, и FPC сработал в 2 раза медленнее.
Тут недавно гоняли чисто вычислительный рейтрейсер, ни каких двукратных отставаний небыло и в помине.
...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39616500
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
program Project1;

{$APPTYPE CONSOLE}

uses
  Windows;

function Test(X: NativeUInt): NativeUInt;
begin
  case X of
    0: Result := 100500;
    1: Result := 100501;
    2: Result := 100502;
    3: Result := 100503;
    4: Result := 100504;
    5: Result := 100505;
    6: Result := 100506;
  else
    Result := 0;
  end;
end;

const
 values : array [0 .. 7] Of NativeUInt = (7, 0, 6, 1, 5, 2, 4, 3);

var

 sw    : Longword;
 index : Integer;
 c     : Integer;
 t     : NativeUInt;

begin
  sw := getTickCount();

  for index := 1 to 100000000 do
   for c := 0 to 7 do
    t := test(values[c]); // можно без values, на результат не влияет

  WriteLn(getTickCount() - sw);
  readln;
end.

...
Рейтинг: 0 / 0
Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
    #39616501
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем так сложно?!
...
Рейтинг: 0 / 0
25 сообщений из 45, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Сравнение скорости выполнения приложений скомпилированных компиляторами FPC и Idera
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]