В соселней ветке "Работа — с чего начать: С++ или С#?" было озвучено
мнениеАвтор: samius
Дата: 19.05.09
, что C#
немного медленее С++. И даже
предложен код на C#Автор: IID
Дата: 19.05.09
.
Я привёл код в компилябельное состояние. Вот
C# вариант, а вот
C++ вариант. Для компиляции использовалась MSVS2008 со всеми обновлениями.
— компилятор C# версии 3.5 Настроки релизной сборки — дефолтные. (Там-то и настраивать особо нечего).
— компилятор Intel С++ 11.0.072. Релизная сборка кастомизирована. Впрочем, разница между дефолтной релизной сборкой и кастомизированной невелика, порядка 10-15%. Ключи компиляции:
/c /O2 /Og /Oi /Ot /Oy /Qipo /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /EHsc /MD /GS- /Gy /fp:fast /Yu"StdAfx.h" /Fp"Release/SpeedTestCpp.pch" /Fo"Release/" /W3 /nologo /Zi /QxSSSE3 /Qparallel /Qprof_use /Qprof_dir "Release"
Тестовая машина: Intel Core2 Q6600, 800mhz RAM 8Gb. ОС — Windows 7 RC1 x64. Программы собирались для x86.
Условия прогона: в диапазонах, указанных автором оригинального C# кода. Шаг по X/Y составляет 0.001 (всего за прогон обсчитывается 9млн пикселей). Делается 100(сто) прогонов подряд. Вычисляется суммарное время.
Побочные эффекты: практически исключены. Сторонней нагрузки не было, taskmgr показывал загрузку только одного ядра во время прогонов. Т.е. гипотеза о том что интел компилер сумел заюзать несколько ядер отпадает.
Результаты:
С#: 2m 14s (134 секунды)
С++: 27 секунд
С++ показал практически пятикратное преимущество (496%), обеспечив обсчёт ~33.33млн пикселей в секунду. C# осилил только ~6.71млн пикселей в секунду. (что довольно близко к результату автора в 5.9млн пикселей)
Итог: подавляющее превосходство С++. Не "немного быстрее", как утверждал автор, а в разы. Причём задача сводилась, фактически, только к грамотному распихиванию FPU команд. Интересно было бы посмотреть на работу с битами. Думаю, тут интел смог бы обеспечить ещё больший отрыв.