cuốn sách gpt4 ai đã làm

Quyền truy cập nguyên tử vào các vị trí bộ nhớ phi nguyên tử trong C++ 11 và OpenMP?

In lại Tác giả: Taklimakan Thời gian cập nhật: 2023-11-02 23:43:01 25 4
mua khóa gpt4 Nike

So với C++ 11, OpenMP xử lý tính nguyên tử từ góc độ hoạt động bộ nhớ hơn là các biến. Ví dụ: điều này cho phép sử dụng đọc/ghi nguyên tử tại thời điểm biên dịch trên các số nguyên được lưu trữ trong vectơ có kích thước không xác định:

std::vector v;

// truy cập phi nguyên tử (ví dụ: trong vùng tuần tự):
v.resize(n);
...
v.push_back(i);
...

// truy cập nguyên tử trong vùng đa luồng:
#pragma omp viết nguyên tử // seq_cst
v[k] = ...;
#pragma omp đọc nguyên tử // seq_cst
... = v[k];

Trong C++ 11, điều này là không thể. Chúng ta có thể truy cập các biến nguyên tử dưới dạng biến phi nguyên tử bằng cách nới lỏng mô hình bộ nhớ, nhưng chúng ta không thể thay đổi kích thước vectơ phần tử nguyên tử.

Tôi hiểu có lý do tại sao C++ không cho phép truy cập vào các biến phi nguyên tử thông qua các hoạt động bộ nhớ nguyên tử. Nhưng tôi tự hỏi tại sao những lý do này cũng không áp dụng cho OpenMP.

Ví dụ, trong N4013 trong, người ta nói"Không có cách nào hợp lý để áp dụng các hoạt động nguyên tử hoàn toàn có thể di chuyển được vào dữ liệu không được khai báo là nguyên tử."Làm cách nào OpenMP có thể đảm bảo tính di động này nhưng C++ thì không?

câu trả lời hay nhất

Theo như tôi hiểu về các tiêu chuẩn tương ứng, OpenMP có nhiều hạn chế hơn trong việc sử dụng so với C++ 11, điều này giúp nó có thể di động mà không cần sử dụng các loại đặc biệt. Ví dụ: OpenMP 4.5 cho biết:

Nếu vị trí lưu trữ được chỉ định bởi x không được căn chỉnh theo kích thước (nghĩa là nếu căn chỉnh byte của x không phải là bội số của kích thước của x), thì hành vi của vùng nguyên tử sẽ được xác định khi triển khai.

Mặt khác, nếu C++11 sử dụng std::atomic , thì trình biên dịch sẽ đảm bảo căn chỉnh phù hợp. Trong cả hai trường hợp, việc căn chỉnh là bắt buộc, nhưng OpenMP và C++ 11 khác nhau về người chịu trách nhiệm đảm bảo việc căn chỉnh được thực hiện.

Nói chung, có những khác biệt về mặt triết học giữa OpenMP và C++, nhưng rất khó để liệt kê tất cả. Người C++ đang xem xét tính di động cho mọi thứ, trong khi OpenMP đang nhắm mục tiêu HPC.

Giới thiệu về c++ - Quyền truy cập nguyên tử vào các vị trí bộ nhớ phi nguyên tử trong C++11 và OpenMP? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/35680633/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress