Время выполнения программы для очень малого времени выполнения

0

Я посмотрел на кучу других примеров того, как мне удалять код, но ни один из них, использующий хроно или время, не работал (они возвращают 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;
}
  • 0
    Вы запрашиваете инъекцию кода для профилирования производительности ? Это, например, доступно с gprof . Какой набор инструментов вы вынуждены использовать?
  • 0
    @ πάνταῥεῖ Я не уверен, что это значит. Google также не возвращает никаких определений для него. Мне нужно узнать, сколько времени занимает каждый алгоритм сортировки. Это занимает микросекунды, но мне все еще нужно это сравнить три алгоритма сортировки. Я на винде, кстати. Я не думаю, что есть инструмент, который я вынужден использовать, но он просто должен работать, когда инструктор запускает код.
Показать ещё 4 комментария
Теги:

1 ответ

0
Лучший ответ

Если на всех платформах работает Intel, вы можете посмотреть на счетчик времени (RDTSC) и написать свой собственный счетчик производительности. Но он не очень портативен и есть разные сложные биты (дрейф между ядрами, переменная тактовая частота, если у вас нет этого, и т.д.). Вообще я иду на низкотехнологичный подход к выполнению задачи под рукой много раз, а затем получаю среднее время через низкотехнологичный таймер (даже time a.out в оболочке).

  • 0
    Благодарю. Я использовал низкотехнологичный метод таймера, чтобы его можно было запустить на чужом компьютере. Ханс Пассант также предложил этот метод. Слава вам обоим.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню