Calcul distribuit. Cel mai periculos computer distribuit

15 ianuarie 2013 la ora 10:55

Oh, hai să mergem! Calcul distribuit ieri și astăzi

  • Blog Intel,
  • Performanță ridicată

Principiul calculelor paralele este unul dintre cele care sunt literalmente „în aer”. Și acest lucru este firesc, pentru că este mai convenabil să faceți orice lucru împreună. Calculul paralel a apărut cu mult înainte de primul computer, dar ideea a înflorit tocmai în era computerului, pentru că atunci au apărut sarcinile care necesită o putere de calcul mare și dispozitive care erau gata „întregii lumi” pentru a oferi această putere. În aceste zile se împlinesc exact 15 ani de la prima cunoștință cu proiectele de calcul distribuite - un motiv bun pentru a scrie despre istoria lor și astăzi.

Scurtă introducere teoretică
O mică teorie pentru cei care nu erau interesați anterior de calculul distribuit. Un proiect de acest fel presupune că sarcina de calcul este distribuită între computerele client, cu atât mai bine. De asemenea, este necesar un centru de control, funcțiile sale sunt următoarele:
  • Distribuirea pieselor „brute” către clienți și primirea rezultatelor procesării de la aceștia;
  • Controlul fragmentelor pierdute și numărate incorect;
  • Interpretarea pieselor rezultate în lumina obiectivului general;
  • Calculul și vizualizarea statisticilor.
Deci, programul instalat pe client primește o parte din sarcină, o execută și trimite rezultatul la centru. În primele proiecte, blocurile erau trimise manual, prin e-mail, apoi funcția de transport era complet automatizată, dacă exista o conexiune la Internet (ceea ce la sfârșitul anilor 90, însă, nu suna atât de banal ca acum). În general, dintre toate componentele computerului, programul folosește doar procesorul, ca să spunem așa, „curățând” resursa nefolosită. Aplicația client funcționează cu prioritate scăzută, fără a interfera cu altele, cu toate acestea, există, desigur, o utilizare sută la sută și aspecte negative: În primul rând, consumul de energie crescut și disiparea căldurii PC-ului.
În ciuda simplității sale aparente, crearea unui sistem de calcul distribuit înainte de apariția soluții standard a fost o sarcină non-trivială - până la urmă, a fost necesar să se scrie măcar clienți pentru mai multe sisteme de operare și un server de control, astfel încât să funcționeze împreună. Unele proiecte nu au reușit niciodată să depășească „bolile copilăriei” și nu și-au atins obiectivele. Cu toate acestea, au fost și unele destul de reușite - una dintre acestea m-a blocat timp de aproape 5 ani.
Era Distributed.net
Deci, începutul anului 1998. Unul dintre colegii mei de atunci, un om pasionat și pasionat, ne vorbește despre un miracol fără precedent: un proiect care unește computere din întreaga lume într-un singur retea de calculatoare. Cumva, tuturor le-a plăcut imediat ideea, inclusiv managementul tehnic, iar procesul a început. La acea vreme aveam la dispoziție aproximativ o sută de stații de lucru și o duzină de servere și aproape toate au fost date în folosință.
Proiectul în care am intrat se numea Bovine RC5. După cum sugerează și numele, ideea sa este un atac cu forță brută asupra algoritmului de criptare RC5. Prima cheie a fost pe 40 de biți - a fost „aleasă” în puțin peste trei ore. Pe 48 de biți a durat 13 zile, pe 56 de biți a durat 265 de zile. La momentul conexiunii noastre, proiectul era în faza de 64 de biți, care a durat aproape 5 ani.
Bovine RC5 a câștigat rapid popularitate. Organizatorii proiectului, comunitatea distributed.net, au reușit să identifice corect principala forță motrice a procesului - pasiunea participanților. Mișcarea a căpătat o scară globală: echipă a concurat cu echipă, țară cu țară. „Prinde din urmă și depășește” a devenit practic sensul vieții pentru sute de mii de oameni, iar pentru ruși, ca de obicei, ceva ca o idee națională. Fiecare dimineață a început pentru noi cu echipa de vizualizare și statistici globale, clientul RC5 a fost instalat pe orice computer care a căzut în mâinile noastre. Am ajuns la punctul în care am lansat „vaci” pe serverele altora, care erau accesibile de la distanță – înainte de primul conflict.


Interfața client distributed.net a rămas aproape neschimbată pe durata de viață a proiectului.

După finalizarea fazei pe 64 de biți, interesul față de proiect a început să scadă, în primul rând pentru că următorul, pe 72 de biți, promitea să fie foarte lung. Premonițiile noastre nu ne-au înșelat: se întâmplă de mai bine de 10 ani, timp în care doar puțin mai mult de 2,5% din spațiul cheie a fost verificat. Cel mai probabil, lucrurile nu vor mai ajunge la o cheie de 80 de biți, deși puterea de calcul a computerelor a crescut de multe ori pe parcursul proiectului. Orice ai spune, durata estimată a etapei de 400 de ani este cu siguranță înfricoșătoare.

Numărând conducătorii și căutând extratereștri
RC5 bovină poate fi atribuită mai mult competițiilor sportive decât unei modalități de a rezolva unele reale sarcini de calcul, mai ales că RSA, care a început-o, l-a renegat ulterior. Cu toate acestea, distributed.net are și un proiect mai valoros pentru știință: calcularea riglelor Golomb optime, dar cu fiecare nouă unitate de lungime a riglei scârțâie tot mai mult.

