จะทำให้การทำงานของโปรแกรม Matlab เร็วขึ้นได้อย่างไร?


3

มีเทคนิคใดที่จะทำให้โค้ด MATLAB ทำงานเร็วขึ้นหรือไม่?

ฉันกำลังพูดถึงสิ่งต่าง ๆ ที่สามารถทำให้พีซีของฉันเร็วขึ้น (เช่นหยุด. exe หรือซอฟต์แวร์เพื่อปรับปรุงประสิทธิภาพพีซี) ฉันสังเกตเห็นว่าบางครั้งพีซีของฉันทำงานในเวลาเดียวกันสองครั้ง: ตัวอย่างเช่นเขาสามารถรันโปรแกรมใน 45 วินาทีและโปรแกรมเดียวกันอีกครั้งใน 10 นาที


นี่ไม่ใช่คำถามที่เกี่ยวข้องกับ MATLAB (แม้ว่าในโปรแกรมป้องกันไวรัสรุ่น R14 รุ่นก่อนหน้าบางรุ่นอาจทำให้ทำงานช้า) ในฐานะที่เป็นกฎง่ายๆ: การวิ่งเร็วคุณต้องทำอะไรให้น้อยลง

คำตอบ:


7

มันเป็น MATLAB ที่ทำงานช้าในคอมพิวเตอร์ของคุณหรือมากกว่าโปรแกรมที่คุณเขียนใน MATLAB?

MATLAB ใช้การจัดสรรหน่วยความจำแบบไดนามิกขนาดใหญ่และการจัดสรรใหม่ การปรับขนาด MAtrix หรืออาเรย์นั้นช้ามากและไม่สามารถกำหนดค่าได้ หากเมทริกซ์หรืออาร์เรย์โตขึ้นหน่วยความจำใหม่จะถูกจัดสรรและข้อมูลที่มีอยู่จะถูกคัดลอกไปยังหน่วยความจำใหม่ก่อนที่จะลบสำเนาเก่า คุณสามารถหลีกเลี่ยงหน่วยความจำนี้ได้โดยการจัดสรรอาร์เรย์ดังกล่าวล่วงหน้า: ตัวอย่างเช่นรหัสนี้:

x = 0;
for k = 2:1000
   x(k) = x(k-1) + 5;
end

สาเหตุที่xจะถูกปรับขนาดในการทำซ้ำแต่ละครั้งและจะทำงานช้ามาก โดยเปรียบเทียบรหัสต่อไปนี้:

x = zeros(1, 1000);
for k = 2:1000
   x(k) = x(k-1) + 5;
end

จัดสรรอาร์เรย์ล่วงหน้าเพื่อไม่ให้เกิดการปรับขนาดและจะทำงานได้เร็วขึ้นมาก

เว็บไซต์ MathWorks มีรายละเอียดทั้งหมดในหน้านี้และเทคนิคการปรับปรุงประสิทธิภาพอื่น ๆ หน้าครอบคลุมต่อไปนี้:

  • การจัดสรรล่วงหน้า
  • ใช้อาร์เรย์แบบกระจายสำหรับชุดข้อมูลขนาดใหญ่
  • เมื่อเป็นไปได้ให้แทนที่ด้วย parfor (Parallel for)
  • การ จำกัด ขนาดและความซับซ้อน
  • การกำหนดให้กับตัวแปร
  • การใช้ตัวดำเนินการทางตรรกะที่เหมาะสม
  • ฟังก์ชั่นในตัวมากไป
  • ฟังก์ชั่นโดยทั่วไปเร็วกว่าสคริปต์
  • โหลดและบันทึกเร็วกว่าฟังก์ชั่นไฟล์ I / O
  • Vectorizing ลูป
  • หลีกเลี่ยงกระบวนการพื้นหลังขนาดใหญ่

โปรดทราบว่าวิธีการแก้ปัญหาที่คุณแนะนำมีอยู่ในรายการ MathWorks คุณควรพิจารณาประเด็นอื่น ๆ เสียก่อนเว้นแต่คุณจะทำสิ่งที่เห็นได้ชัดว่าทรัพยากรหิวเช่นการใช้งานเครื่องเสมือนหรือเล่นวิดีโอความละเอียดสูงในเวลาเดียวกันกับการเรียกใช้ MATLAB การมองกระบวนการอื่น ๆ ที่กำลังทำงานอยู่นั้นอาจทำให้เหงื่อออกได้


ขอบคุณสำหรับคำตอบของคุณอย่างไรก็ตามฉันคิดว่าปัญหาไม่เกี่ยวข้องกับรหัส Matlab เนื่องจากโปรแกรมเดียวกันนั้นทำงานในสองครั้งที่แตกต่างกัน (45 วินาทีและ 10 นาที) บางทีฟอรัมนั้นสงวนไว้สำหรับการเขียนโปรแกรม แต่ปัญหาของฉันแสดงให้เห็นว่าการรันช้าของโปรแกรม Matlab อาจไม่ใช่สคริปต์ที่ไม่ดี ดังนั้นก่อนที่จะทำการจำลองเราต้องตรวจสอบก่อนว่าพีซีทำงานอย่างถูกต้องและเป็นสิ่งสำคัญสำหรับโปรแกรมเมอร์ว่าเนื้อหาของโปรแกรม

@bzak: ในกรณีนี้ฉันเพิ่มการลงคะแนนของฉันเพื่อปิดแม้ว่าพฤติกรรมที่ไม่ได้กำหนดไว้อย่างถูกต้องหมายถึงสิ่งที่คุณเห็น หากอัลกอริทึมในบางจุดจัดสรรหน่วยความจำเพียงพอที่จะต้องเปลี่ยนหน่วยความจำไปยังดิสก์การชะลอตัวจะมีความสำคัญ ใน MATLAB การเพิ่มหน่วยความจำมักจะเป็นเครื่องเร่งความเร็วที่มีประสิทธิภาพที่สุด

3

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


3

หากเวลาในการทำงานของรหัสของคุณมีความผันแปรสูงอาจเป็นไปได้ว่าคุณมีปัญหาที่บางครั้งในระดับหนึ่งคุณกำลังตรวจสอบหน่วยความจำเสมือน เมื่อ MATLAB ต้องใช้พื้นที่สว็อปสิ่งต่าง ๆ จะช้าลงอย่างมาก ท้ายที่สุดคุณกำลังใช้พื้นที่ดิสก์เพื่อแทนที่ความพร้อมของ RAM จริง นี่คือเหตุผลที่ดีที่สุดที่ฉันสามารถเสนอรหัสที่แตกต่างกันในเวลาตามลำดับความสำคัญในเวลาที่ใช้สำหรับการทำงานที่แตกต่างกัน

ใช้เครื่องมือตัวสร้างโปรไฟล์เพื่อกำหนดเวลาที่จะไป ดูอย่างระมัดระวังที่เส้นเหล่านั้น คุณกำลังสร้างอาร์เรย์ขนาดใหญ่แม้ว่าจะมีการดำเนินการชั่วคราวในบางฟังก์ชันที่คุณเรียกใช้หรือไม่

ตรวจสอบระบบของคุณ ดูว่าเกิดเหตุการณ์นี้ขึ้นหรือไม่หาก CPU กำลังทำงานโดยไม่ได้ใช้งานในขณะที่การเข้าถึงดิสก์นั้นหนัก

แน่นอนถ้าเป็นอย่างที่ฉันแนะนำนั่นก็แก้ปัญหาได้เช่นกัน

  • ทำให้อัลกอริทึมของคุณมีประสิทธิภาพมากขึ้นในแง่ของหน่วยความจำ นี่คือสิ่งที่ดีเสมอ

  • รับ RAM มากขึ้นถ้าคุณมี 2GB น้อยกว่า

  • ใช้ MATLAB รุ่น 64 บิตพร้อมกับรับ RAM เพิ่มขึ้น


+1 หากไม่มีปัญหา I / O นี่คือเหตุผลที่แน่นอนที่สุด เมื่อคุณเริ่มเพจจิ้งทุกอย่างช้าลงเพื่อรวบรวมข้อมูล
Jonas

2

ตามที่ฉันต้องมีคอขวดทรัพยากรระบบทั้งเช่นการเข้าถึงดิสก์หรือปัญหาการแลกเปลี่ยนหน่วยความจำ ลองดูว่ามีอะไรเกิดขึ้นในProcess Explorer ที่นั่นคุณอาจพบสิ่งที่เกิดขึ้นในระบบ


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