GPU nun parelel işlemlerdeki gücü CPU lara göre çok yüksek. I7 980x 80 GigaFlop parelel işlem gücüne sahipken HD 5970 5 TerraFlop luk bir güce sahip. Mevcut uygulamalarda parelel işlem desteği olmadığı için GPU nun kullanılm oranı çok kısıtlı. GPU nun uçuk parelel işlem gücünün farkına varan yazılımcılar ağır işlemleri GPU üzerinden uygun kodlar ile yaptırmaya yöneliyorlar. Bunun en yakın örneği de HTML5 kodları. Microsoft HTML5 ile sayfaları GPU üzerinden hızlandırmaya başladı. Nvidia'nın bu adımı Cuda nın yaygınlaşma maliyetlerini düşürmek ve tercih edilebilirliği arttırmak için attığını düşünüyorum. Verimli çalışması konusu da hala muamma. Intel'in GPU lara önem vermesi, AMD'nin Fusion işlemcileri, Nvidia nın Tesla kartları ve yazılımcılar: GPU'nun yüksek veriminden faydalanma faydalandırma yoluna başvurdular. Bu gelişimlerin nimetlerini yakında göreceğiz. |
Peki hocam, şunu açıklarmısın bana o zaman: 4 yada daha fazla sayıda "seri" thread'lere sahip bir işlemcide bu bahsettiğin kodlar nasıl işleniyor? ![]() Hatta "Hyper-Thread"ing ile olmayan bir thread oluşturulup bu thread üzerinden nasıl işlenebiliyor aynı anda? Aynı mantıkla 1.8ghz hızında çalışan 300 küsür shader "thread" üzerinden işlem yaptırılabilir gibi geliyor bana. Ki işlem yaptırılıyor ama ben günlük normal kullanım manasında diyorum. 1 çekirdekten çoklu çekirdeklere geçerken bahsettiğiniz işleç sorunu yaşanmıştı ancak Intel gibi şirketlerin programcılara kolaylık sağlayan bir takım yeni kütüphaneler sağlaması sayesinde, bu adaptasyon sürecinin artık yavaş yavaş sonuna gelindiğini görüyoruz. Benzer bir süreçle CPU'dan GPU'ya aktarılabilir sanırım izleçler artık, L1 cache belleği ve programlanabilir "core" ları bile var artık GPUların. ![]() Ayrıca demircibu hocamınızın söylediği tablo doğrudur, Intel bu şekilde bir tabloyu kendi göstermişti. Hatta Nvidia'da farkın çok daha dramatik olduğunu göstermişti: http://blogs.nvidia.com/ntersect/2010/06/gpus-are-only-up-to-14-times-faster-than-cpus-says-intel.html#more
|
kastetiğin şey bir çekirdekteki iş hattı sayesinde her iş hatında farklı threadlerin çalışmasımı? |
Demek istediğim şey, senin verdiğin örnekteki kodun yani bir programın birden çok çekirdekte çalışmaması gerekiyor, değil mi? Bu durumda 1den çok çekirdek destekli (birden çok thread destekli değil mi yani aynı yazamanda?) programlar nasıl çalışıyor? Çekirdekler üzerinde farklı threadler halinde paralel olarak çalışmıyor mu? |
threadin ne olduğunu daha önce yaptığım basit bi programı tanıtırken açıklamıştım http://forum.donanimhaber.com/m_39773581/mpage_1/f_/key_//tm.htm#39801371 benimde anlatmak istediğimde bu zaten yani paralel çalışabilmesi için threadlere bölünmesi gerekli eğer threadlere bölünmezse işlemci yada işletim sistemi bunu kendi kafasına göre yapamaz 1. verdiğim örneği threadlere bölebilirsin ama 2. verdiğim örneği threadlere bölersen 1 threadli haline göre sonuçları yanlış olur yukardada yazdım zaten,2. örneği threadlere bölebilmek için kodda değişiklik yapılması gerekli ama sorunda işte her kodu bu şekilde değiştiremiyosun birbirine bağımlı kodları paralel olarak çalıştırabilirsin aslında ama bu sadece bellekten kaynaklanan gecikmenin önüne geçmeyi sağlar,2.verdiğim örnekte kodların aynı anda çalıştırıldığını farzedelim ilk işlem gerçekleştiğinde değişen değerler belleğe yazılmak yerine direk 2.paralel işlemciye 2. işlem için gönderilir, belleğe yazıp ordan tekrar geri çekmekle zaman kaybetmezsin böylece ama arada dağlar kadar performans farkı olmaz ki kodların boyutu çok büyük olursa yani for döngüsünün içinde 2-3 satır yerine 100satırlık kod olduğunu düşün hangi veriyi nerede tutucak? |
Sorun çalıştırılamaması değil, her programı istediğin kadar kanala (thread) bölüp çalıştırabilirsin teknik olarak problem yok. Problem "mantıksal" olarak ortaya çıkıyor yani istenilen değerler elde edilemiyor ve program hatalı çalışmış oluyor (hiçbir hata mesajı vermeden). Bu söylediğim bir zincir gibi birbirine bağlı olarak çalışmak zorunda olan kodlar için geçerli. Fakat programın farklı bir bölümü (farklı bir zincir) başka bir kanala atanabilir. Bu iki kanal eşzamanlı çalışırken birbirlerini ilgilendirmeyen bölümleri çalıştırdıkları için birbirlerinin verilerini bozma gibi bir şansları yoktur. Şu video çevirme işine geri dönelim. Karelerin herbirinin bağımsız olduğunu söylemiştik. Ama eğer atıyorum bir karenin çevrilmesi için bir öncekinin herhangi bir bilgisi gerekseydi (çevrildikten sonraki) bu durumda format çevirme işi de gpu lar için imkansız olacaktı. Ama şu durumda işlemciden kat kat hızlı çevirebilmesi için hiçbir engel yok. |
Bir konuya daha açıklık getirelim ; GPU bir mikrodenetleyicidir. CPU bir mikroişlemcidir. Mikrodenetleyiciler özel bir amaç için mikroişlemcilere ek bileşenler getirelerek yapılır. Mikroişlemciler ise en genel şekilde işlem yapmak için tasarlanmıştır. Bunun dışında mikroişlemcilerde çoğunlukla CISC, mikrodenetliyecilerde ise RISC mimari kullanır. Bu mimariler o işlemci ya da denetleyicinin tek seferde yapacağı işlem yapma yeteniğini etkiler. Kısaca CISC mimarisi tek seferde daha büyük işler yapmayı amaçlar. RISC mimarisi ise daha basit işlemler yapmaya yöneliktir. GPU'lar kabaca mikroişlemcilerden bozma ve sadece belli bir amaca yönelik çalıştığı için (grafik işleme gibi) CPU'larla karşılaştırmak yanlıştır. Eğer genel bir karşılaştırma yapacaksanız aşağıda fikir vermesi açısında bir liste vardır. İsteyenler bakabilir. http://en.wikipedia.org/wiki/Worldwide_Top_20_Semiconductor_Sales_Leaders |
CUDA BİR PROGRAMLAMA DİLİ DEĞİL diye diye klavyemde tüy bitti.. editör de yanlışında ısrar ediyor. Yanlış bilgiler ile yola çıkılınca da başka başka yerlere varılıyor.. |
hocam bilen biliyor ve anlayan anladı zaten, boşuna uğraşma bence. ![]() |
hocam ben özellikle EDİTÖR ün öğrenmesini istiyorum ve de haber metnin düzeltmesini istiyorum. Böyle bir siteye editörlük yapıyorlar ama haala sürekli gündemde olan bazı konular ile ilgili yanlış bilgiler yazıp ortaya bırakıp gidiyorlar. Bazı insanlar sadece haber metnini okuyor, yorumları okumadan geçenler var. O nedenle haber metninin düzeltilmesini istiyorum.. |
seni çok iyi anlıyorum ve şahsi tecrübemden yola çıkarak özellikle "boşuna uğraşma" dedim. ![]() bazı konularda bazı şeylerin daha basit ve ya yanıltıcı gibi yazılmış olması genelde bilgisizlikten değil. daha fazla geniş kitleye hitap edip anlaşılırlık ve basitlik adına teknik detay ve doğruluktan verilen ödün... ![]() |
Arkadaşım cuda programalama dili değilse ne bize bir açıklarmısın? Şurayı iyi oku: CUDA (Compute unified device architecture), GPU (Graphics Processing Unit) için NVIDIA'nın sunduğu C programlama dili tabanlı IDE (Integrated Development Environment)'tir. PathScale tabanlı bir C derleyicisi ve C ile yazılmış algoritmaların GPU üzerinde çalışmasını sağlayan geliştirme araçları kümesidir.Özetlemek gerekirse CUDA programlama diliyle oluşturulmuştur. |
![]() ![]() ![]() iyiydi... ![]() |
@ultiMance hocam sen gerçekten bir paralel işlem mimarisi ile bir programlama dili arasındaki farkı mı soruyorsun şimdi? biraz okumakta ve bilgilenmekte fayda var:http://www.nvidia.com/object/cuda_home_new.html |
Paralel işlem mimarisi bunu biliyorum da sonuçta CUDA programlama diliyle oluşturulmuyor mu? |
hocam GPU'lar da neticede programlama dili yardımı ile oluşturuluyor ve tasarlanıyor. ama bu yüzden biz onlara programlama dili demiyoruz değil mi? ![]() |
![]() |
Arkadaşlar her şey birbirine karışmış. Bunun böyle olmasından ben editörü sorumlu tutuyorum. CUDA bir mimari, programlama dili falan değil.. Bu kadar itiraz oluyor kimse gidip nVidia nın sayfasına bile bakmıyor.. bakınız CUDA neymiş (sahafiec linkini vermiş zaten);http://www.nvidia.com/object/what_is_cuda_new.html @ultiMance CUDA programlama dili ile oluşturulmuyor.. bu arada @sahafiec, hocam GPU lar da programlama dili yardımı ile oluşturulmuyor. Dil olarak kullanılan bir dil var ama programlama dili değil. Verilog, VHDL gibi diller kullanılıyor ama bunlar programlama dili kategorisinde değil de donanım tanımlama dili kategorisinde yer alıyor. "VHDL - VHSIC hardware description language" "VHSIC - very-high-speed integrated circuit" özet olarak; Sandybridge ne kadar programlama diliyse CUDA da o kadar programlama dili.. |
hocam tam bir yazılımcı olarak yazmışsın, bense bir donanımcı olark tabii ki VHDL'i kastettim. VHDL'i hiç kod görmeden görsel de kullanabilirsin ama "hardcore programming" olarak notepad ile de yazabilirsin. aradaki farkı biliyorsan programlama dilinin ne kadar genel bir tabir olduğunu biliyorsun zaten. bu geniş çerçeve içerisinde herkes için anlaşılır bir misal verdim özellikle GPU derken. bu arada bu konulara bu detay seviyesinde girirsek her zaman, ki bu mühendisin doğasında olan birşey, bu forumda çok az sayılı kişilerle iletişim kurabiliriz. sana hitaben bir önceki mesajımda bunu kastetmiştim, haberlerin herkes tarafından anlaşılabilmesi adına bazı detaylar ve derinlikler basitleştiriliyor... ![]() |
Bunlar kendi fikrim veya bir iddia değil, az buçuk yazılımla uğraşan herkes bilir (ben kendi halinde bir programcıyım
Sıra tabanlı programlarda kodlar sırayla işletilir. Bir sonraki satırın işletilmesi için genellikle bir öncekinin tamamlanıp sonucunun alınması gerekir. Yani diyelim ki program 100 satır koddan oluşuyor. İçerisinde yüzlerce paralel işlemci bulunan bir gpu nun bu programı tek hamlede işletebileceğini düşünebilirsiniz ama bu mümkün değil. Çünkü kodlar birbirine bağımlı ve genellikle bir öncekinin çıktısı sonrakinin girdisi oluyor. Dolayısıyla aynı anda çalıştırma yanlış işleyişe sebep olur ve mecburen onca işlemciden aynı anda sadece bir tane çalışabilir. Daha öncede dediğim gibi programların ezici çoğunluğu bu mantıkla çalışıyor.
Tabi belirtmeden geçmeyelim. Programın mantıksal olarak ayrı çalışan bölümleri olabilir. Programcılar böyle bölümleri kanallara ayırırlar. Her kanal ayrı işlemci (veya çekirdek) tarafından yürütülür. Dikkat ederseniz burada bir paralellik var ama öyle zorunlu değil. Tek çekirdekli işlemci de bunun hakkından gelir ama çok çekirdekli olursa, bir kanalın tıkanması sonucu bütün sistemin yavaşlaması engellenmiş olur çünkü diğer çekirdekler yoluna devam eder.
Şimdi gelelim gpu nun performansını göstereceği bir uygulamaya. Arkadaşın verdiği video formatı çevirme mükemmel bir örnek. Bildiğiniz gibi filmler fotoğraf karelerinden oluşuyor. Her saniyede 25 kare civarı var. 1 saatlik filmde 90000 kare eder. Bunların herbiri diğer formata çevrilecek. Bütün sorun tek bir kareyi çevirecek yöntemi bulmak. Bu yöntem (algoritma) bir kere bulundumu eğer kapasite varsa bütün kareler aynı anda çevrilebilir çünkü bir kareyi çevirmek için öncekinin bitmesine hiç gerek yok.
Bu örnekte mesela gtx480 için her paralel işlemciye 187 kare, hd5870 için 56 kare, amd 1090t için 15000 kare ve p4 için 90000 kare
Transistör ve paralel işlemci sayısına bakarsak ati ve nvidia nında par. işl. kapasiteleri farklı görünüyor. Nvidia nınkilerin daha gelişmiş oldukları belli.
@atyay
Mesajını yeni gördüm. Bu kadarmı benzerlik olur pes!
demircibu yada kapak olsun. Öyle sağdan soldan duyduğun bikaç teknik terim ile sallamayla olmaz bu işler.
< Bu mesaj bu kişi tarafından değiştirildi Guest-BF8E9B238 -- 23 Eylül 2010; 0:25:52 >
Bu mesaja 1 cevap geldi. Cevapları Gizle