Re[4]: С# vs C++, голые цифры
От: vdimas Россия  
Дата: 21.05.09 18:10
Оценка:
Здравствуйте, Sorantis, Вы писали:

S>Запустил С++ вариант под МС компиллер.

S>Время показало 3 секунды. ЧЯДНТ?

Аргументы компилятора какие?

S>Время шарпов такое же как у тебя.


Ну охренеть, что еще добавить.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[4]: С# vs C++, голые цифры
От: Erop Россия  
Дата: 21.05.09 21:23
Оценка:
Здравствуйте, Sorantis, Вы писали:

S>Время показало 3 секунды. ЧЯДНТ?

Что за машина/система/опции компилятора?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[19]: С# vs C++, голые цифры
От: Erop Россия  
Дата: 21.05.09 21:32
Оценка: +1 :)
Здравствуйте, criosray, Вы писали:

IID>>Читайте доки, они рулез. (тыкаю пальцем: Profile-Guided Optimization)


C>Доки эти я читал за долго до того, как Вы программированием занялись.


Видимо ещё и до того, как это документ был опубликован и даже написан?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: С# vs C++, голые цифры
От: samius Япония http://sams-tricks.blogspot.com
Дата: 21.05.09 22:43
Оценка: 1 (1) +1 -1
Здравствуйте, IID, Вы писали:

IID>В соселней ветке "Работа — с чего начать: С++ или С#?" было озвучено мнение
Автор: samius
Дата: 19.05.09
, что C# немного медленее С++. И даже предложен код на C#
Автор: IID
Дата: 19.05.09
.

Что-то я и не отметился здесь... Только сегодня обнаружил тему, прочитал всю.

Вопервых, на счет моего тезиса, ссылка на который приведена: там я говорил о примере немного другой программы. Программа, о которой я говорил, могла бы числорубить сцены прочитанные из файла и/или отредактированные в рантайме. Ты же выдернул из программы кусок и начал сравнивать производительности компиляторов в чистом числорублении.
В контексте моего тезиса (о том что я привел пример программы, где C# рвет C++) я признаю победу С++ только если ты (или кто-нибудь) прикрутит (легально) к программе на С++ компилятор Intel C++ или какой-нибудь другой, или пусть это будет интерпретатор, в общем, что угодно, что могло бы прочитать из текстового файла скрипт со сценой и отчислорубить его быстрее чем программа на C# при прочих равных условиях (возможность использовать все доступные ядра, SSE, одинаковый порядок просмотра тел, одинаковые цифры в определениях тел и т.п.)

Потому все это небезынтересное состязание я воспринимаю только в контексте того, что где-то ляпнул будто C# числорубка будет лишь немного медленнее C++ числорубки.

IID>Я привёл код в компилябельное состояние. Вот C# вариант, а вот C++ вариант. Для компиляции использовалась MSVS2008 со всеми обновлениями.


Угу, пойдет. Немного разная функциональность у Math.Round(xmy, 1) и у Math.Floor(xmy). На картинке это очень сильно заметно. Ну да пофигу, перевеса за счет этого не получится, да и вроде поправили уже шарповскую версию.

IID>- компилятор C# версии 3.5 Настроки релизной сборки — дефолтные. (Там-то и настраивать особо нечего).

IID>- компилятор Intel С++ 11.0.072. Релизная сборка кастомизирована. Впрочем, разница между дефолтной релизной сборкой и кастомизированной невелика, порядка 10-15%. Ключи компиляции:

IID>

IID>/c /O2 /Og /Oi /Ot /Oy /Qipo /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /EHsc /MD /GS- /Gy /fp:fast /Yu"StdAfx.h" /Fp"Release/SpeedTestCpp.pch" /Fo"Release/" /W3 /nologo /Zi /QxSSSE3 /Qparallel /Qprof_use /Qprof_dir "Release"

Ой, интеловский компилятор, интересные ключики... Может кто-нибудь заточит C# версию под Мono.SIMD ?

IID>Тестовая машина: Intel Core2 Q6600, 800mhz RAM 8Gb. ОС — Windows 7 RC1 x64. Программы собирались для x86.

IID>Условия прогона: в диапазонах, указанных автором оригинального C# кода. Шаг по X/Y составляет 0.001 (всего за прогон обсчитывается 9млн пикселей). Делается 100(сто) прогонов подряд. Вычисляется суммарное время.
IID>Побочные эффекты: практически исключены. Сторонней нагрузки не было, taskmgr показывал загрузку только одного ядра во время прогонов. Т.е. гипотеза о том что интел компилер сумел заюзать несколько ядер отпадает.

IID>Результаты:

IID> С#: 2m 14s (134 секунды)
IID>С++: 27 секунд

Это окончательные результаты? А то там что-то вроде не работало?

IID>С++ показал практически пятикратное преимущество (496%), обеспечив обсчёт ~33.33млн пикселей в секунду. C# осилил только ~6.71млн пикселей в секунду. (что довольно близко к результату автора в 5.9млн пикселей)

Версия автора еще кое-что делала. В частности обращалась она не с int-ами, а с System.Drawing.Color. Эта структура сильно потяжелее int-а будет. Ну и в буфер ведь все складывал. Так что простим автору, что его результат чуть меньше чем твой на C#.

IID>Итог: подавляющее превосходство С++. Не "немного быстрее", как утверждал автор, а в разы. Причём задача сводилась, фактически, только к грамотному распихиванию FPU команд. Интересно было бы посмотреть на работу с битами. Думаю, тут интел смог бы обеспечить ещё больший отрыв.


Еще одна путаница произошла. В начале поста ты даешь ссылку где я утверждаю что мой пример рвет в разы, тут ссылаешься на другую мою фразу из другого контекста. О чем собственно бенчмарк-то?
Если о той фразе, на которую ссылка в начале поста, то ждем динамической компиляции от программы на C++.
Если о том, что я ляпнул про "лишь немного быстрее", то
а) ждем резултатов Mono.SIMD
б) сравниваем голый C# с голым MS C++ (где возможно получим не такую большую разницу).

