Медленный компилятор FPC

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

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

Re: Медленный компилятор FPC

Сообщение Burster_TIL » 02.07.2015 19:32:57

alex208210 писал(а):Burster_TIL не буду вникать что больше для тебя проблема, понимать аналогии или принимать осознание своей глупости. Смысл в том что ты здесь занимаешься ерундой, и никому твои идеи не интересны. Если для тебя, элементарно, проблема платности не является проблемой когда ты это украл, то это говорит о том что уровень твоего развития.. в 5-7 классе


Понимать бредовую аналогию, представленную тут тобой? А, зачем? Аналогия должна быть адекватной. Но, тебя понесло куда-то не туда. По ходу, в силу твоей же глупости. Так что никакой ерунды. Я провёл просто тест и на нём определил степень быстродействия данного компилятора. Оценочно, разумеется. И для полного теста нужно слобать более алогоритмически сложную программу. Если для меня проблема платности не является проблемой, то я это могу как купить так и найти в инете (кому-то очень нравится слово украл). С большой долей вероятности, - когда я был в 5 кл, тебя ещё на свете не было.

Добавлено спустя 2 минуты 30 секунд:
Mikhail писал(а):Какая разница? Тем более не обязательно все писать на С, только критически важные части.


Не, ну разница там всё же есть. Другой синтаксис, например. Но, в принципе - да. Вопрос лишь в том, сколько на это уйдёт времени.
Burster_TIL
новенький
 
Сообщения: 46
Зарегистрирован: 25.09.2013 02:05:28

Re: Медленный компилятор FPC

Сообщение Mikhail » 02.07.2015 22:24:01

Вот код, для теста, позапускайте с разными значениями n (размер матрицы) и разными элементами матрицы целыми и вещественными, можно попробовать еще int64.
Пример соберется как в Delphi7 так и в FPC.
Код: Выделить всё
{$IFDEF FPC}
{$MODE DELPHI}
{$OPTIMIZATION LEVEL3}
{$S-}
{$ELSE}
{$OPTIMIZATION ON}
{$STACKCHECKS OFF}
{$ENDIF}

{$OVERFLOWCHECKS OFF}
{$RANGECHECKS OFF}
{$IOCHECKS OFF}

{$APPTYPE CONSOLE}
program demomatrix2;
const n = 100;
type TMatrix = array[0..n-1, 0..n-1] of real;

procedure MulMatrix(const a, b: TMatrix; out c:TMatrix);
var i,j,k: Integer;
begin
for i:=0 to n-1 do
  for j:=0 to n-1 do begin
   c[i, j]:=0;
   for k:=0 to n-1 do
    c[i, j]:=c[i, j] + a[i, k]*b[k, j];
end;
end;

procedure GenMatrix(out a:TMatrix; value:Integer);
var i,j: Integer;
begin
for i:=0 to n-1 do
  for j:=0 to n-1 do
   a[i, j]:=Random(value);
end;

Function GetRDTSC:Int64; assembler; register;
Asm
rdtsc;
End;

var a,b,c:TMatrix;
    bc,lc:Int64;
begin
bc:=GetRDTSC;
GenMatrix(a, 10);
GenMatrix(b, 10);
MulMatrix(a,b,c);
lc:=GetRDTSC - bc;
writeln(lc);
readln;
end.
Mikhail
энтузиаст
 
Сообщения: 562
Зарегистрирован: 24.10.2013 16:06:47

Re: Медленный компилятор FPC

Сообщение sign » 03.07.2015 07:56:38

Ха-ха-ха!!!
Вот пример, посрамляющий кое-что.
Первая картинка - запуск лазаруса 1.4.0 и XE5 без оптимизации. Как есть из среды.
Вторая картинка - с оптимизацией и там и там. Запуск из среды.

В каждом случае кликал по кнопке, пока не добивался минимального значения.

1.jpg


2.jpg


Код Лазаруса
Код: Выделить всё
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls;

type

  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

uses lazutf8sysutils;
{$R *.lfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
const M = 15;
var T1, T2: Int64;
    k, i1, i2, i3, i4, i5, i6, i7: Integer;
begin
  T1 := GetTickCount64;
  for i1 := 0 to M do
    for i2 := 0 to M do
      for i3 := 0 to M do
        for i4 := 0 to M do
          for i5 := 0 to M do
            for i6 := 0 to M do
              for i7 := 0 to M do
                k := 0;
  T2 := GetTickCount64;
  Label1.Caption := IntToStr(T1);
  Label2.Caption := IntToStr(T2);
  Label3.Caption := IntToStr(T2-T1);
end;

end.


Код Дельфи
Код: Выделить всё
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.Buttons;

type
  TForm1 = class(TForm)
    btn1: TBitBtn;
    lbl1: TLabel;
    lbl2: TLabel;
    lbl3: TLabel;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.btn1Click(Sender: TObject);
const M = 15;
var T1, T2: Int64;
    k, i1, i2, i3, i4, i5, i6, i7: Integer;
begin
  T1 := GetTickCount;
  for i1 := 0 to M do
    for i2 := 0 to M do
      for i3 := 0 to M do
        for i4 := 0 to M do
          for i5 := 0 to M do
            for i6 := 0 to M do
              for i7 := 0 to M do
                k := 0;
  T2 := GetTickCount;
  lbl1.Caption := IntToStr(T1);
  lbl2.Caption := IntToStr(T2);
  lbl3.Caption := IntToStr(T2-T1);
end;

end.
У вас нет необходимых прав для просмотра вложений в этом сообщении.
sign
энтузиаст
 
Сообщения: 1131
Зарегистрирован: 30.08.2009 09:20:53

Re: Медленный компилятор FPC

Сообщение Mikhail » 03.07.2015 08:23:15

sign писал(а):Первая картинка - запуск лазаруса 1.4.0 и XE5 без оптимизации.


А для Delphi7 ?

Добавлено спустя 1 час 40 минут 56 секунд:
Кстати, можете получить ассемблерный листинг моего примера и изучить код процедуры MulMatrix. :) Это к вопросу о качестве оптимизации. :(
Mikhail
энтузиаст
 
Сообщения: 562
Зарегистрирован: 24.10.2013 16:06:47

Re: Медленный компилятор FPC

Сообщение alex208210 » 03.07.2015 11:18:16

где кричащий дяденька который настолько умен что не в силах понять аналогии, скажу прямо.. все зависит от конкретного действия и его реализации, если хочешь оптимизировать производительность, не нужно за точку отсчета брать "идеальный в твоем понимании" дельфи и мерить все по нему. Как можешь увидеть выше (в том конкретном примере), в 4 раза просирает он fpc.
alex208210
постоялец
 
Сообщения: 207
Зарегистрирован: 12.05.2010 13:16:51

Re: Медленный компилятор FPC

Сообщение Лекс Айрин » 03.07.2015 12:01:44

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

Про дельфи не говорю... влиять на его развитие проблематично. И, скорее всего, он со временем будет явно сдавать fpc.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Медленный компилятор FPC

Сообщение Burster_TIL » 03.07.2015 12:16:10

Лекс Айрин писал(а):Про дельфи не говорю... влиять на его развитие проблематично. И, скорее всего, он со временем будет явно сдавать fpc.


Это будет только в том случае, если он станет коммерческим с соотвествующими вливаниями средств. И то врят-ли.

Добавлено спустя 59 секунд:
alex208210 писал(а):де кричащий дяденька который настолько умен что не в силах понять аналогии, скажу прямо.. все зависит от конкретного действия и его реализации, если хочешь оптимизировать производительность, не нужно за точку отсчета брать "идеальный в твоем понимании" дельфи и мерить все по нему. Как можешь увидеть выше (в том конкретном примере), в 4 раза просирает он fpc.


Да ты как всегда на месте. Это видно. Так что спрашивать нечего. А примера с D7 тут не было.
Burster_TIL
новенький
 
Сообщения: 46
Зарегистрирован: 25.09.2013 02:05:28

Re: Медленный компилятор FPC

Сообщение Лекс Айрин » 03.07.2015 12:28:03

Burster_TIL писал(а):Это будет только в том случае, если он станет коммерческим с соотвествующими вливаниями средств.


В этом случае, боюсь, у него шансов не будет.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Медленный компилятор FPC

Сообщение Burster_TIL » 03.07.2015 12:31:53

Лекс Айрин писал(а):В этом случае, боюсь, у него шансов не будет.


Я и говорю, что даже в этом случае будет маловероятно.
Burster_TIL
новенький
 
Сообщения: 46
Зарегистрирован: 25.09.2013 02:05:28

Re: Медленный компилятор FPC

Сообщение hinst » 03.07.2015 14:15:59

ну а что в таком случае мешает писать на Delphi 7
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Медленный компилятор FPC

Сообщение Лекс Айрин » 03.07.2015 14:53:30

Burster_TIL, да нет... пока он свободный у него есть шанс. Как только его сделают проприетарным таковой исчезнет. (разве что он будет ну очень дешевым).

Конечно, если бы было хотя бы 4-6 разных активно используемых реализаций, тогда картина могла бы и поменяться.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Медленный компилятор FPC

Сообщение скалогрыз » 03.07.2015 15:55:50

Burster_TIL писал(а): Но между Т1 и Т2 в обеих случая располагается один и тот же код. И этот один и то же код выполняется по разному. Вот это и удивляет. При чём с точки зрения производительности в Delphi что есть дополнительный вложенный цикл, что нет его результат один и тот же в районе 1970 тиков. В ХЕ2 скорость выполнения такой же программы и вовсе плавает от тех же 1970 до аж 10000.

То что располагается один и тот же текст (специально заменил слово "код" на "текст"), с точки зрения человека
, ещё не означает, что в результате будет один и тот же код, с точки зрения компилятора.

Понятие "один и тот же текст" программы, может только означать, что результат выполнения должен быть одинаковым, как это гарантируется стандартом языка.
"Если написать так-то, то результат будет такой-то".

Но вот скорость с которым результат будет доставлен, стандартами языка никак не гарантируется. Очевидно, что всё зависит как от железа, которое будет исполнять код, так и от компилятора, который исполняемый код сгенерирует из исходного текста.

И ещё раз, для закрепления.
Для одного и того же текста программы, разные компиляторы могут генерировать разные исполняемый код. Скорость исполнения такого кода может быть разной.
Компиляторы генерируют разный код, потому что компиляторы написаны разными людьми. Нету единого стандарта о том, какой код должен сгенерировать компилятор. Есть требования к компилятору, о том, какой должен быть результат исполнения текста программы (а точнее инструкций языка программирования).
А т.к. у каждого разработчика комиляторов свой взгляд, на то как должен быть устроен компилятор, и что в нём важнее, то и результат работы у каждого компилятора разный.

НО, конечного программиста, который использует компилятор (а не разрабатывает компилятор), в идеале, результирующий код волоновать не должен, пока стандарт языка соблюдается. И если уж человек лезет с измерениями через RDTSC, то будь добр разбиратся в тонкостях генерации кода, конкретной версии компилятора :)

