Re[3]: Сравнение производительности C# и C++
От: infree  
Дата: 07.11.07 08:18
Оценка: +3 -1 :))) :)
MF>У .Net-а с этим оказывается намного хуже, чем у плюсового компилера, хотя MS активно внедряет мнение о том, что JIT лучше плюсов, так как может компилить под конкретную платформу и использовать ее особенности. Получается, что это просто маркетинг, не имеющий за собой реальных оснований.
получается просто пример, который "высосан из пальца". Для наиболее типичных задач текущей потребности рынка , дотнета и джавы хватает вполне и они справляются лучше, чем плюсы.
уже кучу раз обсуждали "плюсы vs остальное". Не надоело?
кому и что есть желание доказать?
найти себе аргументацию остаться на плюсах, и не переходить на джаву и дотнет?
"пока плюсовики из Виларибо распухают от осознания соственной важности, пытаются мериться пиписками с другими, пытаются изобретать заново "велосипед" на проекте, джависты/дотнетчики из Вилабаджио давно сдали текущие проекты и получили новые. Бизнес, однако. Скорость, удобство разработки, однако. И заказчик, однако, уйдет к ребятам из Вилабаджио."
П.С. мот устроишь холивар "асм вс. плюсы"? Асм ваще там порвет плюсы аки тузик грелку. Бросишь всё, уйдешь на асм?

П.П.С. джава/дотнет — это не столько какой-то там Java-язык, C#-язык, это — ПЛАТФОРМЫ. Вот, что ключевое. у плюсов просто нет вменяемой платформы. Вот такие дела.
Re[7]: Сравнение производительности C# и C++
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 07.11.07 12:56
Оценка: 2 (2) +2
Здравствуйте, MatFiz, Вы писали:

MF>Меня больше удручает знак этой разницы, а не ее абсолютная величина.


1. Производительность кода, который генерит JIT, на сегодня не является первоочередной задачей MS. Там где надо производительность, можно и на C++ код наваять. Другое дело объяснить недалеким программистам, что есть AV, bad pointer, ...

2. Производительность под конкретный процессор хороша в теории. Да, у меня дома стоит 64-битная Windows и ее преимущества можно было бы использовать. Но многие ли таких как я, которым нужны эти 64 бита? А на одной линейке новых ассемблерных команд не так уж и много... К тому же зачастую чтобы их можно было использовать, надо писать специальный код.

Рассмотрим конкретный пример. Вот ряд процессоров обладает такой замечательной ассемблерной командой, как определение номера первого бита, установленного в единицу. Возникает вопрос, какой код нужно написать, чтобы JIT-компилятор смог использовать эту команду? Такой команды нет в наборе инструкций CLI, поэтому логично предположить, что автор программы напишет аналогичную функцию, например следующий тривиальный вариант:

const int       lsz64_tbl[64] =
{
    0, 31,  4, 33, 60, 15, 12, 34,
   61, 25, 51, 10, 56, 20, 22, 35,
   62, 30,  3, 54, 52, 24, 42, 19,
   57, 29,  2, 44, 47, 28,  1, 36,
   63, 32, 59,  5,  6, 50, 55,  7,
   16, 53, 13, 41,  8, 43, 46, 17,
   26, 58, 49, 14, 11, 40,  9, 45,
   21, 48, 39, 23, 18, 38, 37, 27,
};

int  bitScan (const U64 bb)
{
   const U64 lsb = (bb & -(long long) bb) - 1;
   const unsigned int foldedLSB = ((int) lsb) ^ ((int) (lsb >> 32));
   return lsz64_tbl[foldedLSB * 0x78291ACF >> 26];
}


А теперь такой вопрос: какой мощи надо вшить оптимизатор в JIT, чтобы он догадался заменить любой вызов bitScan на ассемблерную инструкцию BSF?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Сравнение производительности C# и C++
От: l33thaxor  
Дата: 25.11.07 22:50
Оценка: -4
Здравствуйте, AndreyR7, Вы писали:

AR>Здравствуйте, l33thaxor, Вы писали:


L>> public unsafe static MatrixComplex operator *(MatrixComplex left, MatrixComplex right)

AR>Кажется увидел слово unsafe? Здравствуй обратно ручное управление памятью?

... и досвиданья. unsafe не имеет никакого отношения к ручному управлению памяти. Учись, пока молод.

Я видел тут у некоторых такую зелененькую подпись: "эксперт". Пора вводить новую, ярко красную мигающую: "студент".
Re[5]: Сравнение производительности C# и C++
От: machine3000  
Дата: 07.11.07 13:28
Оценка: +2 :)
Здравствуйте, MatFiz, Вы писали:

MF>Железобетонные доводы, что JIT в теории обходит по эффективности заранее скомпиленный код мне кажутся очевидными.

MF>И то, что это не так, меня очень смущает.

Оптимизация под процессор процентов 10, может, и даст. Только проверки выхода за границу массива, сборка мусора не даром ведь даются.
Вообще, отвратительно, что программисты становятся аудиторией для рекламы по продвижению каких-то виртуальных платформ. И их разводят, как домохозяек на стиральный порошок. И JIT, и managed код и более доступные широкой аудитории языки программирования — всё это нужно. Только производители думают не о том, как просто дать людям всё это. Они думают, как это упаковать, чтобы впарить где надо и где не надо. Чтобы связавшись с этим никто уже не мог свернуть в сторону. Чтобы никто не мог предложить пользователям альтернативу отдельным компонентам платформы. Производители не хотят конкуренции. Им хочется подсадить как можно больше народу на свои решения. А потом только стричь купоны.
Re[6]: Сравнение производительности C# и C++
От: AndreyR7 Великобритания  
Дата: 17.11.07 18:49
Оценка: +3
Здравствуйте, int13h, Вы писали:

I>Разница межда асмом и плюсами не такая уж большая

I>А в сишном примере сделайте проверки на выход за граници массива — тогда и посмотрим
Хехе. А зачем?
Попробуйте в шарповом примере отключите эти проверки
Re[5]: Сравнение производительности C# и C++
От: AndreyR7 Великобритания  
Дата: 26.11.07 06:56
Оценка: +3
Здравствуйте, l33thaxor, Вы писали:

AR>>Кажется увидел слово unsafe? Здравствуй обратно ручное управление памятью?

L>... и досвиданья. unsafe не имеет никакого отношения к ручному управлению памяти. Учись, пока молод.
Ну здрасьте, приехали. А значит арифметика указателей — это не ручное управление памятью? Или в управление памятью входит только операции new/delete(GC)? Или ошибки в плюсовых программах типа "BlahBlah. Memory can't be read" — это наверное неправильное использование оператора new?

Я имел в виду широкое понятие, не только выделение/освобождение, но и работа с памятью. И слово unsafe как раз об этом.

L>Я видел тут у некоторых такую зелененькую подпись: "эксперт". Пора вводить новую, ярко красную мигающую: "студент".

Ага. И синюю жирную "умник". Уважаемый l33thaxor, оставьте свое мнение при себе.
Re: Сравнение производительности C# и C++
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 06.11.07 11:38
Оценка: 3 (2)
Здравствуйте, AndreyR7, Вы писали:

AR>Код на C++ работал в 9 (!) раз быстрее чем аналогичный на шарпе.


Мне достаточно было посмотреть на ассемблерный код, который генерирует JIT, и все сразу стало понятно и без тестов. Смотреть Оптимизация в .NET]тут[/url].

Если тестировать каждый отдельный компонент, то результаты тестирования сравнимы. Ибо никто же не будет тестировать inline метод с обычным вызовом? Но когда все в начинает работать в комплексе, то...

Кстати, пресловутых преимуществ работы на другой архитектуре я не заметил Новые команды почти не используются (ибо это зачастую либо экзотика, либо надо изначально писать код под эти команды). Более того, смотрел на то, что генерирует .NET для 64 бит. Получаем:

1. По стандарту вызова метода, параметры передаются в регистрах.
2. JIT компилятор упорно размещает переменные производные от class в стеке (может это надо для сборки мусора или еще чего, не знаю).
Поэтому, при вызове метода происходило следующее
1. Аргументы копировались в регистры
2. Вызов функции
3. Инициализация cтека внутри функции
4. Копирование аргументов из регистров в стек
5. Выполнение кода функции
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: Сравнение производительности C# и C++
От: MatFiz Россия  
Дата: 07.11.07 07:01
Оценка: 2 (2)
Здравствуйте, andrey.desman, Вы писали:

AD>Сделайте нормальную оптимизацию и там, и там. Алгоритмическую, то бишь.

AD>Тут дело в том, что вторая матрица обходится полностью, для вычисления каждой строки результирующей матрицы. Причем обход производится не в последовательном режиме.
AD>А вот вы возьмите и транспонируйте правую матрицу, пока вычисляется первая строка результата. А потом транспонируйте обратно, когда будете вычислять последнюю строку. Разница с первоначальным вариантом будет ой-ой-ой Тогда можно будет смотреть кто кого и во сколько раз уел.

На самом деле, идея в том, что я хочу просто описать алгоритм наиболее чистым способом, а оптимизатор должен сделать свое дело и сгенерировать максимально быстрый код, выкинув лишние проверки, развернув циклы, заинлайнив код и т.п.
У .Net-а с этим оказывается намного хуже, чем у плюсового компилера, хотя MS активно внедряет мнение о том, что JIT лучше плюсов, так как может компилить под конкретную платформу и использовать ее особенности. Получается, что это просто маркетинг, не имеющий за собой реальных оснований.
How are YOU doin'?
Re[4]: Сравнение производительности C# и C++
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 07.11.07 12:36
Оценка: 2 (2)
Здравствуйте, infree, Вы писали:

I>П.С. мот устроишь холивар "асм вс. плюсы"? Асм ваще там порвет плюсы аки тузик грелку. Бросишь всё, уйдешь на асм?


Попробуй порви. Только предварительно надо будет выучить количество тактов в командах, следить за выравниваем циклов (чтобы увеличить число TBL попаданий), самому решать задачу распределения регистров и т. д. Другими словами выполнять кучу рутинных операций, с которыми компьютер справляется куда лучше.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Сравнение производительности C# и C++
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 01.12.07 13:48
Оценка: 1 (1) +1
Здравствуйте, MatFiz, Вы писали:

MF>Здравствуйте, l33thaxor, Вы писали:


L>>Вот такой код MatrixComplex класса на C# уделывает первоначальный код на C++ на 25% (1.36s (C#) vs 1.75s (C++)):


MF>Может и уделывает, но согласись, это не C# уже в том виде, в котором его хочется видеть

А вам хочется чтобы и красиво, и быстро, и GC работал? Спуститесь на землю, такого не бывает.

Всетаки на C# можно писать отличающиеся по скорости на проценты (а не на порядки) от С++. Для C# это отличный результат
Re[3]: Сравнение производительности C# и C++
От: fmiracle  
Дата: 25.11.07 18:55
Оценка: +2
Здравствуйте, MatFiz, Вы писали:

MF>Меня лично интересовало именно то, насколько много я проиграю в скорости работы приложения, если буду следить исключительно за читабельностью и поддерживаемостью кода, забив на тупые оптимизации.

MF>Выводы ужасны.

В выводах учитывается скорость разработки и отладки приложения, цена работы программиста и цена нового компьютера?

Я к тому,ч то в реально жизни никого не интересует быстродействие программы. Интересует решение проблемы. И надо думать именно об этом в первую очередь. И соответственно задаче (а не рекламе!) выбирать инструмент. Где-то тебе подойдет С++ и только С++. По каким-то причинам.

А где-то окажется, что интерес представляет:
1. решение сложной задачи — несколько человеко-лет
2. постоянная поддержка этого решения, добавление новых возможностей
3. стоимость закупки железа.

вот важно, что ВСЕ эти пункты имеют прямое выражение в деньгах.
И зачастую экономия на пунктах 1 и 2 с лихвой окупит более крупные затраты на пункт 3.

Но не всегда конечно же — бывают совершенно разные задачи. Если ты пишешь код для мобильника, то "железо" тебе дано свыше и никуда от него не деться.

А микротесты — они показывают только отдельные кадры и по большому счету ничего не значат...
Re[2]: Сравнение производительности C# и C++
От: AndreyR7 Великобритания  
Дата: 06.11.07 14:24
Оценка: 1 (1)
Здравствуйте, WolfHound, Вы писали:

WH>1)Вариант на С++ написан не верно.

Неверно математически?

WH>2)Вариант на С++ отдельно оптимизировали.

Да, выносил переменную за циклы и заменял + на +=. Дало немного. Правда я удивился, что что-то все-таки дало.

WH>3)Многомерные массивы в .NET тормозят. Нужно использовать одномарные.

Все массивы в .Net тормозят Некоторые больше, некоторые меньше.

WH>4)Используются разные генераторы псевдослучайных чисел.

Не имеет значения — время генерации не учитывается раз; замеры проводили на матрица заполненной 1+1i

WH>5)Нет полного вывода результатов.

Также не имеет значения.
Re[3]: Сравнение производительности C# и C++
От: WolfHound  
Дата: 06.11.07 15:11
Оценка: 1 (1)
Здравствуйте, MatFiz, Вы писали:

