2012-04-11 21 views
5

Tôi đang viết một chương trình Haskell song song bằng cách sử dụng Chiến lược. Nó không làm những gì nó phải làm, và tôi muốn kiểm tra Haskell Execution Context (HEC) một chức năng được thực hiện trong.Xác định HEC hiện tại cho một chức năng trong Haskell

Có một cuộc gọi getHEC hoặc một cái gì đó tương tự mà tôi có thể sử dụng trong đầu ra gỡ lỗi của tôi?

Trả lời

4

Bạn có thể tìm hiểu khả năng nào (ví dụ: lõi CPU) một chuỗi Haskell đang chạy bằng cách gọi threadCapability từ Control.Concurrent.

Nếu bạn đang chạy chương trình của mình với +RTS -N, sẽ có một chuỗi cấp hệ điều hành (HEC) sinh ra trên mỗi lõi, do đó số khả năng được trả về threadCapability sẽ cho bạn biết chủ đề OS nào đang chạy. Tuy nhiên, nếu bạn chỉ định rõ số lượng các luồng hệ điều hành với +RTS -Nn, trong đó n là một số nguyên khác với số lõi trên hệ thống của bạn, điều này có thể sẽ ít hữu ích hơn cho bạn.

Bạn cũng có thể tìm thấy ThreadScope hữu ích để gỡ lỗi và trực quan hóa việc thực hiện các chương trình song song.

+0

Đây chính là điều tôi muốn. Cảm ơn bạn! – Jonatan

+1

Một điều khác mà tôi nên đề cập: Hãy nhớ rằng hệ điều hành được tự do sắp xếp lại các luồng vào các lõi khác nhau, do đó, 'threadCapability' được gọi hai lần trong cùng một chuỗi Haskell có một cơ hội nhỏ để trả về các giá trị khác nhau. elapses giữa các cuộc gọi. Bạn có thể tránh điều này cho các mục đích gỡ lỗi nếu bạn khóa một luồng tới một lõi cụ thể bằng cách sinh ra luồng bằng 'forkOn' thay vì' forkIO'. – bitbucket

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