Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.74/72: Рейтинг темы: голосов - 72, средняя оценка - 4.74
108 / 108 / 23
Регистрация: 21.03.2010
Сообщений: 445

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

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

Студворк — интернет-сервис помощи студентам
Не уверен в своих силах для самостоятельной оценки сабжа. Где можно найти информацию о производительности стандартных операций с++ (гуглением не справился, нашел только сравнение реализации на с++, джаве и на нескольких интерпретируемых языках)?
То есть интересует информация плана << : * как 1:15 или <= : == как 25:24... То есть, чрезвычайно интересно знать, какие операции выбирать если есть альтернатива.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.11.2011, 06:34
Ответы с готовыми решениями:

Вставить между цифрами 1, 2,..., 8, 9 в данном порядке, знак одной из 4-х арифметических операций так, чтобы результат восьми послед-х операций =100
Вычисления проводятся слева-направо, ни одна операция не имеет приоритета. Добавлено через 2 минуты задача вынесла моск, прошу помочь

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

Заменить в данной строке знаки арифметических операций названиями противоположных им операций
Заменить в данной строке знаки арифметических операций названиями противоположных им операций.

135
Заблокирован
22.11.2011, 10:38
Студворк — интернет-сервис помощи студентам
да собственно вот она, ну так чё там насчёт Производительность операций есть вопросы?
Миниатюры
Производительность операций  
0
Заблокирован
22.11.2011, 10:40
Цитата Сообщение от taras atavin Посмотреть сообщение
И где ж такая кнопка?
В студии
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
22.11.2011, 10:43
Цитата Сообщение от taras atavin Посмотреть сообщение
Хороший компилятор оптимизирует x++ до ++x? Эйси. Но всегда ли гарантируется такая оптимизация? ТС продемонстрировал, что это не так.
Я извиняюсь, но ТС к началу разговора не знал про уровни оптимизации компилятора.

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

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

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

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

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

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

В общем тема неинтересна чуть более, чем полностью, а спорить с настолько непробиваемыми людьми даже неинтересно.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
22.11.2011, 11:12
Цитата Сообщение от fasked Посмотреть сообщение
И мне смешно читать сообщения о том, как правильно и грамотно надо программировать, от человека, который не знает и не может понять, что такое итератор в C++ и как паттерн вообще. В общем тема неинтересна чуть более, чем полностью, а спорить с настолько непробиваемыми людьми даже неинтересно.
А с чего ты взял, что с двоичным поиском не знаком кто то ещё, кроме тебя?
0
Заблокирован
22.11.2011, 11:13
fasked, так то да. И вроде бы мозгами все понимаю, а все равно, нет-нет, а лезут в голову крамольные мысли, типа:
C++
1
2
3
struct A{   A(){ std:: cout<< "TEST\n";}  };
 
struct B: public A{    B():A() {}  }
Догадается компилятор сразу вызвать метод потомка, или будит оверхед операции?
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
22.11.2011, 11:18
Цитата Сообщение от taras atavin Посмотреть сообщение
А с чего ты взял, что с двоичным поиском не знаком кто то ещё, кроме тебя?
Мы ведь уже как-то общались на эту тему - начинать можно отсюда Двоичный поиск
0
Заблокирован
22.11.2011, 11:19
ну или вот так:

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

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

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(); }
};

Будит оверхед?
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
22.11.2011, 11:20
Цитата Сообщение от Bers Посмотреть сообщение
а лезут в голову крамольные мысли, типа:
Догадается компилятор сразу вызвать метод потомка, или будит оверхед операции?
В любом случае, не стоит оно того. Если сейчас не догадывается, то в будущем догадается. А лишний геморрой себе зарабатывать ни к чему. Я за читабельность и поддерживаемость кода в любом случае.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
22.11.2011, 11:23
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;
}
0
Заблокирован
22.11.2011, 11:23
Цитата Сообщение от fasked Посмотреть сообщение
В любом случае, не стоит оно того. Если сейчас не догадывается, то в будущем догадается. А лишний геморрой себе зарабатывать ни к чему. Я за читабельность и поддерживаемость кода в любом случае.
Ну лично я рассуждаю так: Я готов принести в жертву скорость работы (тем боле, что потери будут незначительными) ради лучшей читабельности, сопровождаемости, и главное - безопасности.

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

Не важно, буду ли я пытаться когда нибудь оптимизировать сам код (архитектурное решение классов и тп), или не буду. Но знать такие вещи я должен.
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
22.11.2011, 11:28
Цитата Сообщение от fasked Посмотреть сообщение
Мы ведь уже как-то общались на эту тему - начинать можно отсюда
Теперь прошу объяснить, почему мой шаблон search плох. А он очень плох, совсем не годен.

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

И вообще к чему это? Если Вы пытаетесь мне доказать, что знаете, как реализовывается бинарный поиск, то не утруждайтесь. Мнение о Вас уже давно сформировано и его сложно изменить теперь. В той теме (на которую я дал линк) Вы тоже так рьяно, практически с пеной у рта, отстаивали свое мнение. Почему я теперь должен быть уверенным в том, что Вы понимаете о чем говорите?
0
Заблокирован
22.11.2011, 11:31
Цитата Сообщение от fasked Посмотреть сообщение
Кажется вот здесь лучше сделать битовый сдвиг
Там вообще просится закэшировать константой Count/2
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.11.2011, 11:31
Помогаю со студенческими работами здесь

Доказать равенства, используя свойства операций над множествами и определения операций
Доказать равенства, используя свойства операций над множествами и определения операций. Дальше как не пробовал, не могу привести к...

Доказать равенства, используя свойства операций над множествами и определения операций
Доказать равенства, используя свойства операций над множествами и определения операций. A\subseteq C, B\subseteq D \Rightarrow A\times...

Сколько нужно провести операций, чтобы 13 операций подряд были успешными?
Вероятность успешной операции = 63% Сколько нужно провести операций, чтобы 13 операций подряд были успешными???

Доказать равенства, используя свойства операций над множествами и определения операций
Доказать равенства, используя свойства операций над множествами и определения операций. б) Ax(B\C)=(AxB)\(AxC). Почему график не...

Напечатать все знаки арифметических операций и операций отношения
Напечатать все знаки арифметических операций и операций отношения,которые входят в заданый массив и все знаки арифметических операций и...


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

Или воспользуйтесь поиском по форуму:
136
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru