C учетом всех пожеланий и исправлений был проведен еще один тест компиляторов. Результат тестирования: среднее арифметическое время выполнения тестовой функции в миллисекундах (1/1000 сек). т.е. чем меньше тем лучше. В тестировании участвовали: Intel C++ Compiler Pro 11.1.054 GCC 4.5.0 (MinGW) MS C/C++ Compiler 15.00.21022.08 (VS 2008) CodeGear C++ Builder 11.0 (C++Builder 2007) Tiny C Compiler 0.9.25 Железо для теста: Комп: CPU Intel E5200 (2-ядерный) 2.5 Ггц + 2 Гб ОЗУ Ноут: CPU AMD Athlon QL-62 (2-ядерный) 2 Ггц + 3 Гб ОЗУ ОС для теста: MS Windows XP SP3 Eng x32 на ноуте и на компа (с одного диска инсталились и один и тот же SP ставился) Варианты компиляции: Отключена любая оптимизация Включена вся возможная оптимизация Ограничения на тестирование: Исходный код тестовой программы не изменяется в зависимости от компилятора. А компилируется как есть: консольная программа. Тестовая функция не использует функции системы, т.е. только вычислительные операции, все функции связанные с вызовом системных функций вызываются до и после замера времени. Не используются библиотеки распараллеливания типа OpenMP Вычисления производятся только в одном потоке Компьютер не загружен больше никакими другими программами, только запущенная Windows + Notepad + тестовая программа. Для тестов не использовалась VCL, MFC, CLR, ATL. Код программ компилился именно как С код, а не С++ Для Tiny C Compiler использовался только 1 вариант компиляции, потому что он не поддерживает оптимизацию на уровне кода. Из доки: Методология тестирования: Выделение памяти для буферов Получение UserTime текущего потока через GetThreadTimes Выполнение тестовой функции Получение UserTime текущего потока через GetThreadTimes Получение разницы во времени с точностью до миллисекунд (1/1000 сек) Повторение последних 4-х действий 10 раз Вычисление среднего арифметического значения времени. Алгоритм вычислительной функции: Инициализация ключевой последовательности для алгоритма шифрования RC4 Инициализация ключевой последовательности для алгоритма шифрования AES-128 Заполнение первого тестового буфера данными полученными из генератора RC4 Вычисление CRC32 для первого тестового буфера Шифрование первого тестового буфера алгоритмом AES-128, блоками по 128 бит, с помещением результата во второй тестовый буфер Заполнение первого тестового буфера данными полученными из генератора RC4, т.е. первоначальные данные затираются полностью. Расшифровка второго тестового буфера с помещением результата в первый тестовый буфер Подсчет CRC32 для расшифрованного первого тестового буфера Сравнение CRC до шифрование и после Параметры теста: Кол-во данных для шифрования - 1600 килобайт (102400 блоков) Кол-во тестовых итераций для вычисления среднего арифметического значения времени - 10 Результаты тестирования: Intel C++ Compiler Pro 11.1.054: Ноут без оптимизации: 6301 мс Ноут с оптимизацией: 971 мс Комп без оптимизации: 4541 мс Комп с оптимизацией: 867 мс GCC 4.5.0 (MinGW): Ноут без оптимизации: 6568 мс Ноут с оптимизацией: 1691 мс Комп без оптимизации: 4979 мс Комп с оптимизацией: 1521 мс MS C/C++ Compiler 15.00.21022.08 (VS 2008): Ноут без оптимизации: 5149 мс Ноут с оптимизацией: 1574 мс Комп без оптимизации: 3740 мс Комп с оптимизацией: 1290 мс CodeGear C++ Builder 11.0 (C++Builder 2007): Ноут без оптимизации: 4982 мс Ноут с оптимизацией: 3854 мс Комп без оптимизации: 4006 мс Комп с оптимизацией: 3185 мс Tiny C Compiler 0.9.25: Ноут: 6275 мс Комп: 4606 мс Вот более наглядно: График времени выполнения кода: График скорости выполнения кода относительно лидера теста (лидер теста - 100%) Итого: По результат тестирования на оптимизацию по скорости, компиляторы занимают следующие места: Intel C++ Compiler Pro 11.1.054 MS C/C++ Compiler 15.00.21022.08 (VS 2008) GCC 4.5.0 (MinGW) CodeGear C++ Builder 11.0 (C++Builder 2007) Tiny C Compiler 0.9.25 Как видно: ребята из Intel хорошо постарались(на 32% код работал быстрее чем у ближайшего соперника) и их код имеет отличную оптимизацию не зависимо от того что он работает на Intel или AMD процессоре. В тоже время С++ Builder показал себя не с лучшей стороны (отставание в 2 раза), что свидетельствует о чуть другой специфики его применения. Ну а про Tiny C Compiler 0.9.25 и речи не может быть, потому что он вообще не поддерживает оптимизацию переходов, вот и выходит, что скорость выполнения программы находится на уровне с другими компиляторами без оптимизации при компиляции P.S. Конечно С++ Builder оказался чуть староват потому что не нашел я у себя более свежей версии. Хотя мне кажется, там мало что изменилось в этом плане. P.P.S. По результатам тестирования нельзя судить о компиляторе, что он хорош или плох, потому что каждому своё применение, а можно лишь говорить о том, какой их них подойдет для создания программных продуктов связанных c вычислительными операциями. (С) SLESH 2010
А если допустим код который был скомпилен это упаковщик типа WinRAR или 7z ? Тогда ты ооочень хорошо заметишь разницу в производительности когда будешь паковать файлик этак метров на 100