Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.91/34: Рейтинг темы: голосов - 34, средняя оценка - 4.91
1 / 1 / 0
Регистрация: 22.12.2012
Сообщений: 160
1

Замер времени выполнения программного кода

13.06.2014, 17:29. Показов 6344. Ответов 37
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как замерить время выполнения этого программного кода (в секундах) и вывести его на экран?
Как провести оптимизацию, чтобы время сократилось (хоть на какую-нибудь долю)?
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
27
28
29
30
//Вычисление скалярного произведения векторов
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    int i;
    double a[3];
    double b[3];
    double res=0;
 
    cout<<"a = ";
    for(i=0;i<3;i++) 
    cin>>a[i];
 
    cout<<"b = ";
    for(i=0;i<3;i++) 
    cin>>b[i];
 
    for(i=0;i<3;i++) 
    res+=a[i]*b[i];
 
    cout<<"a.b = "<<res<<endl;
 
    system("PAUSE");
    return EXIT_SUCCESS;
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2014, 17:29
Ответы с готовыми решениями:

Замер времени выполнения функции на ядре
Здравствуйте! Не могу понять почему не считает время выполнения алгоритма на ядре какие бы я...

Замер времени(тактов процессора) выполнения процедуры
Почему то замер дает отрицательный результат (при просмотре в режиме дебаг) и на выходе 0 в итоге....

Замер выполнения отрезка кода в микросекундах
Подскажите, в с++ 11 #include &lt;chrono&gt; есть возможность ставить на паузу код в различной мере, в...

Уменьшение времени выполнения кода
//Помогите ускорить код #include &lt;iostream&gt; #include &lt;vector&gt; #include &lt;algorithm&gt; using...

37
7789 / 6556 / 2984
Регистрация: 14.04.2014
Сообщений: 28,661
13.06.2014, 19:07 2
time() иcпользуй для получения времени в начале программы и в конце, потом вычисли разницу.
1
1 / 1 / 0
Регистрация: 22.12.2012
Сообщений: 160
14.06.2014, 12:16  [ТС] 3
nmcf, может подскажите как это прописать?
0
347 / 292 / 37
Регистрация: 23.03.2012
Сообщений: 838
14.06.2014, 12:26 4
C++
1
2
for(i=0;i<3;i++) 
    res+=a[i]*b[i];
Что тут оптимизировать?
0
1 / 1 / 0
Регистрация: 22.12.2012
Сообщений: 160
14.06.2014, 12:32  [ТС] 5
Nekto, просто нужно чтобы замер времени выдал 2 разных результата, как будто после оптимизации время сократилось. Для курсовой.
0
7789 / 6556 / 2984
Регистрация: 14.04.2014
Сообщений: 28,661
14.06.2014, 12:50 6
Лучший ответ Сообщение было отмечено Аника как решение

Решение

Примерно так:
C++
1
2
3
4
5
time_t t1, t2;
time(&t1);
...
time(&t2);
double seconds = difftime(t2, t1);
И подключить <ctime>.
2
377 / 228 / 79
Регистрация: 24.11.2009
Сообщений: 695
14.06.2014, 13:41 7
Лучший ответ Сообщение было отмечено Аника как решение

Решение

google:> rdtsc

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
using namespace std;
static inline unsigned long long int tick() 
{
unsigned long long int d;
__asm__ __volatile__ ("rdtsc" : "=A" (d) );
return d;
}
 
int main()
{
    unsigned long long int a = 0;
    unsigned long long int b = 0;
    a=tick();
   //измеряемый код
    b=tick();
    cout<<b-a<<endl;
    return 0;
}
1
1 / 1 / 0
Регистрация: 22.12.2012
Сообщений: 160
14.06.2014, 22:14  [ТС] 8
Vladimir., а в чём измеряется длительность?
0
Заблокирован
14.06.2014, 22:27 9
Аника, зависит от того, что вы должны оптимизировать. Длительность адекватно тут не измерить - все зависит от скорости ввода данных. Разве что перестроить программу:
C++
1
2
3
4
5
6
7
8
9
10
11
12
    double a[3];
    double b[3];
    double res=0;
    for(int i=0;i<3;i++) {
        cout<<"a ["<<i<<"]"<<endl;
        cin>>a[i];
        cout<<"b ["<<i<<"]"<<endl;
        cin>>b[i];
        res+=a[i]*b[i];
    }
 
    cout<<"a.b = "<<res<<endl;
Оптимизация сомнительная - теперь ввод данных не такой удобный. Но в таком случае, можно вообще не использовать массивы:

