süper bilgisayar yapma fikri

Başlatan zeusmaster, 10 Ekim 2011 - 14:29:50

« önceki - sonraki »

0 Üyeler ve 2 Ziyaretçi konuyu incelemekte.

burk

Alıntı yapılan: bahdem - 30 Nisan 2012 - 10:44:05
mili kelvin mertebesinde yaklaşık olarak -273.143 santigrat derece :)
Bence yaklaşık değil, tam dereceyi vermişsiniz @bahdem. ;)

zembela

Böyle bir şey mümkün fakat sizin istediğiniz tarzda mümkün değil (çok özel donanımlar haricinde (süper pcler gibi) ). Şöyle açıklayayayım: Ne Linux ne de başka işletim sistemi birkaç pc donanımının birbirine bağlanması sonucu hepsinden birden güç alarak çalışamaz. Bu donanımın bir kısıtlamasıdır. Fakat bazı yazılımlara ağdaki diğer bilgisayarları tanıtatarak, diğer bilgisayarları da aynı işlem için kullanabilmenizi sağlar fakat bu olay ilk satırda yazdığım cümlelerden çok farklı. Örneğin hesap makinesi büyük bir çarpma işlemi yapacak. Bu çarpma işlemini ağdaki diğer bilgisayarları kullanarak şu şekilde yapar: Çarpanlardan birini çarpanlarına ayırır, her 2 çarpanı farklı makineye soket açarak yollar. Ağdaki makinelerde aynı yazılımı içerenler, o soketten aldığı çarpım işlemini yapar ve cevabı ana makineye yollar. Yani bu bir nevi proxy server üzerinden başka bir siteye gitmeye benzetilebilir. Siz burda proxy bilgisayarları kullanıyorsunuz fakat hep bir aracı yazılım sayesinde bunları yapıyorsunuz. Yani direk olarak o makinelere kablo ile bağlı da olsanız onların cpu ve ram'ini direk olarak değil ancak dolaylı yoldan kullanıyor olabiliceksiniz.

Yani yapacağınız her araştırma için özel yazılım yazmanız gerekecektir (Fakat önceden yazılmış programlar varsa tabiki onları kullanabilirsiniz). Fakat böyle yazılımı yazmanız gerçekten çok zahmetlidir. Paralel cloud computing bazında bir yazılım yapmış olursunuz ki bu çok ama çok kafa yorar :) Ama tahmin ediyorum matlab, blender gibi bilimsel yazılımlar ağdaki biglisayarları kullanabilmeniz için özellikler içeriyor olmalı (en azından öyle tahmin ediyorum).

Sherlock Holmes

Belki başlıktaki verilen bağlantılar içerisinde mevcuttur ama Scientific Linux dağıtımı Cern laboratuvarlarında kullanıldığı bilgisi rastlanabilir durumda.
dağıtım ile ilgili BELGE...
içerisindeki
Parallel computing on clusters Sometimes called "Beowulf" clusters Mini-supercomputers
kısım, konu ile bağdaşmaktadır.

travego0403

Alıntı yapılan: burk - 30 Nisan 2012 - 10:45:51
Alıntı yapılan: bahdem - 30 Nisan 2012 - 10:44:05
mili kelvin mertebesinde yaklaşık olarak -273.143 santigrat derece :)
Bence yaklaşık değil, tam dereceyi vermişsiniz @bahdem. ;)

Fizikçi alışkanlığındandır. Fizikte sonuçlar hata hesapları ile birlikte verilir. 100+-1 gibi(artı ve eksi üst üste olacak.) Birde Kuantum Fiziği söz konusu olunca kesin konuşmak olmaz. :)
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

burk

Noktadan sonra 3 basamak benim dünyam için oldukça kesin bir sonuç ifade ediyor @travego0403. :) Doğrudur tabi, kuantum fiziği apayrı bir dal. :)

zeusmaster

Alıntı yapılan: burk - 30 Nisan 2012 - 10:45:51
Alıntı yapılan: bahdem - 30 Nisan 2012 - 10:44:05
mili kelvin mertebesinde yaklaşık olarak -273.143 santigrat derece :)
Bence yaklaşık değil, tam dereceyi vermişsiniz @bahdem. ;)
O sıcaklıkta kontaklar bile çalışması kesin değer vermediği için yaklaşık ifadesini kullandim :) 4.2 K den aşağıya doğru hata artar :)
Up and Running...

