powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Итоги 2017 года
25 сообщений из 92, страница 3 из 4
Итоги 2017 года
    #39579131
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemarglнет смысла сравниваться с моно - это опенсорсный выпердок изначально и труп в ближайшей перспективе
На счёт перспективы видимо да, но с чем ещё сравнивать корку под линуксом, как не с моной.

makhaon,

Для шарпа там есть многопоточный вариант.
...
Рейтинг: 0 / 0
Итоги 2017 года
    #39579989
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglAFAIK,

fpc - самый говеный компилятор из всех существующих в мире за последние надцать лет

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

TLDR - насильно включайте SSE2 для 32бит, а лучше сразу использовать 64-битную компиляцию
Он все еще худший среди оптимизирующих - но в версии 3.04 для 32-бит включение правильной оптимизации ускоряет на рэйтресинге в 1.6 раз, в основном за счет SSE.

Что нужно не забывать, кроме О4, - насильно прописывать ему тип процессора и для 32-бит - SSE2 для плавающей точки, он автоматически это не делает.

К сожалению, 32-битный компилятор, похоже забросили, и с AVX он уже не компилирует.
А тот же тест в 64-битном режиме в 1.5 быстрее, чем в 32-бит (

Впрочем - отличие по режимам процессора по ассемблерному кому минимальное - основная причина в разнице скорости - 64-бит по дефолту использует AVX, а 32-бит - x87.


В целом, кто хочет - может дописать один из тестов, которого не хватает для Паскаля, ну или попытаться оптимизировать провальные
http://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=fpascal&lang2=gpp
...
Рейтинг: 0 / 0
Итоги 2017 года
    #39580002
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl,

какой смысл?
любой тест специализирующийся на какой-то узкой области предвзятый.
...
Рейтинг: 0 / 0
Итоги 2017 года
    #39589048
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интереса ради запустил шарповый код под .NET Core на линуксе. Оказалось, он быстрее дельфийского на 26%. Причём дельфийский код (10.1, Win64) работал на хост-машине, а шарповый на виртуалке.
...
Рейтинг: 0 / 0
Итоги 2017 года
    #39589050
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyИнтереса ради запустил шарповый код под .NET Core на линуксе. Оказалось, он быстрее дельфийского на 26%. ...
А что ты измерял?
...
Рейтинг: 0 / 0
Итоги 2017 года
    #39589051
НуИПоХуй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все пропало.... Клиент уезжает... Гипс снимают!!!
...
Рейтинг: 0 / 0
Итоги 2017 года
    #39589077
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДА что ты измерял?
https://github.com/Mark-Kovalyov/CardRaytracerBenchmark
...
Рейтинг: 0 / 0
Итоги 2017 года
    #39589146
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyИнтереса ради запустил шарповый код под .NET Core на линуксе. Оказалось, он быстрее дельфийского на 26%. Причём дельфийский код (10.1, Win64) работал на хост-машине, а шарповый на виртуалке.Ты фрипаскалевский код компилил? Он там нормально написан?
...
Рейтинг: 0 / 0
Итоги 2017 года
    #39589167
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_niggerТы фрипаскалевский код компилил? Он там нормально написан?
Да. Да. :)
...
Рейтинг: 0 / 0
Итоги 2017 года
    #39589178
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger,

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

надо бы его как нить пооптимизировать и уравнять алгоритмы, что бы они одно и тоже делали, а не каждый сам по себе
не помню что бы кардинально было отличие от плюсов больше 60% когда я его тестил
ява с шарпом там тупили одинаково
...
Рейтинг: 0 / 0
Итоги 2017 года
    #39589187
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)на виртуалке может быстрее отрабатывать за счёт приоритетов, а на винде тупить за счёт приостановки задачи
Ещё ни разу код выполняющийся на виртуалке не работал быстрее чем код на хостовой машине (я в основном работаю и тестирую на виртуалках, потому знаю о чём говорю), за исключением кода активно работающего с диском. Для интереса могу и дельфёвый в виртуалку засунуть, если ты думаешь, что это поможет :)
...
Рейтинг: 0 / 0
Итоги 2017 года
    #39589259
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

а ты не знал что Linux поровнее проц выдаёт чем винда?

вот тест с моей машинки 1-е MSVC++, второй fpc:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
G:\Temp>test.cmd
15:36:20,89

G:\Temp>card_raytracer_cpp.exe   d1.ppm
15:36:32,96

G:\Temp>card_raytracer.exe   1>d2.ppm
15:36:54,43

плюсовый код поменялся судя по отличию в выводе, что-то оптимизировали, первоначальный исходник не нашёл
...
Рейтинг: 0 / 0
Итоги 2017 года
    #39589262
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

эти тесты тупо причёсывать надо, иначе они производительность генераторов случайных чисел накладывают
и сравнивать результаты на полное совпадение
...
Рейтинг: 0 / 0
Итоги 2017 года
    #39589360
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)а ты не знал что Linux поровнее проц выдаёт чем винда?
Винда в тестировании вообще не использовалась. Дельфийский код запускался на вайне, который, как известно, не эмулятор, а альтернативная реализация WinAPI, которого этот код не использует.

kealon(Ruslan)эти тесты тупо причёсывать надо, иначе они производительность генераторов случайных чисел накладывают
и сравнивать результаты на полное совпадение
В паскалевской реализации бенча используется довольно примитивный гсч. Я его перенёс в шарповый бенч, дабы идентичность обеспечить, в результате шарповый стал работать ещё быстрее.
...
Рейтинг: 0 / 0
Итоги 2017 года
    #39589402
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

хз, генератор я естественно меняю и ставлю одинаковый

но я почему-то не вижу этих 260% не на G++ не на MSVC, может я криво тестю? или у меня компилятор какой-то тюнингованный (вполне старый fpc 3.0.0 под виндой и под Linux с репа Mint)?
под виндой оба 64-битные release. под Linux такая же лабуда была в сравнение с G++

причём заметь, код на fpc специально не тюнингован, а один в один до порядка действий переписан с С++

под Wine я бы не сравнивал как что работает при любых допущениях, я написал только к выссказыванию 21130748 из которого и следует что под виндой запускается и сравнивается с результатом в ВМ
...
Рейтинг: 0 / 0
Итоги 2017 года
    #39589417
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)но я почему-то не вижу этих 260%
260% и я не вижу.

kealon(Ruslan)под Wine я бы не сравнивал как что работает при любых допущениях
Почему бы и нет? Там исполняется ровно тот же самый x86_64, системных вызовов в бенче нет т.ч. влияния вайна быть не может.

С фпц ещё прикол. Один и тот же код, собранный с идентичными настройками, но под разные платформы (Win_x64, Linux_x64) показывает разный результат и результат виндового варианта значительно лучше. Линуксовый запускался в родной среде, виндовый в ней же но под вайном. Правда компилятор у меня транковый.
...
Рейтинг: 0 / 0
Итоги 2017 года
    #39589536
Sapersky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kazantsev Alexey260% и я не вижу.
В той ветке тестеры собирали на Си с -march=native, т.е. все инструкции вплоть до AVX2/FMA, а на fpc видимо остался по умолчанию SSE2.
Но даже если включить все инструкции в FPC, он выдаёт довольно корявый по сравнению с Си код.
https://godbolt.org/g/eoqaRv
https://godbolt.org/g/xXT9P3
Использование всего 2-3 регистров, постоянные обращения к памяти, в общей сумме в 2 раза длиннее.
Похоже, проблема в кривом инлайне - каждая "вызываемая" процедурка берёт параметры из памяти и в конце пишет результат в память. Кому не лень, можете заинлайнить вручную и проверить.
...
Рейтинг: 0 / 0
Итоги 2017 года
    #39589546
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело не в инлайне. Инлайн в целом удлиняет программу.

