Tại cuộc họp Jacksonville, đề nghị P0024r2 áp dụng hiệu quả các thông số kỹ thuật từ Parallelism TS đã được chấp nhận vào C++17 (draft). Đề xuất này thêm quá tải cho nhiều thuật toán tham số chính sách thực thi đối số để cho biết loại song song nào cần được xem xét. Có ba chính sách thực hiện đã được xác định trong <execution>
(20.19.2 [thực hiện]):Những hạn chế nào đối với người dùng sử dụng các thuật toán song song của STL?
std::execution::sequenced_policy
(20.19.4 [execpol.seq]) với một đối tượngconstexpr
std::execution::seq
(20.19.7 [parallel.execpol.objects ]) để chỉ ra việc thực thi tuần tự tương tự như gọi các thuật toán mà không có chính sách thực thi.std::execution::parallel_policy
(20.19.5 [execpol.par]) với đối tượngconstexpr
std::execution::par
(20.19.7 [parallel.execpol.objects]) để chỉ ra việc thực hiện các thuật toán có khả năng sử dụng nhiều chuỗi.std::execution::parallel_unsequenced_policy
(20.19.6 [execpol.vec]) với đối tượngconstexpr
std::execution::par_unseq
(20.19.7 [parallel.execpol.objects]) để chỉ ra việc thực hiện các thuật toán có khả năng sử dụng thực thi vectơ và/hoặc nhiều luồng.
Thuật toán STL thường lấy các đối tượng do người dùng xác định (trình lặp, đối tượng hàm) làm đối số. Những ràng buộc nào đối với các đối tượng do người dùng định nghĩa để làm cho chúng có thể sử dụng được với các thuật toán song song sử dụng các chính sách thực thi chuẩn?
Ví dụ: khi sử dụng một thuật toán như trong ví dụ bên dưới, hàm ý cho FwdIt
và Predicate
là gì?
template <typename FwdIt, typename Predicate>
FwdIt call_remove_if(FwdIt begin, FwdIt end, Predicate predicate) {
return std::remove_if(std::execution::par, begin, end, predicate);
}
đọc http://en.cppreference.com/w/cpp/algorithm/execution_policy_tag_t Tôi hiểu rằng đó là trách nhiệm của người dùng ... điều đó có nghĩa là ... vì vậy tôi cũng đang chờ phản hồi – PiotrNycz