×
Yeni bir madde oluştur
Sayfa başlığınızı buraya yazın:
We currently have 15 articles on UHeM Wiki. Type your article name above or create one of the articles listed here!



    UHeM Wiki
    15Maddeler

    İşlemci (CPU), Çekirdek (core), Soket

    Günümüzde bir işlemci (CPU) paketi çok sayıda (4 ila 32, ve hatta daha fazla) işlem yapan birim içermektedir. Bu birimlere çekirdek (İngilizce core) denir. Bu işlemci paketinin, Anakart (mainboard) üzerinde takıldığı yuvaya ise, soket adı verilmektedir. Pratikte, işlemci (CPU) ifadesi de çoğu zaman çekirdek (core) ile aynı anlamda kullanılmaktadır, çünkü kullanıcı açısından fiziksel işlemci paketinin kendisinden çok, içerdiği çekirdek (core) daha önemlidir.

    Önbellek (cache)

    İşlemci paketlerinin içerisinde çekirdekler (core) dışında, ayrıca önbellek (cache) adı verilen ve bilgisayarın normal hafızasına (RAM, memory) göre, çok daha hızlı (4-100 kat daha hızlı), fakat çok daha küçük olan hafızalar da bulunmaktadır. Günümüz işlemcilerinde bu önbellekler, birden fazla sayıdadır. İşlemci çekirdeğine (cpu, core) yakınlaştıkça küçülüp, hızlanan bir hiyerarşi içinde yerleştirilmişlerdir. En yakın olanına, L1 cache, sonrakine L2 cache, ve en son olarak L3 cache şeklinde adlandırılırlar.


    Cache-Miss

    Önbellekler, çok daha yavaş olan bilgisayar hafızasındaki bilgilerin bir kopyasının bu alanlara kopyalanması ve işlemci ihtiyaç duyduğunda hızlıca işlemciye gönderilmesi amacıyla kullanılır. İşlemcinin ihtiyaç duyduğu bir bilgi öncelikle L1 cache'de aranır. Bulunamazsa daha yavaş olan L2 cache'de aranır. Yine bulunamazsa L3 cache'den istenir. Tüm önbelleklerde yoksa, son olarak hafıza (RAM, memory)'dan getirilir. Bu önbellekte bulamamaya, cache miss denir. İşlemciye çok zaman kaybettiren bir işlemdir. Programlar cache miss olmayacak şekilde geliştirilirlerse, çok daha hızlı çalışırlar.

    Hafıza (memory)

    Bilgisayarda çalışan programlar ve ihtiyaç duydukları tüm veriler, hafıza (memory) denilen bir donanım üzerinde bulunmalıdır. Bu donanımın özelliği, sakladığı verileri, ihtiyaç duyulduğunda, disk ve ağ haberleşmesine göre çok daha hızlı bir şekilde işlemci yada diğer donanımlara gönderebilmesidir. Hafıza, disk'e göre çok daha küçük boyuttadır ve elektriği kesilince (bilgisayar kapatılınca) içerisindeki bilgiler kaybolur.


    Disk (harddisk)

    Hafızanın (memory) aksine, disk (harddisk) bilgisayar kapatılınca içerdiği bilgiler kaybolmayan ve hafızaya göre çok daha ucuz ve büyük kapasiteli bir bilgi saklama donanımıdır. Günümüzde hareketli parçaları olmayan, tamamen elektronik olarak veri saklayan SSD isimli türleri de oldukca yaygındır. Bu tipdeki diskler, hareketli parçaları olan disklerden daha hızlıdır. Diskler çok daha büyük kapasitelere sahip olsalar da, hafızaya kıyasla çok yavaştırlar (~10.000 kat kadar).


    Swap, Paging

    Çalışacak her programın ve kullanacağı verilerin, hafızada bulunması gereklidir. Ancak Hafıza (memory), pahalı ve küçük boyutludur. Hafızadan çok daha yavaş olan diskler ise büyük boyutlardadır. Bir işletim sistemi çalıştırması gereken programları ve onların verilerini tutacak büyüklükte hafızaya sahip değilse, hata verip, programı sonlandırmak yerine, bunların bir kısmını geçici olarak diskte tutmaya karar verebilir. Bu verilerin tutulduğu, Diskdeki hafıza gibi kullanmak için ayrılan disk bölümüne swap adı verilir. Hafızada durması gereken veriler swap alanında geçici olarak saklanabilir, ancak işlemci diskteki verileri kullanamaz. İşlemcinin ihtiyaç duyduğu veriler ve programlar swap'tan (diskten) yeniden hafızaya yüklenmelidir. Hafızaya bu verilerin taşınabilmesi için, bir kısım başka program ve/veya verinin de swap alanına taşınması gerekecektir. Bu şekilde işletim sistemi, anlık olarak kullanmadıklarını swap alanına atarak hafıza boşaltır. Boşalan yere swap alanından kullanacağı program ve verilerini yükler. Bu işleme paging denir. Paging sayesinde, işletim sistemi mevcut hafıza miktarından çok daha fazla hafıza gerektiren programları çalıştırabilir.

    Ancak, disk hafızadan yaklaşık 10.000 kat daha yavaş olduğu için, üstelik her hafızaya yükleme işlemi için, bir de hafızadan diske yazma şeklinde iki sefer okuma yazma yapılması gerektiğinden, aktif olarak swap kullanımı (paging), programların binlerce kat daha yavaş çalışmasına yol açabilir. Çoğu HPC uygulaması için bu şekilde bir çalışma kabul edilemez bir durumdur.

    İşletim sistemleri (windows, linux)

    İşletim Sistemi (operating system), bilgisayardaki donanımlar ve programlar arasında standart bir ara katman oluşturan, onları yöneten ve ihtiyaçları karşılayan bir grup programdır. İşletim sisteminin oluşturduğu bu stardart ara katman sayesinde programlar, bilgisayardaki donanımların alt seviye işlemlerini bilmeden, bilgisayardaki kaynakları güvenle kullanabilirler, ve bu sayede bir program bir çok farklı donanım üzerinde çalışabilmektedir. Bunun sonucunda, Programlar donanımlara değil, işletim sistemine bağlı çalışmaktadırlar. Windows işletim sistemi için yazılan programlar, windows ile konuşabilen ve windows işletim sisteminin sunduğu hizmetleri bekleyen programlardır. Aynı şekilde, linux programları ise linux ile konuşabilen ve linux işletim sisteminin sunduğu hizmetleri bekleyen programlardır. Doğal olarak windows için yazılan (derlenen) bir program, linux işletim sisteminde çalışmayacaktır.


    Thread, Process

    İşletim Sisteminde, kendi başına çalışabilen iş parçacığına thread (thread of execution) denir. Eskiden programların çoğunda bir thread mevcut idi. Günümüzde bu durum değişmiştir, bir çok program birden fazla thread çalıştıracak şekilde yazılmaktadır.

    Keza, günümüz işletim sistemleri bir çok programı da aynı anda çalıştırabilmektedir. Bir çok programın, aynı bilgisayarın işlemci-hafıza gibi kaynaklarını birbirleri ile etkilenmeden kullanabilmesi için, işletim sistemleri her programa kendilerine özel sanal bir hafıza haritası (virtual memory) oluşturur. Programlar sanki tüm hafıza kendilerine aitmişcesine bu sanal hafızayı kullanırlar. Bu sanal hafıza katmanının oluşturduğu kendi başına çalışabilen programcığa process denir. Bir process'in içerisinde bir yada daha fazla thread bulunabilmektedir. Şayet birden fazla thread mevcut ise tüm bu thread'ler aynı sanal hafızaya erişebilirler.


    Paralel Çalışan Programlar

    Aksine bir gayret gösterilmediği sürece, programlar seri olarak çalışırlar. Bu tarz programlarda bir process ve o process'i oluşturan bir thread mevcuttur. Bu ise bir programın bilgisayardaki sadece bir işlemciyi (çekirdeği) kullanabileceği anlamına gelir. Bilgisayardaki birden fazla işlemciyi aynı anda kullanabilmek için, yapılması gereken işleri birden fazla parçaya ayırıp, o parçaların her birinin başka bir thread yada process olarak çalışmasını sağlamaktır.


    MPI, OpenMP Programları

    Eğer bir paralel program, paralel çalışmak için bir process içerisinde birden çok sayıda thread içerecek şekilde yazıldı ise bu tarz programlara ortak hafızalı (shared memory) paralel program denir. Çünkü, thread'ler bir process'i paylaştığı için tümü aynı sanal hafıza haritasını kullanır ve bu sayede birbirlerinin verilerine sınırlama olmadan erişebilirler. Tüm thread'lerin aynı hafızaya erişmesi gerektiği için, hepsinin aynı bilgisayarda olması da bir zorunluluktur. Bu tip programlama için en yaygın kullanılan model, openmp modelidir.


    Paralel çalışan bir program, şayet birden çok process içerecek şekilde yazıldı ise, bu programa dağıtık (distributed) paralel program denir. Çünkü, programın her bir process'i kendine ait bir sanal hafıza haritasına sahip olduğu için, aslında bu process'ler birbirlerinin verilerine doğrudan erişemezler. Hatta aslında aynı bilgisayarda çalışsalar bile sanki tamamen farklı bir bilgisayardalarmış gibi birbirlerinden bağımsızdırlar. Zaten tek bir sanal hafıza haritası kullanan çok thread'li modele göre avantajı da budur. Bu sayede bu processler ister aynı bilgisayarda, isterse farklı bilgisayarlarda çalıssınlar, sonuç değişmez. Dağıtık programlar bir çok bilgisayarı aynı anda kullanabildikleri için, çok sayıda (milyonlarca) işlemci kullanabilirler. Bu tip programlama için en yaygın kullanılan kütüphane (library), mpi yazılımıdır.


    Executable (.exe), Binary, Betik (Script)

    Bilgisayar programları, bilgisayarın anlayacağı şekilde yazılmış iş listeleridir. İşlemci bu iş listesindeki komutları, iş listesindeki sıra ile yapar. Bilgisayarlar ikilik sayı sistemi ile yazılmış (binary) sayısal komutları anlayabilmektedir. İnsanlar ise yazı karekterleri ile yazılmış ifadeleri anlayabilmektedirler. İnsanların okuyup yazabildikleri ifadelerden oluşan iş listesini (kod), bilgisayarın anlayabileceği ikilik sistemde sayısal komutlara tek seferde dönüştürüp, sonuç listeyi bir dosya olarak kaydetmeye derleme denir. Derlenmiş, çalışabilir durumdaki hazır, ikilik sistemdeki sayısal iş listesine executable yada kısaca exe denmektedir.


    Bir başka seçenek de, iş listesini (kod), bilgisayarın anlayabileceği ikilik sistemde sayısal komutlara tek seferde dönüştürmek yerine; satır satır ihtiyaç oldukca çevirip, dosyaya kaydetmeden çalıştırmaktır. Bu şekilde çalıştırılmak üzere yazılmış kodlara betik (script) denir. Betikler derlenmez, fakat interpreter denilen bir program aracılığı ile satır satır çalıştırılırlar.

    Yol (Path)

    Linux işletim sisteminde, tüm dosya (file), dizin (directory), ve donanımlar bir ağacın dalları gibi birbirleri ile bağlantılı bir hiyerarşik yapı içinde konumlandırılmıştır. Belli bir dosya yada dizinin bu ağaç yapısındaki yerini tarif eden ifadeye yol (path) denir. Ağacın köküne karşılık gelecek şekilde yol tarifinin başlangıcı da kök dizin (root directory) olarak adlandırılır ve tek başına bir / karakteri ile ifade edilir. Bir dosya yada dizinin yerini (path) tarif etmek için, kök dizinden başlayarak, tüm dizinler, aralarında / karekteri konularak yanyana yazılır. Mesela /okyanus/users/mercan/liste.txt ifadesi bize; / kök dizininde bulunan okyanus dizininin içinde bulunan users dizininin içindeki mercan dizinindeki liste.txt dosyası demektir. Bu şekilde kök dizinden başlayıp, tüm dizinleri söyleyerek yazılan yola (path), tam yol (full path) denir.


    Bazen ise bulunulan dizine göre de path verilebilir. Mesela, ./data/inputs.cvs ifadesi, (bulunduğumuz dizin /okyanus/users/mercan/ ise), /okyanus/users/mercan/data/inputs.cvs ifadesi ile aynıdır. Bu tarz path yazımına göreceli yol (relative path) denir.


    CPU-saat, işlemci-saat, çekirdek-saat

    UHeM'de kullanım süresi cpu-saat (yada başka şekillerde ifade edersek işlemci-saat yada çekirdek-saat) ile ölçülmektedir. Bu değer şu şekilde hesaplanmaktadır: Mesala işiniz her biri 40 çekirdek (core) içeren 3 makinayı 5.2 saat boyunca meşgul etsin. Bu durumda cpu-saat hesabı:

     40 çekirdek x 3 makina x 5.2 saat = 624 cpu-saat
    

    şeklinde hesaplanacaktır. Bir makinanın meşguliyeti ile kast edilen slurm'e iş olarak verdiğiniz betiğin makinalarda çalışmaya başladığı saat ile çalışmasının bitip, sonlandığı saat arasındaki farktır. Benzer şekilde interaktif çalışmak için slurm'den makina talep ettiğinizde, Size makina atandığı andan, Sizin makinayı serbest bırakarak, işi sonlandırdığınız ana kadar geçen sürede istediğiniz makinaların tüm işlemcileri kullanılmış gibi cpu-saat hesaplanır.


    Sariyer login node'una yada vpn'e bağlandığınız yada bağlı kaldığınız süre hiç bir şekilde bu cpu-saat hesabına dahil değildir. Sariyer login node'undaki Scp, kopyalama, derleme vb. komutlar/işlemler de hesaba dahil değildir.


    Burada dikkat edilmesi gereken, kaç işlemciyi (çekirdeği) kullandığınızın değil, kaç makinayı meşgul ettiğinizin dikkate alınacağidır. Yani, işiniz sadece 1 çekirdek kullanan seri bir iş bile olsa, meşgul edilen makinanın kaç çekirdeği varsa (28 yada 40, hatta 128 bile olsa), tüm bu çekirdekler cpu-saat hesabında kullanılmış olarak hesaba dahil edilecektir.