Làm thế nào để tránh những con số không chuẩn hóa?


7

Hệ thống xử lý tín hiệu số AMD X86-64 điểm nổi tương tự được đề cập trong câu hỏi trước của tôi có một vấn đề đôi khi nó chậm đi đáng kể khi tín hiệu đạt được giá trị rất gần (nhưng không chính xác) bằng không.

Vấn đề là các giá trị dấu phẩy động không chuẩn hóa đòi hỏi xử lý đặc biệt bởi CPU, tốc độ chậm hơn đáng kể so với xử lý các giá trị dấu phẩy động thông thường. Điều này có thể khiến hệ thống DSP chạy quá chậm - mất nhiều thời gian hơn1/fs để tính toán mọi thứ cần tính toán trong một chu kỳ.

Một cách giải quyết là thêm một phần bù nhỏ cho tất cả các số để buộc chúng vào phạm vi của các số bình thường. Có cách nào để thay vào đó hướng dẫn cho FPU đơn giản là không tạo ra các số bất thường ở vị trí đầu tiên không?

HĐH là Linux và trình biên dịch là gcc.

EDIT: Ngoài ra, những hậu quả bằng số của việc vô hiệu hóa các số bất thường là gì?


Bạn có đang sử dụng hướng dẫn x87 FPU, MMX, SSE, AVX, tất cả các mục trên, v.v.?
Jason R

Chỉ cần FPU, tôi nghĩ. Độ chính xác gấp đôi. Đối với hầu hết các phần, toán học được thực hiện trực tiếp trong C và trình biên dịch C (gcc) làm bất cứ điều gì nó làm. Thay vì thư viện toán học, chúng tôi sử dụng một số hàm lắp ráp nội tuyến nhỏ để lấy sincos, v.v.
nibot

Câu trả lời:


10

Bạn có thể buộc các số không bình thường về 0 bằng cách đặt các bit "tuôn về 0" và "biến số là 0" (15,6) trong thanh ghi MXCSR .

_mm_setcsr( _mm_getcsr() | (1<<15) | (1<<6));
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.