Điều duy nhất tôi tìm thấy cho đến nay là "biến đổi không có lỗi". Đối với bất kỳ lỗi số dấu phẩy động nào từ a+b
, a-b
và a*b
cũng là số dấu chấm động (trong vòng tới chế độ gần nhất, giả sử không có tràn/tràn, v.v.).
Lỗi bổ sung (và rõ ràng là trừ) rất dễ tính; nếu abs(a) >= abs(b)
, lỗi chính xác là b-((a+b)-a)
(2 thất bại, hoặc 4-5 nếu chúng ta không biết cái nào lớn hơn). Lỗi nhân là tầm thường để tính toán với fma
- nó chỉ đơn giản là fma(a,b,-a*b)
. Nếu không có fma
đó là 16 flops của mã khá khó chịu. Và giả lập hoàn toàn chung của một cách chính xác làm tròn fma
thậm chí còn chậm hơn thế.
Thêm 16 lần theo dõi lỗi cho mỗi lần thực hiện tính toán thực sự là quá mức cần thiết, nhưng chỉ với 1-5 lần thử nghiệm thân thiện với đường ống khá hợp lý và đối với nhiều thuật toán dựa trên 50% -200% chi phí và bù lại kết quả là lỗi nhỏ như thể tất cả các phép tính đã được thực hiện gấp đôi số bit chúng, tránh điều kiện bị lỗi trong nhiều trường hợp.
Điều thú vị là, fma
không bao giờ được sử dụng trong các thuật toán này để tính toán kết quả, chỉ để tìm lỗi, vì tìm lỗi fma
chậm như tìm lỗi nhân không có fma
.
Từ khóa có liên quan để tìm kiếm sẽ là "giao thức Horner được đền bù" và "sản phẩm chấm được đền bù", với chương trình Horner mang lại lợi ích nhiều hơn nữa.
Câu hỏi là về tác động của làm tròn, không về việc này. Câu trả lời của bạn cũng không chính xác vì fma yêu cầu 3 đơn vị dấu chấm động đầu vào thay vì đầu vào tiêu chuẩn 2, cổng phụ trong tệp đăng ký dấu phẩy động, và trình bổ sung điểm nổi rộng hơn Đây không phải là miễn phí, đó là sự hỗ trợ của fma với chi phí của một số phần cứng khác. – taw
taw: Bạn đã hỏi những thuật toán nào được hưởng lợi từ FMA và đối với một số ví dụ trong đó làm tròn là một lợi ích không tầm thường. Tôi đã trả lời phần đầu tiên, đó là hầu hết các thuật toán sẽ được hưởng lợi. – Gabe