Здравствуйте, Evgeny.Panasyuk, Вы писали:
A>>У меня давно сложилось и продолжает укрепляться подозрение, что C++ ощутимо (хотя бы раза в два) быстрее C# только там, где повезёт и задачу можно векторизовать, и компилятор C++ сумеет при этом применить свою векторизовальную магию. А если не повезёт, то быстрее может и вообще не получиться.
EP>1. Возьми тест из обсуждаемой статьи и сделай нормальный интерфейс для сортировки (например как у std::sort) — позволяющий сортировать последовательности из разных типов контейнеров, с разными типами элементов, и с разными предикатами сравнения, задаваемыми например замыканиями. Для пущей уверенности выключи любую автовекторизацию при замерах.
Моё большое имхо: код, который оперирует разными универсальными обобщёнными абстракциями, ― это те 90%, от которых не требуется скорости. Он пишется так, чтобы было легко писать, читать и поддерживать, без оглядки на производительность. Если явно не тормозит, то и замечательно. По крайней мере, у меня дела обычно обстоят именно так.
Сравнивать скорость имеет смысл у того кода, который в самом деле её требует и который пишется с оглядкой на скорость, а не на удобство, и использует все доступные в языке средства оптимизации.
EP>3. Ещё такой примерАвтор: Evgeny.Panasyuk
Дата: 20.06.15
: высокоуровневый код C++ скомпилированный в JavaScript почти в два раза быстрее аналога на C# в своей родной среде.
EP>JavaScript, в веб-браузере, Карл!
Вот в
этом постеАвтор: greenpci
Дата: 05.06.15
я нашёл рядом два исходника на C++ и C#. У варианта С++ в настройках Optimization включил всё, что было на максимум. У варианта на C# сделал очевидную оптимизацию в коде (ценой в несколько миллисекунд), поменял
for (int i = 0; i < n; i++)
v[i] = v[i] * u[i];
на
for (int i = 0; i < v.Length; i++)
v[i] *= u[i];
Запустил оба варианта раз по десять, лучшие результаты такие:
C#
.NET Elapsed: 52,0000 ms
C++
Elapsed = 51.3899 ms
С++ победил!