ct

Alıntı yapılan: bahdem - 30 Nisan 2012 - 10:27:39
Bu forumdan o kadar çok faydalanıyorum ki emeği geçen herkese teşekkür ederim. Ayın 2 sinde (bu çarşamba) Fatih üniversitesinde bu işlerle uğraşmış bir hoca ve istanbul üniversitesi bilgisayar müh. bölümü hocaları ile görüşüp gerekli bir yol haritası oluşturulacak. Ben istanbuldayım ve dahil olmak isteyen arkadaşlar varsa bizim laboratuvarda bir toplantı yapalım. Hem daha sağlıklı olur ve bir ivme kazanırız aynı zamanda bir ilke tanıklık etmiş olursunuz :)

Bu görmüş olduğunu sıcaklık değeri tam tamına herşeyin donduğu yerin oralarda :) İşte bu işi başardığımız yeri ve artık bu ülkede bişeylerin yapılabildiğini görmenizi isterim. Gelmek isteyen arkadaşlar ve gruba dahil olmak isteyen arkadaşlar yazarsanız boş günlerinize göre bir gün belirleyelim.

@bahem Türkiye'de değilim maalesef ama alınan kararlar doğrultusunda katkı vermek isterim.

Felâsife

Eğer yanlış anlamadıysam cloud computing yani bulut bilişim konusunda BSD Magazine Nisan ayı sayısının ana konusu olmuş ama tabii ingilizce.
http://www.goksinakdeniz.net/2012/04/bsd-magazine-nisan-2012-says-duyuruldu.html

Birde bizim BSD'lerde Parallel ports olayı var, yani portlar işlemciler için aynı anda çoklu işlem yapmayı destekleyecek şekilde yapılandırılmış.
Tabii bu dediğimin bu konuyla çok alakası yok belki ama make.conf'a eklenen bu iki satır bana aynı anda 2 işlem yaptırıyor(muş)   :D
FORCE_MAKE_JOBS=YES
MAKE_JOBS_NUMBER=2

Nette 2 olan yerin 16 olanını da görmüştüm ki breh breh dedim, benim amd64 çift çekirdeğe 2 yeterli   :)
Maceraya hazır mısın!  Bir BSD almaz mısın?

zeusmaster

@Sherlock Holmes Beowulf clusters ilk aklımıza gelen şeydi aslında ama okulda bu işi bilen hiç yoktu. Sıfırdan bir işe başlayacağız tam işimize yarayan şeyi bulursak boşuna uğraşmamız olacağız.
@zembela hocam aramızda senide görmek isteriz eğer vaktin varsa.
@ct hocam sizde artık ordan yardım edersiniz istediğiniz sürece :)
@Felâsife hocam inceleyeceğim kaynağı. Teşekkür ederim.

İşe biraz daha açıklama getireyim.
1)Tek bir problemi parçalara bölme işi. Örneğin 128x128 lik bir matris var bu hesaplama yapılacak. Bu bir bütünü parçalamak ve tekrar ana makinada sonucu vermek gibi bir şey.
2)1000 farklı problemi 100 makineye ayıracak. Bu makinelerden çözümleri alıp ana makinede asıl sonucu bize verecek. Buradaki 1000 farklı problemden kasıt sadece girdi değerlerinin farklı olmasıdır.

@ironic bana bir kod yazmıştı . Bu kod problemi istediğim adette sırayla çözüyor.
#!/bin/bash

SEC=`yad --form --title 'octopus' \
--field='Ana dizin konumu:DIR' "$PWD" \
--field='Eşzamanlı çalışacak octopus sayısı:NUM' '1!1..25!1' \
--field='Octopus grupları arası bekleme süresi (dk):NUM' '1!1..180!1' \
--button='gtk-execute:0' --button='gtk-quit:1' \
--fixed --sticky --mouse`


case $? in
  0)
    IFS="|"
    sec_listesi=()

    for i in ${SEC}
    do
      sec_listesi+=("$i")
    done
    unset IFS;;
  *)
    exit 0;;
esac

cd "${sec_listesi[0]}"

octopus_sayisi=$(sed -n 's:[.|,].*::p' <<<${sec_listesi[1]})
bekleme_suresi=$(sed -n 's:[.|,].*::p' <<<${sec_listesi[2]})


