วิธีเพิ่มความเร็วในการรวบรวมแอป Ubuntu (ทำ, cmake, gcc)


11

ฉันกำลังรวบรวมบางโปรแกรมที่นี่และฉันมี 4 คอร์ มีวิธีที่จะบอกmake, cmakeหรือgccการรวบรวมโดยใช้แกนทั้งหมดหรือบางสิ่งบางอย่างที่ส่งผลกระทบ?

คำตอบ:


13

หากแพ็คเกจรองรับคุณสามารถใช้-jแฟล็กเพื่ออนุญาตให้งานแบบขนานรันเช่น:

make -j8

รายละเอียดเพิ่มเติมเกี่ยวกับการตั้งค่าสถานะนี้สามารถพบได้ในคำถาม Stackoverflow เหตุใดจึงทำให้ -j ทำงานได้ดีขึ้นเมื่อมีการส่งผ่านจำนวนที่มากกว่าจำนวนแกนที่มีอยู่ .

การรวบรวมแบบกระจาย

หากคุณมีหลายเครื่องให้ลองไปที่distcc บนเครื่องที่เกี่ยวข้อง, sudo apt-get install distcc. สมมติว่าเครื่องสร้างของคุณคือ 192.168.1.1:

  • บนเครื่องผู้ช่วยให้เรียกใช้:

    sudo distccd --log-file=/tmp/distccd.log --daemon -a 192.168.1.1
    
  • บนเครื่องสร้างก่อนเรียกใช้configureหรือcmakeคุณต้องระบุโฮสต์ที่คุณต้องการใช้สำหรับกระบวนการสร้าง เป็นทางเลือกระบุจำนวนของงานพร้อมกันหลังจากสแลช (ค่าดีฟอลต์คือ 4):

    export DISTCC_HOSTS='localhost/4 192.168.1.2/8 192.168.1.3/8'
    

    ทำให้คอมไพเลอร์ใช้ distcc:

    export PATH="/usr/lib/distcc:$PATH"
    

    ตอนนี้configureหรือcmakeแอปพลิเคชันและสร้างด้วย:

    make -j$(distcc -j)
    

    โปรดทราบว่าถ้าคุณใส่/usr/lib/distccPATH สองครั้งมันจะล้มเหลว ให้แน่ใจว่าการตั้งเพียงครั้งเดียวในของคุณ/usr/lib/distccPATH

สำหรับรายละเอียดเพิ่มเติมโปรดดูที่หน้าคู่มือสำหรับdistcc (1)และdistccd (1)


OMG ที่ J นั้นดี ฉันไปจาก 15 นาทีถึงไม่ถึง 1 ขอบคุณ L.
Luis Alvarado

มันสามารถทำงานได้เร็วขึ้นด้วย distcc, การคอมไพล์ PHP เสร็จใน 2 นาที, เคอร์เนลทำได้ใน 3 นาที (สามเครื่อง i5)
Lekensteyn

จะลองกับ distcc เมื่อฉันไปทำงาน ถามคำถามที่คล้ายกันเมื่อวานนี้ บางทีคุณสามารถช่วยได้ที่นี่: askubuntu.com/questions/106810/…
Luis Alvarado

ใช้ distccd ขณะที่รูทดูเหมือนแผนไม่ดี ฉันไม่ได้ใช้ด้วยเหตุผลบางอย่าง แต่เมื่อฉันทำฉันไม่สามารถใช้รูทได้เพราะฉันไม่ได้รับอนุญาตให้ใช้กับเครื่องเหล่านั้น
ams

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