Здесь же асм код от паскаля втрое! длиннее.
...
Рейтинг: 0 / 0
Итоги 2017 года
    #39589552
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Посмотрел я на этот бенч.

Сдаеться мне они там меряют скорость вывода в консоль/файл а не только качество алгоритмов и компилятора. ;)
...
Рейтинг: 0 / 0
Итоги 2017 года
    #39589554
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Адаптировал FPC под дельфовый код. Выложите скомпиленный эталон на FPC и еще на чем нибуть.
...
Рейтинг: 0 / 0
Итоги 2017 года
    #39589556
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну или сами тестите.

Код: 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.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
214.
215.
216.
program card_raytracer;

{$APPTYPE CONSOLE}

{$R *.res}

uses
  System.SysUtils,Math;

const
  Width = 512;
  Height = 512;

  M = 1048576; // 2^20
  J = 2045;
var
  oldI: integer = 12357;
type
  TFloat = double;

  TVector = record
     class operator Add(const v1,v2: TVector): TVector;
     class operator Subtract(const v1,v2: TVector): TVector;
     class operator Multiply(const v1,v2: TVector): TFloat; overload;
     class operator Multiply(const v: TVector; r: TFloat): TVector; overload;

    case integer of
      0: (x, y, z: TFloat;);
      1: (vector: array[1..3] of TFloat;);
  end;

  function Vector(a, b, c: TFloat): TVector; inline;
  begin
    Result.x := a;
    Result.y := b;
    Result.z := c;
  end;

  function rand0_1(): TFloat; inline;
  begin
    oldI := (oldI * J + 1) mod M;
    Result := oldI / M;
  end;

  function exp(const v1, v2: TVector): TVector;
  begin
    Result := Vector(v1.y * v2.z - v1.z * v2.y, v1.z * v2.x -
      v1.x * v2.z, v1.x * v2.y - v1.y * v2.x);
  end;

  function norm(const v: TVector): TVector;
  var
    r: TFloat;
  begin
    r := sqrt(v * v);
    Result := v * (1 / r);
  end;

const
  Gt: array[0..8] of integer = (
    $0003C712,  // 00111100011100010010
    $00044814,  // 01000100100000010100
    $00044818,  // 01000100100000011000
    $0003CF94,  // 00111100111110010100
    $00004892,  // 00000100100010010010
    $00004891,  // 00000100100010010001
    $00038710,  // 00111000011100010000
    $00000010,  // 00000000000000010000
    $00000010  // 00000000000000010000
    );

  function tracer(const o, d: TVector; out t: Tfloat; out n: TVector): integer;
  var
    k, j: integer;
    pp: TFloat;
    p: TVector;
    b: TFloat;
    c, q, s: TFloat;
  begin
    t := 1e9;
    Result := 0;
    pp := -o.z / d.z;
    if (0.01 < pp) then
    begin
      t := pp;
      n := Vector(0, 0, 1);
      Result := 1;
    end;
    for k := 18 downto 0 do
    begin
      for j := 8 downto 0 do
      begin
        if (Gt[j] and (1 shl k)) = 0 then
          continue;
        p := o + Vector(-k, 0, -(j + 4));
        b := p * d;
        c := p * p - 1;
        q := b * b - c;
        if (q <= 0) then
          continue;
        s := -b - sqrt(q);
        if (s < t) and (s > 0.01) then
        begin
          t := s;
          n := norm(p + d * t);
          Result := 2;
        end;
      end;
    end;
  end;

  function sampler(const o, d: TVector): TVector;
  var
    t: TFloat;
    n: TVector;
    m: integer;
    h, l, r, s: TVector;
    b, p: TFloat;
    p1, p2: TFloat;
  begin

    m := tracer(o, d, t, n);
    if (m = 0) then
      exit(Vector(0.7, 0.6, 1) * power(1 - d.z, 4));

    h := o + d * t;
    p2 := 9 + rand0_1();
    p1 := 9 + rand0_1();
    l := norm(Vector(p1, p2, 16) - h);
    r := d + n * (n * d * (-2));
    b := l * n;
    if (b < 0) or (tracer(h, l, t, n) <> 0) then
      b := 0;

    p := power(l * r, 99) * Ord(b > 0);
    if (m and 1) <> 0 then
    begin
      h := h * 0.2;
      if ((ceil(h.x) + ceil(h.y)) and 1) <> 0 then
      begin
        s := Vector(3, 1, 1);
      end
      else
      begin
        s := Vector(3, 3, 3);
      end;
      exit(s * (b * 0.2 + 0.1));
    end
    else
    begin
      Result := Vector(p, p, p) + sampler(h, r) * 0.5;
    end;
  end;

