Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 55, средняя оценка - 4.71
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
#1

Производительность операций - C++

20.11.2011, 06:34. Просмотров 7540. Ответов 135
Метки нет (Все метки)

Не уверен в своих силах для самостоятельной оценки сабжа. Где можно найти информацию о производительности стандартных операций с++ (гуглением не справился, нашел только сравнение реализации на с++, джаве и на нескольких интерпретируемых языках)?
То есть интересует информация плана << : * как 1:15 или <= : == как 25:24... То есть, чрезвычайно интересно знать, какие операции выбирать если есть альтернатива.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2011, 06:34     Производительность операций
Посмотрите здесь:

Производительность - C++
Подскажите, где или что почитать о том, как писать БЫСТРЫЕ программы? (про разработку высоконагруженных программ). Копаюсь в интернете -...

Производительность кода - C++
Интересует сабж как таковой, и конкретно это: std::string STR = &quot;ABC&quot;; if ( strcmp(STR.c_str(), &quot;ABC&quot; ) == 0 ) или std::string STR...

Влияет ли на производительность - C++
Влияет ли на производительность определение(тоесть реализация) функций внутри класса, а также использование вложенных классов?

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

Производительность многопоточности - C++
Доброго времени суток. Решил заняться многопоточностью, и натолкнулся на непонимание с производиельность Есть код в 2 потока: ...

копирование строк, производительность - C++
подскажи, как максимально быстро скопировать сроку memcpy или я написал свою функцию size_t i = 0; while (*(szReceiver + i) =...

Вопрос про многопоточность и производительность - C++
Здравствуйте! Подскажите пожалуйста ответы на следующие вопросы: 1) Правда ли,что многопоточность в программе позволяет увеличить...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
21.11.2011, 17:17     Производительность операций #16
Цитата Сообщение от fasked Посмотреть сообщение
А если выражаться точно, то никакого кода для этих двух примеров не генерируется
Не надо делать скоропалитеьных выводов! Это все зависит от компилятора и режима компиляции.
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
21.11.2011, 17:20  [ТС]     Производительность операций #17
Цитата Сообщение от Сыроежка Посмотреть сообщение
Повторю еще раз,
Но ведь я же продемонстрировал, что в текущем состоянии мой код выдаёт результаты, расходящиеся с тем, что прогнозируете вы (кстати, я доверительно отнёсся к вашему посылу, ведь в первоначальном варианте результаты польностью ему соответствовали). Если расхождение есть, объясните, откуда оно а не говорите что сделает компилятор, если очевидно обратное.

Цитата Сообщение от Paporotnik Посмотреть сообщение
странное противопоставление сложения и умножения
Я недавно изучал алгоритм построения гладкой линии, в википедии был приведёт вариант реализации, тщательно избегавший операции умножения. Мне хотелось понять, насколько это оправданно.


Цитата Сообщение от fasked Посмотреть сообщение
Максимальный уровень оптимизации.
Боюсь, это приведёт к тому, что выполнение части моих операций будет отключено вовсе. Было бы хорошо добиться того, чтобы компилятор делал какую-то оптимизацию, скажем, по обращению к элементу вектора, но в то же время, не на столько грубую, чтобы отключать операции, в которых нет явной необходимости.

