developerWorks: Yüksek performanslı Linux kümeleme 2: Çalışan Bir Küme Oluşturma

0
butch
IBM Türkiye ve Fazlamesai.net işbirliği ile dilimize kazandırılan yeni bir IBM developerWorks makalesi ile karşınızdayız. Diğer makalelere buradan ulaşabilirsiniz.

Makalenin özgün haline bu adresten ulaşabilirsiniz.

Yüksek performanslı Linux kümeleme, 2. Bölüm: Çalışan bir küme oluşturma

Paralel programlar yazma ve sisteminizi yapılandırma

Düzey: Orta

Aditya Narayan (aditya_pda@hotmail.com), QCD Microsystems Kurucusu

27 Ekim 2005

Yüksek Performanslı Bilgiişlemin (HPC) kolaylaşmasının nedenlerinden biri açık kaynak yazılım kavramlarının kullanılmaya başlanması, bir başka nedeni ise kümeleme teknolojisinin iyileştirilmesidir. Sunulan iki makaleden ikincisi olan bu yazı, MPI kullanılarak yapılan paralel programlama işlemlerini ele alır ve küme yönetimi ve karşılaştırmalı sınamasıyla ilgili genel bilgiler sunar. Ayrıca, sağlam kümeler oluşturmak için bir açık kaynak projesi olan OSCAR kullanılarak nasıl Linux® kümesi oluşturacağınızı gösterir.

Bu yazı dizisinin Kümeleme ilkeleri başlıklı 1. Bölümünde küme türleri, kümelerin kullanım alanları, HPC ilkeleri ve kümeleme teknolojisinin Yüksek Performanslı Bilgiişlemde gelişmesinin nedenleri ele alınır.

Bu makalede paralel algoritmalar ele alınır ve paralel program yazma, küme oluşturma, kümeler için karşılaştırmalı değerlendirme işlemlerinin nasıl yapıldığı gösterilir. MPI kullanılarak paralel programlama yapılması ve Linux kümesi oluşturmakla ilgili temel bilgilere göz atacağız. Bu makalede, sağlam kümeler oluşturmanıza yardımcı olan bir açık kaynak projesi olan OSCAR'la tanışacağız. Ayrıca, küme yönetimi ve karşılaştırmalı değerlendirme kavramlarına göz attıktan sonra bir kümede standart LINPACK testleri yapmak için gerekli adımlarla yazımızı bitireceğiz.

Linux'u kurduysanız, bu makaleyi okuduktan sonra bir Linux kümesi için kuruluş ve sorun giderme işlemlerini gerçekleştirebilirsiniz. Aşağıdaki Kaynaklar bölümündeki yararlı bağlantıları kümeleme hakkında daha fazla bilgi edinmek için kullanabilirsiniz.

Kümeleme ve paralel programlama platformları

1. Bölüm'de gördüğünüz gibi, HPC genellikle paralel programlamayla ilgili bir kavramdır. Paralel programlama oldukça yerleşmiş bir alandır ve bu alanın çevresinde, son 20 yılda birçok programlama platformu ve standardı gelişmiştir.

HPC'de en çok kullanılan iki donanım platformu paylaşılan bellek sistemleri ve dağınık bellek sistemleridir. Ayrıntılar için 1. Bölüm'e bakın.

Paylaşılan bellek sistemlerinde, Yüksek Performaslı FORTRAN, paralel programlama için geliştirişmiş bir dildir. Bu dil, paralel verilerden yararlanır ve yönergeleri farklı işlemcilerdeki bir dizinin farklı dizinlerinde yürüterek tüm diziler üzerinde aynı anda hareket edebilir. Böylece, paralel duruma getirme işlemleri sizin uğraşmanıza gerek kalmadan otomatik olarak gerçekleşir. (Örnek olarak sunabileceğimiz, Jamaica projesinde, standart bir Java programı, birden çok iş parçacıklı kod üretmek için özel bir derleyici kullanılarak yeniden çarpanlara ayrılır. Üretilen kod, otomatik olarak SMP mimarisinden yararlanır ve paralel olarak çalışır.)

Dağınık bellek sistemlerinde, durum çok farklıdır çünkü bellek dağıtılmıştır; yazacağınız kodda, temel donanımın dağınık yapısı dikkate alınmalı ve farklı düğümler arasında ileti alışverişi yapmak için açık ileti geçişi kullanılmalıdır. Bu nedenle, bir zamanlar en çok kullanılan paralel programlama platformu Paralel Sanal Makinelerdi (PVM); ancak, son zamanlarda kümeler için paralel programlar yazmak amacıyla kullanılan gerçek standart MPI olmuştur.

Linux için yüksek kalitede MPI uygulamaları FORTRAN, C ve C++ için ücretsiz edinilebilir. En çok kullanılan iki MPI uygulaması şunlardır:

  • MPICH
  • LAM/MPI

Bu makalenin ilerideki bölümlerinde MPICH tabanlı bir Linux kümesi oluşturacak ve MPI tabanlı bir program örneğine göz atacağız.



Basit bir Linux kümesi yaratma

