Thread lentissimo

di il
16 risposte

Thread lentissimo

Stò parallelizzando il mio prog e funziona nel senso che si compila, esegue e l' output è quello corretto ma i tempi sono cento volte più lunghi rispetto a prima

void pxrec1(int r, int c, bitmap_image imager) {
                                                rgb_t colour;
                                                
                                                imager.get_pixel(c, r, colour);
                                                px[r][c] = colr((unsigned int)colour.red, (unsigned int)colour.green, (unsigned int)colour.blue);
                                                
                                                }
void pxrec2(int r, int c, bitmap_image imager) {
                                                rgb_t colour;
                                                
                                                imager.get_pixel(c, r, colour);
                                                px2[r][c] = colr((unsigned int)colour.red, (unsigned int)colour.green, (unsigned int)colour.blue);

                                                }
bitmap_image image("input.bmp");
for (r = 0; r <= 499; r++) {
                            for (c = 0; c <= 499; c++) {
                                                        std::thread first(pxrec1, r, c, image);
                                                        c++;
                                                        std::thread secon(pxrec2, r, c, image); 
                                                        first.join(); secon.join();
                                                        }
                            }
reset && c++  desc.cpp -O3 -march=native -pthread  -lpthread -o desc && ./desc > out.log

le funzioni devono essere indipendenti tra loro? perchè le mie condividono qualche dato.

grazie

16 Risposte

  • Re: Thread lentissimo

    Ma ti sembra corretto quello che hai scritto?

    Quando hai imparato ad usare i thread?

  • Re: Thread lentissimo

    Non lo sò se è corretto l' ho letto sui siti

  • Re: Thread lentissimo

    10/09/2024 - Marchetto ha scritto:


    Non lo sò se è corretto l' ho letto sui siti

    Ma non l'hai compreso. 

    In quel modo non ha alcun senso.

    Quindi non devi chiedere se è lento ma se è corretto.

    Ti dò uno spunto ma solo per questa volta. Non conosci le basi del C e del C++ e vuoi usare i thread … altro che usare un libro e studiare … non ti sembra assurdo?

    #include <thread>
    
    using namespace std;
    
    void pxrec(int fromr, int fromc, int tor, int toc, bitmap_image *imager)
    {
       int r, c;
       rgb_t colour;
    
       for (r = fromr; r <= tor; r++)
           for (c = fromc; c <= toc; c++)
           {
               imager->get_pixel(c, r, colour);
               px[r][c] = colr((unsigned int)colour.red, (unsigned int)colour.green, (unsigned int)colour.blue);
           }
    }
    
    int main()
    {
       bitmap_image imager("input.bmp");
       
       thread th1(pxrec, 0, 0, 249, 499, &imager);
       thread th2(pxrec, 250, 0, 499, 499, &imager);
    
    
       th1.join();
       th2.join();
       
       return 0;
    }

    P.S. Non so nulla di questa funzione colr, nè se siano necessari quei cast, nè se possa essere semplificata o addirittura eliminata e sostituita con del codice … Fra l'altro la cosa normale sarebbe che la colr accettasse un solo argomento di tipo rgb_t 

  • Re: Thread lentissimo

    Non e' “thread lentissimo” 

    MA

    l'inutile uso di “infiniti thread” per fare “”operazioni elementari”"".

    .

    DEVI ragionare in QUESTO modo:

    devo eseguire una certa operazione 1000 volte, ma voglio usare 10 thread.

    ALLORA 

    ogni thread deve eseguire SOLO 100 operazioni, scelte in modo INTELLIGENTE in modo che 

    alla FINE siano state eseguite TUTTE 1000.

    Nota/1: ESATTAMENTE come nell'esempio di Oregon!

    .

    MA NON E' ASSICURATO al 100% che in questo modo il tuo programma venga eseguito in 1/10 del tempo!

    Ci sono un SACCO di considerazioni al contorno da fare. 
    La spiegazione richiede, mediamente, libri da 300 pagine!

    Nota/2: la programmazione “multithreading” NON SI IMPARA “leggendolo sui siti”!

  • Re: Thread lentissimo

    Mi pare di aver capito che non si possono lanciare thread a raffica come facevo io ma pochi e grandi, giusto?

    in più ho appena scoperto che il mio processore non supporta il multiprocessing

    https://www.cpu-upgrade.com/CPUs/Intel/Core_2_Duo_Mobile/P8400_%28Socket_P%29.html

  • Re: Thread lentissimo

    Ma che c'entra? Tu eseguivi due thread per ogni punto dell'immagine perdendo il doppio del tempo. Fra l'altro con due funzioni uguali che sono inutili.

    La questione che hai scritto della CPU non c'entra nulla. Puoi far eseguire al sistema più thread che saranno assegnati alla CPU secondo le capacità della stessa ÷ i core disponibili

    Puoi provare come ti ho mostrato due thread che trattano ognuno metà immagine. Ma puoi provare anche con 4 thread che si occupano ognuno di un quarto dell'immagine. Controlla i tempi di esecuzione e determina il numero di thread adeguati.  

  • Re: Thread lentissimo

    Fatto. ma non è più veloce anche con 4 thread, non funziona lasciamo perdere grazie a tutti.

    non è che con un altro computer magari 16 core le cose combiano oppure non dipende dall' hardware ma del prog?

  • Re: Thread lentissimo

    Con il tuo hw edue thread dovrebbe essere meglio di un solo thread. Con un hw più potente già solo per questo sarà più veloce.

    Non hai detto nulla sulla funzione colr e perchè fai quel cast nè cosa stai facendo. Potrebbe essere fatto meglio?  

  • Re: Thread lentissimo

    Si potrebbe essere fatto meglio con una cache ad esempio, lo farò. per adesso volevo fare la parallelizzazione se ci riusciamo.

    mi pare di aver capito che è un prob di compatibilità tra codice e hardware, o no?

  • Re: Thread lentissimo

    Ti avevo chiesto di mostrare la funzione colr perchè sicuramente è scrittamale e impiega tempo inutile.   

  • Re: Thread lentissimo

    Si è vero si può migliorare e lo farò, non la mostro è un segreto.

  • Re: Thread lentissimo

    Ma non mi fare ridere

  • Re: Thread lentissimo

    E si, ho avuto quello che cercavo per adesso sono apposto, più in là mi faro sentire se serve

  • Re: Thread lentissimo

    10/09/2024 - Marchetto ha scritto:


    Si è vero si può migliorare e lo farò, non la mostro è un segreto.

    Mi sembra il progetto di Giovanni in “così è la vita”.

Devi accedere o registrarti per scrivere nel forum
16 risposte