2012-01-25 27 views
10

Tôi không tìm thấy nhiều tài liệu trong phần bình luận. Có bất kỳ bài đăng trên blog hay tương tự nào về điều này không?Hỗ trợ thời gian chạy ghc cho hồ sơ được triển khai như thế nào?

+2

Sau khi tìm kiếm google tương đối không thành công, tôi sợ GHC HQ quá bận rộn khi triển khai và cải thiện nó để viết blog về nó. –

+3

Tôi nghĩ rằng hầu hết vẫn còn khá nhiều như mô tả trong [Sansom & Jones giấy] (http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.43.6277). Có điều gì đặc biệt mà bạn quan tâm không? –

+0

Cảm ơn bạn đã tham khảo! Đó sẽ là một câu trả lời. Tôi nghĩ rằng rwh đề cập rằng một số tối ưu hóa không tương thích với hồ sơ – user239558

Trả lời

7

Nguồn thông tin tốt nhất về khung lược tả có thể vẫn là số original paper của Patrick Sansom và Simon Peyton Jones. Bạn có thể tìm thấy chi tiết bổ sung trong số PhD thesis của Sansom cũng như thêm later paper thông số chính thức. Simon Marlow cũng đã nói về một vài thay đổi gần đây trong Cập nhật trạng thái GHC tại Haskell Implementors' Workshop 2011.

Ý tưởng đằng sau profiling chi phí trung tâm là để chú thích các cây biểu hiện với các nút "trung tâm chi phí", do đó ví dụ với -auto-all chương trình sẽ có nhiều chú thích thích sau:

fib n = {-# SCC foo #-} (case n of 
          0 -> 0 
          1 -> 1 
          n -> fib (n-1) + fib (n-2)) 

Khi chạy khi nhập fib, chương trình sẽ xem xét "ngăn xếp trung tâm chi phí" hiện tại và thêm "foo" vào đầu. Điều này sẽ được đảo ngược khi đánh giá thoát khỏi phạm vi của chú thích SCC một lần nữa. Một chút phép thuật đảm bảo rằng nếu, giả sử, n xảy ra là một giá trị lười biếng và chương trình cần thực thi mã của nó, trung tâm chi phí thích hợp cho rằng mã được khôi phục khi cần thiết.

cơ sở hạ tầng này sau đó được sử dụng cho cả thời gian cũng như gian hồ sơ:

  1. Một giờ sẽ kiểm tra các chi phí trung tâm ngăn xếp theo định kỳ. Mỗi lần tìm thấy một ngăn xếp trung tâm chi phí nhất định, số này được tính là "đánh dấu". Cuối cùng, RTS sẽ ước tính lượng thời gian cho mỗi ngăn xếp chi phí từ số lượng ve của nó, cho bạn một hồ sơ thời gian.

  2. Mỗi khi một đối tượng được cấp phát, chương trình sẽ lưu lại con trỏ vào ngăn xếp chi phí trung tâm hiện tại tại thời điểm đó. Điều này cho phép bộ thu gom rác cung cấp số liệu thống kê về số lượng byte được cư trú, được chia nhỏ theo trang web phân bổ.

Theo yêu cầu trong các bình luận, một vài lời về tối ưu hóa: Vì lý do rõ ràng khuôn khổ có thể không cho phép tối ưu hóa di chuyển chi phí không liên tục từ một trung tâm chi phí cho người khác, buộc tôi ưu hoa là khá bi quan tại lần. Ví dụ: trong ví dụ trên, bản phát hành hiện tại GHC sẽ không phải có thể hủy bỏ giá trị trả về, nghĩa là mỗi cuộc gọi đệ quy thực hiện phân bổ đống không cần thiết.

Theo quy tắc chung, không nên tính vào bất kỳ biến đổi mã nào xảy ra trên chú thích SCC. Khi nghi ngờ, tốt hơn là chú thích một hàm đủ cao trong ngăn xếp cuộc gọi, do đó, các bit quan trọng về hiệu suất không được chú thích chút nào.

0

Bạn có thể tìm thấy this paper bởi Jones, Marlow & Singh hữu ích, tùy thuộc vào những gì bạn muốn thực hiện. Nó bao gồm các thực hành để lược tả các chương trình GHC trong một bối cảnh song song và có một số nghiên cứu điển hình mà bạn có thể thấy hữu ích.

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