Hlavní navigace

Názor k článku Rychlost CPythonu 3.11 a 3.12 v porovnání s JIT a AOT překladači Pythonu (2) od ZmatenejStrejda - Souběžné čtení a zápis už je na programátorovi...

  • Článek je starý, nové názory již nelze přidávat.
  • 25. 11. 2023 22:42

    ZmatenejStrejda

    Souběžné čtení a zápis už je na programátorovi stejně jako kdyby to udělal ručně přes vlákna.
    Některé operace ovšem jdou udělat velice jednoduše.
    Například chcete udělat histogram (spočítá se četnost výskytů prvků v datech). V té chvíli je velký problém s přístupem do pole histogramu.
    Při použití vlastních vláken mě napadají 3 přístupy: mutex(y), atomické operace, každé vlákno vlastní histogram (nejrychlejší).
    Ale v tomto vám taky může OpenMP usnadnit práci.

    Zde od nejpomalejšího po nejrychlejší

    void histo_1(uint8_t * data, uint32_t * histogram){
            #pragma omp parallel for
            for(uint64_t i = 0; i < SIZE; ++i){
                    #pragma omp critical
                    histogram[data[i]]++;
            }
    }
    void histo_3(uint8_t * data, uint32_t * histogram){
            #pragma omp parallel for
            for(uint64_t i = 0; i < SIZE; ++i){
                    #pragma omp atomic
                    histogram[data[i]]++;
            }
    }
    void histo_4(uint8_t * data, uint32_t * histogram){
            #pragma omp parallel for reduction(+:histogram[:256])
            for(uint64_t i = 0; i < SIZE; ++i){
                    histogram[data[i]]++;
            }
    }

    Je dost možné že Numba umí něco podobného.