Bu örneklerde paralel programlama için MPI (Message Passing Interface) kullanılmıştır. Aşağıda kullanılan temel MPI fonksiyonları ve parametreleri açıklanmıştır.
MPI fonksiyonlarını kullanabilmek için gerekli olan kütüphane dosyasıdır.
- İşlev: MPI ortamını başlatır.
- Parametreler:
&argc, &argv
: Komut satırı argümanları. MPI'nin başlatılması için gereklidir.
- Not: Tüm MPI programları bu fonksiyonla başlamalıdır.
- İşlev: Mevcut işlemcinin (process) sırasını (rank) öğrenir.
- Parametreler:
MPI_COMM_WORLD
: Tüm işlemleri kapsayan iletişim grubu.&rank
: İşlemcinin rank bilgisinin saklanacağı değişken.
- Not: Rank, işlemcinin benzersiz ID'sidir ve 0'dan başlar.
- İşlev: Toplam işlemci (process) sayısını öğrenir.
- Parametreler:
MPI_COMM_WORLD
: İletişim grubu.&size
: Toplam işlemci sayısını tutan değişken.
- İşlev: Bir işlemciden (genellikle 0. rank) tüm işlemcilere veri yayar (broadcast).
- Parametreler:
&number
: Yayılacak veri adresi.1
: Gönderilecek eleman sayısı.MPI_INT
: Veri tipi (int).0
: Veriyi gönderen işlemcinin rank'ı.MPI_COMM_WORLD
: İletişim grubu.
MPI_Scatter(A, rows_per_proc * N, MPI_DOUBLE, sub_A, rows_per_proc * N, MPI_DOUBLE, 0, MPI_COMM_WORLD);
- İşlev: Ana işlemcideki büyük diziyi (A) parçalara bölerek her işlemciye parça gönderir.
- Parametreler:
A
: Gönderilecek veri dizisi (ana işlemcide).rows_per_proc * N
: Her işlemciye gönderilecek eleman sayısı.MPI_DOUBLE
: Veri tipi (double).sub_A
: Alıcı işlemcinin alacağı veri dizisi.rows_per_proc * N
: Alınacak eleman sayısı.MPI_DOUBLE
: Veri tipi (double).0
: Veriyi gönderen işlemcinin rank'ı.MPI_COMM_WORLD
: İletişim grubu.
- İşlev: Tüm işlemcilerin bu noktada senkronize olmasını sağlar.
- Parametreler:
MPI_COMM_WORLD
: İletişim grubu.
- Not: Bu fonksiyon çağrılana kadar hiçbir işlemci ilerlemez.
MPI_Gather(C, rows_per_proc * N, MPI_DOUBLE, result, rows_per_proc * N, MPI_DOUBLE, 0, MPI_COMM_WORLD);
- İşlev: Her işlemciden alınan parçaları ana işlemcide (0. rank) birleştirir.
- Parametreler:
C
: Gönderilecek veri (her işlemcide).rows_per_proc * N
: Gönderilecek eleman sayısı.MPI_DOUBLE
: Veri tipi (double).result
: Ana işlemcide toplanacak veri dizisi.rows_per_proc * N
: Alınacak eleman sayısı.MPI_DOUBLE
: Veri tipi (double).0
: Verileri toplayan işlemcinin rank'ı.MPI_COMM_WORLD
: İletişim grubu.- İşlemci 0: 3.14
- İşlemci 1: 2.71
- İşlemci 2: 1.41
- MPI_Gather sonrası root işlemcide şöyle bir dizi olur: [3.14, 2.71, 1.41]
- İşlev: Tüm işlemcilerdeki
mypi
değerlerini toplar (MPI_SUM
) ve sonucu ana işlemciye (rank 0) gönderir. - Parametreler:
&mypi
: Gönderilecek yerel değer.&pi
: Toplanan sonucun depolanacağı değişken (sadece rank 0 için anlamlı).1
: Eleman sayısı.MPI_DOUBLE
: Veri tipi.MPI_SUM
: Toplama işlemi.0
: Sonucun gönderileceği işlemci rank'ı.MPI_COMM_WORLD
: İletişim grubu.- Gather örneğindeki değerler için : MPI_Reduce sonrası root işlemcide sadece toplamları yani 7.26 olur.
- İşlev: MPI ortamındaki gerçek zamanı (wall clock time) saniye cinsinden döndürür.
- Kullanım: Performans ölçümü için başlangıç ve bitiş zamanı alarak hesaplama süresi bulunabilir.
- İşlev: MPI ortamını sonlandırır.
- Not: Programın sonunda çağrılmalıdır, bu fonksiyon sonrası MPI fonksiyonları kullanılamaz.