C++17, GCC 11.4.0 (Release -O3), OpenMP 2.0
Linux Ubuntu 22.04
model name: AMD Ryzen 5 4500U with Radeon Graphics
CPU(s): 6
Thread(s) per core: 1
ΠΠ°Π½Π° ΡΠΈΠ³ΡΡΠ° piriform Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ a = 2.
ΠΠ΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΡΡΠΈΡΠ°ΡΡ ΠΎΠ±ΡΡΠΌ ΡΡΠΎΠΉ ΡΠΈΠ³ΡΡΡ.
Π Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΠ΅ ΡΡΠΎ ΠΏΡΠ΅Π΄Π»Π°Π³Π°ΡΡ ΡΠ΄Π΅Π»Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΠΠΎΠ½ΡΠ΅-ΠΠ°ΡΠ»ΠΎ,
ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΎΠ²Π΅ΡΡΡΡ Π²Ρ
ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ Π²
ΡΠΈΠ³ΡΡΡ ΠΈ Π½Π°Ρ
ΠΎΠ΄ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»Π΅ΠΏΠΈΠΏΠ΅Π΄, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π»Π΅ΠΆΠΈΡ ΡΠΈΠ³ΡΡΠ°
(ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΈΡ
ΡΡΠ½ΠΊΡΠΈΠΉ Π»Π΅ΠΆΠΈΡ Π² hit.cpp).
ΠΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠ΅ ΡΠΎΡΠΊΠΈ Π²Π½ΡΡΡΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»Π΅ΠΏΠΈΠΏΠ΅Π΄Π° ΠΈ
Π½Π°ΠΉΡΠΈ ΡΠΎΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡΠ΅ΠΊ Π²Π½ΡΡΡΠΈ ΠΈ Π²Π½Π΅ ΡΠΈΠ³ΡΡΡ. ΠΠΎΠΌΠ½ΠΎΠΆΠΈΠ² ΡΡΠΎ Π½Π° ΠΎΠ±ΡΡΠΌ
ΠΏΠ°ΡΠ°Π»Π»Π΅Π»Π΅ΠΏΠΈΠΏΠ΅Π΄Π°, ΠΌΡ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΡΠΉ ΠΎΠ±ΡΡΠΌ ΡΠΈΠ³ΡΡΡ
Π£ΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Π΅ΡΡΡ Π² Wolfram. Π― ΡΠ΄Π΅Π»Π°Π»Π° Π΅Ρ Π³ΡΠ°ΡΠΈΠΊ Π² ΠΠ΅ΡΠΌΠΎΡΠ΅, Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ»Π° ΠΎΠ±Π»Π°ΡΡΡ
Xor Shift Random
- Π Π΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ XOR ΠΈ ΡΠ΄Π²ΠΈΠ³ΠΎΠ² (Xorshift).
- ΠΠΌΠ΅Π΅Ρ Π΄Π²Π° Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ (seed_a ΠΈ seed_b), ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ ΡΠ΅ΡΠ΅Π· ΡΡΠ½ΠΊΡΠΈΡ roll_2_7_3. Π― ΡΠ΄Π΅Π»Π°Π»Π° Π²Π΅ΡΡΠΈΡ ΠΎΡ Π΄Π²ΡΡ ΡΠΈΠ΄ΠΎΠ² Π²ΠΌΠ΅ΡΡΠΎ ΠΊΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ. Π’ΠΎΠ²Π°ΡΠΈΡΠΈ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠΈ Π³ΠΎΠ²ΠΎΡΡΡ, ΡΡΠΎ ΡΡΠΎ ΡΠ»ΡΡΡΠ°Π΅Ρ ΠΊΠ°ΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π½Π΄ΠΎΠΌΠ°
- ΠΠ±Π»Π°Π΄Π°Π΅Ρ ΡΡΠ΅Π΄Π½ΠΈΠΌΠΈ ΡΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ
- ΠΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Π±ΡΡΡΡΡΠΉ (Π·Π΄Π΅ΡΡ ΡΡΠ΅Π΄Π½ΠΈΠΉ ΠΏΠΎ ΡΠΊΠΎΡΠΎΡΡΠΈ)
LCG Random
- Π Π΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Π»ΠΈΠ½Π΅ΠΉΠ½ΡΠΉ ΠΊΠΎΠ½Π³ΡΡΡΠ½ΡΠ½ΡΠΉ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ (LCG)
- Π Π°Π±ΠΎΡΠ°Π΅Ρ ΠΏΠΎ ΡΠΎΡΠΌΡΠ»Π΅: state = 1664525 * state + 1013904223
- ΠΠ΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΈΡΠ»Π° ΠΏΡΡΠ΅ΠΌ ΡΠ΄Π²ΠΈΠ³Π° Π±ΠΈΡΠΎΠ² ΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈΡ Π΄Π»Ρ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π΄ΡΠΎΠ±Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ [0, 1)
- ΠΡΡΡΡΡΠΉ, Π½ΠΎ Ρ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΊΠ°ΠΌΠΈ Π² ΡΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ²ΠΎΠΉΡΡΠ²Π°Ρ (Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄, ΠΊΠΎΡΡΠ΅Π»ΡΡΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΌΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ)
mt19937_random
- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΡ ΡΠΈΡΠ΅Π» Mersenne Twister (std::mt19937)
- ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π½Π°ΡΠ°Π»ΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ (seed)
- ΠΠ΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠΈΡΠ»Π° Ρ ΡΠ°Π²Π½ΠΎΠΌΠ΅ΡΠ½ΡΠΌ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅
- ΠΡΠΎΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ Ρ ΠΎΡΠΎΡΠΈΠΌΠΈ ΡΡΠ°ΡΠΈΡΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΠ²ΠΎΠΉΡΡΠ²Π°ΠΌΠΈ, ΠΈΠΌΠ΅Π΅Ρ Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΠ΅ΡΠΈΠΎΠ΄ (ΠΎΠΊΠΎΠ»ΠΎ 2^19937-1), ΠΈ Π·Π° ΡΡΡΡ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±ΠΈΡΡΡΡ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΎΠΉ ΡΠΎΡΠ½ΠΎΡΡΠΈ
ΠΡΠ΅ ΡΡΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° ΡΠΌΠ΅ΡΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅, ΡΠΌΠΏΠΈΡΠΈΡΠ΅ΡΠΊΠΈ ΠΎΠ½ΠΈ ΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ ΡΡΠΈΡΠ°ΡΡ ΠΎΠ±ΡΡΠΌ Ρ ΡΠΎΡΠ½ΠΎΡΡΡΡ Π΄ΠΎ ΡΠΎΡΡΡ
Π Π»Π°Π±ΠΎΡΠ°ΡΠΎΡΠ½ΠΎΠΉ ΠΏΡΠΎΡΠΈΠ»ΠΈ ΠΎΡΡΠ°Π²ΠΈΡΡ ΡΠ°ΠΌΡΠΉ Π±ΡΡΡΡΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΏΠΎ ΠΈΡΠΎΠ³Π°ΠΌ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠΉ. ΠΠΎ ΠΌΠΎΠΈΠΌ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡΠΌ LCG Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ°ΠΌΡΠΉ Π±ΡΡΡΡΡΠΉ. ΠΡΠΈ ΠΆΠ΅Π»Π°Π½ΠΈΠΈ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΡΡΠ΅Π΄Π°ΠΊΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ calculate Π² main.cpp, ΠΏΠΎΠΌΠ΅Π½ΡΠ² ΡΠΈΠΏ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° ΠΏΡΠΈ Π²ΡΠ·ΠΎΠ²Π΅ ΡΠ°Π±Π»ΠΎΠ½Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΠΎΠ±ΡΡΠΌΠ°. Π£Π²Ρ, Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΆΠΈΠ·Π½ΠΈ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΈΡΠΊΠ°ΡΡ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΡΡ. Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΠΊΠΎΡΠΎΡΡΡΡ ΠΈ ΡΠΎΡΠ½ΠΎΡΡΡΡ
Π― Π²ΡΡΡΠ°Π²ΠΈΠ»Π° ΡΠ΅ΠΆΠΈΠΌ release -O3
Π ΡΠ°ΡΡΠΈ ΠΊΠΎΠ΄Π° Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠ΅ΠΉ ΡΠ°Π½Π΄ΠΎΠΌΠ½ΠΎΠΉ ΡΠΎΡΠΊΠΈ Ρ ΠΌΠ΅Π½ΡΠ»Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½Ρ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ. ΠΠ»Ρ Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠΎΡΠ΅ΠΊ ΡΡΠΎ ΠΎΠΊ
ΠΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²ΠΎ Π²ΡΡΠΎΠΊΠΎΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² Π²ΡΡΠ°Π²Π»ΡΡΡ ΠΊΡΡ-Π±ΡΡΠ΅Ρ ΠΌΠ΅ΠΆΠ΄Ρ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΡΡ ΠΈ Π²ΡΡΠΎΠΊΠΎΡΠΊΠΎΡΠΎΡΡΠ½ΡΠΌΠΈ ΡΠ΅Π³ΠΈΡΡΡΠ°ΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°. ΠΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΡΠ΅ΠΉΠΊΠ΅ ΠΏΠ°ΠΌΡΡΠΈ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΡΡΠ°Π³ΠΌΠ΅Π½Ρ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ°ΠΌΡΡΠΈ (ΡΡΡΠΎΠΊΠ° ΠΊΡΡΠ°), ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ Π·Π°ΠΏΡΠ°ΡΠΈΠ²Π°Π΅ΠΌΡΡ ΡΡΠ΅ΠΉΠΊΡ ΠΏΠ°ΠΌΡΡΠΈ, ΠΊΠΎΠΏΠΈΡΡΠ΅ΡΡΡ Π² ΠΊΡΡ. ΠΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΡΡ ΠΆΠ΅ ΡΡΠ΅ΠΉΠΊΡ ΠΏΠ°ΠΌΡΡΠΈ ΠΈΠ»ΠΈ Π½Π° ΡΠ΅, ΡΡΠΎ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ ΡΡΠ΄ΠΎΠΌ Ρ Π½Π΅ΠΉ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΠΌΠΎΠ³ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΈΠ· ΠΊΡΡΠ° Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π΅ ΡΠ΅ΡΠΈΡ, ΡΡΠΎ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΊΡΡΠ΅ΠΌ ΠΈ ΠΏΠ°ΠΌΡΡΡΡ.
ΠΠ΄Π½Π°ΠΊΠΎ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ ΠΊΡΡΠ°, ΠΏΠΎΡΡΡΠΏΠ°ΡΡΠ΅Π΅ ΠΎΡ ΡΠ°Π·Π½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ², ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π°Π½Π½ΡΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Π»ΡΡ ΡΡΡΠΎΠΊ ΠΊΡΡΠ°, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΡΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡ Π΄ΡΡΠ³ ΠΎΡ Π΄ΡΡΠ³Π°. ΠΠ°ΠΆΠ΄ΠΎΠ΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° ΡΡΡΠΎΠΊΠΈ ΠΊΡΡΠ° ΠΏΠΎΠΌΠ΅ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ ΠΊΠ°ΠΊ Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΡ. ΠΡΡΠ³ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ, ΠΎΠ±ΡΠ°ΡΠ°ΡΡΠΈΠ΅ΡΡ ΠΊ Π΄ΡΡΠ³ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π² ΡΠΎΠΉ ΠΆΠ΅ ΡΡΡΠΎΠΊΠ΅, Π²ΠΈΠ΄ΡΡ, ΡΡΠΎ ΡΡΡΠΎΠΊΠ° ΠΏΠΎΠΌΠ΅ΡΠ΅Π½Π° ΠΊΠ°ΠΊ Π½Π΅Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½Π°Ρ. ΠΠ½ΠΈ Π²ΡΠ½ΡΠΆΠ΄Π΅Π½Ρ ΠΈΠ·Π²Π»Π΅ΠΊΠ°ΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ²Π΅ΠΆΡΡ ΠΊΠΎΠΏΠΈΡ ΡΡΡΠΎΠΊΠΈ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ ΠΈΠ»ΠΈ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΌΠ΅ΡΡΠ°, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΎΠ½ΠΈ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ, Π½Π΅ Π±ΡΠ» ΠΈΠ·ΠΌΠ΅Π½Π΅Π½. ΠΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΏΠΎΡΠΎΠΌΡ, ΡΡΠΎ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΡΡΡ ΠΊΡΡΠ° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΊΡΡ-Π»ΠΈΠ½ΠΈΠΉ, Π° Π½Π΅ Π΄Π»Ρ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ². Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΡΡΠ°ΡΠΈΠΊ ΠΌΠ΅ΠΆΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠΉ ΠΈ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ. ΠΡΠΎΠΌΠ΅ ΡΠΎΠ³ΠΎ, ΠΏΠΎΠΊΠ° ΠΈΠ΄Π΅Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΊΡΡ-Π»ΠΈΠ½ΠΈΠΈ, Π΄ΠΎΡΡΡΠΏ ΠΊ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ Π² ΡΡΠΎΠΉ Π»ΠΈΠ½ΠΈΠΈ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½.
Π’Π°ΠΊΠ°Ρ ΡΠΈΡΡΠ°ΡΠΈΡ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ false sharing. ΠΡΠ»ΠΈ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠ°ΡΡΠΎ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΡΡΡ OpenMP-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΡΠ½ΠΈΠΆΠ°ΡΡΡΡ.
False sharing ΡΠ½ΠΈΠΆΠ°Π΅Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ, Π΅ΡΠ»ΠΈ ΠΈΠΌΠ΅ΡΡ ΠΌΠ΅ΡΡΠΎ Π²ΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΡΠ»ΠΎΠ²ΠΈΡ.
- ΠΠ±ΡΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°ΠΌΠΈ.
- ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ ΠΆΠ΅ ΡΡΡΠΎΠΊΠ΅ ΠΊΡΡΠ°.
- ΠΡΠΎ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΎΡΠ΅Π½Ρ ΡΠ°ΡΡΠΎ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π² ΡΠ·ΠΊΠΎΠΌ ΡΠΈΠΊΠ»Π΅).
ΠΡΠΎΡΡΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ: Π²ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Ρ ΠΎΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ±ΡΠΈΠΉ ΠΊΡΡ, ΠΈΠ·-Π·Π° ΡΠ΅Π³ΠΎ Π΅Π³ΠΎ ΠΏΡΠΈΡ ΠΎΠ΄ΠΈΡΡΡ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°ΡΡ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΎ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π΄Π»Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ ΡΠΎΠ³ΠΎ ΡΡΠΎ Π½ΡΠΆΠ½ΠΎ Π΄ΡΡΠ³ΠΎΠΌΡ, ΠΈ ΡΡΠΎ ΠΎΡΠ΅Π½Ρ ΠΏΠ»ΠΎΡ ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ Π² ΠΏΠ°ΠΌΡΡΡ ΡΡΠ°ΡΠΈΡ ΠΌΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. Π Π½Π°ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ Π² ΡΠΈΠΊΠ»Π΅ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΡΠΎΡΠ΅ΠΊ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, ΠΈ ΡΡΠΎ ΠΊΠ°ΠΊ ΡΠ°Π· ΡΠΎΡ ΡΠ»ΡΡΠ°ΠΉ, ΠΊΠΎΠ³Π΄Π° ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° false sharing (ΡΠΌ. ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ Π°Π±Π·Π°Ρ ΡΠΈΡΠ°ΡΡ)
Π’ΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ Π°Π½Π°Π»ΠΈΠ· ΡΠ΅Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΡΠΈΠΊΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ³ΡΠ°ΡΡ ΠΎΡΠ½ΠΎΠ²Π½ΡΡ ΡΠΎΠ»Ρ Π² Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, ΠΌΠΎΠΆΠ΅Ρ Π²ΡΡΠ²ΠΈΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΠΌΠΎΡΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π²ΡΠ·Π²Π°Π½Π½ΡΠ΅ false sharing. Π ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ false sharing ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΠΏΡΡΡΠΌ
- ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΈΠ²Π°ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ ;
- ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΎΠ½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠ° Π΄Π»Ρ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΡ Π·Π°Π³ΡΡΠ·ΠΊΠΈ ΠΈ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ.
Π ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ»ΡΡΠ°ΡΡ Π²Π»ΠΈΡΠ½ΠΈΠ΅ false sharing ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΌΠ΅Π½Π΅Π΅ Π·Π°ΠΌΠ΅ΡΠ½ΡΠΌ ΠΏΡΠΈ ΡΠ΅ΡΠ΅Π½ΠΈΠΈ Π·Π°Π΄Π°Ρ Π±ΠΎΠ»ΡΡΠΈΡ ΡΠ°Π·ΠΌΠ΅ΡΠΎΠ², ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ false sharing ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΌΠ΅Π½ΡΡΠ΅.
ΠΠ΅ΡΠΎΠ΄Ρ Π±ΠΎΡΡΠ±Ρ Ρ false sharing Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΌ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ. Π Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΠ»ΡΡΠ°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΡΠΏΠΎΡΠΎΠ±Π° ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΌΠΎΠΆΠ΅Ρ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ false sharing. Π Π΄ΡΡΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ Π½Π° ΠΏΠΎΡΠΎΠΊΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ° ΡΠ°Π±ΠΎΡΡ Π½Π° ΡΠ°Π½ΠΊ (ΠΏΡΡΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ chunksize) ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ false sharing.
ΠΠΎΡΡΠ°ΡΠ°Π΅ΠΌΡΡ ΠΏΡΠΈΠ΄ΡΠΌΠ°ΡΡ ΡΠ°Π·ΡΠΌΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈ ΠΏΡΠΈ Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΎΠ±ΡΠ°ΡΠΈΠΌ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ chunk_size
Race condition Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° Π΄Π²Π° ΠΏΠΎΡΠΎΠΊΠ° ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ ΡΠΎΠΉ ΠΆΠ΅ ΠΏΠ°ΠΌΡΡΠΈ Π±Π΅Π· ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ·Π²Π°ΡΡ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ
- ΠΠ»Ρ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΡ false sharing Ρ ΡΠΏΠ°ΠΊΠΎΠ²Π°Π»Π° ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΡΠΎΡΠΊΠΈ Π² ΠΎΠ΄Π½Ρ ΡΡΡΡΠΊΡΡΡΡ
- ΠΠ»Ρ ΠΈΠ·Π±Π΅ΠΆΠ°Π½ΠΈΡ race condition Ρ ΡΠ΄Π΅Π»Π°Π»Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠ΅ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠ° ΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΉ ΡΠΎΡΠΊΠΈ. ΠΠ½Π°ΡΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡΡΡ ΡΠ°ΠΊ, ΡΡΠΎ ΡΠ°Π·Π½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π±ΡΠ΄ΡΡ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ρ ΠΎΠ΄Π½ΠΈΠΌ ΡΠΊΠ·Π΅ΠΌΠΏΠ»ΡΡΠΎΠΌ. Π’ΠΎ Π΅ΡΡΡ Ρ ΡΠ΄Π΅Π»Π°Π»Π° ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½ Π±ΡΠ» ΡΠ²ΠΎΠΉ Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°
Π― ΠΏΠΎΠΏΡΡΠ°Π»Π°ΡΡ ΠΈΠ·ΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΠΊΡΠΎΡΡ-ΠΏΠ»Π°ΡΡΠΎΡΠΌΠ΅Π½Π½ΠΎΡΡΡ ΠΈ ΡΡΠ΅ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ, Π³Π΄Π΅ ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΡΡ-Π»ΠΈΠ½ΠΈΠΈ Π½Π΅ 64. Π ΡΠ»ΡΡΠ°Π΅ Ρ Π»ΠΈΠ½ΡΠΊΡΠΎΠΌ ΡΡΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠΈΡΡ, Π½Π° Π²ΠΈΠ½Π΄Π΅ ΠΏΠΎΡΡΠ°Π²ΠΈΠ»Π° 64 (ΠΈΠ»ΠΈ Π΅ΡΠ»ΠΈ Π½Π° Π»ΠΈΠ½ΡΠΊΡΠ΅ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΊ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΊΡΡ-Π»ΠΈΠ½ΠΈΠΈ ΠΏΠΎΡΠ΅ΠΌΡ-ΡΠΎ Π½Π΅ ΡΡΠ°Π±ΠΎΡΠ°Π΅Ρ). ΠΡΠΎ Π½Π΅ ΠΎΡΠΈΠ±ΠΊΠ°, ΠΏΡΠΎΡΡΠΎ ΡΠΊΠΎΡΠΎΡΡΡ Π±ΡΠ΄Π΅Ρ Ρ ΡΠΆΠ΅
ΠΠ΄ΡΡΠ³ Π²Ρ Π·Π°Ρ ΠΎΡΠΈΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΡΡ Π½Π° ΡΠ²ΠΎΡΠΌ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΎΠΌ ΠΆΠ΅Π»Π΅Π·Π΅? Π’ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΡΡΠΎΡ ΠΊΠΎΠ΄ Π² CMake ΠΈ Π·Π°ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ
// constexpr size_t CACHE_LINE_SIZE = 64set(CACHE_LINE_SIZE 64)
if (UNIX)
execute_process(
COMMAND getconf LEVEL1_DCACHE_LINESIZE
OUTPUT_VARIABLE CACHE_LINE_SIZE
OUTPUT_STRIP_TRAILING_WHITESPACE
ERROR_VARIABLE GETCONF_ERROR
)
endif ()#pragma omp parallel ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΎΠ±Π»Π°ΡΡΡ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΎΠ±Π»Π°ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ. ΠΡΠΎ ΡΡΠ½Π΄Π°ΠΌΠ΅Π½ΡΠ°Π»ΡΠ½Π°Ρ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅.
Π’ΠΎ Π΅ΡΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠΎΠΉ Π΄ΠΈΡΠ΅ΠΊΡΠΈΠ²Ρ Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡ ΡΡΠ°ΡΡΠΎΠΊ, ΠΎΡΠΊΡΠ΄Π° Π½Π°ΡΠ½ΡΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ num_threads Π²ΡΡΡΠ°Π²Π»ΡΡ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΠΏΠΎΡΠΎΠΊ (ΠΊΠ°ΠΊ ΠΏΠΎΠΏΡΠΎΡΠΈΠ»ΠΈ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅, Π΄Π΅ΡΠΎΠ»ΡΠ½ΠΎΠ΅ ΠΈΠ»ΠΈ Π»ΡΠ±ΠΎΠ΅ Π΄ΡΡΠ³ΠΎΠ΅, ΠΊΠΎΡΠΎΡΠΎΠ΅ Π±ΡΠ΄Π΅Ρ Π²ΡΡΡΠ°Π²Π»Π΅Π½ΠΎ Π² Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°Ρ ΡΡΠ½ΠΊΡΠΈΠΈ)
#pragma omp parallel num_threads(threads)#pragma omp for schedule ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ ΡΠΈΠΊΠ»Π° for ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ Π² ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠΉ ΠΎΠ±Π»Π°ΡΡΠΈ
dynamic Π·Π½Π°ΡΠΈΡ ΡΡΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΈΠΊΠ»Π° Π½Π΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ Π·Π°ΡΠ°Π½Π΅Π΅. ΠΠΌΠ΅ΡΡΠΎ ΡΡΠΎΠ³ΠΎ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠΎΠΊ Π·Π°Π²Π΅ΡΡΠ°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ²ΠΎΠ΅ΠΉ ΡΠ΅ΠΊΡΡΠ΅ΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ, ΠΎΠ½ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΡΠ»Π΅Π΄ΡΡΡΡΡ Π΄ΠΎΡΡΡΠΏΠ½ΡΡ ΠΈΡΠ΅ΡΠ°ΡΠΈΡ
static Π·Π½Π°ΡΠΈΡ ΡΡΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ ΡΠΈΠΊΠ»Π° ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ Π΄ΠΎ Π½Π°ΡΠ°Π»Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΠ°ΠΆΠ΄ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π·Π°ΡΠ°Π½Π΅Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ,
ΠΡΠΈ Π²Π°ΡΠΈΠ°Π½ΡΡ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π²ΡΠ±ΠΈΡΠ°ΡΡ Π² Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ ΠΎΡ Π·Π°Π΄Π°ΡΠΈ. ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΎΡΡΠ°ΡΡΡΡ Π±Π΅Π· ΡΠ°Π±ΠΎΡΡ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠ΅ΡΠ΅Π³ΡΡΠΆΠ΅Π½Ρ, Π·Π°ΡΠΎ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΡ ΡΠ°ΡΡ ΠΎΠ΄ΠΎΠ² Π½Π° ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ Π²ΠΎ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. Π’ΠΎ Π΅ΡΡΡ static ΠΏΠΎΠ»Π΅Π·Π΅Π½, Π΅ΡΠ»ΠΈ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, Π° dynamic Π΅ΡΠ»ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ - Π½Π΅ΠΏΠΎΡ ΠΎΠΆΠ΅Π΅
chunk_size ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Ρ ΠΏΠΎΡΠΎΠΊΡ Π·Π° ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·
If the optional chunk_size is set, the value must be positive. If chunk_size is not set, a value of 1 is assumed, except in the case of a static schedule. For a static schedule, the default chunk size is set to the loop iteration space divided by the number of threads applied to the loop.
Π― ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π΄Π΅ΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΡΠΈΡΠ°Ρ Π½ΠΎΠ²ΡΡ ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΠΈ Π΄Π΅Π»Π°Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ ΠΏΠΎΠΏΠ°Π΄Π°Π½ΠΈΡ ΡΠΎΡΠΊΠΈ Π² piriform Π²Π½ΡΡΡΠΈ ΡΠΈΠΊΠ»Π°
#pragma omp for schedule(static)
for (long long i = 0; i < num_points; ++i) {
if (hit_test(point.x, point.y, point.z)) {
++local_count_inside;
}
if (i % 3 == 0) { point.x = local_rt.next_float(axis_range[0], axis_range[1]); }
if (i % 3 == 1) { point.y = local_rt.next_float(axis_range[2], axis_range[3]); }
if (i % 3 == 2) { point.z = local_rt.next_float(axis_range[4], axis_range[5]); }
}ΠΡΠΎΠΌΠ΅ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΡΠ°Π½Π΅Π΅ Π±ΠΎΡΡΠ±Ρ Ρ race conditition ΡΡΠΎΠΈΡ Π²ΡΡΡΠ°Π²ΠΈΡΡ atomic ΠΏΡΠΈ ΠΏΠΎΠ΄ΡΡΡΡΠ΅ ΡΡΠΌΠΌΡ ΠΏΠΎΠΏΠ°Π²ΡΠΈΡ ΡΠΎΡΠ΅ΠΊ
The atomic directive ensures that a specific memory location is updated atomically, rather than exposing it to the possibility of multiple, simultaneous writing threads.
ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ OpenMP p.19
To avoid race conditions, all updates of the location in parallel should be protected with the atomic directive, except those that are known to be free of race conditions
ΠΡΠ΅ ΠΌΠΎΠΈ ΠΏΠΎΡΡΠ³ΠΈ Π»Π΅ΠΆΠ°Ρ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ research
Π― ΡΠ΄Π΅Π»Π°Π»Π° Π΄Π²Π΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ Π² main(): ΡΠ°ΠΌΡΠΉ Π±ΡΡΡΡΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ ΠΏΠΎ ΠΈΡΠΎΠ³Π°ΠΌ
ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ (calculate) ΠΈ Π²Π°ΡΠΈΠ°Π½Ρ, ΠΎΠΏΠΈΡΠ°Π½Π½ΡΠΉ Π² Π³ΠΈΠΏΠ΅ΡΠΏΠ°ΡΠΌΠ΅ΡΡΠ°Ρ
ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠΈΠ³Π΅
Π― Π·Π°ΠΏΡΡΠΊΠ°Π»Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΡΠ΅ΡΠ΅Π· bash-ΡΠΊΡΠΈΠΏΡ Π·Π°ΡΠ°Π½Π΅Π΅ Π²ΡΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ΅ ΡΠΈΡΠ»ΠΎ ΡΠ°Π·. Π― ΠΌΠΎΠ³Π»Π° Π±Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ Π·Π°Π΄Π°ΡΠΈ Π² ΡΠΈΠΊΠ»Π΅ Π½Π° C++, Π½ΠΎ ΡΡΠΎ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠΈΠ½Π»Π°ΠΉΠ½ΠΈΡΡ Π²ΡΠ·ΠΎΠ²Ρ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (ΡΠ΅ΠΌ Π±ΠΎΠ»Π΅Π΅ ΡΡΠΎ Ρ Π²ΡΡΡΠ°Π²ΠΈΠ»Π° Π°Π³ΡΠ΅ΡΡΠΈΠ²Π½ΡΠΉ ΡΠ΅ΠΆΠΈΠΌ -O3). Π’ΠΎ Π΅ΡΡΡ ΡΡΠΎ Π½Π΅ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅ ΡΡΠΎ ΠΏΡΠΎΡΡΡ Π² Π·Π°Π΄Π°Π½ΠΈΠΈ. ΠΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΈΡΡΡΡΡ Π² txt-ΡΠ°ΠΉΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ ΠΏΠΎΡΠΎΠΌ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΡΡ Π² ΠΏΠΈΡΠΎΠ½Π΅
Π― Π΄Π΅Π»Π°Π»Π° ΠΏΠΎ 100 ΠΈΠ·ΠΌΠ΅ΡΠ΅Π½ΠΈΠΉ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, Π²ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ Ρ ΠΎΡΡΠ°Π²ΠΈΠ»Π° Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ research. Π ΡΠ°Π±Π»ΠΈΡΡ Π·Π°ΠΏΠΈΡΡΠ²Π°Π»Π° ΡΡΠ΅Π΄Π½Π΅Π΅ Π°ΡΠΈΡΠΌΠ΅ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΈ ΡΡΡΠΎΠΈΠ»Π° Π³ΡΠ°ΡΠΈΠΊΠΈ ΠΏΠΎ ΡΠ°Π±Π»ΠΈΡΠ΅
ΠΠ°ΠΆΠ½ΠΎ! ΠΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π³ΡΠ°ΡΠΈΠΊΠΈ ΠΈΠΌΠ΅ΡΡ ΡΠΌΡΡΠ» ΠΈΠΌΠ΅Π½Π½ΠΎ Π΄Π»Ρ ΠΌΠΎΠ΅ΠΉ ΠΏΠ»Π°ΡΡΠΎΡΠΌΡ (Π±ΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, ΠΌΠΎΠΆΠ΅Ρ Ρ ΠΌΠ΅Π½Ρ Π²ΡΠ΅Π³Π΄Π° ΠΈΠ΄ΡΡ Π΄ΠΎΠΆΠ΄Ρ Π·Π° ΠΎΠΊΠ½ΠΎΠΌ, ΠΊΠΎΠ³Π΄Π° Ρ Π·Π°ΠΏΡΡΠΊΠ°Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΡ, ΠΈ ΡΡΠΎΡ Π΄ΠΎΠΆΠ΄Ρ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΌΠΎΡ ΠΆΠ΅Π»Π΅Π·ΠΎ, ΡΠΎΠ»ΡΠΊΠΎ Ρ ΡΡΠΎΠ³ΠΎ Π½Π΅ Π·Π°ΠΌΠ΅ΡΠ°Ρ)
ΠΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ (ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ) ΡΠΌΠ΅Π½ΡΡΠ°Π΅ΡΡΡ ΠΏΡΠΈ Π²ΠΎΠ·ΡΠ°ΡΡΠ°Π½ΠΈΠΈ ΡΠΈΡΠ»Π° ΠΏΠΎΡΠΎΠΊΠΎΠ² - Π΄ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ΄Π΅Ρ. Π ΡΡΠΎ Π΄Π°Π»ΡΡΠ΅? Π£ ΠΌΠ΅Π½Ρ Π½Π΅Ρ Π³ΠΈΠΏΠ΅ΡΡΡΠ΅Π΄ΠΈΠ½Π³Π°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ
> lscpu
Thread(s) per core: 1ΠΠΈΠΏΠ΅ΡΡΡΠ΅Π΄ΠΈΠ½Π³ ΠΌΠΎΠΆΠ΅Ρ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ Π²Π»ΠΈΡΡΡ Π½Π° ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. ΠΡΠ° ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΠ΄Π½ΠΎΠΌΡ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΎΠΌΡ ΡΠ΄ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π΄Π²Π° ΠΏΠΎΡΠΎΠΊΠ° ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. Π‘ ΡΠΎΡΠΊΠΈ Π·ΡΠ΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, ΡΠ°ΠΊΠΎΠ΅ ΡΠ΄ΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΊΠ°ΠΊ Π΄Π²Π° Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΈΡ ΡΠ΄ΡΠ°, ΡΡΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΡ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠΎ ΡΡΠΎ, ΠΊΠΎΠ½Π΅ΡΠ½ΠΎ, Π½Π΅ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ²Π΅Π»ΠΈΡΠΈΡΡΡ ΡΠΎΠ²Π½ΠΎ Π² Π΄Π²Π° ΡΠ°Π·Π°, ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈ ΡΡΠΈ ΠΏΠΎΡΠΎΠΊΠΈ ΠΊΠΎΠ½ΠΊΡΡΠΈΡΡΡΡ Π·Π° ΠΎΠ±ΡΠΈΠ΅ ΡΠ΅ΡΡΡΡΡ. ΠΠΏΡΠΎΡΠ΅ΠΌ, Ρ ΠΌΠ΅Π½Ρ Π½Π΅Ρ Π³ΠΈΠΏΠ΅ΡΡΡΠ΅Π΄ΠΈΠ½Π³Π°, ΠΏΠΎΡΡΠΎΠΌΡ Π½Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ ΡΠ΄Π΅Ρ Π²ΡΡ ΠΈ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ
ΠΠΎΠ΄ chunk_size=0 Ρ ΠΏΠΎΠ΄ΡΠ°Π·ΡΠΌΠ΅Π²Π°Ρ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° chunk_size
| XOR SHIFT RANDOM | Dynamic | Static | no omp |
|---|---|---|---|
| 742.1273400000001 | |||
| threads=1 chunk_size=0 | 959.1870700000001 | 647.5335600000001 | |
| threads=1 chunk_size=1 | 977.4376000000001 | 738.4600399999997 | |
| threads=1 chunk_size=2 | 798.97356 | 693.8203500000001 | |
| threads=1 chunk_size=4 | 706.7744299999999 | 667.9802800000001 | |
| threads=1 chunk_size=8 | 662.3845100000002 | 669.9193300000001 | |
| threads=1 chunk_size=16 | 656.89602 | 671.99949 | |
| threads=1 chunk_size=1024 | 616.1506799999999 | 608.1179800000003 | |
| threads=1 chunk_size=65536 | 616.2857799999998 | 607.48229 | |
| threads=2 chunk_size=0 | 3063.832100000001 | 375.62092999999993 | |
| threads=2 chunk_size=1 | 3087.6666999999993 | 425.81378000000007 | |
| threads=2 chunk_size=2 | 1872.4175 | 403.21542999999986 | |
| threads=2 chunk_size=4 | 1199.14824 | 387.57298000000014 | |
| threads=2 chunk_size=8 | 827.06555 | 377.26754999999997 | |
| threads=2 chunk_size=16 | 578.0699399999999 | 386.9205300000002 | |
| threads=2 chunk_size=1024 | 311.30982 | 306.94826000000006 | |
| threads=2 chunk_size=65536 | 314.162 | 308.7052300000001 | |
| threads=3 chunk_size=0 | 2305.7704 | 271.76511 | |
| threads=3 chunk_size=1 | 2377.2187 | 429.7632899999998 | |
| threads=3 chunk_size=2 | 1485.7054999999998 | 342.46197 | |
| threads=3 chunk_size=4 | 927.9267 | 307.3826700000002 | |
| threads=3 chunk_size=8 | 606.9004800000001 | 292.34443999999996 | |
| threads=3 chunk_size=16 | 431.55013999999983 | 298.5801100000001 | |
| threads=3 chunk_size=1024 | 213.46932000000007 | 212.34223999999986 | |
| threads=3 chunk_size=65536 | 217.80307000000002 | 213.75945000000004 | |
| threads=4 chunk_size=0 | 2396.8017 | 231.64429 | |
| threads=4 chunk_size=1 | 2620.621200000001 | 429.7632899999998 | |
| threads=4 chunk_size=2 | 1432.1845999999998 | 342.46197 | |
| threads=4 chunk_size=4 | 808.5284399999999 | 307.3826700000002 | |
| threads=4 chunk_size=8 | 486.8980600000001 | 292.34443999999996 | |
| threads=4 chunk_size=16 | 350.4992300000002 | 298.5801100000001 | |
| threads=4 chunk_size=1024 | 175.40966999999998 | 175.07930000000005 | |
| threads=4 chunk_size=65536 | 174.02857999999992 | 173.56111999999996 | |
| threads=5 chunk_size=0 | 1791.7743000000005 | 194.55849 | |
| threads=5 chunk_size=1 | 1942.3265000000008 | 225.41342000000003 | |
| threads=5 chunk_size=2 | 1069.51909 | 212.69293 | |
| threads=5 chunk_size=4 | 625.14891 | 198.58798999999988 | |
| threads=5 chunk_size=8 | 428.2980999999999 | 195.64558999999997 | |
| threads=5 chunk_size=16 | 298.40604999999994 | 201.25531000000007 | |
| threads=5 chunk_size=1024 | 146.30154000000002 | 150.98498000000006 | |
| threads=5 chunk_size=65536 | 148.59708999999998 | 148.56091000000004 | |
| threads=6 chunk_size=0 | 1717.5671000000016 | 174.36667999999997 | |
| threads=6 chunk_size=1 | 1924.5363999999993 | 262.64434999999986 | |
| threads=6 chunk_size=2 | 1122.6137000000003 | 202.47624 | |
| threads=6 chunk_size=4 | 630.2659500000001 | 190.31953000000004 | |
| threads=6 chunk_size=8 | 402.14745000000005 | 174.93008999999998 | |
| threads=6 chunk_size=16 | 275.02544 | 184.60392 | |
| threads=6 chunk_size=1024 | 132.39290000000003 | 129.79215 | |
| threads=6 chunk_size=65536 | 138.29397000000006 | 131.54746 |
| XOR SHIFT RANDOM | Dynamic | Static | no omp |
|---|---|---|---|
| 742.1273400000001 | |||
| threads=1 chunk_size=0 | 959.1870700000001 | 647.5335600000001 | |
| threads=2 chunk_size=0 | 3063.832100000001 | 375.62092999999993 | |
| threads=3 chunk_size=0 | 2305.7704 | 271.76511 | |
| threads=4 chunk_size=0 | 2396.8017 | 231.64429 | |
| threads=5 chunk_size=0 | 1791.7743000000005 | 194.55849 | |
| threads=6 chunk_size=0 | 1717.5671000000016 | 174.36667999999997 |
Π ΠΈΡ. 1. ΠΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΡ ΡΠΈΡΠ»Π° ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠ΅Π· chunk_size, Xor Shift Random
| XOR SHIFT RANDOM | Dynamic | Static |
|---|---|---|
| threads=1 | 616.1506799999999 | 608.1179800000003 |
| threads=2 | 311.30982 | 306.94826000000006 |
| threads=3 | 213.46932000000007 | 212.34223999999986 |
| threads=4 | 174.02857999999992 | 173.56111999999996 |
| threads=5 | 146.30154000000002 | 148.56091000000004 |
| threads=6 | 132.39290000000003 | 129.79215 |
Π ΠΈΡ. 2. ΠΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΡ ΡΠΈΡΠ»Π° ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΡΡΡΠΈΠΉ chunk_size, Xor Shift Random
| XOR SHIFT RANDOM | Dynamic | Static | no omp |
|---|---|---|---|
| 742.1273400000001 | |||
| threads=1 chunk_size=0 | 959.1870700000001 | 647.5335600000001 | |
| threads=1 chunk_size=1 | 977.4376000000001 | 738.4600399999997 | |
| threads=1 chunk_size=2 | 798.97356 | 693.8203500000001 | |
| threads=1 chunk_size=4 | 706.7744299999999 | 667.9802800000001 | |
| threads=1 chunk_size=8 | 662.3845100000002 | 669.9193300000001 | |
| threads=1 chunk_size=16 | 656.89602 | 671.99949 | |
| threads=1 chunk_size=1024 | 616.1506799999999 | 608.1179800000003 | |
| threads=1 chunk_size=65536 | 616.2857799999998 | 607.48229 |
Π ΠΈΡ. 3. ΠΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Ρ ΠΎΡΠΊΠ»ΡΡΡΠ½Π½ΡΠΌ OpenMP ΠΈ Ρ Π²ΠΊΠ»ΡΡΡΠ½Π½ΡΠΌ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ, Xor Shift Random
Π ΠΈΡ. 4. ΠΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Ρ ΠΎΡΠΊΠ»ΡΡΡΠ½Π½ΡΠΌ OpenMP ΠΈ Ρ Π²ΠΊΠ»ΡΡΡΠ½Π½ΡΠΌ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ, Xor Shift Random
| XOR SHIFT RANDOM | Dynamic | Static | no omp |
|---|---|---|---|
| * | * | * | 742.1273400000001 |
| * | 132.39290000000003 | * | * |
| * | * | 129.79215 | * |
ΠΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² Π»ΡΡΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, Xor Shift Random
| LCG | Dynamic | Static | no omp |
|---|---|---|---|
| 320.21758999999986 | |||
| threads=1 chunk_size=0 | 720.32038 | 363.2665499999998 | |
| threads=1 chunk_size=1 | 721.4270099999999 | 438.8332000000001 | |
| threads=1 chunk_size=2 | 529.3780300000002 | 401.88604 | |
| threads=1 chunk_size=4 | 434.1517700000001 | 381.61602000000005 | |
| threads=1 chunk_size=8 | 399.45808000000005 | 372.3880299999999 | |
| threads=1 chunk_size=16 | 376.54825000000005 | 368.36753 | |
| threads=1 chunk_size=1024 | 357.08664 | 363.04133 | |
| threads=1 chunk_size=65536 | 360.12431999999995 | 363.7118000000001 | |
| threads=2 chunk_size=0 | 2471.1630000000005 | 208.9217299999999 | |
| threads=2 chunk_size=1 | 2575.7833999999993 | 208.93125000000003 | |
| threads=2 chunk_size=2 | 1221.4701699999996 | 188.90817000000004 | |
| threads=2 chunk_size=4 | 797.6244300000002 | 182.03506999999993 | |
| threads=2 chunk_size=8 | 567.7238500000002 | 169.82162 | |
| threads=2 chunk_size=16 | 431.08428999999984 | 175.37787000000003 | |
| threads=2 chunk_size=1024 | 186.0359300000001 | 168.70204 | |
| threads=2 chunk_size=65536 | 184.91643999999997 | 166.0188900000001 | |
| threads=3 chunk_size=0 | 2224.300499999999 | 120.28897999999995 | |
| threads=3 chunk_size=1 | 2201.985899999999 | 150.89968999999996 | |
| threads=3 chunk_size=2 | 1230.0265000000002 | 132.64675 | |
| threads=3 chunk_size=4 | 750.6885999999998 | 125.04092999999997 | |
| threads=3 chunk_size=8 | 499.1914499999998 | 122.43509999999993 | |
| threads=3 chunk_size=16 | 287.27097 | 119.50589000000005 | |
| threads=3 chunk_size=1024 | 130.20472999999998 | 120.94409 | |
| threads=3 chunk_size=65536 | 127.81734999999995 | 121.37797999999995 | |
| threads=4 chunk_size=0 | 2485.205099999999 | 101.20989799999998 | |
| threads=4 chunk_size=1 | 2538.766599999999 | 122.02588 | |
| threads=4 chunk_size=2 | 1359.5470999999995 | 111.48121799999998 | |
| threads=4 chunk_size=4 | 743.9374599999999 | 106.04796499999999 | |
| threads=4 chunk_size=8 | 450.92199 | 104.52965400000001 | |
| threads=4 chunk_size=16 | 262.336 | 102.01833800000003 | |
| threads=4 chunk_size=1024 | 141.11465000000007 | 101.10425599999995 | |
| threads=4 chunk_size=65536 | 138.87098999999995 | 100.127789 | |
| threads=5 chunk_size=0 | 1900.0151999999998 | 86.25729800000003 | |
| threads=5 chunk_size=1 | 1905.2843000000005 | 104.41016199999996 | |
| threads=5 chunk_size=2 | 1002.7346199999998 | 95.590499 | |
| threads=5 chunk_size=4 | 677.9435499999998 | 90.91517100000003 | |
| threads=5 chunk_size=8 | 392.9684800000003 | 88.73768799999999 | |
| threads=5 chunk_size=16 | 240.95204999999996 | 87.66330700000005 | |
| threads=5 chunk_size=1024 | 116.69940699999998 | 88.02471699999998 | |
| threads=5 chunk_size=65536 | 116.467575 | 86.61003499999998 | |
| threads=6 chunk_size=0 | 1883.1092000000003 | 75.05852899999995 | |
| threads=6 chunk_size=1 | 1887.4066999999998 | 100.74184199999998 | |
| threads=6 chunk_size=2 | 1011.23479 | 89.44294300000001 | |
| threads=6 chunk_size=4 | 612.3865099999997 | 83.60841299999998 | |
| threads=6 chunk_size=8 | 328.4400100000001 | 81.92129200000001 | |
| threads=6 chunk_size=16 | 224.26999 | 79.43605899999997 | |
| threads=6 chunk_size=1024 | 99.36119700000003 | 80.245992 | |
| threads=6 chunk_size=65536 | 105.26176199999998 | 81.105628 |
| LCG | Dynamic | Static | no omp |
|---|---|---|---|
| 320.21758999999986 | |||
| threads=1 chunk_size=0 | 720.32038 | 363.2665499999998 | |
| threads=2 chunk_size=0 | 2471.1630000000005 | 208.9217299999999 | |
| threads=3 chunk_size=0 | 2224.300499999999 | 120.28897999999995 | |
| threads=4 chunk_size=0 | 2485.205099999999 | 101.20989799999998 | |
| threads=5 chunk_size=0 | 1900.0151999999998 | 86.25729800000003 | |
| threads=6 chunk_size=0 | 1883.1092000000003 | 75.05852899999995 |
Π ΠΈΡ. 5. ΠΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΡ ΡΠΈΡΠ»Π° ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠ΅Π· chunk_size, LCG
| LCG | Dynamic | Static | no omp |
|---|---|---|---|
| 320.21758999999986 | |||
| threads=1 | 357.08664 | 363.04133 | |
| threads=2 | 184.91643999999997 | 166.0188900000001 | |
| threads=3 | 127.81734999999995 | 119.50589000000005 | |
| threads=4 | 138.87098999999995 | 100.127789 | |
| threads=5 | 116.467575 | 86.25729800000003 | |
| threads=6 | 99.36119700000003 | 75.05852899999995 |
Π ΠΈΡ. 6. ΠΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΡ ΡΠΈΡΠ»Π° ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΡΡΡΠΈΠΉ chunk_size, LCG
| LCG | Dynamic | Static | no omp |
|---|---|---|---|
| 320.21758999999986 | |||
| threads=1 chunk_size=0 | 720.32038 | 363.2665499999998 | |
| threads=1 chunk_size=1 | 721.4270099999999 | 438.8332000000001 | |
| threads=1 chunk_size=2 | 529.3780300000002 | 401.88604 | |
| threads=1 chunk_size=4 | 434.1517700000001 | 381.61602000000005 | |
| threads=1 chunk_size=8 | 399.45808000000005 | 372.3880299999999 | |
| threads=1 chunk_size=16 | 376.54825000000005 | 368.36753 | |
| threads=1 chunk_size=1024 | 357.08664 | 363.04133 | |
| threads=1 chunk_size=65536 | 360.12431999999995 | 363.7118000000001 |
Π ΠΈΡ. 7. ΠΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Ρ ΠΎΡΠΊΠ»ΡΡΡΠ½Π½ΡΠΌ OpenMP ΠΈ Ρ Π²ΠΊΠ»ΡΡΡΠ½Π½ΡΠΌ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ, LCG
Π ΠΈΡ. 8. ΠΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Ρ ΠΎΡΠΊΠ»ΡΡΡΠ½Π½ΡΠΌ OpenMP ΠΈ Ρ Π²ΠΊΠ»ΡΡΡΠ½Π½ΡΠΌ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ, LCG
| LCG | Dynamic | Static | no omp |
|---|---|---|---|
| * | * | * | 320.21758999999986 |
| * | 99.36119700000003 | * | * |
| * | * | 75.05852899999995 | * |
ΠΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π² Π»ΡΡΡΠ΅ΠΉ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, LCG
| MERSENNE | Dynamic | Static | no omp |
|---|---|---|---|
| 956.23506 | |||
| threads=1 chunk_size=0 | 1459.2138000000004 | 979.6839999999996 | |
| threads=1 chunk_size=1 | 1457.8219000000004 | 1155.4581000000005 | |
| threads=1 chunk_size=2 | 1228.0756 | 1038.6444999999994 | |
| threads=1 chunk_size=4 | 1094.0227 | 1002.3167000000001 | |
| threads=1 chunk_size=8 | 1038.6502 | 991.3661299999997 | |
| threads=1 chunk_size=16 | 1012.1187000000001 | 983.51205 | |
| threads=1 chunk_size=1024 | 981.8386800000001 | 977.4677800000002 | |
| threads=1 chunk_size=65536 | 980.7897299999997 | 977.4954800000005 | |
| threads=2 chunk_size=0 | 2454.2849 | 491.3553899999998 | |
| threads=2 chunk_size=1 | 2528.3521000000005 | 579.8482200000001 | |
| threads=2 chunk_size=2 | 1112.3551 | 519.2280599999999 | |
| threads=2 chunk_size=4 | 896.71071 | 506.45614 | |
| threads=2 chunk_size=8 | 878.1847200000001 | 510.72994000000006 | |
| threads=2 chunk_size=16 | 667.4337100000001 | 498.85919 | |
| threads=2 chunk_size=1024 | 497.7303399999999 | 493.83408000000003 | |
| threads=2 chunk_size=65536 | 496.75344999999993 | 491.04488 | |
| threads=3 chunk_size=0 | 2324.007899999999 | 333.45305 | |
| threads=3 chunk_size=1 | 2309.6744444444444 | 389.06447999999983 | |
| threads=3 chunk_size=2 | 1360.4386000000002 | 360.83767000000006 | |
| threads=3 chunk_size=4 | 893.5689899999999 | 359.1863900000001 | |
| threads=3 chunk_size=8 | 594.2066099999998 | 340.91036999999983 | |
| threads=3 chunk_size=16 | 443.92572 | 336.71448 | |
| threads=3 chunk_size=1024 | 336.041 | 333.66865000000007 | |
| threads=3 chunk_size=65536 | 333.34274000000005 | 331.6086 | |
| threads=4 chunk_size=0 | 2427.310400000001 | 269.15664999999996 | |
| threads=4 chunk_size=1 | 2428.913600000001 | 317.30904999999996 | |
| threads=4 chunk_size=2 | 1388.6960000000004 | 279.70716 | |
| threads=4 chunk_size=4 | 810.2486000000001 | 277.3220599999999 | |
| threads=4 chunk_size=8 | 505.85546 | 275.49273999999997 | |
| threads=4 chunk_size=16 | 354.39224 | 271.93818000000016 | |
| threads=4 chunk_size=1024 | 266.44991999999996 | 267.71892 | |
| threads=4 chunk_size=65536 | 334.1695 | 268.95080999999993 | |
| threads=5 chunk_size=0 | 2072.469200000001 | 228.36536 | |
| threads=5 chunk_size=1 | 2090.6867999999995 | 258.4376400000001 | |
| threads=5 chunk_size=2 | 1144.2234999999996 | 238.52624 | |
| threads=5 chunk_size=4 | 708.6009300000001 | 235.39597 | |
| threads=5 chunk_size=8 | 400.67623 | 233.64247000000006 | |
| threads=5 chunk_size=16 | 299.5613299999999 | 228.9460399999999 | |
| threads=5 chunk_size=1024 | 225.77935999999997 | 228.24191999999988 | |
| threads=5 chunk_size=65536 | 226.09871000000007 | 228.16843 | |
| threads=6 chunk_size=0 | 1770.0350999999998 | 198.31024000000005 | |
| threads=6 chunk_size=1 | 1787.8928999999991 | 230.82468 | |
| threads=6 chunk_size=2 | 1042.1054999999997 | 214.63073000000003 | |
| threads=6 chunk_size=4 | 641.47724 | 217.35527000000005 | |
| threads=6 chunk_size=8 | 353.3799500000001 | 202.06297000000006 | |
| threads=6 chunk_size=16 | 264.3303200000001 | 201.3278 | |
| threads=6 chunk_size=1024 | 204.2944299999999 | 209.72317999999984 | |
| threads=6 chunk_size=65536 | 205.00369000000012 | 208.20205000000013 |
| MERSENNE | Dynamic | Static | no omp |
|---|---|---|---|
| 956.23506 | |||
| threads=1 chunk_size=0 | 1459.2138000000004 | 979.6839999999996 | |
| threads=2 chunk_size=0 | 2454.2849 | 491.3553899999998 | |
| threads=3 chunk_size=0 | 2324.007899999999 | 333.45305 | |
| threads=4 chunk_size=0 | 2427.310400000001 | 269.15664999999996 | |
| threads=5 chunk_size=0 | 2072.469200000001 | 228.36536 | |
| threads=6 chunk_size=0 | 1770.0350999999998 | 198.31024000000005 |
Π ΠΈΡ. 9. ΠΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΡ ΡΠΈΡΠ»Π° ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠ΅Π· chunk_size, Mersenne
| MERSENNE | Dynamic | Static | no omp |
|---|---|---|---|
| 956.23506 | |||
| threads=1 | 980.7897299999997 | 977.4954800000005 | |
| threads=2 | 496.75344999999993 | 491.04488 | |
| threads=3 | 333.34274000000005 | 331.6086 | |
| threads=4 | 266.44991999999996 | 267.71892 | |
| threads=5 | 225.77935999999997 | 228.16843 | |
| threads=6 | 204.2944299999999 | 198.31024000000005 |
Π ΠΈΡ. 10. ΠΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΡ ΡΠΈΡΠ»Π° ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΡΡΡΠΈΠΉ chunk_size, Mersenne
| MERSENNE | Dynamic | Static | no omp |
|---|---|---|---|
| 956.23506 | |||
| threads=1 chunk_size=0 | 1459.2138000000004 | 979.6839999999996 | |
| threads=1 chunk_size=1 | 1457.8219000000004 | 1155.4581000000005 | |
| threads=1 chunk_size=2 | 1228.0756 | 1038.6444999999994 | |
| threads=1 chunk_size=4 | 1094.0227 | 1002.3167000000001 | |
| threads=1 chunk_size=8 | 1038.6502 | 991.3661299999997 | |
| threads=1 chunk_size=16 | 1012.1187000000001 | 983.51205 | |
| threads=1 chunk_size=1024 | 981.8386800000001 | 977.4677800000002 | |
| threads=1 chunk_size=65536 | 980.7897299999997 | 977.4954800000005 |
Π ΠΈΡ. 11. ΠΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Ρ ΠΎΡΠΊΠ»ΡΡΡΠ½Π½ΡΠΌ OpenMP ΠΈ Ρ Π²ΠΊΠ»ΡΡΡΠ½Π½ΡΠΌ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ, Mersenne
Π ΠΈΡ. 12. ΠΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Ρ ΠΎΡΠΊΠ»ΡΡΡΠ½Π½ΡΠΌ OpenMP ΠΈ Ρ Π²ΠΊΠ»ΡΡΡΠ½Π½ΡΠΌ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ, Mersenne
| MERSENNE | Dynamic | Static | no omp |
|---|---|---|---|
| 956.23506 | |||
| * | * | 198.31024000000005 | |
| * | 204.2944299999999 | * |
ΠΠ°ΠΊ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π»ΠΎΡΡ, static Π² ΡΠ΅Π»ΠΎΠΌ ΠΏΠΎΠΊΠ°Π·Π°Π» Π»ΡΡΡΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ½ Π½Π΅ ΡΡΠ°ΡΠΈΡ Π²ΡΠ΅ΠΌΡ Π½Π° ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ - ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ Π²ΡΠ΄Π΅Π»Π΅Π½ΠΎ Π·Π°ΡΠ°Π½Π΅Π΅ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ. ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π² ΡΠΈΠΊΠ»Π΅ ΠΎΠ΄Π½ΠΎΡΠΈΠΏΠ½ΡΠ΅, ΡΡΠΎ ΠΎΠΏΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠΏΠΎΡΠΎΠ±. ΠΠΎ ΠΊΠ°ΠΊ Ρ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»Π°, ΡΡΠΎ Π²Π΅ΡΠ½ΠΎ Π½Π΅ Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π²ΡΠ΅Π³Π΄Π°, Π² ΠΈΠ½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π»ΡΡΡΠ΅ dynamic
Π’Π°ΠΊΠΆΠ΅, ΠΊΠ°ΠΊ ΠΈ ΠΎΠΆΠΈΠ΄Π°Π»ΠΎΡΡ ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Oracle, ΠΏΠΎ Π³ΡΠ°ΡΠΈΠΊΠ°ΠΌ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ chunk_size ΡΡΠΊΠΎΡΡΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. Π£ΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠ΅ false sharing - ΡΡΠΎ Ρ ΠΎΡΠΎΡΠΎ
Π Π΄ΡΡΠ³ΠΈΡ ΡΠ»ΡΡΠ°ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ Π½Π° ΠΏΠΎΡΠΎΠΊΠΈ, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ Π±ΠΎΠ»ΡΡΠ΅Π³ΠΎ ΠΎΠ±ΡΠ΅ΠΌΠ° ΡΠ°Π±ΠΎΡΡ Π½Π° ΡΠ°Π½ΠΊ (ΠΏΡΡΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ chunksize) ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΡ false sharing.
Π Π½Π°ΡΠ°Π»Π΅ Π³ΡΠ°ΡΠΈΠΊΠ° ΠΏΡΠΈ ΠΌΠ°Π»ΡΡ ΠΏΠΎΡΠΎΠΊΠ°Ρ ΠΈ ΠΌΠ°Π»ΡΡ chunk_size ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΡΡΠ°Π±ΠΎΡΠ°Π»ΠΈ ΠΏΠ»ΠΎΡ ΠΎ: ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠΌΠΈ ΡΠ°ΡΡ ΠΎΠ΄Π°ΠΌΠΈ Π½Π° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ Π² ΠΏΠΎΡΠΎΠΊΠ°Ρ . ΠΠ°Π»Π΅Π΅ ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΈΠ΄Π΅ΡΡ, ΡΡΠΎ ΠΌΠ΅ΠΆΠ΄Ρ 1024 ΠΈ 65536 ΡΠ°Π½ΠΊΠ°ΠΌΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ ΡΠΆΠ΅ Π½Π΅ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΡΠ΅ ΠΈ ΠΎΠΏΡΠΈΠΌΡΠΌ, ΠΊΠ°ΠΊ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π΄ΠΎΡΡΠΈΠ³Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΏΠΎΡΠΎΠΊΠΎΠ²
ΠΠΎ ΡΠ°Π±Π»ΠΈΡΠ½ΡΠΌ Π΄Π°Π½Π½ΡΠΌ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ, ΡΡΠΎ Π² ΡΠ»ΡΡΠ°Π΅ static ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ ΡΠΊΠ°Π·Π°Π½ΠΈΡ ΡΠ°Π½ΠΊΠΎΠ² ΠΏΠΎΠΊΠ°Π·ΡΠ²Π°Π΅Ρ Ρ ΠΎΡΠΎΡΠΈΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΠΌ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠ³ΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° ΡΠ°Π½ΠΊΠΎΠ². ΠΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ ΡΡΠΎ static ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠ°Π²ΠΈΡ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π΅ 1, Π° ΡΠΈΡΠ»ΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ ΡΠΈΠΊΠ»Π°, Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ Π½Π° ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½Π½ΡΡ ΠΊ ΡΠΈΠΊΠ»Ρ. Π ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Π΄Π»Ρ dynamic Π΅ΡΡΡ ΡΡΡΠΊΠ°Ρ Π²Π·Π°ΠΈΠΌΠΎΡΠ²ΡΠ·Ρ: Π±ΠΎΠ»ΡΡΠ΅ ΡΠ°Π½ΠΊΠΎΠ² - Π»ΡΡΡΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ Π½Π΅Π³ΠΎ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ 1
ΠΡΠ»ΠΈ ΡΡΠ°Π²Π½ΠΈΠ²Π°ΡΡ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΡ, ΡΠΎ ΠΈΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΡΠ°Π²ΠΈΡΡ ΠΏΠΎ ΡΠΊΠΎΡΠΎΡΡΠΈ:
- LCG
- Xor Shift Random
- Mersenne
ΠΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ ΡΡΠΎ LCG ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ, Xor Shift Random ΡΡΡΡ ΠΏΠΎΠ±ΠΎΠ»ΡΡΠ΅, Π½ΠΎ ΠΊΡΠΎΠΌΠ΅ ΡΠΈΠΊΠ»Π° Π½Π° 19 ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ ΠΈ ΠΏΠΎΠ±ΠΈΡΠΎΠ²ΡΡ ΡΠ΄Π²ΠΈΠ³ΠΎΠ² Π² Π½ΡΠΌ Π½ΠΈΡΠ΅Π³ΠΎ Π½Π΅Ρ, Π° Mersenne Π²ΡΠ·ΡΠ²Π°Π΅Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠ½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ, ΡΡΠΎ Π΄ΠΎΠ»Π³ΠΎ
ΠΡΡΡΠΈΠΉ ΡΡΡΠ΅Π΄Π½ΡΠ½Π½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ 75 ΠΌΡ ΠΏΡΠΈ static, threads=6, Π±Π΅Π· chunk_size
ΠΡΠΈ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ ΡΠ°Π½ΠΊΠΎΠ² ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ 80 ΠΌΡ, ΡΡΠΎ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π±Π»ΠΈΠ·ΠΊΠΎ











