Procesory wielordzeniowe wymagają oprogramowania równoległego

| Technika

Mikrokontrolery szybko ewoluują w kierunku wielordzeniowości, która pozwala zapewnić wysoką wydajność przetwarzania bez niepotrzebnego wzrostu pobieranej mocy. Trend ten łączy się z istotnymi zmianami w oprogramowaniu, które musi w optymalnym stopniu wykorzystywać możliwości równoległego działania rdzeni procesorów. Na indywidualnym podejściu do tego problemu zyskują jak na razie tylko pojedyncze aplikacje. A utorowanie drogi w przemyśle takim rozwiązaniom może zająć dekadę, albo i dłużej, przy czym prowadząca do tego droga wydaje się wyboista.

Procesory wielordzeniowe wymagają oprogramowania równoległego

Wraz z upowszechnianiem się procesorów wielordzeniowych wszystkie te części programów, które mają istotny wpływ na wydajność działania aplikacji, będą musiały zostać napisane na nowo. To dlatego, że równoczesność przebiegu działania w procesorach jest uważana obecnie za najtrudniejszy problem nauk komputerowych. Kod albo zostanie przepisany od nowa, albo stanie się przestarzały.

Rys. 1. W obecnych i przyszłych programach szeregowych dominuje język C

Największe trudności piętrzą się przed przedsiębiorstwami telekomunikacyjnymi, ponieważ wykorzystywane w ich systemach programy nie są przystosowane do wielordzeniowości i wielowątkowości, są więc ogromne, licząc miliony i dziesiątki milionów linii kodu. Wszechobecny język C nie jest narzędziem odpowiednim do tworzenia programów równoległych, jest bowiem z natury szeregowy i naturalne równoległości ukrywa w algorytmach.

Ale statystyczne badania wykazują, że 62% programów pisze się w C, a kolejne 24% w C++. Powstało już wiele języków do programowania równoległego, ale żaden z nich nie okazał się panaceum, a do powszechnej akceptacji przed każdym z nich jest jeszcze długa droga. Wydaje się, że proces opanowania równoległości przetwarzania w programach zostanie zautomatyzowany dopiero przez specyficzne dla aplikacji narzędzia wysokiego poziomu.

Ponieważ procesory wielordzeniowe pojawiają się obecnie w wielu urządzeniach, producenci systemów i chipów do wykorzystywania równoległości przetwarzania doku używają rozmaitych narzędzi. Istnieją już narzędzia wieloprocesorowe, jak na przykład OpenMP, stosowane obecnie na poziomie chipu. Intel i inni producenci procesorów udostępnili swoje biblioteki do zarządzania wątkami programów.

Niemniej w dostępnych narzędziach brakuje wielu funkcji do ustalania, jak dzielić program we wczesnym stadium projektowania. Muszą się także pojawić debuggery równoległe, umożliwiające optymalizację kodu przez wizualizację przemieszczania się danych przez poszczególne rdzenie, akceleratory i połączenia w układach SoC i całym systemie mikroprocesorowym.

Rys. 2. Architektury procesorów i ich wykorzystanie w projektach

Na razie projektanci muszą starannie rozdzielać zadania pomiędzy rdzenie, nie zapominając o wzajemnych zależnościach danych. Muszą zręcznie formować schematy przebiegów informacji pomiędzy zadaniami i znajdywać sposoby komunikowania się danych ze stosami programowymi płaszczyzn sterowania. W przypadku kodowania programu w asemblerze powiązanie z producentem chipu i jego bibliotekami pozostaje silne i nawiązanie do innego procesora nie będzie łatwe.

Architektura systemu komputerowego o dużej liczbie rdzeni pozwala rozdzielać funkcje oprogramowania pomiędzy rdzenie, opracowywać je i testować oddzielnie, i kierować do różnych części sytemu, wiedząc, że nie będą źle na siebie oddziaływały. Alternatywą jest pisanie programów w postaci osobnych wątków, pozostawiając systemowi operacyjnemu przydzielanie im czasu.

Jednak wykonywanie zadań nie przebiega wtedy w sposób skoordynowany, coś naraz może się opóźnić, doprowadzając do awarii. Stąd wiele programów trzeba pisać na nowo. Ale wysiłek zainwestowany w architekturę owocuje później większą wydajnością i optymalnym działaniem. Dodatkowym problemem są liczne inicjatywy związane z wielordzeniowością i technologie.

Powstają one łącznie z zupełnie nowymi narzędziami programowania, przez co przenoszenie tych produktów na inne architektury staje się bardzo trudne i ryzykowne. Są to innowacje bardzo cenne, ale nie wiadomo, czy utrzymają się w przyszłości. W praktyce żywotność takich specyficznych architektur i specjalizowanych narzędzi może okazać się krótka.

Pozostaną w tyle, w miarę jak rozwiną się środowiska bardziej stosowne i uniwersalne oraz sprawne energetycznie. Przełomem na rynku zapewniających naturalne wykorzystanie procesorów wielordzeniowych będą dopiero narzędzia, które zautomatyzują proces generacji kodów równoległych, eliminując potrzebę pracy z wątkami, węzłami, przenoszeniem wiadomości, synchronizacją dostępu do pamięci i inne.

Za ich pomocą programiści będą kodować w dostosowanych do danej dziedziny językach wysokiego poziomu, na narzędzia będą automatycznie generowały zadania równoległe, tworząc odmienne tryby działania, można więc będzie generować operacje transmisji potokowej, tolerancji błędów, monitorowania bezpieczeństwa czy osiągów. Poprzez większą abstrakcję uzyska się lepszą integrację sprzętu i oprogramowania.

Coraz powszechniejsze staną się hiperwizory, pozwalające na używanie wielu systemów operacyjnych. Wchłanianie takich nowych idei będzie zależało od trudności odczuwanych przez programistów przy programowaniu procesorów wielordzeniowych. Trudności te nie pojawią się od razu, bo na razie nie więcej niż 10% projektantów przyznaje, że wykorzystuje w pełni procesory wielordzeniowe.

Podobnie ze względu na złożoność programowania równoległego procesory cztero- lub więcej rdzeniowe nie znajdą w rynku systemów embedded w roku 2012 więcej niż 10% miejsca, a dwurdzeniowe 25%.

KKP