Những đại diện trung gian nào có thể được sử dụng để lý giải về sự tương tranh?


12

Tôi đang cố gắng để hiểu rõ hơn những gì sẽ được yêu cầu cho một trình biên dịch để có thể đưa ra các lựa chọn thông minh liên quan đến đồng thời thay mặt cho lập trình viên. Tôi nhận ra rằng có nhiều khía cạnh khó khăn của vấn đề này chẳng hạn:

  • Đảm bảo rằng không có điều kiện cuộc đua
  • Đảm bảo rằng mã được chạy đồng thời sẽ không có tác dụng phụ ảnh hưởng đến ý nghĩa ngữ nghĩa của mã

  • Quyết định xem liệu chi phí từ việc kéo sợi lên có đáng hay không với mức độ song song có sẵn trong mã

Hiểu biết của tôi là hai biểu diễn trung gian chính được sử dụng trong các trình biên dịch hiện đại là gán đơn tĩnh cho các ngôn ngữ hướng đối tượng và hướng đối tượng và kiểu tiếp tục truyền cho các ngôn ngữ chức năng. Lý do về bất kỳ vấn đề nào được liệt kê ở trên có vẻ khó khăn khi sử dụng các hình thức trung gian này. Ngay cả các ngôn ngữ trong lý thuyết cũng có cơ hội song song tự động tốt nhất (các ngôn ngữ chức năng thuần túy như Haskell với sự đảm bảo không có tác dụng phụ) đã đạt được tiến bộ hạn chế trên mặt trận này.

Vì vậy, câu hỏi của tôi thực sự là những đại diện trung gian nào đã được sử dụng để thử và giải quyết vấn đề này? Có những đại diện khác đã được sử dụng trong nghiên cứu học thuật mà tôi không biết rằng nó phù hợp hơn với nhiệm vụ này? Đây có phải là vấn đề mà về cơ bản phải được giải quyết bởi giao diện người biên dịch bằng cách thao tác cây cú pháp trừu tượng trước khi quá trình biên dịch đạt đến một biểu diễn trung gian?


Nếu bạn viết mã theo cách có chức năng, bạn sẽ không phải lo lắng về điều kiện chủng tộc hoặc tác dụng phụ.
Robert Harvey

4
Điều này không hoàn toàn trả lời câu hỏi của bạn, nhưng bạn có thể quan tâm đến Tính toán quy trình có thể được sử dụng để lý giải về mã đồng thời. Ví dụ nổi tiếng nhất có thể là phép tính Pi . Tuy nhiên, song song tự động vẫn là một vấn đề phần lớn chưa được giải quyết và giải quyết tốt nhất bằng cách thiết kế các ngôn ngữ cụ thể để cung cấp cho trình biên dịch một số đảm bảo nhất định hoặc bằng cách sử dụng các chú thích đặc biệt.
amon

4
Bài viết đóng vai trò nền tảng cho Bộ sưu tập đồng thời Intel (CnC) liệt kê tám mẫu đồng thời cơ bản, chẳng hạn như Nhà sản xuất-Người tiêu dùng. Các mẫu đồng thời lần lượt phụ thuộc vào một số thuộc tính, chẳng hạn như tính bất biến và không có tác dụng phụ. (Tôi sẽ đánh giá cao nếu ai đó có thể tóm tắt bài báo đó và đăng dưới dạng câu trả lời ở đây.)
rwong

Một trong những công cụ lý thuyết được gọi là "Bài tập đơn động (DSA)", được xây dựng dựa trên SSA.
rwong

@rwong: bạn có thể cung cấp một tài liệu tham khảo rõ ràng?
Ira Baxter

Câu trả lời:


5

Người ta sẽ cho rằng mô hình hóa đồng thời rõ ràng trong biểu diễn trung gian (IR) là một yêu cầu cần thiết. Vì vậy, một câu trả lời sẽ là, "bất kỳ IR nào được sử dụng cho các chương trình tuần tự có thêm một số hoạt động tương tranh", ví dụ: "fork và tham gia", "song song x y". Thêm những điều này làm cho nó có thể suy luận về một số loại đồng thời, nhưng không nhất thiết phải dễ dàng. Cũng không rõ ràng làm thế nào để đảm bảo một số thuộc tính nhất định (dữ liệu chạy đua dữ liệu) mà không đi đến một đại diện đầy đủ chức năng (điều này khiến cho việc mô hình hóa song song trở nên hữu ích).

Petri Nets có thể cho phép (CPN) là một lựa chọn tốt để đại diện cho các chương trình có tính đồng thời. (Mã thông báo trong CPN được "tô màu" [có một loại] và có thể mang các giá trị; "chuyển đổi" sang trạng thái có thể thực hiện số học tùy ý trên các mã thông báo đến để tạo ra mã thông báo có màu khác với giá trị được tính toán ở "vị trí"). Nếu bạn nghĩ về các vị trí được tính toán kết quả và chuyển đổi dưới dạng toán tử mô hình hóa (bao gồm một vị trí đặc biệt để truy cập bộ nhớ), thì điều này sẽ cung cấp cho bạn số tiền cho biểu đồ luồng dữ liệu để lập mô hình chương trình. Bạn có thể dễ dàng sử dụng điều này để đưa ra một diễn giải chính thức cho các biểu diễn trình biên dịch cổ điển như bộ ba [toán tử, input1, input2, output].

Có rất nhiều công cụ để phân tích các biểu đồ CPN như vậy, bao gồm các thuộc tính điện toán như bế tắc, giới hạn số lượng mã thông báo ở các vị trí, v.v.

Những gì các đại diện này không làm rõ ràng, là làm cho nó dễ dàng lý luận về nơi mà người ta có thể song song hóa một ứng dụng. Một cách tầm thường, hai phép tính con có thể song song nếu chúng có tác dụng phụ không có toán hạng chung (đó là lý do tại sao một số người yêu thích các chương trình / biểu diễn chức năng). Nếu biểu diễn chương trình của bạn mô hình bộ nhớ dùng chung, bạn có thể mô hình hóa nó thành đơn nguyên và nhận được các rắc rối thông thường về lý do về các tương tác trên bộ nhớ dùng chung, bao gồm cả địa chỉ bí danh, v.v. Một cách để tránh điều này là coi bộ nhớ là các khối riêng biệt với trạng thái chương trình lớn hơn là một số tập hợp (giống như cây) trong số này; bạn có thể tranh cãi vượt qua những khối này trong đại diện trung gian của bạn. Không có tương tác giữa hai tính toán song song nếu chúng không chia sẻ các phần (ví dụ: phần phụ bộ nhớ).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.