WH>>1)Вариант на С++ написан не верно.

MF>В чем ошибка?
Вторую матрицу кто использовать будет?

WH>>2)Вариант на С++ отдельно оптимизировали.

MF>Я в Шарповом коде убрал оптимизацию, потому что она элементарна и JIT должен делать ее сам.
А почему она есть в С++ном?

WH>>4)Используются разные генераторы псевдослучайных чисел.

MF>Замеряется скорость перемножения, скорость заполнения матриц числами не учитывается.
WH>>5)Нет полного вывода результатов.
MF>Вывод результатов на скорость перемножения не влияет.
Без этого нельзя проверить корректность теста.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[9]: Сравнение производительности C# и C++
От: Mystic Украина http://mystic2000.newmail.ru
Дата: 07.11.07 16:01
Оценка: 1 (1)
Здравствуйте, MatFiz, Вы писали:

MF>Здравствуйте, Mystic, Вы писали:


M>>А теперь такой вопрос: какой мощи надо вшить оптимизатор в JIT, чтобы он догадался заменить любой вызов bitScan на ассемблерную инструкцию BSF?


MF>Такие извращения рассматривать нет смысла. Думаю, такие команды никто и не добавляет, так как от них толку нет.


Почему нет толку? Тут (англ) есть целая ветка на эту тему, так как при программировании шахмат (да и вообще многих логических игр) это становится очень даже критично. А вообще битовый AND это распараллеливание логического AND (считай 32/64 одновременных логических AND-ов). Поэтому представление некоего объекта в виде битовых масок и последующую работа с ним дает большой прирост производительсноти. И тут операция получения первого бита становится полезной. Например

Есть битовая маска белых пешек (64-битное целое число).
1. Делаем AND с битовой маской всех полей, кроме вертикали A
2. Сдвигаем на семь
3. Делаем AND с битовой маской всех черных фигур
Итого у нас есть битовая всех взятий влево белыми пешками. Осталось только в цикле перебрать все установленые в единицу биты. Тут и оказываются полезными те команды, о которых я писал.

В общем это обобщается и на другие сферы...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Сравнение производительности C# и C++
От: BulatZiganshin  
Дата: 08.11.07 20:40
Оценка: 1 (1)
Здравствуйте, MatFiz, Вы писали:

MF>Железобетонные доводы, что JIT в теории обходит по эффективности заранее скомпиленный код мне кажутся очевидными.

MF>И то, что это не так, меня очень смущает.

1) посмотри на скорость компиляции C++ компилятора и его расход памяти. у JIT есть возможность столько же ресурсов использовать?
2) разный уровень языков, разные модели памяти

реклама подчёркивает только одно достоинство JIT, умалчивая о многих недостатках. кстати, cpu-specific код для сишных программ может генерить, например, gentoo при инсталляции из исходников
Люди, я люблю вас! Будьте бдительны!!!
Re: Сравнение производительности C# и C++
От: xStream  
Дата: 13.11.07 17:11
Оценка: 1 (1)
Здравствуйте, AndreyR7, Вы писали:

AR>Недавно с коллегой поспорили на тему производительности в математических вычислениях.


А это вас не устраивает?

http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;lang=all
http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;lang=gpp&amp;lang2=csharp
Re[4]: Сравнение производительности C# и C++
От: AndrewJD США  
Дата: 23.11.07 13:41
Оценка: 1 (1)
Здравствуйте, andrey.desman, Вы писали:

AD>То, что C++ работает быстрее — факт. То, что на C# быстрее разрабатывается — тоже факт, однако. Нужно просто найти баланс и усе


Дык, в том-то и был вопрос топика — где этот баланс начинается. Вот и люди начали мерять для себя где граница.
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[2]: Сравнение производительности C# и C++
От: l33thaxor  
Дата: 25.11.07 05:42
Оценка: 1 (1)
Здравствуйте, andrey.desman, Вы писали:

AD>Здравствуйте, AndreyR7, Вы писали:


AR>>Коллеги, присоединяйтесь


AR>>Здесь C++

AR>>Здесь C#

AD>Сделайте нормальную оптимизацию и там, и там. Алгоритмическую, то бишь.

AD>Тут дело в том, что вторая матрица обходится полностью, для вычисления каждой строки результирующей матрицы. Причем обход производится не в последовательном режиме.
AD>А вот вы возьмите и транспонируйте правую матрицу, пока вычисляется первая строка результата. А потом транспонируйте обратно, когда будете вычислять последнюю строку. Разница с первоначальным вариантом будет ой-ой-ой Тогда можно будет смотреть кто кого и во сколько раз уел.

Вот такой код MatrixComplex класса на C# уделывает первоначальный код на C++ на 25% (1.36s (C#) vs 1.75s (C++)):
    public class MatrixComplex
    {
        private int _width;
        private int _height;

        readonly Complex[] _values;

        public int Width { get { return _width; } }
        public int Height { get { return _height; } }

        public Complex this[int x, int y]
        {
            get { return _values[y * _width + x]; }
            set { _values[y * _width + x] = value; }
        }

        public MatrixComplex(int width, int height)
        {
            _width = width;
            _height = height;
            _values = new Complex[width * height];
        }

        public unsafe static MatrixComplex operator *(MatrixComplex left, MatrixComplex right)
        {
            int leftWidth = left._width;
            int leftHeight = left._height;
            int rightWidth = right._width;
            int rightHeight = right._height;

            Require.IsTrue(left._width == right._height);

            MatrixComplex rightDash = new MatrixComplex(rightHeight, rightWidth);
            for (int x = 0; x < rightWidth; x++)
                for (int y = 0; y < rightHeight; y++)
                    rightDash._values[y + x * rightHeight] = right._values[x + rightWidth * y];

            MatrixComplex result = new MatrixComplex(rightWidth, leftHeight);

            fixed (Complex * leftV = left._values)
                fixed (Complex * rightV = rightDash._values)
                {
                    for (int y = 0; y < leftHeight; y++)
                    {
                        Complex * leftVV = leftV + y * leftWidth;
                        int firstResInd = y * rightWidth;

                        for (int x = 0; x < rightWidth; x++)
                        {
                            Complex res = new Complex();
                            Complex * rightVV = rightV + x * rightHeight;

                            for (int n = 0; n < leftWidth; n++)
                            {
                                Complex * c1 = leftVV + n;
                                Complex * c2 = rightVV + n;

                                res.R += c1->R * c2->R - c1->I * c2->I;
                                res.I += c1->R * c2->I + c1->I * c2->R;
                            }

                            result._values[firstResInd + x] = res;
                        }
                    }
                }

            return result;
        }
    }
Re: Сравнение производительности C# и C++
От: WolfHound  
Дата: 06.11.07 14:08
Оценка: -1
Здравствуйте, AndreyR7, Вы писали:

    inline void multiply(const matrix<T, N>& second, matrix<T, N>& result) const
    {
        T value;
        T temp;
        for(int i = 0; i < N; ++i)
        {
            for(int j = 0; j < N; ++j)
            {
                value = T();
                for(int k = 0; k < N; ++k)
                {
                    temp = at(i, k);
                    temp *= at(k, j);
                    value += temp;
                }
                result.at(i, j) = value;
            }
        }
    }


        public static MatrixDouble operator *(MatrixDouble left, MatrixDouble right)
        {
            Require.IsTrue(left.Width == right.Height);

            MatrixDouble result = new MatrixDouble(right.Width, left.Height);

            for (int x = 0; x < result.Width; x++)
                for (int y = 0; y < result.Height; y++)
                    for (int n = 0; n < left.Width; n++)
                        result[x, y] += left[n, y] * right[x, n];

            return result;
        }


1)Вариант на С++ написан не верно.
2)Вариант на С++ отдельно оптимизировали.
3)Многомерные массивы в .NET тормозят. Нужно использовать одномарные.
4)Используются разные генераторы псевдослучайных чисел.
5)Нет полного вывода результатов.

Короче сначала исправьте тесты, а потом можно будет вернутся к разговору.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[9]: Сравнение производительности C# и C++
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.11.07 16:34
Оценка: +1
Здравствуйте, MatFiz, Вы писали:

MF>Здравствуйте, Mystic, Вы писали:


M>>А теперь такой вопрос: какой мощи надо вшить оптимизатор в JIT, чтобы он догадался заменить любой вызов bitScan на ассемблерную инструкцию BSF?


MF>Такие извращения рассматривать нет смысла. Думаю, такие команды никто и не добавляет, так как от них толку нет.

Многие команды никто не добавляет потому что нет эквивалентов для языков выского уровня. Вы знаете хоть один языка высокого уровня, который непосредственно работает с битами числа и флагами процессора?

MF>Добавляют более полезные команды, например, позволяющие сложить или перемножить не два числа, а сразу 4 пары чисел — и тут JIT должен разбираться слёту, что к чему, разворачивать цикл, перекраивать арифметические выражения и использовать эту новую векторную команду процессора.


Это только если все методы заинлайнятся. А это покачто фантастика.
Re[4]: Сравнение производительности C# и C++
От: Roman Odaisky Украина  
Дата: 09.11.07 18:29
Оценка: :)
Здравствуйте, gandjustas, Вы писали:

G>С чего это? Ты считаешь что JIT оптимизирует лучше C++ комилятора? Как он это вообще может делать?


Теоретически он может профилировать программу по мере выполнения, и на ходу менять параметры всякие. Что-то вроде зам. процессорного предсказателя ветвлений, только у него больше информации. Можно на ходу инлайнить самые интересные куски кода и т. п.
До последнего не верил в пирамиду Лебедева.
Re[2]: Сравнение производительности C# и C++
От: MatFiz Россия  
Дата: 13.11.07 21:00
Оценка: +1
Здравствуйте, xStream, Вы писали:

S>Здравствуйте, AndreyR7, Вы писали:


AR>>Недавно с коллегой поспорили на тему производительности в математических вычислениях.


S>А это вас не устраивает?


S>http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;lang=all

S>http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;lang=gpp&amp;lang2=csharp

Интересный ссылко, спасибо.
Но ЭТО не устраивает, так как хотелось увидеть именно способности JIT-а к оптимизации.
Как видно, выполнив определенную тупую работу по ручной оптимизации кода, можно заставить .Net отставать от плюсов не слишком сильно.
Меня лично интересовало именно то, насколько много я проиграю в скорости работы приложения, если буду следить исключительно за читабельностью и поддерживаемостью кода, забив на тупые оптимизации.
Выводы ужасны.
How are YOU doin'?
Re[4]: Сравнение производительности C# и C++
От: COFF  
Дата: 15.11.07 16:55
Оценка: +1
Здравствуйте, McSeem2, Вы писали:

MS>>>Во-вторых, использовать одномерную адресацию в обоих случаях, даже не через функцию at(), а напрямую, типа array[width*i+j].

AR>>Моя функция at разворачивается именно в то, что ты написал (т.к. она inline), а вот наглядность увеличивает. Так что смысла нет.

MS>Похоже, что ты не хочешь прочитать смысл. Смысл в том, чтобы уровнять условия — на C++ прямая адресация и на С# прямая адресация. Ну и конечно же, рекомендация об идентичном генераторе псевдо-случайных чисел и строгой верификации результатов пропущена мимо ушей.


Не, все правильно, условия уравниваются так — на C++ метод at и на C# метод at. То что на C++ этот метод заинлайнится является его преимуществом. У меня, например, как раз за счет инлайнов release версия часто работает на порядок быстрее debug. Без потери читаемости кода. К тому же в исходных условиях автор явно был против написания одной большой функции.
Re[6]: Сравнение производительности C# и C++
От: l33thaxor  
Дата: 26.11.07 08:16
Оценка: -1
Здравствуйте, AndreyR7, Вы писали:

AR>Здравствуйте, l33thaxor, Вы писали:


AR>>>Кажется увидел слово unsafe? Здравствуй обратно ручное управление памятью?

L>>... и досвиданья. unsafe не имеет никакого отношения к ручному управлению памяти. Учись, пока молод.
AR>Ну здрасьте, приехали. А значит арифметика указателей — это не ручное управление памятью? Или в управление памятью входит только операции new/delete(GC)? Или ошибки в плюсовых программах типа "BlahBlah. Memory can't be read" — это наверное неправильное использование оператора new?

Не смешивай все в одну кучу. А то получится балаган, как с твоим бестолковым бенчмарком.

AR>Я имел в виду широкое понятие, не только выделение/освобождение, но и работа с памятью. И слово unsafe как раз об этом.


Люблю дискуссии на rsdn. Как только кто-нибудь пропирается, начинаются попытки подменить понятия. Ну, да ладно, по доброте души пошлю тебя на wikipedia:

Memory management is the act of managing computer memory. In its simpler forms, this involves providing ways to allocate portions of memory to programs at their request, and freeing it for reuse when no longer needed.


А то, что в моем коде происходит, называется pointer arithmetics. Это тебе на будущее, чтоб знал.

L>>Я видел тут у некоторых такую зелененькую подпись: "эксперт". Пора вводить новую, ярко красную мигающую: "студент".

AR>Ага. И синюю жирную "умник". Уважаемый l33thaxor, оставьте свое мнение при себе.

