Форум «Всё о Паскале» _ Free Pascal, Pascal ABC и другие _ FPC 2.4.2
Автор: volvo 16.11.2010 13:24
12 ноября 2010 вышла новая версия FPC: http://freepascal.org/download.var
Немного об изменениях: 1. Введены ключевые слова Abstract и Sealed для классов, то есть, теперь конструкции "class abstract" и "class sealed" распознаются как спецификатор класса, и невозможно уже иметь в классах переменные с подобными именами:
type T = class Abstract: Integer; end;
, хотя 2.4.0 это компилировал.
2. В класс TObject введены методы UnitName, Equals, GetHashCode, ToString для большей совместимости с Дельфи (в Дельфи эти методы существуют, начиная с 2009 версии)
3. Заявлено наличие давно обсуждаемого цикла http://freepascal.org/docs-html/ref/refsu50.html#x121-13100010.2.5 , посмотрим, работает ли он на самом деле.
Есть также изменения в расположении некоторых модулей (Daemonapp, MacOSAll и DOM, а также модуля Sockets)...
Об основных изменениях можно прочесть здесь (англ): http://wiki.freepascal.org/User_Changes_2.4.2#Abstract_and_Sealed_class_modifiers
Чуть позже погоняю этот компилятор на тестах, и посмотрю, как у него с исправлениями старых ошибок.
Update: Вот результаты того же самого теста http://math.nist.gov/scimark2/about.html (Intel Core2 CPU 4400 @2GHz + 1024 Mb RAM, WinXP SP3. Настройки компиляторов: режим совместимости - Delphi, Range Checking (-), Stack Checking (+), I/O Checking (-), Integer Overflow Checking (+), генерировался быстрый код (generate faster code) для процессора Pentium4, Level 1 Optimization)
Без ключа -Large(Показать/Скрыть)
FPC 2.4.0:
Composite Score: 215.62 FFT Mflops: 35.23 (N=1024) SOR Mflops: 590.00 (100 x 100) MonteCarlo: Mflops: 16.78 Sparse matmult Mflops: 107.54 (N=100, nz=5000) LU Mflops: 328.52 (M=100, N=100)
FPC 2.4.2
Composite Score: 272.22 FFT Mflops: 89.43 (N=1024) SOR Mflops: 584.46 (100 x 100) MonteCarlo: Mflops: 40.33 Sparse matmult Mflops: 310.74 (N=1000, nz=5000) LU Mflops: 336.12 (M=100, N=100)
С ключом -Large(Показать/Скрыть)
FPC 2.4.0
Composite Score: 218.14 FFT Mflops: 20.74 (N=1048576) SOR Mflops: 570.29 (1000 x 1000) MonteCarlo: Mflops: 16.78 Sparse matmult Mflops: 145.62 (N=100000, nz=1000000) LU Mflops: 337.30 (M=1000, N=1000)
FPC 2.4.2
Composite Score: 255.87 FFT Mflops: 37.01 (N=1048576) SOR Mflops: 567.12 (1000 x 1000) MonteCarlo: Mflops: 40.33 Sparse matmult Mflops: 316.54 (N=100000, nz=1000000) LU Mflops: 318.37 (M=1000, N=1000)
И опять - довольно ощутимое увеличение быстродействия по сравнению с 2.4.0...
Автор: volvo 16.11.2010 20:12
Теперь - результаты еще одного теста. Когда-то мы с его помощью тестировали быстродействие разных компиляторов Паскаля друг относительно друга, сейчас мне просто интересно как FPC ведет себя от версии к версии, что ускоряется, в что замедляется.. Итак, тест вычисляет скорости следующих операций (сравнивались компиляторы 2.2.0 и 2.4.2) :
Доступ к члену класса (109 итераций).
Вызов пустого статического метода (109 итераций).
Вызов пустого динамического метода (109 итераций).
Если интересно, могу этот же тест прогнать с другими компиляторами (Дельфи, Virtual Pascal, GPC)
Автор: Polinom2686 19.11.2010 20:11
Цитата(volvo @ 16.11.2010 16:12)
Если интересно, могу этот же тест прогнать с другими компиляторами (Дельфи, Virtual Pascal, GPC)
Ну, за язык никто не тянул. Так что ждем вас с результатами тестов.
Автор: Гость 19.11.2010 21:23
Какая версия дельфи, и почему трёхкратный слив по строкам? Даже если бы дельфа делала юникод, а ФПЦ нет, был бы лишь 2кратный слив.
Автор: volvo 19.11.2010 21:42
TarasBer, ты читать умеешь? Там русским языком написано СОВМЕСТИМОСТЬ!!! Программа компилировалась в режимах {$MODE DELPHI} и {$MODE ObjFPC}, режим совместимости Дельфи сливает родному FPC-шному. Но когда я выложу результаты для Дельфи, ты еще больше удивишься. Слив действительно трехкратный (Дельфи 2009, проект НЕюникодный)
Автор: Гость 19.11.2010 22:01
А, понял. Тогда почему 2.4.2 втрое делает 2.2.0 почти на всех тестах? И вообще, каковы результаты для всех отключённых проверок, при максимальной оптимизации? А то сравнивать с проверками некорректно, может, 2.2.0 из-за них сливает.
Автор: volvo 19.11.2010 22:10
Цитата
Тогда почему 2.4.2 втрое делает 2.2.0 почти на всех тестах?
Может, потому что новая версия и должна быть как минимум не медленнее старой? Вот 2.4.2 и быстрее чем 2.2.0, причем намного. Перепроверить с отключенными проверками не смогу, я уже снес 2.2.0, и 2.4.0, две версии вместе не уживаются.
Добавлено через 3 мин. В общем, передумал я делать новые тесты. Все равно найдутся те, кто будет утверждать, что это все подтасовка, и что специально была выбрана именно эта оптимизация, чтоб показать преимущество FPC, и что тесты были взяты именно эти ,потому что на всех других Дельфи самая крутая (что ДАЛЕКО не так), и что... Ну, в общем, понятно, что причин не доверять тестам может быть много. Кому нужно - делает пусть тесты самостоятельно, или сидит на старье дальше.
Автор: Гость 19.11.2010 22:14
> Может, потому что новая версия и должна быть как минимум не медленнее старой?
Ну это понятно, но не настолько же! Тем более, раз ты уже 2.2.0 снёс и проверить, как компилировались екзешники, что осталисть от него, уже нельзя. Думаю, дело в опциях компилятора.
Автор: Гость 19.11.2010 22:27
> В общем, передумал я делать новые тесты. Все равно найдутся те, кто будет утверждать, что это все подтасовка
Красиво ушёл...
Автор: volvo 20.11.2010 4:40
Значит, вот результаты тестов четырех компиляторов (чтоб не было разговоров о том, что я пообещал и не сделал) :
GPC 3.4
FPC 2.4.2 (тестировалось в режимах Delphi и ObjFPC)
Virtual Pascal 2.1 (build 279)
Delphi 2009
Тестирование проводилось на одной и той же машине (параметры указаны выше) для сборки Release, все проверки отключены, выставлена оптимизация по скорости для процессора Pentium4, за исключением выделенного теста. Этот проводился на Debug-сборке, Range Checking (+), Stack Checking (+), I/O Checking (-), Integer Overflow Checking (+), галочка "Generate smaller code" снята, для генерации наиболее быстрого кода....
Немного изменен также формат выводимых значений. Чтобы программа собиралась всеми вышеупомянутыми компиляторами, я замерял количество тиков процессора и выводил мега-тики: число тиков, прошедших от начала теста до его завершения, разделенное на 220 (по аналогии байты/мегабайты), чтоб в нулях не запутаться.
P.S. С тестом SciMark придется немного подождать, мне пока не удалось его откомпилировать в GPC. Как только удастся - сразу опубликую результаты.
Автор: Polinom2686 20.11.2010 12:15
Особенно впечатлил результаты теста "Floating point". Двукратный отрыв Virtual Pascal от FPC и огроменное отставание Delphi.
Автор: volvo 20.11.2010 15:29
Мне кажется, ты неправильно интерпретируешь результаты. Это - не производительность тестов (в МегаФлопсах), как у SciMark2. Это - время выполнения операций в тиках. Так что на Floating Point Test как раз не VP обгоняет FPC, а наоборот, FPC в два раза быстрее. А Дельфи - вообще рвет всех на куски.
Вот со строками - да, FPC быстрее (в родном, ObjFPC режиме) всех остальных.
Автор: TarasBer 20.11.2010 16:40
Про вещественные числа интересно. У всех, кроме Дельфи, куча незаинлайненных процедур из одной команды? Или Дельфи научилась использовать всю глубину стека сопроцессора и ССЕ?
Автор: Polinom2686 21.11.2010 2:14
Цитата(volvo @ 20.11.2010 11:29)
Мне кажется, ты неправильно интерпретируешь результаты. Это - не производительность тестов (в МегаФлопсах), как у SciMark2. Это - время выполнения операций в тиках. Так что на Floating Point Test как раз не VP обгоняет FPC, а наоборот, FPC в два раза быстрее. А Дельфи - вообще рвет всех на куски.
Вот со строками - да, FPC быстрее (в родном, ObjFPC режиме) всех остальных.
Теперь понятно. А я уж думал, что FPC настолько крут, что даже Delphi рвет на лоскуты.
Автор: volvo 21.11.2010 4:21
Кстати, в режиме оптимизации -O3 FreePascal научился-таки оптимизировать хвостовую рекурсию, сводя ее к итерации. Тестировалось на функции Аккермана:
function Ack(n, m: LongWord): LongWord; begin if n = 0 then Result := m + 1 else if m = 0 then Result := Ack(n - 1, 1) else Result := Ack(n - 1, Ack(n, m - 1)) end;
// ... Value := Ack(3, 12);
FPC 2.4.2, Release-сборка с оптимизацией Level1 выполняется за 15475 МегаТиков, проигрывая Дельфи (Дельфийская Release сборка, максимально оптимизированная, выполняется за 10915 МегаТиков).
В то время как FPC в режиме оптимизации Level1 + Level3 выполняется в 3 раза быстрее первоначального времени, за 5284 МегаТика.
Автор: Aelita 28.11.2010 1:35
Интересные данные! Немного жаль, что в последней таблице нет каких-либо из старых версий Free Pascal
Автор: volvo 29.11.2010 1:48
Aelita, какие компиляторы и какие их параметры тебя интересуют?
Прогнал на том же тесте FPC 1.0.10, результаты прикрепляю:
Эскизы прикрепленных изображений
Автор: Aelita 30.11.2010 7:35
Гран мерси! Меня как раз интересовал Free Pascal 1.0.10, а также другая вершина его истории -- 2.2.4.
Автор: Игорь 11.12.2010 0:55
Случайно мышкой изменил размер окна FPC и теперь не могу изменить его в настройках. Когда пытаюсь это сделать появляется сообщение, что произошла какая-то ошибка. Что делать?
Автор: volvo 11.12.2010 1:23
Цитата
Когда пытаюсь это сделать появляется сообщение, что произошла какая-то ошибка. Что делать?
Ну, раз какая-то ошибка - то что-то делать... Будет информация об ошибке конкретнее - будет конкретный ответ.
Автор: Игорь 11.12.2010 1:29
Options-Environment-Preferences...
Вот это сообщение:
Program generated a signal 291. Save your sources and restart the IDE.
Автор: volvo 11.12.2010 1:54
А зачем тебе ТАМ менять размеры, если ты ТУДА не заходя, изменил размер мышью? Закрой FPC, зайди в свойства ярлыка, которым он запускается, и на вкладке Layout установи нужные размеры экранного буфера и самого окна: