Jak sprawdzić, czy procesor obsługuje zestaw instrukcji SSE3


Najlepsza odpowiedź

32-bitowy asembler:

mov eax, 0

cpuid

test ecx, 0x0001

Oczywiście Chciałbym się upewnić, że najpierw wepchniesz cztery rejestry GP i zdejmiesz je po sprawdzeniu flag, których szukasz. Istnieją inne flagi związane z takimi rzeczami jak monitor / oczekiwanie SSE3 (bit 3, a więc 0x0080) lub funkcje dodatkowe (bit 9, więc 0x0200), których również możesz chcieć użyć.

Wystarczająco łatwe do włączenia do C lub większość „prawdziwych” języków programowania z wbudowanym asemblerem, przy założeniu, że twój kompilator jest warty cholery.

Odpowiedź

AVX to nazwa jednego z wielu rozszerzeń wektorowych x86 firmy Intel. Jest używany od serii Sandy Bridge / Bulldozer od Intel i odpowiednio AND.

Co to jest rozszerzenie wektorowe?

Tradycyjna architektura procesora (przetwarzanie skalarne) działa na model zwany SISD: pojedyncza instrukcja, pojedyncze dane. Masz rdzeń procesora, który działa sekwencyjnie na instrukcjach, z których każdy działa na jednym zestawie operandów naraz.

Działa to dobrze w przypadku większości typów obciążeń, ale generalnie nie nadaje się do niektórych typów obciążeń wymagających dużej mocy obliczeniowej. Weźmy na przykład edycję zdjęć: jeśli chciałbym podwoić jasność obrazu, musiałbym podwoić jasność obrazu piksel po pikselu, co jest powolne. Każdy piksel jest w rzeczywistości niezależny od innych, co oznacza, że ​​istnieje potencjał masowy równoległość: mając wystarczającą ilość zasobów obliczeniowych i odpowiednią architekturę, teoretycznie można by wykonać całą tę pracę w jednej operacji.

Podaj procesory wektorowe: działają one na modelu zwanym SIMD. Zamiast pracować na pojedynczym elemencie jeden po drugim, procesor wektorowy łączy wiele elementów danych w jeden duży element (zwykle 256 bitów lub więcej), a następnie wykonuje na nim operacje. W rezultacie procesor wektorowy może wykonać pracę na wielu elementach danych w jednej operacji, podczas gdy tradycyjny procesor wymagałby kilku operacji.

Podstawy programowania SIMD

Tradycyjne architektury procesorów, takie jak X86, oczywiście nie zostały zaprojektowane do operacji SIMD. Przez lata Intel nieustannie dodawał rozszerzenia do x86 ISA w celu zwiększenia jego funkcjonalności, a rozszerzenia SIMD były jednymi z najwcześniej pojawiających się.

Zaczęło się od MMX na Pentium, ale rażące ograniczenia. Później Intel dodał rozszerzenie zestawu instrukcji SSE, które usunęło niektóre z tych ograniczeń. Kontynuowali iterację SSE w nadchodzącej dekadzie, aż ostatecznie wprowadzili AVX.

AVX wprowadził kilka całkiem znaczących ulepszeń w stosunku do swojego poprzednika, SSE4.x

Rozmiar rejestru wektorowego został zwiększony ze 128 bitów do 256 bitów, podwajając potencjalną przepustowość. Instrukcje przeszły z tradycyjnego formatu 2 operandów (a = a + b) do formatu 3 operandów ( a = b + c), poprawiając elastyczność. Zasady dostosowania również zostały złagodzone.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *