2009-12-04 33 views
20

Tôi biết rằng x87 có độ chính xác nội bộ cao hơn, có lẽ là sự khác biệt lớn nhất mà mọi người nhìn thấy giữa nó và các hoạt động SSE. Nhưng tôi phải tự hỏi, liệu có lợi ích nào khác khi sử dụng x87? Tôi có thói quen gõ -mfpmath=sse tự động trong bất kỳ dự án nào, và tôi tự hỏi liệu tôi có thiếu gì khác mà FPU x87 cung cấp hay không.Lợi ích của x87 trên SSE

Trả lời

14

x87 có một số hướng dẫn không tồn tại trong tập lệnh SSE.

Ngoài đầu nó là tất cả các công cụ lượng giác như fsin, fcos, fatan, fatan2 và một số công cụ hàm mũ/logarit.

Nếu mã của bạn dành phần lớn thời gian làm lượng giác, bạn có thể thấy hiệu suất tăng nhẹ nếu bạn sử dụng x87. Một số thuật toán DSP sẽ rơi vào danh mục này.

Tuy nhiên, đối với mã toán học mã mà bạn dành phần lớn thời gian của mình để thực hiện các phép cộng, phép nhân vv. SSE thường nhanh hơn.

+0

@LiraNuna thực sự? Tôi không biết bất kỳ opcode nào tính trực tiếp sin hoặc cos từ tập lệnh SSE. –

+5

Vui lòng cung cấp nguồn, Quonux. – asdf

+0

http://gruntthepeon.free.fr/ssemath/ – MickLH

16
  1. Trình bày trên các máy cũ thực sự.

EOF

4
  • Có di sản đáng kể và khả năng tương thích hệ thống nhỏ với x87: SSE là một tính năng xử lý tương đối mới. Nếu mã của bạn là để chạy trên một vi điều khiển nhúng, có một cơ hội tốt nó sẽ không hỗ trợ hướng dẫn SSE.

  • Ngay cả các hệ thống không có FPU được cài đặt thường sẽ cung cấp bộ giả lập 80x87, sẽ làm cho mã chạy trong suốt (nhiều hoặc ít hơn). Tôi không biết về bất kỳ bộ giả lập SSE nào - chắc chắn một trong các hệ thống của tôi không có bất kỳ hệ thống nào, vì vậy các phiên bản phần tử Adobe Photoshop mới nhất từ ​​chối chạy.

  • Hướng dẫn 80x87 có đặc điểm hoạt động song song tốt đã được khám phá và phân tích kỹ lưỡng kể từ khi được giới thiệu vào năm 1982 hoặc lâu hơn. Các bản sao khác nhau của x86 có thể đứng trên một lệnh SSE.

+2

Vì vậy, điểm mấu chốt của bạn là: (a) x87 có hỗ trợ kế thừa tốt (b) x87 đã được nghiên cứu kỹ. –

+0

Và (c) x87 được thiết lập. – asdf

+0

Tôi không hoàn toàn 100%, nhưng tôi tin rằng trên nhiều bộ vi xử lý 32 bit không có FPU, toán học dấu phẩy động có thể được thực hiện nhanh hơn trên các giá trị 80 bit so với các giá trị 64 bit [ -bit exponent không làm việc nhanh hơn so với phần mềm 64 bit và số mũ 16 bit, nhưng cần thêm thời gian để đóng gói và giải nén].Tôi thực sự bối rối vì tại sao định dạng 80 bit đã không hoạt động trong vài thập kỷ qua, vì dưới dạng * định dạng * tính toán, nó có vẻ vượt trội trong mọi cách để tăng gấp đôi 64 bit. – supercat

7

hướng dẫn FPU có kích thước nhỏ hơn so với các chỉ lệnh SSE, vì vậy họ rất lý tưởng cho các công cụ demoscene

+0

Tôi không mua thứ này; chắc chắn các lập trình viên cảnh trình diễn nghiêm túc nén luồng hướng dẫn của họ; các công cụ nén theo tên miền cụ thể sẽ có thể nén các chỉ lệnh SSE cũng như các lệnh x87. –

+0

@StephenCanon (không nén), nhưng quan điểm của bạn là đúng nếu bạn/họ sử dụng bất kỳ loại nén nào – Quonux

0

chuyển đổi giữa floatdouble là nhanh hơn với x87 (thường là miễn phí) so với SSE. Với x87, bạn có thể tải và lưu trữ float, double hoặc long double đến hoặc từ ngăn đăng ký và nó được chuyển đổi hoặc từ độ chính xác mở rộng mà không mất thêm chi phí. Với SSE, các hướng dẫn bổ sung được yêu cầu thực hiện chuyển đổi loại nếu các loại được trộn lẫn, vì các thanh ghi có chứa các giá trị float hoặc double. Các hướng dẫn chuyển đổi này khá nhanh nhưng phải mất thêm thời gian.

Sửa lỗi thực sự là không được trộn floatdouble quá mức, không được sử dụng x87, tất nhiên.