Re[12]: С# vs C++, голые цифры
От: criosray  
Дата: 20.05.09 11:38
Оценка:
Здравствуйте, IID, Вы писали:

IID>А вот это — всегда пожалуйста. Только удивительно что компилятор C# такое не осиливает, если это правда дало какой-то выигрыш.


Компиллятор не обладает интеллектом человека. Впрочем, Вы не сильно далеко ушли, раз написали это:

IID>Попытки упростить вычисления не годятся. Мы ведь можем и поменять пределы изменения пары x,y. И "упрощённый" код станет давать неверные варианты. (В суть закомментированного лень вчитываться, но этот код явно влияет на результат)


А вот Вы вчитайтесь. Может и поймете почему оптимизированный мною вариант будет давать идентичный неоптимизированному результат на любом наборе входных данных.
Re[9]: С# vs C++, голые цифры
От: Antikrot  
Дата: 20.05.09 11:41
Оценка:
Здравствуйте, criosray, Вы писали:

A>>что касается a, раз ты его втащил в Parallel.For, так я его буду делать private

A>>
A>>#pragma omp parallel for reduction(+:x) private(a)
A>>

A>>так он будет свой для каждого потока, и ничего лочить не надо.
C>Ок, замечательно. А как в предыдущем тесте у Вас получился корректный результат без private(a)? Потрудитесь объяснить.
если нет возражений, вечером попробую объяснить (сейчас по уши в линуксе сижу)

C>А заодно приведите замеры с исправленным кодом — где добавлено private(a).

те же 18 секунд. на самом деле, разницы-то — дважды скопировать объект с тремя полями (не в циклах).

было бы еще интересно на кваде проверить опенмпишный вариант
Re[10]: С# vs C++, голые цифры
От: criosray  
Дата: 20.05.09 11:59
Оценка:
Здравствуйте, Antikrot, Вы писали:


A>>>что касается a, раз ты его втащил в Parallel.For, так я его буду делать private

A>>>
A>>>#pragma omp parallel for reduction(+:x) private(a)
A>>>

A>>>так он будет свой для каждого потока, и ничего лочить не надо.
C>>Ок, замечательно. А как в предыдущем тесте у Вас получился корректный результат без private(a)? Потрудитесь объяснить.
A>если нет возражений, вечером попробую объяснить (сейчас по уши в линуксе сижу)

Какие могут быть возражения...

Ок, включил OMP, полную оптимизацию, поотключал всякие проверки, включил оптимизацию под SSE и т.д.
Вариант с
#pragma omp parallel for reduction(+:x) private(a)

отработал за 18 сек.

Теперь проведу те же оптимизации, что и в дотнет варианте
....

13 секунд.

Что ж, неплохо. Выявили узкое место, собрали dll`ку, подцепили ее к менеджед проекту и все пучком.
Re[13]: С# vs C++, голые цифры
От: IID Россия  
Дата: 20.05.09 12:00
Оценка:
Здравствуйте, criosray, Вы писали:

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


IID>>А вот это — всегда пожалуйста. Только удивительно что компилятор C# такое не осиливает, если это правда дало какой-то выигрыш.


C>Компиллятор не обладает интеллектом человека.

С++ компилятор прекрасно справляется с тривиальной задачей заменить switch на if. И с переставлением вызовов местами — тоже (смотри внимательно ключи компиляции в первом посте). Так что не надо тут оправдывать убогость C# оптимизатора.

C>Впрочем, Вы не сильно далеко ушли, раз написали это:

Переход на личности и нарушение правил форума.

IID>>Попытки упростить вычисления не годятся. Мы ведь можем и поменять пределы изменения пары x,y. И "упрощённый" код станет давать неверные варианты. (В суть закомментированного лень вчитываться, но этот код явно влияет на результат)


C>А вот Вы вчитайтесь. Может и поймете почему оптимизированный мною вариант будет давать идентичный неоптимизированному результат на любом наборе входных данных.

Обязательно. Но позже. И горе тебе, если окажется что закомментированные функции влияют на результат для других диапазонов (x,y)
kalsarikännit
Re[10]: С# vs C++, голые цифры
От: IID Россия  
Дата: 20.05.09 12:02
Оценка:
Здравствуйте, Antikrot, Вы писали:

A>было бы еще интересно на кваде проверить опенмпишный вариант


Вечером заценю на домашнем Q6600. И опенмпшный, и сишарповский
kalsarikännit
Re[10]: С# vs C++, голые цифры
От: criosray  
Дата: 20.05.09 12:04
Оценка:
Здравствуйте, Antikrot, Вы писали:

A>если нет возражений, вечером попробую объяснить (сейчас по уши в линуксе сижу)


А вот вариант без private(a) дает некорректный результат (что вполне ожидаемо)
elapsed: 22 seconds.
1679567250

Еще и дольше отрабатывает...
Re[14]: С# vs C++, голые цифры
От: criosray  
Дата: 20.05.09 12:08
Оценка: -1
Здравствуйте, IID, Вы писали:

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


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


IID>>>А вот это — всегда пожалуйста. Только удивительно что компилятор C# такое не осиливает, если это правда дало какой-то выигрыш.


C>>Компиллятор не обладает интеллектом человека.

IID>С++ компилятор прекрасно справляется с тривиальной задачей заменить switch на if. И с переставлением вызовов местами — тоже (смотри внимательно ключи компиляции в первом посте). Так что не надо тут оправдывать убогость C# оптимизатора.

Не справляется. Ни один компилятор не догадается, что Spiral будет возвращать true значительно чаще, чем Golova.

Так что оставьте свои фантазии при себе, ок.

IID>>>Попытки упростить вычисления не годятся. Мы ведь можем и поменять пределы изменения пары x,y. И "упрощённый" код станет давать неверные варианты. (В суть закомментированного лень вчитываться, но этот код явно влияет на результат)


C>>А вот Вы вчитайтесь. Может и поймете почему оптимизированный мною вариант будет давать идентичный неоптимизированному результат на любом наборе входных данных.

IID>Обязательно. Но позже. И горе тебе, если окажется что закомментированные функции влияют на результат для других диапазонов (x,y)

Горе Вам, что Вы лезете на форум и пишете всякую чушь вместо того, чтоб потратить 2 минуты и вчитаться в код.
Re[15]: С# vs C++, голые цифры
От: IID Россия  
Дата: 20.05.09 12:11
Оценка: +2 -1
Здравствуйте, criosray, Вы писали:

C>Не справляется. Ни один компилятор не догадается, что Spiral будет возвращать true значительно чаще, чем Golova.

C>Так что оставьте свои фантазии при себе, ок.

Подсказываю: ключ /Qprof_use. В этом режиме требуется две компиляции фазы-1, в которых код иструментируется. С последующими прогонами. На основании полученных данных в фазе-2 собирается окончательный вариант.
kalsarikännit
Re[16]: С# vs C++, голые цифры
От: criosray  
Дата: 20.05.09 12:21
Оценка: -1
Здравствуйте, IID, Вы писали:


C>>Не справляется. Ни один компилятор не догадается, что Spiral будет возвращать true значительно чаще, чем Golova.

C>>Так что оставьте свои фантазии при себе, ок.

IID>Подсказываю: ключ /Qprof_use. В этом режиме требуется две компиляции фазы-1, в которых код иструментируется. С последующими прогонами. На основании полученных данных в фазе-2 собирается окончательный вариант.


Н-да. Ну проверьте. Увидите сами.
Re[17]: С# vs C++, голые цифры
От: Antikrot  
Дата: 20.05.09 12:43
Оценка:
Здравствуйте, criosray, Вы писали:

IID>>Подсказываю: ключ /Qprof_use. В этом режиме требуется две компиляции фазы-1, в которых код иструментируется. С последующими прогонами. На основании полученных данных в фазе-2 собирается окончательный вариант.

C>Н-да. Ну проверьте. Увидите сами.

хотелось бы знать, на чем основан такой вывод. Проверяли?
Re[4]: С# vs C++, голые цифры
От: NikeByNike Россия  
Дата: 20.05.09 13:00
Оценка:
Здравствуйте, IID, Вы писали:

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

Это невыгодная операция. Тебе нужно из fpu перегнать переменную в cpu, а потом обратно. На этот случай есть fpu-шная версия abs.
Нужно разобрать угил.
Re[5]: С# vs C++, голые цифры
От: criosray  
Дата: 20.05.09 13:20
Оценка:
Здравствуйте, NikeByNike, Вы писали:


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

NBN>Это невыгодная операция. Тебе нужно из fpu перегнать переменную в cpu, а потом обратно. На этот случай есть fpu-шная версия abs.

Выгодно, не выгодно... тоже мне теоретики. Замена abs на fabs привела к увеличению времени с 11 сек до 12 сек.
Re[14]: С# vs C++, голые цифры
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.05.09 13:28
Оценка: +1
Здравствуйте, IID, Вы писали:

IID>Так что не надо тут оправдывать убогость C# оптимизатора.

Смешной ты парень. В компиляторе C# вообще нету оптимизатора. Компилятор один-в-один преобразует исходник на C# в IL, так что обратный процесс вполне возможен. JIT в свою очередь не занимается такими хардкорными оптимизациями, как помилятор С++, у него времени нету.

Есдинственное что ты доказал своим постом, что оптимизаторы современных компиляторов C++ лучше JITа работают. Но это вроде и так все знают.
Re[15]: С# vs C++, голые цифры
От: criosray  
Дата: 20.05.09 13:58
Оценка: :)
Здравствуйте, gandjustas, Вы писали:



IID>>Так что не надо тут оправдывать убогость C# оптимизатора.

G>Смешной ты парень. В компиляторе C# вообще нету оптимизатора. Компилятор один-в-один преобразует исходник на C# в IL, так что обратный процесс вполне возможен. JIT в свою очередь не занимается такими хардкорными оптимизациями, как помилятор С++, у него времени нету.

G>Есдинственное что ты доказал своим постом, что оптимизаторы современных компиляторов C++ лучше JITа работают. Но это вроде и так все знают.


Да и к тому же там, где программа на С# заработает без перекомпиляции, программа на С++, собранная с использованием инструкций SSE3, например, попросту не заведется на более старых процессорах.
Re[16]: С# vs C++, голые цифры
От: Antikrot  
Дата: 20.05.09 14:07
Оценка: +2
Здравствуйте, criosray, Вы писали:

C>Да и к тому же там, где программа на С# заработает без перекомпиляции, программа на С++, собранная с использованием инструкций SSE3, например, попросту не заведется на более старых процессорах.


ну это как собрать... можно например с /QaxSSE3 (для icl), всё заведется
Re[6]: С# vs C++, голые цифры
От: NikeByNike Россия  
Дата: 20.05.09 14:09
Оценка:
Здравствуйте, criosray, Вы писали:

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

NBN>>Это невыгодная операция. Тебе нужно из fpu перегнать переменную в cpu, а потом обратно. На этот случай есть fpu-шная версия abs.

C>Выгодно, не выгодно... тоже мне теоретики. Замена abs на fabs привела к увеличению времени с 11 сек до 12 сек.


Ты не понимаешь о чём говоришь Сначала попробовал бы посмотреть дизасм
Я молчу про измерение времени выполнения этого теста в секундах! И уж тем более однократное.
Нужно разобрать угил.
Re[7]: С# vs C++, голые цифры
От: IID Россия  
Дата: 20.05.09 14:25
Оценка: +1
Здравствуйте, NikeByNike, Вы писали:

NBN>Я молчу про измерение времени выполнения этого теста в секундах!


А вот тут ты не совсем прав, асимптотику прекрасно видно, +- секунда погоды не делает.
kalsarikännit
Re[17]: С# vs C++, голые цифры
От: IID Россия  
Дата: 20.05.09 14:45
Оценка: -1
Здравствуйте, criosray, Вы писали:

C>Н-да. Ну проверьте. Увидите сами.


Читайте доки, они рулез. (тыкаю пальцем: Profile-Guided Optimization)
kalsarikännit
Re[18]: С# vs C++, голые цифры
От: criosray  
Дата: 20.05.09 14:58
Оценка: -4 :))
Здравствуйте, IID, Вы писали:

C>>Н-да. Ну проверьте. Увидите сами.


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


Месье — теоретик? Доки эти я читал за долго до того, как Вы программированием занялись. И знаю всяко лучше Вашего, что этой оптимизации компиллятор не сделает. Не верите — проверьте и убедитесь.
Re[7]: С# vs C++, голые цифры
От: criosray  
Дата: 20.05.09 15:00
Оценка: -2 :)
Здравствуйте, NikeByNike, Вы писали:


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

NBN>>>Это невыгодная операция. Тебе нужно из fpu перегнать переменную в cpu, а потом обратно. На этот случай есть fpu-шная версия abs.

C>>Выгодно, не выгодно... тоже мне теоретики. Замена abs на fabs привела к увеличению времени с 11 сек до 12 сек.


NBN>Ты не понимаешь о чём говоришь Сначала попробовал бы посмотреть дизасм

NBN>Я молчу про измерение времени выполнения этого теста в секундах! И уж тем более однократное.

Что мне смотреть дизассемблером, если я вижу, что время выполнения ухудшилась?

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