ผลกระทบของการย้ายความหมาย C ++ 11 ในบริบทของการคำนวณทางวิทยาศาสตร์คืออะไร?


10

C ++ 11 แนะนำซีแมนทิกส์การย้ายที่สามารถยกตัวอย่างเช่นปรับปรุงประสิทธิภาพของรหัสในสถานการณ์ที่ C ++ 03 จะต้องดำเนินการสร้างสำเนาหรือคัดลอกการกำหนด นี้บทความรายงานว่ารหัสต่อไปนี้ประสบการณ์ความเร็ว 5x ขึ้นเมื่อรวบรวมกับ C + 11:

vector<vector<int> > V;
for(int k = 0; k < 100000; ++k) {
    vector<int> x(1000);
    V.push_back(x);
}

ผลกระทบของการย้ายความหมาย C ++ 11 ในบริบทของการคำนวณทางวิทยาศาสตร์คืออะไร?

ฉันสนใจในคำถามนี้เป็นเรื่องทั่วไป แต่โดยเฉพาะฉันยังสนใจที่จะย้ายซีแมนทิกส์สำหรับรหัสไฟไนต์อิลิเมนต์ที่เขียนโดยใช้ห้องสมุดเพิ่ม ฉันทดสอบโค้ด C ++ 03 ของตัวเองบางตัวโดยใช้บูสต์รุ่น 1.47.0 (ตั้งแต่รีลีสโน้ตที่กล่าวถึงการย้ายความหมายมีการแนะนำใน 1.48.0) และบูสต์รุ่น 1.53.0 แต่ฉันไม่ได้สังเกตเห็นการปรับปรุงมากนัก ฉันเดาว่าเงินออมใด ๆ ที่ไม่ต้องทำสำเนาสำหรับboost::numeric::ublas::vector/ matrixและboost::functionไม่สามารถสังเกตเห็นได้เนื่องจากการแก้เมทริกซ์ของระบบถือเป็นภาระงานจำนวนมาก

แก้ไข:จริง ๆ แล้วดูเหมือนว่าซีแมนทิกส์ย้ายมีการใช้งานเฉพาะสำหรับboost::function(ดูบันทึกย่อประจำรุ่น 1.52.0 ) ไม่มีการกล่าวถึงความหมายการย้ายในboost::numericฉันทำซ้ำแหล่งที่มาเพื่อให้แน่ใจและดูเหมือนจะไม่มีการอ้างอิงค่า rvalue


1
เมื่อคุณจดบันทึกในส่วนสุดท้ายของคำถามของคุณยกเว้นว่าคุณได้ทำโปรไฟล์ของคุณและเห็นการคัดลอกเกิดขึ้นมากมายคุณไม่สามารถปรับปรุงประสิทธิภาพของคุณได้อย่างมีนัยสำคัญโดยใช้ซีแมนทิกส์
Bill Barth

คำตอบ:


10

ฉันคิดว่าในทางปฏิบัติผลกระทบมี จำกัด และจะถูก จำกัด

เหตุผลที่ทำให้มันมีจำกัด ในขณะนี้คือแพคเกจไฟไนต์อิลิเมนต์ขนาดใหญ่ระมัดระวังในการเขียนโค้ดที่พกพาได้ดังนั้นพวกเขาจึงยังไม่ใช้ภาษา C ++ 11 ในโครงสร้างของตัวเอง

แน่นอนว่าพวกเขาจะได้รับประโยชน์จากโค้ดอย่างที่คุณแสดงให้เห็นถึงแม้ว่าคุณจะไม่ต้องเปลี่ยนซอร์สโค้ดคุณก็ยังได้รับประโยชน์จากไลบรารีคอมไพเลอร์ที่ได้รับการปรับปรุงเช่น libstdc ++ สำหรับ GCC ที่กล่าวว่าผู้คนในการคำนวณทางวิทยาศาสตร์ค่อนข้างตระหนักดีถึงค่าใช้จ่ายในการคัดลอกและดังนั้นสำหรับวัตถุที่มันมีความสำคัญพวกเขาก็ไม่ได้คัดลอก - พวกเขาสร้างในสถานที่หรือทำสำเนาตื้น ๆ หรือใช้ร่วมกัน พอยน์เตอร์หรือเทคนิคอื่น ๆ มากมายที่มีเพื่อหลีกเลี่ยงค่าใช้จ่ายในการคัดลอก กล่าวอีกนัยหนึ่งสถานการณ์ที่ความหมายเชิงการเคลื่อนไหวถูกประดิษฐ์ขึ้นไม่ได้เกิดขึ้นบ่อยครั้งในรหัสทางวิทยาศาสตร์ "ของจริง"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.