Я не совсем понимаю, что делает умножение матриц в C#/.NET (и даже в Java) таким медленным.
Посмотрите на этот тест (источник): Попытка найти обновленный тест.
Целочисленная и двойная производительность C# чертовски близка к C++, скомпилированному с помощью MSVC++. На 87 % быстрее для двойного числа и на 99 % быстрее для 32-битного целого числа. Чертовски хорошо, я бы сказал. Но тогда посмотрите на умножение матриц. Разрыв увеличивается до C# примерно на 19% быстрее. Это довольно большое несоответствие, которое я не понимаю. Умножение матриц — это просто набор простых математических операций. Как это становится так медленно? Разве это не должно быть примерно так же быстро, как эквивалентное количество простых операций с плавающей запятой или целочисленных операций?
Это особенно касается игр и XNA, где производительность матриц и векторов имеет решающее значение для таких вещей, как физические движки. Некоторое время назад в Mono была добавлена поддержка SIMD-инструкций с помощью изящных векторных и матричных классов. Он сокращает разрыв и делает Mono быстрее, чем написанный от руки C++, хотя и не так быстро, как C++ с SIMD. (источник)
Что тут происходит?
Редактировать: присмотревшись, я неправильно понял второй график. С# кажется довольно близким. Может, первый тест делает что-то ужасно неправильное? Извините, я пропустил номер версии в первом тесте. Я взял его как удобную ссылку на «линейную алгебру C# медленную», которую я всегда слышал. попробую найти другую.