MMX i SSE. Zbigniew Koza. Wydział Fizyki i Astronomii Uniwersytet Wrocławski. Wrocław, 10 marca 2011. Zbigniew Koza (WFiA UWr) MMX i SSE 1 / 16



Podobne dokumenty
Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Programowanie w asemblerze Środowiska 64-bitowe

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

PROGRAMOWANIE WSPÓŁCZESNYCH ARCHITEKTUR KOMPUTEROWYCH DR INŻ. KRZYSZTOF ROJEK

PROGRAMOWANIE WSPÓŁCZESNYCH ARCHITEKTUR KOMPUTEROWYCH DR INŻ. KRZYSZTOF ROJEK

Programowanie I C / C++ laboratorium 02 Składnia pętli, typy zmiennych, operatory

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

RDZEŃ x86 x86 rodzina architektur (modeli programowych) procesorów firmy Intel, należących do kategorii CISC, stosowana w komputerach PC,

Programowanie w asemblerze Architektury równoległe

Podstawy programowania w języku C i C++

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Architektury komputerów Architektury i wydajność. Tomasz Dziubich

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C

2 Przygotował: mgr inż. Maciej Lasota

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Język C zajęcia nr 11. Funkcje

Technika mikroprocesorowa. Linia rozwojowa procesorów firmy Intel w latach

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

Spis treści. I. Skuteczne. Od autora... Obliczenia inżynierskie i naukowe... Ostrzeżenia...XVII

Programowanie mikrokontrolerów AVR

Podstawy programowania. Wykład Co jeszcze... Przypomnienia, uzupełnienia. Krzysztof Banaś Podstawy programowania 1

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Wstęp do programowania

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

Operatory. Operatory bitowe i uzupełnienie informacji o pozostałych operatorach. Programowanie Proceduralne 1

Kompilator języka C na procesor 8051 RC51 implementacja

Sprzęt komputerowy 2. Autor prezentacji: 1 prof. dr hab. Maria Hilczer

Programowanie procesorów graficznych NVIDIA (rdzenie CUDA) Wykład nr 1

Arkusz1. Wyniki CPUbenchmark.net na dzień

Programowanie w asemblerze Środowiska 64-bitowe

Poradnik programowania procesorów AVR na przykładzie ATMEGA8

Arkusz1. Wyniki Passmark CPU Mark z dn. 19 czerwca 2012 r.

Typ użyty w deklaracji zmiennej decyduje o rodzaju informacji, a nazwa zmiennej symbolicznie opisuje wartość.

Programowanie procesorów graficznych GPGPU

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

System obliczeniowy laboratorium oraz. mnożenia macierzy

SYSTEMY OPERACYJNE WYKŁAD 1 INTEGRACJA ZE SPRZĘTEM

Microsoft IT Academy kurs programowania

Bibliografia: pl.wikipedia.org Historia i rodzaje procesorów w firmy Intel

Sprzęt komputerowy 2. Autor prezentacji: 1 prof. dr hab. Maria Hilczer

Podstawy programowania w języku C

Architektura systemów komputerowych. dr Artur Bartoszewski

16. Taksonomia Flynn'a.

WYKŁAD 8. Funkcje i algorytmy rekurencyjne Proste przykłady. Programy: c3_1.c..., c3_6.c. Tomasz Zieliński

System 32-Bit 1: Microsoft Windows 7 Home Premium 2;, Professional, Ultimate, Enterprise Microsoft Windows 8/8.1, Pro, Enterprise 2;

Język ludzki kod maszynowy

Podstawy Informatyki. Metalurgia, I rok. Wykład 3 Liczby w komputerze

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Moc płynąca z kart graficznych

Programowanie z wykorzystaniem technologii CUDA i OpenCL Wykład 1

Architektura komputerów

Julia 4D - raytracing

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

Instruction Set Instruction Set Extensions Embedded Options Available. Recommended Customer Price TRAY: $999.00

Laboratorium 1 Temat: Przygotowanie środowiska programistycznego. Poznanie edytora. Kompilacja i uruchomienie prostych programów przykładowych.

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

PROGRAMOWANIE w C prolog

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

PRZEWODNIK PO PRZEDMIOCIE

C++ wprowadzanie zmiennych

Funkcja (podprogram) void

Architektura komputerów

Informacje wstępne #include <nazwa> - derektywa procesora umożliwiająca włączenie do programu pliku o podanej nazwie. Typy danych: char, signed char

Architektura Systemów Komputerowych. Rozwój architektury komputerów klasy PC

Podstawy programowania C. dr. Krystyna Łapin

6. Algorytmy ochrony przed zagłodzeniem dla systemów Linux i Windows NT.

( wykł. dr Marek Piasecki )

Programowanie strukturalne i obiektowe

Programowanie I C / C++ laboratorium 03 arytmetyka, operatory

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

PROGRAMOWANIE NISKOPOZIOMOWE

Dokładność obliczeń numerycznych

Home Software Hardware Benchmarks Services Store Support Forums About Us

Najlepsze drukarki 3D

Wykorzystanie architektury Intel MIC w obliczeniach typu stencil

Wyniki testów PassMark

Wstęp do programowania 1

Wprowadzenie do programowania na procesorze sygnałowym

tablica: dane_liczbowe

Algorytmy i struktury danych. wykład 1

Dodatkowo klasa powinna mieć destruktor zwalniający pamięć.

Programowanie kart graficznych. Sprzęt i obliczenia

2018 Marcin Kukliński. Niesforne bity i bajty

Bajt (Byte) - najmniejsza adresowalna jednostka informacji pamięci komputerowej, z bitów. Oznaczana jest literą B.

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

Wykład 1

Wykład I. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

TABLICE W JĘZYKU C/C++ typ_elementu nazwa_tablicy [wymiar_1][wymiar_2]... [wymiar_n] ;

Metody optymalizacji soft-procesorów NIOS

Tworzenie aplikacji rozproszonej w Sun RPC

Inżynieria Wytwarzania Systemów Wbudowanych

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Szablony funkcji i szablony klas

Procesory. Schemat budowy procesora

Różności w C++ Marek Pudełko

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Home Software Hardware Benchmarks Services Store Support Forums About Us

Transkrypt:

MMX i SSE Zbigniew Koza Wydział Fizyki i Astronomii Uniwersytet Wrocławski Wrocław, 10 marca 2011 Zbigniew Koza (WFiA UWr) MMX i SSE 1 / 16

Spis treści Spis treści 1 Wstęp Zbigniew Koza (WFiA UWr) MMX i SSE 2 / 16

Spis treści Spis treści 1 Wstęp 2 Programowanie SSE Zbigniew Koza (WFiA UWr) MMX i SSE 2 / 16

Część 1 Wstęp 1 Wstęp 2 Programowanie SSE Zbigniew Koza (WFiA UWr) MMX i SSE 3 / 16

Wstęp Co to są MMX, SSE i AVX? MMX (MultiMedia extensions) to rozszerzenie zestawu instrukcji procesorów SISD o instrukcje wektorowe na 64-bitowych rejestrach SSE (Streaming SIMD Extension) to rozszerzenie zestawu instrukcji procesorów SISD o instrukcje wektorowe na 128-bitowych rejestrach AVX (Advanced Vector Extensions) to rozszerzenie SSE na rejestry 256-bitowe MMX, SSE i AVX umożliwiają jednoczesne wykonywanie 2, 4, 8 lub 16 (SSE) instrukcji SSE to komputer 128-bitowy Pierwotnie pomyślane do przyspieszania operacji graficznych, mogą być wykorzystywane do przyspieszania zwykłych obliczeń i kryptografii Zbigniew Koza (WFiA UWr) MMX i SSE 4 / 16

Zalety i wady Wstęp Zalety: Umożliwiają stopniowe zrównoleglanie istniejącego kodu szeregowego Wykorzystanie MMX/SSE zwykle przyspiesza programy Są łatwe do nauki, łatwe do stosowania Nie wymagają zewnętrznych bibliotek Posiadają dobrą dokumentację Wady: Dostępne wyłącznie na procesorach zgodnych ze standardem i386 (kod jest nieprzenośny) Możliwość zrównoleglania kodu jest ograniczona sprzętowo (tę barierę usiłuje przekroczyć AVX) Brak wsparcia dla mnożenia i dzielenia liczb całkowitych 32-bitowych (MMX, SSE) Zbigniew Koza (WFiA UWr) MMX i SSE 5 / 16

Różnice Wstęp Rejestry MMX operuje na 8 rejestrach 64-bitowych (mapowane na koprocesor) SSE operuje na osobnych 8 rejestrach 128-bitowych AVX operuje na osobnych 16 rejestrach 256-bitowych Możliwości MMX: 64-bitowe operacje na liczbach całkowitych (+,,, /, bitowe, przesunięcia, porównania, przypisania, konwersje) SSE: 128-bitowe operacje na typie float (+,,, /, porównania, przypisania, konwersje) i 64-bitowe rozszerzenie MMX (min, max, inne) SSE2: SSE + 128-bitowe operacje na typie double oraz na liczbach całkowitych AVX: Jak SSE, ale na rejestrach 256-bitowych + instrukcje typu FMAD Sprzęt MMX Pentium MMX, AMD K6 SSE Pentium III SSE2 Pentium 4 AVX Intel Sandy Bridge / AMD Bulldozer (od 2011) Zbigniew Koza (WFiA UWr) MMX i SSE 6 / 16

Wstęp Kolejne wersje MMX 64-bitowa wektoryzacja arytmetyki liczb całkowitych SSE 128-bitowa wektoryzacja arytmetyki krótkich liczb zmiennopozycyjnych float SSE2 128-bitowa wektoryzacja arytmetyki długich liczb zmiennopozycyjnych double oraz liczb całkowitych (od char do unsigned int) SSE3, SSE4, SSE4 nie mają typowych zastosowań w obliczeniach numerycznych SSE5 projekt AMD niezrealizowany z powodu ogłoszenia projektu AVX, zastąpiony przez XOP, FMA4, CVT16 AVX od 2011 r, dalsza wektoryzacja arytmetyki zmiennopozycyjnej (rejestry 256-bitowe, operacje 3-argumentowe, FMAD, IMAD), gcc 44 lub Intel Compiler 111, linux kernel 2630 lub Windows 7 SP1 Zbigniew Koza (WFiA UWr) MMX i SSE 7 / 16

Część 2 Programowanie SSE 1 Wstęp 2 Programowanie SSE Zbigniew Koza (WFiA UWr) MMX i SSE 8 / 16

Nowe typy danych Programowanie SSE Typ danych MMX SSE SSE2 uwagi m64 tak tak tak m128 tak tak 4 float m128d tak 2 double m128i tak 16 char 2 long long Adresy danych typu m128 muszą być wielokrotnością 16 float* tab = (float*) _mm_malloc( N * sizeof(float), 16 ); m128 asse = _mm_load_pd( &tab[4] ); // indeks tab = 4 k Zbigniew Koza (WFiA UWr) MMX i SSE 9 / 16

Konwencja nazewnicza Programowanie SSE _mm_<intrin_op>_<suffix> intrin op suffix podstawowa operacja, np add, mul s = skalar, p = packed, ep = extended packed Następnie: s = float d = double i128 = signed 128-bit integer i64 = signed 64-bit integer u64 = unsigned 64-bit integer i8 = signed 8-bit integer u8 = unsigned 8-bit integer m64 _mm_add_pi8( m64 m1, m64 m2); // MMX m128 _mm_add_ss( m128 a, m128 b); // SSE mm128i _mm_add_epi8( m128i a, m128i b); // SSE2 Zbigniew Koza (WFiA UWr) MMX i SSE 10 / 16

Programowanie SSE Operacje na danych skalarnych i upakowanych Operacja skalarna wykonywana jest na pierwszej składowej danych, pozostałe są przepisywane z 1 argumentu m128 a, m128 b; m128 r = _mm_min_ss(a, b); jest równoważne r0 = min(a0, b0); r1 = a1; r2 = a2; r3 = a3; Operacja upakowana równocześnie na wszystkich składowych m128 r = _mm_min_ps(a, b); jest równoważne r0 = min(a0, b0); r1 = min(a1, b1); r2 = min(a2, b2); r3 = min(a3, b3); Zbigniew Koza (WFiA UWr) MMX i SSE 11 / 16

Programowanie SSE Użycie w C/C++ 1 Włączenie właściwego nagłówka: #include <mmintrinh> // MMX #include <mm3dnowh> // MMX 3D Now! #include <xmmintrinh> // SSE #include <emmintrinh> // SSE2 #include <pmmintrinh> // SSE3 #include <tmmintrinh> // SSSE3 #include <smmintrinh> // SSE4 #include <avxintrinh> // AVX #include <immintrinh> // wszystko, co obsluguje kompilator 2 Zastosowanie odpowiedniej flagi kompilatora -msse -msse2 -msse4 -msse2avx Zbigniew Koza (WFiA UWr) MMX i SSE 12 / 16

Przykład kodu Programowanie SSE #include <emmintrinh> void calc_sse (double* wynik, double* p1, double* p2, int size) { m128d asse, bsse; const m128d sse_pol = _mm_set_pd1(05); for (int i = 0; i < size; i += 2) { asse = _mm_load_pd( &p1[i] ); bsse = _mm_load_pd( &p2[i] ); asse = _mm_mul_pd( asse, asse ); bsse = _mm_mul_pd( bsse, bsse ); asse = _mm_add_pd( asse, bsse); asse = _mm_sqrt_pd( asse ); asse = _mm_add_pd(asse, sse_pol); _mm_store_pd( &wynik[i], asse); } } Zbigniew Koza (WFiA UWr) MMX i SSE 13 / 16

Czy to się opłaca? Programowanie SSE w i = a 2 i + b 2 i + 05, i = 1,, 10 6 Procesor przyspieszenie t min [ms] float double float double AMD Phenom II X6 1055T 28GHz 307 151 31 69 AMD Athlon 64 X2 Dual Core 6000+ 237 122 55 129 AMD Athlon 64 X2 Dual Core 4000+ 228 225 96 213 Intel Pentium Dual-Core E5200 250GHz 136 115 51 102 Intel Core 2 Duo T8100 21 GHz; 208 108 65 152 Intel Atom CPU N450 166GHz 322 120 207 602 Zbigniew Koza (WFiA UWr) MMX i SSE 14 / 16

Programowanie SSE Alternatywa: optymalizacja automatyczna -mfpmath=sse Procesor przyspieszenie float double AMD Phenom II X6 1055T 28GHz 120 124 AMD Athlon 64 X2 Dual Core 6000+ 122 122 AMD Athlon 64 X2 Dual Core 4000+ 100 100 Intel Pentium Dual-Core E5200 250GHz 099 108 Intel Core 2 Duo T8100 21 GHz 166 115 Intel Atom CPU N450 166GHz 104 119 Zbigniew Koza (WFiA UWr) MMX i SSE 15 / 16

Literatura Programowanie SSE 1 Intel C++ Compiler for Linux Systems User s Guide Zbigniew Koza (WFiA UWr) MMX i SSE 16 / 16