Program trvá déle s více vlákny
asked 2015-03-08 18:50:33 +0100
Anonymous
Mám dvoujádrový procesor, ale když pustím program se 2 vlákny tak trvá déle než s jedním. Vůbec to nechápu. Zdroják: http://pastebin.com/894AMZqd
EDIT: Procesor Intel i3-3110M
1 vlákno s velikostí pole 100000000
real 0m0.746s
user 0m0.724s
sys 0m0.023s
2 vlákna s velikostí pole 100000000
real 0m0.946s
user 0m1.370s
sys 0m0.032s
1 vlákno s velikostí pole 200000000
real 0m1.475s
user 0m1.414s
sys 0m0.061s
1 vlákno s velikostí pole 100000000 2. vlákno s prázdnou thread funkcí
real 0m0.960s
user 0m1.405s
sys 0m0.028s
Příliš málo informací. Přinejmenším uveďte velikost pole (spuštění threadu je dost náročná operace, nemá smysl to dělat pro malá pole) a použitý HW (cache to může dost ovlivnit). Určitě bych zkusil, jak se bude lišit dosažený čas, pokud a) použiju jedno vlákno s velikostí N, b) použiju jedno vlákno s velikostí 2N, c) použiju jedno vlákno s velikostí N a jedno vlákno s prázdnou thread funkcí (rovnou skončí).
Josef Kokeš ( 2015-03-08 19:31:13 +0100 )edittaktiež by stálo za to, porozmýšľať, či zbytočne nečakáš na niečo.
PeterBocan ( 2015-03-08 20:31:07 +0100 )editPodle mě bude problém fakt s tou prací s pamětí. Tahle úloha je pro multithreading dost nevhodná, protože závisí téměř výhradně na rychlosti čtení paměťových buněk a procesor takřka nic nedělá. Chtělo by to v thread funkci výpočet, který bude pracovat primárně s registry, jen občas s pamětí. Také by mohlo být dobré zkusit naopak menší velikost, aby se celé pole vešlo do cache (3 MB pro tenhle procesor, říká Wikipedie, takže bych zkusil velikost 500000).
Josef Kokeš ( 2015-03-08 20:37:45 +0100 )editS těmi 500000 prvky je to v podstatě stejně rychlé s jedním i se dvěma vlákny. Ale trvá to několik tisícin sekundy, takže se to asi nedá moc hodnotit. Každopádně díky moc za objasnění. Snad je to tedy způsobeno tou nevhodností úlohy pro multithreading a ne implementací.
Anonymous ( 2015-03-08 21:26:00 +0100 )editImplementace vypada v pohode, ale uprimne cache miss a pdobny veci zamavaj rychlosti velmi vyrazne, jeden thread znamena jasnej sekvencni pristup do poameti a tudiz hadam nedochazi ke cache miss kdezto v pripade vice threadu cache miss hrozi a imo ovlivnuje chovani. Jak uz bylo receno, tohle je spis zkouska pameti nez cehokoli jineho a v tomhle pripade je vyuziti vice threadu porblematikcy a dava smysl az v pripade opravdu velkych poctu, imo statisice.ne-li spis miliony.
wvi ( 2015-06-10 10:19:16 +0100 )edit