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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 55, средняя оценка - 4.71
CEBEP
105 / 105 / 9
Регистрация: 21.03.2010
Сообщений: 437
20.11.2011, 06:34     Производительность операций #1
Не уверен в своих силах для самостоятельной оценки сабжа. Где можно найти информацию о производительности стандартных операций с++ (гуглением не справился, нашел только сравнение реализации на с++, джаве и на нескольких интерпретируемых языках)?
То есть интересует информация плана << : * как 1:15 или <= : == как 25:24... То есть, чрезвычайно интересно знать, какие операции выбирать если есть альтернатива.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LosAngeles
Заблокирован
22.11.2011, 10:38     Производительность операций #121
да собственно вот она, ну так чё там насчёт Производительность операций есть вопросы?
Миниатюры
Производительность операций  
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bers
Заблокирован
22.11.2011, 10:40     Производительность операций #122
Цитата Сообщение от taras atavin Посмотреть сообщение
И где ж такая кнопка?
В студии
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
22.11.2011, 10:43     Производительность операций #123
Цитата Сообщение от taras atavin Посмотреть сообщение
Хороший компилятор оптимизирует x++ до ++x? Эйси. Но всегда ли гарантируется такая оптимизация? ТС продемонстрировал, что это не так.
Я извиняюсь, но ТС к началу разговора не знал про уровни оптимизации компилятора.

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

Цитата Сообщение от taras atavin Посмотреть сообщение
Что то я не вижу здесь эквивалентности.
А как и чем ты компилируешь-то вообще? Не допускаешь такой мысли, что твой компилятор - лох?
LosAngeles
Заблокирован
22.11.2011, 10:49     Производительность операций #124
Цитата Сообщение от fasked Посмотреть сообщение
Я извиняюсь, но ТС к началу разговора не знал про уровни оптимизации компилятора.
хаха! ну значит пора его познакомить с ними!

Тарас, там в студии ещё есть сверху выпадающий список, а в нём пункт Release, хотя вроде ты тусовался в разделе линукса, тебе наверно gcc -O3 и objdump -d роднее будут? Вернись в привычную среду, может тогда и перестанут мерещиться всякие недооптимизации
Bers
Заблокирован
22.11.2011, 10:50     Производительность операций #125
Цитата Сообщение от fasked Посмотреть сообщение
Опять же отметить стоит, что все это также абстрактно, скорость выполнения будет зависит от количества ядер, от приоритетов процесса, от количества кэша и от совершенства алгоритма предсказаний ветвления, от наличия/отсутствия каких-либо инструкций на целевой архетиктуре и так до бесконечности.
Смысл не в том, что бы сказать сколько секунд будит выполняться кусок кода. А в том, что можно точно сказать, что на данной машине данный кусок кода будит работать быстрее, или медленнее другого куска кода в конкретное количество раз.

Естественно, следует понимать, что скорость работы кода, и скорость работы алгоритма - это две большие разницы. И они никак не зависят друг от друга.

Умные люди оптимизируют алгоритмы. Глупые - высокоуровневый код.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
22.11.2011, 11:04     Производительность операций #126
Цитата Сообщение от Bers Посмотреть сообщение
Смысл не в том, что бы сказать сколько секунд будит выполнятся кусок кода. А в том, что можно точно сказать, что на данной машине данный кусок кода будит работать быстрее, или медленнее другого куска кода в конкретное количество раз.
Ну Вы же понимаете, что данная тема будет интересна ну ма-а-а-ксимум как исследовательская работа студента или запись в блоге? Это же несерьезно. Так, прочитать и забыть.
Цитата Сообщение от Bers Посмотреть сообщение
Естественно, следует понимать, что скорость работы кода, и скорость работы алгоритма - это две большие разницы. И они никак не зависят друг от друга.
Так и надо в первую же очередь отталкиваться от асимптотической сложности алгоритма. А уже потом бегать профайлером, который скорее всего (опять же) покажет на операции ввода/вывода, то есть чтения/записи на диск, терминал и т.д.

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

В общем тема неинтересна чуть более, чем полностью, а спорить с настолько непробиваемыми людьми даже неинтересно.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.11.2011, 11:12     Производительность операций #127
Цитата Сообщение от fasked Посмотреть сообщение
И мне смешно читать сообщения о том, как правильно и грамотно надо программировать, от человека, который не знает и не может понять, что такое итератор в C++ и как паттерн вообще. В общем тема неинтересна чуть более, чем полностью, а спорить с настолько непробиваемыми людьми даже неинтересно.
А с чего ты взял, что с двоичным поиском не знаком кто то ещё, кроме тебя?
Bers
Заблокирован
22.11.2011, 11:13     Производительность операций #128
fasked, так то да. И вроде бы мозгами все понимаю, а все равно, нет-нет, а лезут в голову крамольные мысли, типа:
C++
1
2
3
struct A{   A(){ std:: cout<< "TEST\n";}  };
 
