Делает ли Delphi XE более быстрый код, чем Delphi 2007? - PullRequest
13 голосов
/ 16 июня 2011

Я использую в основном Delphi 2007 для проектов, которые не нуждаются в Юникоде.

В последнее время меня интересует Delphi XE, потому что

  • все его хвалят;
  • встроенная поддержка SVN

Мне было интересно, были ли какие-либо улучшения в компиляторе, которые делают Delphi XE для создания более быстрого кода, чем Delphi 2007, я говорю отакие вещи, как:

  • лучшее устранение мертвого кода (Delphi 2007 вполне приличный, но не устраняет 100% мертвого кода)
  • развертывание цикла (уровень оптимизации O3 для ala C)
  • автоматическое встраивание коротких подпрограмм
  • меньше накладных расходов в многопоточном коде.

РЕДАКТИРОВАТЬ

На этой странице: http://www.embarcadero.com/products/delphi/whats-new

В нем перечислены: Improved compiler performance Так что именно улучшилось?

Ответы [ 5 ]

15 голосов
/ 16 июня 2011

Два очка, за мои два цента:

1.Для нашей платформы ORM с открытым исходным кодом

При выполнении наших модульных тестов с компиляторами Delphi 7, Delphi 2007 и Delphi 2010 я обнаружил некоторое улучшение скорости между Delphi 7 и Delphi 2007,но не заметно между Delphi 2007 и 2010. Было сочтено, что сгенерированный Delphi 2010 код работает немного медленнее.У меня под рукой нет компилятора Delphi XE, но я думаю, что он примерно такой же, как Delphi 2010 - в основном исправление ошибок в дженериках, AFAIR.

Я провел много времени в представлении asm (Alt-F2) когда я пишу низкоуровневый паскаль-код и использую профилировщик.Поэтому я обычно замечаю разницу между версиями компилятора Delphi.

ИМХО, главным улучшением действительно было ключевое слово inline для методов и функций / процедур, доступных в Delphi 2007, а не в Delphi 7. Другое улучшение было более агрессивнымповторное использование регистра.

