Como ligo clock()
paraC++
?
Por exemplo, quero testar quanto tempo uma pesquisa linear leva para encontrar um determinado elemento em uma matriz.
c++
benchmarking
clock
dato datuashvili
fonte
fonte
perf stat -d ./a.out
Respostas:
fonte
clock()
eclock_t
são do cabeçalho da C Standard Librarytime.h
e, portanto, não precisam do uso destd
prefixos de namespace após a inclusão de suas bibliotecas.<ctime>
agrupa esse valor e função com ostd
espaço para nome, mas não é necessário usá-lo. Confira aqui os detalhes de implementação: en.cppreference.com/w/cpp/header/ctimeUma solução alternativa, portátil e com maior precisão, disponível desde o C ++ 11, é usar
std::chrono
.Aqui está um exemplo:
Executar isso no ideone.com me deu:
fonte
using Clock=std::chrono::high_resolution_clock;
. Veja o alias do tipo .std::chrono::high_resolution_clock
não é monotônico em todas as implementações std lib. Da cppreference - Geralmente, deve-se usar std :: chrono :: stable_clock ou std :: chrono :: system_clock diretamente em vez de std :: chrono :: high_resolution_clock: use constant_clock para medições de duração e system_clock para o relógio de parede.clock()
retorna o número de tiques do relógio desde o início do programa. Há uma constante relacionadaCLOCKS_PER_SEC
, que informa quantos ticks de relógio ocorrem em um segundo. Assim, você pode testar qualquer operação como esta:fonte
timeInSeconds
está sempre vindo0.000000
para mim. Como eu consertaria isso?long double
para obter mais precisão.No Windows, pelo menos, o único mecanismo de medição praticamente preciso é o QueryPerformanceCounter (QPC). std :: crono é implementado utilizando-lo (desde VS2015, se você usar isso), mas é não precisas com a mesma intensidade como usar QueryPerformanceCounter diretamente. Em particular, é alegado que o relatório com granularidade de 1 nanossegundo não está absolutamente correto. Portanto, se você estiver medindo algo que leva um tempo muito curto (e seu caso pode ser apenas um caso assim), use QPC, ou o equivalente para o seu sistema operacional. Eu me deparei com isso ao medir as latências do cache e anotei algumas anotações que você pode achar úteis aqui; https://github.com/jarlostensen/notesandcomments/blob/master/stdchronovsqcp.md
fonte
fonte
Provavelmente você pode estar interessado em um cronômetro como este: H: M: S. Msec.
o código no sistema operacional Linux:
fonte
usleep
nem sempre retornará após exatamente o valor solicitado. Às vezes será mais longo. Você deve verificar a hora atual no início, depois verificar a hora atual e subtrair para obter a hora absoluta desde que você iniciou todas as vezes no loop.você pode medir quanto tempo seu programa funciona. As seguintes funções ajudam a medir o tempo da CPU desde o início do programa:
minha referência : caixa de ferramentas de algoritmos, semana 1, parte da especialização em estruturas e algoritmos de dados da Universidade da Califórnia em San Diego e da Escola Nacional de Economia da Universidade Nacional de Pesquisa
para que você possa adicionar essa linha de código após o seu algoritmo
Saída esperada: a saída que representa o número de
clock ticks per second
fonte