OpenMP memory usage

Sekcia: Programovanie 10.02.2010 | 16:02
Avatar Lapajko Arch Linux  Používateľ
Ahojte,

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
    • Re: OpenMP memory usage 10.02.2010 | 20:19
      still   Návštevník
      Bolo by vhodne, aby si popisal svoj problem viac.. ake datove struktury pouzivas, aky je pristup vlakien k tejto pamati, ci sa da rozdelit, ci je len na citanie a pod.
      Ak ti nevyhovuje OpenMP, mozes skusit nieco vlastne - nie je to az take tazke ;)
      • Re: OpenMP memory usage 10.02.2010 | 23:12
        Avatar Lapajko Arch Linux  Používateľ
        Už som prišiel na to, kde je problém. Ale najprv odpoviem na otázky:
        - 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
        • Re: OpenMP memory usage 10.02.2010 | 23:22
          Avatar borg Fedora  Administrátor
          https://computing.llnl.gov/tutorials/openMP/

          OMP_STACKSIZE
          • Re: OpenMP memory usage 10.02.2010 | 23:24
            Avatar Lapajko Arch Linux  Používateľ
            Ano, poznám.

            Ale to je až verzia 3.0 a GCC implementuje momentálne len 2.5 - tam sa OMP_STACKSIZE nenachádza
        • Re: OpenMP memory usage 10.02.2010 | 23:55
          Avatar borg Fedora  Administrátor
          >- pthread vlákno má minimálny stack veľkosti 8 MiB (niekedy záleží od implementácie)

          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().
          • Re: OpenMP memory usage 11.02.2010 | 00:02
            Avatar Lapajko Arch Linux  Používateľ
            Ano, ale PTHREAD_STACK_MIN ma dost vysoku hodnotu
            • Re: OpenMP memory usage 11.02.2010 | 00:05
              Avatar borg Fedora  Administrátor
              tak si ju predefinuj.
              • Re: OpenMP memory usage 11.02.2010 | 00:05
                Avatar borg Fedora  Administrátor
                teda ak je to potrebne a vies co robis.