Programı düzgün bir şekilde nasıl kurarım diye sorarsanız, cevaplardan biri Make ile gelecektir. GNU/Linux sistemlerinde yapılan GNU [1]40 yıl önce 1976’da piyasaya sürülen orijinalin açık kaynaklı bir sürümüdür. Makefile ile Çalışma – Bu adı taşıyan yapılandırılmış bir düz metin dosyası, en iyi program oluşturma süreci için bir oluşturma kılavuzu olarak tanımlanabilir. Bir Makefile, bir dizi etiket (hedef adı verilir) ve her hedefi oluşturmak için yürütülmesi gereken özel talimatlar içerir.
Basitçe söylemek gerekirse, Make bir oluşturma aracıdır. Makefile içindeki görevlerin açıklaması aşağıdadır. Adımları bir terminale yazmak (ve muhtemelen yazarken hata yapmak) yerine otomatik olarak tekrarlamanıza olanak tanır.
Liste 1, “e1” ve “e2” olmak üzere iki özel hedefi ve iki hedefi olan örnek bir Makefile gösterir. “Tümü” ve “Temiz”. ‘make e1’i çalıştırdığınızda, ‘e1’ hedefi için talimat yürütülür ve boş bir dosya oluşturulur. a. “make e2” çalıştırmak, “e2” hedefi için aynı şeyi yapar ve iki boş dosya oluşturur. Hepsini yap çağrısı önce hedef e1 ve ardından e2 için talimatı yürütür. Önceden oluşturulmuş bir ve iki numaralı dosyaları kaldırmak için “make clean” çağrısını yürütmeniz yeterlidir.
Liste 1
Hepsi: e1 e2
E1:
dokunmak a
e2:
dokunmak 2
Temizlik:
Makedonya Cumhuriyeti Bir iki
Marka koşusu
Genel durum, Makefile’nizi yazmanız ve ardından programı ve bileşenlerini oluşturmak için “make” veya “tümünü yapma” komutunu çalıştırmanızdır. Tüm hedefler sıralı sırada ve herhangi bir paralellik olmaksızın oluşturulur. Toplam oluşturma süresi, her hedefi oluşturmak için gereken sürenin toplamıdır.
Bu yaklaşım küçük projeler için iyi çalışır ancak orta ve büyük projeler için biraz zaman alır. Mevcut işlemcilerin çoğu birden fazla çekirdeğe sahip olduğundan ve birden çok işlemin aynı anda yürütülmesine izin verdiğinden, bu yaklaşım artık geçerliliğini yitirmiştir. Bu fikirleri göz önünde bulundurarak, oluşturma sürecinin paralel hale getirilip getirilemeyeceğine ve nasıl paralelleştirilebileceğine bakıyoruz. Amaç basitçe yapım süresini azaltmaktır.
bence harikaydın
Kullanabileceğimiz birkaç seçenek var – 1) kodu basitleştirin, 2) bireysel görevleri farklı bilgi işlem düğümlerine dağıtın, kodu oraya koyun ve sonucu oradan toplayın, 3) kodu bir makinede paralel olarak oluşturun ve 4) birleştirin 2. ve 3. seçenekler.
Seçenek 1) her zaman kolay değildir. Uygulanan algoritmanın çalışma zamanını analiz etme isteği ve derleyici bilgisi gerektirir, yani derleyici programlama dilindeki talimatları işlemciye nasıl çevirir? Talimatlar.
Seçenek 2), kullanılmayan veya daha az kullanılan ayrılmış bilgi işlem düğümü donanımı, AWS gibi bulut hizmetlerinden sanal makineler veya LoadTeam gibi hizmetlerden kiralanan bilgi işlem gücü gibi diğer bilgi işlem düğümlerine erişim gerektirir [5]. Aslında, bu yaklaşım yazılım paketleri oluşturmak için kullanılır. Debian GNU/Linux, Otomatik Oluşturucu Ağı [17] RedHat/Koji Fedors kullanır [18] kullanır. Google, sistemini BuildRabbit ve Aysylu Greenberg olarak adlandırıyor [16] Distcc tarafından söylemde mükemmel bir şekilde açıklanmaktadır. [2]Paralel olarak farklı düğümlerde kod derlemenize ve kendi derleme sisteminizi oluşturmanıza izin veren dağıtılmış bir C derleyicisidir.
Seçenek 3, yerel paralelliği kullanır. 2. seçenekteki gibi ek donanım gerektirmediği için fayda-maliyet oranı açısından bu sizin için en iyi seçenek olabilir. aramak. Bu, aynı anda çalışan görevlerin sayısını sınırlar. Aşağıdaki menü Make’den 4 işi paralel olarak çalıştırmasını ister:
Liste 2
Amdahl yasasına göre [23]Bu, yapım süresini yaklaşık %50 oranında azaltacaktır. Bireysel hedefler birbiriyle ilişkili değilse, bu yaklaşımın işe yaradığına dikkat edin; Örneğin, hedef 5’in çıktısı, hedef 3’ü oluşturmak için gerekli değildir.
Bununla birlikte, bir yan etkisi vardır: Her Make hedefi için durum mesajlarının çıktısı rastgele görünür ve artık açıkça bir hedefe atanamazlar. Çıktı sırası, işlevin yürütüldüğü gerçek sıraya bağlıdır.
Yürütme sırasını belirleyin
Birbiriyle ilişkili hedefleri anlamasına yardımcı olan ifadeler var mı? Evet! Liste 3’teki Makefile örneği şöyle diyor:
* “all” hedefini oluşturmak için e1, e2 ve e3 komutlarını çalıştırın
* Hedef e2, hedef e3’ün daha önce oluşturulmasını gerektirir
Bu, önce e1 ve e3 hedeflerinin paralel olarak oluşturulabileceği, ardından e3’ün oluşturulması tamamlandığında e2’nin takip edilebileceği anlamına gelir.
Liste 3
Hepsi: e1 e2 e3
E1:
dokunmak a
e2: e3
dokunmak 2
E3:
dokunmak üç
Temizlik:
Makedonya Cumhuriyeti bir, iki, üç
bağımlılıkların görselleştirilmesi
makefile2graph [19] Projenin make2graph widget’ı, işleme bağımlılıklarını yönlendirilmiş döngüsel olmayan bir grafik olarak görselleştirir. Bu, farklı hedeflerin birbiriyle nasıl ilişkili olduğunu anlamaya yardımcı olur. Graphviz Projesi’nden Make2graph [22] Blob komutunu kullanarak PNG görüntülerine dönüştürebileceğiniz raster biçiminde grafik ek açıklamaları çıkarır. Çağrı şu şekilde:
Liste 4
$ yapmak Herşey -Son| make2graph | Puan -tpng-Ö çizelge. png
Tüm hedefleri koşulsuz olarak oluşturmak için önce “all” hedefiyle Make’i çağırın, ardından talimatın her hedef için yürütüldüğünü varsaymak için “-B” ve “-n” (“–dry-run”un kısaltması) seçenekleri ve “-d ” Hata ayıklama bilgisini görüntüle” (“ -debug”) için. Çıktı, çıktısını PNG formatında graph.png resim dosyasını oluşturan noktaya ileten make2graph’a iletilir.
Liste 3 için bir bağımlılık çizimi oluşturun
Daha fazla derleyici ve derleme sistemi
Yukarıda gösterildiği gibi, Make kırk yılı aşkın bir süredir geliştirilmektedir. Yıllar geçtikçe işleri paralel olarak yürütmek giderek daha önemli hale geldi ve o zamandan beri daha yüksek bir paralellik düzeyi elde etmek için özel olarak tasarlanmış derleme sistemleri ve derleme sistemleri büyüdü. Araçların listesi şunları içerir:
- cesur [20]
- CMake [4]: Platformlar arası derlemeyi kısaltın ve daha sonra Make tarafından kullanılan açıklama dosyaları oluşturun
- anlaşmak [12]
- dağıtılmış yapı sistemi (DMS) [10] (ölü görünüyor)
- Abi [13]
- LSF üretimi [15]
- Apaçi Maveni
- meson
- ninja yapısı
- N yapmak [6]: Microsoft Visual Studio için derleme
- PyDoit [8]
- Qmake [11]
- tekrar [14]
- SCons [7]
- Şahane [9]
Çoğu, paralellik göz önünde bulundurularak tasarlanmıştır ve Make’den daha iyi oluşturma süresi sunar.
çözüm
Gördüğünüz gibi, inşa süresini önemli ölçüde belirli bir düzeye indirdikleri için paralel yapıları dikkate almaya değer. Ancak başarması kolay değildir ve bazı tuzaklarla birlikte gelir. [3]. Paralel yapılara geçmeden önce hem kodu hem de yapı yolunu analiz etmeniz önerilir.
Bağlantılar ve referanslar
- [1] GNU Make Manual: Paralel Yürütme,
- [2] Disk:
- [3] John Graham-Cumming: Paralel GNU Tuzakları ve Faydaları,
- [4] CMake,
- [5] nakliye ekibi,
- [6] yapmak, genişlik=msvc-160
- [7] skolar,
- [8] PyDoit,
- [9] Şahane,
- [10] Dağıtık Markalama Sistemi (DMS),
- [11] qmake,
- [12] başa çıkmak,
- [13] Abi,
- [14] tekrar
- [15] LSF Yapısı,
- [16] Aysylu Greenberg: Google Ölçeğinde Dağıtık Bina Sistemi Oluşturma, GoTo Konferansı 2016,
- [17] Debian Derleme Sistemi, Otomatik Oluşturucu Ağı,
- [18] Koji – RPM oluşturma ve takip sistemi,
- [19] makefile2graf,
- [20] cesur,
- [21] makefile eğitimi,
- [22] Takvim,
- [23] Amdahl Yasası, Vikipedi,
Diğer gönderilerimize göz at
[wpcin-random-posts]
İlk Yorumu Siz Yapın