Код, сгенерированный с плавающей запятой, все еще медленный и иногда ужасный (FWAIT все еще генерируется, даже если он больше не нужен, а встроенный код с плавающей запятой может быть даже на хуже, чембез вставки !

Что интересно в нашей среде, и все эти тесты заключаются в том, что она обрабатывает много данных, используя собственные низкоуровневые модули, закодированные в очень настроенном паскале для лучшей производительностиИ предоставленные модульные тесты (более 5 400 000 отдельных тестов) работают с реальными данными (числовое преобразование или обработка текста UTF-8), с множеством разнообразных процессов, включая низкоуровневые преобразования, синтаксический анализ текста, распределение объектов, многопоточностьи клиент / сервер ориентация. Так вот, кодовые родыРабота компилятора имеет значение.

Код в основном находится в нашей среде.Мы используем наш собственный тип строки RawUTF8, а не общую строку.Следовательно, узким местом является не VCL и не API Windows, а только чистый скомпилированный код Delphi.Фактически мы избегаем большинства вызовов API, даже для кодирования UTF-8 или числовых преобразований.

Конечно, я пробовал этот тест с условным набором PUREPASCAL, то есть не запускал оптимизированную часть в asm, но полагался только на«чистый паскаль» код.

2.Для модуля сжатия SynLZ

Другим хорошим экспериментом по скорости была запись и профилирование нашего модуля сжатия SynLZ .Благодаря этой оптимизированной реализации алгоритма сжатия LZ сжатие происходит в 20 раз быстрее, чем zip, а декомпрессия - в 3 раза быстрее.Фактически, он конкурирует с LZO за степень сжатия и скорость распаковки, но намного быстрее, чем LZO за сжатие: SynLZ способен сжимать данные с той же скоростью, что и распаковывает их.Такая симметричная реализация очень редка в мире сжатия.

Она включает в себя только целочисленную арифметику и битовую логику, заполнение и поиск в хеш-таблицах, а также копирование памяти.

Мы написали несколько очень настроенных паскалейкод, а затем скомпилировал его с Delphi 7 и Delphi 2009.

Сгенерированный код Delphi 2009 был быстрее, чем Delphi 7, заметным образом.Сгенерированный код был действительно лучше, с лучшим повторным использованием регистров.

Благодаря ручному профилированию ассемблера мы достигли еще большей производительности.Например, XML-файл размером 6 КБ сжимается со скоростью 14 МБ / с с использованием zip, 185 МБ / с с использованием LZO, 184 МБ / с с использованием версии SynLZ для Delphi 2009 pascal и 256 МБ / с с нашей окончательно настроенной версией asmSynLZ.

Вывод:

Для генерации кода, включающего целочисленный процесс, анализ текста или память, я думаю, что Delphi XE быстрее, чем Delphi 7, но должен быть большеили меньше на том же уровне, что и Delphi 2007. Инлайнинг был основной новой функцией, которая могла значительно ускорить код.

Но для реальных приложений увеличение скорости не будет заметно.Около 10 или 20% в некоторых конкретных случаях, не более.Алгоритмы всегда являются ключом к повышению производительности.Delphi 7 уже был хорошим компилятором.

Для арифметики с плавающей точкой компилятор Delphi в настоящее время устарел.Я надеюсь, что код SSE в 64-битном компиляторе изменит здесь результаты.

Чтобы ответить непосредственно на ваш вопрос, в Delphi 2010 или XE, нет автоматической вставки или автоматической циклической развертки, AFAIK.Кроме того, накладные расходы в многопоточном коде являются не частью компилятора, а библиотекой (FastMM4, подсчет ссылок и т. Д.).Поэтому я не думаю, что Delphi XE создает более быстрый код, чем Delphi 2007.

9 голосов
/ 16 июня 2011

Мое неформальное тестирование компилятора Delphi XE показывает, что генерация кода заметно правильнее во многих случаях, связанных с использованием Generics, и что некоторые внутренние сбои (ошибки) компилятора преследовали компилятор в эпоху Delphi 2009, 2010, сейчас исправлены.Во многих случаях код Delphi 2010 с использованием универсальных элементов, связанных с пакетами, при неоднократном перестроении в IDE может привести к повреждению вывода файла DCP или таинственным внутренним ошибкам компилятора во время компиляции и ссылки.

Я бы написалв примечаниях к выпуску, если это был я, «мы исправили ошибки». (я убираю фразу "Best Ever", потому что кажется, что люди думают, что я имел в виду рекламу своего тогдашнего работодателя, я раньше работал на Embarcadero). Я полагаю, что все это было сглажено вслово «производительность», где производительность понимается как «правильность» и «выполнение своей работы надежно и без сбоев».

Что касается скорости, я не заметил каких-либо статистически значимых отличий в профилировании кода от Delphi.2009, 2010 или XE, с точки зрения скорости исполнения во время выполнения или производительности компилятора с точки зрения «он строит проекты быстрее».

Поскольку вы спрашивали о Delphi 2007, вы должны знатьчто существует огромное изменение типа (String = AnsiString, String = UnicodeString).Для того же кода некоторые вещи будут работать медленнее, а некоторые - быстрее, и на 100% невозможно сказать, что произойдет, если вы перекомпилируете свой код 2007 года в 2010 году, не зная о нем много.Если раньше вы в значительной степени полагались на WideString и теперь вместо этого можете использовать UnicodeString, ваш код будет работать намного быстрее, поскольку производительность UnicodeString намного выше производительности WideString.Некоторые программы на Delphi тратят много времени в своем коде, тихо (и почти незаметно), конвертируя ваши ANSI-данные в Unicode-данные, внутренне в Win32, например, когда вы используете общий элемент управления Memo.С другой стороны, некоторые вещи, которые раньше использовали строки байтового размера, теперь будут использовать строки размера слова, поэтому использование памяти в некоторых местах увеличится, а некоторые операции могут стать медленнее.Наиболее вероятный чистый результат для правильно перенесенного кода (вы должны внести некоторые изменения в большинство приложений, чтобы заставить их встроить XE, если вы написали их для 2007 года), - это, во всяком случае, незначительное чистое снижение «сырой производительности».

Однако Delphi XE строит проекты и, что более важно, перестраивает и перестраивает снова и снова в IDE без происшествий и никогда не падает на меня.Delphi 2007 постоянно зависал от меня.Delphi 2007 также содержит сотни досадных ошибок компилятора, которые сводят меня с ума.Скорость скомпилированного кода даже не является основной причиной для обновления, а надежность.

Часто в больших проектах, которые я использовал, Delphi 2007, 2009 и 2010 приводили к сбою при втором или третьем восстановлении какого-либо сложногонабор пакетов.В 2009 и 2010 годах пакеты, в которых интенсивно использовались дженерики, были особенно подвержены сбоям в среде IDE.XE стабилен, даже когда я использую его с тяжелым обобщенным кодом, и это своего рода «повышение производительности», о котором могут говорить заметки о выпуске.Я называю это «исправлением ошибок». Давайте называть вещи своими именами.

(удален последний абзац, потому что люди думают, что это реклама)

5 голосов
/ 16 июня 2011

Я не вижу каких-либо существенных улучшений в генерации кода.Я не знаю, что было что-то очень существенное с точки зрения улучшений генерации кода после Delphi 5. На самом деле я никогда не обнаруживал, что мой код работает быстрее после обновления, и это восходит к Delphi 2.

3 голосов
/ 16 июня 2011

Компилятор Delphi сегодня очень устарел и переписывается.Усовершенствования до XE выглядят незначительными, и компилятор не может в полной мере воспользоваться последними возможностями процессора и наборами команд (он в основном застрял в эпоху 80386, но для некоторого кода RTL, который использует рукописный ассемблер, чтобы воспользоваться преимуществамиболее современные возможности).Компилятор XE может быть более надежным по сравнению с предыдущими версиями (поскольку качество D7 стало очень изменчивым), но для общего улучшения производительности потребуется полная перестройка компилятора, чтобы перенести его в XXI век.Это было предпринято, но неизвестно, будет ли в следующем выпуске только более новый 64-битный компилятор и все еще старый 32-битный, или же у 32-битного компилятора также будет новая кодовая база.

2 голосов
/ 16 июня 2011

Вот ссылка на embaracadero

http://www.embarcadero.com/products/delphi/whats-new

Короткий путь вниз по странице в

"Языке, компиляторе и библиотекеУлучшения "

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

...