C ++ 11 giới thiệu ngữ nghĩa di chuyển, ví dụ, có thể cải thiện hiệu suất mã trong các tình huống trong đó C ++ 03 sẽ cần thực hiện xây dựng bản sao hoặc gán bản sao. Bài viết này báo cáo rằng mã sau trải nghiệm tăng tốc 5x khi được biên dịch với C + 11:
vector<vector<int> > V;
for(int k = 0; k < 100000; ++k) {
vector<int> x(1000);
V.push_back(x);
}
Tác động của ngữ nghĩa di chuyển C ++ 11 trong bối cảnh điện toán khoa học là gì?
Tôi quan tâm đến câu hỏi này nói chung nhưng cụ thể hơn, tôi cũng quan tâm đến ngữ nghĩa di chuyển cho các mã Phần tử hữu hạn được viết bằng các thư viện boost. Tôi đã thử nghiệm một số mã C ++ 03 của riêng mình bằng cách sử dụng phiên bản boost 1.47.0 (vì ghi chú phát hành tăng đề cập đến ngữ nghĩa di chuyển được giới thiệu trong 1.48.0) và tăng phiên bản 1.53.0, nhưng tôi không nhận thấy nhiều cải thiện. Tôi đoán bất kỳ khoản tiết kiệm nào từ việc không phải thực hiện xây dựng bản sao cho boost::numeric::ublas::vector
/ matrix
và boost::function
không đáng chú ý vì việc giải các ma trận hệ thống tạo thành phần lớn khối lượng công việc.
Chỉnh sửa: Trên thực tế, có vẻ như ngữ nghĩa di chuyển chỉ được triển khai cho boost::function
(xem ghi chú phát hành phiên bản 1.52.0 ). Không có đề cập đến ngữ nghĩa di chuyển trong boost::numeric
, tôi đã lấy các nguồn để đảm bảo và dường như không có tài liệu tham khảo giá trị.