Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

219
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Asistente virtual