2011-03-28 11 views
5

"Paralel" bir çok seri programı çalıştırmam gerekirse (çünkü sorun basit ama zaman alıcıdır - aynı program için birçok farklı veri kümesinde okumam gerekir), yalnızca bir düğüm kullanırsam çözüm basit . Tek yaptığım seri işlerin her komutun ardından bir işareti ile devam etmektir.PBS toplu iş sistemi, düğümlerde birden çok seri işi mi taşır?

./program1 & 
./program2 & 
./program3 & 
./program4 

doğal farklı bir işlemci üzerinde her seri programı yayınlanır: iş senaryodaki. Bu, bir giriş sunucusunda veya tek başına bir iş istasyonunda ve tabiki sadece bir düğüm isteyen bir toplu iş için iyi çalışır.

Fakat 110 farklı veri kümesini okumak için aynı programın 110 farklı örneğini çalıştırmam gerekirse ne olur? 110./program# komutları gönderen bir komut dosyası ile birden çok düğüm (14) gönderirseniz, toplu iş sistemi her işi farklı düğümlerde farklı bir işlemci üzerinde çalıştıracak veya hepsini aynı şekilde çalıştırmayı deneyecek mi? 8 çekirdek düğüm?

Farklı verileri okumak için basit bir MPI kodu kullanmayı denedim, ancak çeşitli hatalar sonucu 110 işlemin 100'ü başarılı oluyor ve diğerleri çöküyor. Ayrıca iş dizilerini düşündüm, ancak sistemimin destekleyip desteklemediğinden emin değilim.

Seri programı tek tek veri kümelerinde kapsamlı olarak test ettim - çalışma zamanı hataları yok ve her bir düğümdeki kullanılabilir belleği aşmadım.

cevap

5

Hayır, PBS işleri sizin için düğümler arasında otomatik olarak dağıtmaz. Ama bu yapmak için ortak bir şey ve birkaç seçeneğiniz var.

  • En kolay

    ve sizin için en avantajlı bir bazı yönlerden

    1-düğüm büyüklüğünde parçalara ayrılmasına görevler demet etmektir ve bireysel işler olarak bu paketler göndermek. Bu işinizi daha hızlı başlatacak; 1 düğümlü bir iş normalde (14) 14 düğümlü bir işten daha hızlı planlanacaktır, çünkü programda 14'ten daha fazla tek boyutlu boyutta delikler vardır. Bu, özellikle tüm işlerin kabaca aynı miktarda sürmesi durumunda işe yarar. çünkü o zaman bölünmeyi yapmak oldukça basittir.

  • bir işte (diyelim ki, defter tutma basitleştirmek için), siz veya pbsdsh komutuna erişimi olmayabilir olabilir bunu yapmak istiyorum yoksa; here'un iyi bir tartışması var. Bu, işinizdeki tüm işlemcilerde tek bir komut dosyası çalıştırmanıza izin verir. Daha sonra nnodes * ppn işlerinden hangisinin olduğunu öğrenmek için $ PBS_VNODENUM sorgulayan bir komut yazarsınız ve uygun görevi çalıştırır.

  • Eğer pbsdsh değilse, Gnu parallel bu görevleri son derece basitleştiren başka bir araçtır. Buna aşina iseniz, xargs gibi, ama birden fazla düğüm de dahil olmak üzere, paralel olarak komutları çalıştıracaktır. Böylece 14 saygın işinizi gönderirsiniz ve ilk düğümün bir gnu paralel komut dosyasını çalıştırırsınız. Güzel olan, işlerin hepsi aynı uzunlukta olmasa bile, bu sizin için zamanlama yapacaktır. Bu tür şeyler için gnu'yu kullanmak için sistemimizde kullanıcılara verdiğimiz tavsiyeler here'dur. Sisteminizde gnu paralel yüklü değilse ve bazı durumlarda sistem yöneticilerinizin bunu yapamayacağını, ev dizininizde ayarlayabileceğinizi, karmaşık bir yapı olmadığını unutmayın.

+0

Çok teşekkürler, şimdi bazı önerilerinizi uyguluyorum. Gnu paralel için –

+0

+ 1 - harika bir araç. – Owen

2

job arrays'u göz önünde bulundurmalısınız.

Kısaca, (aralık 0-109 istediğiniz herhangi bir tamsayı aralığı olabilir nerede, ama sen 110 veri setlerini vardı belirtti) Eğer kabuk komut #PBS -t 0-109 yerleştirin ve tork yapacaktır:

  • çalıştırmak Senaryonuzun 110 örneklerini belirttiğiniz kaynaklarla (#PBS etiketlerinde veya gönderdiğinizde argüman olarak) her'u tahsis ederek.
  • , 0 - 109 arasında her iş için PBS_ARRAYID ortam değişkenine benzersiz bir tamsayı atayın.

Kod içindeki ortam değişkenlerine erişiminiz olduğunu varsayarak, her bir iş için PBS_ARRAYID numaralı veri kümesi üzerinde çalışmasını söyleyebilirsiniz.

İlgili konular