SIMD

S Vikipedije, slobodne enciklopedije
Flinova podela
  Jednostruke instrukcije Višestruke instrukcije
Jednostruki podaci SISD MISD
Višestruki podaci SIMD MIMD

SIMD (jednostruka instrukcija, višestruki podaci, engl. single instruction, multiple data), prema Flinovoj podeli računarskih sistema je jedna vrsta paralelnog računara. Odnosni, predstavlja računar koji ima višestruke procesore koji vrše istu operaciju na više podataka istovremeno. Na taj način, takve mašine iskorišćavaju paralelizam podataka. SIMD je naročito koristan pri uobičajenim zadacima kao što su podešavanje kontrasta digitalne slike ili prilagođavanje jačine digitalnog zvuka. Većina modernih modela procesora uključuju SIMD instrukcije u cilju poboljšanja performansi za multimedijalnu upotrebu.

Istorija[uredi | uredi izvor]

Prva upotreba SIMD instrukcija je na vektorskim superračunarima kao što su CDC STAR-100 i Texas Instruments ASC, početkom sedamdesetih, koji su mogli da rade na vektoru podatka sa jednom instrukcijom. Vektorsku obradu je posebno popularisao Cray 1970-ih i 1980—ih godina. Na osnovu činjenice da vektorkse mašine obrađuju po jednu reč vektora kroz procesore sa protočnom obradom (pored toga što se baziraju na jednostrukoj instrukciji), dok moderne SIMD mašine obrađuju sve elemente vektora istovremeno, arhitektura vektorske obrade se smatra odvojenom od SIMD mašina.[1]

Prvu eru modernih SIMD mašina karakterišu superračunari sa masovnom količinom paralelnih obrada kao što su Thinking Machines CM-1 i CM-2. Ove mašine su imale mnogo funkcionalno ograničenih procesora koji su radili paralelno. Na primer, svaki od 64.000 procesora u TM CM-2 mašini vrši istu instrukciju u isto vreme dozvoljavajući množenje 64.000 parova brojeva istovremeno. Superračunarstvo prevazilazi SIMD, kada jeftin skalar MIMD pristupa, bazirano na robnim procesorima kao što su Intel i860 XP,[2] postaje moćniji i interesovanje za SIMD slabi.

Trenutna era SIMD procesora razvila se sa tržišta desktop računara, pre nego sa tržišta superračunara. Kako desktop procesori postaju dovoljno moćni da podrže igre u realnom vremenu i video obradu, potražnja za ovu vrstu računarske snage je rasla, a prodavci mikroprocesora se okreću SIMD-u kako bi zadovoljili potražnju. Sun Microsystems predstavio je SIMD celobrojne instrukcije u svom VIS setu instrukcija 1995, u UltraSPARC mikroprocesoru. MIPS ih sledi sa svojim sličnim MDMX sistemom.

Prvi široko raspoređen SIMD desktop računar bio je sa Intel-ovim MMX proširenjima x86 arhitekture iz 1996. Ovo je nagovestilo uvođenje mnogo moćnijeg AltiVec sistema u Motorola PowerPC i IBM POWER sisteme. Intel je ogdovorio 1999. uvođenjem potpuno novog SSE sistema. Od tada došlo je do nekoliko ekstenzija SIMD seta instrukcija u obe arhitekture.

Svi ovi događaji bili su orijentisani ka podršci grafike u realnom vremenu, i zbog toga obrađuju u dve, tri ili četiri dimenzije, obično sa dužinom vektora od dve do šesnaest reči, zavisno od tipa podatka i arhitekture. Kada nove SIMD arhitekture treba da budu izvedene iz starih, novije arhitekture se tada smatraju arhitekturama sa kratkim vektorima, jer su raniji SIMD i vektorski superračunari imali vektore dužine od 64 do 64,000. Moderni superračunar je gotovo uvek skup puno MIMD mašina, od kojih svaka primenjuje (kratko-vektorske) SIMD instrukcije. Moderni desktop računar je često multiprocesorka MIMD mašina gde svaki procesor može da izvrši kratko-vektorske SIMD instrukcije.

Prednosti[uredi | uredi izvor]

Aplikacija koja može iskoristiti SIMD je ona u kojoj se ista vrednost dodaje (ili oduzima od) velikom broju tačaka podataka, tj. česta je operacija u mnogim multimedijalnim aplikacijama. Jedan od primera bilo bi menjanje osvetljenosti slike. Svaki piksel slike sadrži tri vrednosti osvetljenosti za crvenu (engl. red, (R)), zelenu (engl. green, (G)) i plavu (engl. blue, (B)) boju. Da bismo promenili osvetljenje R, G, i V vrednosti se čitaju sa memorije, vrednost se dodaje ili oduzima od njih i dobijene vrednosti se učitavaju nazad u memoriju.

Sa SIMD procesorom postoje dve stvari koje poboljšavaju ovaj proces. Prva je da su podaci smešteni kao blokovi i broj vrednosti može biti učitan odjednom. Umesto serije naredbi "uzmi ovaj piksel", "sada uzmi sledeći piksel", SIMD procesor imaće jednu jedinu naredbu: "uzmi n piskela" (gde je n broj koji varira od modela do modela). Iz više razloga, ovo oduzima daleko manje vremena nego hvatanje svakog piksela pojedinačno, sa tradicionalnim dizajnom procesora.

Druga prednost je ta što SIMD sistemi uključuju samo one instrukcije koje se mogu primeniti na sve podatke u jednoj operaciji. Drugim rečima ako SIMD sistem funkcioniše tako što učitava osam tačaka podataka istovremeno, operacija množenja koja se primenjuje na podatke, desiće se na svim 8 vrednostima u isto vreme. Iako isto važi za bilo koji model superskalarnog procesora, nivo paralelizma u SIMD sistemu je obično znatno veći.

Nedostaci[uredi | uredi izvor]

  • Ne mogu se svi algoritimi vektorisati tako lako. Na primer, zadatak sa teškom kontrolom toka podataka, kao što je raščlanjivanje koda ne može lako dobiti korist od SIMD-a. Međutim, teoretski je moguće vektorisati poređenja i "serijski tok podataka" u cilju maksimalne optimizacije keša. Napomena: sistemi sa serijskom protočnom obradom (primer: grafički procesori ili softverski rasterizacione protočne obrade) su najpovoljniji za kontrolu keša ukoliko se implementiraju zajedno sa SIMD-om, ali ne služe isključivo za SIMD funkcije. Dalja složenost je očigledna da bi se izbegla zavisnost u serijama kao što su kod niski kodova; dok je za vektorizaciju potrebna nezavisnost.
  • Takođe ima velike fajlove registara što povećava potrošnju energije i površine čipova.
  • Trenutno, implementacija algoritma sa SIMD instrukcijama obično zahteva ljudsku pomoć; većina kompajlera ne generiše SIMD instrukcije tipičnog S programa, na primer. Vektorizacija u kompajlerima je aktivna oblast informatičkog istraživanja.
  • Programiranje sa određenim SIMD instrukcijskim skupovima može uključivati i razne sitnije izazove.
    • SIMD može imati ograničenja pri usklađivanju podataka; programerima upoznatim sa jednom određenom arhitekturom ovo može biti neočekivano.
    • Prikupljanje podataka u SIMD registre i raspoređivanje istih na tačno određene lokacije može biti nezgodno i često neefikasno.
    • Posebna uputstva poput rotacije ili sabiranje tri operanada nisu dostupna u nekim SIMD instrukcijskim skupovima.
    • Instrukcijski skupovi su različiti za svaku arhitekturu: neki procesori nemaju SIMD instrukcije u potpunosti, tako da programeri moraju da obezbede ne-vektorizovane implementacije (ili drugačije vektorizovane implementacije) za njih.
    • Rani MMX skup instrukcija delio je registar fajlova sa stekom za operacije i vrednosti sa pokretnim zarezom, što je davalo loše rezultate prilikom mešanja steka za operacije i vrednosti sa pokretnim zarezom sa MMX kodom. Međutim, SSE2 ispravlja tu grešku.

Hronologija[uredi | uredi izvor]

Primeri SIMD-ovih superačunara (ne uključujući vektorske procesore):

Hardver[uredi | uredi izvor]

SIMD manjeg obima (64 ili 128 bita) je postao popularan kod procesora opštih namenama u ranim '90-im i nastavio kroz 1997. kasnije sa Motion Video instrukcijama za Alpha. SIMD instrukcije mogu se naći na većini procesora uključujući i IBM-ov AltiVec i SPE za PowerPC, HP-ov PA-RISC MAX (engl. Multimedia Acceleration eXtensions), Intel-ovi MMX i iwMMXt SSE SSE2 SSE3 SSSE3 i SSE4.x, AMD-ov 3DNow!, ARC-ov ARC Video podsistem, SPARC-ov VIS i VIS2, Sun-ov MAJC, ARM-ov NEON, MIPS-ov MDMX (MaDMaX) i MIPS-3D. IBM, Sony i Toshiba su sarađivali u proizvodnji i proizveli SPU-ov skup instrukcija Cell procesora koji je u potpunosti baziran na SIMD-u. NXP koji je oformio Philips razvio je nekoliko SIMD procesora pod nazivom Xetal. Xetal ima 320 16-bitne elemente procesora posebno dizajnirane za vizuelne zadatke.

Moderne grafički procesori su često opširne SIMD implementacije, sposobne da izvršavaju operacije grananja, opterećenja i da skladište 128 ili 256 bitova u isto vreme.

Intel-ove AVX SIMD instrukcije sada obrađuju 265 bitova istovremeno. Intel-ov Larrabee prototip mikroarhitekture uključuje više od dva 512-bitna SIMD registara u oba svoja jezgra (VPU, engl. Wide Vector Processing Units), i ova sposobnost 512-bitnog SIMD-a se nastavlja u Intel-ovom MIC-u.

Softver[uredi | uredi izvor]

Obično utrostručavanje četiri 8-bitna broja. Procesor učitava jedan 8-bitni broj u R1, množi ga sa R2 i onda sačuvava rešenje iz R3 u RAM. Ovaj proces se ponavlja za svaki broj.
SIMD utrostručavanje četiri 8-bitna broja. Procesor čita 4 broja istovremeno, množi ih sve u SIMD-mnogžaču i onda ih sve sačuvava istovremeno u RAM. U teroriji, ubrzanje procera je oko 75%.

SIMD instrukcije su u širokoj upotrebi obrade 3D grafike, iako su moderne grafičke kartice sa ugrađenim SIMD sistemom preuzele ovaj posao od procesora. Neki sistemi takođe uključuju permutaciju funkcija koje ponovno pakuju elemente u vektorima, čineći ih time posebno korisnim za obradu podataka i kompresiju. Takođe se koriste u kriptografiji.[3][4][5] Trend obrade opšte namene na grafičkim procesorima može dovesti do široke upotrebe SIMD-a u budućnosti.

Lični računari su u početku sporo usvajali SIMD sisteme, zbog većeg broja problema. Jedan od problema je bio taj što su mnogi raniji SIMD skupovi instrukcija težili sporoj ukupnoj peformansi sistema zbog ponovne upotrebe postojećih registra za rad sa operacijama sa pokretnim zarezom. Drugi sistemi, kao što je MMX i 3DNow! su nudili podršku za tipove podataka koji nisu zanimali publiku i imali su skup kontekst instrukcija prekidanja radi baratanja sa registrima za rad sa pokretnim zarezom i sa procesorskim registrima. Kompajlerima je često nedostajala podrška, što je od programera zahtevalo da kucaju programe u asemblerskom jeziku.

SIMD na x86 arhitekturi je imao spor početak. Kada je AMD uveo 3DNow! i kada je Intel uveo SSE došlo je do konfuzije, ali danas su se sistemi prihvatili (pošto je AMD usvojio SSE) i noviji kompajleri rezultuju softveru koji je prilagođeniji za SIMD. Sada i Intel i AMD obezbeđuju optimizovane matematičke biblioteke koje koriste SIMD instrukcije, a i počele su da se pojavljuju i open source alternative kao što su libSIMD, SIMDx86 i SLEEF.

Apple računari su imali više uspeha, iako su se uključili u SIMD tržište posle ostalih. AltiVec je nudio bogat sistem i može biti programiran korišćenjem povećanog broja sofisticiranih kompajlera od Motorola-e, IBM-a i GNU-a, zbog čega je programiranje u asemblerskom jeziku retko potrebno. Dodatno tome, većina sistema koji bi imali korisi od SIMD-a su bili snabdevani Apple kompanijom (na primer: iTunes i QuickTime). Međutim, Apple računari su počevši od 2006. počeli da koriste Intel x86 procesore. Apple-ovi API interfejsi i XCode razvojni alati su ponovno napisani da bi koristili SSE2 i SSE3 umesto AltiVec-a. Apple je bio dominantan kupac PowerPC čipova od IBM-a i Freescale Semiconductor kompanije i iako su napustili platformu, dalji razvoj AltiVec-a je nastavljen u nekoliko dizajna Power arhitektura za Freescale i IBM.

SIMD unutar registra, ili SWAR, predstavlja širok skup tehnika i trikova koji se koristi da bi SIMD radio na registrima opšte namene na hardveru koji ne obezbeđuje direktnu podršku za SIMD instrukcije. Ovo se može koristiti da bi se eksploatisao paralelizam u određenim algoritmima čak i na hardveru koji ne podržava SIMD direktno.

SIMD na Vebu[uredi | uredi izvor]

Džon Mekkutčan (John McCutchan) je 2013. najavio [6] da je napravio interfejs za SIMD skupove instrukcija za Dart programski jezik, primenjujući pogodnosti SIMD-a kod veb (engl. web) programa po prvi put. Interfejs se sadrži od dva tipa:

  • Float32x4, 4 vrednosti u pokretnom zarezu jednostruke preciznosti.
  • Int32x4, 4 32-bitne celobrojne vrednosti.

Instance ovih tipova su nepromenljive i u optimizovanom kodu mapirane direktno na SIMD registre. Operacija iskazane u Dart-u su tipično kompajlirane u jednu instrukciju bez gubitaka. Ovo je slično S i C++ izrazima. Benčmarkovi za 4x4 množenje matrica, 3D vertex transformacije, i Mandelbrotov skup vizuelizacija pokazuje skoro 400% ubrzanja u poređenju sa skalarnim kodom pisanim u Dart-u.

Džonov rad na Dart-u je prisvojen od strane ECMAScript i Intel je najavio na IDF 2013 da će implementirati Johnovu specifikaciju i u V8 i u SpiderMonkey.

Komercijalna primena[uredi | uredi izvor]

Iako je se prvobitno dokazalo da je teško pronaći trajnu komercijalnu primenu za SIMD-ekskluzivne procesore, uspeha je imao samo GAPP, koji je prvobitno razvijen od strane Lockheed Martin i primenjen u komercijalnom sektoru od strane njihovog spinofa Teranexa. GAPP-ove skorašnje inkarnacije su postale moćan alat u video obradi u realnom vremenu kao što su konverzije između različitih video standarda i učestalosti slika u sekundi (NTSC ka/od PAL, NTSC ka/od HDTV formata, itd.), deinterlensing, redukcija šuma, prilagodljiva video kompresija, i poboljšanje slike.

Češća primena SIMD-a je kod video igara: skoro svaka moderna igračka konzola od 1998. poseduje SIMD procesor negde u svojoj arhitekturi. Plejstejšn 2 je nestandardan po tome što jedna od njegovih vektorskih jedinica može da funkcioniše kao autonomni procesor za obradu digitalnog signala izvršavajući sopstveni tok instrukcija, ili kao pomoćni procesor kontrolisan običnim procesorskim instrukcijama. Aplikacije sa 3D grafikom često koriste SIMD obradu jer se dosta oslanjaju na operacije sa 4-dimenzionalnim vektorima. Majkrosoftov Direct3D 9.0 tokom izvršenja bira procesorski specifične implementacije svojih sopstvenih matematičkih operacija, uključujući korišćenje SIMD-sposobnih instrukcija.

Jedan od novijih procesora koji koristi vektorsku obradu je Cell procesor razvijen od strane IBM-a u saradnji sa Toshiba-om i Sonijem. On koristi određen broj SIMD procesora (NUMA arhitektura, svaka sa nezavisnim lokalnim skladištem i kontrolisana od opštenamenskog procesora) i namenjena je ogromnim skupovima podataka koje zahtevaju aplikacije za 3D i video obradu.

Skorašnji napredak od strane Ziilabs je proizvodnja SIMD procesora koji može biti korišćen na prenosnim uređajima, kao što su medija plejeri i mobilni telefoni.[7]

Visokorazmerni komercijalni SIMD procesori su dostupni od strane ClearSpeed Technology, Ltd. i Stream Processors, Inc. ClearSpeed-ov CSX600 (2004) ima 96 jezgara od kojih svako ima 2 jedinice za pokretni zarez duple preciznosti dok CSX700 (2008) ima 192. Stream Processors je vođen od strane računarskog arhitekte Bill Dally. Njihov Storm-1 procesor (2007) sadrži 80 SIMD jezgara kontrolisanih od strane MIPS procesora.

Vidi još[uredi | uredi izvor]

Reference[uredi | uredi izvor]

  1. ^ David A. Patterson and John L. Hennessey, Computer Organization and Design: the Hardware/Software Interface, 2nd Edition, Morgan Kaufmann Publishers, Inc., San Francisco, California, (1998). str. 751.
  2. ^ http://www.cs.kent.edu/~walker/classes/pdc.f01/lectures/MIMD-1.pdf
  3. ^ RE: SSE2 speed, showing how SSE2 is used to implement SHA hash alorithms
  4. ^ Salsa20 speed; Salsa20 software, showing a stream cipher implemented using SSE2
  5. ^ Subject: up to 1.4x RSA throughput using SSE2 Arhivirano na sajtu Wayback Machine (2. april 2011), showing RSA implemented using a non-SIMD SSE2 integer multiply instruction.
  6. ^ „Presentations, Videos, and Slides | Dart[[Kategorija:Botovski naslovi]]” (PDF). Arhivirano iz originala (PDF) 09. 03. 2016. g. Pristupljeno 09. 01. 2014.  Sukob URL—vikiveza (pomoć)
  7. ^ ZiiLabs Corporate Website https://secure.ziilabs.com/products/processors/zms05.aspx Arhivirano na sajtu Wayback Machine (18. jul 2011)

Spoljašnje veze[uredi | uredi izvor]