C ++ 11 memperkenalkan langkah semantik yang dapat, misalnya, meningkatkan kinerja kode dalam situasi di mana C ++ 03 perlu melakukan konstruksi salin atau tugas penyalinan. Artikel ini melaporkan bahwa kode berikut mengalami kecepatan 5x saat dikompilasi dengan C + 11:
vector<vector<int> > V;
for(int k = 0; k < 100000; ++k) {
vector<int> x(1000);
V.push_back(x);
}
Apa dampak dari semantik C ++ 11 dalam konteks komputasi ilmiah?
Saya tertarik dengan pertanyaan ini secara umum, tetapi lebih khusus lagi saya juga tertarik pada semantik bergerak untuk kode Elemen Hingga yang ditulis menggunakan boost library. Saya menguji beberapa kode C ++ 03 saya sendiri menggunakan boost versi 1.47.0 (karena catatan rilis menyebutkan langkah semantik diperkenalkan di 1.48.0) dan meningkatkan versi 1.53.0, tapi saya tidak melihat banyak perbaikan. Saya kira setiap penghematan dari tidak harus melakukan copy-konstruksi untuk boost::numeric::ublas::vector
/ matrix
dan boost::function
tidak terlihat karena memecahkan matriks sistem merupakan bagian terbesar dari beban kerja.
Sunting: Sebenarnya sepertinya memindahkan semantik hanya diterapkan untuk boost::function
(lihat versi 1.52.0 catatan rilis ). Tidak disebutkan tentang pindah semantik boost::numeric
, saya mengambil sumber untuk memastikan dan tampaknya tidak ada referensi nilai.