Data: Poniedziałek, 10 listopada 2008, 12:05

O tym, jak aplikacje gonią procesory wielordzeniowe, czyli wywiad z Wolfgangiem Petersenem z firmy Intel


Kiedy oprogramowanie dogoni sprzęt? Wielordzeniowe procesory to dziś praktycznie codzienność; kilka dni temu debiutowała architektura Nehalem, która może oferować równoległą obsługę nawet 16 wątków. Trudno jednak oprzeć się wrażeniu, że programiści przegapili szansę i nie oferują użytkownikom aplikacji mogących w pełni korzystać z możliwości wielordzeniowych procesorów. W jaki sposób Intel stara się przekonać programistów do zmiany nastawienia i kiedy można spodziewać się przełomu? Na nasze pytania odpowiada Wolfgang Petersen, odpowiedzialny za Software Solution Group w regionie EMEA oraz Global Developer Relations Division.

Jak długo procesory czterordzeniowe znajdują się już na rynku?

Od czasu premiery rynkowej mijają ponad dwa lata.

Czy Intel może wskazać oprogramowanie dla zwykłych, domowych użytkowników, które umie wykorzystać wszystkie dostępne rdzenie?

Na rynku jest już całkiem sporo oprogramowania umiejącego korzystać z wielu rdzeni, które skaluje się niemal idealnie. Oczywiście, duża część oprogramowania wymaga optymalizacji. Staramy się pracować bezpośrednio z twórcami oprogramowania i pomagać im w ich pracy, dostarczając wiedzę i narzędzia niezbędne do uczynienia aplikacji wielowątkowymi.

Staramy się współpracować z uniwersytetami kształcącymi programistów. W wielu z nich wciąż jeszcze dominuje stara szkoła pisania algorytmów, w której nie uwzględnia się specyfiki dostępnych na rynku procesorów wielordzeniowych.

Co najważniejsze, część zmian może być dokonywana w oprogramowaniu automatycznie – wystarczy użyć przygotowanego przez nas kompilatora, zdolnego analizować kod i przystosowywać go do wielowątkowości. Kompilator wskazuje także obszary kodu, nad którymi programista może popracować, aby przystosować go do środowisk wielordzeniowych.

Jak rozumiem, najtrudniejszym zadaniem jest przekonanie programistów do przepisania oprogramowania w taki sposób, aby mogło korzystać z wielowątkowości?

Takie podejście jest niemożliwe, dlatego nie staramy się nakłaniać twórców oprogramowania do pisania swoich aplikacji całkowicie od nowa, ale staramy się zachęcić ich do używania narzędzi pozwalających zoptymalizować już istniejący kod.

Staramy się też bardzo przekonywać programistów, żeby stawiali na wielowątkowy kod podczas rozwijania oprogramowania i dodawania do niego nowych funkcji. Oczywiście, jeśli programiści mają czas, przekonujemy ich także do modyfikowania rdzenia oprogramowania tak, aby korzystało z wielu rdzeni obliczeniowych. Trzeba tutaj jednak jasno powiedzieć, że w takich wypadkach mamy do czynienia z milionami linii kodu, a to oznacza konieczność zaangażowania dużych środków pieniężnych, co nie zawsze jest możliwe, a nawet sensowne z ekonomicznego punktu widzenia.

W praktyce programiści decydują się na włączenie wielowątkowości do „starego” oprogramowania w chwili, gdy i tak muszą je znacząco przeprojektować. Dzięki naszemu kompilatorowi stosunkowo małym nakładem sił można uzyskać naprawdę dobre rezultaty.

W jaki sposób Intel stara się wpływać na programistów, aby zmienić ich nastawienie i to, jak pracują?

Staramy się maksymalnie ułatwić programistom przejście do programowania wielowątkowego. Oferujemy bezpłatnie narzędzia, które wydatnie wspomagają, a nawet automatyzują niektóre procesy, tak jak wspomniany już kompilator.

Mamy także programy przeszukujące kod i wskazujące, które algorytmy „zakłócają” wielowątkowość; proponują one także modyfikację tych algorytmów i przewidują, jak wpłynie to na ogólną wydajność aplikacji.

