Tempo di esecuzione threads

di il
5 risposte

Tempo di esecuzione threads

Ciao a tutti! Ho scritto un programma C in ambiente Linux compilandolo tramite gcc che funziona con un certo numero di threads per parallelizzare l'algoritmo e velocizzare il tempo di esecuzione del programma. Il numero di threads è variabile ed è definito dall'utente. Appurato che il codice è funzionante, mi serviva calcolare il tempo (in millisecondi) di esecuzione di ogni thread per poi fare la media del tempo. Teoricamente, avendo più thread, ogni thread ha un blocco più piccolo di istruzioni da eseguire quindi impiegherebbe meno tempo, e in media il programma dovrebbe essere più veloce. Inizialmente per calcolare i tempi di esecuzione ho utilizzato la funzione gettimeofday ma ho notato che è poco affidabile, per lo meno ogni volta che faccio girare il programma il tempo che ottengo a volte varia anche di molto. Mi chiedevo se c'è qualcosa che mi sfugge o se c'è una funzione precisa e affidabile che può calcolare in ms il tempo di esecuzione dei threads. Grazie mille a chiunque legga e in qualche modo cerchi di aiutarmi

5 Risposte

  • Re: Tempo di esecuzione threads

    Teoricamente, avendo più thread, ogni thread ha un blocco più piccolo di istruzioni da eseguire quindi impiegherebbe meno tempo, e in media il programma dovrebbe essere più veloce
    In realtà il processore è uno solo quindi potresti ottenerne un peggioramento nei tempi, a causa del maggiore sovraccarico per lo switch fra i vari thread.
    Comunque per fare le misurazioni, prova ad utilizzare un equivalente della GetTickCount() di Windows
    http://www.doctort.org/adam/nerd-notes/linux-equivalent-of-the-windows-gettickcount-function.html
  • Re: Tempo di esecuzione threads

    Non e' detto: se la cpu e' multicore, c'e' una buona probabilita' che ogni thread venga allocato su un core distinto

    Di sicuro, usare piu' thread dei core nkn porta s nessun miglioramento, soprattutto se l'algoritmo e' cpu intensive
  • Re: Tempo di esecuzione threads

    Il processore è uno solo. Ciò che ho fatto è suddividere l'algoritmo in diverse parti a seconda del numero di threads che si vuole usare. Ogni thread quindi si occupa di una certa porzione dell'algoritmo e di conseguenza più thread ci sono e minore è la porzione di istruzioni che ciascun thread deve eseguire. Lo scopo sarebbe proprio vedere le prestazioni, cioè pensavo che maggiore è il numero di threads e più veloce sarebbe stata l'intera esecuzione, anche con un solo core. Con l'equivalente del GetTickCount ottengo tempi nulli, forse devo rivederlo bene... in ogni caso il multithreading in generale non viene usato anche nei single core per migliorare le prestazioni? Grazie comunque per le risposte!
  • Re: Tempo di esecuzione threads

    Se il processore e' uno solo (un solo core, un solo thread hardware) e l'algoritmo e' CPU intensivo, allora scrivere l'applicazione in versione multithreading non ti serve a nulla.

    Anzi, ottieni tempi peggiori, perche' entrano in gioco i tempi per la sincronizzazione e per il context switching.

    Un'applicazione multithreading su una CPU mono thread ha senso solo se i singoli thread perdono un sacco di tempo nell'IO (lettura/scrittura di file, su rete, ecc).

    Per la questione del timer, devi usare un timer ad alta risoluzione.

    std::chrono

    http://stackoverflow.com/questions/8602336/getting-cpu-cycles-using-rdtsc-why-does-the-value-of-rdtsc-always-increase

    http://www.boost.org/doc/libs/1_49_0/doc/html/boost_asio/reference/high_resolution_timer.html
  • Re: Tempo di esecuzione threads

    Con un numero di Core uguale a 2, avrebbe quindi più senso usare il multithreading? Perchè forse erroneamente ho considerato di lavorare solo su un processore quando invece ho intel Core i5 che credo sia un dual Core ... in questo caso comunque si vedrebbero miglioramenti solo entro un certo numero di threads, oltre il quale invece se il numero è molto elevato si presenterebbe nuovamente il problema del context switching... è esatto?
    Grazie ancora
Devi accedere o registrarti per scrivere nel forum
5 risposte