struct B: public A{    B():A() {}  }
Догадается компилятор сразу вызвать метод потомка, или будит оверхед операции?
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
22.11.2011, 11:18     Производительность операций #129
Цитата Сообщение от taras atavin Посмотреть сообщение
А с чего ты взял, что с двоичным поиском не знаком кто то ещё, кроме тебя?
Мы ведь уже как-то общались на эту тему - начинать можно отсюда Двоичный поиск
Bers
Заблокирован
22.11.2011, 11:19     Производительность операций #130
ну или вот так:

Класс А реализует методы.

Класс Б отнаследовался от класса А, и имеет точно такие же прототипы, как у класса А.
Причем реализация методов Б - это тупо вызвать внутри себя методы А:

C++
1
2
3
4
5
6
7
8
9
class A
{
    void View() { std::cout << "Test\n"; }
};
 
class B: protected A
{
   void View() { A::View(); }
};

Будит оверхед?
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
22.11.2011, 11:20     Производительность операций #131
Цитата Сообщение от Bers Посмотреть сообщение
а лезут в голову крамольные мысли, типа:
Догадается компилятор сразу вызвать метод потомка, или будит оверхед операции?
В любом случае, не стоит оно того. Если сейчас не догадывается, то в будущем догадается. А лишний геморрой себе зарабатывать ни к чему. Я за читабельность и поддерживаемость кода в любом случае.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.11.2011, 11:23     Производительность операций #132
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
template <class Type> Type *search(Type *Array, int Count, Type Target)
{
 Type *L;
 Type *R;
 Type *B;
 L=Array;
 R=Array+Count-1;
 while (L!=R)
 {
  Count=R-L;
  B=L+Count/2;
  if (*B==Target)
  {
   return B;
  }
  if (*B>Target)
  {
   R=B;
  }
  else
  {
   L=B;
  }
 }
 return NULL;
}
Bers
Заблокирован
22.11.2011, 11:23     Производительность операций #133
Цитата Сообщение от fasked Посмотреть сообщение
В любом случае, не стоит оно того. Если сейчас не догадывается, то в будущем догадается. А лишний геморрой себе зарабатывать ни к чему. Я за читабельность и поддерживаемость кода в любом случае.
Ну лично я рассуждаю так: Я готов принести в жертву скорость работы (тем боле, что потери будут незначительными) ради лучшей читабельности, сопровождаемости, и главное - безопасности.

Но! При всём при этом, я хочу знать, будит ли оверхед, или нет.

Не важно, буду ли я пытаться когда нибудь оптимизировать сам код (архитектурное решение классов и тп), или не буду. Но знать такие вещи я должен.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
22.11.2011, 11:28     Производительность операций #134
Цитата Сообщение от fasked Посмотреть сообщение
Мы ведь уже как-то общались на эту тему - начинать можно отсюда
Теперь прошу объяснить, почему мой шаблон search плох. А он очень плох, совсем не годен.

Добавлено через 2 минуты
Цитата Сообщение от Bers Посмотреть сообщение
(тем боле, что потери будут незначительными
Ну если так, то ещё хорошо. Мне пришлось пожертвовать читабельностью ради того, чтоб прога могла быть выполнена в обозримое время.
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
22.11.2011, 11:29     Производительность операций #135
Цитата Сообщение от taras atavin Посмотреть сообщение
B=L+Count/2;
Кажется вот здесь лучше сделать битовый сдвиг
Цитата Сообщение от taras atavin Посмотреть сообщение
while ((L!=R)
А здесь кажется еще и синтаксическая ошибка

И вообще к чему это? Если Вы пытаетесь мне доказать, что знаете, как реализовывается бинарный поиск, то не утруждайтесь. Мнение о Вас уже давно сформировано и его сложно изменить теперь. В той теме (на которую я дал линк) Вы тоже так рьяно, практически с пеной у рта, отстаивали свое мнение. Почему я теперь должен быть уверенным в том, что Вы понимаете о чем говорите?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2011, 11:31     Производительность операций
Еще ссылки по теме:

Влияет ли на производительность C++
C++ Константы, геттеры/сеттеры и производительность
C++ Производительность CPU, КЕШ, многопоточность

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

Или воспользуйтесь поиском по форуму:
Bers
Заблокирован
22.11.2011, 11:31     Производительность операций #136
Цитата Сообщение от fasked Посмотреть сообщение
Кажется вот здесь лучше сделать битовый сдвиг
Там вообще просится закэшировать константой Count/2
Yandex
Объявления
22.11.2011, 11:31     Производительность операций
Ответ Создать тему
Опции темы

Текущее время: 02:57. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru