T++ | |
---|---|
Sémantika | multiparadigma : objektově orientované , generické , procedurální , metaprogramování , funkcionální , paralelní programování |
Jazyková třída | programovací jazyk |
Typ provedení | sestaven |
Objevil se v | 80. léta 20. století |
Autor | Ústav programových systémů RAS |
Přípona souboru | .tpp |
Hlavní implementace | proprietární |
T++ je programovací jazyk indikující potřebu paralelního počítání se syntaxí a sémantikou , které rozšiřují jazyk C++ , a to jeho rozšířením o několik slov indikujících možnost paralelního počítání. Samotnou paralelizaci výpočtů provádí runtime knihovna integrovaného prostředí T-system automaticky během provádění programu, tedy dynamicky, která rozšiřuje integrované prostředí Microsoft Visual Studio C++ o patch . [jeden]Pro označení potřeby paralelizace výpočtů jsou funkce, její vnější proměnné a použité ukazatele označeny odpovídajícími klíčovými slovy. Při absenci zjevných vedlejších efektů kompilátor nevypracuje funkci jako prvek procedurálního programování, ale jako funkcionální , tedy čistou (bez vedlejších účinků ). Pokud se vyskytnou zjevné vedlejší účinky, jako je použití I/O, kompilátor je zjistí a vydá chybovou zprávu.
Příklad programu pro výpočet Fibonacciho čísla :
tfun int fib ( int n ) { návrat n < 2 ? n : fib ( n - 1 ) + fib ( n - 2 ); } tfun int main ( int argc , char * argv []) { if ( argc != 2 ) { printf ( "Použití: fib <n> \n " ); návrat 1 ; } int n = atoi ( argv [ 1 ]); printf ( "fib(%d) =%d \n " , n , ( int ) fib ( n )); návrat 0 ; }Jak je vidět z příkladu, jazyk T++ provedl drobné změny v syntaxi jazyka C++, konkrétně: ukazatele tfunumožňující paralelní výpočty. Navzdory neefektivnosti takové implementace výpočtu -tého Fibonacciho čísla tento program ukazuje nejen jednoduchost a přehlednost T-Systemu, ale také ukazuje zrychlení při spuštění na více procesorech a programátor o nich nemusí vědět. číslo a rozdělit mezi ně užitečné zatížení.
T-system poskytuje integrované vývojové prostředí rozšířením prostředí Microsoft Visual Studio C ++ o rozhraní . Vývojové prostředí T-system poskytuje možnost povolit preprocesoru , který filtruje zdrojový kód T++ (převádí zdrojový kód T++ na C++), aby spustil program v sériovém režimu (pro ladění kódu C++). Po ladění v sériovém režimu můžete odladit zdrojový kód T++ a poté jej zkompilovat : zdrojový kód se optimalizuje a převede, připojí se paralelní výpočetní runtime knihovny [2] a zkompiluje se kód C++. T-System je nástroj pro automatickou dynamickou paralelizaci programů, určený k usnadnění vývoje a používání složitých paralelních programů a jejich efektivnímu využití na různých, včetně heterogenních, zařízeních. Byl vyvinut v Ústavu informačních systémů Ruské akademie věd a v současnosti je vyvíjen v Ústavu informačních systémů Ruské akademie věd a Moskevské státní univerzitě.
OpenTS (Open T-System, T-systém s otevřenou architekturou ) je moderní implementace T-systému. Poskytuje automatickou dynamickou paralelizaci programů a poskytuje spouštěcí prostředí pro vysokoúrovňový programovací jazyk T++ , což je paralelní dialekt jazyka C++ [3] .
OpenTS používá lehká vlákna s rychlým přepínáním (několik nanosekund) a zvládne přes milion lehkých vláken na procesor. Na základě těchto vláken je implementována řada funkcí, jako jsou mobilní vlákna, objekty a odkazy, distribuovaný sběr odpadu, nástěnka pro výměnu dat a úkolů atd.
OpenTS byl úspěšně testován na široké škále úloh a na počítačových instalacích různých velikostí: od víceprocesorových počítačů po počítačové systémy s různými architekturami a různými kapacitami (různé multiprocesorové Windows / Linux Intel / AMD clustery, ruská instalace teraflop MVS-1000 M , atd..). OpenTS podporuje širokou škálu paralelních platforem: vícejádrové procesory, SMP systémy, clustery, metaklastry a GRID systémy.
Myšlenka T-Systemu se zrodila na konci 80. let v Institutu programových systémů Ruské akademie věd [1] . Hlavní myšlenkou bylo zavedení konceptu T-funkcí jako poskytovatelů tzv. nepřipravených hodnot, což umožnilo současně vykonávat několik T-funkcí na různých procesorech a tím dosáhnout paralelismu.
V roce 1998 se projekt podruhé zrodil za aktivní účasti Moskevské státní univerzity . V roce 2000 byly v rámci rusko-běloruského projektu „ SKIF “ zahájeny práce na nové implementaci T-Systemu s kódovým označením GRACE . Již po prvním roce vývoje však byly zjištěny značné nedostatky této implementace. Špatná struktura systému, nedostatek jasné ideologie a architektury vedly k četným chybám, zamrzání, přetečení zásobníku . Ale co je nejdůležitější, četné pokusy o řešení problémů často snižovaly rychlost a efektivitu již napsaných programů a v některých případech je učinily nefunkčními.
V roce 2002 bylo rozhodnuto napsat novou implementaci T-Systemu. Říkalo se mu OpenTS nebo Open Architecture T-System . Na rozdíl od dvou předchozích implementací OpenTS zpočátku stanovil určitou architekturu založenou na zkušenostech s vývojem předchozích verzí systému. OpenTS úspěšně prošel státními testy v rámci projektu SKIF na shodu s kritérii pro software na úrovni clusteru.
V současné době MSU pracuje na dvou nezávislých větvích OpenTS pod podmíněným názvem NewTS.
1. Funkce deklarovaná pomocí klíčového slova tfun(tzv. T-funkce) je hlavním objektem ( granule ) paralelismu. Zadejte záznam:
tfun int f ( int a , double b )popisuje T-funkci se dvěma argumenty a jednou výstupní hodnotou.
2. Volání T-funkce neblokuje program, dokud není T-funkce dokončena. Výsledkem volání je nezpracovaná hodnota (T-hodnota).
3. T-proměnné lze přiřadit nepřipravenou hodnotu . Operace přiřazení nepřipravené hodnoty T-proměnné neblokuje program. T-proměnná je popsána klíčovým slovem tval(ne tvar, to je výsledek dodržení tradice, odpovídající třída jádra OpenTS se nazývá TVar). Záznam
tval int x ;popisuje proměnnou T typu int .
4. Na konci výpočtu T-funkce se odpovídající nepřipravená hodnota stane připravenou a poté zopakuje chování normální hodnoty základního typu.
5. Operace převzetí hodnoty nebo přetypování na základní typ pro T-proměnné způsobí zablokování provádění funkce, dokud není hodnota T-proměnné připravena.