2013-01-15 35 views
13

Tôi đang làm việc theo số sorting library cho MArrays. Tốc độ là quan trọng, vì vậy tôi muốn tối ưu hóa nó càng nhiều càng tốt.Làm thế nào để tối ưu hóa đúng chức năng MArray cho tốc độ?

Hiện tại, tôi chỉ đơn giản là INLINE chức năng sắp xếp. Điều này làm tăng tốc độ mã hơn 10 lần so với mã không được tối ưu hóa. Tuy nhiên điều này có thể dễ dàng phát nổ kích thước mã nếu các chức năng được sử dụng ở một số nơi và làm chậm quá trình biên dịch.

Cách thay thế duy nhất khác có vẻ là SPECIALIZE các hàm cho tất cả các phiên bản hiện tại của MArray. Điều này cũng mở rộng mã kết quả, nhưng chỉ bởi một yếu tố không đổi, mà không phụ thuộc vào bao nhiêu lần các chức năng được sử dụng. Câu hỏi đặt ra là, có thể các trường hợp mới của MArray xuất hiện không? Hoặc là MArray rất đặc biệt và ràng buộc để nội bộ của Haskell để tôi có thể chắc chắn rằng không có trường hợp mới có thể được xác định bởi một số module khác?

+0

Có vẻ như bạn muốn sử dụng pragma INLINABLE: http://www.haskell.org/ghc/docs/7.0.4/html/users_guide/pragmas.html#inlinable-pragma –

+0

@JohnL Tôi đã nghĩ về điều đó , nhưng tôi e rằng nó sẽ chỉ làm việc với các pragmas đặc biệt bổ sung, vì các chức năng sắp xếp có lẽ quá lớn để được vạch ra bởi quyết định của GHC. Nhưng sự kết hợp này có thể là một giải pháp hợp lý - chuyên cho tất cả các cá thể hiện tại và thông báo cho người dùng chuyên về bất kỳ trường hợp 'MArray' mới nào mà họ khai báo. –

+0

Nếu hiệu suất thực sự quan trọng, hãy cân nhắc sử dụng vectơ hoặc repa thay thế. –

Trả lời

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