Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

184
Visualizações
Tiempo de ejecución de la función

Quiero saber el tiempo de ejecución de mi función escrita en C++ en Linux. Encontré muchas publicaciones al respecto. Probé todos los métodos mencionados en este enlace Métodos de temporizador para calcular el tiempo. Los siguientes son los resultados del tiempo de ejecución de mi función:

 time() : 0 seconds clock() : 0.01 seconds gettimeofday() : 0.002869 seconds rdtsc() : 0.00262336 seconds clock_gettime() : 0.00672151 seconds chrono : 0.002841 seconds

Por favor, ayúdenme qué método es confiable en sus lecturas ya que todos los resultados difieren en sus lecturas. Leí que su sistema operativo está cambiando entre diferentes tareas, por lo que no se puede esperar que las lecturas sean muy precisas. ¿Hay alguna manera de que pueda calcular el tiempo que la CPU dedica a mi función? Escuché sobre el uso de la herramienta de creación de perfiles, pero aún no he encontrado ningún ejemplo solo para una función. Por favor guíame.

over 4 years ago · Santiago Trujillo
2 Respostas
Responde à pergunta

0

Tiempo de lectura (7) .

Por varias razones (y dependiendo de su hardware real, es decir, su placa base), la hora no es tan precisa como desearía.

Por lo tanto, agregue un bucle que repita su función muchas veces, o cambie su entrada para que se ejecute por más tiempo. Asegúrese de que el tiempo de ejecución del programa total (dado por time(1) ...) sea de al menos un segundo aproximadamente (si es posible, asegúrese de tener al menos medio segundo de tiempo de CPU ).

Para generar perfiles, compile y vincule con g++ -Wall -pg -O1 y luego use gprof(1) (hay formas más sofisticadas de generar perfiles, por ejemplo, oprofile ...).

Ver también esta respuesta a una pregunta muy similar (por la misma Zara ).

over 4 years ago · Santiago Trujillo Relatório

0

Si está haciendo una prueba simple, tratando de averiguar qué implementación es mejor, entonces cualquier método está bien. Por ejemplo:

 const int MAX = 10000; // times to execute the function void benchmark0() { auto begin = std::chrono::steady_clock::now(); for (int i = 0; i < MAX; ++i) method0(); auto now = std::chrono::steady_clock::now(); auto elapsed = std::chrono::duration_cast<std::chrono::milliseconds>(now - begin); std::cout << "Cost of method0() is " << elapsed .count() << " milliseconds" << std::endl; } void benchmark1() { /* almost the same as benchmark0, but calls method1 */ } int main() { benchmark0(); benchmark0(); benchmark1(); benchmark1(); }

Es posible que haya notado que benchmark0 y benchmark1 se llamaron consecutivamente dos veces: debido a que habrá caché de CPU, E/S..., es posible que desee deshacerse de la ganancia/pérdida de rendimiento debido al almacenamiento en caché, pero mida el tiempo de ejecución puro .

Por supuesto, también puede usar g ++ para perfilar el programa.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda