Skocz do: nawigacji, wyszukiwania

MICLAB:Wektoryzacja obliczen


Środowisko i modele programowania

dr inż. Łukasz Szustak, Politechnika Częstochowska, IITiS
mgr inż. Kamil Halbiniak, Politechnika Częstochowska, IITiS



Wektoryzacja obliczeń


Wykorzystanie pełnego potencjału oferowanego przez koprocesor Intel Xeon Phi wymaga zarówno zrównoleglenia obliczeń z użyciem wielu wątków, jak i jednostek wektorowych. Wektoryzacja obliczeń pozwala na wykonanie tej samej instrukcji, tyle że na kilku elementach tego samego typu jednocześnie, w efekcie czego wprowadza ona zrównoleglenie określane mianem zrównoleglenia na poziomie danych (data-level parallelism). Wzrost wydajności obliczeń po zastosowaniu technik wektoryzacji uzależniony jest najczęściej od struktury kodu źródłowego.


Obliczenia mogą zostać zwektoryzowane w sposób automatyczny oraz manualny. W pierwszym przypadku instrukcje wektorowe generowane są automatycznie przez kompilator. Rozwiązanie to zapewnia lepszą przenośność kodu pomiędzy platformami, ponieważ kompilator decyduje o tym, które instrukcje wektorowe mają zostać wykorzystane do wykonania obliczeń. W przypadku manualnej wektoryzacji za implementację technik wektoryzacji odpowiedzialny jest programista.


Większość dostępnych obecnie procesorów ogólnego przeznaczenia wspiera przetwarzanie wektorowe. Pierwszy zestaw instrukcji wektorowych - MMX (Multimedia Extensions lub Matrix Math Extensions) - wprowadzono w 1996 roku. Pozwalał on na wykonywanie obliczeń przy użyciu ośmiu 64-bitowych rejestrów, które umożliwiały jedynie przechowywanie liczb całkowitych. Instrukcje MMX umożliwiały wykonanie prostych operacji arytmetycznych. Trzy lata później w 1999 roku wprowadzono instrukcje SSE. Nowy zestaw instrukcji umożliwiał przetwarzanie danych z wykorzystaniem ośmiu rejestrów o długości 128-bitów każdy, co daje możliwość wykonywania obliczeń przy użyciu przykładowo czterech elementów zmiennoprzecinkowych pojedynczej precyzji. W 2010 roku SSE zostało rozszerzone o nowy zbiór instrukcji wektorowych, nazywanych AVX. Instrukcje te oferują możliwość przetwarzania danych przy pomocy szesnastu 256-bitowych rejestrów, które pozwalają na wykonywanie obliczeń z wykorzystaniem liczb zmiennoprzecinkowych typu float oraz double. Instrukcje te gwarantują blisko dwukrotnie lepszą wydajność, aniżeli instrukcje SSE. AVX oferuje bogaty zestaw instrukcji arytmetycznych, logicznych, konwersji, ładowania danych do pamięci cache, tasowania danych itd. W 2013 roku AVX rozszerzono o nowe instrukcje oraz możliwość przetwarzania danych z wykorzystaniem liczb całkowitych tworząc tym samym zestaw instrukcji wektorowych AVX2. Obecnie dostępne na rynku procesory ogólnego przeznaczenia wspierające nowoczesne zestawy instrukcji (AVX/AVX2) są kompatybilne wstecz ze starszymi zestawami. Wyjątkiem tego trendu są produkty bazujące na architekturze Intel MIC, które wspierają jedynie własny dedykowany zestaw instrukcji o nazwie IMCI. Instrukcje te wykorzystują trzydzieści dwa rejestry o rozmiarze 512-bitów. Każdy rejestr może przechowywać 16 elementów typu float lub 8 elementów typu double. Instrukcje IMCI oferują również możliwość przetwarzania liczb całkowitych 32- oraz 64-bitowych.



< Mechanizm Affinity

Automatyczna wektoryzacja obliczeń>