Kiến trúc CPU có thiên vị đối với thời gian chạy thủ tục không?


12

Có bất kỳ thay đổi nào có thể được thực hiện đối với CPU để làm cho chúng hoạt động tốt hơn cho các thời gian chạy đồng thời như Rust không? Chẳng hạn, có những thay đổi đối với việc triển khai dự đoán nhánh hoặc kích thước bộ đệm có thể giúp thời gian chạy đồng thời không?

Tôi có ấn tượng rằng các thiết kế CPU hiện tại có thể được tối ưu hóa nhiều hơn cho các thời gian chạy thủ tục như C. Nếu chúng ta thay vào đó sẽ tối ưu hóa cho các thời gian chạy đồng thời, CPU sẽ trông khác nhau như thế nào?

Đối với isntance, dự đoán chi nhánh được thực hiện dựa trên những khái quát được rút ra trong các tài liệu nghiên cứu phân tích các quy trình thủ tục. Tôi tự hỏi nếu sự trừu tượng hóa đồng thời sẽ thêm một tập hợp làm việc đáng kể vào thời gian chạy có ảnh hưởng xấu đến các thuật toán dự đoán nhánh hiện có. Ví dụ, dự đoán trong một vòng lặp for là một điều, nhưng khi mục tiêu của nhánh luôn là một phần bộ nhớ mới (đồ họa, văn bản, v.v.), nó sẽ luôn bị mất bộ nhớ cache và sẽ không bao giờ có nhánh lịch sử cho nó-- bởi vì chưa chạm vào nó.

Đây có lẽ là một câu hỏi ngớ ngẩn vì nội dung, mặc dù có thể luôn nằm trong RAM, sẽ được phân nhánh ở mức độ nhỏ hơn mức độ sẽ được sử dụng (một khi nó đã được tải vào bộ đệm) ... nhưng vẫn còn đó phải là một ranh giới tạm thời có thể quan sát được đối với các bối cảnh được lưu trữ trong bộ đệm và các yếu tố dự báo nhánh trong thời gian chạy thủ tục, đó sẽ được biểu hiện như một ranh giới trừu tượng trong một môi trường song song hơn. Vì vậy, tôi tự hỏi ... Những ranh giới này đã được quan sát? Có bất kỳ tài liệu nghiên cứu đã phân tích này?

Các kiến ​​trúc CPU có thiên về mã thủ tục so với mã đồng thời; hoặc các CPU hiện đại có đủ mục đích chung mà một ngôn ngữ đồng thời cao không bị ảnh hưởng?


2
Bạn đã xem văn học xung quanh kiến ​​trúc Itanium (IA-64) chưa? Nó được thiết kế với những giấc mơ lớn về siêu song song, nhưng sau đó mọi người đã thất bại trong việc tạo ra các trình biên dịch sẽ tận dụng các tính năng của CPU và sau đó, phần mềm không hoạt động tốt như vậy.
Gilles 'SO- ngừng trở nên xấu xa'

@Gilles có. Mặc dù là một câu hỏi khác, nhưng đó thực sự là một quan sát thú vị-- có lẽ sự song song được đưa vào Itanium sẽ phù hợp hơn với các ngôn ngữ đồng thời hiện đại?
paIncreas

@Gilles: Và tương tự, kiến ​​trúc Mill mới dường như đã được xây dựng với sự chuyển đổi song song và chi phí thấp. Ví dụ: bằng cách sử dụng một không gian địa chỉ ảo duy nhất cho tất cả các "quy trình", nó sẽ đẩy lùi TLB giữa mức bộ nhớ cache cuối cùng và bộ điều khiển thiết bị (xem slide 49 của millcomputing.com/docs/memory ).
Matthieu M.

1
@pedAntic Rust cần một thời gian chạy là một quan niệm sai lầm dễ thực hiện: chat.stackoverflow.com/transcript/message/24171983#24171983 . Câu hỏi của bạn dường như ủng hộ quan niệm sai lầm này không phải là một điều tốt cho Rust.
ArtemGr

1
@pedAntic Bạn thấy đấy, Rust thời gian chạy đồng thời (cho luồng màu xanh lá cây), nhưng nó không còn nữa. Hiện tại, Rust phần lớn ở cùng một giải đấu với C liên quan đến hồ sơ hiệu suất tương tranh. Sự khác biệt duy nhất từ ​​C là phân tích tĩnh trong Rust làm cho sự tương tranh hầu như an toàn.
ArtemGr

Câu trả lời:


1

Có lẽ nhiều trường hợp các kiến ​​trúc máy tính hiện đại được thiết kế với mục tiêu cải thiện chất lượng mã được tạo bởi các trình biên dịch so với ngân sách chi phí trong khu vực chết và năng lượng sử dụng. Các thư viện thời gian chạy chỉ là một phiên bản cụ thể của mã được biên dịch cần được thực thi một cách hiệu quả.

Trong một thời gian rất dài, ngôn ngữ đích cho hầu hết các kiến ​​trúc là ngôn ngữ "C". Điều này phản ánh nhu cầu khiêm tốn mà ngôn ngữ tạo ra trên phần cứng của nó và thực tế là nó đã trở thành ngôn ngữ lập trình hệ thống gần như phổ biến (Xin lỗi Rust và Go, bạn còn một chặng đường dài để đánh bại C).

Hậu quả của điều này dường như là các ngôn ngữ mới thường được định nghĩa theo ngữ nghĩa tương đương C của chúng để chúng sẽ tránh cần các cơ sở xử lý có khả năng vắng mặt trên các máy tính hiện tại.

Phần thưởng cho bộ xử lý phù hợp với trình biên dịch hiện đại là mã từ các trình biên dịch đó chạy tốt và bộ xử lý ít nhất có cơ hội cạnh tranh. Chi phí thất bại ở đây làm hỏng bộ xử lý trước khi nó có thể bắt đầu. Chỉ có hai ví dụ trong phủ định bao gồm iAPX-432 và Itanium, cả Intel. Cả hai đều có mối quan hệ rất kém với các trình biên dịch của họ (tương ứng Ada và C) với sự thất bại của các sản phẩm biến thành một trò chơi đổ lỗi giữa silicon và phần mềm.


0

Không nghi ngờ gì, vâng.

Cụ thể, mô hình truyền thông ngụ ý của C99 là bộ nhớ dùng chung. Các ngôn ngữ đồng thời nâng cao hơn có các mô hình giao tiếp phong phú hơn, chẳng hạn như các kênh truyền thông điệp (như trong Rust).

Các kiến ​​trúc CPU hiện đại có hỗ trợ phần cứng rõ ràng cho bộ nhớ chia sẻ. Cụ thể, các giao thức kết hợp bộ đệm như MESI được triển khai trong các cổng và dây thực tế. Không có hỗ trợ thực sự cho việc truyền thông điệp giữa các tiến trình, mặc dù ý tưởng truyền tin nhắn không xa lạ với CPU. Các bus PCI-e hiện đại thậm chí còn mô phỏng bộ nhớ dùng chung bằng cách truyền tin nhắn, trong khi các quá trình CPU phải giả lập truyền tin nhắn bằng bộ nhớ dùng chung!

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.