Tôi xin lỗi trước cho định dạng bài đăng trên blog của câu trả lời của tôi. Tôi không thể giúp mình tạo ra một cái nhìn tổng quan nhỏ về thế giới điện toán song song.
Bạn có thể phân loại các mô hình lập trình song song theo khoảng hai loại: mô hình luồng điều khiển và luồng dữ liệu.
Các mô hình dòng điều khiển cố gắng làm cho tính song song hoạt động trong bối cảnh của một chương trình kiểm soát rõ ràng, về cơ bản là mọi máy tính lập trình ngày nay. Vấn đề cơ bản đang được giải quyết là một "kiến trúc Von Neumann" như vậy không được thiết kế để thực hiện song song, nhưng tính toán tuần tự hiệu quả. Tính song song trong bối cảnh như vậy có được bằng cách nhân đôi các phần của các mô-đun cơ bản (bộ nhớ, điều khiển, số học).
Sao chép chỉ số học cung cấp cho bạn các hướng dẫn SIMD, tất cả ALU chia sẻ cùng một Bộ đếm chương trình (PC) và do đó luôn luôn thực hiện cùng một hoạt động song song, mặc dù trên các dữ liệu khác nhau.
Sao chép ALU và PC nhưng giữ trình sắp xếp lệnh bên trong bộ điều khiển mang lại cho bạn thực thi Out of Order (OoO) mang lại một số đường ống song song. Trong danh mục này, bạn cũng có các kỹ thuật dự đoán từ rất dài (VLWI) và các kỹ thuật dự đoán rẽ nhánh. Bạn hiếm khi thấy thể loại này ở cấp độ phần mềm mặc dù.
Đi xa hơn một chút là sao chép toàn bộ 'lõi' nhưng giữ cho bộ nhớ được chia sẻ, đây là các bộ xử lý đa lõi hiện tại cung cấp cho bạn tính song song (hoặc luồng). Chia sẻ bộ nhớ trong ngữ cảnh này cung cấp cho bạn các vấn đề tương tranh rất, rất khó khăn và tinh tế . Do đó, các tính toán song song trên đa lõi hiện tại hoàn toàn xoay quanh các vấn đề đồng bộ hóa / đồng thời, cân bằng hiệu suất cẩn thận (không đồng bộ hóa) và ngữ nghĩa mong muốn (hoàn toàn đồng bộ hóa, ngữ nghĩa thực thi tuần tự). Các ví dụ của việc này là PRAM hoặc phổ biến hơn những ngày này các Cilk ofshoots như ngã ba / join ( IntelTBB , Java.Utils.Concurrency). Các mô hình CSP và Actor là các mô hình đồng thời, nhưng như đã đề cập ở trên đồng thời và tính song song trở nên mờ nhạt trong môi trường bộ nhớ chia sẻ. nb song song là cho hiệu suất, đồng thời để duy trì ngữ nghĩa chính xác.
Bộ nhớ trùng lặp cũng cung cấp cho bạn các máy tính nối mạng được lập trình với MPI và ilk của nó hoặc chỉ là các kiến trúc không phải Von Neumann lạ như bộ xử lý mạng trên chip (bộ xử lý đám mây, Transputer, Tilera). Các mô hình bộ nhớ như UMA hoặc NUMA cố gắng duy trì ảo giác của bộ nhớ dùng chung và có thể tồn tại ở cấp độ phần mềm hoặc phần cứng. Bộ KH & ĐT duy trì tính song song ở cấp độ chương trình và chỉ giao tiếp qua tin nhắn. Truyền tin nhắn cũng được sử dụng ở cấp độ phần cứng để liên lạc và đồng thời (Transputer).
Loại thứ hai là các mô hình dòng dữ liệu . Chúng được thiết kế vào buổi bình minh của thời đại máy tính như một cách để viết ra và thực hiện các tính toán song song, tránh thiết kế Von Neumann. Những thứ này đã không còn thịnh hành (đối với điện toán song song) vào thập niên 80 sau khi hiệu suất tuần tự tăng theo cấp số nhân. Tuy nhiên, rất nhiều hệ thống lập trình song song như Google MapReduce, Bộ sưu tập đồng thời của Dryad của Intel hay trên thực tế là các mô hình tính toán dataflow. Tại một số điểm, chúng biểu diễn các tính toán dưới dạng biểu đồ và sử dụng nó để hướng dẫn thực hiện.
Bằng cách chỉ định các phần của các mô hình, bạn sẽ có được các danh mục và ngữ nghĩa khác nhau cho mô hình dataflow. Bạn giới hạn hình dạng của biểu đồ là gì: DAG (CnC, Dryad), cây (mapreduce), digraph? Có ngữ nghĩa đồng bộ hóa nghiêm ngặt ( Luster, lập trình phản ứng]? Bạn không cho phép đệ quy để có thể có một lịch biểu tĩnh (StreaMIT) hoặc bạn có cung cấp sức mạnh biểu cảm hơn bằng cách có một lịch trình động (Intel CnC) không? Có giới hạn về số lượng các cạnh đến hoặc đi? Các ngữ nghĩa bắn có cho phép bắn nút khi một tập hợp con của dữ liệu đến có sẵn không? Là các luồng dữ liệu cạnh (xử lý luồng) hoặc mã thông báo dữ liệu đơn (gán đơn tĩnh / động). Đối với công việc liên quan, bạn có thể bắt đầu bằng cách xem công việc nghiên cứu dataflow của những người như Arvind, K. Kavi, j. Sharp, W. Ackerman, R. Jagannathan, v.v.
Chỉnh sửa: Vì lợi ích của sự hoàn chỉnh. Tôi nên chỉ ra rằng cũng có các mô hình điều hướng giảm và điều khiển mô hình song song . Đối với các chiến lược giảm, bạn có thể giảm đồ thị và giảm chuỗi. Haskell về cơ bản sử dụng giảm đồ thị, đây là một chiến lược rất hiệu quả trên hệ thống bộ nhớ chia sẻ tuần tự. Sao chép chuỗi giảm hoạt động, nhưng có thuộc tính bộ nhớ riêng giúp nó phù hợp hơn với việc được song song hóa. Các mô hình hướng mẫu là các ngôn ngữ logic song song, chẳng hạn như prolog đồng thời. Mô hình Actor cũng là một mô hình theo định hướng mẫu, nhưng có đặc điểm bộ nhớ riêng.
Tái bút Tôi sử dụng rộng rãi thuật ngữ 'mô hình', bao trùm các máy trừu tượng cho cả mục đích chính thức và lập trình.