function octopus_calistir() {
if [[ $(pgrep octopus | wc -l) -lt $octopus_sayisi ]]
then
cd "$1" && octopus && cd - &>/dev/null
else
sleep "${bekleme_suresi}m" ; octopus_calistir $1
fi
}

for klasor in *
do
octopus_calistir ${klasor}
done



örneğin bu kodun içine eğer "git şu makinede şu problemi çöz" eklenirse 2. dediğim olmuş olacak aslında.
1. dediğim içinse kullandığımız programları tamamen sıfırdan kodlayarak paralel hale getirmek gerek sanırım.
Up and Running...

heartsmagic

@bahdem, farklı makinelere uygulama gönderilir de "cluster" meselesi öyle olmuyor sanırım. Paralel hesaplama gibi şeyler için bence CERN'de yapılan olayı araştırın siz. Hazırı varken yenisini yazmak veya yeni ortamı oluşturmak bence daha zahmetli olur :) Eğer belgelendirmesi vs. varsa başka hiçbir dağıtıma bulaşmadan doğrudan Scientific Linux üzerinde denersiniz her şeyi. Gerçi evet onun için de ek mesai yapmanız gerekir, en azından aranızdan bir grup yapmalı :)
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

WhiteScars

Bahdem açıkcası sende kendimi görüyorum. Fakat biraz daha yolun başındasın. Öncelikle sana biraz cloud computing hakkında düşündüklerimi nasıl yapılabileceğini anlatayım.

Öncelikle yapacağın hesaplamaların matrixler üzerinde olduğunu farzediyorum. Matrixler üzerinde uygulanabilecek algoritmalar paralel olarak çalıştırılabiliyorsa cluster üzerinden yapabilmen mümkün. Örneğin basitçe matrix çarpma işlemini ele alırsak, A matrix'inin 1. kolonunu B matrix'inin 1. sutunu ile çarpman gerekiyor. Mesela bu matrix'i paralel olarak işlemek istiyorsan kabaca aşağıdaki gibi bir yaklaşım çözüm yöntemi olabilir.

1. Matrix'i genel bir data havuzunda tutman gerekiyor. (Bu bir database olabilir, yada bir web servis yada soket ile çalışan bir servis olabilir) Buradaki amaç cloud içindeki bir client bana A matrixinin 1. kolonunu ver dediği zaman data havuzu bunu hızlı bir şekilde verip client'e ulaştırması gerekiyor.

2. Client aldığı kolon ve row'u kendi üzerinde çarpıp, neticesini data havuzuna göndermesi gerekiyor.

3. Bütün clientlerin işi bittiğinde çarpma işleminin sonucu data havuzunda olmuş oluyor.

Bu çerçevede baktığın zaman işi paralel yapmış oluyorsun, fakat iş bu yukardaki 3 maddedeki kadar kolay değil; Şöyle problemler ortaya çıkıyor

1. Network üzerinde data kaybı (Özellikle büyük bir cluster olduğunu düşünürsen)
2. Çakışmalar, örneğin 2 client aynı Row ve kolonları alıp işlem yaptı, ve havuzda aynı yere yazmaya çalışması
3. Örneğin data alınırken client ile havuz arasında bağlantı koptu, recovery mekanizması
4. Data client tarafında işlenirken, client öldü, yine recovery mekanizması

gibi konularıda düşünmen lazım.

Büyük matrixler üzerinde çalışma gibi bir durum söz konusu ise, matrixleri sıkıştırıp taşıman, save etmen mantıklı olabilir. Zira 1000x1000'lik bir matrix'i dosyaya double cinsinden 4 precision olarak kaydettiğinizde 350-400 mb gibi bir miktar oluşacaktır. Ki burda matrix'in nasıl bir yapıda olduğuda önemli. Eğer sparse matrix üzerinde işlem yapıyorsan, ben bu konu ile ilgili bir çözüm geliştirdim. Compressed Column Matrix, Compressed Row Matrix gibi yöntemlerle sparse matrixleri ciddi anlamda boyunu küçültebiliyorsun. Bu şekilde küçültülmüş veri saklamak işlemek çoğu zaman daha kolay ve hızlı oluyor.

Öte yandan hadoop güzel bir sisteme benziyor, fakat her projeye uygun bir yapısı olmayabilir. Yaptığınız işlemler açısından kolaylık sağlayacaksa hadoop'u kullanmanı öneririm. Fakat öğrenme periyodu, anlama periyodu, tecrübe etme periyodu derken çok fazla vakit kaybedebilirsin. Öte yandan kendi clustering yapını oluşturmanda aslında çok zor değil. Genel olarak cluster'ın nasıl çalışması gerektiğini vs, belirleyebilirsen implemente etmesi zor bir iş değil.