Desigur, organizatorii proiectelor voluntare de calcul distribuite nu se limitează la comunitatea distributed.net. Dimpotrivă, acum există cel puțin o sută de proiecte active în lume, dintre care unele au și o istorie bogată: de exemplu, din 1996, se continuă căutarea numerelor prime Mersenne, iar în 1999, SETI@ A început proiectul de acasă, unde, pe baza datelor de decodificare de la radiotelescoapele SETI, se studiază întrebarea dacă există viață pe Marte în Univers. În total, așa cum sa menționat deja, opțiunile sunt literalmente „nenumărate”: aici este căutarea de remedii pentru cele mai teribile boli și îmbunătățirea Marelui Colisionator de Hadroni și studiul structurii tridimensionale a proteinelor și rezolvarea a numeroase probleme și ipoteze matematice... vi se oferă o alegere uriașă în care să participați la proiect și putem spune 100%: veți găsi cu siguranță o sarcină pentru procesorul computerului dvs. - spre marea plăcere a ambelor. Nu uitați să monitorizați temperatura.


Clientul BOINC se compară favorabil cu toți ceilalți, având un design

Un eveniment important în viața comunității „distribuite” a fost apariția în 2005 a platformei BOINC (Berkeley Open Infrastructure for Network Computing) produsă de Universitatea din California din Berkeley, cu banner roșu, așa cum se întâmplă de obicei - cu cod sursă. BOINC este un cadru gata făcut (componente standard de server + client) pentru proiectele de calcul în rețea, care facilitează foarte mult lansarea acestora, deși nu elimină complet munca mentală, deoarece o serie de module de server trebuie pregătite pentru sarcină specifică. Dar clientul, s-ar putea spune, este aproape complet pregătit, raționalizat și frumos. În plus, vă permite să participați la mai multe proiecte compatibile cu BOINC simultan. Se dovedește a fi un fel de grămadă de sarcini eterogene, dar unite tehnologic, de care beneficiază atât sarcinile în sine, cât și ideologia în ansamblu.

Aș vrea să închei din nou pe o notă lirică. Este posibil ca calcularea distribuită să nu fie cea mai bună modalitate de a vă cheltui puterea de procesare disponibilă. Dar, dacă te gândești bine, alte metode sunt și mai puțin optime? Dar să te simți ca membru al echipei nu este, poate, o modalitate mai ușoară. „Cariera” mea în acest domeniu sa încheiat în 2004 - acum aproape 9 ani. Și iată o surpriză: acum, când scriam această postare, am intrat în statisticile echipei mele - imaginați-vă, este încă în viață și încă ocupă primul loc în regiunea noastră. Inca sunt multi pasionati in Rus'!
Îi invit pe toți cei care au participat vreodată la proiecte de calcul distribuit să răspundă și să completeze povestea mea - poate am omis ceva?

Etichete:

  • calcul distribuit
  • distribuit.net
Adăugați etichete

De mai bine de șaisprezece ani, fiecare utilizator are o bună oportunitate de a contribui la dezvoltarea științei. Fără donații bănești sau chiar interes profesional la subiectul de cercetare ales. Tot ce contează este ce trăsături de caracter are o persoană și cât de mult calculatoare moderne ii sta la dispozitie. Cu o combinație de succes a acestor factori, apar noduri fiabile ale rețelelor de calcul distribuite - unul dintre cele mai multe instrumente puternice prelucrarea datelor computerizate.

Datorită eforturilor comune utilizatorii obișnuiți a reusit sa faca multe descoperiri semnificative. Numai în ultimii trei ani au găsit 53 de pulsari, iar ultimii șapte au fost găsiți destul de recent - la sfârșitul lunii august 2012. Rezultatele cercetărilor efectuate sunt folosite în dezvoltarea medicamente pentru tratamentul diabetului zaharat de tip 2, bolilor Alzheimer și Parkinson și a altor boli grave. Pe baza muncii efectuate au fost publicate sute de articole științifice.

Supercalculatoare și rețele distribuite

Supercomputerele puternice sunt o picătură în ocean. Mașini care sunt o sursă de mândrie pentru țări întregi și ocupă primul loc Evaluare TOP 500 nu este atât de mult și nu este suficient pentru toată lumea. Pentru a avea acces la un supercomputer, trebuie mai întâi să justificați necesitatea sarcinii alese, iar apoi, dacă argumentele sunt convingătoare, să așteptați la coadă și să aveți timp să optimizați codul pentru execuție pe o arhitectură unică de supercomputer.

Calcul distribuit

Partea 1. Calcul de înaltă performanță în fiecare casă

Seria de conținut:

1. Introducere

Ce face computerul tău când nu face nimic? Utilizatorii unuia dintre sistemele de operare alternative știu că cel mai vorace proces este „System Idle”: de regulă, „mâncă” aproximativ 90% din resursele procesorului. Ce face computerul tău?

Rulați comanda uptime pentru a afla încărcarea medie a sistemului. Dacă în acest moment computerul dvs. nu transcodează videoclipul sau compilează nucleul, atunci cel mai probabil sarcina medie va fi scăzută - sub 1.0. Activități precum navigarea pe web, editarea documente de birou iar descărcarea fișierelor folosind un client torrent este aproape nedetectabilă (din punct de vedere al performanței) pe computerele moderne.

Cum poți folosi bine timpul inactiv al computerului? Acest articol este dedicat răspunsului la această întrebare. Vă voi spune cum vă puteți face mașina să funcționeze în beneficiul umanității. Următorul articol va vorbi despre cum să vă creați propriul server de calcul distribuit.

2. „Grelă” misterioasă

Vom vorbi despre una dintre formele de calcul distribuit (în terminologia internațională astfel de calcule se numesc GRID - lattice) - Volunteer Computing. Mai întâi să clarificăm termenii.

