Dwa wątki - każdy korzysta z pamięci z dwóch końców - wydajność

0

Pytanie bardziej teoretyczne i techniczne niż dot. C++, ale w nim programuję i zastanawiam się czy gdyby czysto hipotetycznie jeden utworzyć dwa wątki i jeden z nich operowałby na kawałku pamięci gdzieś z początku pamięci a drugi wątek pracowałby na pamięci, która jest na drugim końcu adresu to czy miałoby to negatywny wpływ na wydajność zakładając, że mamy procesor 2-4 rdzeniowy a wykorzystywane są 2-4 wątki?
Chodzi o to, że gdyby jeden wątek skakał po pamięci raz tu raz tam to na pewno byłoby to niekorzystne. A co jeśli jeden wątek pracuje na jednym kawałku pamięci a drugi na drugim kawałku oddalonym od siebie znacznie?

0

Jeśli nie skaczesz kompletnie losowo, tylko np. czytasz dwa bufory, to dostęp do pamięci powinien być ±tak samo szybki z jednego wątku jak i z dwóch, procesor od tego właśnie ma cache. Jeśli dwa wątki będą pracować na różnych miejscach w pamięci to wydaje się to mieć sens, bo nie musisz bać się o false sharing. Zakładam, że synchronizacja itd. nie jest tu problemem.

0

Ok, dzięki za odpowiedź.

0

Przy spełnieniu założenia, że wątki korzystają z różnych obszarów pamięci, na dwóch wątkach będzie szybciej.
Obszary nie muszą być bardzo różne, ważne aby były w obrębie różnych linii cache. Jedna linia ma 64 B.

Dokładanie wątków będzie zwiększać wydajność dopóki nie nastąpi nasycenie łącza między cache L3 a L2 lub łącza między L3 a RAM. W praktyce nie wcześniej niż przy 20+ GB/s, jeśli dostęp jest sekwencyjny.

1 użytkowników online, w tym zalogowanych: 0, gości: 1