Иногда приходится учить студентов. Ничего не поделаешь.
Сравнение производительности C# и C++
От: AndreyR7 Великобритания  
Дата: 06.11.07 11:19
Оценка:
Недавно с коллегой поспорили на тему производительности в математических вычислениях. Задачка была довольно простая — перемножить 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#
Re: Сравнение производительности C# и C++
От: sndanil Россия  
Дата: 06.11.07 12:44
Оценка:
Здравствуйте, AndreyR7, Вы писали:

C++ 83 секунды
C# 47 секунд

ЗЫ: вы че это в 2008 студии создавали?
Re[2]: Сравнение производительности C# и C++
От: MatFiz Россия  
Дата: 06.11.07 12:53
Оценка:
Здравствуйте, sndanil, Вы писали:

S>Здравствуйте, AndreyR7, Вы писали:


S>C++ 83 секунды

S>C# 47 секунд

S>ЗЫ: вы че это в 2008 студии создавали?


Да, в 2008.

Переключись на Release
How are YOU doin'?
Re[2]: Сравнение производительности C# и C++
От: MatFiz Россия  
Дата: 06.11.07 14:16
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>1)Вариант на С++ написан не верно.


В чем ошибка?

WH>2)Вариант на С++ отдельно оптимизировали.


Я в Шарповом коде убрал оптимизацию, потому что она элементарна и JIT должен делать ее сам.

WH>3)Многомерные массивы в .NET тормозят. Нужно использовать одномарные.


Ты путаешь [][] с [,]. Первый вариант работает быстрее, он и использован.

WH>4)Используются разные генераторы псевдослучайных чисел.


Замеряется скорость перемножения, скорость заполнения матриц числами не учитывается.

WH>5)Нет полного вывода результатов.


Вывод результатов на скорость перемножения не влияет.
How are YOU doin'?
Re[3]: Сравнение производительности C# и C++
От: Cyberax Марс  
Дата: 06.11.07 14:22
Оценка:
MatFiz wrote:
> WH>3)Многомерные массивы в .NET тормозят. Нужно использовать одномарные.
> Ты путаешь [][] с [,]. Первый вариант работает быстрее, он и использован.
В .NET нет настоящих многомерных массивов — поэтому формат обращения,
AFAIR, никакой роли не играет.
Posted via RSDN NNTP Server 2.1 beta
Sapienti sat!
Re[4]: Сравнение производительности C# и C++
От: AndreyR7 Великобритания  
Дата: 06.11.07 14:31
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>В .NET нет настоящих многомерных массивов — поэтому формат обращения,

C>AFAIR, никакой роли не играет.

Ошибаешся, в .net в отличии от плюсов есть настоящие многомерные массивы. Это про [,]. Именно они и тормозят т.к. для них нет специальных инструкций msil (для одномерных есть) и приходится вызывать статический метод класса Array (В деталях могу ошибаться)
[][] — это псевдомногомерные массивы или jagged arrays. Они не должны тормозить так сильно как истинно многомерные.
Re[5]: Сравнение производительности C# и C++
От: Cyberax Марс  
Дата: 06.11.07 14:44
Оценка:
AndreyR7 wrote:
> Ошибаешся, в .net в отличии от плюсов есть настоящие многомерные
> массивы. Это про [,]. Именно они и тормозят т.к. для них нет специальных
> инструкций msil (для одномерных есть) и приходится вызывать статический
> метод класса Array (В деталях могу ошибаться)
Т.е. оно реально в виде одного блока в памяти сидит, а не просто
засахареные jagged arrays?

> [][] — это псевдомногомерные массивы или jagged arrays. Они не должны

> тормозить так сильно как истинно многомерные.
По идее, как раз настоящие многомерные массивы должны работать быстрее
(так как мы убираем лишнюю косвенность). В Фортране, например, это
именно так и есть.
Posted via RSDN NNTP Server 2.1 beta
Sapienti sat!
Re[3]: Сравнение производительности C# и C++
От: WolfHound  
Дата: 06.11.07 15:11
Оценка:
Здравствуйте, AndreyR7, Вы писали:

WH>>1)Вариант на С++ написан не верно.

AR>Неверно математически?
Ага.

AR>Все массивы в .Net тормозят Некоторые больше, некоторые меньше.

Если их готовить правильно нет.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: Сравнение производительности C# и C++
От: WolfHound  
Дата: 06.11.07 15:13
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>По идее, как раз настоящие многомерные массивы должны работать быстрее (так как мы убираем лишнюю косвенность). В Фортране, например, это именно так и есть.

А в .NET они тормозят. Ибо мелкомягкие не осилили их оптимизировать.
... << RSDN@Home 1.2.0 alpha rev. 745>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[4]: Сравнение производительности C# и C++
От: AndreyR7 Великобритания  
Дата: 06.11.07 16:57
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>>>1)Вариант на С++ написан не верно.

MF>>В чем ошибка?
WH>Вторую матрицу кто использовать будет?
Сорри
Поправил — на время заметно не повлияло
Re: Сравнение производительности C# и C++
От: minorlogic Украина  
Дата: 06.11.07 17:49
Оценка:
Ну что вы ! тут на РСДН , столько людей говорят что шарп не медленее С++ разве что на 20% ....
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[2]: Сравнение производительности C# и C++
От: AndreyR7 Великобритания  
Дата: 06.11.07 19:27
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>Ну что вы ! тут на РСДН , столько людей говорят что шарп не медленее С++ разве что на 20% ....


Милости просим
Доведи предложенный шарповый код до 120% времени плюсового кода
Re: Сравнение производительности C# и C++
От: McSeem2 США http://www.antigrain.com
Дата: 07.11.07 00:33
Оценка:
Здравствуйте, AndreyR7, Вы писали:

AR>Коллеги, присоединяйтесь

AR>Здесь C++
AR>Здесь C#

Во-первых, предлагаю использовать идентичные генераторы, хотя-бы вот на основе простейшей ротации:
// random_seed - 32 bit unsigned integer
return (random_seed = random_seed * 214013 + 2531011) / 65536;

Качество чисел в данном случае не так важно. Главное — верифицировать результаты на идентичность, чтобы исключить даже малейшую возможность ошибки.

Во-вторых, использовать одномерную адресацию в обоих случаях, даже не через функцию at(), а напрямую, типа array[width*i+j].

У меня сейчас нет ни C#, ни VS-2005, поэтому сам не берусь.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re: Сравнение производительности C# и C++
От: andrey.desman  
Дата: 07.11.07 01:12
Оценка:
Здравствуйте, AndreyR7, Вы писали:

AR>Коллеги, присоединяйтесь


AR>Здесь C++

AR>Здесь C#