GRID este o combinație de mai multe computere pentru a rezolva o singură problemă de calcul. sarcină dificilă, împărțit în subsarcini. Fiecare computer rezolvă mai multe subprobleme, iar rezultatele calculelor individuale sunt combinate. Principalul avantaj al GRID este că poate consta din calculatoare situate la mii de kilometri unul de celălalt și având caracteristici diferite (atât hardware, cât și software). Sarcina de a conecta aceste computere disparate este realizată de middleware care leagă (practic) toate computerele prin Internet într-un singur supercomputer. Ideea GRID a apărut în anii 1990, când, odată cu dezvoltarea comunicațiilor computerizate, prieten de la distanță de la alte computere a devenit un mijloc mai ieftin, mai simplu și potențial mai puternic de creștere a productivității decât creșterea puterii unui singur supercomputer.

Există diferite tipuri de GRID. Volunteer Computing este o formă de implementare a calculului GRID, a cărei specificitate este utilizarea timpului de nefuncționare a computerelor utilizatorilor obișnuiți din întreaga lume. Momentan cel mai mult proiect major Volunteer Computing, atât în ​​numărul de participanți, cât și în puterea totală, este Folding@home, un proiect de realizare a simulărilor computerizate ale plierii proteinelor, lansat în octombrie 2000 de oamenii de știință de la Universitatea Stanford. Totuși, acest articol nu va fi despre Folding@home, ci despre cel de-al doilea proiect ca mărime - sistemul BOINC. Motivul este simplu - spre deosebire de Folding@home specializat, proiectul BOINC oferă posibilitatea de a participa la o mare varietate de proiecte științifice, de la hacking. sisteme criptograficeși terminând cu căutarea civilizațiilor extraterestre!

3.BOIN

Performanţă

La momentul scrierii acestui articol, BOINC are 340 de mii de membri calculatoare active, iar performanța totală a computerelor participanților la proiect este de 1,9 petaflopi. Aceasta este de aproape 2 ori mai mare decât performanța celui mai puternic supercomputer modern IBM Roadrunner. Statisticile pentru proiectul BOINC pot fi văzute la pagina oficiala http://boinc.berkeley.edu/

Pentru a organiza calcularea distribuită (computing GRID), un adecvat platforma software. Sistemul trebuie să poată împărți unul sarcina mareîn multe subsarcini mici, distribuiți aceste subsarcini pe nodurile de calcul, acceptați rezultatele calculului și combinați-le într-un singur întreg. În acest scop, au fost create diverse „straturi” software între serverul de control și nodurile de calcul. Unul dintre aceste „straturi” software este BOINC.

3.1. Ce este BOIN?

SETI@HOME

SETI@HOME este un proiect non-profit de căutare a inteligenței extraterestre prin analiza semnalelor radio de la radiotelescopul Arecibo.

SETI(Search for Extra Terrestrial Intelligence, Search for Extraterrestrial Intelligence) este o linie de cercetare care vizează descoperirea vieții inteligente dincolo de Pământ. Metoda principală este studiul semnalelor radio care pătrund în spațiu. Oamenii de știință încearcă să găsească semnale radio ale căror surse nu pot fi naturale.

Semnalele de la radiotelescoape conțin în principal zgomot (de la surse extraterestre și de la electronica receptorului) și semnale terestre artificiale, cum ar fi semnalele de televiziune, radar și satelit. Proiectul modern SETI analizează datele în formă digitală. Puterea de calcul mai mare vă permite să acoperiți mai multe căutări intervale de frecvență Cu sensibilitate mai bună. Prin urmare, SETI are o nevoie nelimitată de putere de calcul.

Proiectele SETI anterioare au folosit supercalculatoare specializate care au efectuat cea mai mare parte a analizei datelor. În 1995, David Anderson a lansat un proiect de procesare a datelor SETI pe un supercomputer virtual, format din multe computere conectate la Internet, și a fondat proiectul SETI@home pentru a testa ideea. Proiectul SETI@home a fost lansat în mai 1999, iar în 2005 a trecut complet la platforma BOINC.

Discuția lui David Anderson despre SETI@HOME, calcul distribuit și BOINC poate fi găsită pe YouTube: http://www.youtube.com/watch?v=8iSRLIK-x6A(RO).

BOINC (Berkeley Open Infrastructure for Network Computing) - platformă deschisă Berkeley University for Network Computing) este o platformă software gratuită (licențiată conform GNU LGPL) pentru calcul distribuit (mai precis, Volunteer Computing). Sistemul BOINC a fost dezvoltat la Universitatea din California din Berkeley sub conducerea lui David Anderson de către echipa care a creat legendarul proiect SETI@home. Principala motivație pentru dezvoltarea sistemului a fost lipsa puterii de calcul libere pentru prelucrarea datelor provenite de la radiotelescoape. De aceea, dezvoltatorii au decis să atragă resurse de calcul și să unească comunitățile mai multor proiecte științifice. Pentru a rezolva această problemă la scară largă, a fost creată platforma software BOINC.

Sistemul BOINC constă dintr-un program client comun tuturor proiectelor BOINC, un server compozit (termenul „server compozit” înseamnă că serverul fizic poate consta din mai multe computere separate) și software. Pentru a efectua calcule distribuite, se utilizează o arhitectură client-server.

Utilizatorii care donează putere de calcul proiectelor BOINC precum SETI@home „câștigă” credite acordate pentru îndeplinirea subsarcinilor individuale. Aceste credite sunt necesare doar pentru a crea un spirit de competiție între participanții la proiect - utilizatorii cu cel mai mare număr de credite au șansa de a „străluci” pe pagina de start proiect.

