Beklenen görev sürelerini programa dahil eden herhangi bir derleme sistemi var mı?


13

İşte sorumun küçük bir örneği:

AD adında 4 bağımsız görevden oluşan bir oluşturma işi varsayalım. D, toplamda AC'den daha uzun sürer.

Göreli görev sürelerini birleştiremeyen bir derleme sistemi, görevleri aşağıdaki gibi zamanlayabilir:

---------------------------------------
CPU1: A  |    C   |
---------------------------------------
CPU2: B    | D                        |
---------------------------------------

Buna karşılık, eğer zamanlayıcı görev zamanı farklılıklarının farkındaysa, bu çok daha kısa zamanlamaya sahip olabilir:

---------------------------------------
CPU1: A  |  B    |   C   |
---------------------------------------
CPU2: D                        |
---------------------------------------

Sorularım:

  1. Beklenen görev sürelerini programa dahil eden herhangi bir derleme sistemi var mı?
  2. Bu tür sistemler kurmak için hangi akademik araştırmalar var?
  3. Bu yapı sistemleri (varsa) zaman bilgisini nereden alır? Sezgisel tarama, önceki derlemeler sırasında toplanan zamanlamalar?
  4. Bu tür yapı sistemleri yoksa, neden? Onları ilk bakışta göründüklerinden daha az değerli kılacak bir gotcha var mı?

3
Üçüncü taraf kaynaklar veya araçlar için çoğu soru "konu dışı" olarak hızlı bir şekilde kapatılır, ancak sanırım bu, bu sitenin kapsamına iyi uyan bir uç durum olabilir.
Doc Brown

1
Bence bu, bir görevi "inşa etmenin" paralel olmadığı varsayımına dayanıyor.
dagnelies

Çoğu durumda, bir görev oluşturmak gerçekten paralel değildir, ancak evet, örneğin, çok iş parçacıklı uygulamalarda birim testleri gerçekten de paralel olabilir. Aslında, çalıştığım bir projede, her zaman birim test çalıştırması için "-j1" ile "make" i çağırmamız gerekir, aksi takdirde performansla ilgili çok çekirdekli birim testleri başarısız olur.
juhist

@juhist Daha etkileyici bir yapı sistemine geçmekle ilgileniyorsanız, sallamanın örneğin birim testleriniz için kaç tane CPU çekirdeği ayrılması gerektiğini tanımlayabileceğiniz bir kaynak kavramı vardır .
sjakobi

Yanıtlar:


3

Microsoft Visual Studio Team System (eski adıyla TFS) derleme eylem sürelerini ve paralel derlemeleri dikkate alır; verileri önceki oluşturma geçmişinden alır; ve istediğiniz davranışı kutunun dışına çıkarabileceğinize inanmama rağmen, onu özelleştirebilirsiniz.

Performansı optimize etmeye yönelik bazı özel görevlere örnek

https://veegens.wordpress.com/2013/03/26/tfs-2010-build-performance-report/


Cevabınızı ve bağlantınızı doğru bir şekilde anlarsam, derleme eylem süreleri rapor edilir (bu oldukça yaygın bir özelliktir), ancak bu zamanlamaların derleme zamanlamasını iyileştirmek için kullanılıp kullanılamayacağı veya nasıl kullanılacağı açık değildir. Bu gerçekten orijinal sorularıma cevap vermiyor gibi görünüyor, bu yüzden cevabını ödülüne vermeyeceğim.
sjakobi

Sorun değil, kaçırmış olabileceğiniz şey, programlama yoluyla oluşturma eylemlerini ve oluşturma sürecini özelleştirebilmenizdir. Örnek rapor verdi, ancak belirtildiği gibi otomatik optimizasyonlar için geçmiş alındı. Ayrıca, paralel yapıları yapılandırabileceğinizi unutmayın. Ancak, algoritmanızın ardından paralel olduklarından emin olmak için kodla özelleştirmeniz gerekebilir. Bazı ek referanslar: dotnetcurry.com/visualstudio/1177/…
Bruno Guardia

