เมื่อต้องการคอมไพล์แพคเกจซอฟต์แวร์บนเวิร์กสเตชันที่มีคอร์ CPU หลายตัว (เช่น 12), ขั้นตอนการกำหนดค่ามักใช้เวลานานกว่าสเตจรวบรวมจริงเนื่องจาก./configure
ทำการทดสอบทีละตัวในขณะที่make -j
รันgcc
พร้อมกับคำสั่งอื่น ๆ แบบขนาน
ฉันรู้สึกว่าเป็นการสิ้นเปลืองทรัพยากรอย่างมากที่มี 11 คอร์ที่เหลือนั่งทำงานโดยส่วนใหญ่รอช้า./configure
ให้เสร็จสมบูรณ์ เหตุใดจึงต้องทำการทดสอบตามลำดับ การทดสอบแต่ละครั้งขึ้นอยู่กับแต่ละอื่น ๆ หรือไม่? ฉันเข้าใจผิด แต่ดูเหมือนว่าพวกเขาส่วนใหญ่มีความเป็นอิสระ
ที่สำคัญกว่านั้นมีวิธีใดบ้างในการเร่งความเร็ว./configure
?
แก้ไข: เพื่อแสดงสถานการณ์นี่เป็นตัวอย่างของGNU Coreutils
cd /dev/shm
rm -rf coreutils-8.9
tar -xzf coreutils-8.9.tar.gz
cd coreutils-8.9
time ./configure
time make -j24
ผล:
# For `time ./configure`
real 4m39.662s
user 0m26.670s
sys 4m30.495s
# For `time make -j24`
real 0m42.085s
user 2m35.113s
sys 6m15.050s
ด้วยcoreutils-8.9 , ./configure
ใช้เวลา 6 make
ครั้งนานกว่า แม้ว่าจะ./configure
ใช้เวลา CPU น้อยลง (ดูที่ "ผู้ใช้" และ "sys" ครั้ง) แต่ใช้เวลานานกว่า ("จริง") เพราะไม่ได้ขนานกัน ฉันทำการทดสอบซ้ำสองสามครั้ง (ไฟล์ที่เกี่ยวข้องอาจยังอยู่ในแคชหน่วยความจำ) และเวลานั้นอยู่ภายใน 10%