Pertanyaan Cara mempercepat kompilasi aplikasi Ubuntu (membuat, cmake, gcc)


Saya menyusun beberapa program di sini dan saya memiliki 4 core. Apakah ada cara untuk memberi tahu make, cmake atau gcc untuk mengkompilasi menggunakan semua core atau sesuatu yang mempengaruhi?


11
2018-02-23 16:53


asal




Jawaban:


Jika paket mendukungnya Anda dapat menggunakan -j untuk mengizinkan pekerjaan paralel berjalan, misalnya:

make -j8

Detail lebih lanjut tentang bendera ini dapat ditemukan dalam pertanyaan Stackoverflow Mengapa make-j berkinerja lebih baik ketika dilewatkan lebih besar dari jumlah core yang tersedia?.

Kompilasi terdistribusi

Jika Anda memiliki banyak mesin, berikan distcc a go. Di mesin yang terlibat, sudo apt-get install distcc. Dengan asumsi bahwa mesin build Anda adalah 192.168.1.1:

  • pada mesin pembantu, jalankan:

    sudo distccd --log-file=/tmp/distccd.log --daemon -a 192.168.1.1
    
  • Di mesin build, sebelum menjalankan configure atau cmake Anda harus menentukan host yang ingin Anda gunakan untuk proses pembuatan. Secara opsional, tentukan jumlah pekerjaan serentak setelah tebasan (default ke 4):

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

    Buat compiler menggunakan distcc:

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

    Sekarang configure atau cmake aplikasi dan buat dengan:

    make -j$(distcc -j)
    

    Perhatikan bahwa jika Anda telah menempatkan /usr/lib/distcc dua kali dalam PATH Anda, itu akan gagal. Pastikan untuk mengatur /usr/lib/distcc hanya sekali di Anda PATH.

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


13
2018-02-23 17:11



OMG bahwa J itu bagus. Saya pergi dari 15 menit menjadi kurang dari 1. terima kasih L. - Luis Alvarado♦
Bisa lebih cepat dengan distcc, kompilasi PHP dilakukan dalam 2 menit, kernel selesai dalam 3 menit (tiga mesin i5) - Lekensteyn
Akan mencoba dengan distcc ketika saya mulai bekerja. Apakah 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 mengalihkan pengguna, gunakan distccd --user nobody. Jika tidak, itu akan berjalan di bawah pengguna yang mengeksekusinya. - Lekensteyn