Здравствуйте, Sorantis, Вы писали:
S>Время показало 3 секунды. ЧЯДНТ?
Что за машина/система/опции компилятора?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, criosray, Вы писали:
IID>>Читайте доки, они рулез. (тыкаю пальцем: Profile-Guided Optimization)
C>Доки эти я читал за долго до того, как Вы программированием занялись.
Видимо ещё и до того, как это документ был опубликован и даже написан?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
.
Что-то я и не отметился здесь... Только сегодня обнаружил тему, прочитал всю.
Вопервых, на счет моего тезиса, ссылка на который приведена: там я говорил о примере немного другой программы. Программа, о которой я говорил, могла бы числорубить сцены прочитанные из файла и/или отредактированные в рантайме. Ты же выдернул из программы кусок и начал сравнивать производительности компиляторов в чистом числорублении. В контексте моего тезиса (о том что я привел пример программы, где 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>
Ой, интеловский компилятор, интересные ключики... Может кто-нибудь заточит 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++.
Здравствуйте, 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 (тут уже даже секунда оказывает значительное влияние на итоговую оценку). Возможно, имеет смысл повторить, увеличив на порядок количество итераций.
Здравствуйте, samius, Вы писали:
S>Ой, интеловский компилятор, интересные ключики... Может кто-нибудь заточит C# версию под Мono.SIMD ?
Было бы отлично
S>З.Ы2. По поводу распараллеливания: ради бенчмарка компиляторов смысла параллелить нет, т.к. задача масштабируется по ядрам идеально. Если уж параллелить, то параллелить оба варианта. И нет смысла сравнивать параллельный C# с непараллельным C++.
Ну ради интереса, смысл вполне себе был
Здравствуйте, IID, Вы писали:
IID>Как его установить-заюзать ? Можно в привате на эту тему пообщаться, чтобы не оффтопить тут.
Лучше по "оффтопьте" здесь, думаю всем будет полезно и интересно
Здравствуйте, MxKazan, Вы писали:
MK>Здравствуйте, samius, Вы писали:
S>>Ой, интеловский компилятор, интересные ключики... Может кто-нибудь заточит C# версию под Мono.SIMD ? MK>Было бы отлично
Вряд ли, Мono.SIMD операции с векторами оптимизирует, а в этих вычислениях веторов нет.
Здравствуйте, 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 (тут уже даже секунда оказывает значительное влияние на итоговую оценку). Возможно, имеет смысл повторить, увеличив на порядок количество итераций.
Здравствуйте, gandjustas, Вы писали:
S>>>Ой, интеловский компилятор, интересные ключики... Может кто-нибудь заточит C# версию под Мono.SIMD ? MK>>Было бы отлично G>Вряд ли, Мono.SIMD операции с векторами оптимизирует, а в этих вычислениях веторов нет.
А разве SIMD это не MMX / SSE x и т.п. расширения? Дело в том, что включение SSE3 оптимизации ускорило С++ вариант почти в два раза.
Здравствуйте, criosray, Вы писали:
S>>>>Ой, интеловский компилятор, интересные ключики... Может кто-нибудь заточит C# версию под Мono.SIMD ? MK>>>Было бы отлично G>>Вряд ли, Мono.SIMD операции с векторами оптимизирует, а в этих вычислениях веторов нет. C>А разве SIMD это не MMX / SSE x и т.п. расширения? Дело в том, что включение SSE3 оптимизации ускорило С++ вариант почти в два раза.
интересный вопрос, что там на самом деле ускорило. но векторных операций не было, то есть обработка шла по одному элементу, хотя и sse-шными функциями. я почти уверен, что агрессивный инлайн в данном примере дает больше, чем sse...
ps. попробую что-нибудь векторизовать в тесте, если будет немного времени в выходные
S>Динамического варианта на C++ ждать?
dll?
Такой тест будет очень уж сентетическим. Могу для сравнения сказать, что у меня есть мотор, который умеет интерпретировать некий байт-код или умеет компилять его в срр. Компиляция даёт ускорение где-то процентов на 20%...
Но это уже очень сильно от задачи зависит...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Здравствуйте, VoidEx, Вы писали:
C>>Для непонятливых вторая цифра означает диаметр.
VE>И с каких пор длина * диаметр измеряется в линейных сантиметрах?