T++ | |
---|---|
Semantik | multi- paradigm : objektorienterad , generisk , procedurell , metaprogrammering , funktionell , parallell programmering |
Språkklass | programmeringsspråk |
Utförandetyp | sammanställt |
Framträdde i | 1980-talet |
Författare | Institutet för programsystem RAS |
Filtillägg _ | .tpp |
Stora implementeringar | Proprietär |
T++ är ett programmeringsspråk som indikerar behovet av parallell beräkning med syntax och semantik som utökar C++-språket , nämligen genom att utöka det med några ord som indikerar möjligheten till parallell beräkning. Parallelliseringen av själva beräkningarna utförs automatiskt av runtime-biblioteket i den integrerade T- systemmiljön under körningen av programmet, det vill säga dynamiskt, vilket utökar den integrerade Microsoft Visual Studio C++-miljön med en patch . [1] För att indikera behovet av parallellisering av beräkningar markeras en funktion, dess externa variabler och använda pekare med motsvarande nyckelord. I avsaknad av uppenbara bieffekter, ritar kompilatorn funktionen inte som ett element av procedurprogrammering, utan som en funktionell sådan, det vill säga ren (utan biverkningar ). Om det finns uppenbara biverkningar, som att använda I/O, kommer kompilatorn att upptäcka dem och utfärda ett felmeddelande.
Ett exempelprogram för att beräkna Fibonacci-talet :
tfun int fib ( int n ) { retur n < 2 ? n : fib ( n -1 ) + fib ( n -2 ) ; } tfun int main ( int argc , char * argv []) { if ( argc != 2 ) { printf ( "Användning: fib <n> \n " ); retur 1 ; } int n = atoi ( argv [ 1 ]); printf ( "fib(%d) =%d \n " , n , ( int ) fib ( n )); returnera 0 ; }Som framgår av exemplet har T++-språket gjort mindre ändringar i syntaxen för C++-språket, nämligen: pekare tfunför att möjliggöra parallell beräkning. Trots ineffektiviteten i en sådan implementering av beräkning av det -th Fibonacci-talet visar detta program inte bara enkelheten och tydligheten hos T-systemet, utan demonstrerar också acceleration när den körs på flera processorer, och programmeraren behöver inte veta om deras nummer och fördela nyttolasten mellan dem.
T-systemet tillhandahåller en integrerad utvecklingsmiljö genom att utöka Microsoft Visual Studio C ++-miljön med . T-systemutvecklingsmiljön ger möjlighet att aktivera en förprocessor som filtrerar T++- källkod (konverterar T++-källkod till C++) för att köra programmet i seriellt läge (för felsökning av C++-kod). Efter felsökning i seriellt läge kan du felsöka T++-källkoden och sedan kompilera den : källkoden är optimerad och konverterad, parallellberäkningskörningsbiblioteken [ 2] är anslutna och C++-koden kompileras. T-System är ett verktyg för automatisk dynamisk parallellisering av program, designat för att underlätta utveckling och användning av komplexa parallella program och deras effektiva användning på olika, inklusive heterogen, utrustning. Det utvecklades vid Institutet för informationssystem vid den ryska vetenskapsakademin och utvecklas för närvarande vid Institutet för informationssystem vid den ryska vetenskapsakademin och Moskvas statliga universitet.
OpenTS (Open T-System, T-system with a open architecture ) är en modern implementering av T-systemet. Det ger automatisk dynamisk parallellisering av program och tillhandahåller en exekveringsmiljö för högnivåprogrammeringsspråket T++ , som är en parallelldialekt av C++-språket [3] .
OpenTS använder lätta trådar med snabb växling (några nanosekunder) och kan hantera över en miljon lätta trådar per processor. Utifrån dessa trådar implementeras ett antal funktioner, såsom mobila trådar, objekt och referenser, distribuerad sophämtning, en anslagstavla för utbyte av data och uppgifter m.m.
OpenTS har framgångsrikt testats för ett brett spektrum av uppgifter och på datorinstallationer av olika storlekar: från multiprocessor -datorer till datorsystem med olika arkitekturer och olika kapaciteter (olika multiprocessor Windows / Linux Intel / AMD-kluster, rysk teraflop-installation MVS-1000 M , etc...). OpenTS stöder ett brett utbud av parallella plattformar: flerkärniga processorer, SMP-system, kluster, metakluster och GRID-system.
Idén med T-systemet föddes i slutet av 1980 -talet vid Program Systems Institute of the Russian Academy of Sciences [1] . Huvudtanken var införandet av konceptet T-funktioner som leverantörer av så kallade ofärdiga värden, vilket gjorde det möjligt att samtidigt exekvera flera T-funktioner på olika processorer och därigenom uppnå parallellitet.
1998 fick projektet en andra födelse med aktivt deltagande av Moscow State University . År 2000 , inom ramen för det rysk-vitryska projektet " SKIF ", påbörjades arbetet med en ny implementering av T-systemet , med kodnamnet GRACE . Men efter det första utvecklingsåret upptäcktes betydande brister i denna implementering. Den dåliga strukturen i systemet, avsaknaden av en tydlig ideologi och arkitektur ledde till många fel, frysningar, stackoverflows . Men viktigast av allt, många försök att lösa problem minskade ofta hastigheten och effektiviteten hos de redan skrivna programmen, och i vissa fall gjorde dem obrukbara.
2002 beslutades att skriva en ny implementering av T-systemet. Det kallades OpenTS , eller Open Architecture T-System . Till skillnad från de två tidigare implementeringarna lade OpenTS initialt en viss arkitektur baserad på erfarenheten av att utveckla tidigare versioner av systemet. OpenTS har framgångsrikt klarat statliga tester under SKIF-projektet för att uppfylla kriterierna för programvara på klusternivå.
För närvarande arbetar MSU på två oberoende grenar av OpenTS under det villkorade namnet NewTS.
1. En funktion som deklareras med ett nyckelord tfun(den så kallade T-funktionen) är huvudobjektet ( granule ) för parallellism. Typ post:
tfun int f ( int a , dubbel b )beskriver en T-funktion med två argument och ett utdatavärde.
2. Anropet av T-funktionen blockerar inte programmet förrän T-funktionen är klar. Resultatet av samtalet är ett råvärde (T-värde).
3. Ett oklart värde kan tilldelas en T-variabel . Operationen att tilldela ett oklart värde till en T-variabel blockerar inte programmet. T-variabeln beskrivs med ett nyckelord tval(inte tvar, detta är resultatet av att följa traditionen, motsvarande klass i OpenTS-kärnan kallas TVar). Inspelning
tval int x ;beskriver en T-variabel av typen int .
4. I slutet av beräkningen av T-funktionen blir motsvarande ofärdiga värde klart och upprepar sedan beteendet för normalvärdet för bastypen.
5. Operationen att ta ett värde eller kasta till en bastyp för T-variabler orsakar blockering av exekveringen av funktionen tills värdet för T-variabeln är klart.