Информация об изменениях

Сообщение Re[8]: Java vs C# vs C++ от 28.09.2015 21:25

Изменено 28.09.2015 21:26 alexzzzz

Здравствуйте, 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
Здравствуйте, 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