Trả lời

32

Lập trình đa luồng song song, nhưng lập trình song song không nhất thiết phải đa luồng.

Trừ khi quá trình đa luồng xảy ra trên một lõi đơn, trong trường hợp đó chỉ là đồng thời.

+2

AFAIK, trên một bộ xử lý lõi đơn, luồng không song song. Nó là đồng thời, nhưng không song song. –

+0

@Ionut: http: //thesaurus.reference.com/browse/concurrent <- Nếu bạn nhìn dưới tiêu đề 'Synonyms' của kết quả đầu tiên. –

+5

sự khác biệt tôi thực hiện giữa đồng thời và song song là song song là thực sự đồng thời, trong khi đồng thời chỉ trông như thể nó đã được đồng thời. Chuyển đổi giữa các chủ đề quá nhanh đến nỗi có vẻ như nó song song, nhưng không phải vậy. Có thể có những thuật ngữ khác chỉ định điều này, nhưng đó là điều tôi hiểu. –

28

Không nhất thiết phải. Bạn có thể phân phối công việc giữa nhiều tiến trình và thậm chí nhiều máy - tôi sẽ không xếp lớp đó là lập trình "đa luồng" vì mỗi tiến trình chỉ có thể sử dụng một luồng đơn, nhưng chắc chắn là lập trình song song. Phải thừa nhận rằng bạn có thể lập luận rằng với nhiều quy trình có nhiều luồng trong hệ thống như một tổng thể ...

Cuối cùng, các định nghĩa như thế này chỉ hữu ích trong một ngữ cảnh. Trong trường hợp cụ thể của bạn, nó sẽ tạo ra sự khác biệt nào? Hay điều này chỉ là không quan tâm?

+1

Chúng ta cũng nên xem xét SIMD là lập trình song song? Chúng tôi đang thực hiện các hoạt động tương tự trên nhiều dữ liệu song song, nhưng tôi không biết liệu điều này có được coi là một sự song song vi mô được đưa vào định nghĩa về lập trình song song hay không. –

+0

Tôi muốn nói rằng SIMD là thiết kế phần cứng song song hơn, nhưng tôi đoán ở một mức độ nào đó bạn phải xem xét mặt lập trình có phần cứng song song chuyên dụng, ví dụ: những gì về lập trình cho một GPU? –

26

Không. Lập trình đa luồng có nghĩa là bạn có một quy trình duy nhất và quy trình này tạo ra một chuỗi các luồng. Tất cả các chủ đề đang chạy cùng một lúc, nhưng tất cả chúng đều nằm trong cùng một không gian quy trình: chúng có thể truy cập cùng một bộ nhớ, có cùng các bộ mô tả tệp mở, v.v.

Lập trình song song hơi "chung" hơn một chút. trong MPI, bạn thực hiện lập trình song song bằng cách chạy cùng một quá trình nhiều lần, với sự khác biệt là mọi quá trình nhận được "số nhận dạng" khác nhau, vì vậy nếu bạn muốn, bạn có thể phân biệt từng quy trình, nhưng không bắt buộc. Ngoài ra, các quy trình này độc lập với nhau, và chúng phải giao tiếp thông qua đường ống, hoặc ổ cắm mạng/unix. Các thư viện MPI cung cấp các chức năng cụ thể để di chuyển dữ liệu đến các nút, và theo kiểu đồng bộ hoặc không đồng bộ.

Ngược lại, OpenMP đạt được sự song song qua đa luồng và chia sẻ bộ nhớ. Bạn chỉ định các chỉ thị đặc biệt cho trình biên dịch, và nó tự động thực hiện thực hiện song song cho bạn.

Ưu điểm của OpenMP là nó rất minh bạch. Có một vòng lặp để song song? chỉ cần thêm một vài chỉ thị và trình biên dịch sẽ cắt thành từng phần và gán từng phần của vòng lặp cho một bộ xử lý khác. Thật không may, bạn cần một kiến ​​trúc bộ nhớ chia sẻ cho việc này. Các cụm có kiến ​​trúc dựa trên nút không thể sử dụng OpenMP ở cấp cụm. MPI cho phép bạn làm việc trên kiến ​​trúc dựa trên nút, nhưng bạn phải trả giá cho việc sử dụng phức tạp và không minh bạch hơn.

+0

ow, vì vậy nó có nghĩa là 1 công việc được xử lý bởi n quy trình không 1 công việc được xử lý bởi n chủ đề –

+0

Tôi dường như nhớ lại công việc đó đang được thực hiện trên song song theo kiểu OpenMP cho kiến ​​trúc đa quy trình ... Tôi không thể nhớ nếu đó là một phần của OpenMP, hay cái gì khác? –

+1

@Eko: không chính xác. MPI bắt đầu n trường hợp của cùng một chương trình, mỗi một với một số id khác nhau trong một biến đặc biệt (tìm MPI_Comm_Rank). Việc cần làm với những trường hợp n đó tùy thuộc vào bạn. –

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