Cara mempercepat kompilasi aplikasi Ubuntu (make, cmake, gcc)

11

Saya mengkompilasi beberapa program di sini dan saya memiliki 4 core. Apakah ada cara untuk mengatakan make, cmakeatau gccmengkompilasi menggunakan semua core atau sesuatu untuk mempengaruhi itu?

Luis Alvarado
sumber

Jawaban:

13

Jika suatu paket mendukungnya, Anda dapat menggunakan -jbendera untuk memungkinkan pekerjaan paralel berjalan, misalnya:

make -j8

Detail lebih lanjut tentang flag ini dapat ditemukan di pertanyaan Stackoverflow. Mengapa make-j berkinerja lebih baik ketika diberikan angka yang lebih besar dari jumlah core yang tersedia? .

Kompilasi terdistribusi

Jika Anda memiliki banyak mesin, cobalah distcc . Pada mesin yang terlibat sudo apt-get install distcc,. Dengan asumsi bahwa mesin build Anda adalah 192.168.1.1:

  • pada mesin helper, jalankan:

    sudo distccd --log-file=/tmp/distccd.log --daemon -a 192.168.1.1
    
  • Di mesin build, sebelum menjalankan configureatau cmakeAnda harus menentukan host yang ingin Anda gunakan untuk proses build. Secara opsional, tentukan jumlah pekerjaan simultan setelah garis miring (default ke 4):

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

    Jadikan kompiler menggunakan distcc:

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

    Sekarang configureatau cmakeaplikasi dan bangun dengan:

    make -j$(distcc -j)
    

    Perhatikan bahwa jika Anda memasukkan /usr/lib/distccdua kali dalam PATH Anda, itu akan gagal. Pastikan untuk mengatur /usr/lib/distcchanya sekali di PATH.

Untuk lebih jelasnya, lihat halaman manual untuk distcc (1) dan distccd (1) .

Lekensteyn
sumber
OMG bahwa J itu bagus. Saya pergi dari 15 menit menjadi kurang dari 1. terima kasih L.
Luis Alvarado
Itu bisa lebih cepat dengan distcc, kompilasi PHP dilakukan dalam 2 menit, kernel dilakukan dalam 3 menit (tiga mesin i5)
Lekensteyn
Akan mencoba dengan distcc ketika saya mulai bekerja. Sedang menanyakan pertanyaan serupa tentang ini kemarin. Mungkin Anda bisa membantu di sini: askubuntu.com/questions/106810/…
Luis Alvarado
Menjalankan distccd sebagai root sepertinya rencana yang buruk. Saya tidak menggunakannya karena beberapa alasan tetapi ketika saya melakukannya saya tidak dapat menggunakan root karena saya tidak memiliki izin pada mesin-mesin itu.
ams
@ams Anda tidak perlu menjalankannya sebagai root. Jika Anda menjalankannya sebagai root dan ingin beralih pengguna, gunakan distccd --user nobody. Kalau tidak, itu akan berjalan di bawah pengguna yang menjalankannya.
Lekensteyn