hocam elinize sağlık, oldukça sade derli toplu bir arabirimi var, hoşuma gitti 9.654513 saniye gibi sonuçlar verse daha iyi olurdu, hemen 9 saniye diyeceğine bir de hesaplama aralığını genişletirsek daha sağlıklı sonuçlar alabiliriz |
|
1.8 ghz cakma cift cekirdek 3+ yillik dizustu 17 saniye < Resime gitmek için tıklayın > 3 ghz 4 cekirdek phenomII 19 saniye < Resime gitmek için tıklayın > cok dengesizlik var, imkan varsa programi gelistirmeyi deneyin yoksa fail olmus yani. |
az evvel çalıştırırken işlemci kullanıma baktım da dengesiz program önce 4 çekirdek başlıyor bir kaç saniye sonra 3 çekirdek sonra 2 çekirdek ve tek çekirdekle noktayı koyuyor < Resime gitmek için tıklayın > burdan görebilirsiniz basamak basamak çekirdek sayısındaki değişimleri |
|
16 thread açınca Q6600'e %100 yüklendi ve 3 sn'de hesapladı. En iyi 16 threadda çalıştırmak heralde. Aslında kullanışlı program olabilir. Ama 250bin az kalıyor. 1 milyona çıkarırsan programın adını da AsalSay1M gibi bir şey koyup SuperPI gibi bir şeye dönüştürebilirsin. Bir de saliseleri göstermesini sağlasan daha iyi olur. |
|
işte o saliseler önemli yoksa 3ghzlik bir işlemciyle 3.5 ghzlik aynı işlemci, aynı sonuçları gösterebilir programda.. 8 ve 12 threadli i7 işlemcisi olanlar ya da 6 çekirdekli p2 sahipleri şuanki haliyle işlemcilerinden tam performans alamıyorlar programa göre, çünkü 16dan fazla seçeneğimiz yok karşılaştırma yapılacaksa da intel platformu ve amd platformu ayrı ayrı kendi aralarında karşılaştırabilir.. intelsever bir program olmuş gibi görünüyor .45 ACP'nin sonuçlarına göre.. |
Hmm. Thread sorununu çözmek için maksimum threadı 128 gibi bir değer yapıp işlemciye her şekilde tam yüklenmesi sağlanabilir. Intel&AMD için ise yapılabilecek bir şey yok. Zira iki markanın işlemcilerini karşılaştırabileceğimiz bir program zaten yapılamıyor. Mimari farklılığından ötürü mutlaka sapmalar oluyor. Dünyaca ünlü SuperPI de bile durum öyle. İşlemcileri kendi markalarında ayrı ayrı yarıştırmak gerekiyor. |
|
arkadaşlar yorumlarınız için teşekürler istediğiniz süre ve aralıkla ilgili düzeltmeyi yaptım yalnız çekirdeklere tam yüklenmeyle ilgili küçük bi sorun var yapılan işlem belli aralıklardaki asal sayıları bulmak olduğundan her thread başına düşen asal sayı miktarı aynı olmayabiliyo,haliyle threadlerin bitme süresi farklı oluyo kimisi atıyorum 10sn de bitiyosa kimisi 13sn de bitiyo mesela 2 ile 800000 aralığını ayarladık diyelim ve thread sayısını 8 yaptık her thread başına yaklaşık 100000 aralığı düşüyo sorun şu ki her aralıktaki asal sayılar eşit değil,bu yüzden kimisi daha erken biterken kimisinin işi uzuyo threadlerin önceliklerini en yükseğe çıkardım belki küçükde olsa yararı olur ama istediğiniz gibi aynı hesapları yapan bi program olması için asal sayıları bulan değil farklı bi hesaplatma yapmam lazım aslında amacım işlemci test programı falan yapmak değildi tabiki,sadece thread sayısı artıkça işlemlerde ne gibi farklar oluyo onu görmenizi istedim bide şunu söyliyim bu programı ayarlarken firmaların neden multi thread yazılımlar için uğraşmadığını daha ii anladım,harbiden çok kafa karıştıran bi durum yada bana zor geldi aslında bi kod bloğunu thread olarak çalıştırmak sorun değil sorun thread olarak çalıştırdıktan sonra onu kontrol edebilmekte:) gerçi biraz deneyimsizliğiminde kurbanı oldum diyebilirim:) edit:intel ve amd sistemler için yapabileceğim bişey yok program bi exe değil java virtual machine tarafından çalıştırılıyo,virtual machine intel için optimize edilmişmi edilmemişmi bilemem |
|
Öncelikle saliseleri göstermeyi ayarlamışsın güzel olmuş. O thread sorunu için ise programdan yüksek thread seçmek bayağı etkiliyor. Mesela şimdi denedim 1 thread 17 saniyede hesaplama yaparken aynı işlemi 4 thread 6.9sn de yaptı. İşlem sonuna doğru bazı çekirdekler çalışmayı durdurdu. Fakat threadı 16 yaptığımda 4.6 saniyeye düştü ki 17 saniyenin neredeyse dörtte birine indirdi. Böyle yapınca çekirdekler işi bitince kapanmıyor. Heralde thread sayısı çok olunca kendi aralığında işi bitince hesaplanmamış yerlerden devam ediyor çekirdekler. Gayet başarılı bir program. Üstünde çalış bence. Biraz reklamla ünlü yapabiliriz |
|
< Resime gitmek için tıklayın > 48 thread ekledim:) bide threadlerin nekadar çalıştığını gösteren bi taplo hazırladım link yukarıya eklendi |
eline sağlık ama 12, 24 ve 32 thread eksik olmuş sana zahmet bir de test yapanlara ilk mesajında yol göstersen iyi olur, 2 çekirdeğiniz varsa şu kadar thread i seçin 8 çekirdeğiniz varsa şu kadar felan diye sonra çok karışır burası neyse 48 threadli test 16'lıdan daha kısa sürdü, herkes 48 threadde test yapıp paylaşsın o zaman.. |
|
< Resime gitmek için tıklayın > Core i5 750 ile benim sonuç da bu çıktı. Dört çekirdeğin tamamı işlemciyi %100 kullandı fakat sonlara doğru çekirdekler birer birer kapanarak öyle hesaplandı gibi geldi. Yani son 4 saniyelik kısımda her saniye bir çekirdek kapandı gibi oldu. Güzel program olmuş eline sağlık atyay. |
|
arkadaş lar kusura bakmayın yeni şeyler eklemekle uğraştığımdan anca cevap verebiliyorum < Resime gitmek için tıklayın > http://www.mediafire.com/file/5ytyfzngzea/asalSayiBulma.jar bu sefer yeni bi hesaplama yöntemi buldum:P bu seferki çok daha dengeli,yani thread sayısının çok fazla olmasının bi yararı yok,işlemci 8thread çalıştırabiliyosa 8 thread den sonrasının hiçbi getirisi olmadı bende 12 de bıraktım 6çekirdekli ht destekli inteller için,daha fazlasına gerek yok diye düşündüm çünkü bende i7 720qm var ve 8 thread ile 12 thread arasında fark olmadı,olmasınıda beklemiyodum açıkçası çünkü asal sayıyı bulmak gibi bilinmeyeni aramıyo bilinen sayılar üstünde işlem yapıyo aslında @nadir_en'in kendi programında kulandığı algoritmayı çaldım< Resime gitmek için tıklayın > isteyen olursa onun konusunuda vereyim http://forum.donanimhaber.com/m_37506489/mpage_1/key_/tm.htm
hocam aslında 16dan sonra hem 6 hemde 8 in katı olduğu için 48 yeterli olur diye düşünmüştüm buyüzden araları es geçtim ama yineden "ben merak ediyorum görmek istiyorum" dersen seni kırıcağıma kafamı kırarım:) aslında asal sayı hesabında nekadar çok thread olursa okadar ii çünkü thread başına düşen hesaplama yükü biraz dengeleniyo ve tüm çekirdeklerde ona göre maksimuma yakın kullanılıyo tabi abartmamak koşuluyla çünkü thread sayısı aşırı fazla olursa bellek alanıyla ilgili bi sorun çıkıyo onu tam anlayamadım daha ilk mesajı birazdan düzenlerim thread nedir ne işe yarar gibi kaç çekirdekli için kaç thread seçilmeliyle ilgili,aslında yeni hesaplama yönteminde 2 çekirdekli için 2 thread,4 için 4thread,4çekirdekli 8thread destekli i7 ler için 8 thread en makulu daha fazlası bi yararı yok ama asal sayı hesabı için 1 çekirdekliler hariç herkez 48 seçse sanırım en mantıklısı olur:) 1 çekirdekliler için bişey farketmez sanırım |
hocam nerden aklına geldi bu,1 sene geçmiş aradan program üstünde pek bi yenilik yok malesef,sadece bi ara senin yaptığının aynısını 8 thread olarak ayarladım hız farkı olucakmı diye,başka bişey yapmadım:) bu aralar c# ile ilgileniyorum,direcx sdk yı kurdum eğer c#da direcx'i kontrol etmeyi başarabilirsem direk DirectCompute'a atlıycam |
| Üstadlar, bir sorum var benim masaüstü veya notebooklarların amd işlemcili modellerinde hyber threading sayısı artırılabiliyor. bu bilgiye ulaştim bir yerden. Sanırım kapalı şekilde olan bir anahtarı açmak için verilmiş bir hile bu. merak ettiğim konu bu işi intel işlemcilere yapma mümkün mü ? |
Şimdilik 2 tür hesaplama yöntemi var
1)Girilen 2 sayı arasındaki asal sayıları bulan program,ben standart olarak 500000 ile 1000000 aralığını seçtim ama siz istediğiniz aralığı girebilirsiniz
2)Tam olarak neyi hesapladığını bilemediğim,@nadir_en'in daha önce kendi yaptığı programda kulandığı algoritmayı çaldım< Resime gitmek için tıklayın >
Her 2 hesaplamada thread ayarı ve sayı aralıkları var başka bi ayar gerekmiyo.
Peki nedir bu thread denilen şey?
Thread:aslında bi programdır,daha doğrusu bi program,oyun yada test araçı en az 1 thread den oluşur,ne kadar çok thread den oluşacağı ise o programı kodlayana bağlıdır.Bi programda birden fazla thread kulanmanın amacı ise verimliliği artırmaktır.
Mesela internet sitelerinden örnek vereyim,bi alışveriş sitesine girip bişeyler alıcaksınız ama sizden önce yaklaşık 1 milyon kişininde aynı anda siteye girdiğini düşünün,eğer site tek bi thread üzerinden çalışırsa o 1 milyon kişinin işlerini yapıp siteden ayrılmalarını beklemek zorundasınız:)
Tamam biraz fazla abartım,durum bukadar kötü değil ama yinede multi thread olarak ayarlanması işleri hızlandırıyo.
Peki kulandığımız programların birden fazla threaden oluşması bize ne gibi yarar sağlar?
Aslında bunun tek yararı eğer çok çekirdekli bi işlemcimiz varsa ve programda hızlı hesaplanması gereken çok veri varsa,bu hesaplamaları çekirdekler arasında paylaştırarak zaman kazandırır.Yani 2,3,4 çekirdek destekli denilen programlar aslında 2,3,4 thread den oluşur ve işlemciniz kaç thread destekliyse okadar verim alırsınız,asal sayı hesaplama kısmında bu verim alma olayını daha detaylı anlatıcam.
< Resime gitmek için tıklayın >
Mesela kullandığım işlemci 4 çekirdekli ama 8 thread destekli,yani aynı anda 8 thread çalıştırabilir.
Şimdi tek çekirdekli yani tek thread desdekli işlemcilerde birden fazla program çalışmıyomu?
Aslında birden fazla program çalışıyo ama aynı anda çalışmıyo,sadece aynı anda çalıştığını sanıyoruz:)
Bunun sebebi aslında işletim sistemi,işletim sistemi programları programcıklara yani threadciklere bölüyo ve threadcikleri sahip oldukları işlem önceliğine göre işlemciye gönderiyo,bunu okadar hızlı yapıyoki biz aynı anda çalıştığını sanıyoruz,böylece 1 çekirdekli bi işlemcide aynı anda birçok program kulanabiliyoruz
Çok uzatmadan yaptığım programı anlatmaya başlıyım:)
Asal sayı hesaplaması:)
< Resime gitmek için tıklayın >
Thread sayıları 1,2,3,4,5,6,7,8,16 ve 48.
Yani 48 çekirdekli bi işlemciniz varsa 48inide aynı anda kulanabilir.
Yalnız yapılan işten dolayı her thread başına düşen işlem yükü aynı değil,çünkü program bir bilinmeyeni arıyo asalmı değilmi?
Asal sayı nasıl bulunur,eğer 1 ve kendisinden başka bi sayıya tam bölünmüyosa o sayı asaldır,seçtiğiniz thread sayısına göre sayı aralığı thread sayısına bölünüyo ve her thread kendi payına düşen aralıktaki asal sayıları buluyo,ama her aralıktaki asal sayı miktarı bir değil,aynı bile olsa her asal sayının bulunma zamanı aynı olmuyo,buda her thread başına düşen işlem yükünün farklı olmasına neden oluyo,yani verim düşüyo.
Mesela 4 çekirdekli bi işlemciniz varsa 4 threadi seçtiğinizde en kısa sürede hepsinide hemen hemen aynı anda bitirmesi gerekli ama öyle olmuyo, threadlerden biri daha kısa sürede bitiyo ve geriye kalan 3 thread 4 çekirdek arasında işletim sistemi tarafından paylaştırılıyo,işlemci kulanımıda %100 den %75 lere düşüyo.
2 ve daha fazla çekirdeğe sahipse işlemciniz 48 threadi seçmeniz en sağlıklısı olur.
Bişeyler hesaplıyo ama ne hesaplıyo bende bilmiyorum:P
< Resime gitmek için tıklayın >
Burda her thread başına düşen işlem yükü hemen hemen aynı,buyüzden thread sayısını fazla artırmadım,ben bi yararını göremedim çünkü.
İşlemciniz kaç thread destekliyse okadar thread çalıştırın.
ha unutmadan çalıştırabilmek için java virtual machine kurulu olması gerek onada buradan ulaşabilirsiniz
en kısa zamanda alu ve fpu birimlerine ayrı ayrı yüklenen bi test hazırlamaya çalışıcam:)
pi sayısı hesaplama formülü bilen varmı acaba,bi süperPi de ben yapayım
DH forumlarında vakit geçirmekten keyif alıyor gibisin ancak giriş yapmadığını görüyoruz.
Üye Ol Şimdi DeğilÜye olduğunda özel mesaj gönderebilir, beğendiğin konuları favorilerine ekleyip takibe alabilir ve daha önce gezdiğin konulara hızlıca erişebilirsin.
< Bu mesaj bu kişi tarafından değiştirildi atyay -- 17 Mayıs 2010; 2:02:46 >