Programare paralelă: descriere, tehnologie, sarcini și beneficii
Ideile de calcul paralel și de prelucrare a informațiilor au fost mult timp o mulțime de specialiști și o problemă semnificativă în ceea ce privește implementarea. Au dobândit o semnificație deosebită și un interes masiv nu cu mult timp în urmă.
conținut
- Calcule paralele: semnificație și implementare
- Partea inferioară a ideii arhitecturale: lipsa semanticii
- Aplicarea industrială a paralelismului
- De la calcul la procesarea informațiilor
- Componenta hardware
- Aparat matematic
- Programarea orientată pe obiecte
- Clusterele și paralelismul distribuit
- Cluster, ca o variantă a implementării paralele
- "viața" unui obiect modern
Se poate argumenta că dezvoltarea tehnologiilor pe Internet a dat un nou impuls, iar programarea paralelă a dobândit noi calități ale consumatorilor. Acest lucru a cauzat nu numai evoluția evidentă a tehnologiilor și limbajelor de programare. Acest lucru a creat cu adevărat un efect invers asupra înțelegerii procesului paralel.
Tehnologiile de programare paralelă s-au schimbat radical. Aplicarea inițială a dispozitivelor computerizate, ca calculatoare, a trecut fără probleme la utilizarea acestora ca manipulatori de informații. Soluțiile arhitecturale rigide au renunțat la semantică și la o distribuție flexibilă a funcționalității software pentru "executorii hardware".
Calcule paralele: semnificație și implementare
Inițial, elementele de bază ale programării paralele au fost stabilite în arhitectura dispozitivelor de calcul. A fost propusă o clasificare bazată pe noțiunea de flux.
Secvența de comenzi, date, algoritmi succesivi compleți din punct de vedere funcțional a fost considerată ca un obiect care poate fi executat în paralel cu un alt obiect similar.
Prin această abordare, esența fiecărui obiect nu a contestat, dar a însemnat o astfel de împărțire în secțiuni paralele de cod care ar putea fi executate independent, adică datele la intrarea și ieșirea fiecărui flux nu s-au intersectat. Fiecare fir nu era dependent de alt fir, iar dacă avea nevoie de date dintr-un alt fir, acesta a intrat în modul de așteptare.
Această idee a condus la patru arhitecturi:
- SISD - flux simplu de comandă și flux simplu de date;
- MISD - flux de comenzi multiple și flux simplu de date;
- SIMD - flux simplu de comandă și flux de date multiple;
- MIMD - flux de comandă multivariant și flux de date multiple.
Aceste idei au existat pentru o perioadă relativ lungă de timp, dar nu au dus la efecte speciale. Astăzi este o poveste dificilă. Dar acest început a creat o bază pentru realizările moderne.
Partea inferioară a ideii arhitecturale: lipsa semanticii
Ca și construirea unei clădiri rezidențiale, arhitectura calculatoarelor nu se referă la semantică. Cum vor locui chiriașii în clădire, ce reparații pot face și ce mobilier va fi decis, niciodată nu îngrijorau constructorii.
La începutul sistemului de programare paralelă, aceștia nu au acordat o importanță algoritmului care ar trebui executat. Procesorul a separat codul și datele în secțiuni care rulează în paralel. Acest lucru a dus la o creștere notabilă a productivității, dar îngrijorată în special:
- problema partajării memoriei între procese;
- logica așteptărilor un flux performanța unui alt fir;
- un mecanism pentru protejarea memoriei unui proces dintr-un alt proces;
- logica interacțiunii procesoarelor independente;
- logica schimbării între procese;
- schimb de date "în mișcare" între procese ...
Dezvoltatorii s-au concentrat mai mult pe mecanismele hardware, care au lipsit programarea paralelă multiplă a capacității de a avea semantică și nu au permis programatorului să gestioneze procesele rezolvate în mod adecvat problema.
Aplicarea industrială a paralelismului
Primul scop al computerelor: calcule matematice complexe, aplicații industriale și tot ceea ce nu privește viața de zi cu zi, mobilitatea și Internetul. Firește, atunci când sarcinile programării paralele sunt atât de "limitate", este dificil să se aștepte realizări interesante.
Atunci când calculatoarele au devenit aplicații de producție în masă, a existat dispozitive mobile Internet și, cerințele pentru paralelism sa schimbat dramatic, iar dezvoltatorii au trebuit să se schimbe radical stilul și viteza.
Prima înghițire a fost ideea mesageriei între procese. Interfața de transmitere a mesajelor MPI, programarea paralelă, nevoile dezvoltatorilor și așteptările clienților au devenit un pas intermediar.
Ferestrele și sistemele similare au stabilit această idee și au făcut-o de fapt o normă legislativă: paralelismul și mesajele sunt una pentru fiecare multiprocesare, multi-core și, în esență - pentru orice sistem informatic.
De la calcul la procesarea informațiilor
Calculele sunt un caz special de procesare a informațiilor. De la arhitecturi paralele implementate în hardware la soluții software mobile: limbile de programare paralelă au devenit într-adevăr proprietatea istoriei. Limba modernă oferă adevărate procese paralele, dar nu trebuie neapărat operatorii speciale în sintaxa sau biblioteci suplimentare pentru limba.
"Industriale" gândire în programare, atunci când programarea paralelă multi-threaded este scopul, nu mijloacele, nu a durat mult. Este greu de spus ce rezultate fundamentale conduce. Cu toate acestea, nu există nicio îndoială că programarea, care a fost înainte de epoca programării pe Internet, a devenit baza ideilor excelente și a unui bun potențial al limbilor și instrumentelor moderne.
Componenta hardware
Primele calculatoare au fost monștri care au ocupat un sfert de un teren de fotbal și izolat căldură atât de mult încât a fost posibil să se încălzească în condiții de siguranță oraș mic, și nu pentru a cheltui bani pentru construcția de centrale electrice.
Următoarea generație de computere este personală. Personalul a fost plasat pe desktop, iar telefoanele mobile ar putea fi purtate pe umăr. Personalki schimbat rapid și a dobândit un aspect modern, a dat viață la laptop, tabletă sau alt dispozitiv, și telefoanele mobile au devenit un smartphone-uri multifuncționale convenabil.
Producătorul de componente electronice în plină forță a implicat ideile din ultimii ani, iar programarea paralelă există acum pe orice dispozitiv, indiferent de modul în care se referă la unul sau altul dezvoltator de software.
Astăzi, numărul de nuclee de procesoare, numărul de procesoare, nivelul de tehnologie, paralelismul și funcționalitatea codului sunt critice chiar și pentru utilizatorul neinitiat.
Aparat matematic
Teoria grafurilor și a așteptărilor, ca variante particulare, calcule ale liniilor drepte și ale curbelor pentru afișarea vizuală a informațiilor, ca bază pentru cardurile video, a condus la o funcționalitate clară a componentei hardware, care a dobândit statutul și calitatea standardului.
Puteți vorbi despre numărul de nuclee din procesorul dispozitivului, dar procesorul pentru afișarea informațiilor a fost de mult unul și este angajat în propria afacere. O placă video poate avea mai mult de un procesor și nu un singur nucleu, dar un dispozitiv matematic este implantat în el.
Procesorul calculatorului compine doar comenzi simple pentru afișarea informațiilor sau extragerea acestora din memoria video, restul fiind grija procesorului plăcii video.
De fapt, calculele matematice au fost izolate mult timp de la procesorul principal într-un coprocesor matematic. Aceasta este și norma lucrurilor.
De fapt, având în vedere programarea paralelă la nivel hardware, se poate imagina un calculator modern ca un set de subsisteme de operare paralele care oferă dezvoltatorului tot ce este necesar pentru a implementa tot felul de idei pentru procesarea distribuită și paralelă a informațiilor.
Se acceptă în general că resursele hardware fundamentale pentru orice sistem informatic sunt într-o stare ideală și se dezvoltă constant. Programatorul poate scrie numai codul de calitate.
Programarea orientată pe obiecte
Cu programarea clasică, algoritmul de decizie este o secvență de comenzi. la programare orientată pe obiecte algoritmul de decizie este o colecție de obiecte, fiecare având propriile date și metodele sale.
Prin intermediul metodelor, obiectele interacționează între ele și, prin urmare, modul în care acestea vor fi executate de hardware-ul calculatorului (dispozitivul), cel care-i pasă cel mai puțin. Cu toate acestea, logica interacțiunii dintre obiecte este o sferăcompetență programator.
Un sistem informatic construit pe obiecte, ca regulă, este un anumit sistem de abstracții care permite diferite variante de a crea obiecte de diferite tipuri și scopuri. Fiind descrise la nivelul abstractizărilor, sistemele informatice pot oferi diferite combinații de obiecte, inclusiv crearea de ele însele.
Pur și simplu, cu programare orientată obiect este dificilă legarea executării unui obiect la un kernel sau procesor pentru a asigura executarea sa paralelă. Aceasta va încetini semnificativ procesul general. Un obiect poate exista în topul zececopii, Dar aceasta nu înseamnă că existența tuturor ar trebui să aștepte ca existența celui anterior să se sfârșească.
Clusterele și paralelismul distribuit
Programarea modernă a internetului pentru rezolvarea problemelor complexe și unice oferă singura soluție posibilă: lucrul manual! Pentru utilizarea zilnică și comercială, se folosesc numeroase și variate sisteme de management al site-ului.
O caracteristică caracteristică a programării pe Internet:
- neopredelennost-
- mnozhestvennost-
- simultaneitate.
Când se creează un site web, un programator (mai des o echipă de programatori) nu știe câte vizitatori vor trebui să primească o resursă web, dar știe sigur că toți clienții trebuie să asigure același timp de răspuns minim pentru orice acțiune.
Decizia evidentă: să plasăm un site pe un set de servere sau clustere pe o bază teritorială, iar apoi fiecare regiune va servi un anumit server. Dar site-ul modern nu numai că furnizează informații, ci și îl folosește. De exemplu, un magazin online nu poate vinde aer, iar dacă un produs a fost cumpărat la Moscova, ar trebui să dispară din depozit pentru consumatorul din Vladivostok.
Pentru a face procesarea distribuită a informațiilor înseamnă, de fapt, asigurarea funcționării paralele a aceleiași funcționalități pe diferite servere pentru diferite grupuri de consumatori, cu condiția ca acțiunile consumatorilor să se reflecte în sistem și să nu contravină reciproc.
În acest context, programarea paralelă are un înțeles complet diferit. Dacă mai devreme dezvoltatorul se concentrează asupra mecanismului de realizare a paralelism fără a avea în vedere sarcina în sine, dar acum dezvoltatorul este mai puțin probabil preocupat de modul în care să pună în aplicare în paralel la nivelul echipamentelor sau instrument, el este interesat de paralelism la nivel de client, care este problema în sine, însăși domeniul de aplicare al Web-ului -Resource.
Cluster, ca o variantă a implementării paralele
Este general acceptat faptul că un cluster este un fel de procesare paralelă distribuită a informațiilor. Acesta este un set de calculatoare conectate prin linii de comunicații de mare viteză.
Caracteristic, clusterul poate consta dintr-o varietate de calculatoare care pot fi în diferite locuri de pe planetă, ci prin definiție, un cluster - este un tot unitar. sistem de management al conținutului, bazat pe clustere nu permit componente de control directe clustere de calculatoare, dar ele oferă un control paralel ascuns toate procesele la nivelul problemei fiind rezolvată.
Dezvoltatorul, care lucrează cu clustere, poate să-și planifice și să implementeze propria funcționalitate paralelă de procesare paralelă. Acesta este un progres foarte semnificativ în dezvoltarea modernă.
"Viața" unui obiect modern
Astăzi este foarte dificil să găsești o resursă web bazată pe pagini statice sau dinamice, formate în întregime. Un site modern este o colecție de pagini dinamice care sunt completate în paralel cu ajutorul tehnologiei AJAX.
O pagină dinamică modernă constă dintr-un conținut diferit, fiecare parte a paginii poate fi descărcată independent, în funcție de comportamentul vizitatorului. În acest context, programarea orientată pe obiecte arată că nu întregul său potențial este dezvăluit.
Într-adevăr, comportamentul clientului are drept rezultat o cerere adresată serverului de a actualiza o parte a paginii. Interogarea este procesată, se creează o mulțime de obiecte, serverul trimite rezultatul înapoi. Următoarea interogare ... din nou masa obiectelor, din nou rezultatul este trimis. De fapt, se pare că prin abordarea curentă, serverul "nu-și amintește" ce, când și unde a trimis. La fiecare apel repetă acțiunile minime necesare, creează toate aceleași sisteme de obiecte.
Un programator nu poate schimba logica serverului, dar poate emula cu ușurință propriul său server la un nivel fizic accesibil. Se va obține o calitate complet nouă a procesării paralele distribuite a informațiilor.
serverul propriu va păstra necesare obiecte de sistem în stare actualizat, care sa accelereze procesarea cererilor de la atât o singură pagină și toate paginile care sunt deschise în jurul spațiului de Internet pentru o anumită resursă web.
- Programarea orientată pe obiecte
- Programare structurată
- Limbaj de programare Java
- Limba de programare de bază și istoricul acesteia
- Lista limbajelor de programare. Limbi de programare de nivel scăzut și înalt
- Ce este programarea? Programare pentru incepatori
- Cum de a învăța programarea de la zero în limbi de programare populare
- Crearea și utilizarea de programe de calculator. Un program de calculator este ...
- Evaluarea limbajelor de programare 2016
- Istoria dezvoltării limbajelor de programare: pe scurt despre tot
- jаvascript expresiv: descrierea caracteristicilor
- Prima generație de computere: începutul începutului
- Programare dinamică, principii de bază
- Mediul de programare. Pe drumul spre crearea propriului software
- Programarea neliniare este una din componentele programării matematice
- Programarea liniară
- Programarea matematică este cea mai bună modalitate de a lua cea mai bună decizie
- Tipuri de software de calculator
- Computer de generație secundară - tranziție la tranzistori
- Ce este sistemul de programare
- De ce să folosiți limbi de programare la nivel înalt?