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
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
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-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.