Я посмотрел на кучу других примеров того, как мне удалять код, но ни один из них, использующий хроно или время, не работал (они возвращают 0). Однако, что работало QueryPerformanceCounter. Единственным недостатком его использования является то, что он доступен только для Windows, когда я читаю. Мой инструктор использует Mac, поэтому я не могу передать ему этот код. Это мой код выглядит, когда я использую QueryPerformanceCounter.
#include <iostream>
#include "heapsort.h"
#include "quicksort.h"
#include "insertionsort.h"
using namespace std;
#include <windows.h>
//THE FOLLOWING CODE RETURNS RUNNING TIME IN MICROSECONDS.
///questions/24151/how-to-use-queryperformancecounter
double PCFreq = 0.0;
__int64 CounterStart = 0;
void StartCounter()
{
LARGE_INTEGER li;
if (!QueryPerformanceFrequency(&li))
cout << "QueryPerformanceFrequency failed!\n";
PCFreq = double(li.QuadPart) / 1000000.0;
QueryPerformanceCounter(&li);
CounterStart = li.QuadPart;
}
double GetCounter()
{
LARGE_INTEGER li;
QueryPerformanceCounter(&li);
return double(li.QuadPart - CounterStart) / PCFreq;
}
int main(){
static const size_t SIZE = 150;
int arr[] = { 685, 119, 938, 836, 721, 801, 738, 334, 739, 89, 917, 277, 708, 905, 978, 84, 620, 948, 409, 891, 447, 957, 673, 627, 546, 137, 456, 594, 878, 972, 722, 934, 383, 628, 103, 604, 132, 2, 428, 893, 212, 629, 646, 382, 348, 49, 306, 707, 156, 373, 733, 419, 323, 825, 112, 930, 432, 862, 830, 69, 994, 600, 226, 570, 759, 988, 289, 75, 232, 167, 292, 644, 10, 679, 607, 522, 967, 341, 989, 130, 326, 816, 503, 794, 303, 108, 915, 148, 258, 73, 206, 701, 897, 350, 713, 940, 764, 471, 936, 93, 163, 824, 950, 796, 98, 823, 465, 37, 102, 342, 243, 696, 687, 935, 459, 50, 553, 225, 562, 181, 453, 665, 525, 175, 768, 251, 996, 954, 925, 531, 962, 585, 250, 829, 777, 928, 76, 704, 565, 20, 422, 51, 125, 197, 588, 267, 850, 494, 699, 173 };
StartCounter();
heapSort<int> heap(arr, SIZE);
cout << GetCounter() << endl;
StartCounter();
quickSort<int> quick(arr, 0, SIZE-1);
cout << GetCounter() << endl;
StartCounter();
insertionSort<int> insertion(arr);
cout << GetCounter() << endl;
return 0;
}
Если на всех платформах работает Intel, вы можете посмотреть на счетчик времени (RDTSC) и написать свой собственный счетчик производительности. Но он не очень портативен и есть разные сложные биты (дрейф между ядрами, переменная тактовая частота, если у вас нет этого, и т.д.). Вообще я иду на низкотехнологичный подход к выполнению задачи под рукой много раз, а затем получаю среднее время через низкотехнологичный таймер (даже time a.out
в оболочке).
gprof
. Какой набор инструментов вы вынуждены использовать?