OpenMP là một nền tảng lập trình cho phép thực thi các lệnh code của bạn trên một hệ thống bộ nhớ dùng chung (Shared Memory System) (ví dụ như bộ xử lý đa nhân là chiếc máy tính của bạn). Ví dụ: người ta có thể song song hóa một tập hợp các hoạt động trên một bộ xử lý đa nhân trong đó các lõi chia sẻ bộ nhớ với nhau. Bộ nhớ này bao gồm cả bộ nhớ đệm, RAM, bộ nhớ của ổ đĩa cứng,… giao tiếp rất dễ dàng và cần tương đối ít tài nguyên.
Open MPI (dựa trên phương thức truyền thông điệp) cũng là một nền tảng lập trình, nhưng thay vào đó nó cung cấp một khả năng song song hóa trên một hệ thống phân tán (Distributed System) (ví dụ như siêu máy tính). Ví dụ: có thể song song hóa toàn bộ một chương trình qua một mạng máy tính hoặc các nút giao tiếp trên cùng một mạng. Vì các nút này về cơ bản cũng là máy tính, chúng cũng có các bộ nhớ và vùng xử lý lõi. Giao tiếp giữa các nút với nhau, khi so sánh với hệ thống bộ nhớ dùng chung có thể sẽ khó khăn hơn và thường tốn tài nguyên hơn.
____________________________
Bình luận: Mark Hahn
OpenMP là một phần mở rộng cho ngôn ngữ lập trình để thực hiện việc tính toán song song dữ liệu (thường là các mảng và vòng lặp for). MPI là một thư viện để truyền thông điệp giữa các bộ xử lý riêng rẽ.
OpenMP có tính trừu tượng cao cao hơn, vì mục đích của nó là để thể hiện sự đồng thời của chương trình và luồng dữ liệu cho trình biên dịch. Ngược lại, tính đồng thời của MPI là ẩn (tất cả các bộ xử lý đều thực hiện song song) và các thông điệp thiết lập cấu trúc luồng dữ liệu của tính toán
Mặc dù mọi người thường nghĩ OpenMP chỉ là bộ nhớ dùng chung, nhưng không có gì ngăn cản việc triển khai OpenMP sử dụng MPI để hoạt động trên các bộ xử lý và máy chủ. Mặt khác, tính hai mặt của bộ nhớ dùng chung và truyền thông báo có nghĩa là việc triển khai MPI thường tận dụng bộ nhớ dùng chung cho các lõi xử lý trên cùng một nút.
