(C++) Hogy lehet az, hogy a párhuzamosított program sokkal lassabb, mint a szekvenciálisan futó?
Kaptam egy egyetemi feladatot, miszerint a MergeSort algoritmust kell párhuzamosítva leimplementálni. Röviden, tömören, a MergeSort minden futáskor kettészeli a kapott intervallumot, és a két részre rekurzívan meghívja magát, a baloldali részt aszinkron új szálon, aztán a jobboldalit a jelenlegi szálon, szekvenciálisan, ezután ha mindkét ág lefutott összefésüli az eredményt. Finomításként még azt is meg kellett határozni, hogy mekkora intervallum méret alatt célszerűbb egyszerű buborékrendezést alkalmazni, a szálakra bontogatás helyett. Oké. Megcsináltam, és jópár tesztet lefuttattam, hogy megkapjam, milyen gyorsan fut le adott értékek mellett.
Példának okáért, egy 10 000 adatból álló állományt átlagosan másfél másodperc alatt rendezett le, ha 0 határszámot adtam meg a buborékrendezésre (azaz egyáltalán nem használtam buborékrendezést), meg az optimális értéket valahol 200 környékén lőttem be, ahol 0,033 mp volt az átlagos futási idő.
Az érdekes rész ott következett, hogy kíváncsiságból átírtam egyszerű szekvenciális futásra, többszálú működést kivéve. Azonos körülmények mellett 0,018 másodperc volt az átlagos futási idő 0-s határszám mellett, és 0,013 másodperc optimális (ezesetben 10) határszám mellett. Ez azt jelenti, hogy a buborékrendezés nélküli esetben a szekvenciális változat százszor(!) olyan gyors volt, mint az aszinkron, és az optimális esetben is harmadannyi idő alatt lefutott, 10 ezer adatra.
Mégis hogy lehet az, hogy a több szálra bontás, ami elméletben épp a futás gyorsítását hívatott elősegíteni ilyen drasztikus mértékben lassabb futást eredményezett?
Egyszeruen tul sok szalad van.
Elvesz a parhuzamositas elonye az "adminisztracion".
Ez onnan is latszik, hogy ha 200 alatt nem csinalsz uj szalat, akkor nem lassul le az otvenedere a dolog.
Meg olyat is csinalhatsz, hogy lemered hany szalat csinalsz es mennyi idobe kerul.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!