Sana başlaman için şöyle bir kaç konu önerebilirim.

1. RMI (Remote Method Invocation)
2. DMI (Distributed Method Invocation) - Yukardakine göre biraz daha karışık
3. CORBA, Hadoop (Bunu okumanda yarar var zira CORBA clustering içinde çok fazla duyacağın bir kavram olacak)

Eğer java ile geliştirme yapacaksan RMI ile yapabilirsin. Yada native interface'ler yazı C üzerinden geliştirdiğin DMI backbone'unu java ile de kontrol edebilirsin.

Yüksek lisanstaki tezim, çapraz dilde arama yapabilen bir arama motoru geliştirmesi idi. Bu konuya genel olarak "Information Retrieval" denir. Bu konu ile çalışırken benimde bir çok matrix işleme derdim olmuştu. Bazı testler 17-18 gün sürmüştü. O zamanlarda çözüm olması amacıyla clould computing yapma durumum olmuştu fakat hocam yaptırtmadı :D O kadar derine girmeye gerek yokmuş doktorada onu yaparım demişti.. Fakat ben yolun %80, %90'ını bitirmiştim. O yüzden genel anlamda cluster üzerinde matrixler nasıl işlenebilir bir çok deney yapmıştım. Güzel tecrübe oldu. Fakat master bitince bıraktım çoğunu.

Şimdi de bir GSM firmasında servisler networküne bakıyorum. Ne kadar acınası bi şey insan yıllarını döktüğü konu üzerinde çalışamaması sırf düzgün bir işi olması amacı ile başka alanlarda çalışmak zorunda kalması. Neyse konuyu saptırmak hoş olmaz. Aklıma gelince sinirleniyorum böyle şeyler.
İnsanoğluna bırakabileceğiniz en güzel miras tecrübelerinizdir.

zeusmaster

@WhiteScars, cevabın ve açıklamaların için çok teşekkür ederim :)
UYBHM de yapılacak çalışmanın konuları;

MPI ile Dağıtık Bellek Programlama Çalıştayı İçeriği
Yüksek Başarımlı Hesaplama (YBH) I-II :
•        Yüksek Başarımlı Hesaplama (YBH) nedir?
• UYBMH'de mevcut bilgisayar yapısı
•         Sistemlere nasıl erişiriz?
•         İş teslimi nasıl yapılır ?
•         Login Süreci
•         Mevcut Yazılımlar
Neden Yüksek Başarım? :
•         Paralel programlamaya ihtiyaç duyulma nedenleri
•         Yüksek başarımlı hesaplama kaynaklarına gereksinim nedenleriParalel Programlamaya Giriş
•         Paralel programlama nedir?
•         Dağıtık ve ortak paylaşım bellekli mimariler
•         Paralel hesaplama modelleri
Yüksek Başarımlı Hesaplama (YBH) III-IV :
•         Linux ortamındaki dosya editörleri
•         Kod derleme (Compiling)
•         Make komutu makefile dosyası
•         Hata ayıklama (Debug)
MPI'a Giriş ve MPI Noktadan Noktaya Haberleşme I-IV  :
•         Dağıtık hesaplama programlama ve temellerine giriş
•         MPI'a giriş
•         Basit MPI tabanlı algoritmalar
•         Noktadan noktaya gönderme ve alma kavramları ve örnekleri (uygulamalı)
MPI Toplu Haberleşme I-II ve MPI Uygulamalar I-II :
•         MPI 'da toplu iletişim (collective communication) yöntemleri
•         Toplu haberleşme uygulamaları
MPI Türetilmiş Veri Tipi I-II 
•         Türetilmiş veri tiplerine (derived data types) dayalı MPI programlama
MPI Sanal Topoloji I-II:
•         Haberleşme dünyası (communication world) kavramı
•         Sanal kartezyen topoloji yardımıyla MPI programlama
•         Sanal graph topoloji yardımıyla MPI programlama
Proje 1 -I(Kısmi Diferansiyel Denklemler) :
•         Kısmi Diferansiyeller ve uygulama alanlarının anlatımı
•         Örnek kısmi diferansiyel denklemler
•         Laplace diferansiyel denklemi ve ısı denklemi
•         Örnek Uygulamanın anlatılması 
Proje 1-II (Kısmi Diferansiyel Denklemler) :
•         Sonlu farklar yöntemi ile ısı denkleminin ayrıklaştırılması
•         Sınır koşullarının tanımlanması
•         Seri kod yazılması ve uygulama   
Proje 1-III (Kısmi Diferansiyel Denklemler) :
•         Kodun paralelleştirilmesi
•         Türetilmiş veri tiplerinin, sanal topolojinin ve gruplamanın uygulama için kullanımı
•         Hayalet hücre kavramı
•         Uygulama
Proje 1-IV (Kısmi Diferansiyel Denklemler) :
•         Örnek kodların incelenmesi, uygulama
•         Soru - cevaplar
MPI-2 
•         MPI-2 özellikleri
•         Paralel girdi/çıktı  fonksiyonları (parallel I/O)
•         Uzaktaki hafızaya erişim (remote memory access)
•         MPI'da dinamik süreç yönetimi (dynamic process management)
MPI Ödev Çözümü 
Performans Analizi: Intel Trace Analyzer 
•         Analiz Terminolojisi (Profiling ve Tracing)•        MPI Programlarının Analizi Nasıl Yapılır?
•        Intel Trace Analyzer için MPI Programı Derlenmesi ve Çalıştırılması  (Uygulamalı)
•        Intel Trace Analyzer Arayüzünün Kullanımı (Uygulamalı)
Performans Analizi:, TAU
•         TAU Analiz Araçlarının Kullanımı
•         MPI Programlarının TAU ile Performans Analizi
•         TAU ile MPI Program Analizi için Veri Toplama (Uygulamalı)
•         TAU Görselleştirme Araçlarının Kullanımı (Uygulamalı)
Proje 2 –I (Matris-Matris çarpım algoritmaları) :
•         Matris-matris çarpımının uygulama alanlarının anlatımı
•         Matris-matris çarpımını ile ilgili örnekler
•         Canon algoritması hakkında bilgi
•         Fox algoritması hakkında bilgi
Proje 2-II (Matris-Matris çarpım algoritmaları) :
•         Canon algoritmasının seri kodunun yazılması
•         Fox algoritmasının seri kodunun yazılması
Proje 2-III (Matris-Matris çarpım algoritmaları :
•         Canon algoritmasının paralelleştirilmesi
•         Fox algoritmasının paralelleştirilmesi
Proje 2-IV (Matris-Matris çarpım algoritmaları) :
•         Örnek uygulamalar
Up and Running...

zeusmaster

Herkese merhabalar. Biraz daha fazla kafası karışmış birisi olarak döndüm :)
Öncelikle hemen hemen bütün programlar seri olarak yazılıyor ve biz bunları seri olarak çalıştırıyoruz. Bunun anlamı şudur;
programalar tek çekirdek içinde çalışıyor. Bizim bilgisayarımız 4 çekirdek de  olsa, 8 çekirdek de olsa program seri yazıldıysa tek çekirdek işlemi gerçekleştiriyor ve aralarında fark olmuyor (tabi burada çekirdeklerin çalışma frekanslarının aynı olduğunu düşünüyoruz). O zaman niye biz 4 çekirdekli bilgisayarlar alıyoruz :) Çok sayıda farklı programı daha rahat çalıştırmak için diye düşünüyorum :)
Paralelleştirme işini iki kola ayırabilirim. Bir yazılım boyutu, ikinci olarak ise donanım boyutu.
Yazılım boyutunda asıl soru, istenilen şey paralelleştirme işine uygun mu? Bazen istenilen şeyin kendisi kendiliğinden paralel, bazense paralelleştirme imkanı yok. Dolayısıyla istenilen şey öncelikle irdelenmesi gerekiyor. Diyelim ki uygun, bu seferde ona uygun paralel bir algoritma geliştirmek ve kodlamak gerekiyor. Kodlama işini temelde fortran ve C ile yapabiliriz. Bunun yanında çeşitli kütüphaneler kullanılmakta. Bunlar MPİ ve OPENMP. MPİ farklı bilgisayarlar arasındaki haberleşmeyi sağlayacak, OPENMP ise aynı bilgisayarın çekirdeklerini tek bir işlemi yapmak için kullanacak.
Cluster işi ilk ortaya atıldığında bilgisayarlar üzerinde tek çekirdek vardı. Dolayısıyla mpi her bilgisayardaki tek çekirdeği kullanacak. Buda demek oluyor ki ben dört bilgisayarlık bir cluster oluştursam 4 çekirdekli bir bilgisayarda'kinden daha az performans alacağım. Bunun için cpular üzerinde melez işlemler ortaya çıkmaya başladı. Buda hem mpi hemde openmp kullanılarak kodlamalar yapıldı.
mpi ile kodlamak openmp ye göre biraz daha zor ve karışık :) İkisinin de ayrı ayrı daha iyi olduğu yerler var ama en iyisi bunları ortak kullanmak.
Basit mantıkla 4 çekirdekli 10 bilgisayarı mpı ile birbirine bağlasak 10 çekirdeği kullancağım. Bunu yanında openmp'yi sisteme dahil etsem bu sefer 40 çekirdeği aynı anda kullancağım.
Clusterlar şu nedenlerden dolayı yavaştırlar.
1)  Haberleşmede kaybedilen süre.
2) Çekirdeklerin işlerini bitirip bazen birbirini beklmesi.
Donanım boyutunda ise bilgisayarların birbirine bağlanması ve haberleştirilmesi ve kütüphane dosyaları üzerinde çeşitli ayarların yapılması gerekiyor. Tabi unutmadan birbiri ile haberleşen bilgisayarların ağ üzerinde adreslerinin sabit olması gerekiyor :)