Сделайте нормальную оптимизацию и там, и там. Алгоритмическую, то бишь.
Тут дело в том, что вторая матрица обходится полностью, для вычисления каждой строки результирующей матрицы. Причем обход производится не в последовательном режиме.
А вот вы возьмите и транспонируйте правую матрицу, пока вычисляется первая строка результата. А потом транспонируйте обратно, когда будете вычислять последнюю строку. Разница с первоначальным вариантом будет ой-ой-ой Тогда можно будет смотреть кто кого и во сколько раз уел.
Re[4]: Сравнение производительности C# и C++
От: MatFiz Россия  
Дата: 07.11.07 09:01
Оценка:
Здравствуйте, infree, Вы писали:

Ты все понял неправильно.
Я хочу забыть про плюсы навсегда и всё, включая алгоритмы, критичные по скорости, писать на управляемом коде.
За этим и затеяли этот эксперимент. Результат видишь сам.
How are YOU doin'?
Re[2]: Сравнение производительности C# и C++
От: AndreyR7 Великобритания  
Дата: 07.11.07 09:14
Оценка:
Здравствуйте, McSeem2, Вы писали:

MS>Во-вторых, использовать одномерную адресацию в обоих случаях, даже не через функцию at(), а напрямую, типа array[width*i+j].

Моя функция at разворачивается именно в то, что ты написал (т.к. она inline), а вот наглядность увеличивает. Так что смысла нет.
Re[2]: Сравнение производительности C# и C++
От: AndreyR7 Великобритания  
Дата: 07.11.07 09:17
Оценка:
Здравствуйте, andrey.desman, Вы писали:

AD>Сделайте нормальную оптимизацию и там, и там. Алгоритмическую, то бишь.

AD>Тут дело в том, что вторая матрица обходится полностью, для вычисления каждой строки результирующей матрицы. Причем обход производится не в последовательном режиме.
AD>А вот вы возьмите и транспонируйте правую матрицу, пока вычисляется первая строка результата. А потом транспонируйте обратно, когда будете вычислять последнюю строку. Разница с первоначальным вариантом будет ой-ой-ой Тогда можно будет смотреть кто кого и во сколько раз уел.

Да, забыл сказать. Одним из условий было не оптимизировать алгоритм, т.е. оставить его предельно простым, без хитростей.
Re[4]: Сравнение производительности C# и C++
От: AndreyR7 Великобритания  
Дата: 07.11.07 09:21
Оценка:
Здравствуйте, infree, Вы писали:


I> получается просто пример, который "высосан из пальца". Для наиболее типичных задач текущей потребности рынка , дотнета и джавы хватает вполне и они справляются лучше, чем плюсы.

Никто не спорит, сам бы не взялся корпоративное приложение на плюсах делать

I>П.С. мот устроишь холивар "асм вс. плюсы"? Асм ваще там порвет плюсы аки тузик грелку. Бросишь всё, уйдешь на асм?

Ну кстати с асмом спорный вопрос, я склонен думать что плюсовый компилятор оттачивался годами и все-таки достаточно хорош.

С другой стороны может получиться что разница между асмом и плюсами будет похожа на разницу между плюсами и шарпом. Зато время разработки можно выстроить как 100-10-1
Re[3]: Сравнение производительности C# и C++
От: minorlogic Украина  
Дата: 07.11.07 09:25
Оценка:
Здравствуйте, MatFiz, Вы писали:

MF>На самом деле, идея в том, что я хочу просто описать алгоритм наиболее чистым способом, а оптимизатор должен сделать свое дело и сгенерировать максимально быстрый код, выкинув лишние проверки, развернув циклы, заинлайнив код и т.п.

MF>У .Net-а с этим оказывается намного хуже, чем у плюсового компилера, хотя MS активно внедряет мнение о том, что JIT лучше плюсов, так как может компилить под конкретную платформу и использовать ее особенности. Получается, что это просто маркетинг, не имеющий за собой реальных оснований.

Собственно вопрос, а у тебя были основания думать иначе?
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[4]: Сравнение производительности C# и C++
От: minorlogic Украина  
Дата: 07.11.07 09:28
Оценка:
Здравствуйте, infree, Вы писали:

MF>>У .Net-а с этим оказывается намного хуже, чем у плюсового компилера, хотя MS активно внедряет мнение о том, что JIT лучше плюсов, так как может компилить под конкретную платформу и использовать ее особенности. Получается, что это просто маркетинг, не имеющий за собой реальных оснований.

I> получается просто пример, который "высосан из пальца". Для наиболее типичных задач текущей потребности рынка , дотнета и джавы хватает вполне и они справляются лучше, чем плюсы.

Тут дело не в применимости C#/Java а о заведомом обмане со стороны неких деятелей.
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[4]: Сравнение производительности C# и C++
От: MatFiz Россия  
Дата: 07.11.07 10:30
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>Собственно вопрос, а у тебя были основания думать иначе?


Конечно!
Железобетонные доводы, что JIT в теории обходит по эффективности заранее скомпиленный код мне кажутся очевидными.
И то, что это не так, меня очень смущает.
How are YOU doin'?
Re[2]: Сравнение производительности C# и C++
От: AndrewJD США  
Дата: 07.11.07 10:47
Оценка:
Здравствуйте, andrey.desman, Вы писали:

AD>Сделайте нормальную оптимизацию и там, и там. Алгоритмическую, то бишь.

Зачем? Задача ведь состоит не в написании самого быстрого алгоритма умножения, а сравнении производительности при одинаковой алгоритмической сложности.

AD>Разница с первоначальным вариантом будет ой-ой-ой Тогда можно будет смотреть кто кого и во сколько раз уел.

Т.е. увеличится погрешность ихзмерений
"For every complex problem, there is a solution that is simple, neat,
and wrong."
Re[5]: Сравнение производительности C# и C++
От: Jack128  
Дата: 07.11.07 12:13
Оценка:
Здравствуйте, MatFiz, Вы писали:

MF>Здравствуйте, minorlogic, Вы писали:


M>>Собственно вопрос, а у тебя были основания думать иначе?


MF>Конечно!

MF>Железобетонные доводы, что JIT в теории обходит по эффективности заранее скомпиленный код мне кажутся очевидными.
MF>И то, что это не так, меня очень смущает.

Понимаешь, на практике разница между теорией и практикой гараздо больше, чем в теории
Re[6]: Сравнение производительности C# и C++
От: MatFiz Россия  
Дата: 07.11.07 12:20
Оценка:
Здравствуйте, Jack128, Вы писали:

J>Понимаешь, на практике разница между теорией и практикой гараздо больше, чем в теории


