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

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

Войти
Регистрация
Восстановить пароль
 
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
#1

Замерить время вычислений - C++

20.01.2014, 19:03. Просмотров 1082. Ответов 11
Метки нет (Все метки)

Добрый вечер.
Есть ли способ замерить продолжительность процесса вычислений, детали которых скрыты?
Есть объект, который производит продолжительное вычисление, и нужно как-то вывести это на прогресс-бар. Никакие промежуточные этапы расчетов, куда можно было бы "вклиниться" недоступны.
Может быть можно это как-то по загруженности CPU вывести или еще что-то. (Решение через Qt приветствуются )
Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2014, 19:03     Замерить время вычислений
Посмотрите здесь:

Замерить время? - C++
Подскажите пожалуйста, как замерить время выполненияи нструкции вплоть до наносекунд на Borland C++ 3.1 и только на етом компиляторе....

как с точностью до микросекунд замерить время - C++
Товарищи, подскажите, как с точностью до микросекунд замерить время выполнения некоторой функции?

Как замерить время работы функции? - C++
функция time не подходит, потому что нужна точность хотя бы до 1 милисекунды.

OpenMP. Возможность неблокировки UI на время вычислений - C++
насколько я понял OpenMP хорошо распараллеливает те участки программы, где ведется обработка больших массивов данных. можно ли как нибудь...

Организация вычислений во время ввода данных - C++
Дано натуральное число. Верно ли, что произведение его цифр меньше а, а само число делить на в?

Организация вычислений во время ввода данных - C++
Известны оценки каждого из учеников класса по физике. Посчитать количество пятерок, количество четверок, количество троек и количество...

Организация вычислений во время ввода данных - C++
Известны оценки каждого из учеников класса по физике. Посчитать количество пятерок, количество четверок, количество троек и количество...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.01.2014, 19:15     Замерить время вычислений #2
Цитата Сообщение от gromo Посмотреть сообщение
Есть ли способ замерить продолжительность процесса вычислений, детали которых скрыты?
Для того, чтобы замерить время вычислений, детали вычислений не нужны. Нужно знать точки начала и конца вычислений. Есть такие?
MrGluck
Модератор
Эксперт CЭксперт С++
7000 / 4171 / 595
Регистрация: 29.11.2010
Сообщений: 11,074
20.01.2014, 19:19     Замерить время вычислений #3
Существует std::chrono (C++11) или наследие С - time_t, time(0), ...
Пример использования chrono:
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
#include <iterator>
#include <chrono>
 
using std::chrono::duration_cast;
using std::chrono::microseconds;
using std::chrono::steady_clock;
 
int main(){
    std::vector<int> vec(10000000);
    steady_clock::time_point start = steady_clock::now();
    auto max = *std::max_element(vec.begin(),vec.end());
    vec.erase(
        std::remove_if(
            vec.begin(), vec.end(),
            std::bind2nd(
                std::equal_to<int>(), max)
            )
        ,
        vec.end()
    );
    steady_clock::time_point end = steady_clock::now();
 
    std::cout << "First: "
              << duration_cast<microseconds>(end - start).count() << std::endl;
 
    // *************************************************************************
    std::vector<int> vec2(10000000);
    start = steady_clock::now();
    vec2.erase(
        std::remove_if(
            vec2.begin(), vec2.end(),
            std::bind2nd(
                std::equal_to<int>(),*std::max_element(vec2.begin(),vec2.end())
            )
        ),
        vec2.end()
    );
    end = steady_clock::now();
 
    std::cout << "Second: "
              << duration_cast<microseconds>(end - start).count() << std::endl;
}
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
20.01.2014, 19:22  [ТС]     Замерить время вычислений #4
Цитата Сообщение от alsav22 Посмотреть сообщение
Для того, чтобы замерить время вычислений, детали вычислений не нужны
Простите, я не так выразился. Нужно вывести на прогресс-бар, например, в процентном соотношении - сколько осталось еще до конца. Все что я знаю - так это найти какое-нибудь повторяющееся событие в процессе вычислений и от него уже скакать. Но этот процесс скрыт.
MrGluck
Модератор
Эксперт CЭксперт С++
7000 / 4171 / 595
Регистрация: 29.11.2010
Сообщений: 11,074
20.01.2014, 19:27     Замерить время вычислений #5
gromo, можно вычислить процентное соотношение от количества итераций, если они схожи по сложности.
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
20.01.2014, 19:34  [ТС]     Замерить время вычислений #6
Цитата Сообщение от MrGluck Посмотреть сообщение
можно вычислить процентное соотношение от количества итераций, если они схожи по сложности
В том то и дело, что "итерация" одна - обработка большого файла.
Возможно в будущем нужна будет возможность обработки нескольких файлов, тогда проблем не будет. А вот как с одним - не знаю.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.01.2014, 19:36     Замерить время вычислений #7
Цитата Сообщение от gromo Посмотреть сообщение
Но этот процесс скрыт.
И насколько скрыт? Кода нет?