2
@ BrunoGuardia: Bağlantınızın bu makalesinde derleme eylemlerinin beklenen görev sürelerinin kullanılmasına yardımcı olabilecek bir özelleştirme seçeneğinin nerede olduğunu açıklayabilir misiniz?
Doc Brown

0

Bu, bir görevi "inşa etmenin" paralel olmadığı varsayımına dayanmaktadır.

Birçok derleyici çok iş parçacıklı çalışır, bu nedenle tek bir görev A tüm CPU'ları kullanır. Bu nedenle, sipariş önemli değil. G / Ç bağlantılı görevler için, özellikle de ağ oluşturma ile ilgili olarak, hepsine en baştan paralel olarak daha iyi başlayın: çoğu zaman bir cevap beklemek için harcanacaktır.

Diğer bir deyişle, münferit görevler tipik olarak paralel olduğundan (örneğin derleme gibi) sıralama önemli değildir


Düzenle:

Aslında, bu "CPU 1'deki Görev A" anlayışı da kusurludur. Tek iş parçacıklı görevler için bile, işlemleri / iş parçacıklarını zamanlayan işletim sistemi, her bağlam anahtarında CPU'dan CPU'ya atlayabilir. Sanırım çoğu derleme sistemi tüm görevleri paralel olarak çalıştıracak ve işletim sisteminin zamanlamayı yapmasına izin verecektir. Daha uzun görevler daha uzun sürecek ve hepsi bu.

G / Ç bağlantılı olmayan , uzun süredir çalışan tek iş parçacıklı bir göreviniz olduğunu varsayarsak , derleme sisteminin işletim sisteminden bağlam anahtarlarını azaltmak için daha küçük görevleri ertelemeye çalışmak yerine bir öncelik / önem ataması çok daha kolay olacaktır.

Pratikte oldukça nadir olan garip görevleriniz olsa ve önceki çalışmalara dayanan (bilmenin tek yolu) sezgisel tarama üzerinde çalışan süslü bir zamanlama oluşturma sistemine sahip olsanız bile , bundan faydalanmanız oldukça küçük olabilir. . nasıl olursa olsun korumak için ek karmaşıklık bir demet olsun.


"Görev içi" paralellik ilginç bir özelliktir ve kesinlikle optimizasyon için ek potansiyel sunar, ancak verilen herhangi bir görevin rasgele sayıda CPU'ya verimli bir şekilde ölçekleneceğini varsaydığımızda, her görevin çalışması gerektiği varsayımından daha iyi olduğunu düşünmüyorum. tek bir çekirdek.
sjakobi

@sjakobi: Peki, pratikte derleyicilerin verimli olması oldukça önemlidir. Derlemeniz için uzun süre beklediğinizi hayal edebiliyor musunuz, çünkü 16 çekirdeğinizden sadece 1 tanesi kullanıldı mı? Bu bir hareketsiz. Tüm teori ile gerçeği görmezden geliyorsunuz. Programlama çok ilginç ve anlamlı bir konudur. Sadece IMHO, yapı sistemleri bağlamında nispeten işe yaramaz. Yine, günümüzde çoğu derleyici zaten çok iş parçacıklı ... ve eğer değilse, bu daha ziyade zamanlama oluşturma sistemine çaba harcanmalıdır.
dagnelies

2
C ++ veya C veya Fortran veya Ada için tüm ücretsiz yazılım derleyicileri ( GCC & Clang ...) tek iş parçacıklıdır. Derleme sistemi ( make -j) paralel olarak birkaç derleme işlemi başlatabilir.
Basile Starynkevitch

@BasileStarynkevitch: ... gerçekten. Temel olarak, herkes aklı başında kullanır -j <nb-cores>ama ne yazık ki varsayılan hala "1" ... Hala değişmedi şaşırdım.
dagnelies

@dagnelies: Bazı kritik bağımlılıkları kaçıran ve dolayısıyla N> 1 olduğunda -jN ile çalışmayan (veya çalışmayabilir) çok sayıda Makefile var.
juhist
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.