Załóżmy, że mają dwa element wektora określa się następująco (z wykorzystaniem składni GCC pakowanych wektorów)obliczeniowe x^y z intrinsics wektora GCC
// packed vector of 2-elements
typedef double v2d __attribute__((vector_size(sizeof(double)*2)));
v2d x = ...;
double y = ...;
x[0] = pow(x[0], y)
x[1] = pow(x[1], y)
ja informacji, czy jest to szybszy sposób wykonać dwa obliczenia mocy za pomocą operacji wektorowych. Architektura jest GCC na x86-64 i kod specyficzny dla platformy jest OK.
Wdrożenie ogólną funkcję zasilania jest trudne, jak to jest, ponieważ może być konieczne zarówno 'exp()' i 'log()'. Prawdopodobnie istnieje zbyt duża liczba rozgałęzień, aby uzyskać odpowiednie przyspieszenie przez wektoryzację. Ale tylko spekuluję. – Mysticial
Nie, zestaw instrukcji SIMD nie ma żadnych operacji, które umożliwiają przyspieszenie pow(). SSE2 ma tylko dodać, pod, mul, div, max, min i sqrt. Nie ma nawet nie-wektoryzowanej instrukcji do tego. –
Może być trochę nadziei, jeśli "y" jest ograniczone do unsigned int zamiast double. Rzeczywiście, w przypadku klasycznego algorytmu "przesuń i pomnóż", dwa elementy wektora mogą być oceniane równolegle. Tylko moje przypuszczenie. –