Giả sử tôi có một vector 2 yếu tố định nghĩa như sau (bằng cách sử dụng cú pháp GCC cho vectơ đóng gói)Computing x^y với intrinsics vector 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)
Tôi muốn biết nếu có một cách nhanh hơn để làm hai tính toán công suất sử dụng các hoạt động vectơ. Kiến trúc là GCC trên x86-64 và nền tảng mã cụ thể là OK.
Thực hiện một chức năng điện chung là khó khăn vì nó là kể từ khi bạn có thể cần cả 'exp() 'và' log() '. Có thể có quá nhiều phân nhánh để có thể có được tốc độ tăng tốc đáng giá qua vectorizing. Nhưng tôi chỉ suy đoán thôi. – Mysticial
Không, bộ chỉ lệnh SIMD không có bất kỳ thao tác nào cho phép tăng tốc độ pow(). SSE2 chỉ có thêm, phụ, mul, div, max, min và sqrt. Thậm chí không có một hướng dẫn không vectorized cho nó. –
Có thể có một số hy vọng nếu "y" được giới hạn trong int không dấu thay vì gấp đôi. Thật vậy, với thuật toán "thay đổi và nhân" cổ điển, các phần tử của hai vectơ có thể được đánh giá song song. Chỉ cần đoán của tôi. –