2012-04-13 26 views
11

Tôi đang sử dụng GHC 7.4.1 để cố gắng biên dịch chương trình sử dụng Repa. Nhưng trong quá trình biên soạn, tôi hết bộ nhớ. Với ghc -v, tôi có thể thấy rằng nó đang bị kẹt trong giai đoạn SpecConstr.Tôi có thể giúp SpecConstr trong GHC bằng cách nào?

SpecConstr là một trong những chuyển đổi từ Core-to-Core của GHC. Simon Peyton Jones có một mô tả tốt đẹp here, và có một số mã số here, nhưng nó khá chậm đối với tôi vì tôi không quen thuộc với các hoạt động bên trong của GHC.

Tôi muốn có thể trợ giúp trình biên dịch theo cách nào đó - có cách nào để biết nơi nó bị kẹt không? Ngoài ra, có cách nào để hạn chế sử dụng bộ nhớ trong giai đoạn này cho đến khi tôi có thể biên dịch lại trên một máy lớn hơn không?

Cảm ơn, Chad

+0

Trên ý thích, tôi đã xóa một 'computeUnboxedS' và bây giờ nó biên dịch tốt. Tuy nhiên không có ý tưởng tại sao. –

+0

nếu bạn đăng mã của mình, chúng tôi có thể cho bạn biết lý do. Cảnh tượng không nhìn thấy, tôi sẽ đoán bạn bogoned ma trận teutonic, và các ống jeffries đã được thông gió siêu. – rampion

+0

Cảm ơn, rất tiếc, tôi không thể đăng toàn bộ nội dung và không rõ cách chưng cất trong trường hợp tối thiểu. Tôi đã hy vọng có thể có một thủ tục chung để theo dõi những gì một phần của SpecConstr gây ra blowup. Có thể heap hồ sơ GHC chính nó, hoặc một cái gì đó như thế. –

Trả lời

6

Bạn có thể thử biên dịch với cờ -fspec-constr-threshold=n-fspec-constr-count=n. Chi tiết khác có trong số GHC docs. Với 7.4.1, giá trị mặc định là n = 200 cho ngưỡng và n = 3 cho số đếm.

Mặc dù không thấy mã, có thể bạn đang chạy vào this bug. Trong trường hợp đó, bạn có thể cần phải vô hiệu hóa hoàn toàn thẻ specconstr nếu các tùy chọn trên không đủ.

+0

Đẹp, cảm ơn yoU! Tôi không thấy bất kỳ tham chiếu nào đến các lá cờ mà bạn đề cập đến, nhưng bằng cách nào đó tôi đã thử '-fno-specialise' nhưng đã bỏ qua' -fspec-constr' hoàn toàn. –

4

Ngoài câu trả lời của John L, hãy đảm bảo bạn biên dịch với cờ -fno-liberate-case. Sự biến đổi trường hợp giải phóng có xu hướng gây ra sự bùng nổ mã, điều này khiến cho công việc của SpecConstr khó khăn hơn.

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