Kümelemenin en ilginç taraflarından biri, Linux'la ilgili temel kuruluş ve sorun giderme becerilerine sahip olduğunuzda, Linux tabanlı kümeleri kolaylıkla oluşturabilmenizdir. Şimdi bunun nasıl yapıldığını görelim.

Bizim kümemiz için MPICH ve bir dizi standart Linux iş istasyonu kullanacağız. Kolaylık olması ve temel ilkelerin daha iyi vurgulanması amacıyla, yalnızca, kümelenmiş bir ortamda paralel program çalıştırabileceğiniz sade minimum sistemi kuracağız.

Bu bölümde yer alan yedi adımda, sistemimizin iskeletinin nasıl oluşturulduğu gösterilir. Sağlam kümeler oluşturmak ve bunları yönetmek için daha çok çaba gerekir, bu konular makalenin daha sonraki bölümlerinde ele alınacaktır.

Adım 1

Gerçek bir küme için en az iki adet Linux makinesi gereklidir. Ayrıca, iki VMware görüntüsü de çok işe yarar. (Tabii VMware'in performansa katkısı olmasını beklemeyin. Aslında, CPU paylaşılacağından kesinlikle bir performans artışı olacaktır.) Bu makinelerin adlarını kullanarak birbirleriyle ping iletişimi kurabildikleriden emin olun. Ping işlemi gerçekleşmezse, /etc/hosts içine gerekli girişleri ekleyin.

Adım 2

GNU derleyicisini ve GNU FORTRAN derleyicisini kurun.

Adım 3a

SSH'yi tüm düğümleriniz için komutları parola istemeden yürütecek şekilde yapılandırın. Amacımız, parola istenmeden çalışabilmek için ssh -n host whoami gibi bir değer elde etmektir. SSH, farklı makineler arasında iletişim kurmak için kullanılacaktır. (Ayrıca, rsh de bu amaçla kullanabilir.)

Adım 3b

ssh-keygen -f /tmp/key -t dsa, key adında bir dosyada bir özel anahtarla key.pub adında bir dosyada bir genel anahtar verir.

Adım 3c

Kümenizi kök olarak oluşturuyorsanız ve programlarınızı kök olarak çalıştıracaksanız (tabii bunu yalnızca deneme sırasında yapın), kümenizdeki tüm düğümlerde, özel anahtarı /root/.ssh/identity dosyasına, genel anahtarı da /root/.ssh/authorized_keys dosyasına kopyalayın.

Herşeyin düzgün işlediğini denetlemek için şu komutu çalıştırın: ssh -n hostname 'date' ve komutun hatasız çalıştığını doğrulayın. Emin olmak için bunu tüm düğümlerde test etmelisiniz.

Not: Güvenlik duvarınızı düğümlerin birbiriyle iletişim kurmasına izin verecek şekilde yapılandırmanız gerekebilir.

Adım 4a

Şimdi MPICH kuruluşunu yapacağız. anl.gov Web sitesinden MPICH'nin UNIX sürümünü yükleyin (bağlantı için Kaynaklar bölümüne bakın). Aşağıda hızlı bir genel bakış sunulmuştur.

Adım 4b

mpich.tar.gz in /tmp dosyasını yüklediğinizi varsayalım:

cd /tmp
tar -xvf mpich.tar.gz (Bunun sonucunda /tmp/mpich-1.2.6 adlı bir dizin oluşturulduğunu varsayalım)
cd /tmp/mpich-1.2.6

Adım 4c

./configure -rsh=ssh -- Bu komut, MPICH'ye iletişim mekanizması olarak ssh'yi kullanmasını belirtir.

Adım 4d

make -- Bu adımın sonunda, MPICH kuruluşunuz kullanıma hazır olur.

Adım 5

MPICH'nin tüm düğümlerinizden haberdar olması için /tmp/mpich-1.2.6/util/machines/machines.LINUX dosyasını düzenleyin ve tüm düğümlerin anasistem adlarını bu dosyaya eleyerek MPICH kuruluşunuzun tüm düğümlerinizden haberdar olmasını sağlayın. Daha sonraki bir aşamada düğüm eklediğinizde de bu dosyayı düzenleyin.

Adım 6

/tmp/mpich-1.2.6 dizinini kümenizdeki tüm düğümlere kopyalayın.

Adım 7

Examples dizininde birkaç test programını çalıştırın:

  • cd /tmp/mpich-1.2.6/utils/examples
  • make cpi
  • /tmp/mpich-1.2.6/bin/mpirun -np 4 cpi -- MPICH'ye bunu dört işlemcide çalıştırmasını belirtir; kurulumunuzda dörtten az işlemci varsa, endişelenmeyin; MPICH fiziksel donanımın eksikliğini telafi edecek işlemler yaratacaktır.

Kümeniz hazırdır! Gördüğünüz gibi, tüm zor işlemler MPI uygulaması tarafından yapılmaktadır. Daha önce de belirtildiği gibi, bu bir küme iskeletidir ve büyük bölümü makinelerin birbiriyle iletişim kurmasını sağlayarak yapılan manüel işlemlere dayanır (ssh yapılandırılır, MPICH manüel kopyalanır, vb.).



Açık kaynak kümesi uygulama kaynakları

Açıkça görüldüğü gibi, yukarıdaki kümeyi sağlamak zor olacaktır. Dosyaları her bir düğüme kopyalamak, SSH ve MPI'yı eklenen her düğümde ayarlamak, bir düğüm kaldırıldığında gerekli değişiklikleri yapmak, vb. gibi işlemleri gerçekleştirmek çok basit değildir.

Açık kaynak kaynakları güçlü üretim kümelerini oluşturmanıza ve yönetmenize yardımcı olabilir. OSCAR ve Rocks bunlara örnektir. Küme yaratırken yaptığımız birçok işlem bu programlar tarafından otomatik bir şekilde gerçekleştirilmiştir.

Şekil 1, basit bir kümenin şemasıdır.


Şekil 1. Basit örnek küme
Basit örnek küme

OSCAR, PXE (Portable Execution Environment) kullanılarak otomatikleştirilmiş Linux kuruluşlarını da destekler. Ayrıca, OSCAR aşağıdaki işlevlere de yardımcı olur:

  • Hesaplama düğümlerine otomatik Linux kuruluşu

  • DHCP ve TFTP yapılandırması (PXE kullanılarak Linux kuruluşu). Birçok yeni bilgisayarda makineyi DHCP sunucusu kullanarak önyüklemeyi sağlayan bir BIOS bulunur. BIOS'ta bulunan yerleşik bir DHCP istemcisi, kendisine TFTP kullanılarak DHCP sunucusundan aktarılan bir işletim sistemi görüntüsü ister. Bu Linux görüntüsü OSCAR tarafından yaratılır; ayrıca, DHCP ve TFTP kuruluşu ve yapılandırması da OSCAR tarafından yürütülür.

  • SSH yapılandırması.

  • Otomatik NFS kuruluşu.

  • MPI kuruluşu ve yapılandırması (MPICH ve LAM/MPI).

  • PVM kuruluşu ve yapılandırması (MPI yerine PVM kullanmak isterseniz).

  • Ana düğüm ve hesaplama düğümleri arasında özel alt ağ yapılandırması.

  • Kümeye iş gönderen birçok kullanıcının otomatik yönetimi için zamanlayıcı (Open PBS ve Maui) kuruluşu.

  • Performans izlemesi için Ganglia kuruluşu.

  • Düğüm ekleme/kaldırma için hazırlık.

OSCAR şu anda birkaç Red Hat Linux sürümünü desteklemektedir; desteklenen diğer dağıtımlar için OSCAR Web sitesini ziyaret edin (bağlantı için Kaynaklar bölümüne bakın). Kuruluş sırasında ortaya çıkan hatalara göre, komut dosyalarından bazılarını ayarlamanız gerekebilir.



OSCAR'ı kullanarak Linux kümesi yaratma

Şimdi OSCAR kaynaklarıyla başlayıp tüm işlevlere sahip bir küme oluşturalım. Elinizde ağ bağlantısı olan iki ya da daha çok standart iş istasyonunuz olduğunu varsayalım. Bunlardan birini ana düğüm, diğerlerini hesaplama düğümü yapalım.

Linux kümesini oluştururken yaptığımız gibi, ana düğüm üzerinde gerçekleştirilecek adımların üzerinden geçeceğiz. OSCAR, işletim sistemi kuruluşu dahil, diğer tüm düğümleri otomatik olarak yapılandırır. (OSCAR kuruluş kılavuzuna bakın; aşağıda kuruluş işlemine kavramsal bir genel bakış sunulmuştur.)

Adım 1

Linux'u ana düğüme kurun. Bir X sunucusu da kurun.

Adım 2

mkdir /tftpboot, mkdir /tftpboot/rpm. Tüm RPM'leri kuruluş CD'sinden bu dizine kopyalayın. Bu RPM'ler istemci görüntüsü oluşturmak için kullanılır. Aslında tüm RPM'ler gerekmeyecektir ancak görüntüyü otomatik olarak oluşturmak için bunları bulundurmakta yarar vardır.

Adım 3

MySQL'in kurulmasını ve doğru biçimde yapılandırılmasını ve MySQL'e Perl'den erişebilmenizi sağlar; çünkü OSCAR tüm kuruluş bilgilerini MySQL'de saklar ve bunlara erişmek için Perl'i kullanır. Bu adım genellikle isteğe bağlıdır ve OSCAR tarafından gerçekleştirilir, ancak, bazen başarısız olur (özellikle OSCAR'ı desteklenmeyen bir dağıtıma kuruyorsanız)

Adım 4

OSCAR kaynaklarını yükleyin ve derleyin:

configure
make install

Adım 5

OSCAR sihirbazını başlatın. Kümenin küme düğümleri arasındaki bağlantılar için eth1 kullanmasını istediğinizi varsayarsak şunu kullanın: /opt/oscar/install_cluster eth1.

Adım 6

Bu aşamada, OSCAR ekranlarını adım adım izleyin. Adımları doğru sırada gerçekleştirin:

  1. OSCAR kuruluşunuzu özelleştirmek için paketler seçin. Bu paketler hakkında bilgi sahibi değilseniz, şimdilik bu adımı atlayın.

  2. OSCAR paketlerini kurun.
  3. İstemci görüntüsünü oluşturun. Bu görüntü, hesaplama düğümleri tarafından kullanılacaktır.
  4. OSCAR istemcilerini tanımlayın. Bu, hesaplama düğümlerini tanımlar. Kullanmak istediğiniz düğüm sayısını ve bunların kullanacağı alt ağı belirlemeniz gerekir. Kaç tane düğüm olması gerektiğinden emin değilseniz bunu daha sonra değiştirebilirsiniz.
  5. Farklı düğümlerin MAC adreslerini IP adresleriyle eşleyin. Bu adım için, her düğümün BIOS içindeki PXE ağ önyükleme seçeneği kullanılarak önyüklenmesi gerekir.

Adım 7

Son olarak, testleri çalıştırın. Herşey yolunda giderse, her test başarıyla sonuçlanır. Bazen hiçbir şey yanlış olmasa da testler ilk denemede başarısız olur. Testleri her zaman, /opt/oscar dizinindeki komut dosyalarını el ile çalıştırarak yürütebilirsiniz.

Şimdi yeni düğümler eklemek istiyorsanız, OSCAR sihirbazını yeniden başlatın ve düğümleri ekleyin. Linux işletim sistemi bu düğümlere PXE kullanılarak OSCAR tarafından otomatik olarak kurulur.

Artık küme hazırdır, paralel programları çalıştırabilir, gerektiği kadar yeni düğüm ekleyebilir ya da düğümleri kaldırabilir ve Ganglia ile durumu izleyebilirsiniz.



Kümeyi yönetme

Geniş bir kullanıcı tabanı olan bir üretim ortamındaki bir kümeyi yönetmek söz konusu olduğunda, iş zamanlaması ve izleme çok önemlidir.

İş zamanlaması

MPI çeşitli düğümlerdeki işlemleri başlatacak ve durduracaktır ancak bu tek bir programla sınırlıdır. Tipik bir kümede, birçok kullanıcı programlarını çalıştırmak isteyecektir; bu nedenle, kümenin verimli bir şekilde kullanılmasını sağlamak için zamanlama yazılımı kullanmalısınız.

Çok kullanılan zamanlama sistemlerinden biri olan OpenPBS, OSCAR tarafından otomatik olarak kurulur. Bununla kuyruklar yaratıp bu kuyruklara işler gönderebilirsiniz. OpenPBS içinde, gelişmiş iş zamanlama ilkeleri de yaratabilirsiniz.

Ayrıca, OpenPBS yürütülen işleri görüntülemenizi, işleri göndermenizi ve iptal etmenizi de sağlar. Belirli bir iş tarafından kullanılabilecek maksimum CPU süresini denetleyerek sistem yöneticilerine kolaylık sağlar.

İzleme

Küme yönetiminin önemli bir yanı izlemedir; özellikle de kümenizde çok fazla sayıda düğüm varsa bu daha da önem kazanır. Ganglia (OSCAR ile birlikte gönderilir) ve Clumon gibi birkaç seçenekten yararlanabilirsiniz.

Ganglia, Web tabanlı bir ön uca sahiptir ve CPU ve bellek kullanımı için gerçek zamanlı izleme sağlar; herhangi bir işlemi izleyecek şekilde kolaylıkla genişletilebilir. Örneğin, basit komut dosyalarıyla Ganglia'nın CPU sıcaklığı, faz hızı, vb. konularda bilgi vermesini sağlayabilirsiniz. Sonraki bölümlerde, bazı paralel programlar yazacağız ve bunları küme üzerinde çalıştıracağız.



Paralel algoritma

Paralel programlamanın, temel donanımdan yararlanan kendi paralel algoritmaları vardır. Şimdi bu tür bir algoritmaya bakalım. Bir düğümde toplanacak bir dizi N tamsayısı olduğunu varsayalım. Bu toplamayı normal yoldan yapmak için gerekli süre O(N) kadardır (100 tamsayıyı toplamak 1ms zaman alırsa, 200 tamsayıyı toplamak 2ms zaman alır ve bu şekilde devam eder).

Bu sorunun doğrusal olarak ölçeklenmesine geçmek zor görünebilir, ancak çok kullanışlı bir yolu vardır. Bir programın dört düğümlü bir kümede çalıştığını, her düğümün belleğinde bir tamsayı olduğunu ve amacın bu dört sayıyı toplamak olduğunu düşünelim.

Aşağıdaki adımları inceleyelim:

  1. Düğüm 2, tamsayısını düğüm 1'e, düğüm 4 ise tamsayısını düğüm 3'e gönderir. Böylece düğüm 1 ve 3'te ikişer tamsayı olur.
  2. Bu iki düğümdeki tamsayılar toplanır.
  3. Bu kısmi toplam düğüm 3 tarafından düğüm 1'e gönderilir. Böylece düğüm 1'de iki kısmi toplam olur.
  4. Düğüm 1 son toplamı elde etmek için bu kısmi toplamları toplar.

Gördüğünüz gibi, başlangıçta 2N sayısı olsaydı, bu yaklaşımla bunlar ~N adımda toplanacaktı. Bu nedenle, algoritmanın ölçeği O(log2N) kadardır; bu, ardışık örneğe göre O(N) değerinin üzerinde bir gelişmedir. (128 sayıyı toplamak 1ms alıyorsa, bu yaklaşımla 256 sayıyı toplamak (8/7) ~ 1.2ms alır. Ardışık yaklaşımda, bu süre 2ms olurdu.

Bu yaklaşım her adımdaki hesaplama düğümlerinin yarısını da serbest bırakır. Bu algoritma yineleyen ikiye bölme ve ikiye katlama olarak bilinir ve birazdan ele alacağımız, MPI'deki azaltma işlevi çağrıları sınıfının temelinde yatan mekanizmadır.

Paralel algoritmalar, paralel programcılıktaki birçok pratik soruna yöneliktir.



Paralel programlamada bir matrisi bir vektörle çarpmak için MPI'yı kullanma

Artık paralel programcılık platformunun ilkelerini öğrendiniz ve hazır bir kümeniz oldu; şimdi kümenin avantajından yararlanan bir program yazalım. Konuya ısınma aşamasını atlayıp doğrudan asıl konuya geçelim ve iki matrisi çarpmak için MPI tabanlı bir program yazalım.

Bu sorunu çözmek için paralel algoritmalar bölümünde anlatılan algoritmayı kullanacağız. Diyelim ki, bir vektörle çarpmak istediğimiz bir 4X4 matrisi var (bir 4X1 matrisi). Standart matris çarpma tekniğinde biraz değişiklik yaparak önceki algoritmanın buraya uygulanabilmesini sağlayacağız. Bu teknik için Şekil 2'ye bakabilirsiniz.


Şekil 2. Matrisin vektörle çarpımı
Matrisin vektörle çarpımı

İlk satırı ilk sütunla çarpmak ve bu şekilde devam etmek yerine, ilk sütundaki tüm öğeleri vektörün ilk öğesiyle, ikinci sütundaki öğeleri vektörün ikinci öğesiyle çarparak devam edeceğiz. Bu şekilde, sonuç yeni 4X4 matrisi olacak. Bundan sonra, bir satırdaki dört öğenin tümünü toplayarak bulduğumuz sonuç olan 4X1 matrisine ulaşırsınız.

MPI API, bu sorunu çözmek için doğrudan uygulayabileceğiniz bazı işlevlere sahiptir; bunlar Liste 1'de gösterilmiştir.


Liste 1. MPI kullanılarak yapılan Matris çarpımı


/*

Derlemek için: 'mpicc -g -o matrix matrix.c'
Çalıştırmak için: 'mpirun -np 4 matrix'

"-np 4" değeri, işlemci sayısını belirtir.

*/

#include 
#include 
#define SIZE 4

int main(int argc, char **argv) {
   int j;
   int rank, size, root;
   float X[SIZE];
   float X1[SIZE];
   float Y1[SIZE];
   float Y[SIZE][SIZE];
   float Z[SIZE];
   float z;
   root = 0;
   /* Initialize MPI. */
   MPI_Init(&argc, &argv);
   MPI_Comm_rank(MPI_COMM_WORLD, &rank);
   MPI_Comm_size(MPI_COMM_WORLD, &size);

/* Initialize X and Y on root node. Note the row/col alignment. This is specific  to C */
   if (rank == root) {
      Y[0][0] = 1; Y[1][0] = 2; Y[2][0] = 3; Y[3][0] = 4;
      Y[0][1] = 5; Y[1][1] = 6; Y[2][1] = 7; Y[3][1] = 8;
      Y[0][2] = 9; Y[1][2] = 10;Y[2][2] = 11;Y[3][2] = 12;
      Y[0][3] = 13;Y[1][3] = 14;Y[2][3] = 15;Y[3][3] = 16;
      Z[0] = 1;
      Z[1] = 2;
      Z[2] = 3;
      Z[3] = 4;
   }
   MPI_Barrier(MPI_COMM_WORLD);
   /*  root scatters matrix Y in 'SIZE' parts to all nodes as the matrix Y1 */
   MPI_Scatter(Y,SIZE,MPI_FLOAT,Y1,SIZE,MPI_FLOAT,root,MPI_COMM_WORLD);
   /* Z is also scattered to all other nodes from root. Since one element is sent to
      all nodes, a scalar variable z is used. */
   MPI_Scatter(Z,1,MPI_FLOAT,&z,1,MPI_FLOAT, root,MPI_COMM_WORLD);
   /* This step is carried out on all nodes in parallel.*/
      for(j=0;j


Performans ölçümü

Kümeler performans sağlamak üzere oluşturulurlar ve ne kadar hızlı olduklarını bilmeniz gerekir. Genellikle performansı, işlemci hızının etkilediği düşünülür. Bu bir bakıma doğru olsa da, farklı sağlayıcıların işlemcileri ya da aynı sağlayıcının farklı işlemci grupları karşılaştırıldığında önemsiz hale gelir çünkü farklı işlemciler belirli sayıda saat döngüsünde farklı miktarda iş yaparlar. Bu durum özellikle 1. Bölüm'de vektör işlemcileriyle sayısal işlemciler arasında yaptığımız karşılaşmada belirgindi.

Performansı ölçmenin daha doğal bir yolu da bazı standart testleri yürütmektir. Zaman içinde, LINPACK testi olarak bilinen test, performans karşılaştırması için altın değerinde bir standart haline geldi. Bu test Jack Dongarra tarafından on yıldan fazla zaman önce yazıldı ve hala top500.org tarafından kullanılıyor (bağlantı için Kaynaklar başlıklı konuya bakın).

Bu test N doğrusal denklemlerinden oluşan yoğun bir sistemin çözülmesini içerir; bu denklemlerde kayan noktalı işlem sayısı bilinir (N^3 sırasına ait). Bu test bilimsel uygulamaları ve simülasyonları çalıştırmaya yönelik test bilgisayarlarının hızlandırılması için çok uygundur çünkü bu tür işlemler bir aşamada doğrusal denklemleri çözebilirler.

Standart ölçü birimi, saniyedeki kayan noktalı işlem sayısıdır (FLOPS) (bu örnekte, kayan noktalı işlem (flop), 64 bitlik bir sayıyı toplama ya da çarpma işlemidir). Test aşağıdakileri ölçer:

  • Rpeak, teorik olarak en fazla flops. Haziran 2005 tarihli bir rapora göre, IBM Blue Gene/L'nin hızı, 183.5 tflops (trilyon flops) değerindeydi.
  • Nmax, en yüksek flops değerini veren N matris büyüklüğü. Blue Gene için bu değer 1277951'dir.
  • Rmax, Nmax için elde edilen flops sayısı. Blue Gene için bu değer 136.8 tflops idi.

Bu sayıları değerlendirebilmek için şunu düşünün: IBM BlueGene/L'nin bir saniyede yapabildiklerini ev bilgisayarınızın yapması beş gün sürebilir.

Şimdi kendi Linux kümenizin performansını nasıl karşılaştırabileceğinize bakalım. LINPACK dışında kullanabileceğiniz diğer testler HPC Challenge Benchmark ve NAS karşılaştımalı değerlendirmeleridir.


Linux kümenizin karşılaştırmalı değerlendirmesi

Linux kümenizde LINPACK testini çalıştırmak için LINPACK paralel sürümüne sahip olmanız ve bunu küme için yapılandırmanız gerekir. Bu süreci adım adım göreceğiz.

Uyarı: Aşağıdaki örnekte genel doğrusal cebir kitaplıkları kullanılmıştır; bu örneği yalnızca kılavuz olarak kulanın. Gerçek bir test için kendi ortamınız için optimize edilmiş kitaplıklar edinin.

Adım 1

LINPACK testinin paralel (MPI) sürümü olan hpl.tgz dosyasını netlib.org adresinden yükleyin (bağlantı için Kaynaklar bölümüne bakın).

Adım 2

Önceden derlenen BLAS (Basic Linear Algebra Subprograms) sürümü olan blas_linux.tgz dosyasını yine netlib.org adresinden yükleyin. Kolaylık olması açısından, önceden derlenen BLAS for Linux başvuru uygulamasını kullanabilirsiniz, ancak daha iyi sonuçlar almak için donanım sağlayıcınızdan edindiğiniz BLAS sürümünü kullanmanız ya da bunu açık kaynak ATLAS projesini kullanarak otomatik olarak ayarlamanız gerekir.

Adım 3

mkdir /home/linpack; cd /home/linpack (herşeyi /home dizinine yükleyeceğiz).

Adım 4

Sıkıştırılmış blas_linux.tgz dosyasını çıkarın ve açın. blas_linux.a adlı bir arşiv dosyası olmalıdır. Bu dosyayı görürseniz, verilebilecek hataları göz ardı edin.

Adım 5

Sıkıştırılmış hpl.tgz dosyasını çıkarın ve açın. hpl adlı bir dizin oluşturulur.

Adım 6

Make.Linux_PII_FBLAS dosyası gibi yapılandırma dosyalarını hpl/setup dizininden hpl dizinine kopyalayın ve hpl dizinindeki kopyanın adını Make.LinuxGeneric olarak değiştirin.

Adım 7

Make.LinuxGeneric dosyasını değerleri kendi ortamınıza göre değiştirerek aşağıdaki gibi düzenleyin:

TOPdir = /home/linpack/hpl
MPdir = /tmp/mpich-1.2.6
LAlib = /home/linpack/blas_linux.a
CC = /tmp/mpich-1.2.6/bin/mpicc
LINKER = /tmp/mpich-1.2.6/bin/mpif77

Bu beş konum, 1. adımda LINPACK'in en üst dizinini, MPICH kurulumunuzun en üst dizinini ve 2. adımdaki başvuru BLAS arşivinin yerini belirtir.

Adım 8

Şimdi HPL'yi derleyin:

make arch=LinuxGeneric

Hata verilmezse, /home/linpack/hpl/bin/LinuxGeneric dizininde xhpl ve HPL.dat adlı iki dosya oluşacaktır.

Adım 9

LINPACK testini kümenizde çalıştırmadan önce, /home/linpack dizininin tamamını kümenizdeki tüm makinelere kopyalayın. (Kümenizi OSCAR'ı kullanarak yarattıysanız ve NFS payları yapılandırıldıysa, bu adımı atlayın.)

Şimdi, cd komutuyla 8. adımda yarattığınız yürütülebilir dosyaların olduğu dizine geçin ve bazı testleri çalıştırın (örneğin /tmp/mpich-1.2.6/bin/mpicc -np 4 xhpl). Bazı testlerin çalıştırıldığını ve sonuçların GFLOP olarak sunulduğunu göreceksiniz.

Not: Yukarıdaki adım matris büyüklüklerinin varsayılan ayarlarına göre bazı standart testleri çalıştıracaktır. Testlerinizi ayarlamak için HPL.dat dosyasını kullanın. Ayarlamayla ilgili ayrıntılı bilgi /home/linpack/hpl/TUNING dosyasında yer alır.



IBM Blue Gene/L

Kendi kümenizi oluşturduğunuza göre şimdi küme tabanlı süper bilgisayarlarda en son teknoloji olan Blue Gene/L'ye hızlı bir şekilde göz atabiliriz. Blue Gene/L çok büyük oranların hesaplanması için gerçekleştirilen bir mühendislik atılımıdır ve bu teknolojinin hakkını verecek bir tartışma bu makalenin amacı dışındadır. Bu nedenle yalnızca yüzeysel bir bakış sunacağız.

Üç yıl önce bir vektör işlemcisi olan Earth Simulator en hızlı süper bilgisayar olduğunda, birçok kişi, bir süper bilgiişlem platformu olarak kümenin sonunun gelmekte olduğunu ve vektör işlemcinin yeniden dirileceğini öngörmüştü; ancak bu erken bir tahmindi. Blue Gene/L, standard LINPACK testinde Earth Simulator'u açık arayla geride bıraktı.

Blue Gene/L ticari iş istasyonlarından oluşturulmamıştır ancak yine de bu yazı dizisinde anlatılan standart kümeleme kavramlarını kullanır. Kümemizde kullandığımız MPICH'den türetilen bir MPI uygulamasını kullanır. Ayrıca, 700MHz hızında standart 32 bit PowerPC® CPU'ları çalıştırır (her ne kadar bunlar çip üzerinde sistem ya da SoC teknolojisini temel alsa da). Bu da sınıfının diğer tüm makinelerinden çok daha az soğutma ve güç gereksinimi olmasını sağlar.

Büyük bir makine olan Blue Gene/L (her biri özel bir işletim sisteminde çalışan) 65.536 hesaplama düğümüne ve (Linux çekirdeğini çalıştıran) 1.024 özel G/Ç düğümüne sahiptir. Bu kadar fazla sayıda düğümle, ağ işlemleri özel önem kazanır ve Blue Gene/L, her biri belli bir amaç için optimize edilen beş farklı türde ağ kullanır.

IBM Systems Journal'ın yeni sayılarından biri özel olarak Blue Gene/L konusunu ele almaktadır; ayrıntılı bilgi için bu yayına başvurabilirsiniz. Blue Gene/L'de, yüksek oranda ölçeklenebilir bir MPP gerçekleştirilmesini ve küme tabanlı bilgiişlem paradigmasının önemini korumaya devam ettiğinin kesin kanıtını görüyoruz.


Kaynaklar

Bilgi Edinme
  • İki bölümden oluşan bu yazı dizisinin "Kümeleme ilkeleri" adlı ilk bölümünü okuyun (developerWorks, Eylül 2005).

  • Jamaica Project derleyicileri, paralel duruma getirme işlemlerini, dinamik derleyicileri ve süper bilgisayarların paralel işlemler kullanılarak optimize edilmesi konularını açıklar.

  • Parallel Virtual Machine (PVM)
  • Message Passing Interface (MPI)
    • MPI Forum, MPI standardını tanımlayan ve sürdüren birçok kuruluşun temsilcisinin yer aldığı açık bir gruptur.
    • MPICH, MPI'nın taşınabilir ve ücretsiz sunulan bir uygulamasıdır.
    • LAM/MPI, MPI belirtiminin araştırma ve üretim amaçlı olarak geliştirilen yüksek kalitede bir açık kaynak uygulamasıdır.
    • Çalışmalarınıza bu MPI kuruluş kılavuzu ile başlayabilirsiniz.

  • OSCAR (Open Source Cluster Application Resources), HPC kümelerinin oluşturulması, programlanması ve kullanılmasına ilişkin en önemli yöntemlerin anlık görünümüdür.

  • Rocks Cluster açık kaynak bir Linux küme uygulamasıdır.

  • OpenPBS Portable Batch System'ın özgün sürümüdür.

  • Clumon, National Center for Supercomputing Applications'ta Linux süper kümelerini takip etmek için geliştirilen bir küme izleme sistemidir.

  • Karşılaştırmalı değerlendirmeler
    • Top500.org sitesinde LINPACK testiyle ilgili genel bilgiler sunulmaktadır.
    • Jack Dongarra'nın HPC Challenge testi ve bununla ilgili genel bilgileri konu alan mükemmel bir yazısı.
    • NAS Parallel Benchmarks (NPB) paralel süper bilgisayarların performansını değerlendirmek üzere tasarlanan küçük bir program grubudur.
    • HPL, dağınık bellekli bilgisayarlarda yüksek performanslı LINPACK testinin taşınabilir bir uygulamasıdır.
    • BLAS (Basic Linear Algebra Subprograms) temel vektör ve matris işlemlerini gerçekleştirmek için standart yapı taşları sağlayan yöntemlerdir.
    • ATLAS (Automatically Tuned Linear Algebra Software) projesi, deneysel teknikler uygulanarak taşınabilir performans sağlamak üzere yürütülmekte olan bir araştırma çalışmasıdır. Şu anda, taşınabilir özellikte verimli bir BLAS uygulaması için C ve Fortran77 arabirimleri sağlar.

  • IBM Journal of Research and Development yayının bu basımı BlueGene/L konusunu ele alır.

  • Kendi kümenizi oluşturun:
  • developerWorks Linux zone sayfasında Linux geliştiricilerine yönelik kaynaklar yer alır.


Ürün ve teknoloji edinme

Tartışma

Yazar hakkında


Aditya Narayan, Kanpur'daki Indian Institute of Technology'de Fizik alanında lisans ve lisansüstü eğitim almıştır ve QCD Microsystems'i kurmuştur. Windows ve Linux'un iç işleyişi, WebSphere ve J2EE ve .NET gibi kurumsal platformlar konusunda uzmandır. Aditya çoğunlukla New York'ta yaşamaktadır. Aditya Narayan'a aditya_pda@hotmail.com adresinden erişebilirsiniz.

Görüşler

0
tongucyumruk
Sıradaki belge için ilk isteği ben yapayım: Develop your own filesystem with FUSE
0
anonim
İlk yazının sonunda istemiştim. Yine istiyorum. İsteyenin bir yüzü hesabı :) Bu yazını üstüne bir grid computing makalesi ne güzel gider diyorum. İki önerim var birisi buradaki web servisleri ile grid computing makalesi (4 bölüm) . Diğeri de burdaki var olan bir uygulamanın nasıl grid üzerinde çalıştırılabileceğini anlatan makale.
0
simor
Açık konuşacağım, cakbaşında mükellef bir sofradan kalkmış kadar mutluyum. Tatlı bile yiyecek halim kalmadı. Lütfrn paket yapın eve götüreceğim. Ben birkaçay bunları eritmek için kovuğuma çekilmek istiyorum.

Sadece eşekkür etmek faydasız. Ancak güzel projeler üreterek teşekkür edilebilir bence.
Görüş belirtmek için giriş yapın...

İlgili Yazılar

UNIX Dilinde Konuşma, Bölüm 5: Veriler, veriler her yerde!

butch

IBM Türkiye ve Fazlamesai.net işbirliği ile dilimize kazandırılan yeni bir IBM developerWorks makalesi ile karşınızdayız. Diğer makalelere buradan ulaşabilirsiniz.

Makalenin özgün haline bu adresten ulaşabilirsiniz.

developerWorks: Ajax Üzerine Ayrıntılı Bir İnceleme, Bölüm 1

butch

Bilişim camiasının önemli ve değerli bilgi kaynaklarından biri olan, yayımladığı özgün makalelerle prestijli bir site sıfatını fazlası ile hak eden IBM developerWorks, pek çok durumda referans olarak gösterilen bir yer. Artık IBM developerWorks anadilimizde, Türkçe makalerle yazılımcılara ve bilişim uzmanlarına seslenecek. FM ve IBM Türkiye işbirliği ile Türk diline kazandırılan ve düzenli olarak çıkacak developerWorks makalelerinin ilkini yılbaşı hediyesi olarak sunmaktan ötürü sevinçliyiz.

Not: Çevirilecek makaleler sizden gelecek öneriler doğrultusunda belirlenecek.

Ajax ve XML: Beş adet genel Ajax kalıbı

tongucyumruk

IBM Türkiye ve Fazlamesai.net işbirliği ile dilimize kazandırılan yeni bir IBM developerWorks makalesi ile karşınızdayız. Diğer makalelere buradan ulaşabilirsiniz.

Makalenin özgün haline bu adresten ulaşabilirsiniz.

Sürdürmeler ve gelişmiş akış denetimi

butch

IBM Türkiye ve Fazlamesai.net işbirliği ile dilimize kazandırılan yeni bir IBM developerWorks makalesi ile karşınızdayız. Diğer makalelere buradan ulaşabilirsiniz.

Makalenin özgün haline bu adresten ulaşabilirsiniz.

GTK+ ile ilgili temel bilgiler, Bölüm 1: Neden GTK+ kullanılmalı?

butch

IBM Türkiye ve Fazlamesai.net işbirliği ile dilimize kazandırılan yeni bir IBM developerWorks makalesi ile karşınızdayız. Diğer makalelere buradan ulaşabilirsiniz.

Makalenin özgün haline bu adresten ulaşabilirsiniz.