parallel script futtatas

Kezdőlap Fórumok Programozás parallel script futtatas

10 bejegyzés megtekintése - 1-10 / 18
  • Szerző
    Bejegyzés
  • #1890392
    ktibi
    Felhasználó

      Hello!Van 100 db. shell scriptem es hatekonyan szeretnem futtatni oket, azaz ha van 4 core-os procim, akkor mindet kihasznalni. Tud valaki egy jo scriptet, ami ilyen cpu core kombinacioban kezeli es futtatja a sub shell scripteket? Koszi elore is!

      #2205334
      kisbetu
      Felhasználó

        szerintem a kernelnek pont ez a dolga

        #2205335
        ktibi
        Felhasználó

          Ha elinditok 100 scriptet egyszerre, akkor nyilvan nagyon le lesz terhelve minden… Ha 4 core-om van, akkor erdemes mindig csak 4-et futtatni egyszerre, nem?

          #2205336
          uzsolt
          Felhasználó

            Annyira sokáig futnak a szkriptjeid és annyira leterhelik a procit? Milyen szkriptek ezek?Egyébként én valahogy úgy csinálnám (már csak a kihívás kedvéért), hogy egy szkript indítgatja őket, és amikor az egyik lefutott, hívja a következőt.Valami ilyesmi lenne:

            Code:
            function futtasd() {

            #2205337
            ktibi
            Felhasználó

              Hello!Igen, en is ugy gondoltam kb, ahogy te... Most jelenleg igy van, de ez megvarja, amig az osszes befejezodott, tehat marhara nem hatekony ( A scriptem ket parametert var, amik kulonbozo eredmenyt adnak. Ezert van a ket for() loop.)

              Code:
              !/bin/bashcore=4;icore=0;for i in `seq 0 6` do

              #2205338
              kisbetu
              Felhasználó

                Annak a tengernyi szkriptnek állandóan kell futnia, vagy mindegyik lefut egyszer, oszt jóccakát?

                #2205339
                ktibi
                Felhasználó

                  Utobbi 🙂 A lenyeg csak az, hogy a leghatekonyabban fussanak…Szerk. a mostani valtozatom azert nem jo, mert ha nem azonos ideig futnak a scriptek, akkor mindig meg kell varni a leglassubat, es addig nem indul ujabb...

                  #2205340
                  uzsolt
                  Felhasználó

                    A te verziodat meg nem nagyon ertem... Kicsit at tudnad strukturalni ennek megfeleloen!

                    Te is átstruktúrálhatod. Egyébként pedig baromi egyszerű:

                    futtasd függvény: futtatja a parancs parancsot (igazából $@ jellegű valami kéne), de előtte megnézi, hogy melyik lockfile nem létezik (mondjuk lockfile3), és ő azt fogja mondani, hogy ő lesz a 3-as processz (lockfile3)

                  • nemfutegy függvény: ellenőrzi, van-e szabad "proci", azaz nem esett-e ki egy lockfile
                  • while true ciklus: lényegében fut örökké (bár igazából a true helyett az kéne, hogy van-e még futtatandó cucc), ellenőrzi, van-e szabad mag (lockfile), és ha van, akkor futtatja a következő parancsot. Ezután alszik egy másodpercet, mire a következő iterációt futtatja (hogy ne folyamatosan legyen ellenőrzés, mert az megenne egy magot 🙂 )
                  • A parancsokat nem írtam ki, hogy hogyan hívod, tehát hogy honnan szeded. Azt majd te kitalálod, hogy hogy oldod meg pl. annak eldöntését, hogy van-e még futtatandó.Ha a lényege nem lenne világos: a lockfile-ok alapján tartjuk nyilván, hogy épp hány parancs fut. Amikor a parancs lefut, akkor azután rögtön ki is törli a lockfile-t:

                    Code:
                    (touch lockfile ; parancs; rm lockfile) &

                    Persze most esik le, hogy $lockfile kell 🙂

                  #2205341
                  uzsolt
                  Felhasználó

                    Utobbi 🙂 A lenyeg csak az, hogy a leghatekonyabban fussanak...

                    Megoldja azt a kernel 🙂De ha nagyon perverz akarsz lenni, akkor csinálhatsz egy Makefile-t hozzá, és mondjuk make -j4 módon hívod

                    #2205342
                    pointux
                    Felhasználó

                      100-at nyilván nem jó együtt futtani és nem a CPU lassulás miatt, hanem amiatt, hogy a taskok közötti váltogatás fogja elvinni az erőforrást.Négy magon egy 4-8 viszont egész jó eredménnyel futhat. (Hogy melyik az optimális, csak kísérlettel állapíthatnád meg. Ideális esetben HT-vel szinte veszteség nélkül is futhat a 8 is.)a) Azaz, ha nem szálbiztos az algoritmusod, akkor kell 4-8 lista, amiből egyesével futtatnak a szálak. A veszteséged a legerősebb és legygyengébb lista közötti idő.b) Ha szálbiztos az algoritmusod*, akkor egy listád lesz és abból futat a 4-8 szál. Enneak az az előnye, hogy kb. 3 script lehet a maximális veszteség.*Ez vélhetőleg időkiesés, azaz itt a scriptek száma és működésük hossza határozza meg, hogy mennyire éri meg.Én azt mondanám, hogy simán elég lehet (a) megoldás is (főleg, ha jól válogatod össze a listát és lehet, hogy nem érdemes vele szenvedni) 1) ha nem fut más 8 szálon, 2) ha még más is fut 4 szálon. Azért a (2)-es pont elég valószínű.

                      10 bejegyzés megtekintése - 1-10 / 18
                      • Be kell jelentkezni a hozzászóláshoz.