3.2. Instalare

Instalarea programului client BOINC pe Linux este incredibil de simplă - folosind managerul de pachete preferat, instalați pachetele boinc-client, boinc-manager și boinc-gui din depozite. Dacă preferați să utilizați cele mai recente software sau dacă dvs distribuție Linux nu are un manager de pachete/repozitive (mai au mai rămas unele dintre acestea?), atunci puteți obține pachetul de instalare a celei mai recente versiuni a programului de pe pagina de descărcare a site-ului oficial al proiectului (căutați adresa site-ului în „ Linkuri” secțiunea de la numărul 1).

Indiferent de modul în care ați instalat programul client, veți găsi toate fișierele principale din directorul dvs. principal în subdirectorul BOINC - nu numai fișiere executabile, dar și fișiere de setări, precum și date necesare calculării sarcinilor. (Datorită acestui lucru, puteți „face toate computerele din rețeaua corporativă să funcționeze” cu ușurință într-un singur proiect).

Mai întâi trebuie să fugi manager grafic programe:

utilizator: /home/user/run_manager

Când începeți, vi se va cere să vă conectați la un proiect, un asistent special va simplifica acest proces (vezi Figura 1).


Pe pasul următor va trebui să selectați proiectul la care doriți să vă alăturați, apoi să introduceți dvs Adresa de e-mailși veniți cu o parolă, apoi poate fi necesar să finalizați înregistrarea pe site-ul web al proiectului. În special, pe site puteți selecta o echipă (de exemplu, „Echipa Rusiei”) sau chiar să vă creați propria (eu am creat „Echipa utilizatorilor Linux” în proiectul Climateprediction.net, alăturați-vă nouă!). Echipele, precum și participanții individuali, participă, de asemenea, la competiția informală „Colectează mai multe credite!”

Din păcate, managerul BOINC nu oferă descrieri de proiecte în timpul înregistrării, așa că va trebui să faceți o alegere în prealabil, de exemplu, uitându-vă la listele de proiecte prezentate la adresele din secțiunea „Link-uri” (). Nu totul este atât de bine cu proiectele propuse de manager, de exemplu, Einstein@home necesită resurse hardware semnificative, iar SHA-1 Collision Search Graz nu mai oferă sarcini de procesare...

3.3. Lucrăm în folosul științei!

Imediat după înregistrarea în proiect, programul client BOINC va începe descărcarea datelor necesare pentru finalizarea sarcinilor. Vă rugăm să rețineți că, în funcție de proiect, această etapă poate dura destul de mult și vă poate afecta statisticile primite de trafic pe Internet. Proiectul ClimatePrediction.net trebuia să descarce mai mult de 100 MB înainte de a începe să calculeze prima sarcină.

Este necesar și mai mult timp pentru calculele sarcinii: fereastra principală arată progresul curent al calculului sarcinii, timpul petrecut și estimarea timpului necesar pentru finalizarea sarcinii (vezi Figura 2).

Pe lângă această vizualizare (simplificată) a ferestrei programului client BOINC, există și o vizualizare extinsă mai informativă - faceți clic pe butonul Vizualizare avansată din colțul din dreapta jos (vezi Figura 3).


Acum poți obține număr mare informații suplimentare despre proiectul la care participați: diverse statistici, informații despre utilizarea resurselor computerului, fișiere care trebuie descărcate pentru a calcula sarcina și multe altele! Toate acestea sunt ascunse în spatele butoanelor și elementelor de meniu cu etichete intuitive, așa că nu ne vom opri în detaliu asupra acestor funcții. Să ne oprim doar asupra uneia dintre ele...

În fila „Sarcini”, selectați linia cu sarcina - apoi butoanele de pe panoul din stânga vor deveni active (ca în Figura 3). Faceți clic pe butonul „Afișează grafica” și o imagine minunată va apărea în fața ochilor tăi - acesta este chiar modelul pe care îl calculează computerul tău. Jucându-vă cu tastele de control (vezi sfaturi din stânga: T – harta temperaturii, R – zăpadă și ploaie, P – presiune, C – înnorărire, S – pornire/oprire rotația globului, G – afișare/ascunde grila, H – ajutor), puteți observa ceva similar cu ceea ce este prezentat în Figura 4.


Desigur, ce fel de imagine vezi depinde de proiect. Nimic nu te împiedică să cauți ceva mai interesant pentru tine.

Încă o notă plan practic. Figurile 2 și 3 arată că timpul total necesar pentru calcularea locului de muncă depășește 200 de ore. Desigur, nu orice computer (mai ales acasă) are un timp de funcționare continuă de aproximativ 10 zile. Pentru a nu pierde toate rezultatele calculelor atunci când computerul este oprit, BOINC stabilește puncte de control. Butonul „Informații” din fila „Sarcini” va afișa, printre altele, informații despre ora ultimei punct de control– când închideți computerul, veți pierde doar aproximativ 15 minute de lucru cu procesorul.

3.4. Personalizarea programului client pentru dvs

Utilizatorului i se oferă un control mare asupra programului client BOINC folosind diverse setari. Unele dintre aceste setări sunt specifice proiectului, altele sunt generale și afectează funcționarea programului în ansamblu. În vizualizarea extinsă a ferestrei programului client, selectați elementul de meniu „Avansat” - „Setări client”. Aici puteți specifica astfel de parametri pentru utilizarea computerului, astfel încât funcționarea programului client BOINC să fie aproape de neobservat! Puteți limita cantitatea de resurse de procesor utilizate pentru calculul distribuit. Printre altele, puteți specifica dacă programul client va executa sarcini în timp ce utilizatorul utilizează în mod activ computerul sau dacă lucrul la un proiect distribuit va începe numai după o anumită perioadă de timp inactiv al procesorului.

