Cách tăng tốc độ biên dịch các ứng dụng Ubuntu (make, cmake, gcc)


11

Tôi đang biên dịch một số chương trình ở đây và tôi có 4 lõi. Có cách nào để nói make, cmakehoặc gccbiên dịch bằng cách sử dụng tất cả các lõi hoặc một cái gì đó để ảnh hưởng?

Câu trả lời:


13

Nếu một gói hỗ trợ, bạn có thể sử dụng -jcờ để cho phép các công việc song song chạy, ví dụ:

make -j8

Có thể tìm thấy nhiều chi tiết hơn về cờ này trong câu hỏi Stackoverflow Tại sao make -j hoạt động tốt hơn khi nó được truyền một số lớn hơn số lõi có sẵn? .

Biên soạn phân tán

Nếu bạn có nhiều máy, hãy cho distcc đi. Trên các máy liên quan sudo apt-get install distcc,. Giả sử rằng máy dựng của bạn là 192.168.1.1:

  • trên các máy trợ giúp, chạy:

    sudo distccd --log-file=/tmp/distccd.log --daemon -a 192.168.1.1
    
  • Trên máy xây dựng, trước khi chạy configurehoặc cmakebạn phải chỉ định máy chủ mà bạn muốn sử dụng cho quá trình xây dựng. Tùy chọn, chỉ định số lượng công việc đồng thời sau dấu gạch chéo (mặc định là 4):

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

    Làm cho trình biên dịch sử dụng distcc:

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

    Bây giờ configurehoặc cmakeứng dụng và xây dựng với:

    make -j$(distcc -j)
    

    Lưu ý rằng nếu bạn đã đặt /usr/lib/distcchai lần vào ĐƯỜNG của mình, nó sẽ thất bại. Hãy chắc chắn /usr/lib/distccchỉ đặt một lần trong của bạn PATH.

Để biết thêm chi tiết, xem các trang hướng dẫn cho distcc (1)distccd (1) .


OMG rằng J là tốt. Tôi đã đi từ 15 phút xuống dưới 1. cảm ơn L.
Luis Alvarado

Nó có thể nhanh hơn với distcc, quá trình biên dịch PHP được thực hiện trong 2 phút, kernel được thực hiện trong 3 phút (ba máy i5)
Lekensteyn

Sẽ cố gắng với distcc khi tôi đi làm. Đã hỏi một câu hỏi tương tự về điều này ngày hôm qua. Có lẽ bạn có thể giúp với nó ở đây: Askubfox.com/questions/106810/ mẹo
Luis Alvarado

Chạy distccd như root có vẻ như là một kế hoạch tồi. Tôi đã không sử dụng nó vì một vài lý do nhưng khi tôi không sử dụng root vì tôi không có quyền trên các máy đó.
AMS

@ams Bạn không cần chạy nó dưới quyền root. Nếu bạn chạy nó dưới quyền root và muốn chuyển đổi người dùng, hãy sử dụng distccd --user nobody. Nếu không, nó sẽ chạy dưới người dùng đã thực thi nó.
Lekensteyn
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.