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.