Wielordzeniowe procesory

Językowa rewolucja, a może ewolucja

Być może ostatecznym rozwiązaniem problemu jest stworzenie języków ułatwiających programowanie równoległe. DARPA, agencja ministerstwa obrony USA, jest patronatem programu High Productivity Computing Systems (HPCS), który ma na celu m.in. stworzenie nowych języków mających ułatwić programowanie równoległe i rozproszone oraz doprowadzić do lepszego wykorzystania dostępnych zasobów sprzętowych. W projekcie tym biorą też udział IBM, Cray i Sun.

Nowe języki nie muszą być najlepszym rozwiązaniem. "Kto zdecyduje się przepisać aplikację stworzoną z 2 mln linii kodu w nowym języku oraz wykorzysta jego nowe cechy w celu wprowadzenia do kodu równoległości?" - zastanawia się Clay Breshears z Intela. To słuszna uwaga, jeśli weźmiemy pod uwagę koszt i czas szkolenia programistów do pracy w nowym języku oraz ponowne testowanie kodu. Już teraz zmiana kompilatora czy dodanie do projektu nowych bibliotek może pozwolić na zrównoleglenie aplikacji napisanych w Fortranie, C i C++. Dostępne są już takie narzędzia i biblioteki, jak OpenMP lub Intel TBB.

OpenMP to biblioteka API przeznaczona dla maszyn z pamięcią dzieloną. Definiuje ono zestaw pragm (dyrektyw kompilatora), funkcji oraz zmiennych środowiskowych, które w znacznym stopniu ułatwiają pracę programisty. Dzięki dodaniu jednej linijki przed deklaracją pętli poszczególne iteracje będą mogły być wykonane równolegle przez kilka wątków:

Wielordzeniowe procesory

Niewątpliwą zaletą OpenMP jest wsparcie dla już istniejącego kodu - w relatywnie szybki sposób można zrównoleglić krytyczne fragmenty programu. Choć skorzystanie z OpenMP wymaga skompilowania kodu specjalnym kompilatorem, to zachowana jest przy tym zgodność z innymi kompilatorami, które po prostu odrzucają nieznane pragmy.

Alternatywą dla OpenMP jest biblioteka Intela - Thread Building Blocks (TBB). W przeciwieństwie do OpenMP jest ona przeznaczona do stosowania tylko z językiem C++. Jej największą zaletą jest współpraca ze wszystkimi kompilatorami. Miejsce dyrektyw kompilatora zastępują m.in. szablony. Intel oferuje też zestawy kolekcji (wektory, kolejki), które umożliwiają równoczesny dostęp do nich/modyfikację z poziomu wielu wątków. Twórca biblioteki STL, Alexander Stepanov stwierdził nawet, że TBB mogłaby stać się podstawą rozwiązania kwestii programowania równoległego w bibliotece standardowej C++.

Oczekiwanie na narzędzia, edukację i nacisk rynku

Jest mało prawdopodobne, by języki opracowywane w ramach HPCS zyskały popularność w najbliższych latach, a nawet jeśli, to tylko w ramach projektów czysto akademickich. Zastosowanie technik programowania równoległego w przypadku komercyjnych aplikacji w dużej mierze zależeć będzie od wprowadzania niewielkich, ale konsekwentnych zmian w najpopularniejszych kompilatorach i środowiskach programistycznych.

Dobrym przykładem takich zmian może być wsparcie dla OpenMP w Visual Studio 2005. Wykorzystujący ten pakiet programiści mają dostęp nie tylko do bogatego zestawu bibliotek .Net Framework, ale i technik pozwalających na optymalizowanie kluczowych fragmentów programu.

Kolejnym ważnym krokiem jest edukacja programistów. Nie nauczą się oni programowania kodu równoległego z dnia na dzień, a jak dowodzi historia programowania obiektowego może to zająć sporo czasu. Koncepcja programowania obiektowego była znana już w latach 60. ub.w., jednak stała się popularna dopiero 30 lat później!

Istotny wpływ na przyspieszenie popularyzacji programowania równoległego może mieć jednak rynek napędzany przez oczekiwania tworzenia większych i bardziej złożonych systemów. Aplikacje serwerowe muszą w jak największym stopniu wykorzystywać możliwości nowego sprzętu, bo wolny serwer to zły serwer, a praktyczna efektywność jest wpisana w podstawowe wymagania nabywców tego typu oprogramowania.


TOP 200