Şimdi asıl can alıcı nokta şu. Biz neden clusterlara ihtiyaç duyuyoruz. İki nedenden dolayı. Büyük hesaplamalarda çok sayıda işlemci kullanmak işlemin süresini kısaltıyor, ikinci olarak da çok büyük belleklere ihtiyacımız var. Bunu da birbiri ile haberleşen bilgisayarların belleklerini ortak kullanarak yapıyoruz. Kafa karıştırıcı noktada aşağıdaki grafik.


Grafikte şu iş yapılmış. Aynı boyuta sahip iki matrix çarpılıyor. Bunlar farklı işlemciler ve bir ekran kartında yapılıyor.
Örnek olarak 5120x5120 boyutundaki iki matrix çarpımı için;

İŞLEMCİLER
intel core2 duo t9550                       : 400,4 sn
Amd phenom II x4                           : 191,03 sn
Intel xenon 33.5 ec2 compute units:58.217 sn
Intel xenon 88 ec2 compute units    :58.217 sn

EKRAN KARTLARI
2 x Nvidia Tesla M2050                     :2.3671 sn
Ati Radeon Hd 5970 x2                    :0.6 sn

Arada çok büyük uçurum olduğu aşikar :)
Biz iki nedenle cluster yapıyorduk. Biri işlemci çekirdeklerini fazlalaştırmak ve işimizi hızlandırmak. Diğeri ise bellek boyutunun azlığı. Burada çekirdek sayısının fazlalığı için cluster'a gerek olmadığı anlaşılıyor. Tek bir ekran kartı ile her işimi görebilirim.Peki bellek azlığını nasıl çözeceğim?
Onunda çözümünü şöyle yapabilirim. Ana kart üzerine pci express üzerinden bağlayacağım bir solid disk'i swap olarak kullanarak yetersiz bellek sorununu ortadan kaldırırım :)

O zaman ben şunu mu demek istedim. İşlemci Cluster'ı yapmak yerine tek ekran kartı ile her işimi halledebiliyor muyum? Aynen öyle :)
Peki yetmezse?O zamanda multi-gpu yapmak ile çözüme ulaşabilirim :)

Not : Grafik ERSİN KUZU'nun internet sitesinden alınmıştır.
Çok uzattım sanırım :)
Up and Running...

alorak

Önemli bir soru sormak istiyorum. Şimdi normal yazılmış bir kodu işlemci çalıştırıyor. Görsel kütüphanelerle(opengl filan) ekran kartı devreye girmekte sanırım (hiç kullanmadım ama). Temel anlamda işlemci-ekran kartı seçimini yazılım üzerinden nasıl yapıyoruz ki?
özgürlük için

zeusmaster

Opencl ile kodumu yazıyorum. Bu dil biraz karışık :=)
Ek olarak: Opencl de donanım bağımlı değilim. Her şey üzerinde çalışırım. Ama Nvidia nın geliştirmiş olduğu dil olan Cuda'da sadece nvidia üzerinde çalışabiliyorum.
Up and Running...

