Có một số cách để thực hiện đa luồng. std::thread
cuối cùng được đưa ra theo tiêu chuẩn C++ 11 nhưng thay vào đó, boost::thread
có thể được sử dụng hiệu quả. Mỗi công nghệ có cú pháp cụ thể và các công cụ, nhưng - gần - được sử dụng cho lập trình song song CPU. Nhưng chúng có hiệu ứng khác nhau. Tôi biết rằng, ví dụ, MPI và OpenMP được sử dụng cho các mô hình bộ nhớ khác nhau.Làm thế nào để các chủ đề OpenMP, MPI, POSIX, std :: thread, boost :: thread tương quan?
Tôi cũng biết rằng sự lựa chọn công nghệ không thực sự độc quyền nên có thể sử dụng một công nghệ khác (một lần nữa, MPI và OpenMP). Làm thế nào đến chúng được sử dụng cho hiệu ứng khác nhau nhưng vẫn làm việc với cùng một nguồn (CPU)?
Sự khác biệt sẽ là gì (từ hệ điều hành và quan điểm phần cứng) nếu tôi biên dịch chương trình C++ với tính song song dựa trên từng công nghệ đó? Chẳng hạn, OpenMP hoặc std::thread
có sử dụng các chủ đề POSIX không? Nếu vậy, các chuỗi C++ 11 hoạt động như thế nào trên Windows? Hay mỗi công nghệ này làm việc trực tiếp với CPU thông qua ngôn ngữ lắp ráp hay gì đó?
Trộn OpenMP với một mô hình luồng khác, ví dụ: 'std :: thread', không phải là hành vi được chỉ định. Nó không bị cấm một cách rõ ràng trong đặc tả. nhưng vẫn cho dù nó hoạt động hay không là rất cụ thể thực hiện. Kết hợp MPI với OpenMP hoặc mô hình luồng khác là tốt, miễn là MPI được khởi tạo đúng với sự hỗ trợ cho các luồng. –