Có bất kỳ quy tắc chung nào cần tuân theo để khám phá nguyên nhân khi chương trình do GHC biên soạn dành nhiều thời gian để thu gom rác thải không? Và những gì thường được coi là quá nhiều? Ví dụ, nói chung, 60% năng suất có thể chấp nhận được hay là một dấu hiệu cho thấy có thể có điều gì đó sai với mã?Lời khuyên chung về giảm thời gian GC trong GHC
19
A
Trả lời
10
Dưới đây là một danh sách nhanh chóng và rất không đầy đủ:
- thử nghiệm và chuẩn mực. Một trong những điểm yếu của haskell là khó khăn trong việc dự đoán chi phí thời gian và không gian. Nếu bạn không có dữ liệu thử nghiệm thì bạn không có gì.
- Sử dụng thuật toán tốt hơn. Điều này nghe có vẻ quá đơn giản, nhưng tối ưu hóa các thuật toán không hiệu quả giống như việc cắt s ** t bằng vàng.
- Làm cho một số dữ liệu trở nên chặt chẽ hơn. Kiểm tra và điểm chuẩn! Mục đích là để lưu trữ giá trị WHNF nhỏ hơn về thể chất chứ không phải là thunk tạo ra nó, do đó làm sạch thêm rác trong lần chuyền đầu tiên hiệu quả nhất. tìm các hàm phức tạp tạo ra dữ liệu đơn giản.
- Làm cho một số dữ liệu kém chặt chẽ hơn. Kiểm tra và điểm chuẩn! Mục tiêu là việc sản xuất chậm trễ một lượng lớn dữ liệu cho đến trước khi nó được sử dụng và bị loại bỏ, do đó làm sạch thêm rác trong lần chuyền đầu tiên hiệu quả nhất. Tìm các hàm đơn giản tạo ra dữ liệu phức tạp lớn. Xem thêm comonads.
- Sử dụng chiến lược các mảng và các loại không được hộp, đặc biệt xem # 2. đối với đơn ST. Kiểm tra và điểm chuẩn! Tất cả các dữ liệu này phù hợp với nhiều dữ liệu thô hơn vào bộ nhớ nhỏ gọn hơn. Có ít rác để thu thập.
- Fiddle với cài đặt RTS (ghc cụ thể). Kiểm tra và điểm chuẩn! Mục đích là để "trở kháng phù hợp" GC với nhu cầu bộ nhớ của chương trình của bạn. Tôi thậm chí còn mất nhiều hơn ở đây sau đó trong 1-5 để hỏi các chuyên gia về điều này.
Thu gom rác tốt hơn có tiền đề khá đơn giản: Tạo ít rác hơn, thu thập sớm hơn, tạo ít phân bổ bộ nhớ/deallocations hơn. Bất cứ điều gì bạn có thể làm điều đó có thể dẫn đến một trong ba hiệu ứng này đáng để bắn. Kiểm tra và điểm chuẩn!
+1
+1 để tạo kết nối giữa tối ưu hóa thuật toán và xử lý vấn đề phân.Đặt son môi trên lợn bây giờ đang già đi, eh :) – Sal
Các vấn đề liên quan
- 1. Lời khuyên về chương trình Java
- 2. Có ai có lời khuyên về lập trình tổng hợp âm thanh thời gian thực không?
- 3. Lời khuyên về các quy ước đặt tên sql
- 4. Bất kỳ lời khuyên nào để tăng tốc thời gian biên dịch trong Flex Builder 3?
- 5. Cần lời khuyên về menu thả xuống CSS
- 6. Một số câu hỏi về 25 lời khuyên jquery
- 7. Lời khuyên về cách làm việc với mã di sản
- 8. lời khuyên về kiến trúc các ứng dụng asp.net mvc
- 9. Lời khuyên về việc thành lập Câu lạc bộ Hackers
- 10. Autowiring HibernateInterceptor như lời khuyên
- 11. Mạng thần kinh trong Haskell - lời khuyên
- 12. Lời khuyên cho việc phát triển Penlets
- 13. Java Object Serialization Lời khuyên hiệu suất
- 14. Lời khuyên về Học tập "Cách suy nghĩ về chức năng"?
- 15. Giảm thời gian tải applet
- 16. Cách giảm thiểu thời gian biên dịch trong C++
- 17. Tính% thời gian GC trong máy chủ Java
- 18. Cho CPU nhiều thời gian hơn vào GC trong java?
- 19. Đo thời gian dành cho GC trong JVM
- 20. GC và trò chơi thời gian thực của Lua
- 21. Lời khuyên cho việc học linux nhúng
- 22. C# cần lời khuyên về một vấn đề đơn giản về điều hướng biểu mẫu
- 23. GC tạm dừng trong Haskell cho các ứng dụng thời gian thực mềm
- 24. Mạng nơ-ron ở Lisp - lời khuyên
- 25. vẽ d3 mũi tên lời khuyên
- 26. Giảm thời gian để gắn và tải các ký hiệu
- 27. mùa xuân lời khuyên chú thích để
- 28. Cần một lời khuyên về khuôn khổ cho đường dẫn trên xác thực bản đồ
- 29. lời khuyên về lồng nhau Java cố gắng/cuối cùng mã bánh sandwich
- 30. Giảm thời gian xây dựng Visual Studio
Để giảm GC, trước tiên bạn có thể sử dụng hồ sơ của GHC để theo dõi mã nào được phân bổ nhiều nhất. –
Phân bổ ít hơn và bạn sẽ nhận được ít GC hơn. Tôi thường nghĩ rằng 25% GC là chấp nhận được, cao hơn thế và tôi bắt đầu tìm cách để giảm phân bổ. – augustss
Thông thường, chạy chương trình với "+ RTS-H" sẽ giúp ích rất nhiều. Ngoài ra, xây dựng với -O2. – aleator