Serdar Bey, sizin söyledikleriniz, tek işlemci için yazılmış programlar düşünüldüğünde kesinlikle doğru %100 haklısınız.
Fakat kernel bizim algoritmamızı bilemediği için ne yapmak istediğimizde bilemez. Biz bir cpu'nun hesaplama gücünü tamamen harcarken diğer sadece beklemede duruyor. Paralleştirmede kazanılan hız ise 2 cpu için kök(2) = 1.4 ile 2 arasında dememin sebebi http://en.wikipedia.org/wiki/File:AmdahlsLaw.svg Bu tekniği kullanan baya var Intel'in burada "Destroy the Castle" isimli güzel bir demosu var Dual Core ve Quad Core için optimize edilmiş kodun kat ve kat daha hızlı çalıştığını göreceksiniz. (Çünkü kullanılmayan diğer çekirdekte hesaplamalara katılıyor) http://software.intel.com/en-us/courseware/course/view.php?id=66 ("Go to Materials " link'ine tıkayıp slatyları ve oyunu indirebilirsiniz) 2011/5/25 Serdar KÖYLÜ <[email protected]>: > Kısaca, olay threadları alıp dağıtmak olayından daha karmaşık. Ama > asıl önemlisi, ortada çalışan daha bir sürü process var, hiç bir şey > yoksa, mesela harddiskten veri okuyan eden kernelin kendisi var. > Sonuçta, siz makinenin o anki gerçek durumunu bilemezsiniz, bunu ancak > kernel bilir. Ve kernel threadları işlemcilere gayet uygun şekilde > dağıtabilir. 2011/5/25 Serdar KÖYLÜ <[email protected]>: > Yok, eğer bilinen performans gereklerinden farklı bir yapı oluşturan > algoritma veya kodunuz varsa, o zaman ancak threadların hangi CPU'ya > atanacağı vs. gibi işlere müdahale edin. Bunu da, "ben yazdım kodu, > böyle olsun" diyerek değil, kodu taaa başından bu yönde tasarlayarak, > şurası ayrı bir CPU'da burası aynı CPU'da vs. diyerek yazmanız lazım. > Belli bir thread/scheduling modeli sunan bir kod yazacaksınız ve > sistemi o modele uyduracaksınız olabildiğince. Yapılması gereken bu. > > > > 2011/5/25 hal 2000 hal <[email protected]>: >> Haklı gibi gözüküyorsunuz, sched_setaffinity() pthread ile uyumlu mu ? >> değil mi ? bilmiyorum. >> Fakat şöyle bir durum var Linux çekirdeğinde process ve thread ayrımı >> yok. İş böyle olunca aslında bizim posix'de ki "thread yarat" >> fonksiyonu bir sys_clone çağrısından ibaret >> Yani kısaca ortak bir virtual space'i paylaşan process'leri thread >> diye yutturuyorlar. >> (Windows'da tamamen farklılar) >> >> Peki biz neden process/thread'ları cpu/core'lara tek tek dağıtmak isteyelim ? >> Parallel işlem için. >> Yazdığımız programı 2 çekirdeğide aynı anda kullanacak şekilde dizayn >> edersek, hızı artacaktır. (2 cpu için 1.4 ile 2 kat arasında bir artış >> olur) >> ANCAK ! Eğer bu 2 thread aynı core üzerinde çalışmaya başlarlarsa >> hızlanmak yerine yavaşlarız. O yüzden thread'ları core'lar üzerine >> dağıtmalıyız. >> 2011/5/25 Serdar KÖYLÜ <[email protected]>: >>> Linkte verilen sched_setaffinity() bu meselenin çözümü değil gibi >>> görünüyor bana. >>> >>> Linkte anlatılan yöntem, threadları işlemci çekirdeklerine dağıtmaktan >>> biraz daha farklı bir durum. Bu daha ziyade bir processi sadece bir >>> tek CPU'da çalıştırmaya yönelik bir mesele. Process başka, thread >>> başka şey. >>> >>> Affinity, temel olarak bir process'i tek bir CPU'ya bağlamak için >>> kullanılır. Bunun pratikte tek faydası (başka bir takım minör şeyler >>> olabilir) cache üzerinde her zaman güncel bilgiyi tutmak olabilir. >>> >>> Threadların CPU'lar üzerine dağılmasını istiyorsanız, hiç bir şey >>> yapmayın. "pthread_create()" ile threadı yaratıp öylece bırakın. Çok >>> çok büyük ihtimalle kernel threadları CPU'lara dağıtacaktır kendisi. >>> Ve bunu sürekli güncelleyecek maksimum performansı vs. sağlayacaktır. >>> Kernel bunu yapamıyorsa, bunu yapmak daha kötü olacağı için yapamıyor >>> olacaktır. >>> >>> Sizin affinity değerleri ile oynamanız, size ek performans filan >>> kazandırmayacak gibi görünüyor buradan bakınca. >>> >>> 2011/5/25 hal 2000 hal <[email protected]>: >>>> http://www.ibm.com/developerworks/linux/library/l-affinity/index.html >>>> >>>> 2011/5/25 Cihat YILDIZ <[email protected]>: >>>>> Merhabalar, >>>>> Linux konsol uzerinde calisan multithread bir uygulama yazmak istiyorum. >>>>> Multithread yapmak istememin nedeni olusturdugum threadlerin islemci >>>>> cekirdeklerine dagilmasini istemem. >>>>> Ama bunun yapilip yapilamadigi veya nasil yapilacagi hakkinda bir fikrim >>>>> yok. >>>>> Bu konuda onerineriniz almak istiyorum. >>>>> Ayrica bununla ilgili bir dokuman onerebilirseniz sevinirim. >>>>> Kolay gelsin, >>>>> >>>>> --- >>>>> Cihat YILDIZ >>>>> Electronics Engineer >>>>> >>>>> >>>>> >>>>> _______________________________________________ >>>>> Linux-programlama mailing list >>>>> [email protected] >>>>> https://liste.linux.org.tr/mailman/listinfo/linux-programlama >>>>> Liste kurallari: http://liste.linux.org.tr/kurallar.php >>>>> >>>>> >>>> _______________________________________________ >>>> Linux-programlama mailing list >>>> [email protected] >>>> https://liste.linux.org.tr/mailman/listinfo/linux-programlama >>>> Liste kurallari: http://liste.linux.org.tr/kurallar.php >>>> >>> _______________________________________________ >>> Linux-programlama mailing list >>> [email protected] >>> https://liste.linux.org.tr/mailman/listinfo/linux-programlama >>> Liste kurallari: http://liste.linux.org.tr/kurallar.php >>> >> _______________________________________________ >> Linux-programlama mailing list >> [email protected] >> https://liste.linux.org.tr/mailman/listinfo/linux-programlama >> Liste kurallari: http://liste.linux.org.tr/kurallar.php >> > _______________________________________________ > Linux-programlama mailing list > [email protected] > https://liste.linux.org.tr/mailman/listinfo/linux-programlama > Liste kurallari: http://liste.linux.org.tr/kurallar.php > _______________________________________________ Linux-programlama mailing list [email protected] https://liste.linux.org.tr/mailman/listinfo/linux-programlama Liste kurallari: http://liste.linux.org.tr/kurallar.php