var
  g, a, b, c, p, t, ta, tb: TVector;
  y, x, r: integer;


{ TVector }

class operator TVector.Add(const v1, v2: TVector): TVector;
begin
  Result.x:=v1.x + v2.x;
  Result.y:=v1.y + v2.y;
  Result.z:=v1.z + v2.z;
end;

class operator TVector.Multiply(const v1, v2: TVector): TFloat;
begin
  Result := v1.x * v2.x + v1.y * v2.y + v1.z * v2.z;
end;

class operator TVector.Multiply(const v: TVector; r: TFloat): TVector;
begin
  Result.x:=v.x * r;
  Result.y:=v.y * r;
  Result.z:=v.z * r;
end;

class operator TVector.Subtract(const v1, v2: TVector): TVector;
begin
  Result.x:=v1.x - v2.x;
  Result.y:=v1.y - v2.y;
  Result.z:=v1.z - v2.z;
end;

begin
  writeln('P6');
  //writeln('P3');
  writeln(Width, ' ', Height);
  Write('255 ');
  g := norm(Vector(-6, -16, 0));
  a := norm((exp(Vector(0, 0, 1),g))) * 0.002;
  b := norm(exp(g,a)) * 0.002;
  c := (a + b) * (-256) + g;
  for y := Height - 1 downto 0 do
  begin
    ;
    for x := Width - 1 downto 0 do
    begin
      p := Vector(13, 13, 13);
      for r := 64 downto 1 do
      begin
        tb := b * ((rand0_1() - 0.5) * 99);
        ta := a * ((rand0_1() - 0.5) * 99);
        t := ta + tb;
        p := sampler(Vector(17, 16, 8) + t,
          norm(t * (-1) + (a * (rand0_1() + x) + b * (y + rand0_1()) + c) * 16)) *
          3.5 + p;
      end;
      //writeln(min(round(p.x),255),' ',min(round(p.y),255),' ',min(round(p.z),255));
      Write(char(round(p.x)), char(round(p.y)), char(round(p.z)));
    end;
  end;
end.

...
Рейтинг: 0 / 0
Итоги 2017 года
    #39589561
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatСдаеться мне они там меряют скорость вывода в консоль/файл а не только качество алгоритмов и компилятора. ;)
Там того вывода... Впрчем, я для фпц и дельфей вообще вывод отключал, у шарпа оставил.

rgreatВыложите скомпиленный эталон на FPC и еще на чем нибуть.
Могу сборку для .net core выложить если у тебя есть на чём запустить.
...
Рейтинг: 0 / 0
Итоги 2017 года
    #39589568
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, линукс не интересен.
...
Рейтинг: 0 / 0
Итоги 2017 года
    #39589571
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyТам того вывода... Сотни страниц посимвольно.
...
Рейтинг: 0 / 0
Итоги 2017 года
    #39589572
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatНе, линукс не интересен.
Так он вообще-то кроссплатформенный...
...
Рейтинг: 0 / 0
25 сообщений из 92, страница 3 из 4
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Итоги 2017 года
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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