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

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

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

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

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

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

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

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

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

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

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

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
21.11.2011, 18:30 #46
Кстати, CEBEP, как ты вообще измеряешь время исполнения отдельных операторов? Ведь без точного времени исполнения непосредственно сравниваемых операторов нельзя получить коэффициенты.
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
21.11.2011, 18:31 #47
Bers, Есть реаллок. Ну если одним куском памяти примерно одинаковая скорость будет.
C++
1
2
3
4
5
6
7
8
   auto now = chrono::time_point_cast<chrono::milliseconds>(chrono::system_clock::now());
   std::vector<int> vec(size);
   for (size_t i = 0; i < size; ++i)
   {
      vec[i] = i;
   }
   std::cout << "Vector time: " << (chrono::time_point_cast<chrono::milliseconds>(chrono::system_clock::now())
            - now).count() << std::endl;
forever@pterois:~/My_pro1/cpp_pro$ ./file
Vector time: 4
Array time: 3
Pointer time: 1
0
Bers
Заблокирован
21.11.2011, 18:32 #48
Цитата Сообщение от ForEveR Посмотреть сообщение
Bers, Есть реаллок. Ну если одним куском памяти примерно одинаковая скорость будет.
но если примерно одинаковая скорость будит, значит вектор работает примерно одинакова
0
CEBEP
106 / 106 / 9
Регистрация: 21.03.2010
Сообщений: 440
21.11.2011, 18:35  [ТС] #49
Цитата Сообщение от taras atavin Посмотреть сообщение
од C++
x*=2;
медленнее, чем
x+=x;
а если отчебучить что-нибудь типа x = x << 1? Я к тому, что просто список что быстрее а что нет и так ясен - я расставил операции в эксперименте так, что всегда отношение или больше или близко к 1 с первого раза. Хочется знать именно отношение

Цитата Сообщение от taras atavin Посмотреть сообщение
Итераторы бывают разные.
Да, я видел в официальных источниках упоминания о том, что иногда они - просто T*, а иногда - вспомогательный класс. Дело в том, что мы практически наверняка будем компилировать всё на VisualStudio ещё очень долгое время, знание того, как поведёт себя именно она - в принципе достаточно. Да и тема такая, что для всех компиляторов её не исчерпать да и вряд ли это разумно.
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
21.11.2011, 18:35 #50
Цитата Сообщение от Сыроежка Посмотреть сообщение
То есть поднятый вами вопрос и то, как вы подощли к его решению, не представляет никакого интереса для профессиональных программистов..
Этим ты показал свой непрофессионализм. Вопрос как раз актуален при ручной оптимизации, сомнителен же только подход.
0
fasked
Эксперт С++
4936 / 2516 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
21.11.2011, 18:36 #51
Цитата Сообщение от CEBEP Посмотреть сообщение
что-нибудь типа x = x << 1
Ну что же Вы так... временная копия же создается
C
1
x <<= 1;
0
Bers
Заблокирован
21.11.2011, 18:37 #52
Цитата Сообщение от fasked Посмотреть сообщение
Некрасиво же
Просто есть два типа людей:

1. Первые, если нужно увеличить производительность, находят самые упоротые алгоритмы, и заменяют их на более быстрые.

2. Вторые, вместо индексов массивов начинают юзать указатели, а вместо i++ писать ++i


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

У вторых ничего не получается в принципе. Потому что вся эта хрень - экономия на спичках.
0
CEBEP
106 / 106 / 9
Регистрация: 21.03.2010
Сообщений: 440
21.11.2011, 18:38  [ТС] #53
Цитата Сообщение от taras atavin Посмотреть сообщение
время исполнения отдельных операторов?
кладу в а время перед исполнением первого, исполняю первый, сразу после кладу время в b, потом выполняю второй, кладу время в c. теперь b - a = время выполнения первого, c - b = второго.
0
LosAngeles
Заблокирован
21.11.2011, 18:39 #54
Цитата Сообщение от taras atavin Посмотреть сообщение
x=a*b+a*d;
медленее, чем
x=a*(b+d);
только без оптимизации разумеется, в дебаг версии да, на то оно и дебаг, компилятор прямолинеен. С -O3 и это утверждение будет неверным разумеется, а скорее всего и с -О1
Вобщем всё что ты написал неверно
0
CEBEP
106 / 106 / 9
Регистрация: 21.03.2010
Сообщений: 440
21.11.2011, 18:41  [ТС] #55
Цитата Сообщение от Bers Посмотреть сообщение
экономия на спичках
первый пункт неиллюзорно сложен а книжки по математическим методам в нашей теме уже прочитаны. выдумывать своё - чуть менее чем защитить кандидатскую.
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
21.11.2011, 18:44 #56
Цитата Сообщение от Paporotnik Посмотреть сообщение
и вообще странное противопоставление сложения и умножения...
Это ты странный.
C++
1
x+x
и
C++
1
x*2
- дают один результат за разное время, и выгоднее
C++
1
x+x
, чем
C++
1
x*2
. Но
C++
1
x+x+x
и
C++
1
x*3
тоже дают один результат, а выгоднее
C++
1
x*3
, чем
C++
1
x+x+x
.
0
Сыроежка
Заблокирован
21.11.2011, 18:47 #57
Цитата Сообщение от taras atavin Посмотреть сообщение
Этим ты показал свой непрофессионализм. Вопрос как раз актуален при ручной оптимизации, сомнителен же только подход.
Я вам советую сначала почитать Герба Саттера "Решение сложных задач на С++", где он как раз говорит про оптимизацию и проходится по таким "профессионалам", как вы, которые занимаются "ручной оптимизацией". Я могу вам на ушко сказать, где "ручная оптимизация" может вам пригодиться!
0
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
21.11.2011, 18:48 #58
Цитата Сообщение от ForEveR Посмотреть сообщение
Точно не имеющих?
Ну ка найди в бусте решение для системы 1000*1000. Так вот, это ещё малыш. Я решал 17000*17000.
1
Bers
Заблокирован
21.11.2011, 18:48 #59
Цитата Сообщение от CEBEP Посмотреть сообщение
первый пункт неиллюзорно сложен
Не нужно изобретать новые паттерны-алгоритмы.

Нужно просто поменять кусок упоротой архитектуры на другой, более быстрый.
Смотришь, какой кусок программы выполняется дольше всех. и думаешь, как его можно оптимизировать. Например, скорость теряется из-за многочисленных левых расчетов - можно на таком участке закэшировать часть данных.
1
taras atavin
Ушёл с форума.
3569 / 1753 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
21.11.2011, 18:50 #60
Цитата Сообщение от Сыроежка Посмотреть сообщение
Однако в современных микропроцессоров есть векторные модули, которые делают операции умножения очень быстрыми, что не имеет никакого смысла заменять их серией сложений.
Серией? Или заменять удвоение одним сложением? А если выбор между
C++
1
x-a*b+a*c;
и
C++
1
x=a*(b+c);
?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2011, 18:50
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
21.11.2011, 18:50
Ответ Создать тему
Опции темы

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