Mamy narzędzia analizujące i przedstawiające proces wykonywania programu, dzięki czemu programiści mogą samodzielnie znaleźć rejony kodu kolidujące z wielowątkowością. Przygotowaliśmy także – i co najważniejsze, udostępniamy bez żadnych dodatkowych opłat – bardzo wiele gotowych bibliotek. Wystarczy wykorzystać je w swoim programie, aby otrzymać bardzo zoptymalizowany kod wielowątkowy.

Innym narzędziem, którym najbardziej zainteresowani są twórcy gier, jest biblioteka fizyki Havok, także łatwo dostępna dla wszystkich chętnych. Gotowe rozwiązania, które przygotowaliśmy, z jednej strony bardzo ułatwiają pracę programistom, a z drugiej mocno przyczyniają się do popularyzowania kodu wielowątkowego.

Obecnie jesteśmy w erze „multi-cores”, ale widać już zbliżającą się epokę „many cores”, z premierą Nehalemema już za nami i Larrabee jeszcze na horyzoncie. Kiedy można spodziewać się, że obecne na rynku oprogramowanie będzie przystosowane do możliwości oferowanych przez sprzęt?

Pracujemy nad tym już od kilku lat, dosłownie setki aplikacji są już odpowiednio podzielone na wątki i przystosowane do wykonywania równoległego. W naszej witrynie można znaleźć przykłady producentów, którzy mają już w swojej ofercie wielowątkowe oprogramowanie.

Nie jest natomiast możliwe wyznaczenie cezury, po której będzie można powiedzieć, że oprogramowanie jest już w pełni gotowe. Jest to długotrwały proces i na rynku będzie zarówno oprogramowanie jednowątkowe, wywodzące się w prostej linii jeszcze z czasów DOS-u, jak i nowoczesne aplikacje przystosowane do działania wielowątkowego.

Jednym z naszych pomysłów na promowanie producentów, którzy oferują oprogramowanie umiejące korzystać z mocy wielu rdzeni, jest Business Exchange, prowadzony przez nas sklep internetowy dla odbiorców biznesowych, w którym będzie można kupić zoptymalizowane oprogramowanie. Prace nad uruchomieniem polskiego oddziału już trwają, prowadzimy negocjacje z polskimi deweloperami i spodziewamy się, że sklep ruszy w ciągu kilku miesięcy.

Liczymy, że będzie to jeden z biznesowych powodów, dla których warto będzie optymalizować oprogramowanie. Na konkurencyjnym rynku oferowanie produktu, który na tym samym sprzęcie potrafi działać szybciej i wydajniej, może być jednym z głównych motorów zmian.

Jakiego typu oprogramowanie jest dostępne w Business Exchange?

Koncentrujemy się na aplikacjach przydatnych użytkownikom biznesowym. Najwięcej oprogramowania wykonuje funkcje związane z bezpieczeństwem i pracą biurową. Dzięki sklepowi deweloperzy mogą sprawdzić, jakie są oczekiwania rynku, i rozwijać się we wskazanych przez samych klientów kierunkach.

W jaki sposób Intel stara się aktywizować polskich programistów? Na jaką pomoc mogą liczyć zainteresowani optymalizowaniem kodu pod względem wielowątkowości?

Wykonujemy ogromną pracę, lokalizując większość dokumentacji związanej z programowaniem, jest to jednak proces trwający latami ze względu na dużą liczbę publikacji. Na szczęście wszyscy programiści umieją korzystać także z dokumentacji anglojęzycznej, nie jest to jednak dla nich tak wygodne jak zapoznawanie się z materiałami w języku polskim.

Chciałbym też podkreślić, że polscy programiści mają oczywiście dostęp do wszystkich materiałów i usług, które zamieszczamy na naszych stronach, są bardzo mile widziani w międzynarodowej społeczności deweloperów, zachęcamy ich też do korzystania z forów dyskusyjnych.

Wiemy już, co robi Intel – a jaki jest odzew ze strony programistów?

Generalnie otrzymujemy od programistów dość mieszane komunikaty. Część z nich uważa, że nie musi zapoznawać się z wielowątkowością, bo specyfika ich aplikacji sprawia, że nie są one w stanie korzystać z tej technologii. Z drugiej strony bardzo duża część przedsiębiorstw ma tak dopracowany kod, że trudno im poprawić wydajność, nawet o procent. Dla nich możliwości, jakie daje wielowątkowość, a więc szansa nawet na kilkukrotne przyspieszenie działania programu, są bardzo kuszące.

