Tôi đang tìm phương pháp hiệu quả nhất để lật dấu trên tất cả bốn phao được đóng gói trong thanh ghi SSE.Dấu hiệu lật trên phao SSE đóng gói
Tôi không tìm thấy nội tại để thực hiện việc này trong hướng dẫn sử dụng phần mềm Kiến trúc Intel. Dưới đây là những điều tôi đã thử.
Đối với mỗi trường hợp, tôi lặp lại mã 10 tỷ lần và nhận được thời gian tường được chỉ định. Tôi đang cố gắng để ít nhất là phù hợp với 4 giây nó có cách tiếp cận không SIMD của tôi, mà là sử dụng chỉ là toán tử trừ đơn nhất.
[48 giây]
_mm_sub_ps(_mm_setzero_ps(), vec);
[32 giây]
_mm_mul_ps(_mm_set1_ps(-1.0f), vec);
[9 giây]
union NegativeMask { int intRep; float fltRep; } negMask; negMask.intRep = 0x80000000; _mm_xor_ps(_mm_set1_ps(negMask.fltRep), vec);
Trình biên dịch là gcc 4.2 với O3 . CPU là Intel Core 2 Duo.
Cẩn thận mặc dù - sử dụng phần mở rộng gcc-cụ thể như thế này này làm cho mã của bạn không cầm tay. –
bạn đã xem mã nào tạo ra? – Aktau