T++ | |
---|---|
Semantică | multi- paradigma : orientat pe obiecte , generic , procedural , metaprogramare , functional , programare paralela |
Clasa de limba | limbaj de programare |
Tipul de execuție | compilate |
Aparut in | anii 1980 |
Autor | Institutul de sisteme de programe RAS |
Extensie de fișier | .tpp |
Implementări majore | proprietate |
T++ este un limbaj de programare care indică necesitatea calculului paralel cu sintaxă și semantică care extind limbajul C++ , și anume prin extinderea lui cu câteva cuvinte care indică posibilitatea de calcul paralel. Paralelizarea calculelor în sine este efectuată automat de biblioteca runtime a mediului integrat T-system în timpul execuției programului, adică dinamic, care extinde mediul integrat Microsoft Visual Studio C++ cu un patch . [1] Pentru a indica necesitatea paralelizării calculelor, o funcție, variabilele sale externe și pointerii utilizați sunt marcate cu cuvintele cheie corespunzătoare. În absența efectelor secundare evidente, compilatorul întocmește funcția nu ca un element de programare procedurală, ci ca unul funcțional , adică pur (fără efecte secundare ). Dacă există efecte secundare evidente, cum ar fi utilizarea I/O, atunci compilatorul le va detecta și va emite un mesaj de eroare.
Un exemplu de program pentru calcularea numărului Fibonacci :
tfun int fib ( int n ) { returnează n < 2 ? n : fib ( n - 1 ) + fib ( n - 2 ); } tfun int main ( int argc , char * argv []) { if ( argc != 2 ) { printf ( "Utilizare: fib <n> \n " ); întoarcere 1 ; } int n = atoi ( argv [ 1 ]); printf ( "fib(%d) =%d \n " , n , ( int ) fib ( n )); returnează 0 ; }După cum se poate vedea din exemplu, limbajul T++ a făcut modificări minore în sintaxa limbajului C++, și anume: pointeri tfunpentru a permite calculul paralel. În ciuda ineficienței unei astfel de implementări de calcul al numărului --lea Fibonacci, acest program arată nu numai simplitatea și claritatea sistemului T, ci demonstrează și accelerația atunci când este executată pe mai multe procesoare, iar programatorul nu trebuie să știe despre acestea. numără și distribuie sarcina utilă între ele.
Sistemul T oferă un mediu de dezvoltare integrat prin extinderea mediului Microsoft Visual Studio C ++ cu . Mediul de dezvoltare a sistemului T oferă posibilitatea de a activa un preprocesor care filtrează codul sursă T++ (convertește codul sursă T++ în C++) pentru a rula programul în modul serial (pentru depanarea codului C++). După depanarea în modul serial, puteți depana codul sursă T++ și apoi îl puteți compila : codul sursă este optimizat și convertit, bibliotecile de rulare de calcul paralel [2] sunt conectate și codul C++ este compilat. T-System este un instrument de paralelizare dinamică automată a programelor, conceput pentru a facilita dezvoltarea și utilizarea programelor paralele complexe și utilizarea eficientă a acestora pe echipamente diverse, inclusiv eterogene. A fost dezvoltat la Institutul de Sisteme Informaționale al Academiei Ruse de Științe și este în prezent dezvoltat la Institutul de Sisteme Informaționale al Academiei Ruse de Științe și Universitatea de Stat din Moscova.
OpenTS (Open T-System, T-system with an open architecture ) este o implementare modernă a sistemului T. Oferă paralelizarea dinamică automată a programelor și oferă un mediu de execuție pentru limbajul de programare de nivel înalt T++ , care este un dialect paralel al limbajului C++ [3] .
OpenTS folosește fire ușoare cu comutare rapidă (câteva nanosecunde) și poate gestiona peste un milion de fire ușoare per procesor. Pe baza acestor fire, sunt implementate o serie de caracteristici, cum ar fi fire mobile, obiecte și referințe, colectare distribuită de gunoi, un panou de mesaje pentru schimbul de date și sarcini etc.
OpenTS a fost testat cu succes pe o gamă largă de sarcini și pe instalații de calcul de diferite dimensiuni: de la PC-uri multiprocesor până la sisteme informatice cu arhitecturi diferite și capacități diferite (diverse clustere multiprocesoare Windows / Linux Intel / AMD, instalație rusă teraflop MVS-1000 M , etc.). OpenTS acceptă o gamă largă de platforme paralele: procesoare multi-core, sisteme SMP, clustere, metaclustere și sisteme GRID.
Ideea T-System a luat naștere la sfârșitul anilor 1980 la Institutul de sisteme de programe al Academiei Ruse de Științe [1] . Ideea principală a fost introducerea conceptului de funcții T ca furnizori de așa-numite valori nepregătite , ceea ce a făcut posibilă executarea simultană a mai multor funcții T pe diferite procesoare și, astfel, obținerea paralelismului.
În 1998 , proiectul a câștigat o a doua naștere cu participarea activă a Universității de Stat din Moscova . În 2000 , în cadrul proiectului ruso-belarus „ SKIF ”, au început lucrările la o nouă implementare a sistemului T , cu numele de cod GRACE . Cu toate acestea, după primul an de dezvoltare, au fost descoperite deficiențe semnificative ale acestei implementări. Structura proastă a sistemului, lipsa unei ideologii și arhitecturi clare au dus la numeroase erori, înghețari, depășiri de stive . Dar, cel mai important, numeroase încercări de a rezolva probleme au redus adesea viteza și eficiența programelor deja scrise și, în unele cazuri, le-au făcut inoperabile.
În 2002 , sa decis să se scrie o nouă implementare a sistemului T. Se numea OpenTS sau Open Architecture T-System . Spre deosebire de cele două implementări anterioare, OpenTS a stabilit inițial o anumită arhitectură bazată pe experiența dezvoltării versiunilor anterioare ale sistemului. OpenTS a trecut cu succes testele de stat în cadrul proiectului SKIF pentru conformitatea cu criteriile pentru software-ul la nivel de cluster.
În prezent, MSU lucrează la două ramuri independente ale OpenTS sub numele condiționat NewTS.
1. O funcție declarată cu un cuvânt cheie tfun(așa-numita funcție T) este obiectul principal ( granulă ) al paralelismului. Tastați intrarea:
tfun int f ( int a , dublu b )descrie o funcție T cu două argumente și o valoare de ieșire.
2. Apelul funcției T nu blochează programul până la finalizarea funcției T. Rezultatul apelului este o valoare brută (valoarea T).
3. O valoare nepregătită poate fi atribuită unei variabile T . Operația de atribuire a unei valori nepregătite unei variabile T nu blochează programul. Variabila T este descrisă cu un cuvânt cheie tval(nu tvar, acesta este rezultatul respectării tradiției, clasa corespunzătoare a nucleului OpenTS se numește TVar). Înregistrare
tval int x ;descrie o variabilă T de tip int .
4. La sfârșitul calculului funcției T, valoarea nepregătită corespunzătoare devine gata și apoi repetă comportamentul valorii normale a tipului de bază.
5. Operația de preluare a unei valori sau de turnare la un tip de bază pentru variabile T provoacă blocarea execuției funcției până când valoarea variabilei T este gata.