Nie zapominajmy, że dzisiejszy programista tworzy aplikacje w językach wysokiego poziomu, nie przejmując się architekturą, na którą pisze. Pracując w taki sposób, można popełnić wiele błędów, których skutkiem będzie niemożność przystosowania kodu do wykonywania równoległego, albo spowolnić działanie aplikacji. Klasycznym przykładem jest funkcja if, która odwołuje się do else nieprzetrzymywanego w pamięci podręcznej. Dotarcie do danych zabiera ogromne ilości czasu.

Ludzie muszą więc zrozumieć, że nawet używając języka wyższego poziomu, muszą pamiętać o architekturze, na której wykonywany będzie program. Może to naprawdę dramatycznie zmienić szybkość wykonywania kodu. Często zdarza się, że stosunkowo małe części kodu, najczęściej pętle, to nawet 80% całkowitego czasu wykonywania programu.

Część ze sprawiających takie problemy algorytmów można przepisać, rozbić na wątki, można obliczać kilka opcji równocześnie, tak by w chwili rozgałęzienia kodu mieć natychmiast dostęp do odpowiednich danych.

Dzięki temu oprogramowanie może być zdecydowanie szybsze niż oferta konkurencji albo przy zbliżonej wydajności oferować znacznie bogatsze opcje. Niestety, nie wszyscy programiści wiedzą, w jaki sposób powinni pisać kod, aby można go było wykonywać równolegle. To się jednak poprawia – nasze zasoby przegląda około milion użytkowników miesięcznie.

Mówimy o aplikacjach, ale zmiany powinny trafić także do systemów operacyjnych.

Intel wspiera aktywnie programistów piszących dla różnych systemów operacyjnych – oprócz Windows jest to Linux czy choćby Solaris. Nasz zespół pracuje razem z programistami Microsoftu nad zrównolegleniem części kodu Windows i innych aplikacji Microsoftu. Część z nich, na przykład niektóre składniki pakietu Office, już teraz korzysta z wielu rdzeni.

Prace nad rozwojem Linuksa są prowadzone w inny sposób, przez tysiące programistów na całym świecie, którzy najczęściej starają się ulepszać indywidualnie małe części kodu. Jednak Linux także może liczyć na nasze wsparcie.

Nasze narzędzia są dostępne w wersjach dla wielu systemów operacyjnych.

Czy Intel może podać przykład „killer app”, programu, który idealnie wykorzystuje wielowątkowość i ma szansę przekonać do siebie duże rzesze użytkowników?

Klasycznym przykładem jest praca nad obrazem – proces ten doskonale się skaluje, a samo rozbicie go na równolegle wykonywane wątki jest bardzo proste. Należy jednak pamiętać, że im więcej rdzeni jest wykorzystywanych, tym więcej mocy obliczeniowej pochłania synchronizacja ich działań. Dlatego dla większej liczby rdzeni skalowalność nie jest idealna.

Z punktu widzenia użytkowników nie tylko szybsze działanie pojedynczej aplikacji może być ogromną zachętą do korzystania z procesorów wielordzeniowych. Możliwość równoległego, szybkiego wykonywania programów i bezproblemowego korzystania z wymagających aplikacji, podczas gdy w tle system antywirusowy skanuje dysk twardy, także jest wielką zachętą dla konsumentów, którzy przyzwyczaili się do korzystania z kilku programów równocześnie.

Z drugiej strony na programistów chcących korzystać z wielowątkowości czyhają pułapki, szczególnie w przypadku programów, które operują na tym samym zestawie danych. Aplikacja musi śledzić kolejność dostępu do obrabianych danych, tak by każda operacja wykonywana była dopiero po zakończeniu poprzedniej. Prowadzi to do sytuacji, w których jeden rdzeń musi czekać z rozpoczęciem obliczeń, aż wątek zostanie zwrócony przez inny rdzeń, a ten nie może zacząć pracy, zanim dane nie zostaną obrobione przez wątek uruchomiony na trzecim rdzeniu.