travego0403

Matris işlemlerinin ekran kartı üzerinde daha performanslı yapılması beklenen bir şey. Çünkü ekran kartı işlemcisi GPU matris işlemleri için özelleştirilmiştir. Bu yüzden CPU'ya göre çok daha hızlı işlemleri gerçekleştirir. Çünkü 3 boyutlu oyunlarda ışık, gölge, dönüşüm...vs olayların hepsi matrisler kullanılarak hesaplanıyor. Ekran kartının işlemcisini, GPU, kullanabilmek için shader programlamaya girmek gerekiyor. Artık grafik programlama da örneğin OpenGL de

glBegin(....);
  glVertex();
  glVertex();
glEnd();

şeklinde kod yazılmıyor. Hemen hemen her şey shader programlama ile yazılıyor.
"Matematik bir dildir ve bu dilde şairlere fizikçi denir." Richard Feynman

furkankalkan

http://setiathome.berkeley.edu/ gibi hazır grid çalışmalarına yollamayı düşündünüz mü peki ?
Lover
twitter.com/furkan_kalkan1

zeusmaster

@dewilman, yapılan çalışmalar gizli olduğu için sadece kendi alanlarımızda saklamalı ve işlemleri yapmalıyız :)
Up and Running...

heartsmagic

@bahdem, yanlış bilmiyorsam aslında "Cluster" olayının sadece bir bacağı başarım (performans) artışıdır. Onu sen açıklamışsın aslında, diğer bacaklarından birisi ise yedekli çalışmaya olanak sağlaması. Tek makineye veya tek donanıma bağlı olmazsın böylece.

Uygulamaların çoğu seri olarak yazılıyor demişsin, zaten işin önemli bir bölümü de bu galiba başarımı arttırmak için. Paralel olarak yazılan, gerçek anlamda paralel çalışabilecek uygulamalar yazılabilirse sanırım donanımlardan azami olarak yararlanılabilir. O taraklarda hiç bezim olmadığı için sözü yazılımcı arkadaşlara bırakmak lazım :)
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

zeusmaster

@heartsmagic, hocam aslında bizim "Cluster" yapma ihtiyacımız bellek yetersizliği oluyordu :) Onuda artık pci express üzerinden solid diskler ile çözüme kavuşturacağız :)
Up and Running...

heartsmagic

Umarım rahat bir şekilde çözersiniz @bahdem :)
Hayattan çıkarı olmayanların, ölümden de çıkarı olmayacaktır.
Hayatlarıyla yanlış olanların ölümleriyle doğru olmalarına imkân var mıdır?


Böylece yalan, dünyanın düzenine dönüştürülüyor.

zeusmaster

#46
Sıra geldi artık "cluster" 'ı oluşturmaya :)
Ama şöyle bir sorun var. Sistem yönetim grubu laboratuvardaki sadece bir bilgisayar'a sabit ip veriyor. Dolayısı ile ip ler değiştiği an makinalar birbiri ile haberleşemeyecekler. Bu makinalara sabit ip verebilmek için bir makinaya zentyal kusam ve diğer makinalarında bu makina üzerinden internete çıkmasını sağlasam yanlış bir şey yapmış olurmuyum?
Aklıma iki şey takılıyor.



1)Resimde görüldüğü gibi makinalar direk Zenytal makina üzerinden ağ'a bağlılar. Benim kuracağım sistemde ise bütün makinalar aynı sırada olacak Bütün makinalar duvardaki ethernet uçları ile ağa katılacaklar. Yoksa yanlış mı düşünüyorum  :-[ Bu şekilde de bu makinaları sunucu üzerinden internete çıkarabilirmiyim?

2) Haberleşme sırasında olacak kayıplar. Bunun içinde ana makinaya sağlam bir ethernet kartı aldım.
Up and Running...

burk

Sadece 1 makine için statik IP vermelerinin sebebi nedir?

zeusmaster

ip aralığı darmış fakültenin. Öyle diyor beyefendi :) Aslında o makinaya da sabit ip vermeyecekti. Benim hangi sistenmi kullandığımı sordu. Ubuntu cevabını alınca ve üzerine linux bilgimin kafi olduğunu anlayınca razı geldi :) ssh portunu bile açtırmak için 10 takla attım resmen :)
Up and Running...

burk

Öyleyse kolaylıklar diliyorum @bahdem :)