211service.com
Prostsze programowanie dla komputerów wielordzeniowych
Liczba rdzeni – lub jednostek przetwarzających liczbę – w mikroprocesorach podwaja się z każdą generacją, zapewniając ogromny potencjał obliczeniowy dla komputerów stacjonarnych, laptopów i, ostatecznie, przenośnych gadżetów. Na przykład obecne maszyny czterordzeniowe są szczególnie przydatne w zastosowaniach wymagających dużej mocy obliczeniowej, takich jak przetwarzanie wideo i gry. Jednak nowe maszyny wielordzeniowe to w zasadzie superkomputery o małej skali i aby w pełni wykorzystać oferowaną przez nie moc obliczeniową, oprogramowanie musi być pisane z myślą o wielu rdzeniach – jest to czasochłonne i trudne zadanie znane jako programowanie równoległe. Wielu ekspertów uważa, że jeśli programowanie równoległe nie będzie łatwiejsze, postęp obliczeniowy zostanie zatrzymany.

Uproszczone oprogramowanie: StreamIt to język oprogramowania i kompilator, który umożliwia programistom łatwe programowanie maszyn wielordzeniowych - zadanie zwane programowaniem równoległym, które w przeciwnym razie jest czasochłonne i trudne.
Naukowcy z MIT szukają sposobu na złagodzenie bólu związanego z programowaniem równoległym. Zaprojektowali język komputerowy i kompilator – wyspecjalizowane narzędzie, które konwertuje język na instrukcje komputerowe – które zasadniczo ukrywa wyzwania związane z programowaniem równoległym, a jednocześnie wykorzystuje moc wielu rdzeni. Język i kompilator, zwany StreamIt , zostały opracowane przez Saman Amarasinghe , profesor elektrotechniki i informatyki na MIT. StreamIt działa obecnie na wyspecjalizowanej maszynie wielordzeniowej zbudowanej w MIT, ale tego lata Amarasinghe spodziewa się, że oprogramowanie będzie gotowe do działania na komercyjnych układach IBM, Sony i Toshiba, które można znaleźć w urządzeniach Sony PlayStation 3.
Tworzenie oprogramowania jest nadal czymś, co wiele osób może zrobić, ale gdyby mieli do czynienia z paralelizmem, staje się to znacznie trudniejsze, mówi Amarasinghe.
W maszynach jednordzeniowych kod oprogramowania działa w większości sekwencyjnie. Oznacza to, że zadania – takie jak dostęp do określonych fragmentów pamięci w celu otwarcia programu – występują jedno po drugim w przewidywalny sposób. W systemie wielordzeniowym zadania są dzielone między rdzenie. A gdy różne zadania muszą uzyskać dostęp do tego samego fragmentu pamięci, zadania muszą ze sobą współpracować, aby dokładnie zaaranżować — lub zsynchronizować — dostępy. Jeśli wiele zadań przypadkowo uzyskuje dostęp do tych samych danych bez odpowiedniej synchronizacji, dane ulegną uszkodzeniu, powodując nieprawidłowe wyniki lub awarię programu.
W maszynach jednordzeniowych dość łatwo jest debugować błędy programistyczne lub niezamierzone problemy, ponieważ przyczynę można prześledzić w konkretnej instrukcji. Ale Amarasinghe mówi, że niektóre błędy w systemach równoległych są trudniejsze do naprawienia, ponieważ są probabilistyczne – co oznacza, że pojawiają się tylko sporadycznie; za każdym razem, gdy program działa, wiele rdzeni wykonuje swoje zadania niezależnie, co prowadzi do miliardów możliwych zleceń wykonania programu.
Rozwiązanie Amarasinghe opiera się na dobrze znanej koncepcji zwanej przepływem danych, w której dane są przesyłane sekwencyjnie przez pewien potok funkcji. W miarę przepływu danych kompilator widzi, które funkcje są niezależne. W ten sposób kompilator może umieszczać oddzielne zadania na różnych rdzeniach, nie martwiąc się, że będą ze sobą kolidować lub dotykać tego samego kawałka pamięci.
Programista musi tylko napisać oprogramowanie, które działa w sposób sekwencyjny. Kompilator widzi wszystkie interakcje, które muszą wystąpić, w oparciu o kod napisany przez programistę i odpowiednio przydziela instrukcje, aby zapobiec powstawaniu błędów.
To rozsądny pomysł oparty na znanych koncepcjach, mówi Wyścig Bodików , profesor informatyki na Uniwersytecie Kalifornijskim w Berkeley. Jeśli chcesz, aby programiści, którzy nie są ekspertami w paralelizmie, byli produktywni, jeśli chcesz, aby efektywnie pisali programy, chcesz dać im język taki jak StreamIt, mówi. Bodik podejrzewa jednak, że inżynierowie oprogramowania będą musieli polegać na hierarchii narzędzi, które działają na różnych poziomach. Na przykład pamięć transakcyjna, która pozwala wielu zadaniom na współdzielenie tej samej pamięci w tym samym czasie, może działać za kulisami, pomagając zmaksymalizować potencjał StreamIt. (Zobacz Problem z komputerami wielordzeniowymi .)