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

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

Восстановить пароль Регистрация
 
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
20.01.2014, 19:03     Замерить время вычислений #1
Добрый вечер.
Есть ли способ замерить продолжительность процесса вычислений, детали которых скрыты?
Есть объект, который производит продолжительное вычисление, и нужно как-то вывести это на прогресс-бар. Никакие промежуточные этапы расчетов, куда можно было бы "вклиниться" недоступны.
Может быть можно это как-то по загруженности CPU вывести или еще что-то. (Решение через Qt приветствуются )
Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.01.2014, 19:15     Замерить время вычислений #2
Цитата Сообщение от gromo Посмотреть сообщение
Есть ли способ замерить продолжительность процесса вычислений, детали которых скрыты?
Для того, чтобы замерить время вычислений, детали вычислений не нужны. Нужно знать точки начала и конца вычислений. Есть такие?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
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
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
20.01.2014, 19:22  [ТС]     Замерить время вычислений #4
Цитата Сообщение от alsav22 Посмотреть сообщение
Для того, чтобы замерить время вычислений, детали вычислений не нужны
Простите, я не так выразился. Нужно вывести на прогресс-бар, например, в процентном соотношении - сколько осталось еще до конца. Все что я знаю - так это найти какое-нибудь повторяющееся событие в процессе вычислений и от него уже скакать. Но этот процесс скрыт.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4927 / 2670 / 243
Регистрация: 29.11.2010
Сообщений: 7,429
20.01.2014, 19:27     Замерить время вычислений #5
gromo, можно вычислить процентное соотношение от количества итераций, если они схожи по сложности.
gromo
 Аватар для gromo
366 / 265 / 24
Регистрация: 04.09.2009
Сообщений: 1,214
20.01.2014, 19:34  [ТС]     Замерить время вычислений #6
Цитата Сообщение от MrGluck Посмотреть сообщение
можно вычислить процентное соотношение от количества итераций, если они схожи по сложности
В том то и дело, что "итерация" одна - обработка большого файла.
Возможно в будущем нужна будет возможность обработки нескольких файлов, тогда проблем не будет. А вот как с одним - не знаю.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.01.2014, 19:36     Замерить время вычислений #7
Цитата Сообщение от gromo Посмотреть сообщение
Но этот процесс скрыт.
И насколько скрыт? Кода нет?

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

Добавлено через 42 секунды
Все равно пока что условие размыто - что делаем со строками? Сейчас это сферический кот в вакууме.
gromo
 Аватар для gromo
366 / 265 / 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
 Аватар для 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++ OpenMP. Возможность неблокировки UI на время вычислений
Организация вычислений во время ввода данных C++
C++ Организация вычислений во время ввода данных программа С++

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

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

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