Mine sisu juurde

Flynni taksonoomia

Allikas: Vikipeedia

Flynni taksonoomia on kategooriseerimissüsteem, mille pakkus välja Michael J. Flynn 1966. aastal. Selle süsteemi eesmärk on kirjeldada arvutisüsteemide paralleelsuse taset ja tüüpi, jaotades arvuti arhitektuure vastavalt käsuvoogude (Instructions Stream) ja andmevoogude (Data Stream) käsitlemisele. Flynni klassifikatsioonil on neli kategooriat:

  • SISD (Single Instruction Stream – Single Data Stream)
  • SIMD (Single Instruction Stream – Multiple Data Stream)
  • MISD (Multiple Instruction Stream – Single Data Stream)
  • MIMD (Multiple Instruction Stream – Multiple Data Stream)

Flynni taksonoomia võimaldab tõhusalt võrrelda paralleelarvuteid.[1]

ILLIAC IV arvuti muuseumis Computer History Museum.

1960ndad olid arvutustehnika jaoks kiire arengu periood. Arvutid muutusid järjest võimsamaks ja neid hakati rakendama keerukamate teaduslike ja insenertehniliste probleemide lahendamiseks. Kuna taktsageduse tõstmisest enam ei piisanud siis hakati tegelema uute lahenduste väljatöötamisega — komistati toru ja paralleelsuse otsa. Seetõttu pakkus Michael J. Flynn 1966. aastal välja oma klassifikatsioonisüsteemi töös “Very High-Speed Computing Systems”, et selgemalt määratleda, kuidas erinevad arvutiarhitektuurid käsitlevad paralleelsust.[1][2]

Tollal eksisteerisid juba mitmed katselised süsteemid, mis proovisid käsitleda rohkem kui ühte käsku või andmeühikut korraga. Flynni klassifikatsiooni välja pakkumisega samal aastal alustati ILLIAC IV superarvuti arendust — see oli üks esimesi massiliselt paralleelseid arvuteid. Arvuti pidi sisaldama kümneid protsessoreid, mis töötleksid samaaegselt suuri andmemahtusid, eelkõige sõjaväe ja teaduslike simulatsioonide jaoks. Kuigi  ILLIAC IV ei saadud tööle enne 1972. aastat, kehastas see arvuti Flynni tuvastatud SIMD põhimõtteid.[1][3]

Mida aastaid edasi seda tavapärasemaks muutusid paralleelarvutusega masinad, mistõttu tekkis vajadus läbi mõtestatud raamistikuks, mis aitaks erinevaid arhitektuure võrrelda, hinnata ja selgitada. Flynni taksonoomia andis sellele vajadusele selge ja lihtsa struktuuri, jagades arhitektuurid nelja klassi vastavalt käsu- ja andmevoogude kogusele. 1972. aastal täiustas Flynn SIMD kategooriat lisades kolm alamkategooriat.[1][4]

Klassifikatsioonid

[muuda | muuda lähteteksti]
Flynni taksonoomia SISD arhitektuur: üks andmevoog ja üks käsuvoog. Töötlemiselement täidab käsku.

SISD (Single Instruction Stream – Single Data Stream)

[muuda | muuda lähteteksti]

Süsteemil on korraga ühe käsu- ja ühe andmevoo töötlemiseks loodud riistvara. Iga instruktsioon võetakse ette üksi ja rakendatakse ühele andmeelemendile, ilma et käsud või andmed paralleelselt töötleks. Üldisemalt võttes käivad arvutused Flynni taksonoomia kohaselt töötlemiselemendis (PU - processing unit), millel on ka võimalus andmeid ajutiselt hoiustada. Spetsiifilisemalt öeldes on tegemist aritmeetika-loogikaseadmega (ALU - arithmetic logic unit) ja registritega.[1][5]

Sama süsteemiga töötab ka Von Neumanni arhitektuuriga arvutid, kus andmeid ja käske hoitakse primaarmälus, mistõttu andmete edastus protsessorisse käib läbi ühe siini. Selle tagajärg on pudelikaela efekt (von Neumann bottleneck), kus protsessor ootab pidevalt, kuna talle uusi andmeid/käske antakse.[5][6][7]

Vaatame konkreetset näidet avaldise varal:

, kui .

SISD-mudelis kulgeb arvutus jadamisi:

  1. Lahendame sulgudes:
  2. Korrutame:
  3. Jagame:

Kui meil oleks aga massiiv , siis iga ​korral korratakse neid samme järjestikku — paralleeltöötlus puudub. Ehedaim näide SISD-arhitektuuriga komponendist on protsessori tuumad.[8][9]

Flynni taksonoomia SIMD arhitektuur: mitu andmevoogu ja üks käsuvoog. Töötlemiselemendid täidavad käsku.

SIMD (Single Instruction Stream – Multiple Data Streams)

[muuda | muuda lähteteksti]

SIMD-i puhul rakendatakse ühte käsku mitme andmevoo puhul samaaegselt ehk tuuakse mängu paralleelsus. See tähendab ka, et andmetele võib ligi pääseda plokkidena, kuna protsessor suudab mitut andmevoogu korraga töödelda.

Võtame näiteks sama avaldise:

Olgu meil massiiv ja soovime arvutada avaldist kõigi -de jaoks. SIMD-arhitektuuris laetakse korraga näiteks 4 või 8 järjestikust ​ väärtust registritesse ja rakendatakse ühte käsujada (“lahuta 4-st”, “korruta 6-ga”, “jaga 5-ga”) kõigi nende väärtuste peal paralleelselt. Tulemuseks on mitu väärtust saadud ühes tsüklis, selle asemel, et teha iga arvutus jadamisi nagu SISD-mudelis.[1][5][8]

Flynni poolt 1972. aastal väljastatud paber "Some Computer Organizations and Their Effectiveness" jaotas SIMD-kategooria omakorda kolmeks:

  1. Massiiviprotsessor (Array processor) - töödeldakse ühte käsku, kuid iga paralleelne töötlemiselement (ALU - arithmetic logic unit) omab eraldiseisvat mälu ja registrifaili, mis võimaldab andmeid ja tulemusi lokaalselt hoida. Eesmärk on kiiresti opereerida vektoried (ühe dimensionaalne tensor).[4]
  2. Toru protsessor (Pipeline processor) - iga töötlemiselement on mõeldud kindla operatsiooni täitmiseks. Andmeid saadakse ühest tsentraalsest primaarmälust ning pärast oma osa rehkendamist kirjutatakse tulemuse tagasi mällu.[10][4]
  3. Assotsiatiivne protsessor (Associative processor) - saab samuti ühtse käsu, kuid iga töötlemiselement teeb teistest sõltumatu otsuse tuginedes oma registri andmetele kas täita käsku või mitte. See hoiab aega kokku, kuna siis ei pea tingimuslausete jaoks andmeid primaarmälust võtma vaid neid hoiustatakse registrites.[4]

Tänapäeval ei ole eraldi massiiviprotsessoreid või assotsiatiivseid protsessoreid — kõik need kolm tüüpi on üldjuhul integreeritud ühte riistvarasse. SIMD arhitektuur on enim levinud GPU-des.

Flynni taksonoomia MISD arhitektuur: üks andmevoog ja mitu käsuvoogu. Töötlemiselemendid täidavad käsku.

MISD (Multiple Instruction Streams – Single Data Stream)

[muuda | muuda lähteteksti]

MISD on üks paralleelarvutuse arhitektuure, kus ühe andmevooga täidetakse mitut erinevat operatsiooni. Konteptuaalselt on MISD masinal mitu protsessorit, kus igaüks täidaks erinevat käsku samade andmetega, kuid Flynni sõnul on see ebapraktiline. Ainuke koht, kus see kasutust leiaks on tulemuse kontrollimine.[5][11]

Aritmeetiline näide:

Käsuvooks on avaldised ning andmevooks on . Kõikide avaldiste väärtuseks teoorias tuleb .

Ehe näide selle kasulikkusest on kosmoselennunduses — kanderaketisüsteemi pardal olevad arvutid võivad radiatsiooni tõttu esitada valesid andmeid, mistõttu on oluline teha tehe mitu korda läbi, et tagada korrektne vastus juhul, kui üks peaks valesti arvutama.[8]

Flynni taksonoomia MIMD arhitektuur: mitu andmevoogu ning mitu käsuvoogu. Töötlemiselemendid täidavad käsku.

MIMD (Multiple Instruction Streams – Multiple Data Streams)

[muuda | muuda lähteteksti]

MIMD arhitektuuriga seadmed suudavad erinevaid käske erinevate andmega täita — kasutusele tulevad lõimed ning asükroonsus. Tänapäeval on mitme operatsiooni täitmine lahendatud mikroprotsessoritega, kus igaüks on mõeldud oma ülesannet lahendama olles täiesti sõltumatu teistest protsessoritest.[4][6]

MIMD masinaid saab vastavalt mälualale jaotada kaheks:

  1. Jagatud mälualaga (shared memory) - kõikidel protsessoritel on sama kättesaadav mälu, kas tarkvaraliselt või riistvaraliselt. Need võivad olla näiteks UMA (uniform memory access), COMA (cache-only memory access), NUMA (non-uniform memory access) tüüpi.[12]
  2. Eraldatud mälualaga (distributed memory) - igal protsessoril on oma lokaalne mälu ning andmete jagamiseks kasutatakse sõnumedastust (MPI - message passing interface).[13]

2018. aasta seisuga on enamus kesktöötlusseadmed MIMD arhitektuuriga, sisaldades mitut tuuma ning võimekust erinevaid käske erinevate andmetega samaaegselt täita.[14]

Veel klassifikatsioone

[muuda | muuda lähteteksti]

Järgnevad klassifikatsioonid on edasiarengud Flynni välja pakutud arhitektuuritüüpidest.

SIMT (Single Instruction Stream – Multiple Threads)
[muuda | muuda lähteteksti]

SIMT on mudel, mida kasutatakse paralleelarvutustel, kus SIMD ja mitmelõimelisus on kokku pandud. Kõik lõimed (threads) täidavad sama käsku korraga, aga igaühel on oma register ja programmiloendur. See tähendab, et kui üks lõim takerdub või peaks töötamise lõpetama siis protsess ei peatu, kuna teine vaba lõim saab töö üle võtta. See tähendab, et mäluviivitused on peidetud.[15][16]

SPMD (Single Program – Multiple Data Streams)
[muuda | muuda lähteteksti]

SPMD on üks MIMD-i alamkategooria. SPMD kasutatakse arvutusmudelite kirjeldamiseks, kus mitu erinevat protsessorit suhtlevad omavahel, et ühte programmi täita. Sarnaneb kõige rohkem MIMD arhitektuurile, kuna suhtlus protsessorite vahel toimub sõnumedastusena (MPI), seetõttu ka on kasutusel eraldatud mäluala.[4][17][18]

MPMD (Multiple Programs – Multiple Data Streams)
[muuda | muuda lähteteksti]

MPMD on teine MIMD-i alamkategooria, kus erinevad protsessorid täidavad erinevaid programme erinevate andmevoogudega. Näiteks kui on vaja modelleerida laiaulatuslikku keskkonda siis võivad erinevad protsessorid simuleerida erinevaid aspekte üks arvutab õhuvoolu dünaamikat ja teine veevoolu mustreid.[17][19]

  1. 1,0 1,1 1,2 1,3 1,4 1,5 Flynn, M.J. (1966). "Very high-speed computing systems". Proceedings of the IEEE. 54 (12): 1901–1909. DOI:10.1109/PROC.1966.5273. ISSN 1558-2256.
  2. Karam, L. (2009). "Trends in multicore DSP platforms". IEEE Signal Processing Magazine: 11.
  3. "Timeline of Computer History". Computer History Museum. Vaadatud 28. aprillil 2025.
  4. 4,0 4,1 4,2 4,3 4,4 4,5 "Flynn, M. J. (1972). Some Computer Organizations and Their Effectiveness. IEEE Transactions on Computers, 21, 948-960. - References - Scientific Research Publishing". www.scirp.org. Originaali arhiivikoopia seisuga 21. aprill 2024. Vaadatud 4. mail 2025.
  5. 5,0 5,1 5,2 5,3 Irabashetti, P. S. (mai 2014). "Parallel processing in processor organization".
  6. 6,0 6,1 "MIT - Applied Parallel Computing - Alan Edelman | PDF | Parallel Computing | Compiler". Scribd (inglise). Vaadatud 4. mail 2025.
  7. Brookes, Graham R.; Stewart, Andrew J. (1989), Brookes, Graham R.; Stewart, Andrew J. (toim-d), "Introduction", Introduction to occam 2 on the Transputer (inglise), London: Palgrave Macmillan UK, lk 1–7, DOI:10.1007/978-1-349-09877-4_1, ISBN 978-1-349-09877-4, vaadatud 4. mail 2025
  8. 8,0 8,1 8,2 "Flynn's Taxonomy - SLING user documentation". doc.sling.si. Vaadatud 4. mail 2025.
  9. "Single Instruction Single Data - an overview | ScienceDirect Topics". www.sciencedirect.com. Vaadatud 4. mail 2025.
  10. "pipelined architecture - an overview | ScienceDirect Topics". www.sciencedirect.com. Vaadatud 4. mail 2025.
  11. "CSDL | IEEE Computer Society". www.computer.org. Vaadatud 4. mail 2025.
  12. "Instruction-Level Parallelism - an overview | ScienceDirect Topics". www.sciencedirect.com. Vaadatud 4. mail 2025.
  13. "Parallel Computer - an overview | ScienceDirect Topics". www.sciencedirect.com. Vaadatud 4. mail 2025.
  14. "Multiple Instruction Multiple Data - an overview | ScienceDirect Topics". www.sciencedirect.com. Vaadatud 4. mail 2025.
  15. "Using CUDA Warp-Level Primitives". NVIDIA Technical Blog (Ameerika inglise). 16. jaanuar 2018. Vaadatud 4. mail 2025.
  16. "OpenCL™ Programming Guide for the CUDA™ Architecture" (PDF). Nvidia: 65. 2012.
  17. 17,0 17,1 Song, C. (2021). "Analysis on Heterogeneous Computing". Journal of Physics: Conference Series: 4-5, 9.
  18. Darema, F.; George, D. A.; Norton, V. A.; Pfister, G. F. (1. aprill 1988). "A single-program-multiple-data computational model for EPEX/FORTRAN". Parallel Computing. 7 (1): 11–24. DOI:10.1016/0167-8191(88)90094-4. ISSN 0167-8191.
  19. "Codemia | Master System Design Interviews Through Active Practice". codemia.io. Vaadatud 4. mail 2025.