2012-02-22 9 views
24

Tôi muốn thực hiện thuật toán lọc hạt của mình song song trong Common Lisp. Particle Lọc và lấy mẫu có thể được song song và tôi muốn làm điều này cho máy 4 lõi của tôi. Câu hỏi của tôi là liệu lập trình song song là khả thi trong CL hay không và nếu nó là khả thi là có bất kỳ đọc tốt, hướng dẫn về việc bắt đầu tính toán song song trong CL.Lập trình song song chung Lisp

Trả lời

26

Chắc chắn khả thi!

Bordeaux Threads project cung cấp nguyên thủy chủ đề cho một số triển khai; Tôi sẽ đề nghị sử dụng nó thay vì nguyên thủy thực hiện cụ thể của SBCL (đặc biệt là nếu bạn không phải trên SBCL!).

Nguyên thủy chủ đề được cung cấp bởi bt, tuy nhiên, khá nguyên thủy. Tôi đã sử dụng và thích Eager Future2 được xây dựng trên bt để cung cấp các tính năng tương tranh sử dụng tương lai. Bạn có thể tạo ra tương lai được tính lười biếng, háo hức (ngay lập tức), hoặc đầu cơ. Các tương lai đầu cơ được tính toán bởi một hồ bơi thread có kích thước có thể được tùy chỉnh.

Tôi bắt đầu a little project để cung cấp các phiên bản song song của các hàm CL sử dụng EF2, nhưng nó chỉ có ba chức năng cho đến nay, vì vậy nó sẽ không được sử dụng nhiều cho bất kỳ ai. Tôi tất nhiên chào đón các lập trình viên khác để hack nó và gửi yêu cầu kéo, và tôi hy vọng sẽ làm nhiều hơn trong tương lai.

Có nhiều thư viện khác listed on Cliki mà tôi chưa thử bản thân mình. Theo các hướng dẫn, tôi không biết gì cả, nhưng các tính năng đồng thời được cung cấp cũng được tìm thấy trong các ngôn ngữ khác và các thuật toán và thực hành tốt thường không phải là ngôn ngữ cụ thể.

Nếu bạn muốn đọc sách, tôi khuyên bạn nên Ngôn ngữ lập trình đồng thời C. Các tác giả mô tả một ngôn ngữ lập trình mới, dựa trên C, với sự tương tranh như một tính năng ngôn ngữ. Tất nhiên, do tính chất của CL, nó có khả năng có thể thực hiện các tính năng này mà không cần phải tạo một trình biên dịch mới. Theo tôi, cuốn sách trình bày các khái niệm đồng thời tuyệt vời và giải quyết nhiều vấn đề bạn có thể gặp phải hoặc không cân nhắc khi viết các chương trình đồng thời.

+2

tôi cũng khuyên bạn nên PCALL (http://marijnhaverbeke.nl/pcall/) - một rất đơn giản, nhưng thư viện hữu ích để tổ chức các phép tính độc lập song song (chủ yếu). –

+0

EF2 là một nhánh của PCall. Tôi đã không sử dụng PCall bản thân mình. –

+5

lallel (http://lparallel.org/) là một thư viện lập trình song song tuyệt vời, các kênh hỗ trợ, tương lai và nhiều hơn nữa. Nó cũng có thư viện anh chị em (sử dụng cùng api) - lfarm, cho phép tính toán phân tán. –

8

SBCL có hỗ trợ đa luồng. Đó là mức độ quá thấp và, theo hiểu biết của tôi, không bao gồm bất kỳ thuật toán song song nào. Nó chỉ có khả năng tạo ra các luồng thực hiện một số hàm lambda và kiểm tra sau đó nếu luồng đã hoàn thành (tham gia nó). Tôi đã sử dụng hỗ trợ đó để tạo các trang blog của tôi với tốc độ tuyệt vời (mỗi trang hoặc tập hợp các trang trong một chuỗi khác nhau). Bạn có thể xem mã ở đây:

https://github.com/dsevilla/functional-mind-blog/blob/master/blog/process.lisp

Đối eample, tạo ra một chủ đề cho mỗi trang là một cái gì đó như:

#+sbcl 
(defun generate-post-pages() 
    (map nil 
     #'(lambda (post) 
      (make-thread (lambda() (page-generation-function post)))) 
     *posts*)) 

Bạn cũng có thể join-thread, và có mutexes, vv Bạn có thể đọc tài liệu ở đây: SBCL Threading. Tuy nhiên nó quá thấp. Bạn sẽ kết thúc thiếu các tính năng tuyệt vời của Clojure cho đồng thời ...

4

Kiểm tra các chuỗi bordeaux nếu bạn đang tìm kiếm một giao diện kiểu chủ đề POSIX duy nhất cho các nguyên thủy đa luồng cho các Lisps khác nhau.

Nếu tôi đang tìm kiếm triển khai Lisp miễn phí đáng tin cậy, tôi sẽ bắt đầu với CCL và sau đó thử SBCL. Tôi sử dụng CCL cho hầu như tất cả các thử nghiệm của tôi và SBCL và LispWorks cho phần còn lại.

Thư viện tương lai của Sedach sẽ cung cấp giao diện cấp cao hơn. Ngoài ra còn có một số đóng góp khác từ những người dùng khác nhau trong thư mục đóng góp của SBCL.

Điều này đến từ một người không sử dụng chủ đề bordeaux cũng như thư viện tương lai của Sedach và đã viết phiên bản riêng của cả hai. Tôi có thể gửi cho bạn thực hiện của tôi, nhưng hai gói này cũng được cho là tốt, và họ có lẽ là một điểm khởi đầu tốt hơn.

3

LispWorks 6 đi kèm với một bộ tốt đẹp của nguyên thủy cho lập trình đồng thời.

Lưu ý rằng theo kiến ​​thức của tôi none của việc triển khai Common Lisp thông thường có đồng thời Garbage Collector.

Tài liệu cho LispWorks 6 và Đa