C++
1
2
3
4
5
6
7
8
9
10
11
12
    double a;
    double b;
    double res=0;
    for(int i=0;i<3;i++) {
        cout<<"a ["<<i<<"]"<<endl;
        cin>>a;
        cout<<"b ["<<i<<"]"<<endl;
        cin>>b;
        res+=a*b;
    }
 
    cout<<"a.b = "<<res<<endl;
Теоретически время должно измениться.
0
1 / 1 / 0
Регистрация: 22.12.2012
Сообщений: 160
14.06.2014, 22:34  [ТС] 10
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
зависит от того, что вы должны оптимизировать
Ev_Hyper, я уже писала, что оптимизировать не обязательно. Главное - чтобы замеренное время хоть немного изменилось.
Цитата Сообщение от Аника Посмотреть сообщение
просто нужно чтобы замер времени выдал 2 разных результата, как будто после оптимизации время сократилось. Для курсовой.
0
7789 / 6556 / 2984
Регистрация: 14.04.2014
Сообщений: 28,661
14.06.2014, 22:37 11
Судя про описанию, у rdtsc слишком много ограничений. На него можно рассчитывать, только на компьютере без ОС и всего прочего.
Время у тебя в любом случае не будет совпадать, ты же не станешь постоянно вводить данные за одно и то же время.
0
1 / 1 / 0
Регистрация: 22.12.2012
Сообщений: 160
14.06.2014, 22:43  [ТС] 12
Цитата Сообщение от nmcf Посмотреть сообщение
только на компьютере без ОС и всего прочего
А что, в противном случае вычисления Rdtsc будут не корректны?
0
7789 / 6556 / 2984
Регистрация: 14.04.2014
Сообщений: 28,661
14.06.2014, 22:45 13
Я не знаю, что там будет. Вот почитай сама: http://ru.wikipedia.org/wiki/Rdtsc
Чем тебя time() не устраивает, тебе же секунды нужны. А rdtsc - это счётчик тактов, с более высоким разрешением.
0
1 / 1 / 0
Регистрация: 22.12.2012
Сообщений: 160
14.06.2014, 22:47  [ТС] 14
Цитата Сообщение от nmcf Посмотреть сообщение
Вот почитай сама: http://ru.wikipedia.org/wiki/Rdtsc
Читала.
Цитата Сообщение от nmcf Посмотреть сообщение
тебе же секунды нужны
Да, нужны секунды. Но в формате 0,0.... . А не просто 0.
Цитата Сообщение от nmcf Посмотреть сообщение
Чем тебя time() не устраивает
Оба варианта замера работают корректно.
0
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
14.06.2014, 22:48 15
Цитата Сообщение от Аника Посмотреть сообщение
Как замерить время выполнения этого программного кода (в секундах) и вывести его на экран?
Просто печатай "0 секунд", не ошибешься, инфа - 100%
1
223 / 213 / 80
Регистрация: 26.04.2013
Сообщений: 972
14.06.2014, 22:56 16
а у меня вопрос: а зачем 2 ретурна?
Цитата Сообщение от Аника Посмотреть сообщение
C++
1
2
return EXIT_SUCCESS;
return 0;
для оптимизации кода можно один убрать...
1
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
14.06.2014, 22:56 17
Хочешь чтобы выдавало разные результаты?
В первом варианте вбивай числа через консоль,в другом в самом коде.
1
1 / 1 / 0
Регистрация: 22.12.2012
Сообщений: 160
14.06.2014, 22:58  [ТС] 18
S_el, идея неплохая. Но к курсовому обязательно прилагать скрины.
0
7789 / 6556 / 2984
Регистрация: 14.04.2014
Сообщений: 28,661
14.06.2014, 23:01 19
Есть ещё GetTickCount() в WinAPI, выдаёт миллисекунды.
0
1 / 1 / 0
Регистрация: 22.12.2012
Сообщений: 160
14.06.2014, 23:04  [ТС] 20
Цитата Сообщение от nmcf Посмотреть сообщение
в WinAPI
Это мне не поможет.
0
14.06.2014, 23:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.06.2014, 23:04
Помогаю со студенческими работами здесь

Определение времени выполнения кода
Нужно определить сколько выполняется тот или иной цикл, подскажите поз, как это сделать

Сравнение времени выполнения кода на C, C++ и C#: как доказать какой язык производительнее?
Всем привет. Возникла проблема. Надо произвести сравнение производительности данных языков в...

Замер времени
Работает через раз. #include &lt;conio.h&gt; #include &lt;iostream&gt; #include &lt;time.h&gt; #include...

Осуществить замер времени for и while
Здравствуйте! Условие задачи: Написать программу выводящее на экран любое текстовое сообщение...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru