Procesory

Intel Knights Ferry - 32 rdzenie, 128 wątków

przeczytasz w 3 min.

Z kart graficznych wywodzi się jeszcze jedna konstrukcja wieloprocesorowego akceleratora obliczeniowego, która jednak jest odmienna od tych produkowanych przez AMD i Nvidia. Chodzi mianowicie o układ Intel Knights Ferry, będący w pewnym sensie kontynuacją graficznego projektu Intel Larrabee, o którym było głośno kilka lat temu. Co ciekawe, wielu specjalistów uważa, że Knights Ferry w pewnym sensie jest projektem najbliższym ku stworzeniu architektury wielordzeniowego procesora przyszłości.

Program Intel MIC – Many Integrated Core

Program Intel MIC – Many Integrated Core
Program Intel MIC – Many Integrated Core

Obecnie Knights Ferry jest częścią programu MIC (Many Integrated Core), w ramach którego konstruowane są układy przeznaczone do obliczeń równoległych. Jak już wspomniałem, Knights Ferry wywodzi się z programu Larrabee, który miał na celu stworzenie układu graficznego GPGPU na bazie procesorów x86. Jak można się domyślić Knights Ferry to kość typu MMP (Massively Parallel Processors), oparta na architekturze x86, przez co sama w sobie jest nietypową konstrukcją.

Knights Ferry
Kirk Skaugen, wiceprezes i dyrektor generalny Intel Data Center Group prezentuje wielordzeniowy accelerator obliczeniowy Knights Ferry, który skonstruowany został w ramach projektu Intel Many Integrated Core

Moc obliczeniowa układu Knights Ferry to 650 GFLOPS przy operacjach zmiennoprzecinkowych podwójnej precyzji. Knights Ferry składa się z 32 rdzeni x86, z których każdy taktowany jest zegarem 1,2 GHz. Wkrótce ma zostać zaprezentowana wersja 50-rdzeniowa. Dzięki zastosowaniu dobrze znanej z tradycyjnych procesorów Intela technologii współbieżnej wielowątkowości o nazwie HyperThreading, każdy z rdzeni jest w stanie przetwarzać do 128 wątków jednocześnie – po cztery watki na rdzeń – i dysponuje 64-kilobajtową (po 32 KB dla danych i instrukcji) pamięcią podręczną pierwszego poziomu cache L1.

Ponadto Knights Ferry wyposażony został w sumie w 8 MB współdzielonej pamięci podręcznej drugiego poziomu cache L2 oraz, w zależności od wersji, w 1 lub 2 GB pamięci GDDR5. Każdy spośród 32 rdzeni, będący tak naprawdę w znacznym stopniu zmodyfikowanym jądrem procesora Pentium, wyposażono w wektorową 512-bitową jednostkę, która jest w stanie wykonywać blisko cztery razy więcej obliczeń niż ma to miejsce w klasycznych procesorach x86.

Architektura karty graficznej Intel Larrabee
Architektura karty graficznej Intel Larrabee oraz...

architektura Knights Ferry
Architektura Knights Ferry. Z dokładnością do "elementów graficznych" obie są takie same.

Zastosowana w Knights Ferry Pamięć cache L2 też jest nietypowa. Każdy z rdzeni dysponuje bowiem fizycznie tylko 256-kilobajtową pamięcią L2, ale do tej pamięci mogą w każdej chwili zaglądać inne rdzenie – w sumie 32 rdzenie mające po 256 KB pamięci cache L2 dają właśnie wspomnianą 8-megabajtową (32*256=8192) pamięć podręczną drugiego poziomu.

Rdzenie "zaglądają" wzajemnie do pamięci cache i komunikują się między sobą za pośrednictwem pierścieniowej, dwukierunkowej magistrali (ring-bus) o szerokości 1024 bitów (po 512 bitów w każdą stronę). Co ważne, dane pobrane przez jeden z rdzeni do własnej pamięci L2 są dzięki zastosowaniu magistrali pierścieniowej również dostępne (jeśli okażą się one potrzebne) dla innych rdzeni, a jednocześnie nie wymagają stosowania skomplikowanych i czasochłonnych protokołów spójności, tak jak np. w tradycyjnych procesorach zgodnych z architekturą x86. Tego typu pamięć, którą zastosowano w Knights Ferry, nazywa się pamięcią koherentną. W architekturze Knights Ferry istotne jest też to, że poprzez wspomnianą magistralę pierścieniową rdzenie komunikują się też z pozostałymi elementami układu, takimi jak kontroler pamięci GDDR5 oraz magistralą PCI Express.

Krzemowa struktura wielordzeniowego akceleratora obliczeniowego Knights Ferry
Krzemowa struktura wielordzeniowego akceleratora obliczeniowego Knights Ferry

Podobnie jak w konstrukcjach GPGPU AMD i Nvidii budowa pojedynczego rdzenia Knights Ferry nie jest skomplikowana. Jednostka skalarna to zmodyfikowana jednostka ALU (Arithmetic Logic Unit) znana z procesorów Pentium. Może ona wykonywać operacje 64-bitowe oraz pracować w trybie wielowątkowym, niemniej nie jest ona w stanie wykonywać rozkazów poza kolejnością. Ze względu na zastosowane uproszczenia nie ma tutaj jednostek przewidywania skoków i rozgałęzień (Branch Prediction) oraz modułu Out of Order Execution wykonującego obliczenia poza kolejnością. Bardzo krótki jest też potok wykonawczy - składa się on zaledwie z czterech etapów. Zmodyfikowano też w stosunku do Pentium kontrolery pamięci pierwszego i drugiego poziomu. Obsługują one funkcje prefetch, która pozwala na wcześniejsze pobranie z pamięci danych, jakie za chwilę będą potrzebne podczas obliczeń. To niezbędny warunek przy wykonywaniu obliczeń typu  SIMD, gdyż oczekiwanie na dane zniweczyłoby cały zysk płynący z jednoczesnego wykonywania jednej instrukcji na kilku operandach.

Architektura pojedynczego rdzenia układu Knights Ferry
Architektura pojedynczego rdzenia układu Knights Ferry

Z kolei jednostka wektorowa przypomina jednostki wektorowe stosowane w kartach AMD Radeon HD. Składa się ona z 16-bitowej wektorowej jednostki arytmetyczno-logicznej, która może w czasie jednego cyklu zegarowego przetworzyć szesnaście 32-bitowych operacji, co daje właśnie wspomniane 512-bitów (32*16=512). Co ważne, jednostka wektorowa operuje zarówno na liczbach pojedynczej i podwójnej precyzji. Obsługiwane są też wszystkie wymagane dla znanych z "normalnych procesorów" jednostki VPU (Vector Processing Unit), operacje takie jak separowanie danych dla każdej linii przetwarzanego wektora, rozrzucanie i zbieranie danych wektorowych podczas pobierania i zapisu ich do i z pamięci, czy maskowanie wybranych do zapisu linii po to, aby kontrolować równoległy przepływ danych.

W Knights Ferry zaimplementowano też zestaw instrukcji wektorowych AVE (Advanced Vector Extensions), które pozwalają na jednoczesne przetwarzanie całych wektorów danych. Instrukcje AVE są rozszerzeniem znanych z procesorów x86 instrukcji SIMD.

Jednostka VPU wykorzystana w architekturze pojedynczego rdzenia w układzie Knights Ferry
Jednostka VPU wykorzystana w architekturze pojedynczego rdzenia w układzie Knights Ferry