Когда я говорил "немного", я подразумевал MS компилятор, что впрочем меня не извиняет.

З.Ы. Видел тут поклонники C# химичили с заданием тел. Не дело. Исходная задача — рендеринг картинки, инвариантной к порядку просмотра тел. Потому для каждого тела важны все его части. Если из стены выкушен цилиндр, то это значит, что точки, находящиеся в пересечении стены и цилиндра к полученному телу не относятся. Т.е. операции над телами строились из соображений подобия строгим теоретико-множественным операциям над точками пространства.
Ну и потом, это просто не спортивно. Если уж бенчмаркать, то бенчмаркать в равных условиях.

З.Ы2. По поводу распараллеливания: ради бенчмарка компиляторов смысла параллелить нет, т.к. задача масштабируется по ядрам идеально. Если уж параллелить, то параллелить оба варианта. И нет смысла сравнивать параллельный C# с непараллельным C++.
Re[2]: С# vs C++, голые цифры
От: IID Россия  
Дата: 22.05.09 06:43
Оценка:
Здравствуйте, samius, Вы писали:

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


IID>>Итог: подавляющее превосходство С++. Не "немного быстрее", как утверждал автор, а в разы. Причём задача сводилась, фактически, только к грамотному распихиванию FPU команд. Интересно было бы посмотреть на работу с битами. Думаю, тут интел смог бы обеспечить ещё больший отрыв.


S>Еще одна путаница произошла. В начале поста ты даешь ссылку где я утверждаю что мой пример рвет в разы, тут ссылаешься на другую мою фразу из другого контекста. О чем собственно бенчмарк-то?

S>Если о той фразе, на которую ссылка в начале поста, то ждем динамической компиляции от программы на C++.
S>Если о том, что я ляпнул про "лишь немного быстрее", то
S>а) ждем резултатов Mono.SIMD

Как его установить-заюзать ? Можно в привате на эту тему пообщаться, чтобы не оффтопить тут.

S>б) сравниваем голый C# с голым MS C++ (где возможно получим не такую большую разницу).

S>Когда я говорил "немного", я подразумевал MS компилятор, что впрочем меня не извиняет.

с MS C++ разница действительно не такая большая. Порядка 2-х раз. Это, конечно, уже не "немного", но и не так хорошо как с Интелом. С другой стороны, я не тратил усилий на тюнинг параметров MSVC++ проекта. Скорее всего можно было бы выжать ещё.


S>З.Ы. Видел тут поклонники C# химичили с заданием тел. Не дело. Исходная задача — рендеринг картинки, инвариантной к порядку просмотра тел. Потому для каждого тела важны все его части. Если из стены выкушен цилиндр, то это значит, что точки, находящиеся в пересечении стены и цилиндра к полученному телу не относятся. Т.е. операции над телами строились из соображений подобия строгим теоретико-множественным операциям над точками пространства.

S>Ну и потом, это просто не спортивно. Если уж бенчмаркать, то бенчмаркать в равных условиях.



