Тема: Як підрахувати час роботи функції?
Хай. В мене таке завдання --- написати функцію на С++, і таку саму на inline assembler, а потім порівняти, яка швидше працює.
Stopwatch'а я не бачу. В гуглах надибав приклад з бібліотекою chrono, але там немає тіків, а тілько наносекунди, і завжди виводить нуль.
Чому так?
#include <cstdio>
#include <iostream>
#include <chrono>
using namespace std;
namespace cr = std::chrono;
int firstTask(int a, int b, int c)
{
__asm {
mov eax,a
mul b
sub eax,c
}
}
int secondTask(int *arr, int lengths)
{
__asm {
mov ebx, [arr]
mov esi,0
mov eax, DWord Ptr[ebx + type arr * 0]
cycleCmp:
cmp esi,lengths
jb body
jmp end1
body:
inc esi
cmp eax, DWord Ptr[ebx + type arr * esi]
jnc ifLess
jmp cycleCmp
ifLess:
mov eax, DWord Ptr[ebx + type arr * esi]
jmp cycleCmp
end1:
sub eax, DWord Ptr[ebx + type arr * esi]
}
}
int secondTaskCpp(int* arr, int length)
{
int min = arr[0];
for (int i = 1; i < length; i++)
{
if (arr[i] < min)
{
min = arr[i];
}
}
return min - arr[length - 1];
}
int main()
{
cr::high_resolution_clock my_clock;
int i;
i = firstTask(2, 3, 4);
cout << i << endl;
int arr[] = { 5, 4, 7, 8, 1, 5, 4, 2, 5 };
int length = sizeof(arr) / sizeof(arr[0]);
int j, k;
auto asmTime = my_clock.now();
j = secondTask(arr, length-1);
auto asmTime1 = my_clock.now();
auto asmDiff = asmTime1 - asmTime;
auto cppTime = my_clock.now();
k = secondTaskCpp(arr, length);
auto cppTime1 = my_clock.now();
auto cppDiff = cppTime1 - cppTime;
cout << "j: " << j << "\t" << cr::duration_cast<cr::nanoseconds>(asmDiff).count()
<< "\nk: " << k << "\t" << cr::duration_cast<cr::nanoseconds>(cppDiff).count() << endl;
system("pause>>void");
}