1 PROGRAMOWANIE WSPÓŁCZESNYCH ARCHITEKTUR KOMPUTEROWYCH DR INŻ. KRZYSZTOF ROJEK POLITECHNIKA CZĘSTOCHOWSKA
2 Trendy rozwoju współczesnych procesorów Budowa procesora CPU na przykładzie Intel Kaby Lake Wyznaczanie teoretycznej wydajności procesora Wyznaczanie przepustowości pamięci Zarządzanie częstotliwością procesora CPU Roofline model
3 W ostatnich latach zauważamy: Zredukowany wzrost częstotliwości i poboru mocy Zwiększony wzrost liczby rdzeni i tranzystorów
4 1980: Brak pamięci podręcznej w CPU 1989: Pierwszy procesor Intela zawierający pamięć podręczna: 80486 1995: 2-poziomowa pamięć podręczna: Pentium Pro 2003: 3-poziomowa pamięć podręczna: Pentium M 2013: 4-poziomowa pamięć podręczna Intel Haswell i wyższe modele ze zintegrowaną pamięcią układu graficznego
5 Kaby Lake to nazwa kodowa używana przez firmę Intel dla mikroarchitektury, która pojawiła się 30 sierpnia 2016 Tak jak jej poprzednik Skylake, Kaby Lake jest produkowana w technologii 14 nanometrów Wykorzystano tutaj proces 14FF+, który w stosunku do klasycznego procesu 14 nm posiada nieco więcej przestrzeni pomiędzy tranzystorami, przez co posiadają one więcej miejsca To z kolei daje możliwość lepszego odprowadzania ciepła, możliwość zastosowania wyższej częstotliwości taktowania (nominalnej oraz turbo) i zapewnienia wyższej wydajności procesora
6 Liczba rdzeni: 2-4 Częstotliwość: 2,7GHz 4,5GHz W zależności od modelu i liczby używanych rdzeni wspierane są różne maksymalne częstotliwości pracy Pamięć podręczna L1-32 KiB/rdzeń L2-256 KiB/rdzeń L3-2 MiB/rdzeń wspólny dla wszystkich rdzeni Wbudowane GPU modele serwerowe (Xeon) nie posiadają zintegrowanej karty GPU) TDP: 35W-91W
7 Liczba rdzeni: 4 Liczba wątków: 8 Bazowa częstotliwość procesora: 4.20 GHz Maks. częstotliwość turbo: 4.50 GHz Pamięć L3: 8MiB TDP: 91W Wsparcie dla RAM: DDR4-2133/2400, DDR3L (L Low Voltage)-1333/1600 Kanały pamięci: 2 Wsparcie: SSE4.1/4.2, AVX2
8 SSE zestaw instrukcji wektorowych, wykonywanych w trybie SIMD AVX rozszerzenie zestawu instrukcji SSE W AVX wprowadzono 256-bitowe rejestry - 2 razy większe niż wykorzystywane w SSE Umożliwia to procesorowi jednoczesne wykonanie tej samej instrukcji na 256-bitowym wektorze danych Wykonując operacje na elementach typu double (64 bity), jesteśmy w stanie zmieścić 4 elementy w jednym rejestrze (4*64=256) Wówczas, wykonanie instrukcji na dwóch takich rejestrach: (np. rejestr A + rejestr B) wykona 4 operacje dodawania jednocześnie
9 Wydajność teoretyczna lub maksymalna (PP - peak performance) procesora określa maksymalną liczbę operacji, jaka może być wykonana na danym procesorze na sekundę Dla algorytmów wykorzystujących zmiennoprzecinkowy format danych jest to liczba operacji zmiennoprzecinkowych na sekundę (flop/s) PP jest iloczynem częstotliwości f, liczby rdzeni c, liczby elementów na rejestr procesora I oraz maksymalnej liczby operacji, jaka może być wykonana w obrębie jednej instrukcji X Dla współczesnych procesorów jest to instrukcja fma (fused multiply-add), która wykonuje X=2 operacje jednocześnie (mnożenie i dodawanie) y = fma(a, x, b) -> y = a*x+b PP = f c I X [ flop s ]
10 Maksymalna wydajność procesora Intel Core i7 7700k PP = f c I X [ flop s ] Dla liczb zmiennoprzecinkowych pojedynczej precyzji (float 32 bity) PP = 4,2 GHz 4 256 32 2 Gflop = 268,8 Gflop s s Dla liczb zmiennoprzecinkowych podwójnej precyzji (double 64 bity) PP = 4,2 GHz 4 256 64 2 Gflop = 134,4 Gflop s s
11 DDR jest w stanie przesłać dwa (N=2) pakiety danych na jeden cykl (takt) pamięci Pakiet danych pamięci DDR to (S=64) bity Szyny danych pamięci DDR X są X razy wyżej taktowane niż wartość taktowania pamięci f umożliwia to przesłanie X razy więcej pakietów niż wynika to z częstotliwości taktowania pamięci (DDR1: X=1, DDR2: X=2, DDR3 i DDR4: X=4) Przepustowość pamięci B obliczamy ze wzoru: B = f X N [ T ] liczba transferów na sekundę s B = f X N S/8 [ B ] liczba bajtów na sekundę s Sprawdzenie pamięci w systemie linux: sudo dmidecode -t 17 Przykłady: Pamięć f pamięci f szyny B [GT/s] B [GB/s] DDR-200, PC-1600 100 MHz 100 MHz 0.2 GT/s 1.6 GB/s DDR2-800, PC2-6400 200 MHz 400 MHz 0.8 GT/s 6.4 GB/s DDR3-1600, PC3-12800 200 MHz 800 MHz 1.6 GT/s 12.8 GB/s DDR4-2400, PC4-19200 300 MHz 1200 MHz 2.4 GT/s 19.2 GB/s
12 Aby sprawdzić z jaką częstotliwością pracuje procesor: lscpu cat /proc/cpuinfo Socket 0: cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq Socket 1: jeżeli lscpu zwraca: NUMA node0 CPU(s): 0-3 NUMA node0 CPU(s): 4-7 wówczas: cat /sys/devices/system/cpu/cpu4/cpufreq/scaling_cur_freq
13 Sprawdzenie polityki zarządzania częstotliwością procesora (governor) cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor Przykładowe polityki: ondemand procesor dobiera częstotliwość w zależności od obciążenia procesora userspace procesor działa z częstotliwością ustawioną przez użytkownika Można ją wpisać w pliku: echo 2000000 > /sys/devices/system/cpu/cpu0/cpufreq/scaling_setspeed Do wyboru są częstotliwości wpisane w pliku: cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies performance procesor działa z najwyższą nominalną częstotliwością
14 Pozwala oszacować maksymalną wydajność (P performance), jaką możemy uzyskać dla konkretnego algorytmu na danej platformie sprzętowej, której maksymalna wydajność wynosi PP peak performance, a przepustowość pamięci wynosi B Bazuje na parametrze zwanym: intensywność obliczeniowa I [ops/b] jest to liczba operacji wykonana na każdy bajt danych, który musi zostać przesłany z/do procesora w celu wykonania algorytmu P = min(pp, B I)
15 Wydajność jednostek obliczeniowych i pamięci Intel Core i7 7700K: PP = 4,2 * 4 * 4 * 2 = 268,8 Gflop/s 2xDDR4-2400: B = 0,3 * 4 * 2 * 8 * 2 = 38,4 GB/s Wydajność: 4,2 częstotliwość taktowania [GHz] 4 liczba rdzeni 4 256-bitowy SIMD (64-bitowe elementy) 2 FMA Przepustowość pamięci: 0,3 częstotliwość taktowania pamięci [GHz] 4 mnożnik dla częstotliwości taktowania szyny danych 2 DDR 8 rozmiar pakietu danych [B] 2 dwa kanały pamięci (dwie kości)
16 Wydajność jednostek obliczeniowych i pamięci Intel Core i7 7700K: PP = 4,2 * 4 * 4 * 2 = 268,8 Gflop/s 2xDDR4-2400: B = 0,3 * 4 * 2 * 8 * 2 = 38,4 GB/s By w pełni wysycić wydajność platformy sprzętowej o powyższej konfiguracji należy: 38,4 / 8 = 4,8 miliardów elementów typu double przesłać z pamięci operacyjnej do procesora na każdą sekundę 268,8 / 4,8 = 56 operacji typu fma wykonać na każdym elemencie pobranym z pamięci operacyjnej
Kontakt: krojek@icis.pcz.pl 17