2013-03-30 40 views
14

Tôi đang tìm thư viện toán SIMD (tốt nhất là nguồn mở) cho SSE và AVX. Tôi có nghĩa là ví dụ nếu tôi có một đăng ký AVX v với 8 giá trị float tôi muốn tội lỗi (v) để trả lại tội lỗi của tất cả tám giá trị cùng một lúc.Thư viện toán học SIMD cho SSE và AVX

AMD có thư viện propreitery, LibM http://developer.amd.com/tools/cpu-development/libm/ có một số chức năng toán SIMD nhưng LibM chỉ sử dụng AVX nếu phát hiện FMA4 mà CPU Intel không có. Ngoài ra tôi không chắc chắn nó hoàn toàn sử dụng AVX như tất cả các tên hàm kết thúc bằng s4 (d2) và không phải là s8 (d4). Nó cho hiệu suất tốt hơn so với các thư viện toán học chuẩn trên CPU Intel nhưng nó không tốt hơn nhiều.

Intel có SVML như một phần của trình biên dịch C++ nhưng bộ biên dịch rất đắt trên Windows. Ngoài ra, Intel làm tê liệt thư viện trên các CPU không phải của Intel.

Tôi đã tìm thấy thư viện AVX sau, http://software-lisc.fbk.eu/avx_mathfun/, hỗ trợ một vài hàm toán học (exp, log, sin, cos và sincos). Nó cho kết quả rất nhanh với tôi, nhanh hơn SVML, nhưng tôi đã không kiểm tra độ chính xác. Nó chỉ hoạt động trên một điểm nổi và không hoạt động trong Visual Studio (mặc dù điều đó có thể dễ dàng sửa). Nó dựa trên một thư viện SSE khác.

Có ai có bất kỳ đề xuất nào khác không?

Edit: Tôi tìm thấy một thread SO rằng có nhiều câu trả lời về vấn đề này Vectorized Trig functions in C?

+1

Mặc dù nó là một giải pháp độc quyền, Kernel Thư viện Toán của Intel là một lựa chọn khá toàn diện. Tuy nhiên, nó chỉ hoạt động tốt nhất trên các CPU Intel. Tôi tin rằng nó đã được biết đến trong quá khứ để chuyển hướng một đường dẫn mã không được tối ưu hóa khi chạy trên một bộ xử lý không phải của Intel. Tôi không chắc chắn đó là trường hợp trên các phiên bản hiện đại, mặc dù. –

+0

Ở đây bạn có thể nhận được logarit: https://stackoverflow.com/a/45898937/1915854 –

+0

[Thư viện lớp Vector của Agner] (http://agner.org/optimize/#vectorclass) bị GPL. Đó là nhiều hơn một wrapper cho intrinsics của Intel để làm cho vectorization thủ công thuận tiện hơn, nhưng có một số chức năng toán học-thư viện như exp và log. –

Trả lời

7

tôi đã thực hiện Vecmathlib https://bitbucket.org/eschnett/vecmathlib/ như một thư viện chung cho hai dự án khác (Các Einstein Toolkit, và pocl http://pocl.sourceforge.net/). Vecmathlib là mã nguồn mở, và được viết bằng C++.

+1

Điều đó dường như chính xác là loại gói tôi đang tìm kiếm. Tôi sẽ thử và lấy lại cho bạn. –

+1

Thư viện đó trông rất hứa hẹn, nhưng tôi gặp phải một vài vấn đề: a) phiên bản trên bitbucket không biên dịch do thiếu #endif b) dữ liệu điểm chuẩn trông rất đáng thất vọng, thường VML là thứ tự chậm hơn trong thử nghiệm của tôi - ở đây MINGW trên windws. Và dường như không thể biên dịch với MSVC – ibell

0

Gromacs là gói phần mềm động học phân tử được tối ưu hóa cao được viết bằng C++ sử dụng SIMD. Theo như tôi biết các chức năng toán học SIMD vẫn chưa được tách ra thành một thư viện riêng biệt nhưng tôi đoán việc thực hiện có thể hữu ích cho những người khác dù sao.

https://github.com/gromacs/gromacs/blob/master/src/gromacs/simd/simd_math.h

http://manual.gromacs.org/documentation/2016.4/doxygen/html-lib/simd__math_8h.xhtml

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