Добавлено через 1 минуту
Цитата Сообщение от gromo Посмотреть сообщение
обработка большого файла
Код обработки есть? В чём заключается обработка?
MrGluck
Модератор
Эксперт CЭксперт С++
7000 / 4171 / 595
Регистрация: 29.11.2010
Сообщений: 11,074
20.01.2014, 19:39     Замерить время вычислений #8
Цитата Сообщение от gromo Посмотреть сообщение
В том то и дело, что "итерация" одна - обработка большого файла.
А можно сказать, что количество обработанных строк ко всем примерно соотносится как время обработки этих же строк к общему времени?
Вообщем я клоню к тому, чтобы узнать размер файла и выводить процентное соотношение обработанного размера.

Добавлено через 42 секунды
Все равно пока что условие размыто - что делаем со строками? Сейчас это сферический кот в вакууме.
gromo
370 / 269 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
20.01.2014, 19:46  [ТС]     Замерить время вычислений #9
Цитата Сообщение от alsav22 Посмотреть сообщение
Код обработки есть? В чём заключается обработка?
C++
1
2
3
4
5
6
7
8
9
10
// . . .
std::string line;
while( std::getline(is, line) )  // Построчно считываем числа
          os << processNumber(line, srcBase, dstBase, format) << "\n"; // и переводим их в другую сист. счисления. 
 
// processNumber() очень продолжительная операция
 
        is.close();
        os.close();
// . . .
Добавлено через 2 минуты
Это уже код функции-члена конвертирующего класса и туда подмешивать замеряющий код а потом еще и как-нибудь возвращать его - не есть хорошо. Убьем интерфейс функции, класса, да и сложность увеличится. Не вариант короче...
TheFox
131 / 67 / 10
Регистрация: 13.05.2013
Сообщений: 438
20.01.2014, 19:52     Замерить время вычислений #10
Выводи прогресс бар как попало, и виси на 99% процентах до окончания вычислений
MrGluck
20.01.2014, 19:55
  #11

Не по теме:

Цитата Сообщение от TheFox Посмотреть сообщение
Выводи прогресс бар как попало, и виси на 99% процентах до окончания вычислений
Windows way

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.01.2014, 19:58     Замерить время вычислений
Еще ссылки по теме:

Не происходит перерисовка окна во время длительных вычислений - C++
При написание программы с использованиям Windows Forms возникла следующая проблема: окно программы вовремя выполнения расчета не...

Организация вычислений во время ввода данных программа С++ - C++
Помогите написать программу в С++ Дано натуральное число, в котором все цифры различны. Определить порядковый номер его максимальной...

Как замерить длительность выполнения кода? - C++
Нужно замерить длительность выполнения кода. Как?

Погрешность вычислений - C++
Читаю книгу Дейтелов &quot;Как программировать на С++&quot;, попалась следующая задача, где нужно вводить кол-во бензина, пройденный путь, исходя из...

Распараллеливание вычислений - C++
Здравствуйте. Может кто сможет подсказать как мне решить следующую задачу: необходимо распараллелить следующий последовательный код:...


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.01.2014, 19:58     Замерить время вычислений #12
Если бы очень нужно было, то посчитал бы количество строк в файле, а после обработки каждой строки сделал бы высылку сигнала.
Yandex
Объявления
20.01.2014, 19:58     Замерить время вычислений
Ответ Создать тему
Опции темы

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