usar tiempo segundos programa poner para nanosegundos medir medidor funcion ejecucion contar contador como calcular c++ execution-time

segundos - calculando el tiempo de ejecución en c++



poner tiempo en c++ (7)

Con C ++ 11 para medir el tiempo de ejecución de un fragmento de código, podemos usar la función now ():

auto start = chrono::steady_clock::now(); // Insert the code that will be timed auto end = chrono::steady_clock::now(); // Store the time difference between start and end auto diff = end - start;

Si desea imprimir la diferencia de tiempo entre el inicio y el final en el código anterior, puede utilizar:

cout << chrono::duration <double, milli> (diff).count() << " ms" << endl;

Si prefiere usar nanosegundos, usará:

cout << chrono::duration <double, nano> (diff).count() << " ns" << endl;

El valor de la variable diff también se puede truncar a un valor entero, por ejemplo, si desea que el resultado se exprese como:

diff_sec = chrono::duration_cast<chrono::nanoseconds>(diff); cout << diff_sec.count() << endl;

Para más información haz click here

He escrito un programa en c ++, quiero saber cómo calcular el tiempo de ejecución necesario para no exceder el límite de tiempo.

#include<iostream> using namespace std; int main () { int st[10000],d[10000],p[10000],n,k,km,r,t,ym[10000]; k=0; km=0; r=0; scanf("%d",&t); for(int y=0;y<t;y++) { scanf("%d",&n); for(int i=0;i<n;i++) { cin>>st[i] >>d[i] >>p[i]; } for(int i=0;i<n;i++) { for(int j=i+1;j<n;j++) { if((d[i]+st[i])<=st[j]) { k=p[i]+p[j]; } if(k>km) km=k; } if(km>r) r=km; } ym[y]=r; } for( int i=0;i<t;i++) { cout<<ym[i]<<endl; } //system("pause"); return 0; }

¡Este es mi programa y quiero que esté dentro del límite de tiempo de 3 segundos! cómo hacerlo ? Sí, lo siento, me refiero a tiempo de ejecución!


Esto se parece al algoritmo de Dijstra. En cualquier caso, el tiempo que se tarda en ejecutarse dependerá de N. Si tarda más de 3 segundos, no hay forma de verlo acelerándolo, ya que es necesario hacer todos los cálculos que está haciendo.

Dependiendo del problema que intenta resolver, podría haber un algoritmo más rápido.


He utilizado la técnica mencionada anteriormente, pero encontré que el tiempo indicado en el Código: Bloques IDE fue más o menos similar al resultado obtenido (puede ser que difiera en unos pocos segundos).


Nota: la pregunta originalmente era sobre el tiempo de compilación, pero más tarde resultó que el OP realmente significaba tiempo de ejecución. Pero tal vez esta respuesta todavía sea útil para alguien.

Para Visual Studio: vaya a Tools / Options / Projects and Solutions / VC++ Project Settings y establezca Build Timing opción Build Timing en '' yes ''. Después de eso, el tiempo de cada compilación se mostrará en la ventana de resultados.


Si tiene instalado Cygwin, desde su shell bash, ejecute su ejecutable, diga MyProgram , usando la utilidad de time , así:

/usr/bin/time ./MyProgram

Esto informará cuánto tiempo tomó la ejecución de su programa: la salida se vería como la siguiente:

real 0m0.792s user 0m0.046s sys 0m0.218s

También puede modificar manualmente su programa C para instrumentarlo utilizando la función de biblioteca clock() , de esta manera:

#include <time.h> int main(void) { clock_t tStart = clock(); /* Do your stuff here */ printf("Time taken: %.2fs/n", (double)(clock() - tStart)/CLOCKS_PER_SEC); return 0; }


Todos los tiempos de ejecución aparecen como 0 o 0.001. Eso podría ser correcto, pero ¿es posible que incluso sean 0 segundos?


VISIÓN GENERAL

He escrito un simple truco semántico para esto utilizando la respuesta de @AshutoshMehra . ¡Tu código parece realmente legible de esta manera!

MACRO

#include <time.h> #ifndef SYSOUT_F #define SYSOUT_F(f, ...) _RPT1( 0, f, __VA_ARGS__ ) // For Visual studio #endif #ifndef speedtest__ #define speedtest__(data) for (long blockTime = NULL; (blockTime == NULL ? (blockTime = clock()) != NULL : false); SYSOUT_F(data "%.9fs", (double) (clock() - blockTime) / CLOCKS_PER_SEC)) #endif

USO

speedtest__("Block Speed: ") { // The code goes here }

SALIDA

Block Speed: 0.127000000s