Цитата Сообщение от Paporotnik Посмотреть сообщение
разница в производительности в большинстве случаев настолько несущественна с современными мощностями и
Отказываюсь понимать, почему производительность кого-то не интересует. Если я планирую не уходить от разработки простых интерфейсов, возможно. Но по моей специальности (не програмирование), мне в ближайшее время придётся писать максимально эффективные коды (в частности, решение специфичных СЛАУ, не имеющих эффективной реализации в библиотеках типа boost).
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
21.11.2011, 17:22     Производительность операций #18
CEBEP, Точно не имеющих? http://www.boost.org/doc/libs/1_47_0.../doc/index.htm
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
21.11.2011, 17:24     Производительность операций #19
Цитата Сообщение от Сыроежка Посмотреть сообщение
Не надо делать скоропалитеьных выводов! Это все зависит от компилятора и режима компиляции.
В таком случае Ваш вывод о префиксном и постфиксном тоже скоропостижен
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
21.11.2011, 17:24  [ТС]     Производительность операций #20
Цитата Сообщение от ForEveR Посмотреть сообщение
Точно не имеющих?
зуб даю
Сыроежка
Заблокирован
21.11.2011, 17:29     Производительность операций #21
Цитата Сообщение от CEBEP Посмотреть сообщение
Но ведь я же продемонстрировал, что в текущем состоянии мой код выдаёт результаты, расходящиеся с тем, что прогнозируете вы (кстати, я доверительно отнёсся к вашему посылу, ведь в первоначальном варианте результаты польностью ему соответствовали). Если расхождение есть, объясните, откуда оно а не говорите что сделает компилятор, если очевидно обратное.
Всегда надо смотреть, какой объектный код генерирует компилятор. И если есть расхождение в генерируемом объектном коде для прединкремента и постинкремента, то определять причину, чем вызвано это расхождение. Как уже неоднократно я писал, если результат постинкремента для фундаментального типа не присваивается другому объекту, то компилятор обычно генерирует такой же код, как и для прединкремента.

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

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

Поэтому я и говорю, что для профессионалов ваш подход и ваши оценки не представяют инетреса. Они интересны лишь из любопытства для новичков, которые узнали, что существует разница между постинкрементом и прединкрементом и ринулиьс это сразу же проверять.
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
21.11.2011, 17:44     Производительность операций #22
Я недавно изучал алгоритм построения гладкой линии, в википедии был приведёт вариант реализации, тщательно избегавший операции умножения. Мне хотелось понять, насколько это оправданно.
да, умножение и деление затратные операции, их желательно избегать по возможности. и то, только в том случае, если ф-ция, где они имеют место быть, вызываются крайне часто и/или критично время работы и/или желательно выполнение на аппаратном уровне. к примеру, примитивные ф-ции компьютерной графики, которые подпадают под все требования.
а вот в инженерном расчете кривых в авиационном деле никто умножения не избегает. так как на фоне общих затрат производительности подобная оптимизация будет столь несущественна, что никак не окупит потраченное на нее время и возможное уменьшение точности расчетов.
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
21.11.2011, 17:47  [ТС]     Производительность операций #23
Цитата Сообщение от Сыроежка Посмотреть сообщение
ринулиьс это сразу же проверять
На самом деле, префиксную и постфиксную форм я сравнивал просто для кучи. я люпблю написать что-нибудь типа
C
1
2
double k = *++currentPoint == '-' ? .1 : 10;
    ++currentPoint;