Ca setare specifică proiectului, puteți specifica cantitatea minimă și maximă de lucru pe care programul client o va efectua pentru un proiect specificat între două conexiuni la server. Când cantitatea de muncă rămasă este mai mică valoarea minima, programul client va contacta serverul de proiect și va solicita cât mai multe joburi specificate în valoarea maximă a lucrării. În timpul acestei sesiuni de comunicare, programul client va raporta și lucrările finalizate. Această caracteristică este utilă dacă dintr-un motiv oarecare trebuie să minimizați numărul de conexiuni la Internet.

Puteți limita viteza de descărcare a sarcinilor de pe Internet, cantitatea de spațiu pe disc utilizată de programul client BOINC și RAM... Toate aceste setări sunt intuitive și nu va fi dificil să le schimbi, astfel încât munca în beneficiul umanității să nu interfereze cu interesele tale personale.

Dacă încă nu v-ați hotărât cărui proiect să oferiți puterea gratuită a computerului, nu vă faceți griji! Puteți participa la mai multe proiecte simultan („Instrumente” – „Adăugați proiect” într-o vizualizare extinsă a ferestrei programului sau butonul „Adăugați proiect” într-o vizualizare simplificată) - în mod implicit, programul client BOINC se va schimba la fiecare 60 de minute (acest parametru poate fi modificat) între sarcinile diferitelor proiecte.

3.5. Cateva detalii tehnice

După cum am menționat mai sus, proiectul distribuit BOINC constă dintr-un server compozit care distribuie sarcini clienților și colectează rezultate și un set de programe client conectate la server care efectuează principala activitate de obținere a rezultatelor.

Fiecare program client se conectează la server și primește o sarcină pentru procesare. După ceva timp, când sarcina este finalizată, programul client se conectează din nou la server și îi transmite rezultatele (și primește, de asemenea, o nouă sarcină). Pentru finalizarea unei sarcini, un participant la proiect înregistrat care deține programul client primește credite - puncte care caracterizează timpul petrecut de procesor pentru calcule.

Cu toate acestea, există o serie de pericole ascunse în acest design pentru un proiect de calcul distribuit. În primul rând, programul client care a primit sarcina poate, din diverse motive, să nu mai comunice niciodată cu serverul. De exemplu, dacă un membru al proiectului care deține un program client și-a pierdut interesul pentru proiect. În al doilea rând, participanții la proiect (din nou din diverse motive) pot trimite rezultate incorecte. Acest lucru este chiar mai periculos pentru proiect decât simpla lipsă de rezultate, deoarece o singură sarcină calculată incorect poate provoca un fiasco complet al proiectului! Și în al treilea rând, participanții la proiect pot încerca să obțină mai multe credite decât au câștigat. Desigur, din moment ce creditele câștigate sunt folosite doar pentru statistici, acest pericol la prima vedere nu este atât de teribil... Problema constă însă în psihologia conservării comunității. Nu un număr atât de mare de utilizatori sunt interesați în mod special să ajute cercetarea științifică, majoritatea utilizatorilor vor fi enervați de „înșelători” și, prin urmare, dezamăgiți de proiect și vor înceta să-i dedice timp.

Sistemul BOINC evită prima problemă prin simpla stabilire a unui termen până la care programul client trebuie să returneze rezultatul calculului (de exemplu, în Figura 3 se poate observa că termenul până la care rezultatul sarcinii trebuie returnat este 19 mai). , 2010).

A doua problemă este rezolvată prin trimiterea aceluiași job către mai mulți utilizatori (aceasta se numește calcul redundant). Pentru fiecare loc de muncă, numărul de lucrători duplicați este individual, dar valoarea implicită a platformei BOINC este de cinci. Când programul client își raportează calculele, serverul compară rezultatele trimise de diferiți participanți. Rezultatul acceptat de „cvorumul” programelor client este considerat corect, iar răspunsurile incorecte sunt respinse. Participanții care returnează rezultate incorecte pe server nu primesc credite. Numărul de programe client care constituie un „cvorum” poate fi specificat și pentru fiecare job individual, iar valoarea implicită este trei. Apropo, tocmai din cauza acestei forme de verificare a rezultatelor veți observa întârzieri în calcularea creditelor câștigate.

BOINC rezolvă a treia problemă în același mod ca și problema răspunsurilor incorecte - prin efectuarea de calcule redundante. Dacă un utilizator umflă valoarea creditelor pe care ar trebui să le primească, atunci el crește și valoarea creditelor pe care le vor primi utilizatorii onești. Acest lucru reduce daunele din înșelăciune.

3.6. Rezumând

Utilizarea calculatoarelor distribuite - nou pasîn dezvoltarea cercetării științifice. Oamenii de știință din întreaga lume dezvoltă proiecte care necesită un număr mare de calcule, iar platforma software BOINC face posibil ca oricine să se alăture acestor proiecte, fără a necesita nici educație specializată, nici resurse hardware speciale. Tot ce trebuie să faceți este să descărcați și să instalați programul client.

Cu toate acestea, acest lucru nu este tot ce s-ar putea spune despre BOINC. De exemplu, BOINC poate folosi GPU (Graphics Processing Unit) pentru calcule. placi video NVIDIA. Puteți crea skinuri pentru programul client, puteți rula programul client pe diferite computere sub același cont, puteți controla programul client fără GUI și chiar puteți găsi computerul furat folosind BOINC! Și, desigur, oricine își poate crea propriile sale proiect propriu calcul distribuit bazat pe BOINC. Începeți cu această pagină http://boinc.berkeley.edu/wiki/User_manual a site-ului web oficial și, dacă aveți dificultăți, accesați forumul în limba rusă: http://boinc.ru/forum/.