Меня больше удручает знак этой разницы, а не ее абсолютная величина.
How are YOU doin'?
Re: Сравнение производительности C# и C++
От: Ватакуси Россия  
Дата: 07.11.07 15:43
Оценка:
подсказка.

используй unsafe + fixed + указатель на массив. Скорость возрастет на порядок.
Все будет Украина!
Re[8]: Сравнение производительности C# и C++
От: MatFiz Россия  
Дата: 07.11.07 15:44
Оценка:
Здравствуйте, Mystic, Вы писали:

M>А теперь такой вопрос: какой мощи надо вшить оптимизатор в JIT, чтобы он догадался заменить любой вызов bitScan на ассемблерную инструкцию BSF?


Такие извращения рассматривать нет смысла. Думаю, такие команды никто и не добавляет, так как от них толку нет.
Добавляют более полезные команды, например, позволяющие сложить или перемножить не два числа, а сразу 4 пары чисел — и тут JIT должен разбираться слёту, что к чему, разворачивать цикл, перекраивать арифметические выражения и использовать эту новую векторную команду процессора.
How are YOU doin'?
Re[3]: Сравнение производительности C# и C++
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.11.07 15:52
Оценка:
Здравствуйте, MatFiz, Вы писали:

MF>Я в Шарповом коде убрал оптимизацию, потому что она элементарна и JIT должен делать ее сам.

С чего это? Ты считаешь что JIT оптимизирует лучше C++ комилятора? Как он это вообще может делать?

Вся оптимизация под специфичный процессор будет заключаться в применениии команд, которые лучше "спариваются" с другими. Такие оптимизации в лучшем случае дадут несколько процентов прироста быстродействия.

Любой код на managed языке в 99% случаев будет работать медленнее скопилированного unmanaged кода.

В свое время меня очень веселили статьи, где рассказывалось что программа на Java быстрее программы на C++. Как оказывалось в программе на С++ по значению передавались большие объекты, поэтому и тормозило (а все выглядело также, как на Java)
Re[2]: Сравнение производительности C# и C++
От: AndreyR7 Великобритания  
Дата: 08.11.07 17:09
Оценка:
Здравствуйте, Ватакуси, Вы писали:

В>используй unsafe + fixed + указатель на массив. Скорость возрастет на порядок.

Поздно, пиво уже выйграно
Кстати, в условиях было не использовать unsafe и interop. Задача была именно сравнить стандартные механизмы.
Re: Сравнение производительности C# и C++
От: bot1984  
Дата: 09.11.07 10:34
Оценка:
Ничего удивительного нету в ваших результатах.
Удивительно то, что куча людей не согласны с тем что С# не может конкурировать по скорости с С++, у него совсем другие цели...
Я бот!
Re[5]: Сравнение производительности C# и C++
От: Cyberax Марс  
Дата: 09.11.07 18:36
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

G>>С чего это? Ты считаешь что JIT оптимизирует лучше C++ комилятора? Как он это вообще может делать?

RO>Теоретически он может профилировать программу по мере выполнения, и на ходу менять параметры всякие. Что-то вроде зам. процессорного предсказателя ветвлений, только у него больше информации. Можно на ходу инлайнить самые интересные куски кода и т. п.
Практически именно так делает HotSpot-компилятор в Java — виртуальные методы вполне себе инлайнит. На некоторых микротестах благодаря этому даже С++ обходит.
Sapienti sat!
Re[2]: Сравнение производительности C# и C++
От: MatFiz Россия  
Дата: 09.11.07 20:52
Оценка:
Здравствуйте, bot1984, Вы писали:

B>Ничего удивительного нету в ваших результатах.

B>Удивительно то, что куча людей не согласны с тем что С# не может конкурировать по скорости с С++, у него совсем другие цели...

Цели-то другие, конечно, но дело не в языке C#, а в JIT-е платформы .Net, который стОит того, чтобы его соптимизировали по максимуму.
Микрософт F# решил продвигать в качестве языка для математических вычислений, а с такими способностями к оптимизации JIT-а это смотрится просто смешно.
How are YOU doin'?
Re[3]: Сравнение производительности C# и C++
От: McSeem2 США http://www.antigrain.com
Дата: 10.11.07 04:41
Оценка:
Здравствуйте, AndreyR7, Вы писали:

MS>>Во-вторых, использовать одномерную адресацию в обоих случаях, даже не через функцию at(), а напрямую, типа array[width*i+j].

AR>Моя функция at разворачивается именно в то, что ты написал (т.к. она inline), а вот наглядность увеличивает. Так что смысла нет.

Похоже, что ты не хочешь прочитать смысл. Смысл в том, чтобы уровнять условия — на C++ прямая адресация и на С# прямая адресация. Ну и конечно же, рекомендация об идентичном генераторе псевдо-случайных чисел и строгой верификации результатов пропущена мимо ушей.
McSeem
Я жертва цепи несчастных случайностей. Как и все мы.
Re: Сравнение производительности C# и C++
От: Дмитрий В  
Дата: 10.11.07 21:41
Оценка:
Здравствуйте, AndreyR7, Вы писали:

AR>Здесь C++

AR>Здесь C#
А почему только C#? Предлагаю также сравнить с java, ABAP, PL/SQL и конечно же с ассемблером
Re[2]: Сравнение производительности C# и C++
От: MatFiz Россия  
Дата: 11.11.07 11:47
Оценка:
Здравствуйте, Дмитрий В, Вы писали:

ДВ>Здравствуйте, AndreyR7, Вы писали:


AR>>Здесь C++

AR>>Здесь C#
ДВ>А почему только C#? Предлагаю также сравнить с java, ABAP, PL/SQL и конечно же с ассемблером

Пользуешься ими в работе — пожалуйста, добавляй реализации сюда
How are YOU doin'?
Re[2]: Сравнение производительности C# и C++
От: vdimas Россия  
Дата: 16.11.07 01:56
Оценка:
Здравствуйте, Ватакуси, Вы писали:

В>подсказка.

В>используй unsafe + fixed + указатель на массив. Скорость возрастет на порядок.

Скорость упадёт в некоторых сценариях на порядок, т.к. фиксация GC-объекта и обратный релиз весьма дороги.
Re[5]: Сравнение производительности C# и C++
От: int13h Украина  
Дата: 17.11.07 18:14
Оценка:
Здравствуйте, AndreyR7, Вы писали:

AR>Здравствуйте, infree, Вы писали:



I>> получается просто пример, который "высосан из пальца". Для наиболее типичных задач текущей потребности рынка , дотнета и джавы хватает вполне и они справляются лучше, чем плюсы.

AR>Никто не спорит, сам бы не взялся корпоративное приложение на плюсах делать