И мне хотелось знать, выйграл ли я что-то , от того что вынес смещение указателя в отдельню строку. В подобном же контексте мне были нитересны < и !=, часто приходится писать for(int i = 0; i != size; ++i), пока мой эксперимент показал, что именно такая запись работает быстрее всего (хотя надёжнее, хоть и не много, написать for(int i = 0; i < size; ++i). На самом деле, основной интерес для меня сейчас представляют контейнеры. Я часто встречал разные мнения о них. Кто-то ругал итераторы, кто-то наоборот, обращения по индексу. У меня на работе есть один умный и хороший специалист (выиграл всероссийскую олимпиаду по сопромату), который принципиально (не потому что лень изучить), не использует стандартные контейнеры а всегда пишет double* array = new double[length];, прекрасно понимая все минусы подхода, просто не хочет связываться. Я сейчас пишу разбор файла, в котором мне не обойтись без вектора ( я должен считать узлы геометрии объекта, не зная на этапе прочтения, сколько их. ). По этому я прикладываю усилия по изучению стандартных контейнеров, надеясь добиться такого кода на с++, который не уступал бы использованию указателей по производительности.
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
21.11.2011, 17:47  [ТС]     Производительность операций #24
Цитата Сообщение от Paporotnik Посмотреть сообщение
умножения не избегает
У нас там есть реализация одна, в ней участвуют и умножение и даже одно извлечение корня, но ещё и очень много сложений и обращений к элементам массива массивов (x[i][j]). Вот меня интересовало, стоит ли переписать обращения по индексам в указатели, или это только трата времени, усложнение кода и ничтожный выигрыш. пока однозначно говорить не хочу, но считаю что переписать есть смысл.
Bers
Заблокирован
21.11.2011, 17:50     Производительность операций #25
Цитата Сообщение от CEBEP Посмотреть сообщение
double k = *++currentPoint == '-' ? .1 : 10;
* * * * ++currentPoint;
За такое по щам получить можно.
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
21.11.2011, 17:54  [ТС]     Производительность операций #26
Я ожидал, что извлечение корня дольше чем умножение раз в 20 как минимум, а оказывается всего в 2,5. Это повод всё-таки переписать алгоритм.

Добавлено через 1 минуту
Цитата Сообщение от Bers Посмотреть сообщение
За такое по щам получить можно.
альтернатива -
C++
1
double k = *++currentPoint++ == '-' ? .1 : 10;
ForEveR
В астрале
Эксперт С++
7970 / 4732 / 320
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
21.11.2011, 17:54     Производительность операций #27
CEBEP, Пишите на сях, если смотрите на крохи ускорения и хотите переписать алгоритм с индексной формы в форму указателей. А С++ не трогайте в этом случае.
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
21.11.2011, 18:02  [ТС]     Производительность операций #28
Цитата Сообщение от Paporotnik Посмотреть сообщение
в инженерном расчете кривых в авиационном деле
у нас конечноэлементные и конечнообъёмные расчёты

Короче, по сабжу кто что может сказать? Как повысить объективность теста?
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
21.11.2011, 18:04     Производительность операций #29
Цитата Сообщение от CEBEP Посмотреть сообщение
альтернатива -
А за такое получить нужно
Цитата Сообщение от CEBEP Посмотреть сообщение
У меня на работе есть один умный и хороший специалист (выиграл всероссийскую олимпиаду по сопромату), который принципиально (не потому что лень изучить), не использует стандартные контейнеры а всегда пишет double* array = new double[length];, прекрасно понимая все минусы подхода, просто не хочет связываться
Хороший специалист в сопромате возможно, но не в программировании точно.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2011, 18:07     Производительность операций
Еще ссылки по теме:

Производительность CPU, КЕШ, многопоточность - C++
Доброго времени суток! Суть проблемы - есть курсовой по системному программированию но я не знаю с чего и начать ( Тема:...

Константы, геттеры/сеттеры и производительность - C++
Есть глобальная константа, определяющая размер большого количества массивов. Также есть множество обращений к массивам с использованием...

Вычислить суточную производительность каждого полимера - C++
Вычислить суточную производительность каждого полимера и всей батареи из 12-ти аппаратов, если съем полимера с одного кубометра объема...

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

Действительно ли использование шаблонов снижает производительность программы? - C++
Просветите пожалуйста. Шаблоны в программе снижают её производительность или нет? и намного ли они больше занимают память чем обычные...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
21.11.2011, 18:07  [ТС]     Производительность операций #30
Цитата Сообщение от ForEveR Посмотреть сообщение
А С++ не трогайте в этом случае.
вот ко мне приходит файл,в котором хранятся переменные. причём стандарт файла такой, что в заголовке колличество переменных не указано. Чем выдумывать что-то для подсчёта переменных (пускай их немного, скажем 600-3000), разумнее воспользоватся вектором. Теперь мне надо решить, что с этим вектором делать, ведь я могу написать double* arr = &dat[0], что куда стрёмнее чем приведённый мною выше код с инкриментами и операцией условия, а могу разобраться с вектором и организовать код так, что переходить на сишные массивы не придётся.

Добавлено через 1 минуту
Цитата Сообщение от fasked Посмотреть сообщение
но не в программировании точно.
Ну вот и я так думаю. Если его мнение так сильно разнится с общепринятым то доверять ему не стоит. По этому и разбираюсь с контейнерами
Yandex
Объявления
21.11.2011, 18:07     Производительность операций
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru