Wstęp
Zapoznanie z technikami i narzędziami programistycznymi służącymi do tworzenia programów współbieżnych i obsługi współbieżności przez system. Przedstawienie architektur sprzętu wykorzystywanych do obliczeń równoległych i współbieżnych. Nauczenie sposobów tworzenia i implementacji programów równoległych i współbieżnych Zapoznanie z technikami analizy programów współbieżnych Przedstawienie wybranych dziedzin zastosowań przetwarzania współbieżnego oraz występujących tam algorytmów
Wykłady Laboratoria Język C/C++ i Java System Linux Zadania -> sprawozdania Kolokwia Egzamin końcowy Zwolnienia -> 5.0 z laboratoriów
realizacja wielu programów (procesów) w taki sposób, że ich trwanie od momentu rozpoczęcia do momentu zakończenia może się na siebie nakładać współbieżność pojawiła się wraz z wielozadaniowymi systemami operacyjnymi (lata 60 te, Multics 1965) i nie wymusza równoległości współbieżność związana jest z szeregiem problemów teoretycznych wynikłych z prób realizacji wielozadaniowych systemów operacyjnych istnieje wiele mechanizmów niskiego poziomu (systemowych) do rozwiązywania problemów współbieżności
dwa lub więcej procesów (lub wątków) jednocześnie współpracuje (komunikując się wzajemnie) w celu rozwiązania pojedynczego zadania (najczęściej z określonej dziedziny zastosowań) rozwój związany z powstaniem w latach siedemdziesiątych komputerów równoległych problemy obliczeń równoległych (poza klasycznymi zagadnieniami współbieżności) są najczęściej związane z konkretną dziedziną zastosowań obliczenia równoległe były silnie związane z dziedziną obliczeń wysokiej wydajności (i obliczeniami naukowo technicznymi)
realizacja programów na systemach (najczęściej odrębnych komputerach) połączonych siecią, z zasobami lokalnymi rozwój związany z popularyzacją sieci komputerowych i Internetu w latach osiemdziesiątych i dziewięćdziesiątych XX wieku problem wspólnego korzystania z rozproszonych zasobów luźniejsze powiązanie współpracujących procesów niż w przypadku obliczeń równoległych (niekonieczna synchronizacja czasowa, zastępowana przez przyczynowo skutkową) wykorzystanie infrastruktury sieciowej (protokoły, bezpieczeństwo)
SISD (single instruction, single data) - przetwarzany jest jeden strumień danych przez jeden program. SIMD (single instruction, multiple data) - przetwarzanych jest wiele strumieni danych przez jeden wykonywany program (wektorowość). MISD (multiple instruction, single data) - wiele równolegle wykonywanych programów przetwarza jednocześnie jeden wspólny strumień danych (redundantność). MIMD (multiple instruction, multiple data) - równolegle wykonywane wiele programów, każdy przetwarza własne strumienie danych przetwarzanie współbieżne
CPU GPU Klastry Architektura klient-serwer
CISC (Complex Instruction Set Computing) występowanie złożonych, specjalistycznych rozkazów (instrukcji), które do wykonania wymagają od kilku do kilkunastu cykli zegara, szeroka gama trybów adresowania, rozkazy mogą operować bezpośrednio na pamięci (zamiast przesłania wartości do rejestrów i operowania na nich), skomplikowany dekoder rozkazów. mniejszy rozmiar programu i mniej odwołań do pamięci
RISC (Reduced Instruction Set Computing) Liczba rozkazów zredukowana do niezbędnego minimum (kilkadziesiąt CISC setki). Upraszczony dekoder rozkazów. Redukcja trybów adresowania (prostsze kody rozkazów) Ograniczenie komunikacji pomiędzy pamięcią a procesorem (dedykowane instrukcje load/store) Zwiększenie liczby rejestrów (CISC x86-8 rejestrów).
Na poziomie rdzenia Superskalarność Potokowość Wykonanie poza kolejnością (Out of order) Wielordzeniowość Wielowątkowość Multiprocesorowość Klaster obliczeniowy Na poziomie specjalizacji: GPU
Źródło: http://zstzbaszynek.pl/blog/2021,era-systemow-klient-serwer/
Żródło: http://www.nvidia.com/object/what-is-gpu-computing.html
Dziękuję za uwagę