Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem c++ více vláken, stejná cache

Tak mi teda vysvětlete, jakto že se program přestane zpomalovat, když je tam více než 16 jader??

Když má každé jádro svoji vlastní cache, tak je zřejmé, že pokaždé, když:

1. vlákno chce přistoupit do cache, tak zjistí že je neplatná

1. musí požádat 2. vlákno aby tu chache nahrála do paměti

2. vlákno nahraje cache do paměti

1. vlákno teprve teď může přistoupit k cache.


Takže ano, zpomalí se to kvůli cache.


Zkusím to změřit znovu, a použít jedno jádro, a více vláken, a potom opět 16 jader, a více vláken...



Spuštění programu na jednom jádru (taskset 0x00000001 ./xyz)
1 Vlákno: 0.5 sec
2 Vlákno: 0.5 sec
4 Vlákno: 0.6 sec
8 Vlákno: 0.5 sec
16 Vlákno: 0.6 sec
32 Vlákno: 0.6 sec
64 Vlákno: 0.6 sec
128 Vlákno: 0.7 sec
10 000 Vl.: 0.7 sec

Spuštění programu na ctyřech jádrech (taskset 0x0000000F ./xyz)
1 Vlákno: 0.5 sec
2 Vlákno: 0.9 sec
4 Vlákno: 2.6 sec
8 Vlákno: 3.0 sec
16 Vlákno: 2.9 sec
32 Vlákno: 3.0 sec
64 Vlákno: 3.0 sec
128 Vlákno: 3.1 sec
10 000 Vl.: 3.2 sec

Spuštění programu na osmi jádrech (taskset 0x000000FF ./xyz)
1 Vlákno: 0.4 sec
2 Vlákno: 0.9 sec
4 Vlákno: 2.6 sec
8 Vlákno: 5.7 sec
16 Vlákno: 6.0 sec
32 Vlákno: 5.6 sec
64 Vlákno: 6.3 sec
128 Vlákno: 6.2 sec
10 000 Vl.: 6.4 sec

Spuštění programu na šestnácti jádrech (taskset 0x0000FFFF ./xyz)
1 Vlákno: 0.5 sec
2 Vlákno: 0.9 sec
4 Vlákno: 2.5 sec
8 Vlákno: 5.9 sec
16 Vlákno: 9.5 sec
32 Vlákno:10.6 sec
64 Vlákno:10.3 sec
128 Vlákno:10.0 sec
10 000 Vl.: 9.4 sec


Ten program s 10000 vlákny je pokaždý uplně stejný, jen jednou běží na jednom jádru, a doba trvání je 0.7, a podruhé na šestnácti, a doba trvání je 9.4

Takže naprosto vážně je chyba v cache

Reakce na odpověď

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny