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

Замер времени работы участка кода - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Кроссплатформенный способ переноса файлов http://www.cyberforum.ru/cpp/thread1696384.html
Есть какой-нибудь легальный способ кроссплатформенного переноса папок/файлов в C++? Желательно именно способы переноса, а не copy/remove, т.к. внутри одного диска простой перенос будет моментальным.
C++ OpenCV преобразовать изображение в полутоновое На просторах интернета нашел код на c#: Bitmap BMP = (Bitmap)pictureBox1.Image; IplImage Img = new IplImage(); Img = BMP.ToIplImage(); IplImage... http://www.cyberforum.ru/cpp/thread1696315.html
C++ Какая форма записи вам ближе?
Какая форма записи вам ближе 1 if ( !valid ) или 2 if ( valid == 0 )
Техническое зрение, нейронные сети C++
А есть книги по техническому(машинному) зрению, нейронным сетям, касающиеся С++? Также не помешала бы литература например по OpenCV на С++ и подобное. Может кто найти?
C++ Переход по адресу из массива байт http://www.cyberforum.ru/cpp/thread1695628.html
не знаю просто как правильно назвать тему до форматирования пк была у меня она очень интересная функция в общем есть допустим любой адрес 0x89889898 этот адрес не что иное как означает переход на...
C++ Индивидуальный вариант C++ code style Доброго времени суток! Интересно мнение форумчан по поводу именования объектов c++ кода. - именование объектов(переменные, контейнеры и т.п.), имя представляет из себя код+_+имя. Пример: ... подробнее

Показать сообщение отдельно
SolidCoder
19 / 19 / 8
Регистрация: 21.03.2016
Сообщений: 60
Завершенные тесты: 2
29.03.2016, 20:27
Чет не понял, в чем загвостка.

Если под "стандартными методами" не подразумевается вызов GetTickCount:
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 <iostream>
#include <windows.h>
#include <algorithm>
 
using namespace std;
 
 
void function()
{
    int *n = new int[1024];
    for (int i = 0; i < 1024; i++)
        n[i] = i*i;
    sort(n, n + 1024);
    for (int i = 0; i < 1023; i++)
    {
        n[i] = n[i] * n[i + 1];
    }
    delete[]n;
}
 
int main()
{
    DWORD start = GetTickCount();
    for (int i = 0; i < 1000; i++)
    function();
    DWORD end = GetTickCount();
    cout << (unsigned int)(end - start) << endl;
    cin.get();
    return 0;
}
У меня на системе 46 мс. Следовательно function выполняется за 46 мкс.

Если меньше 1 мс, то разность GetTickCount дает 0. Поэтому, лично я, использую циклы, когда надо замерить скорость быстро выполняющегося блока.


Если GetTickCount не подходит, то есть специальная инструкция процессоров Intel rdtsc

Добавлено через 11 минут
UPD: Соррян, я понял, загвостка в том, что система забирает процессорное время.

Берешь дизассемблированный листинг, идешь и смотришь количество тактов процессора и умножаешь на его частоту.

Пример для кода Выше.

