W swoim słynnym artykule The Free Lunch Is Over z 2005 roku Herb Sutter przewidywał równoczesną rewolucję programistyczną tak dużą, jak rewolucja obiektowa. Czy ta rewolucja naprawdę wydarzyła się w latach 2005 - 2013?
Kluczowe punkty w artykule:
Producentom procesorów zabrakło miejsca na większość tradycyjnych metod zwiększania wydajności procesora. Zamiast zwiększać prędkości taktowania, zamiast tego przechodzą na architekturę hyperthreading i multi-core.
Aplikacje będą musiały być coraz bardziej współbieżne, jeśli chcą w pełni wykorzystać wzrost przepustowości procesora.
„Och, wydajność nie ma tak wielkiego znaczenia, komputery po prostu stają się coraz szybsze” stwierdzenie będzie błędne.
Optymalizacja wydajności i wydajności będzie coraz ważniejsza. Te języki, które już wymagają intensywnej optymalizacji, znajdą nowe życie; ci, którzy nie będą musieli znaleźć sposobów na konkurowanie i stać się bardziej wydajnymi i optymalizującymi. Oczekuj długoterminowego wzrostu zapotrzebowania na języki i systemy zorientowane na wydajność.
Języki i systemy programowania będą coraz częściej zmuszane do radzenia sobie z współbieżnością. Desperacko potrzebujemy modelu programowania wyższego poziomu dla współbieżności niż dzisiejsze języki.
źródło
Odpowiedzi:
Tak, ale to zależy.
Nie można oczekiwać, że napisze się niebanalne , wysokowydajne oprogramowanie bez korzystania z równoległego sprzętu i stosowania współbieżności jako techniki strukturyzacji programu. Ale większość oprogramowania jest zarówno trywialna, jak i niekrytyczna pod względem wydajności. Aplikacja internetowa nie robi wielkiego kryzysu, a aplikacje CRUD nie mają takich ograniczeń, jak ograniczenia czasowe niektórych programów symulacyjnych i medycznych.
W szczególności twórcy gier muszą się tym przejmować, ponieważ gry są najczęściej spotykanym rodzajem aplikacji z miękkimi wymaganiami w czasie rzeczywistym. Problem jest istotny w przypadku telefonu komórkowego, w którym chcesz wycisnąć jak najwięcej mocy obliczeniowej i renderowania ze zintegrowanego układu z dwoma rdzeniami procesora i procesorem graficznym o niskiej mocy. To kolejny powód, dla którego tak wielu programistów patrzy na Haskell i czeka na dojrzewanie języków takich jak Rust - chcemy bezpieczeństwa i wydajności na nowoczesnym sprzęcie.
Od 2005 roku zdobyliśmy nowe i ulepszone narzędzia, takie jak OpenCL, CUDA, OpenMP i zestawy instrukcji wektorowych do pracy z współbieżnością i równoległością danych w ustalonych językach. Jednak względni nowoprzybyli są projektowani od samego początku, aby robić o wiele więcej interesujących rzeczy przy jednoczesnej współpracy.
Współbieżne środowisko uruchomieniowe Haskell pozwala językowi zapewnić bogate wsparcie dla lekkich równoległości (iskier) i abstrakcji współbieżności (wątki, kanały i wspólne zmienne odniesienia). Go i Rust oferują również lekkie zadania, Go za pomocą kanałów i Rust za pomocą przekazywania wiadomości.
Systemy te oferują bezpieczeństwo pamięci, wydajne środowiska uruchomieniowe oraz ochronę statyczną przed niektórymi rodzajami wyścigów. Domyślnie niezmienność Haskell i Rust znacznie ułatwia zarządzanie współbieżnością. Erlang został robi to już w latach 80., ale potrzeby oprogramowania i naszej wiedzy o tym, jak projektować systemy programistyczne również poprawie od-dzięki Bogu.
Wreszcie, wiele istniejących języków - nie będę wymieniać nazwisk - jest gotowych odrzucić jako wiarygodne opcje pisania nowego oprogramowania. Ich obciążenia związane ze złożonością i słabymi abstrakcjami współbieżności sprawiają, że nie nadają się one do rozważań na temat nowoczesnych aplikacji. Po prostu czekamy na dojrzałe alternatywy.
źródło
Oto kilka punktów danych; sam zdecyduj, czy liczy się to jako rewolucja.
Sprzęt równoległy
Około 2005 r. Zarówno Intel, jak i AMD zaczynają masowo produkować 2-rdzeniowe procesory do komputerów stacjonarnych x86 (Pentium D i Athlon 64), z zegarem o częstotliwości około 3 GHz.
W 2006 roku wypuszczono PlayStation 3 z procesorem Cell z rdzeniami 8 + 1 przy 3,2 GHz.
W 2006 roku ukazała się seria GeForce 8. Składa się z dużej liczby (~ 100) „procesorów strumieniowych” ogólnego zastosowania, w przeciwieństwie do jednostek specyficznych dla grafiki. Około 2007 r. Wydana została specyfikacja CUDA 1.0, umożliwiająca wykonywanie niektórych obliczeń ogólnego zastosowania na sprzężeniu masowo równoległym NVidia.
Od tego czasu tendencje trwały.
Powiedzmy, że teraz w 2013 r. Zarówno Intel, jak i AMD oferują 4, 8 i 16-rdzeniowe procesory o taktowaniu nieco powyżej zaledwie 4 GHz. Dwurdzeniowe i czterordzeniowe konstrukcje są wspólne dla urządzeń o mniejszej mocy, takich jak laptopy i smartfony.
Wszystko to jest masowo produkowanym, codziennym sprzętem komputerowym klasy konsumenckiej.
Oprogramowanie
CUDA został wydany w 2007 r., A następnie OpenCL w 2008 r., Co pozwala na stosowanie masowo równoległych układów GPU w obliczeniach ogólnych (nie graficznych). Model staje się popularny; wiele firm hostingowych (np. Amazon) oferuje procesory graficzne do ogólnych zadań obliczeniowych.
Go został wydany w 2009 roku, zawiera bardzo tanie wątki zapobiegawcze („goroutines”) i pozwala na wydajne wyrażanie wysoce współbieżnych algorytmów.
Zestaw narzędzi Akka został wydany dla Javy i Scali w 2009 roku, umożliwiając współbieżność aktorów.
Erlang (bardzo współbieżny język) odnotowuje pewien wzrost użycia.
Współbieżność a równoległość
Zauważ, że aby korzystać z równoległego sprzętu, niekoniecznie potrzebna jest współbieżność oprogramowania , to znaczy żonglowanie wątkami wykonania w obliczeniach. Wiele problemów jest rozwiązywanych przez równoległe , nie wchodzące w interakcje procesy, w których każdy proces jest tradycyjnym programem sekwencyjnym.
Przetwarzanie równoległe może wykorzystywać bardziej tradycyjne języki i struktury równoległe, takie jak redukcja map lub MPC lub OpenMP. W przypadku takich struktur obecność wielu rdzeni na tym samym krysztale procesora nie różni się koncepcyjnie od posiadania większej liczby procesorów w klastrze; różnica polega głównie na prędkości.
Do tej pory brak darmowego lunchu
Najwyższe prędkości wciąż utrzymują się na poziomie około 5 GHz. Przy widocznych lepszych technologiach, takich jak tranzystory grafenowe, częstotliwości mogą ponownie wzrosnąć w przyszłości, ale nie bardzo szybko.
źródło