1 PROGRAMOWANIE WSPÓŁCZESNYCH ARCHITEKTUR KOMPUTEROWYCH DR INŻ. KRZYSZTOF ROJEK POLITECHNIKA CZĘSTOCHOWSKA
2 Część teoretyczna Informacje i wstępne wymagania Cel przedmiotu i zakres materiału Zasady wydajnego programowania aplikacji Współczesne architektury procesorów Środowisko programistyczne Część praktyczna Zapoznanie się z kodem do badań laboratoryjnych Optymalizacja kodu przy pomocy przekształceń matematycznych
3 2 godz. wykładu, 2 godz. laboratorium Nie ma egzaminu Kontakt: strona: http://icis.pcz.pl/ krojek e-mail: krojek@icis.pcz.pl pokój 247, IITiS konsultacje: wtorek 10:00-13:00
4 Znajomość podstaw architektury komputerów Znajomość programowania z wykorzystaniem standardu C++ Podstawowa wiedza z metod numerycznych Umiejętność implementowania algorytmów obliczeniowych
5 Poznanie aktualnych trendów i rozwiązań stosowanymi we współczesnych systemach komputerowych oraz architekturach wieloprocesorowych i wielordzeniowych, jak również metod i sposobów realizacji obliczeń dla różnych typów i rodzajów algorytmów i aplikacji. Nabycie praktycznych umiejętności w zakresie tworzenia, uruchamiania i analizy algorytmów dla różnych typów współczesnych architektur oraz różnych modeli programowania. Nabycie umiejętności i wiedzy z zakresu efektywnego wykorzystania akceleratorów obliczeniowych ze szczególnym uwzględnieniem procesorów graficznych oraz architektur masywnie wielordzeniowych.
6 Architektura komputerowa: Architektura procesorów ogólnego przeznaczenia Intel (Kaby Lake) Architektura procesorów graficznych NVIDIA (Pascal) Standardy programowania: C++ OpenMP CUDA Narzędzia: CPU: GNU gprof, GDB: The GNU Project Debugger GPU: NVIDIA Visual profiler, nvprof, CUDA-MEMCHECK
7 Metody poprawy wydajności aplikacji CPU/GPU Metody organizacji danych w pamięci Metody poprawy wydajności obliczeń Metody analizy wydajności Szacowanie wydajności aplikacji Szacowanie wydajności procesora Szacowanie przepustowości pamięci Znajdowanie wąskich gardeł aplikacji
8 CPU Central Processing Unit SSE Streaming SIMD Extensions GPU Graphics Processing Unit AVX Advanced Vector Extensions PCIe Peripheral Component Interconnect Express NUMA Non-Uniform Memory Access SIMD Single Instruction, Multiple Data DDR Double Data Rate HBM High Bandwidth Memory SMP Symetric Multi-core Processor AMP Asymetric Multi-core Processor FLOPS (flop/s) FLoating point Operations Per Second RAM Random Access Memory
9 Nie istnieje teoria wydajnego programowania aplikacji Wydajne programowanie wymaga: Wiedzy z zakresu wszystkich warstw architektury sprzętowej Wiedzy z zakresu implementowanego algorytmu Praktyki w zakresie analizy kodu Umiejętności rozpoznania i wyodrębnienia wąskich gardeł programu Eliminowania błędów (proces debugowania jest często tak czasochłonny, co proces programowania) Umiejętności dostrzegania wzorców w aplikacjach, które powtarzają się w regularny sposób Sporej dawki zdrowego rozsądku
10 Procesory wielordzeniowe symetryczne posiadają rdzenie umieszczone na jednym układzie (chipie) Wszystkie rdzenie posiadają tą samą budowę Rdzenie są symetryczne (identyczne), i mogą wykonywać obliczenia niezależnie od siebie Przykład: Intel Core CPU seria i (i3, i5, i7) Seria i posiada 2 rdzenie na układ (Core i3) lub 4 rdzenie na układ (Core i5/i7)
11 Procesory asymetryczne posiadają wiele rdzeni na jednym układzie, jednak rdzenie te mogą różnić się od siebie Mogą one zawierać np. 2 rdzenie ogólnego przeznaczenia i 2 rdzenie wektorowe w jednym układzie Przykład: IBM Cell/BE symetryczny procesor 7 lub 9-rdzeniowy stosowany w konsoli Sony PlayStation 3: 1 rdzeń ogólnego przeznaczenia 6/8 rdzeni zaprojektowanych do wykonywania intensywnych obliczeń
12 Intel Kaby Lake CPU NVIDIA Pascal GPU Liczba rdzeni: 4 Liczba rdzeni: ~3800 Pamięć: ~25GB/s na 1xDDR4 Pamięć wew.: ~760 GB/s - HBM2 Niezależna jednostka Wymaga CPU Wydajność: ~200 Gflop/s Wydajność: 4,7 Tflop/s
13 Nowa architektura co każde 2 lata Każda architektura wnosi nowe możliwości, które wymuszają stosowanie nowych technik programowania
14 Nazwa Rok Proces technologiczny Nehalem 2008 45 nm Sandy Bridge 2011 32 nm Ivy Bridge 2012 22 nm Haswell 2013 22 nm Broadwell 2014 14 nm Skylake 2015 14 nm Kaby Lake 2016 14 nm Coffee Lake 2017 14 nm Cannonlake 2018 10 nm Ice Lake 2019 10 nm Tiger Lake 2020 10 nm
Zestaw narzędzi programistycznych: Platforma LINUX (Lubuntu): http://lubuntu.net/ Makefile GCC, the GNU Compiler Collection NVIDIA CUDA Toolkit: https://developer.nvidia.com/cuda-downloads
Kontakt: krojek@icis.pcz.pl 16