2012-01-17 23 views
8

Tôi đang thực hiện một số tính toán thống kê. Tôi cần chúng nhanh, vì vậy tôi viết lại hầu hết nó để sử dụng SSE. Tôi khá ngạc nhiên với nó, vì vậy tôi đã tự hỏi cách tiếp cận đúng ở đây là:Lôgarit với SSE, hoặc chuyển sang FPU?

Theo hiểu biết của tôi, không có hàm log2 hoặc ln trong SSE, ít nhất là không lên đến 4.1, là phiên bản mới nhất được hỗ trợ bởi phần cứng tôi sử dụng.

Là nó tốt hơn để:

  1. chiết xuất 4 phao, và làm các phép tính FPU vào chúng để xác định enthropy - Tôi sẽ không cần phải tải bất kỳ của những giá trị trở lại vào thanh ghi SSE, chỉ tổng hợp họ lên khác nổi
  2. tìm thấy một chức năng cho SSE mà không log2
+0

Những gì bạn cần loại phạm vi và độ chính xác cho log2 của bạn? –

+0

Độ chính xác tương tự tôi nhận được từ FPU sẽ là mong muốn –

+1

Dường như có một vài triển khai log2 SSE xung quanh, ví dụ: http://jrfonseca.blogspot.com/2008/09/fast-sse2-pow-tables-or-polynomials.html –

Trả lời

8

Dường như có một vài triển khai SSE log2 xung quanh, ví dụ: this one.

Ngoài ra còn có Intel Approximate Maths Library có chức năng log2 trong số những người khác - cũ (2000) nhưng là SSE2 và vẫn hoạt động tốt.


Xem thêm:

+1

Do phương pháp được sử dụng trên blog, chức năng giờ đây là bộ nhớ bị ràng buộc, thay vì CPU bị ràng buộc. Tôi unrolled vòng một chút để sử dụng một số tình yêu _mm_prefetch, và nó vẫn là bộ nhớ bị ràng buộc. Cảm ơn con trỏ tuyệt vời đó! –

+0

Rất vui khi nó hoạt động cho bạn. Bạn có thể đã biết điều này, nhưng nếu bạn đang nhấn một nút cổ chai băng thông bộ nhớ sau đó cố gắng kết hợp các hoạt động khác với log2 của bạn để bạn sử dụng nhiều hơn của dữ liệu trong khi nó trong bộ nhớ cache. –

+1

Nếu bạn đang cập nhật câu trả lời, bạn có thể muốn đề cập đến libmvec, được chuyển với glibc gần đây. –

1

không có hướng dẫn SSE mà thực hiện một hàm logarit. Tuy nhiên, cũng không có lệnh x86 đơn nào thực hiện lôgarit chung. Nếu bạn đang nghĩ đến việc sử dụng hàm logarit như log hoặc log10 từ thư viện chuẩn C, bạn nên xem xét triển khai được sử dụng trong thư viện nguồn mở như libc. Bạn có thể dễ dàng cuộn xấp xỉ logarit của riêng bạn hoạt động trên tất cả các phần tử trong thanh ghi SSE.

Hàm như vậy thường được thực hiện bằng cách sử dụng phép tính xấp xỉ đa thức hợp lệ trong một số đặc điểm chính xác về một vùng nhất định của các đối số đầu vào, chẳng hạn như chuỗi Taylor. Sau đó, bạn có thể tận dụng các thuộc tính lôgarit để bọc một đối số đầu vào chung vào phạm vi đầu vào có thể chấp nhận được cho quy trình logarit của bạn. Bên cạnh đó, bạn có thể parameterize cơ sở của logarit bằng cách tận dụng tài sản:

log_y(x) = log_a(x)/log_a(y) 

đâu a là cơ sở của các thói quen logarit mà bạn đã tạo.

Các vấn đề liên quan