Program trvá déle s více vlákny

asked 2015-03-08 18:50:33 +0100

anonymous user

Anonymous

updated 2015-03-08 20:18:05 +0100

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
edit retag flag offensive close delete

Comments

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 )edit

taktiež by stálo za to, porozmýšľať, či zbytočne nečakáš na niečo.

PeterBocan ( 2015-03-08 20:31:07 +0100 )edit

Podle 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 )edit

S 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 )edit

Implementace 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