Недавно с коллегой поспорили на тему производительности в математических вычислениях. Задачка была довольно простая — перемножить 2 матрицы комплексных числе размером 600 на 600. Он писал на C#, я на C++. Изначально ожидалось, что C++ будет быстрее, но тем не менее результаты поразили нас обоих. Код на C++ работал в 9 (!) раз быстрее чем аналогичный на шарпе. И это после того, как мы включили все возможные оптимизации, по несколько раз пересмотрели сам код и оптимизировали все что могли.
От форумчан поступило предложение выложить тот и другой код, чтобы совместными услилиями C# догнал C++.
Требования обозначались простые:
1) Не использовать ничего стороннего. В случае C# — только managed код (никакого interop & unsafe) + .Net framework, в случае C++ — только сам язык + STL.
2) Код должен быть читаемым. Т.е. не стоит запихивать все в один метод только из-за того, чтобы устранить вызовы функций.
3) Настройка параметров проекта (компилятора, линкера) — произвольная. Так в C++ проекте я указал размер стека в 64 мб.
В приложенных файлах оба решения, открывать можно/нужно в 2005 студии.
Коллеги, присоединяйтесь
Здесь C++
Здесь C#