NC (Nick Class): Olyan algortimusok vannak ebben az oszalyban, amelyek proceszorral idoben futnak.
Tegyuk fel, hogy van egy NC algoritmusunk es ez az algoritmus az -edik lepesben megszamoljuk, hogy hany proceszor dolgozik:
Legyen ahol a lepesek szama. Ezt a valtozot az osszmunkanak hivjuk.
Tehat ha proceszorunk lenne, akkor lepest kene tennie ahoz hogy szimulalja a parhuzamos algoritmust.
Tetel (Brent 1): Ha letezik olyan algoritmus, amely lepesben osszmunkaval szamol, akkor -re van egy olyan algoritmusunk, amely proceszorral szamol es lepest tesz.
biz.: vegyuk az -edik lepest, proceszor lepesben
Igy osszesen ennyi lepesre lesz szuksegunk:
Azt mondjuk, hogy egy feladat jol parhuzamosithato, ha ez teljesul.
https://dl.acm.org/doi/pdf/10.1145/321812.321815 4. Lemma 2.
Bit-muveletek parhuzamos algoritmusokkal
All.: proceszorral lepesben ki lehet szamolni erteket.
biz.:
felfele:
a -edik lepesben a proceszor akkor fog dolgozni, ha
felelos az szamjegyekert.
eredmeny:
- : biztosan nem megy balra
- : biztosan megy balra
- : megy balra, ha jon jobbrol
Ekkor minden proceszor idoben megcsinalja ezt
lefele:
Amikor jovunk lefele, akkor a tudja mar a helyes eredmenyt es mostmar csa ka a -al oszthatok dolgoznak, akkor a tudta mar hogy a tole kezdve -nak mi az eredmenye, tegyuk fel hogy ez volt…
Szorzas: A szorzas gyakorlatilag annak felel meg, hogy darab bites szamot osszeadunk.
Tegyuk fel, hogy van proceszorunk
Az elozo modszerrel maris megy az egesz idoben
Az a celunk, hogy futasideju parhuzamos algoritmust kapjunk.
Elso megoldas: 3-2 osszeadas
# sum bits carry bits
# ((a xor b) xor c) or ((a xnor b) xnor c) (a and b and not c) or (a and not b and c) or (not a and b and c)
a + b + c = ((a ^ b) ^ c) | ~(~(a ^ b) ^ c) + (a & b & ~c) | (a & ~b & c) | (~a & b & b)
A fenti python code minden bitre lepes es parhuzamosan szamolhato minden bitre. Tehat ha van legalabb processzurnk akkor az atalakitas lepes.
Ezt meg lehet oldani idoben proceszorral.
A proceszor azt csinalja, hogy
Ezzel az eljarassal szam osszeget tudom redukalni szam osszegere.
Mivel jo sok proceszorunk van ezert tudjuk ezt a redukciot csinalni az osszes tagra az osszegben parhuzamosan.
Igy szam osszeget egy lepesben tudjuk szam osszegere redukalni.
Addig redukalunk ameddig csak tudunk es igy a vegso futasi ido a kovetkezo lesz:
Masodik megoldas: negativ szamjegyek
A kovetkezo alakra atalakitok egy szamot:
ahol
Egy binaris szamot ebbe az alakba atvaltani konstans ido, mert csak minden bit part nezzuk.
A visszavaltast nem neztuk meg oran de meg lehet oldani lepesben proceszorral.
Azt allitom, hogy ilyen alakban ket szamot mar ossze lehet adni idoben.
A proceszor osszeadja az es szamjegyeket es igy kapunk egy es kozotti szamot.
TODO
input: formula a kovetkezo alakban:
Def.: Algebrai fa. Absztrakt szintaxis faja az algebrai kifejezesnek.
Def.: Ennek a fanak a merete a nemlevel csucsoknak a szama, azaz a muveleti jelek szama. jel.:
input: algebrai fa
cel: masik fa, ami ugyanazt szamolja es a melysege
Tetel (Brent 2): Letezik ilyen fa. (https://sci-hub.st/10.1109/T-C.1973.223757)
biz.:
1.) Tegyuk fol hogy van egy fank, vegyuk annak egy csucsat es leszarmazottait.
: facsucs, illetve egy uj valtozo
-nek a leszarmazottait kidobjuk es igy kapunk egy fat es helyebe az uj valtozot irjuk.
Eszrevetel:
2.)
All.: Minden faban letezik olyan csucs melyre:
3.) Indukcioval:
Ha OK
todo
Legyen
Az APL nyelvnen:
szorzas
A csucsu grap szomszedasgi matrixa, foatloban -esek.
All.: , ha letezik elu ut
ahol egy elbaszott betu mert valamiert nagyon kell APL nyelvben irni.
All.: legrovidebb elu seta