Assembler
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
.text:00402970 sub_402970      proc near               ; CODE XREF: sub_402A30+2Ap
.text:00402970
.text:00402970 var_14          = dword ptr -14h
.text:00402970 var_10          = dword ptr -10h
.text:00402970 var_C           = dword ptr -0Ch
.text:00402970 var_8           = dword ptr -8
.text:00402970 var_4           = dword ptr -4
.text:00402970
.text:00402970                 push    ebp
.text:00402971                 mov     ebp, esp
.text:00402973                 sub     esp, 14h
.text:00402976                 push    esi
.text:00402977                 push    1000h
.text:0040297C                 call    sub_408E9F
.text:00402981                 add     esp, 4
.text:00402984                 mov     [ebp+var_10], eax
.text:00402987                 mov     eax, [ebp+var_10]
.text:0040298A                 mov     [ebp+var_4], eax
.text:0040298D                 mov     [ebp+var_8], 0
.text:00402994                 jmp     short loc_40299F
.text:00402996 ; ---------------------------------------------------------------------------
.text:00402996
.text:00402996 loc_402996:                             ; CODE XREF: sub_402970+48j
.text:00402996                 mov     ecx, [ebp+var_8]
.text:00402999                 add     ecx, 1
.text:0040299C                 mov     [ebp+var_8], ecx
.text:0040299F
.text:0040299F loc_40299F:                             ; CODE XREF: sub_402970+24j
.text:0040299F                 cmp     [ebp+var_8], 400h
.text:004029A6                 jge     short loc_4029BA
.text:004029A8                 mov     edx, [ebp+var_8]
.text:004029AB                 imul    edx, [ebp+var_8]
.text:004029AF                 mov     eax, [ebp+var_8]
.text:004029B2                 mov     ecx, [ebp+var_4]
.text:004029B5                 mov     [ecx+eax*4], edx
.text:004029B8                 jmp     short loc_402996
.text:004029BA ; ---------------------------------------------------------------------------
.text:004029BA
.text:004029BA loc_4029BA:                             ; CODE XREF: sub_402970+36j
.text:004029BA                 mov     edx, [ebp+var_4]
.text:004029BD                 add     edx, 1000h
.text:004029C3                 push    edx
.text:004029C4                 mov     eax, [ebp+var_4]
.text:004029C7                 push    eax
.text:004029C8                 call    sub_4061D0
.text:004029CD                 add     esp, 8
.text:004029D0                 mov     [ebp+var_C], 0
.text:004029D7                 jmp     short loc_4029E2
.text:004029D9 ; ---------------------------------------------------------------------------
.text:004029D9
.text:004029D9 loc_4029D9:                             ; CODE XREF: sub_402970+98j
.text:004029D9                 mov     ecx, [ebp+var_C]
.text:004029DC                 add     ecx, 1
.text:004029DF                 mov     [ebp+var_C], ecx
.text:004029E2
.text:004029E2 loc_4029E2:                             ; CODE XREF: sub_402970+67j
.text:004029E2                 cmp     [ebp+var_C], 3FFh
.text:004029E9                 jge     short loc_402A0A
.text:004029EB                 mov     edx, [ebp+var_C]
.text:004029EE                 mov     eax, [ebp+var_4]
.text:004029F1                 mov     ecx, [ebp+var_C]
.text:004029F4                 mov     esi, [ebp+var_4]
.text:004029F7                 mov     edx, [eax+edx*4]
.text:004029FA                 imul    edx, [esi+ecx*4+4]
.text:004029FF                 mov     eax, [ebp+var_C]
.text:00402A02                 mov     ecx, [ebp+var_4]
.text:00402A05                 mov     [ecx+eax*4], edx
.text:00402A08                 jmp     short loc_4029D9
.text:00402A0A ; ---------------------------------------------------------------------------
.text:00402A0A
.text:00402A0A loc_402A0A:                             ; CODE XREF: sub_402970+79j
.text:00402A0A                 mov     edx, [ebp+var_4]
.text:00402A0D                 mov     [ebp+var_14], edx
.text:00402A10                 mov     eax, [ebp+var_14]
.text:00402A13                 push    eax             ; void *
.text:00402A14                 call    j_j__free
.text:00402A19                 add     esp, 4
.text:00402A1C                 pop     esi
.text:00402A1D                 mov     esp, ebp
.text:00402A1F                 pop     ebp
.text:00402A20                 retn
.text:00402A20 sub_402970      endp
А вот как посчитать количество тактов: http://www.wasm.ru/forum/viewtopic.php?id=8840

А так это слишком обширное понятие. Смысл считать скорость выполнения кода теоретическую, если на реальной машине это все будет зависит от огромного количества факторов?

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