În următorul articol vom intra în detalii despre cum să vă creați propriul server BOINC. Cine știe, poate acest lucru va contribui la apariția de noi proiecte interne de calcul distribuit? Între timp, să așteptăm ca proiectul rus DrugDiscovery@Home să fie lansat la capacitate maximă (vezi adresa site-ului în secțiunea „Link-uri” la numărul 9), creat și susținut de o echipă internațională de dezvoltatori și aflat în prezent în alpha testing etapă.

4. Concluzie

De mai bine de șaisprezece ani, fiecare utilizator are o bună oportunitate de a contribui la dezvoltarea științei. Nu sunt necesare donații bănești sau chiar interes profesional pentru subiectul de cercetare ales. Singurul lucru care contează este ce trăsături de caracter are o persoană și cum computerele moderne îi sunt la dispoziție. Cu o combinație de succes a acestor factori, apar noduri fiabile ale rețelelor de calcul distribuite - unul dintre cele mai puternice instrumente pentru prelucrarea datelor computerizate.

Datorită eforturilor comune ale utilizatorilor obișnuiți, s-au făcut multe descoperiri semnificative. Numai în ultimii trei ani au găsit 53 de pulsari, iar ultimii șapte au fost găsiți destul de recent - la sfârșitul lunii august 2012. Rezultatele cercetărilor efectuate sunt utilizate în dezvoltarea de medicamente pentru tratamentul diabetului de tip 2, bolile Alzheimer și Parkinson și alte boli grave. Pe baza muncii efectuate au fost publicate sute de articole științifice.

Supercalculatoare și rețele distribuite

Supercomputerele puternice sunt o picătură în ocean. Nu există atât de multe mașini care să fie o sursă de mândrie pentru țări întregi și să ocupe primele rânduri ale clasamentului TOP 500 și nu sunt suficiente pentru toată lumea. Pentru a avea acces la un supercomputer, trebuie mai întâi să justificați necesitatea sarcinii alese, iar apoi, dacă argumentele sunt convingătoare, să așteptați la coadă și să aveți timp să optimizați codul pentru execuție pe o arhitectură unică de supercomputer.

  • Tutorial

În urmă cu nouă ani, am început să predau „în timpul liber din slujba mea principală”. discipline de calculator la una din universităţile din Sankt Petersburg. Și doar relativ recent, spre surprinderea mea, am descoperit că în universitățile noastre practic nu există cursuri care să se concentreze pe problemele calculului distribuit. Și nici pe Habré acest subiect nu este suficient acoperit! Trebuie să corectăm situația chiar acum.

Am vrut să dedic un articol sau chiar o serie de articole acestui subiect. Dar apoi am decis să postez tutorialul meu despre noțiunile de bază ale calculului distribuit, care a fost publicat anul acesta (citiți, o carte mică de 155 de pagini). Rezultatul a fost un hibrid - un articol cu ​​un link către carte. Cartea este distribuită gratuit și este disponibilă în format electronic.

În loc de un prolog. După ce am început textul articolului, m-am gândit încă o dată de ce trebuie să știe un programator fundamente teoretice calcul distribuit. Am auzit în mod repetat (și aud în continuare) această întrebare de la studenți și specialiști care lucrează deja în domeniul IT. Într-adevăr, de ce, de exemplu, știm că „mulțimea evenimentelor unui calcul distribuit este ordonată parțial, și nu liniar”? Care este, ca să spunem așa, utilizarea practică de zi cu zi a acestor cunoștințe fundamentale?

Trebuie să recunosc că nu am un răspuns memorat gata făcut pe care să-l pot scuipa fără să mă gândesc. Prin urmare, de fiecare dată trebuie să vă încordați creierul și de fiecare dată răspunsurile și argumentele se dovedesc a fi diferite. Și acum totul este ca pentru prima dată...

Să încercăm să începem de departe. Și ca să fie mai clar – din medicină. Pentru că, când vine vorba de erori medicale, creierul începe să lucreze activ și să genereze o indignare puternică: groază, groază, ar putea ucide o persoană. Ce sunt ei acolo, de fapt? Chiar nu știu ei ce fac?

Cu toții ne așteptăm în mod firesc ca înainte de a începe orice manipulări cu corpul uman, medicii încă îl studiază structura internăși principiile de funcționare. Nu suntem absolut de acord cu afirmația că este mult mai important ca chirurgii să urmeze cursuri practice de tăiere și cusut în loc de mulți ani de înghesuială de material teoretic despre ceea ce este în interiorul nostru și de ce este acolo. Deci, de ce ar trebui programatorii să dezvolte un sistem cu networking(adică, până acum, aproape orice sistem), nu trebuie să știți „ce este înăuntru și de ce este acolo”? De ce greșelile din IT sunt percepute cel mult cu ușoară ironie? Ei bine, da, ei bine, este un bug. Și cine nu bea nu face gândaci?! Numiți-i! Nu, aștept! Printre cerințele pentru programatori, din anumite motive, abilitățile practice într-unul sau altul limbaj de programare vin foarte des în prim-plan. Mai mult, vine în prim-plan, eclipsând complet cerințele de înțelegere a conceptelor de bază, modelelor teoretice, algoritmilor, până la urmă... Și programatorii înșiși, să fiu sincer, odată cu începutul conversației „despre o teorie pe care nimeni nu. nevoi”, se ofilesc ca florile în deșert... Miracole, nu-i așa...

Voi face o scurtă declarație a lui L. Lamport pe această temă (putin mai jos am încercat să traduc această afirmație în rusă, fără să mă îndepărtez prea mult de original):

De ceva vreme, am fost deranjat de accentul pus pe limbaj în informatică. Un rezultat al acestui accent este programatorii care sunt experți în C++, dar nu pot scrie programe care să facă ceea ce ar trebui să facă. Răspunsul tipic informatic este că programatorii trebuie să folosească limbajul potrivit de programare/specificație/dezvoltare în loc de/în plus față de C++. Răspunsul industrial tipic este de a oferi programatorului instrumente de depanare mai bune, pe baza teoriei că putem obține programe bune punând o maimuță la. o tastatură și găsirea automată a erorilor din codul acesteia.
Cred că cel mai bun mod de a obține programe mai bune este să-i înveți pe programatori cum să gândească mai bine. Gândirea nu este capacitatea de a manipula limbajul; este capacitatea de a manipula concepte. Informatica ar trebui să fie despre concepte, nu despre limbaje.

Ajunge deja perioadă lungă de timp Sunt îngrijorat de prea mult accent pe limbajul informatic în IT. Rezultatul acestei supraabundențe de atenție sunt programatorii care sunt experți în C++, dar care nu sunt capabili să scrie programe care să facă ceea ce ar trebui să facă. Răspunsul tipic din partea reprezentanților IT la această problemă este de a sugera programatorilor să mai folosească un altul limbaj potrivit(programare, specificații etc.) în loc de / în plus față de C++. La rândul său, ieșirea din situație, caracteristică industriei de dezvoltare software, este văzută în furnizarea programatorilor cu instrumente de depanare mai avansate, aparent bazate pe presupunerea că programe bune poți pur și simplu să pui o maimuță la tastatură și apoi să găsești și să corectezi erorile din codul acesteia.
Convingerea mea fermă este că pentru a obține programe de calitate Este necesar să-i învățăm pe programatori să gândească mai bine. Capacitatea de a gândi nu este capacitatea de a opera limbajul calculatorului; este capacitatea de a manipula concepte. Studiile privind tehnologia informației ar trebui să se concentreze mai degrabă pe învățarea conceptelor decât a limbilor.

Pentru a ilustra cât de importante pot fi „conceptele” și „elementele de teorie” atunci când vine vorba de construirea de sisteme distribuite, să ne uităm la câteva exemple simple. Pentru a începe - mesagerie de grup e-mailîntre utilizatorii A, B, C și X. Să presupunem că utilizatorul A trimite un e-mail întregului grup cu subiectul „Adunarea generală”. Utilizatorii B și C răspund la acesta întregului grup cu mesajele lor cu subiectul „Re: Adunarea generală”.

În realitate, evenimentele au loc în următoarea secvență:

  1. Mesajul de la utilizatorul A este trimis mai întâi.
  2. Utilizatorul B îl primește, îl citește și trimite un răspuns.
  3. Utilizatorul C primește ambele mesaje de la A și B și apoi își trimite răspunsul pe baza ambelor mesaje de la A și B.
Cu toate acestea, din cauza întârzierilor aleatorii și independente în livrarea mesajelor, unii utilizatori pot vedea o secvență diferită de evenimente. De exemplu, conform scenariului prezentat în figura de mai jos, în căsuța poștală a utilizatorului X, mesajele vor fi localizate în următoarea ordine:
  1. Mesaj de la utilizatorul C cu subiectul „Re: Re: Adunarea Generală”.
  2. Mesaj de la utilizatorul A cu subiectul „Adunarea generală”.
  3. Mesaj de la utilizatorul B cu subiectul „Re: Adunarea generală”.

Aha, se dovedește că ordinea de sosire a mesajelor observate de diferite procese poate fi diferită chiar și pentru canalele FIFO! Dar dacă vrem ca ordinea observată să fie aceeași peste tot (și nu vrem să folosim mesageria sincronă)? De exemplu, dacă scriem transportul nostru cu garanții corespunzătoare. Sau vrem să construim un serviciu tolerant la erori (mașină cu stări replicate), în care fiecare replică trebuie să proceseze cererile primite în aceeași ordine pentru toate replicile, astfel încât stările replicilor să nu difere? Întrebare…

Să luăm acum în considerare o altă execuție a unui sistem distribuit în care procesele comunică doar prin schimbul de mesaje, iar fiecare proces este angajat în aprinderea/stingerea unui felinar cu o lumină specifică. Lăsați primul proces să controleze un felinar cu lumină roșie, al doilea cu lumină galbenă și al treilea cu lumină verde. Acesta este sistemul de semafor. În figura de mai jos, aprinderea lanternei prin proces este indicată printr-un dreptunghi, iar stingerea acesteia este indicată printr-o linie verticală; trimiterea și primirea mesajelor - săgeată. Întrebare: Procesele pot determina ce lumini au fost aprinse în același timp?

Deci se dovedește că în această execuțieÎntr-un sistem asincron, procesele nu vor putea determina dacă lumina roșie a fost aprinsă în același timp cu cea galbenă. Poate că da. Sau poate nu... Acest lucru va rămâne necunoscut. Dar se va ști cu siguranță că luminile roșii și verzi au fost aprinse în același timp. Cu alte cuvinte, se dovedește că nu are rost să spunem că o anumită stare globală este atinsă în timpul execuției unui sistem distribuit! La fel de adesea, este imposibil de spus dacă a fost îndeplinită vreo condiție (predicat) specificată pe setul stărilor sale globale! Din nou întrebarea este: de ce?