I>>П.С. мот устроишь холивар "асм вс. плюсы"? Асм ваще там порвет плюсы аки тузик грелку. Бросишь всё, уйдешь на асм?

AR>Ну кстати с асмом спорный вопрос, я склонен думать что плюсовый компилятор оттачивался годами и все-таки достаточно хорош.

AR>С другой стороны может получиться что разница между асмом и плюсами будет похожа на разницу между плюсами и шарпом. Зато время разработки можно выстроить как 100-10-1

Разница межда асмом и плюсами не такая уж большая
А в сишном примере сделайте проверки на выход за граници массива — тогда и посмотрим
Re[3]: Сравнение производительности C# и C++
От: andrey.desman  
Дата: 23.11.07 13:34
Оценка:
Здравствуйте, AndrewJD, Вы писали:

AD>>Разница с первоначальным вариантом будет ой-ой-ой Тогда можно будет смотреть кто кого и во сколько раз уел.

AJD>Т.е. увеличится погрешность ихзмерений

Погрешность измерений увеличится, да, но кому нужны эти измерения? Я к тому, что при этой оптимизации C# возможно удовлетворит потребности и надобности в C++ не будет. Если нет, то тогда уже вынос в unmanaged, разумеется. То, что C++ работает быстрее — факт. То, что на C# быстрее разрабатывается — тоже факт, однако. Нужно просто найти баланс и усе А линейки ради линеек — глупость
А где VladD2 ?
От: minorlogic Украина  
Дата: 24.11.07 08:41
Оценка:
Я все жду что появится VladD2 и покажет что C# бывает медленнее C++ на 15 -20% а в реальной программе ничуть не уступает.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re: А где VladD2 ?
От: minorlogic Украина  
Дата: 24.11.07 08:47
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>Я все жду что появится VladD2 и покажет что C# бывает медленнее C++ на 15 -20% а в реальной программе ничуть не уступает.


ссылка тут
http://www.rsdn.ru/forum/message/2540060.1.aspx
Автор: VladD2
Дата: 10.06.07
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[3]: Сравнение производительности C# и C++
От: MatFiz Россия  
Дата: 25.11.07 10:03
Оценка:
Здравствуйте, l33thaxor, Вы писали:

L>Вот такой код MatrixComplex класса на C# уделывает первоначальный код на C++ на 25% (1.36s (C#) vs 1.75s (C++)):


Может и уделывает, но согласись, это не C# уже в том виде, в котором его хочется видеть
К тому же есть подозрение, что если плюсовый код переписать аналогично, шарп опять будет немного отставать.
How are YOU doin'?
Re[3]: Сравнение производительности C# и C++
От: AndreyR7 Великобритания  
Дата: 25.11.07 21:15
Оценка:
Здравствуйте, l33thaxor, Вы писали:

L> public unsafe static MatrixComplex operator *(MatrixComplex left, MatrixComplex right)

Кажется увидел слово unsafe? Здравствуй обратно ручное управление памятью?
Re[4]: Сравнение производительности C# и C++
От: AndreyR7 Великобритания  
Дата: 25.11.07 21:22
Оценка:
Здравствуйте, andrey.desman, Вы писали:

AD>То, что на C# быстрее разрабатывается — тоже факт, однако.


Вовсе не факт. Проблема плюсов как правило в библиотеках, т.е. для разработки серьезных приложений нужно использовать библиотеки, которые не очень (а то и API использовать — вообще кошмар)

P.S. Данный тест на плюсах по времени разрабатывался примерно столько же, сколько и шарповый. Может чуть дольше — приходилось вспоминать что там к чему
Re[5]: Сравнение производительности C# и C++
От: Delight  
Дата: 26.11.07 07:08
Оценка:
Здравствуйте, AndreyR7, Вы писали:

AR>Вовсе не факт. Проблема плюсов как правило в библиотеках, т.е. для разработки серьезных приложений нужно использовать библиотеки, которые не очень (а то и API использовать — вообще кошмар)


Если брать в расчёт простое набивание кода, то действительно можно поспорить. Если же учесть возможности современных IDE (вива Решарпер!), то C# ИМХО однозначно впереди.
... << RSDN@Home 1.2.0 alpha rev. 726>>
Re[6]: Сравнение производительности C# и C++
От: AndreyR7 Великобритания  
Дата: 26.11.07 07:24
Оценка:
Здравствуйте, Delight, Вы писали:

D>Если брать в расчёт простое набивание кода, то действительно можно поспорить. Если же учесть возможности современных IDE (вива Решарпер!), то C# ИМХО однозначно впереди.

Для MS VC++ есть (по крайней мере раньше был) Visual Assist, который очень неплохо со всем справлялся, где-то и получше решарпера. И памяти столько не кушал (хватало для разработки 128 мб RAM, сейчас с решарпером 1 гига мало, если несколько студий открывать)
Re[5]: Сравнение производительности C# и C++
От: MatFiz Россия  
Дата: 26.11.07 19:40
Оценка:
Здравствуйте, l33thaxor, Вы писали:

L>Я видел тут у некоторых такую зелененькую подпись: "эксперт". Пора вводить новую, ярко красную мигающую: "студент".


Ты сам себя к которым причисляешь?
Зелёненькой надписи рядом с твоим ником что-то не видно...
How are YOU doin'?
Re[6]: Сравнение производительности C# и C++
От: l33thaxor  
Дата: 27.11.07 07:56
Оценка:
Здравствуйте, MatFiz, Вы писали:

MF>Ты сам себя к которым причисляешь?


К MacLeod'ам, конечно.
Re[5]: Сравнение производительности C# и C++
От: Programador  
Дата: 01.12.07 13:06
Оценка:
Здравствуйте, COFF, Вы писали:

COF>Не, все правильно, условия уравниваются так — на C++ метод at и на C# метод at. То что на C++ этот метод заинлайнится является его преимуществом. У меня, например, как раз за счет инлайнов release версия часто работает на порядок быстрее debug. Без потери читаемости кода. К тому же в исходных условиях автор явно был против написания одной большой функции.


C++ метод at — уродство. Вопервых можно руками написать асерт, правда тут еще замут с стльной беззнаковостью. Нужно иметь возможность включать ранже, а где она?
Re: Сравнение производительности C# и C++
От: Programador  
Дата: 01.12.07 13:12
Оценка:
Здравствуйте, AndreyR7, Вы писали:

AR>1) Не использовать ничего стороннего. В случае C# — только managed код (никакого interop & unsafe) + .Net framework, в случае C++ — только сам язык + STL.

В STL комплех чем дальше тем чуднее, там проверки на нвалуе встречаются непонятно зачем, деление с лишней нормировкой. Ну и вообще наворочено
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.