Два очка, за мои два цента:
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.