GNU Buat

Menyusun Kod secara Selari menggunakan Make

Menyusun Kod secara Selari menggunakan Make

Sesiapa yang anda bertanya bagaimana membina perisian dengan betul akan hadir sebagai Make sebagai salah satu jawapan. Pada sistem GNU / Linux, GNU Make [1] adalah versi Open-Source dari Make asli yang dilancarkan lebih dari 40 tahun yang lalu - pada tahun 1976. Membuat karya dengan Makefile - fail teks biasa berstruktur dengan nama itu yang dapat digambarkan sebagai manual pembinaan untuk proses pembinaan perisian. Makefile mengandungi sejumlah label (disebut sasaran) dan arahan khusus yang perlu dilaksanakan untuk membangun setiap sasaran.

Secara ringkas, Make adalah alat binaan. Ia mengikuti resipi tugas dari Makefile. Ini membolehkan anda mengulangi langkah-langkah secara automatik daripada menaipnya di terminal (dan mungkin membuat kesilapan semasa menaip).

Penyenaraian 1 menunjukkan contoh Makefile dengan dua sasaran "e1" dan "e2" serta dua sasaran khas "semua" dan "bersih."Menjalankan" buat e1 "melaksanakan arahan untuk sasaran" e1 "dan membuat satu fail kosong. Menjalankan "make e2" melakukan hal yang sama untuk target "e2" dan membuat fail kosong dua. Panggilan "buat semua" melaksanakan arahan untuk sasaran e1 terlebih dahulu dan e2 seterusnya. Untuk membuang fail satu dan dua yang telah dibuat sebelumnya, cukup jalankan panggilan “make clean."

Penyenaraian 1

semua: e1 e2
e1:
sentuh satu
e2:
sentuh dua
bersih:
rm satu dua

Menjalankan Membuat

Kes yang biasa berlaku ialah anda menulis Makefile anda dan kemudian menjalankan perintah "make" atau "make all" untuk membina perisian dan komponennya. Semua sasaran dibina mengikut urutan bersiri dan tanpa selari. Jumlah masa pembinaan adalah jumlah masa yang diperlukan untuk membina setiap sasaran.

Pendekatan ini berfungsi dengan baik untuk projek kecil tetapi memerlukan masa yang lama untuk projek sederhana dan besar. Pendekatan ini tidak lagi terkini kerana kebanyakan cpus semasa dilengkapi dengan lebih daripada satu teras dan memungkinkan pelaksanaan lebih dari satu proses pada satu masa. Dengan idea-idea ini, kita melihat sama ada dan bagaimana proses membina dapat diselaraskan. Tujuannya hanyalah untuk mengurangkan masa pembinaan.

Buat Penambahbaikan

Terdapat beberapa pilihan yang kami ada - 1) mempermudah kod, 2) menyebarkan tugas tunggal ke node pengkomputeran yang berbeza, membina kod di sana, dan mengumpulkan hasil dari sana, 3) membina kod secara selari pada satu mesin, dan 4) gabungkan pilihan 2 dan 3.

Pilihan 1) tidak selalu mudah. Ia memerlukan kehendak untuk menganalisis jangka masa algoritma yang dilaksanakan dan pengetahuan mengenai penyusunnya, i.e., bagaimana penyusun menerjemahkan arahan dalam bahasa pengaturcaraan menjadi arahan pemproses.

Pilihan 2) memerlukan akses ke node pengkomputeran lain, misalnya, node pengkomputeran khusus, mesin yang tidak digunakan atau kurang digunakan, mesin maya dari perkhidmatan awan seperti AWS, atau kuasa pengkomputeran yang disewa dari perkhidmatan seperti LoadTeam [5]. Pada hakikatnya, pendekatan ini digunakan untuk membina pakej perisian. Debian GNU / Linux menggunakan rangkaian Autobuilder yang disebut [17], dan RedHat / Fedors menggunakan Koji [18]. Google memanggil sistemnya BuildRabbit dan dijelaskan dengan sempurna dalam ceramah oleh Aysylu Greenberg [16]. distcc [2] adalah penyusun C yang disebut diedarkan yang membolehkan anda menyusun kod pada nod yang berlainan secara selari dan menyiapkan sistem binaan anda sendiri.

Pilihan 3 menggunakan paralelisasi di peringkat tempatan. Ini mungkin pilihan dengan nisbah kos-manfaat terbaik untuk anda, kerana ia tidak memerlukan perkakasan tambahan seperti dalam pilihan 2. Syarat untuk menjalankan Make secara selari adalah menambah pilihan -j dalam panggilan (pendek untuk-pekerjaan). Ini menentukan jumlah pekerjaan yang dijalankan pada masa yang sama. Senarai di bawah meminta untuk membuat 4 pekerjaan selari:

Penyenaraian 2

$ buat --jobs = 4

Menurut undang-undang Amdahl [23], ini akan mengurangkan masa pembinaan hampir 50%. Perlu diingat bahawa pendekatan ini berfungsi dengan baik jika sasaran tunggal tidak bergantung antara satu sama lain; sebagai contoh, output sasaran 5 tidak diperlukan untuk membina sasaran 3.

Namun, ada satu kesan sampingan: output dari pesan status untuk setiap sasaran Buat kelihatan sewenang-wenang, dan ini tidak lagi dapat ditetapkan dengan jelas ke sasaran. Urutan output bergantung pada urutan sebenar pelaksanaan pekerjaan.

Tentukan Membuat Perintah Pelaksanaan

Adakah terdapat pernyataan yang membantu Membuat memahami sasaran yang saling bergantung antara satu sama lain? Ya! Contoh Makefile dalam Penyenaraian 3 mengatakan ini:

* untuk membina sasaran "semua", jalankan arahan untuk e1, e2, dan e3

* target e2 memerlukan sasaran e3 dibina sebelumnya

Ini bermaksud bahawa sasaran e1 dan e3 dapat dibina secara selari, pertama, kemudian e2 mengikuti sebaik sahaja pembinaan e3 selesai, akhirnya.

Penyenaraian 3

semua: e1 e2 e3
e1:
sentuh satu
e2: e3
sentuh dua
e3:
sentuh tiga
bersih:
rm satu dua tiga

Bayangkan Membuat Tanggungan

Alat make2graph yang bijak dari projek makefile2graph [19] memvisualisasikan Make dependencies sebagai graf asiklik terarah. Ini membantu memahami bagaimana pelbagai sasaran bergantung antara satu sama lain. Make2graph mengeluarkan deskripsi grafik dalam format titik yang anda boleh ubah menjadi gambar PNG menggunakan arahan titik dari projek Graphviz [22]. Panggilannya adalah seperti berikut:

Penyenaraian 4

$ buat semua -Bnd | buat2graph | dot -Tpng -o grafik.png

Pertama, Make dipanggil dengan target "semua" diikuti dengan pilihan "-B" untuk membangun semua target tanpa syarat, "-n" (singkatan dari "-dry-run") untuk berpura-pura menjalankan petunjuk per sasaran, dan " -d "(" -debug ") untuk memaparkan maklumat debug. Output disalurkan untuk membuat2graph yang menyalurkan outputnya ke titik yang menghasilkan grafik fail gambar.png dalam format PNG.


Graf kebergantungan binaan untuk senarai 3

Lebih Banyak Penyusun dan Sistem Binaan

Seperti yang telah dijelaskan di atas, Make dikembangkan lebih dari empat dekad yang lalu. Selama bertahun-tahun, melaksanakan pekerjaan secara selari menjadi semakin penting, dan bilangan penyusun dan sistem binaan yang direka khas untuk mencapai tahap paralelisasi yang lebih tinggi telah meningkat sejak itu. Senarai alat merangkumi:

Sebilangan besar daripadanya telah dirancang dengan mempertimbangkan paralelisasi dan memberikan hasil yang lebih baik mengenai masa membina daripada Membuat.

Kesimpulannya

Seperti yang anda lihat, perlu difikirkan binaan selari kerana ia mengurangkan masa binaan sehingga tahap tertentu. Namun, tidak mudah dicapai dan dilengkapi dengan perangkap tertentu [3]. Dianjurkan untuk menganalisis kod anda dan jalan binaannya sebelum melangkah ke binaan selari.

Pautan dan Rujukan

Cara menukar butang tetikus Kiri & Kanan pada PC Windows 10
Sudah menjadi kebiasaan bahawa semua peranti tetikus komputer dirancang secara ergonomik untuk pengguna tangan kanan. Tetapi ada peranti tetikus yang ...
Tiru klik Tetikus dengan melayang menggunakan Mouse Tanpa Klik di Windows 10
Menggunakan tetikus atau papan kekunci dalam keadaan salah penggunaan berlebihan boleh menyebabkan banyak masalah kesihatan, termasuk ketegangan, sind...
Tambahkan isyarat Tetikus ke Windows 10 menggunakan alat percuma ini
Dalam beberapa tahun kebelakangan ini komputer dan sistem operasi telah banyak berkembang. Ada saat ketika pengguna harus menggunakan perintah untuk m...