Răspunsul nostru către Chamberlain. De fapt, răspunsurile la aceste și multe alte întrebări legate de funcționarea sistemelor distribuite asincrone sunt extrem de greu de încadrat în cadrul unui articol. De aceea am decis să public mai multe articole deodată într-unul. Mai precis, așa cum este indicat la începutul articolului, prezentați mica dvs. carte despre elementele de bază ale calculului distribuit, disponibilă în formă electronică.

Din această carte veți învăța:

  • despre ordinea cauză-efect a evenimentelor de calcul distribuite
  • ce este justiția, securitatea și supraviețuirea
  • care este conul trecut și conul viitor pentru un eveniment de calcul
  • Cum este paralelismul logic diferit de paralelismul fizic?
  • de ce nu are prea mult sens să vorbim despre un set de stări globale de calcul, dar are sens să vorbim despre un set de evenimente de calcul
  • cum aranjam evenimentele de calcul distribuite în una sau mai multe secvențe care „s-ar putea” întâmpla în sistem?
  • ce este un ceas logic și ce fel de timp logic măsoară?
  • de ce se oprește timpul logic dacă nu se întâmplă nimic în sistem
  • Cum diferă timpul scalar de timpul vectorial?
  • cum și de ce puteți utiliza timpul logic în algoritmi distribuiți
  • Care sunt abordările pentru implementarea eficientă a ceasurilor vectoriale?
  • de ce am putea avea nevoie de timp matrice
  • Cum diferă un algoritm distribuit de unul centralizat?
  • cum să rezolvi problema excluderii reciproce fără a utiliza variabile partajate
  • În ce categorii se încadrează toți algoritmii de excludere reciprocă distribuite?
  • De ce algoritmii bazați pe permisiuni folosesc timpul logic?
  • de ce este atât de greu pentru filozofi să ia masa într-un sistem distribuit
  • De ce avem nevoie de un grafic de conflict și un grafic de precedență?
  • de ce ar trebui să se schimbe graficul de precedență în timp?
  • de ce în algoritmii bazați pe trecerea token-ului există mult mai mult în afară de „pasarea token-ului” reală
  • si, sper, inca ceva...
În ce constă cartea și cum să o citești?

La început, am încercat să subliniez pe scurt ce obiective au fost stabilite la scrierea cărții și cum se raportează aceasta la altă literatură. Acesta este subiectul introducerii cărții. Are doar puțin peste două pagini, așa că merită citit.

Prima secțiune este în mare parte boltologică și este dedicată caracteristicilor „calitative” ale sistemelor distribuite. Dacă nu știți ce este un sistem distribuit și care sunt cerințele pentru acesta, atunci prima secțiune are sens să o citiți. Dacă știți că mesajele care sosesc la procesul de recepție pot da o idee învechită despre procesul de trimitere, la fel cum radiația luminoasă care vine la noi de la o stea îndepărtată oferă o idee despre starea acestei stele în trecut, atunci primele patru puncte pot fi sărite :) Separat, este de remarcat paragraful 1.5 „Interacțiunea în sistemele distribuite”, în care am încercat să dau mai multe sarcini simple, demonstrând provocările care pot fi întâlnite la dezvoltarea sistemelor distribuite. Vom rezolva apoi aceste probleme, înarmați cu cunoștințe teoretice, așa că merită să vă familiarizați cu ele.

A doua secțiune prezintă modelul de calcul distribuit și teoria de bază folosită în discuția de mai jos. Într-un fel, această secțiune este cheia. Cu toate acestea, trebuie să fiți pregătit să lucrați cu termeni precum „mult/subset”, „relație binară”, „relație de echivalență”, „relație de ordine”, „ordine liniară/parțială”. În această secțiune veți găsi dovezi ale unor afirmații. Mi se pare că ar trebui, cel puțin, trecute cu vederea (sau mai bine zis, studiate) pentru o înțelegere mai profundă a trăsăturilor esențiale ale funcționării sistemelor distribuite care le deosebesc de sistemele altor clase.

Pe baza teoriei prezentate mai sus, secțiunea a treia analizează în cele din urmă lucruri mai practice, și anume diferitele mecanisme ale ceasurilor logice. Cu ajutorul lor, putem aranja evenimente în una sau mai multe secvențe care ar putea apărea în sistem, ceea ce simplifică foarte mult dezvoltarea algoritmilor pentru sistemele distribuite. Sunt date exemple de utilizare a ceasurilor logice pentru rezolvarea problemelor formulate în paragraful 1.5 „Interacțiunea în sistemele distribuite”.

A patra secțiune este dedicată studiului algoritmilor de excludere reciprocă distribuiți de bază, construiți fără utilizarea variabilelor partajate convenționale. Ideile cheie ale acestor algoritmi sunt folosite pentru a rezolva multe alte probleme în sistemele distribuite. În plus, studiul lor face posibilă dezvăluirea unor astfel de lucruri probleme importante, ca asigurând proprietățile de securitate și supraviețuirea algoritmilor distribuiți. Prin urmare, consider această secțiune foarte utilă pentru familiarizare.

Cui i se adresează această carte?

Materialul din carte ar trebui considerat ca o introducere în problemele calculului distribuit. A apărut dintr-un mediu universitar academic și va fi cu siguranță util dacă abia începeți să lucrați în acest domeniu. Dacă aveți deja ceva experiență în dezvoltarea de sisteme și algoritmi distribuiti, poate că veți găsi ceva nou pentru dvs. și vă veți împărtăși părerea în comentarii. Dacă aveți ani de experiență sub centură și sunteți expert în acest subiect, sper că puteți adăuga gândurile și gândurile dvs. la mine.

ce mi-ar placea?

  • Serghei Savenkov

    un fel de recenzie „scurtă”... de parcă s-ar grăbi undeva