Добавлено спустя 6 минут 59 секунд:
Но давайте рассмотрим такой вот простенький тест
Код: Выделить всё
{$apptype console}

{$ifdef FPC}
  {$mode delphi}
{$endif}

FUNCTION Get__RDTSC:Int64;ASSEMBLER;REGISTER;
Asm
  RDTSC
End;

function DoTest(var res: double): Int64;
var
  f: double;
  i :integer;
  t1,t2 : Int64;
Begin
  f:=0;
  T1:=Get__RDTSC;
  for i:=0 to 1000 do
    f:=f*i;
  T2:=Get__RDTSC;
  Result:=T2-T1;
  res:=f;
end;

var
  f : double;
  t : Int64;
begin
  t:=DoTest(f);
  writeln(t); 
  writeln(f:0:4);
end.

FPC без оптимизаций и без использования всяких там MMX или XMM или SSE (в которые делфи не умеет), выдаёт на гора
11000
а Delphi 7
18000
а какой-нить хитрый-Сишный компилятор, вообще бы выкинул бы весь цикл :mrgreen: вернув значение времени, примерно
1000,
а то и меньше.
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: Медленный компилятор FPC

Сообщение Mikhail » 03.07.2015 16:10:44

Меняем for на while и Delphi7 не оптимизирует вычисление индексов как и FPC :) правда все счетчики по регистрам раскидал

Добавлено спустя 6 минут 6 секунд:
скалогрыз писал(а):FPC без оптимизаций и без использования всяких там MMX или XMM или SSE (в которые делфи не умеет), выдаёт на гора

FPC тоже не умеет. :( распознавание опткодов в BASM не в счет.
Mikhail
энтузиаст
 
Сообщения: 562
Зарегистрирован: 24.10.2013 16:06:47

Re: Медленный компилятор FPC

Сообщение Burster_TIL » 03.07.2015 16:22:18

скалогрыз писал(а):НО, конечного программиста, который использует компилятор (а не разрабатывает компилятор), в идеале, результирующий код волоновать не должен, пока стандарт языка соблюдается. И если уж человек лезет с измерениями через RDTSC, то будь добр разбиратся в тонкостях генерации кода, конкретной версии компилятора :)


Вот это и плохо, что если между той или иной строкой одинаковый код, но выполняется он по разному и есть не очень хорошо. Про разный код в случае разных компиляторов - это оно и так понятно. Поэтому и хотелось проверить FPC.
Burster_TIL
новенький
 
Сообщения: 46
Зарегистрирован: 25.09.2013 02:05:28

Re: Медленный компилятор FPC

Сообщение скалогрыз » 03.07.2015 16:26:12

Mikhail писал(а):FPC тоже не умеет. :( распознавание опткодов в BASM не в счет.

может быть и не умеет, но проект указанный выше , скомпилированный так
Код: Выделить всё
fpc -O3 -CfSSE3 -al testloop.dpr

выдаёт такой вот код:
Код: Выделить всё
# [21] f:=f*i;
   cvtsi2sdl   %eax,%xmm0
   mulsd   (%esp),%xmm0
   movsd   %xmm0,(%esp)
   cmpl   $1000,%eax
   jl   .Lj13

Если верить вики, что xmm0 был добавлен в расширение SSE, а инструкция mulsd movsd в SSE2. ...так что не знаю, верить глазам или нет...
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Пред.След.

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

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

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

Рейтинг@Mail.ru