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

скорость обработки - C++

Восстановить пароль Регистрация
 
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
31.05.2011, 17:36     скорость обработки #1
Господа програмисты делаю программу и встал такой вопрос-допустим у нас есть такой код
C++
1
2
3
4
5
int a;
a=0;
for ( ; ; ) {
a++ ;
}
Кто из железа отвечает за скорость подсчёта переменной а?
Процесор,оперативка или и то и другое или я вообще ошибаюсь,тогда исправте меня.
Заранее всем огромное спасибо!!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lemegeton
 Аватар для lemegeton
2911 / 1340 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
01.06.2011, 10:03     скорость обработки #2
Оба.

Возможно несколько вариантов реализации инкремента значения в зависимости от огромного количества факторов.
1. Переменная из памяти считывается в регистр процессора, производится её инкремент, значение регистра записывается обратно в память.
2. Увеличивается непосредственно значение в памяти.

В любом случае, операция займет несколько тактов процессора и произойдет запись/чтение ячейки памяти.
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
01.06.2011, 10:33     скорость обработки #3
И вообще, в данном конкретно коде оптимизатор скорее всего выкинет переменную a и ничего увеличиваться вообще не будет.
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
01.06.2011, 17:37  [ТС]     скорость обработки #4
Цитата Сообщение от grizlik78 Посмотреть сообщение
И вообще, в данном конкретно коде оптимизатор скорее всего выкинет переменную a и ничего увеличиваться вообще не будет.
А вот тут позвольте с вами не согласиться,вопервых работа программы будет не бесконечна,а значит всё будет подсчитанно,во вторых вы себе хотя бы можете представить какое число должно присваиваться переменной,что бы компьютер не смог приплюсовать к нему единицу,и сколько должна по времени работать программа!!!
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.06.2011, 17:45     скорость обработки #5
Цитата Сообщение от Игорь с++ Посмотреть сообщение
А вот тут позвольте с вами не согласиться,вопервых работа программы будет не бесконечна,а значит всё будет подсчитанно,во вторых вы себе хотя бы можете представить какое число должно присваиваться переменной,что бы компьютер не смог приплюсовать к нему единицу,и сколько должна по времени работать программа!!!
Цикл бесконечный, разве что программа с ошибкой вылетит(в этом не уверен)
А число, большее чем значение int наберется очень быстро, намного меньше чем за секунду. Но при этом она просто станет равной минимальному значению int, если я не ошибаюсь.

Добавлено через 3 минуты
Таки нет, был неправ, от нуля секунды 2-3 считало=\
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
01.06.2011, 17:49     скорость обработки #6
Цитата Сообщение от Игорь с++ Посмотреть сообщение
А вот тут позвольте с вами не согласиться,вопервых
Да тут не со мной надо не соглашаться, а с компилятором. G++ генерирует вот такой код
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    .file   "spd.cpp"
    .text
    .p2align 4,,15
.globl main
    .type   main, @function
main:
.LFB0:
    .cfi_startproc
    .p2align 4,,10
    .p2align 3
.L2:
    jmp .L2
    .cfi_endproc
.LFE0:
    .size   main, .-main
    .ident  "GCC: (GNU) 4.5.1 20101130 (ALT Linux 4.5.1-alt8)"
    .section    .note.GNU-stack,"",@progbits
Тут нет ничего, кроме бесконечного цикла.
Даже если сделать цикл конечным, то оптимизатор всё-равно всё выкинет. Даже цикл
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.06.2011, 17:53     скорость обработки #7
Странно... Я поставил условие, а оптимизация g++ это самое условие убила>_>
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
diagon@shadeware:~$ cat gean.cpp
#include <iostream>
int main(){
    int a=0;
    for (;a>=0;)
        a++;
    std::cout << a << std::endl;
    return 0;
}
diagon@shadeware:~$ g++ gean.cpp
diagon@shadeware:~$ time ./a.out
-2147483648
 
real    0m9.449s
user    0m9.385s
sys 0m0.000s
diagon@shadeware:~$ g++ gean.cpp -O3
diagon@shadeware:~$ time ./a.out
^C
 
real    1m1.980s
user    1m1.112s
sys 0m0.032s
diagon@shadeware:~$
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
01.06.2011, 17:56  [ТС]     скорость обработки #8
господа о чём вы говорите,во первых только что проверил сам на dev c++ 4.9.9.2 задал переменной а чило 999999999,и сделал плюс 1,ждал минуту программа осталась работать!!!
Во вторы я же сказал программа не вечная,время работы 30 секунд!!!

Добавлено через 1 минуту
вот текст пронраммы
C++
1
2
3
4
5
6
7
8
9
10
11
#include<iostream>
using namespace std;
int main()
{
    int a;
    a=999999999;
    for(;;){
            a++;
            }
            return 0;
            }
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
01.06.2011, 17:58     скорость обработки #9
ждал минуту программа осталась работать!!!
Во вторы я же сказал программа не вечная,время работы 30 секунд!!!
Вы сами себе противоречите.
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
01.06.2011, 17:59     скорость обработки #10
Цитата Сообщение от Игорь с++ Посмотреть сообщение
господа о чём вы говорите,во первых только что проверил сам на dev c++ 4.9.9.2 задал переменной а чило 999999999,и сделал плюс 1,ждал минуту программа осталась работать!!!
Мог бы и час прождать, если цикл такой, как в первом сообщении
Цитата Сообщение от Игорь с++ Посмотреть сообщение
Во вторы я же сказал программа не вечная,время работы 30 секунд!!!
А в этом месте не понял. Программа же работала как-минимум минуту?
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
01.06.2011, 18:03  [ТС]     скорость обработки #11
в чём?
ту прграмму которую я привёл последнею это была пробная программа,подтверждения моего высказывания или опровержение,а саму программу я кстати сделал и всё работает на ура!!!

Добавлено через 3 минуты
Цитата Сообщение от grizlik78 Посмотреть сообщение
Мог бы и час прождать, если цикл такой, как в первом сообщении
А в этом месте не понял. Программа же работала как-минимум минуту?
эта программа которую я привёл,а не та которую я сделал(короче говоря,последняя мною преведённая программа работала минуту,а реальную которую я делал время её работы ограниченна на 30 секунд).
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
01.06.2011, 18:09     скорость обработки #12
Что ж, попытаюсь донести свою мысль ещё раз: использование оптимизатора может привести к тому, что цикл вообще пропадёт. И в случае g++ это произойдёт практически наверняка.
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
01.06.2011, 18:23  [ТС]     скорость обработки #13
а вы название темы читали?
Объясняю как работает реальная программа-создаётся бесконечный цикл переменной а присвоенно значение 0,затем внутри цикла создаётся пустой цикл который считает до 90000000,затем программа возвращается и плюсует к переменной а ещё еденицу,время работы программы 30 секунд,и в завмсммости от набранного числа переменной "а" иницилизируется скорость обработки процесором.
grizlik78
Эксперт С++
 Аватар для grizlik78
1884 / 1416 / 102
Регистрация: 29.05.2011
Сообщений: 2,961
01.06.2011, 18:26     скорость обработки #14
Читал, разумеется. И именно поэтому обращаю внимание на то, что такой способ оценки быстродействия очень ненадёжный. Он сильно зависит от того, используется ли оптимизатор и какой. Есть же системные таймеры для этого.
Игорь с++
 Аватар для Игорь с++
429 / 452 / 15
Регистрация: 26.01.2011
Сообщений: 2,029
01.06.2011, 18:29  [ТС]     скорость обработки #15
Цитата Сообщение от grizlik78 Посмотреть сообщение
Читал, разумеется. И именно поэтому обращаю внимание на то, что такой способ оценки быстродействия очень ненадёжный. Он сильно зависит от того, используется ли оптимизатор и какой. Есть же системные таймеры для этого.
прошу прощение,какой бы оптимизатор не использовался,когда запускае .ехе файл,набранное количество переменной "а" будет зависить от скорости процесора.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2011, 11:24     скорость обработки
Еще ссылки по теме:

C++ Как задать скорость обработки операций в потоке std::thread?
Алгоритм обработки строки C++

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

Или воспользуйтесь поиском по форуму:
lemegeton
 Аватар для lemegeton
2911 / 1340 / 133
Регистрация: 29.11.2010
Сообщений: 2,720
02.06.2011, 11:24     скорость обработки #16
Цитата Сообщение от Игорь с++ Посмотреть сообщение
прошу прощение,какой бы оптимизатор не использовался,когда запускае .ехе файл,набранное количество переменной "а" будет зависить от скорости процесора.
Вообще-то маловероятно, если оптимизатор уберет саму переменную "а".
Или, например, превратит код
C++
1
for(a = 1; a < 1000; ++a);
в
C++
1
a = 1000;
Минус туева хуча тактов же?

grizlik78 прав. Не надо таким образом пытаться оценить производительность. Ну если только в попугаях для совершенно конкретного процесса системы. Оптимизаторы сейчас очень вумные пошли.

Есть куча стандартных способов замера производительности системы да и процесса. Если все-таки решите идти другим путем, почитайте про volatile.
Yandex
Объявления
02.06.2011, 11:24     скорость обработки
Ответ Создать тему
Опции темы

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