Najciekawsze jest to, że problemy te zostały już rozwiązane, i to dobrych 50 lat temu, przez programistów uniksowych tworzących oprogramowanie biznesowe. Wiedza o tym nie jest powszechna, bo deweloperzy programujący mainframe'y byli kreowani na elitę, natomiast programiści pracujący z oprogramowaniem na komputery osobiste byli traktowani trochę z przymrużeniem oka. Wiedza o programowaniu wielowątkowym nie przedostała się do specjalistów od PC, ponieważ na początku nie była im w ogóle potrzebna – pamiętajmy, że era wielu rdzeni w konsumenckim środowisku x86 zaczęła się tak naprawdę dopiero kilka lat temu.

W Intelu wierzymy, że proces zmiany nawyków programistów potrwa jeszcze cztery – pięć lat.

Czy nie jest to zbyt optymistyczna prognoza? Gdy w sprzedaży pojawiły się procesory dwurdzeniowe, spodziewano się, że ich możliwości zostaną szybko wykorzystane przez programistów gier. Tymczasem minęły lata, a tytuły prawdziwie wielowątkowe można policzyć na palcach jednej ręki...

Problem polega na tym, że przy tworzeniu gier potrzeba tak naprawdę dwóch zespołów programistów, bo wykorzystywane są dwa modele programowania: jeden dla CPU, drugi dla GPU.

Czy Intel w takim razie nie działa na swoją niekorzyść? Przecież architektura przyszłych procesorów ma być heterogeniczna?

Nie mogę co prawda udzielać informacji o produktach, których jeszcze nie ma na rynku, ale mogę podzielić się swoimi przemyśleniami. Czy może istnieć procesor, którego jeden z rdzeni znakomicie radzi sobie z generowaniem grafiki, drugi przystosowany jest do wykonywania dużej liczby obliczeń, a trzeci jest zoptymalizowany na przykład do wykonywania aplikacji zajmujących się rozpoznawaniem mowy? Myślę, że w przyszłości jak najbardziej będzie to możliwe. Będą to jednak zintegrowane rozwiązania, korzystające z tego samego modelu programowania i tych samych instrukcji, dzięki czemu wykorzystanie ich mocy będzie bardzo łatwe. To jest przyszłość.

Obsługa instrukcji x86 to także wielka siła projektu Larrabee: takie rozwiązanie pozwoli twórcom gier pracować wydajniej i taniej, ponieważ potrzebny będzie tylko jeden zespół zamiast dotychczasowych dwóch. To oznacza duże zmiany dla całego przemysłu.

Sam pomysł powstał na samym początku kariery PC, ale ograniczały nas możliwości techniczne. Teraz, gdy możemy produkować procesory składające się z miliardów tranzystorów, możemy pokusić się o dodanie specjalizowanych bloków, zaprojektowanych do wykonywania specyficznych zadań.

Wielowątkowość to niejedyna idea, do której Intel stara się przekonać programistów. Jak posuwają się prace nad „zielonym programowaniem”?

Rzeczywiście, prowadzimy taki projekt dla Linuksa. Staramy się pokazać, w jaki sposób powinno się programować, aby maksymalnie zmniejszyć zużycie energii potrzebnej do wykonania programu. Jest to szczególnie ważne w przypadku pracy na urządzeniach przenośnych, na przykład na bijących rekordy popularności netbookach, bo w bezpośredni sposób przekłada się to na długość pracy na bateriach.

Jest wiele możliwości oszczędnego wykorzystywania mocy obliczeniowej procesora. Jeśli aplikacja nie wykonuje skomplikowanych obliczeń, można obniżyć częstotliwość zegara, z drugiej strony warto wykonać kod jak najszybciej, a następnie uśpić procesor.

Nasze pomysły i sposoby na zmniejszenie energochłonności aplikacji włączamy do narzędzi deweloperskich, tak by mogli z nich korzystać wszyscy programiści.

Wspomagamy także programistów w pracach nad oprogramowaniem wykorzystującym możliwości naszych platform, na przykład vPro, oraz staramy się pokazywać im, jak wykorzystać możliwości oferowane przez wirtualizację.

Michał Tomaszkiewicz
| Drukuj | Zamknij |