2010-02-16 39 views
12

Tôi đã xem xét LLVM trong một thời gian dài như là một back-end mới cho ngôn ngữ tôi hiện đang thực hiện. Dường như có hiệu suất tốt, các API thế hệ khá cao, đủ hỗ trợ ở mức độ thấp để tối ưu hóa các tối ưu hóa kỳ lạ. Ngoài ra, mặc dù tôi chưa tự kiểm tra, Apple dường như đã chứng minh thành công việc sử dụng LLVM cho các chương trình đa lõi được thu gom rác.Bộ thu gom rác cho đa lõi llvm?

Cho đến nay, rất tốt. Vì tôi quan tâm đến cả bộ sưu tập rác và đa lõi, bước tiếp theo sẽ là chọn một bộ thu gom rác đa lõi LLVM. Điều này đưa tôi đến câu hỏi: cái gì có sẵn? Tôi nhận thức được công việc của HLV Jon Harrop, nhưng đó là về nó.

Lưu ý rằng tôi cần nền tảng chéo, vì vậy GC của Apple có lẽ không phải là những gì tôi đang tìm kiếm (trừ khi có phiên bản đa nền tảng). Cũng lưu ý rằng tôi không có gì chống lại những người thu gom rác thải thế giới.

Cảm ơn trước, Yoric

Trả lời

5

LLVM docs say that it does not support multi-threaded collectorschưa.

Như ma trận cho thấy, cơ sở hạ tầng thu gom rác LLVM là đã thích hợp cho một loạt các nhà sưu tập, nhưng hiện không mở rộng các chương trình đa luồng. Điều này sẽ được thêm vào trong tương lai vì có là sở thích.

Các tài liệu làm nói rằng để làm thu gom rác thải multithreaded bạn cần phải dừng lại trên thế giới và rằng đây là một điều không cầm tay:

Threaded : là dùng một mutator đa luồng; người thu thập vẫn phải dừng trình biến đổi ("dừng lại thế giới") trước phân tích khả năng hiển thị bắt đầu. Dừng đột biến đa luồng là một sự cố phức tạp . Thông thường, yêu cầu mã cụ thể trên nền tảng cao trong thời gian chạy và sản xuất mã máy được thiết kế cẩn thận tại điểm an toàn.

Tuy nhiên, trạng thái chia sẻ giữa các luồng là một vấn đề về tỷ lệ khó chịu. Nếu ngôn ngữ của bạn giao tiếp chỉ thông qua tin nhắn đi qua giữa 'nhiệm vụ', và do đó không có trạng thái chia sẻ giữa chủ đề công nhân, sau đó bạn có thể sử dụng một bộ thu cho mỗi luồng cho mỗi đống chủ đề?

+0

Vâng, đó là những gì các tài liệu LLVM nói. Tuy nhiên, Apple dường như có một gc đa lõi tương thích, và cũng như dự án của HLVM. – Yoric

+0

Và, khi nó quay ra, trong ngôn ngữ của tôi, đồng thời là hoàn toàn dựa trên tin nhắn thực sự. Tuy nhiên, tôi tự hỏi có bao nhiêu hỗ trợ LLVM cung cấp cho một chủ đề thu/luồng cho mỗi luồng. – Yoric

+0

các tài liệu để lại một lỗ hổng cho Apple trong khi làm cho nó âm thanh không di động; Tôi sẽ cập nhật câu trả lời – Will

4

Báo giá mà Will đưa ra là về hỗ trợ nội tại của LLVM cho GC, nơi bạn tăng LLVM với mã C++ cho biết cách đi bộ, giải thích khung ngăn xếp, tiêm đọc và viết các rào cản, v.v. Mục tiêu chính của dự án HLVM của tôi là trở nên hữu ích với nỗ lực tối thiểu và rủi ro vì vậy tôi đã chọn sử dụng ngăn xếp bóng cho một "môi trường không hợp tác" để tránh xâm nhập vào nội bộ chưa trưởng thành của LLVM. Do đó, những tuyên bố về hỗ trợ nội tại của LLVM cho GC không áp dụng cho bộ thu gom rác của HLVM bởi vì nó không sử dụng cơ sở hạ tầng đó cả. Kết quả của tôi cực kỳ hấp dẫn: bạn có thể đạt được hiệu suất tuyệt vời với nỗ lực tối thiểu (serial performanceparallel performance).

Tôi tin rằng HLVM đã chạy hết hộp trên Unix bao gồm Mac OS X vì nó chỉ yêu cầu các chủ đề POSIX. Tôi mạnh mẽ không đồng ý với tuyên bố rằng viết một GC dừng lại trên thế giới là khó khăn: nó đã cho tôi 5 ngày để viết một 100-line thu gom rác đa lõi và tôi hầu như không biết gì về máy tính. Tôi không thể tin rằng nó sẽ là khó khăn để cổng vào Windows hoặc.

+0

Theo tài liệu của LLVM, ngăn xếp bóng không an toàn. Tôi tò mò, làm thế nào để bạn xử lý song song trong bối cảnh đó? – Yoric

+0

Có lẽ đó là đề cập đến stack bóng của LLVM nhưng tôi đang sử dụng của riêng tôi và không phải của họ. Tuy nhiên, tôi tò mò như thế nào một chồng bóng không thể được thread an toàn. Mỗi thread mutator có stack shadow cục bộ của riêng nó, nó tự do đột biến trừ khi tất cả các mutator bị tạm dừng cho một GC trong đó GC thread (là bất kì mutator nào phát sinh GC trong trường hợp của tôi) đọc tất cả các ngăn xếp shadow. Vì vậy, nó rõ ràng là "thread an toàn". –