MTS 2009: Programowanie równoległe

Dzięki popularyzacji jednostek wielordzeniowych znajdujemy się na etapie, kiedy korzyści płynące ze zrównoleglenia kodu mogą odnieść nawet użytkownicy domowi. Producenci narzędzi programistycznych poszerzają więc ich gamę i przyczyniają się do upowszechnienia tego sposobu programowania.

Przykładowy kod PLINQ

IEnumerable<T> data = ...;

var q = ParallelEnumerable.Select(

ParallelEnumerable.OrderBy(

ParallelEnumerable.Where(data.AsParallel(), (x) => p(x)),

(x) => k(x)),

(x) => f(x));

foreach (var e in q) a(e);

Microsoft do jakiegoś czasu wprowadzał elementy programowania równoległego do swoich produktów. Kolejna wersja flagowego IDE Microsoftu - Visual Studio 2010 - i platforma .NET Framework 4.0 także zawierają wiele nowych funkcji przydatnych programistom tego typu aplikacji. Tak naprawdę jedne z pierwszych rozwiązań na potrzeby programowania równoległego wprowadzono już w Visual Studio 2005. Wtedy to zapewniono wsparcie dla standardu OpenMP dla aplikacji napisanych w zarządzanym i niezarządzanym C++. Standard ten za pomocą odpowiedniego zbioru pragm, funkcji bibliotecznych i zmiennych środowiskowych pozwala zrównoleglić aplikacje.

To był pewien sygnał świadczący o tym, w którym kierunku będzie podążać rozwój tego środowiska, chociaż Visual Studio 2008 samo w sobie nie przyniosło dużo nowości w tej dziedzinie. Można jedynie wspomnieć o dodatku wydanym przez koncern z Redmond pozwalającym na debugowanie programów MPI (Message Passing Interface). MPI to niezależny od języka protokół wykorzystywany do programowania komputerów równoległych. Oprócz tego, MPI jest specyfikacją dla API, która pozwala wielu komputerom na wzajemną komunikację. Jest wykorzystywany w klastrach i superkomputerach. Dodatek ten - jak większość nowych funkcjonalności zapewniających wsparcie dla programowania równoległego - zostanie włączony jako część Visual Studio 2010. Zatem nie powinno dziwić, że Visual Studio 2010 razem z .NET 4.0 ma przyciągać klientów właśnie możliwościami tworzenia równoległego kodu.

Funkcjonalności w .NET 4.0

Oprócz wcześniej wspomnianego debugowania MPI, razem z kolejną wersją .NET i IDE Microsoftu dostaniemy wiele nowych funkcji dla programowania równoległego. Chyba najpopularniejszą z nich jest Parallel Language Integrated Query (PLINQ). Jest to biblioteka pozwalająca opakowywać już istniejące klasy LINQ (Language Integrated Query) dodając do nich jednocześnie metody, które pozwolą na potencjalne równoległe wykonanie operacji, wcześniej mające tylko synchroniczne odpowiedniki. Kolejną nowością wartą wspomnienia jest Task Parallel Library (TPL), która ma stanowić część .NET Framework 4.0. Zyskujemy dzięki niej dostęp do nowych typów i API dołączonych do przestrzeni nazw System.Threading. Ich działanie będzie oparte o nowy scheduler włączony do puli wątków w .NET Framework 4.0.

Celem wprowadzenia tej biblioteki było umożliwienie zrównoleglenia aplikacji bez konieczności jawnego stosowania wątków czy sekcji krytycznych. Tak naprawdę wcześniej wspomniane PLINQ opiera się właśnie o funkcje dostarczone przez TPL. Inna funkcjonalność, jaka pojawi się razem z .NET 4.0, to zbiór kolekcji mających wbudowane mechanizmy synchronizacji pozwalając na bezpieczne i proste korzystanie z nich w aplikacjach wielowątkowych. Razem z tak rozbudowanymi narzędziami do zrównoleglenia kodu nie można było zapomnieć o diagnostyce aplikacji wielowątkowych. Visual Studio 2010 ma dostarczyć podgląd równoległych stosów oraz monitorowanie zadań wykonywanych równolegle, natomiast deweloperska wersja edycji Team System doda profiler dla programów równoległych pozwalający zbierać informacje dotyczące zachowania aplikacji.


TOP 200