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

Cevap