Co to jest "wektoryzacja"?

Kilka razy spotkałem się z tym terminem w matlab, fortran ... inne ... ale nigdy nie znalazłem wyjaśnienia, co to znaczy i co to robi? Więc pytam tutaj, co to jest wektoryzacja i co to znaczy na przykład, że "pętla jest wektoryzowana"?

Author: Thomas Geritzma, 2009-09-14

5 answers

Wiele procesorów ma zestawy instrukcji "vector" lub "SIMD", które stosują tę samą operację jednocześnie do dwóch, czterech lub więcej części danych. Nowoczesne układy x86 mają instrukcje SSE, wiele układów PPC ma instrukcje "Altivec", a nawet niektóre układy ARM mają zestaw instrukcji wektorowych, zwany neonem.

"wektoryzacja" (uproszczona) jest procesem przepisywania pętli tak, że zamiast przetwarzania pojedynczego elementu tablicy N razy, przetwarza (powiedzmy) 4 elementy tablicy jednocześnie N / 4 razy.

Termin "wektoryzacja" jest również używany do opisania transformacji oprogramowania wyższego poziomu, gdzie można po prostu całkowicie usunąć pętlę i opisać działanie na tablicach zamiast elementów, które je składają)

Różnica między wektoryzacją a rozwijaniem pętli: Rozważ następującą bardzo prostą pętlę, która dodaje elementy dwie tablice i zapisuje wyniki do trzeciej tablicy.

for (int i=0; i<16; ++i)
    C[i] = A[i] + B[i];

Rozwinięcie tej pętli przekształciłoby ją w coś takiego:

for (int i=0; i<16; i+=4) {
    C[i]   = A[i]   + B[i];
    C[i+1] = A[i+1] + B[i+1];
    C[i+2] = A[i+2] + B[i+2];
    C[i+3] = A[i+3] + B[i+3];
}

Wektoryzacja tego, z drugiej strony, daje coś takiego:

for (int i=0; i<16; i+=4)
    addFourThingsAtOnceAndStoreResult(&C[i], &A[i], &B[i]);

Gdzie "addFourThingsAtOnceAndStoreResult" jest symbolem zastępczym dla wszystkich wewnętrznych instrukcji używanych przez kompilator do określania instrukcji wektorowych. Zauważ, że niektóre Kompilatory są w stanie auto vectorize bardzo prostych pętli, które często mogą być włączone przez opcja kompilacji. Bardziej złożone algorytmy nadal wymagają pomocy programisty, aby wygenerować dobry kod wektorowy.

 118
Author: Stephen Canon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-14 17:01:39

Wektoryzacja to termin na przekształcenie programu skalarnego w program wektorowy. Wektoryzowane programy mogą uruchamiać wiele operacji z jednej instrukcji, podczas gdy Skalar może działać tylko na parach operandów jednocześnie.

From wikipedia :

Podejście skalarne:

for (i = 0; i < 1024; i++)
{
   C[i] = A[i]*B[i];
}

Podejście wektorowe:

for (i = 0; i < 1024; i+=4)
{
   C[i:i+3] = A[i:i+3]*B[i:i+3];
}
 20
Author: Anders,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-14 15:13:43

Odnosi się do zdolności do wykonywania pojedynczej operacji matematycznej na liście-lub "wektorze" - liczb w jednym kroku. Często widuje się to z Fortranem, ponieważ jest to związane z komputerami naukowymi, które są związane z superkomputerami, gdzie po raz pierwszy pojawiła się arytmetyka wektorowa. Obecnie prawie wszystkie procesory stacjonarne oferują pewną formę wektoryzowanej arytmetyki, dzięki technologiom takim jak SSE Intela. Procesory graficzne oferują również wektorowaną arytmetykę.

 5
Author: Warren Young,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-14 15:09:02

Wektoryzacja jest szeroko stosowana w komputerach naukowych, gdzie ogromne ilości danych muszą być przetwarzane wydajnie.

W prawdziwej aplikacji programistycznej, wiem, że jest używana w NUMPY(nie jestem pewien innych).

Numpy (pakiet do obliczeń naukowych w Pythonie) , używa wektoryzacji do szybkiej manipulacji n-wymiarową tablicą ,która zazwyczaj jest wolniejsza, jeśli jest wykonywana z wbudowanymi opcjami Pythona do obsługi tablic.

Chociaż Tony wyjaśnień są oto jak wektoryzacja jest zdefiniowana na stronie NUMPY DOCUMENTATION PAGE

Wektoryzacja opisuje brak jawnego zapętlenia, indeksowania itp., w kodzie-te rzeczy mają oczywiście miejsce "za kulisami" w zoptymalizowanym, wstępnie skompilowanym kodzie C. Wektoryzowany kod ma wiele zalet, wśród których są:

  1. Wektoryzowany kod jest bardziej zwięzły i łatwiejszy do odczytania

  2. Mniej linii kodu oznacza mniej bugs

  3. Kod bardziej przypomina standardową notację matematyczną (ułatwiając zazwyczaj poprawne kodowanie matematyczne konstrukty)

  4. Wektoryzacja skutkuje bardziej "Pythonicznym" kodem. Bez wektoryzacji, nasz kod byłby zaśmiecony nieefektywnymi i trudne do odczytania dla pętli.

 3
Author: bad programmer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-03 15:37:03

Zobacz dwie odpowiedzi powyżej. Chciałem tylko dodać, że powodem chęci zrobienia wektoryzacji jest to, że operacje te mogą być łatwo wykonywane w paraell przez superkomputery i wieloprocesory, co daje duży wzrost wydajności. Na komputerach z pojedynczym procesorem nie będzie zwiększenia wydajności.

 -3
Author: Larry Watanabe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-14 15:13:11