2011-10-14 26 views
5

Giả sử tôi có một máy tính cốt lõi 16 và một chương trình song song đáng xấu hổ. Tôi sử dụng rất nhiều sản phẩm chấm và các mảng bị vỡ, và nếu tôi không sử dụng đa xử lý nó sẽ là không có trí tuệ: Hãy chắc chắn rằng nó được xây dựng dựa trên phiên bản blas sử dụng đa luồng. Tuy nhiên, tôi đang sử dụng đa xử lý, và tất cả các lõi đang làm việc chăm chỉ mọi lúc. Trong trường hợp này, có bất kỳ lợi ích nào có được từ việc sử dụng một blas đa luồng?Có đáng sử dụng triển khai thực hiện đa luồng cùng với đa xử lý bằng Python không?

Hầu hết các hoạt động được (blas) gõ 1, một số là loại 2.

Trả lời

2

Nếu bạn đang sử dụng đa xử lý, và tất cả các lõi đang ở tải tối đa, sau đó sẽ có rất ít, nếu có, lợi ích để thêm chủ đề sẽ được chờ đợi xung quanh cho một bộ xử lý.

Tùy thuộc vào thuật toán của bạn và những gì bạn đang làm, có thể có ích hơn khi sử dụng một loại so với loại kia, nhưng điều đó rất phụ thuộc.

+0

Có lẽ tôi là những điều hiểu lầm, nhưng tôi đã ấn tượng rằng một lõi bộ xử lý có thể sử dụng hiệu quả nhiều luồng. Vì vậy, bạn có thể tăng tốc trên máy tính một lõi. –

+0

Tôi không phải là một chuyên gia về đa xử lý/luồng (nhưng!) Nhưng với sự hiểu biết của tôi, nếu một bộ xử lý duy nhất ở mức tối đa tải, thêm chủ đề sẽ chỉ gây ra nhiều chi phí để trao đổi giữa chúng. Trừ khi có kiến ​​trúc đặc biệt để giúp xử lý các luồng khác trong khi một kiến ​​trúc đang hoạt động (nói, một lõi khác?) Sẽ không có sự gia tăng hiệu năng nào xảy ra. Nếu tất cả các lõi ở mức tối đa tải và nếu bạn chia công việc tương tự thành các phần nhỏ, tất cả chúng sẽ vẫn ở mức tải tối đa. Thêm chủ đề vào một máy lõi đơn là hữu ích khi lõi đang chờ đợi xung quanh cho một cái gì đó xảy ra. – TorelTwiddler

6

Bạn có thể cần thận trọng một chút về giả định rằng mã của bạn thực sự được sử dụng các cuộc gọi BLAS đa luồng. Tương đối ít các nhà khai thác khó tính thực sự sử dụng BLAS cơ bản, và tương đối ít các cuộc gọi BLAS thực sự đa luồng. numpy.dot sử dụng BLAS dot, gemv hoặc gemm, tùy thuộc vào hoạt động, nhưng chỉ có gemm thường được đa luồng, vì hiếm khi có bất kỳ lợi ích hiệu suất nào cho các cuộc gọi BLAS O (N) và O (N^2). . Nếu bạn đang giới hạn bản thân đối với các hoạt động BLAS Cấp 1 và Cấp 2, tôi nghi ngờ bạn đang thực sự sử dụng các cuộc gọi BLAS đa luồng, ngay cả khi bạn đang sử dụng triển khai gọn gàng được xây dựng bằng BLAS có mulithreaded, như Atlas hoặc MKL.

+0

Tôi quan tâm đến các nguồn giải thích hành vi này nếu bạn biết một số tài liệu internet về nó ... – Simon

+0

Nguồn rõ ràng là chính mã numpy. Ngoài ra, cả Clint Whaley (tác giả của Atlas, trước đây từ UTK) và Kazushige Goto (tác giả của GotoBLAS, trước đây là TACC) đã viết và xuất bản một số tài liệu thiết kế và tài liệu học thuật về triển khai BLAS và hiệu suất của họ. – avidday

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