S>З.Ы2. По поводу распараллеливания: ради бенчмарка компиляторов смысла параллелить нет, т.к. задача масштабируется по ядрам идеально. Если уж параллелить, то параллелить оба варианта. И нет смысла сравнивать параллельный C# с непараллельным C++.


Сравнивали и оба параллельных. 3.6 раз получилась разница. Хотя у С++ варианта время исполнения в параллельном случае снизилось до 9сек, там уже могли иметь место накладные расходы по инициализации самого процесса + инициализация OpenMP (тут уже даже секунда оказывает значительное влияние на итоговую оценку). Возможно, имеет смысл повторить, увеличив на порядок количество итераций.
kalsarikännit
Re[2]: С# vs C++, голые цифры
От: MxKazan Португалия  
Дата: 22.05.09 06:56
Оценка:
Здравствуйте, samius, Вы писали:

S>Ой, интеловский компилятор, интересные ключики... Может кто-нибудь заточит C# версию под Мono.SIMD ?

Было бы отлично

S>З.Ы2. По поводу распараллеливания: ради бенчмарка компиляторов смысла параллелить нет, т.к. задача масштабируется по ядрам идеально. Если уж параллелить, то параллелить оба варианта. И нет смысла сравнивать параллельный C# с непараллельным C++.

Ну ради интереса, смысл вполне себе был
Re[3]: С# vs C++, голые цифры
От: MxKazan Португалия  
Дата: 22.05.09 06:57
Оценка: +2
Здравствуйте, IID, Вы писали:

IID>Как его установить-заюзать ? Можно в привате на эту тему пообщаться, чтобы не оффтопить тут.

Лучше по "оффтопьте" здесь, думаю всем будет полезно и интересно
Re[3]: С# vs C++, голые цифры
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 22.05.09 07:30
Оценка: +1
Здравствуйте, MxKazan, Вы писали:

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


S>>Ой, интеловский компилятор, интересные ключики... Может кто-нибудь заточит C# версию под Мono.SIMD ?

MK>Было бы отлично
Вряд ли, Мono.SIMD операции с векторами оптимизирует, а в этих вычислениях веторов нет.
Re[3]: С# vs C++, голые цифры
От: samius Япония http://sams-tricks.blogspot.com
Дата: 22.05.09 08:22
Оценка:
Здравствуйте, IID, Вы писали:

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


S>>а) ждем резултатов Mono.SIMD


IID>Как его установить-заюзать ? Можно в привате на эту тему пообщаться, чтобы не оффтопить тут.


Без малейшего понятия. Все что я о нем знаю — это как поискать его в гугле.
Если честно, то я даже почти уверен в том, что SIMD этому конкретному бенчмарку мало чем поможет. Векторных операций как-таковых нет.

S>>б) сравниваем голый C# с голым MS C++ (где возможно получим не такую большую разницу).

S>>Когда я говорил "немного", я подразумевал MS компилятор, что впрочем меня не извиняет.

IID>с MS C++ разница действительно не такая большая. Порядка 2-х раз. Это, конечно, уже не "немного", но и не так хорошо как с Интелом. С другой стороны, я не тратил усилий на тюнинг параметров MSVC++ проекта. Скорее всего можно было бы выжать ещё.

Да уж, не немного...
Поливаю кепку майонезом

S>>З.Ы2. По поводу распараллеливания: ради бенчмарка компиляторов смысла параллелить нет, т.к. задача масштабируется по ядрам идеально. Если уж параллелить, то параллелить оба варианта. И нет смысла сравнивать параллельный C# с непараллельным C++.


IID>Сравнивали и оба параллельных. 3.6 раз получилась разница. Хотя у С++ варианта время исполнения в параллельном случае снизилось до 9сек, там уже могли иметь место накладные расходы по инициализации самого процесса + инициализация OpenMP (тут уже даже секунда оказывает значительное влияние на итоговую оценку). Возможно, имеет смысл повторить, увеличив на порядок количество итераций.


Динамического варианта на C++ ждать?
Re[13]: С# vs C++, голые цифры
От: Ночной Смотрящий Россия  
Дата: 22.05.09 09:45
Оценка: +1 -1
Здравствуйте, MxKazan, Вы писали:

MK>Как-то нечестно, не находишь?


Это характерная черта всех подобных флеймов. Те кто чмырять C#, его знают на уроыне чайника, и наоборот.
Re[17]: С# vs C++, голые цифры
От: Ночной Смотрящий Россия  
Дата: 22.05.09 09:45
Оценка: 1 (1) :)
Здравствуйте, criosray, Вы писали:

C>Это штатная фича дотнет начиная с 4.0. А пока можно скачать абсолютно рабочий CTP.


Рабочий то он рабочий, но у него серьезные проблемы как раз с производительностью. Надо было хотя бы beta 1 4-го фреймворка пользовать.
Re[4]: С# vs C++, голые цифры
От: criosray  
Дата: 22.05.09 09:58
Оценка:
Здравствуйте, gandjustas, Вы писали:

S>>>Ой, интеловский компилятор, интересные ключики... Может кто-нибудь заточит C# версию под Мono.SIMD ?

MK>>Было бы отлично
G>Вряд ли, Мono.SIMD операции с векторами оптимизирует, а в этих вычислениях веторов нет.

А разве SIMD это не MMX / SSE x и т.п. расширения? Дело в том, что включение SSE3 оптимизации ускорило С++ вариант почти в два раза.
Re[5]: С# vs C++, голые цифры
От: Antikrot  
Дата: 22.05.09 10:10
Оценка:
Здравствуйте, criosray, Вы писали:

S>>>>Ой, интеловский компилятор, интересные ключики... Может кто-нибудь заточит C# версию под Мono.SIMD ?

MK>>>Было бы отлично
G>>Вряд ли, Мono.SIMD операции с векторами оптимизирует, а в этих вычислениях веторов нет.
C>А разве SIMD это не MMX / SSE x и т.п. расширения? Дело в том, что включение SSE3 оптимизации ускорило С++ вариант почти в два раза.
интересный вопрос, что там на самом деле ускорило. но векторных операций не было, то есть обработка шла по одному элементу, хотя и sse-шными функциями. я почти уверен, что агрессивный инлайн в данном примере дает больше, чем sse...

ps. попробую что-нибудь векторизовать в тесте, если будет немного времени в выходные
Re[4]: С# vs C++, голые цифры
От: Erop Россия  
Дата: 22.05.09 11:00
Оценка:
Здравствуйте, samius, Вы писали:


S>Динамического варианта на C++ ждать?

dll?
Такой тест будет очень уж сентетическим. Могу для сравнения сказать, что у меня есть мотор, который умеет интерпретировать некий байт-код или умеет компилять его в срр. Компиляция даёт ускорение где-то процентов на 20%...
Но это уже очень сильно от задачи зависит...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re: С# vs C++, голые цифры
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 23.05.09 01:52
Оценка: +1 :))) :)))
Здравствуйте, IID, Вы писали:

IID><skipped>

Всё гораздо проще:
Console.WriteLine("23 см.");

cout << L"25 см." << endl;


[КУ] оккупировала армия.
Re[2]: С# vs C++, голые цифры
От: criosray  
Дата: 23.05.09 07:40
Оценка:
Здравствуйте, koandrew, Вы писали:

IID>><skipped>

K>Всё гораздо проще:
K>
K>Console.WriteLine("23x5 см.");
K>

K>
K>cout << L"25x2 см." << endl;
K>


K>


Re[3]: С# vs C++, голые цифры
От: IID Россия  
Дата: 23.05.09 08:43
Оценка:
Здравствуйте, criosray, Вы писали:

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


IID>>><skipped>

K>>Всё гораздо проще:
K>>
K>>Console.WriteLine("23x5 см.");
K>>

C>

пятих#й ? подозревал, что С# мутант, но чтобы настолько...
kalsarikännit
Re[4]: С# vs C++, голые цифры
От: criosray  
Дата: 23.05.09 10:40
Оценка:
Здравствуйте, IID, Вы писали:


IID>>>><skipped>

K>>>Всё гораздо проще:
K>>>
K>>>Console.WriteLine("23x5 см.");
K>>>

C>>

IID>пятих#й ? подозревал, что С# мутант, но чтобы настолько...


Для непонятливых вторая цифра означает диаметр.
Re[5]: С# vs C++, голые цифры
От: VoidEx  
Дата: 23.05.09 12:29
Оценка:
Здравствуйте, criosray, Вы писали:

C>Для непонятливых вторая цифра означает диаметр.


И с каких пор длина * диаметр измеряется в линейных сантиметрах?
Re[6]: С# vs C++, голые цифры
От: criosray  
Дата: 23.05.09 15:39
Оценка:
Здравствуйте, VoidEx, Вы писали:

C>>Для непонятливых вторая цифра означает диаметр.


VE>И с каких пор длина * диаметр измеряется в линейных сантиметрах?


Где Вы там увидели знак умножения?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.