2008-08-09 41 views
5

Tôi đang làm việc trong một dự án là chúng tôi cần nhiều hiệu suất hơn. Theo thời gian, chúng tôi đã tiếp tục phát triển thiết kế để hoạt động song song hơn (cả luồng và phân phối). Sau đó, bước mới nhất đã được chuyển một phần của nó vào một máy tính mới với 16 lõi. Tôi thấy rằng chúng ta cần phải suy nghĩ lại cách chúng ta làm những việc để mở rộng đến nhiều lõi trong một mô hình bộ nhớ chia sẻ. Ví dụ, bộ cấp phát bộ nhớ tiêu chuẩn không đủ tốt.Chia tỷ lệ các ứng dụng đa luồng trên các máy đa lõi

Tài nguyên nào mọi người đề xuất?

Cho đến nay tôi đã tìm thấy cột của Sutter Dr. Dobbs là một khởi đầu tốt. Tôi vừa có Nghệ thuật lập trình đa xử lý và cuốn sách O'Reilly trên các khối xây dựng luồng của Intel

Trả lời

5

Một vài cuốn sách khác mà sẽ rất hữu ích là:

Ngoài ra, hãy cân nhắc việc dựa vào trạng thái chia sẻ ít hơn giữa concu quy trình thô tục. Bạn sẽ mở rộng quy mô nhiều, tốt hơn nhiều nếu bạn có thể tránh nó bởi vì bạn sẽ có thể chuyển bưu kiện ra các đơn vị công việc độc lập mà không cần phải thực hiện nhiều đồng bộ hóa giữa chúng.

Thậm chí nếu bạn cần chia sẻ một số trạng thái, hãy xem liệu bạn có thể phân chia trạng thái được chia sẻ khỏi quá trình xử lý thực tế hay không. Điều đó sẽ cho phép bạn thực hiện nhiều việc xử lý song song, độc lập với việc tích hợp các đơn vị hoàn thành công việc trở lại trạng thái được chia sẻ. Rõ ràng điều này không hiệu quả nếu bạn có sự phụ thuộc giữa các đơn vị công việc, nhưng nó đáng để nghiên cứu thay vì chỉ giả thiết rằng trạng thái luôn luôn được chia sẻ.

3

Bạn có thể muốn xem Google's Performance Tools. Họ đã phát hành phiên bản malloc họ sử dụng cho các ứng dụng đa luồng. Nó cũng bao gồm một bộ công cụ định hình đẹp mắt.

1

Trình phân bổ trong FreeBSD gần đây đã nhận được bản cập nhật cho FreeBSD 7. Phiên bản mới được gọi là jemaloc và dường như có thể mở rộng nhiều hơn đối với nhiều luồng.

Bạn không đề cập đến nền tảng nào bạn đang sử dụng, vì vậy có lẽ trình phân bổ này có sẵn cho bạn. (Tôi tin rằng Firefox 3 uses jemalloc, ngay cả trên cửa sổ Vì vậy, các cảng phải tồn tại ở đâu đó..)

2

Như python monty sẽ nói "và bây giờ cho một cái gì đó hoàn toàn khác nhau" - bạn có thể thử một ngôn ngữ/môi trường không sử dụng chủ đề, nhưng quy trình và nhắn tin (không có trạng thái chia sẻ). Một trong những người trưởng thành nhất là erlang (và cuốn sách tuyệt vời và thú vị này: http://www.pragprog.com/titles/jaerlang/programming-erlang). Có thể không chính xác liên quan đến hoàn cảnh của bạn, nhưng bạn vẫn có thể học được rất nhiều ý tưởng mà bạn có thể áp dụng trong các công cụ khác.

Đối với các môi trường khác:

.Net có F # (để tìm hiểu lập trình hàm). JVM có Scala (có các diễn viên, rất giống Erlang, và là ngôn ngữ lai hàm).Ngoài ra còn có "ngã ba tham gia" khuôn khổ từ Doug Lea cho Java mà làm rất nhiều công việc khó khăn cho bạn.

0

Hãy xem Hoard nếu bạn đang thực hiện nhiều phân bổ bộ nhớ.

Cuộn của riêng bạn Lock Free List. Một nguồn lực tốt là ở đây - đó là trong C# nhưng ý tưởng là di động. Một khi bạn đã quen với cách họ làm việc, bạn bắt đầu nhìn thấy những nơi khác, nơi họ có thể được sử dụng và không chỉ trong danh sách.

0

Tôi sẽ phải kiểm tra Hoard, Google Perftools và jemalloc đôi khi. Bây giờ chúng ta đang sử dụng scalable_malloc từ Intel Threading Building Blocks và nó thực hiện đủ tốt.

Để tốt hơn hoặc tệ hơn, chúng tôi đang sử dụng C++ trên Windows, mặc dù phần lớn mã của chúng tôi sẽ biên dịch bằng gcc. Trừ khi có một lý do thuyết phục để chuyển sang redhat (distro Linux chính chúng tôi sử dụng), tôi nghi ngờ nó có giá trị đau đầu/rắc rối chính trị để di chuyển.

Tôi rất thích sử dụng Erlang, nhưng có nhiều cách để làm nhiều việc ở đây để làm lại ngay bây giờ. Nếu chúng ta nghĩ về các yêu cầu xung quanh sự phát triển của Erlang trong một thiết lập viễn thông, chúng rất giống với thế giới của chúng ta (giao dịch điện tử). Cuốn sách của Armstrong nằm trong ngăn đọc của tôi :)

Trong thử nghiệm của tôi để mở rộng từ 4 lõi đến 16 lõi, tôi đã học được cách đánh giá chi phí của bất kỳ khóa/tranh chấp nào trong phần song song của mã. May mắn thay, chúng tôi có một phần lớn mà quy mô với các dữ liệu, nhưng ngay cả điều đó đã không làm việc lúc đầu vì một khóa thêm và cấp phát bộ nhớ.

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