Orca ile süreç numaralarının ekrana yazdırılması

30 Mayıs 2022

Orca programlama modelinde birden fazla dağıtık işletim sistemi süreçleri bulunmaktadır. Bu süreçlerden bir tanesi yönetici süreci; diğer süreçler ise sayısı bir veya birden fazla olan ve asıl hesaplamayı yürütmekle görevli işçi süreçleridir. Sistemin tasarımı gereği yönetici süreç aynı zamanda işçi süreçlerinin görevini de yerine getirmektedir. Orca bu süreçler arasındaki iletişimi MPI standartında bulunan fonksiyonları kullanarak yapmaktadır. Bu makalede Orca kütüphanesinde ki rpc-make fonksiyonunu kullanarak, her işçi sürecinin kendi eşsiz numarasının ekrana yazıldığı basit bir paralel uygulama geliştireceğiz.

Orca kütüphanesinde fonksiyonlar üç sınıfa ayrılmaktadır. Bunlar rpc-worker-process-id ve rpc-worker-process-size gibi eşsiz süreç numarasını ve sistemde bulunan tüm işçi süreçlerinin sayısını döndüren yardımcı fonksiyonlar; rpc-start ve rpc-finalize gibi dağıtık hesaplama ortamını oluşturan ve sonlandıran önyükleme fonksiyonları, ve rpc-make, rpc-apply-bcast, rpc-apply-scatter gibi hesaplamaları gerçekleştiren hesaplama fonksiyonlarıdır. Örnek kodda kullanılan Orca fonksiyonlarının açıklamaları aşağıda verilmiştir:

(rpc-start) ⇒ void
Dağıtık hesaplama ortamını yükler. rpc-start yönetici süreç dahil tüm süreçlerin çalıştırması gereken bir fonksiyondur. Fakat fonksiyon süreç türüne göre farklı işlemler yürütmektedir. Mesela bir işçi süreç bu fonksiyonu çağırdığında bir komut döngüsü içine girer ve hiç bir zaman rpc-start fonksiyonunun ötesine geçmez. Diğer taraftan bir yönetici süreç rpc-start fonksiyonunu çağırdığında, hesaplama yapan çekirdek kodu koşturur. Burada önemli bir konu, sistem MPI standartına benzer olarak süreçleri tekil biçimde tanımlamak için her bir sürece eşsiz bir sayı tayin etmektedir. Bu sayı yönetici sürecinde 0 iken işçi süreçlerinde 0’dan başlayarak artarak devam eder. Tekrar hatırlatalım, yönetici süreç aynı zamanda işçi süreci gibi iş yapmaktadır. Bu yüzden 0 numaralı süreç hem işçi süreci hem de yönetici sürecidir.
(rpc-finalize) ⇒ void
Hesaplama ortamını sonlandırır. rpc-finalize fonksiyonu çalıştırıldığında yönetici süreç işçi süreçlerine ‘sonlandır’ komutu yollar ve tüm süreçler hesaplamayı sonlandırır. Bir diğer ifade ile bu fonksiyon çalıştırıldıktan sonra süreçler işletim sisteminden çıkış yapar.
(rpc-worker-process-id) ⇒ integer
Her işçi sürecine atanmış eşşiz süreç numarasını döndürür. Bu numara 0’dan başlar ve tüm süreçlerin sayısının toplamının 1 eksiğine kadar gider.
(rpc-worker-process-size) ⇒ integer
Hesaplamaya katılan tüm işçi süreçlerinin toplam sayısını döndürür.
(rpc-make <symbolic expression>) ⇒ list
Fonksiyona parametre olarak verilen sembolik kodun işçi süreçler tarafından müşterek olarak çalıştırılmasını sağlar. Sembolik kod Scheme dilinin yazım kuralından dolayı ham biçimde tırnak arasında yazılır. Bununla birlikte Orca kütüphanesi, tırnak içinde kodun yazımına gerek bırakmayan daha yüksek seviye fonksiyonlara da sahiptir.

rpc-make fonksiyonuna verilen kod tüm işçi süreçlere gönderilir ve her işçi süreç kodu kendi bellek sınırları içinde çalıştırır. Toplam hesaplama sonucu işçi süreçlerinin süreç numarasına göre sıralanmış bir şekilde yönetici sürece liste veri yapısı içinde gönderilir.

Aşağıda verilen örnekteki çekirdek kod (rpc-print-process-ids.scm) basit bir şekilde tüm işçi süreçlerinin numaralarını ekran çıktısına yazdırmaktadır. Bu örnek özelinde rpc-make fonksiyonuna verilen (process-id-message) sembolik kodu tüm işçi süreçlerine gönderilmekte ve tüm işçi süreçleri tarafından çalıştırılmaktadır. Gönderilen kod içinde her işçi süreç paralel bir biçimde süreç numarasını içeren karakter dizisini oluşturur ve yönetici sürece gönderir. Son olarak yönetici süreç toplam sonucu ekrana basar.

(use-modules (orca))

(define (process-id-message) (format #f "süreç ~a" (rpc-worker-process-id)))
(rpc-start)
(format #t "Yönetici süreç olarak işçi süreçlerinden bu veriyi aldım: ~s ~%" (rpc-make '(process-id-message)))
(rpc-finalize)

mpirun komutu ile 4 işçi süreç oluşturuyoruz:

mpirun -n 4 ./rpc-print-process-ids.scm

Ekran Çıktısı:

Yönetici süreç olarak işçi süreçlerinden bu veriyi aldım:  ("süreç 0" "süreç 1" "süreç 2" "süreç 3")

Orca kütüphanesi ile yazılan daha fazla örneğe ulaşmak için lütfen buraya bakınız.


Telif Hakkı © 2020, 2021, 2022 Ahmet Artu Yıldırım.
E-Posta: <ahmet et artulab nokta com> | GPG Anahtar Dosyası
Bu sitede bulunan tüm bilgilerin kopyalama, dağıtım ve değiştirme hakkına Creative Commons Noderivs license version 3.0 or later lisansı altında izin verilmiştir.