Info Velocità ciclo macchina C o C++

di il
5 risposte

Info Velocità ciclo macchina C o C++

Buon pomeriggio a tutti, volevo chiedere una info:
dato il seguente codice in c:
for(i<0, i<2000,i++)
{
x=x+1;
}
ce una maniera per sapere in quanto tempo (milli secondi o quelli che sono) il ciclo si completa?
O meglio, come possiamo sapere la velocità di un ciclo in funzione della grandezza della variabile i ad esempio.

Se ho fatto una domanda banale mi scuso in anticipo ma sono un po arrugginito di programmazione

5 Risposte

  • Re: Info Velocità ciclo macchina C o C++

    Non esiste un numero unico!
    devi fare una media:

    scrivi il codice per il ciclio, quindi
    lo esegui qualche milione o miliardo di volte,
    calcoli il tempo GLOBALE
    e poi dividi il tempo ottenuto per il milione/miliardo di volte che hai usato!
  • Re: Info Velocità ciclo macchina C o C++

    Ma scusa, a quale hw fai riferimento?
  • Re: Info Velocità ciclo macchina C o C++

    Sto utilizzando il compilatore per una scheda Nucleo della ST (la F401RE)
  • Re: Info Velocità ciclo macchina C o C++

    Devi impostare uno dei timer del processore in modalità free running counter alla frequenza che vuoi tu (tra quelle impostabili) e avviarlo. Dopodiché memorizzi il valore del counter all'inizio e alla fine del ciclo for, così con la differenza misuri quanto dura la routine.

    Ad esempio facendo riferimento a questa guida:
    https://www.digikey.it/en/maker/projects/getting-started-with-stm32-timers-and-timer-interrupts/d08e6493cefa486fb1e79c43c0b08cc6

    nel tuo caso avrai:
    
        // Get current time (microseconds)
        timer_val = __HAL_TIM_GET_COUNTER(&htim16);
    
        // Routine
        int x = 0, i;
        for(i=0; i<2000; i++)
        {
         x=x+1;
        }	
    
        // Get time elapsed
        timer_val = __HAL_TIM_GET_COUNTER(&htim16) - timer_val;
        
        // Show elapsed time
        uart_buf_len = sprintf(uart_buf, "%u us\r\n", timer_val);
        HAL_UART_Transmit(&huart2, (uint8_t *)uart_buf, uart_buf_len, 100);
    
    In questo caso particolare il risultato sarà proporzionale a i, ma la costante di proporzionalità è più facile valutarla empiricamente (prova diversi i) che calcolarla teoricamente
  • Re: Info Velocità ciclo macchina C o C++

    Bisognerebbe anche capire se c'è un'attività di interrupt che può falsare la misura.
Devi accedere o registrarti per scrivere nel forum
5 risposte