OpenMP memory usage
má niekto skúsenosti s OpenMP a C++?
Popis problému:
- jeden blok potrebujem spracovávať paralelne počtom vlákien 1000
- nie je to možné, pretože to chce strašne veľa pamäte
- keď som sa pozrel na procesy, 100 vlákien "spapalo" 799 MiB RAM
Vie niekto ako znížiť memory usage vlákien, ktoré vytvára OpenMP?
Ďakujem
Pre pridávanie komentárov sa musíte prihlásiť.
Ak ti nevyhovuje OpenMP, mozes skusit nieco vlastne - nie je to az take tazke ;)
- dátove štruktúry sú std::map a std::multimap
- pamäť je definovaná ako shared (teda tam nie je problém s pamäťou)
- pamäť je aj na písanie aj na čítanie
Viem, že robiť niečo vlasné nie je náročné, samozrejme s tým pracovať viem (pthread).
A nakoniec PRÍČINA PROBLÉMU:
- OpenMP používa na vytváranie vlákien pthread (samozrejme)
- pthread vlákno má minimálny stack veľkosti 8 MiB (niekedy záleží od implementácie)
- zatiaľ som neprišiel na to, ako znížiť min stack size
OMP_STACKSIZE
Ale to je až verzia 3.0 a GCC implementuje momentálne len 2.5 - tam sa OMP_STACKSIZE nenachádza
velkost stacku pre pthread vlakno je medzi PTHREAD_STACK_MIN (min. velkost stacku) a maximalny stackom procesu (mozes nastavit cez setrlimit()).
pripadne pthread_attr_setstacksize().