Тест С компиляторов под Win (ver 2)

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by slesh, 7 Nov 2010.

  1. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    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 ставился)

    Варианты компиляции:
    1. Отключена любая оптимизация
    2. Включена вся возможная оптимизация

    Ограничения на тестирование:
    • Исходный код тестовой программы не изменяется в зависимости от компилятора. А компилируется как есть: консольная программа.
    • Тестовая функция не использует функции системы, т.е. только вычислительные операции, все функции связанные с вызовом системных функций вызываются до и после замера времени.
    • Не используются библиотеки распараллеливания типа OpenMP
    • Вычисления производятся только в одном потоке
    • Компьютер не загружен больше никакими другими программами, только запущенная Windows + Notepad + тестовая программа.
    • Для тестов не использовалась VCL, MFC, CLR, ATL.
    • Код программ компилился именно как С код, а не С++
    • Для Tiny C Compiler использовался только 1 вариант компиляции, потому что он не поддерживает оптимизацию на уровне кода. Из доки:


    Методология тестирования:
    1. Выделение памяти для буферов
    2. Получение UserTime текущего потока через GetThreadTimes
    3. Выполнение тестовой функции
    4. Получение UserTime текущего потока через GetThreadTimes
    5. Получение разницы во времени с точностью до миллисекунд (1/1000 сек)
    6. Повторение последних 4-х действий 10 раз
    7. Вычисление среднего арифметического значения времени.

    Алгоритм вычислительной функции:
    1. Инициализация ключевой последовательности для алгоритма шифрования RC4
    2. Инициализация ключевой последовательности для алгоритма шифрования AES-128
    3. Заполнение первого тестового буфера данными полученными из генератора RC4
    4. Вычисление CRC32 для первого тестового буфера
    5. Шифрование первого тестового буфера алгоритмом AES-128, блоками по 128 бит, с помещением результата во второй тестовый буфер
    6. Заполнение первого тестового буфера данными полученными из генератора RC4, т.е. первоначальные данные затираются полностью.
    7. Расшифровка второго тестового буфера с помещением результата в первый тестовый буфер
    8. Подсчет CRC32 для расшифрованного первого тестового буфера
    9. Сравнение 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 мс


    Вот более наглядно:
    График времени выполнения кода:
    [​IMG]

    График скорости выполнения кода относительно лидера теста (лидер теста - 100%)
    [​IMG]

    Итого:
    По результат тестирования на оптимизацию по скорости, компиляторы занимают следующие места:
    1. Intel C++ Compiler Pro 11.1.054
    2. MS C/C++ Compiler 15.00.21022.08 (VS 2008)
    3. GCC 4.5.0 (MinGW)
    4. CodeGear C++ Builder 11.0 (C++Builder 2007)
    5. 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
     
    #1 slesh, 7 Nov 2010
    Last edited: 7 Nov 2010
  2. Vollkorn

    Vollkorn Member

    Joined:
    6 Nov 2010
    Messages:
    86
    Likes Received:
    15
    Reputations:
    -6
    аааеее)) Intel C++ Compiler Pro 11.1.054 рулит))
     
  3. Ivan-Veter

    Ivan-Veter New Member

    Joined:
    2 Nov 2010
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Да Intel жжет.
     
  4. rudi

    rudi Active Member

    Joined:
    3 Jun 2010
    Messages:
    487
    Likes Received:
    184
    Reputations:
    5
    за старания спасибо
    Мне кажется эти различия для человеческого взгляда не так и ощутимы
     
  5. slesh

    slesh Elder - Старейшина

    Joined:
    5 Mar 2007
    Messages:
    2,702
    Likes Received:
    1,224
    Reputations:
    455
    А если допустим код который был скомпилен это упаковщик типа WinRAR или 7z ? Тогда ты ооочень хорошо заметишь разницу в производительности когда будешь паковать файлик этак метров на 100
     
  6. St0nX

    St0nX Elder - Старейшина

    Joined:
    19 May 2007
    Messages:
    257
    Likes Received:
    46
    Reputations:
    0
    Есть у кого ключ на Intel? :)