{"id":338186,"date":"2022-09-09T21:00:09","date_gmt":"2022-09-09T21:00:09","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=338186"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=338186","title":{"rendered":"<span>Cache pollution? \u0417\u0430\u043f\u0430\u0441\u0430\u0439\u0442\u0435\u0441\u044c \u0442\u0435\u0441\u0442\u0430\u043c\u0438<\/span>"},"content":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>    \u0412\u0441\u0435\u043c \u0432\u0435\u0434\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438? \u0414\u043b\u044f \u0438\u0433\u0440 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e, \u043d\u0443 \u043c\u043e\u0436\u0435\u0442 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0442\u0440\u0438-\u0432-\u0440\u044f\u0434 \u043d\u0435 \u0441\u0442\u0440\u0430\u0434\u0430\u0435\u0442 \u044d\u0442\u0438\u043c. \u041a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u0435\u0440\u0435\u0431\u0440\u044f\u043d\u043e\u0439 \u043f\u0443\u043b\u0438 \u043d\u0435\u0442, \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432, \u0441\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u0441\u044f \u043d\u0438\u0436\u0435, \u0430 \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442, \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0435\u043c SoA, AoS \u0448\u0430\u0431\u043b\u043e\u043d\u044b. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043d\u0435 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0444\u0430\u0439\u043b\u0435\u0440\u044b \u0438 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0443\u0437\u043a\u0438\u0435 \u043c\u0435\u0441\u0442\u0430, \u043d\u043e \u0432\u0441\u0435 \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043d\u0435 \u0434\u0435\u043b\u0430\u043b\u0438 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0442\u0430\u043a\u0438\u043c \u0443\u0437\u043a\u0438\u043c \u043c\u0435\u0441\u0442\u043e\u043c \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 &#171;\u0436\u0435\u043b\u0435\u0437\u043e&#187;. \u041c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0431\u043e\u0442\u044b, \u043d\u043e CPU c \u0435\u0433\u043e \u0433\u0438\u0433\u0430\u0433\u0435\u0440\u0446\u0430\u043c\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u0430\u0438\u0432\u0430\u0442\u044c 90% \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e &#171;\u043a\u043e\u0440\u043c\u0438\u0442\u044c&#187; \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u041e\u0434\u043d\u043e\u0439 (\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c) \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u043d\u044c\u0448\u0435, \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0442\u044c \u0438 \u0443\u043c\u0435\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043a\u044d\u0448\u0430\u043c\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0443\u0440\u043e\u0432\u043d\u0435\u0439.  <br \/>    \u0422\u0443\u0442 \u043d\u0430 \u0432\u0438\u043a\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u043e (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Cache_pollution\" rel=\"noopener noreferrer nofollow\">https:\/\/en.wikipedia.org\/wiki\/Cache_pollution<\/a>) \u043a\u0430\u043a &#171;\u043d\u0430 \u043f\u0430\u043b\u044c\u0446\u0430\u0445&#187; \u0431\u044b\u0441\u0442\u0440\u0435\u043d\u044c\u043a\u043e \u0443\u0431\u0438\u0442\u044c \u043f\u0435\u0440\u0444 \u043d\u0430 \u043e\u0431\u0445\u043e\u0434\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u043e\u0431\u0449\u0435\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043d\u0435\u0442, \u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f (This can be achieved by using special\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Cache_control_instruction\" rel=\"noopener noreferrer nofollow\">cache control instructions<\/a>,\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Operating_system\" rel=\"noopener noreferrer nofollow\">operating system<\/a>\u00a0support or hardware support). \u041c\u043e\u0436\u043d\u043e \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u044d\u0448\u0430, \u0447\u0442\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438 \u0434\u0435\u043b\u0430\u044e\u0442 (\u0433\u0434\u0435 \u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043d\u0430 \u0445\u0430\u0431\u0440\u0435 \u0431\u044b\u043b\u0430 \u043d\u043e\u0432\u043e\u0441\u0442\u044c, \u0447\u0442\u043e \u0418\u043d\u0442\u0435\u043b \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043d\u0430 L1 \u043a\u044d\u0448 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 32\u043a\u0431, \u0437\u0430\u043d\u043e\u0432\u043e \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0431\u043b\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043d\u0435\u043c\u0443, \u0441\u043e\u0440\u044f\u043d \u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u0441\u0441\u044b\u043b\u043a\u0443), \u043d\u043e \u044d\u0442\u043e \u0434\u043e\u0440\u043e\u0433\u043e, \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u043d\u0430 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430\u0445 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u043e\u0432, \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0439\u0434\u0443\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044d\u0442\u043e\u0442 \u043a\u044d\u0448 \u043e\u0442\u0440\u0430\u0432\u044f\u0442, \u043e\u043f\u044f\u0442\u044c. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043a\u0430\u043a \u043f\u043e\u0447\u0438\u043d\u0438\u0442\u044c? \u0433\u043e \u043f\u043e\u0434 \u043a\u0430\u0442&#8230;\u00a0<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8d4\/0cf\/098\/8d40cf0987707a0f3ae6c865fcbbaf88.png\" alt=\"\u041a\u0414\u041f\u0412 (\u041d\u0430\u0439\u0434\u0435\u043d\u0430 \u0433\u0434\u0435\u0442\u043e \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043e\u0432)\" title=\"\u041a\u0414\u041f\u0412 (\u041d\u0430\u0439\u0434\u0435\u043d\u0430 \u0433\u0434\u0435\u0442\u043e \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043e\u0432)\" width=\"496\" height=\"348\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8d4\/0cf\/098\/8d40cf0987707a0f3ae6c865fcbbaf88.png\"\/><figcaption>\u041a\u0414\u041f\u0412 (\u041d\u0430\u0439\u0434\u0435\u043d\u0430 \u0433\u0434\u0435\u0442\u043e \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043e\u0432)<\/figcaption><\/figure>\n<hr\/>\n<p>    \u0412\u0441\u0435 \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 &#8212; <strong>AMD Ryzen 9 3900X 12-Core 3.80 GHz<\/strong><\/p>\n<details class=\"spoiler\">\n<summary>\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u044d\u0448\u0435\u0439<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cmake\">Cache size   L1 Data 32 KiB (x12)   L1 Instruction 32 KiB (x12)   L2 Unified 512 KiB (x12)   L3 Unified 16384 KiB (x4) Cache associativity    Level 1 cache size - 12 x 32 KB 8-way set associative caches   Level 2 cache size - 12 x 512 KB 8-way set associative unified caches   Level 3 cache size - 4 x 16 MB 16-way set associative shared caches Cache latency 4 (L1 cache)   12 (L2 cache)   40 (L3 cache)<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>    \u0412\u043e\u043e\u0431\u0449\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u043f\u0430\u043c\u044f\u0442\u0438 (\u043a\u0442\u043e-\u0442\u043e \u0447\u0438\u0442\u0430\u043b \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u0435\u0440\u0440\u0430\u0442\u044b \u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0438\u043d\u0442\u0435\u043b\u043e\u0432?) \u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u044d\u0448\u0435\u0439 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435, \u0432\u0435\u0449\u044c \u043e\u0447\u0435\u043d\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u0430\u044f \u0434\u0430\u0436\u0435 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432, \u043d\u0435 \u0433\u043e\u0432\u043e\u0440\u044f \u0443\u0436\u0435 \u043e \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430\u0445 \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u0440\u0430\u0441\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0443\u0447\u0448\u0438\u043c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0438 \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0432\u043e\u0435\u043c \u0436\u0435\u043b\u0435\u0437\u0435, \u0442\u0430\u043a \u0432\u0435\u0440\u043d\u0435\u0435. <br \/>    \u042d\u0442\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438 \u043e\u043f\u044b\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438 \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c\u0438 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0438\u0433\u0440\u043e\u0432\u044b\u0445 \u0434\u0432\u0438\u0436\u043a\u0430\u0445 (EA Unity, Dagor Engine, 4A Engine). \u0412 \u0442\u0435\u0441\u0442\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f <strong>c++14 std<\/strong> \u0438 <strong>EASTL <\/strong>(<a href=\"https:\/\/github.com\/electronicarts\/EASTL\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/github.com\/electronicarts\/EASTL<\/u><\/a>), \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u0441\u0442\u043e\u0432, EASTL &#8212; \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u0435 \u0444\u0430\u043a\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0438\u0433\u0440, \u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0437\u0430 \u0432\u0440\u0435\u043c\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0432\u0438\u0436\u043a\u0430 \u043d\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0441\u0432\u043e\u044f stl \u0441 \u043f\u0440\u0435\u0444\u0435\u0440\u0430\u043d\u0441\u043e\u043c \u0438 \u0434\u0430\u043c\u0430\u043c\u0438. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0432\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0432\u0437\u044f\u0442\u044b \u0438\u0437 \u0433\u043e\u043b\u043e\u0432\u044b, \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0432 \u043f\u0440\u043e\u0434\u0435 \u043d\u0435\u0442, \u044f \u043d\u0430\u0434\u0435\u044e\u0441\u044c&#8230; \ud83d\ude42  <\/p>\n<p>    \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0442\u0435\u0441\u0442 \u0441 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043c\u0443\u0447\u0430\u0442\u044c \u043a\u044d\u0448 \u043f\u0440\u0438 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a, \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e map, eastl::map, \u0438 \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u0443\u044e map, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u0443\u044e \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430<\/p>\n<details class=\"spoiler\">\n<summary>map\/eastl::map\/fastmap find (1 \u043c\u043b\u043d \u043f\u0430\u0440)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">constexpr u32 test_size = 1000000;  struct map_holder {     std::map&lt;int, int> test_map_std;     eastl::map&lt;int, int> test_map_eastl;     fastmap&lt;int, int> test_fastmap;      map_holder() {         for (int j=0; j &lt; test_size; j++) {             test_map_std.insert({j, j+1});             test_map_eastl.insert({j, j+1});             test_fastmap.insert({j, j+1});         }     } };  static map_holder holder;  static void EAstlMapFind(benchmark::State&amp; state) {   for (auto _ : state) {     for (int j = 0; j &lt; state.range(1); ++j) {       auto v = holder.test_map_eastl.find(j);       benchmark::DoNotOptimize(v);     }   } } BENCHMARK(EAstlMapFind)->Args({1, test_size});  static void MapFind(benchmark::State&amp; state) {   for (auto _ : state) {     for (int j = 0; j &lt; state.range(1); ++j) {       auto v = holder.test_map_std.find(j);       benchmark::DoNotOptimize(v);     }   } } BENCHMARK(MapFind)->Args({1, test_size});  static void FastMapFind(benchmark::State&amp; state) {   for (auto _ : state) {     for (int j = 0; j &lt; state.range(1); ++j) {       auto v = holder.test_fastmap.find(j);       benchmark::DoNotOptimize(v);     }   } } BENCHMARK(FastMapFind)->Args({1, test_size});<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/331\/d06\/223\/331d062235db55f538e57dd642868659.png\" width=\"536\" height=\"98\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/331\/d06\/223\/331d062235db55f538e57dd642868659.png\"\/><figcaption><\/figcaption><\/figure>\n<p>    \u0422\u0435\u0441\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0440\u044f\u0434 \u043e\u0448\u0438\u0431\u043e\u043a, fastmap \u0441\u0434\u0435\u043b\u0430\u043d \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440, std\/eastl::map \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0447\u0435\u0440\u0435\u0437 red-black tree (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Red%E2%80%93black_tree\" rel=\"noopener noreferrer nofollow\">https:\/\/en.wikipedia.org\/wiki\/Red\u2013black_tree<\/a>). \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c \u0442\u0435\u0441\u0442, \u0447\u0442\u043e\u0431\u044b \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u043c\u044f\u0433\u043a\u043e\u0435 \u0441 \u043c\u044f\u0433\u043a\u0438\u043c \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/p>\n<details class=\"spoiler\">\n<summary>map\/unordered_map\/eastl::map\/fastmap find (1 \u043c\u043b\u043d \u043f\u0430\u0440)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">constexpr u32 test_size = 1000000;  struct map_holder {     std::unordered_map&lt;int, int> test_map_unordered;     std::map&lt;int, int> test_map_std;     eastl::map&lt;int, int> test_map_eastl;     fastmap&lt;int, int> test_fastmap;      map_holder() {         for (int j=0; j &lt; test_size; j++) {             test_map_std.insert({j, j+1});             test_map_eastl.insert({j, j+1});             test_fastmap.insert({j, j+1});             test_map_unordered.insert({j, j+1});         }     } };  static map_holder holder;  static void UnorderedMapFind(benchmark::State&amp; state) {   for (auto _ : state) {     for (int j = 0; j &lt; state.range(1); ++j) {       auto v = holder.test_map_unordered.find(j);       benchmark::DoNotOptimize(v);     }   } } BENCHMARK(UnorderedMapFind)->Args({1, test_size});  static void EAstlMapFind(benchmark::State&amp; state) {   for (auto _ : state) {     for (int j = 0; j &lt; state.range(1); ++j) {       auto v = holder.test_map_eastl.find(j);       benchmark::DoNotOptimize(v);     }   } } BENCHMARK(EAstlMapFind)->Args({1, test_size});  static void MapFind(benchmark::State&amp; state) {   \/\/ Code inside this loop is measured repeatedly   for (auto _ : state) {     for (int j = 0; j &lt; state.range(1); ++j) {       auto v = holder.test_map_std.find(j);       benchmark::DoNotOptimize(v);     }   } } BENCHMARK(MapFind)->Args({1, test_size});  static void FastMapFind(benchmark::State&amp; state) {   for (auto _ : state) {     for (int j = 0; j &lt; state.range(1); ++j) {       auto v = holder.test_fastmap.find(j);       benchmark::DoNotOptimize(v);     }   } } BENCHMARK(FastMapFind)->Args({1, test_size});<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/256\/8a9\/078\/2568a9078fa2e680488c8c1bd90f41a0.png\" width=\"560\" height=\"115\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/256\/8a9\/078\/2568a9078fa2e680488c8c1bd90f41a0.png\"\/><figcaption><\/figcaption><\/figure>\n<p>    \u0423\u0436\u0435 \u043b\u0443\u0447\u0448\u0435, \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435, \u043d\u043e \u0441\u0430\u043c \u0442\u0435\u0441\u0442 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0442.\u0435. \u043c\u044b \u0441\u0430\u043c\u0438 \u043e\u0431\u0443\u0447\u0430\u0435\u043c BPU \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u0447\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u0432\u044b\u0431\u043e\u0440\u043a\u0438, \u0438 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0441\u0430\u043c\u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043f\u0430\u043c\u044f\u0442\u0438, \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e, \u0447\u0435\u043c \u0431\u043b\u0438\u0436\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043a \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u043a\u044d\u0448\u0430, \u0442\u0435\u043c \u0441\u0438\u043b\u044c\u043d\u0435\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f \u043f\u0440\u043e\u043c\u0430\u0445\u043e\u0432 (cache misses). \u041c\u0430\u0441\u0441\u043e\u0432\u043e\u0435 \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u043c\u0430\u0445\u043e\u0432 \u043a\u044d\u0448\u0430, \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u043d\u043e\u0441\u0438\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 &#171;\u043e\u0442\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u044d\u0448\u0430&#187; \u0434\u0430\u043d\u043d\u044b\u043c\u0438 &#8212; cache pollution.<\/p>\n<p>    \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043e\u0440\u0438\u0438: \u0432\u0440\u0435\u043c\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u0435\u0451 \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u043a\u044d\u0448, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435. \u0422\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u043a\u044d\u0448\u0430\u043c\u0438 \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u043a\u043e\u0433\u0435\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u043a\u044d\u0448\u0430\u043c\u0438 \u044f\u0434\u0435\u0440 \u0432 \u043c\u043d\u043e\u0433\u043e\u044f\u0434\u0435\u0440\u043d\u044b\u0445 \u0438  \u043c\u043d\u043e\u0433\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445.<\/p>\n<figure class=\"float full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/30d\/835\/b33\/30d835b33e0d9dfb133fd0bf57af080b.png\" width=\"900\" height=\"1671\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/30d\/835\/b33\/30d835b33e0d9dfb133fd0bf57af080b.png\"\/><figcaption><\/figcaption><\/figure>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0441 \u044d\u0442\u0438\u043c \u0437\u043d\u0430\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c \u0442\u0435\u0441\u0442, \u0442\u0430\u043a \u0447\u0442\u043e\u0431\u044b \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0435. \u0421\u043c\u044b\u0441\u043b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f &#8212; \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0438\u0433\u0440\u043e\u0432\u044b\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043b\u0435\u0436\u0430\u0442 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0434\u0440\u0443\u0433 \u0437\u0430 \u0434\u0440\u0443\u0433\u043e\u043c, \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u043f\u043e\u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u044f\u0434\u043e\u043c, \u0442\u043e cpu \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0449\u0435 \u0441 \u043d\u0438\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043e\u043d\u0438 \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u044f\u0442\u0441\u044f \u0432 \u043a\u044d\u0448, \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043b\u0430\u0437\u0438\u0442\u044c \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043a\u0443 \u0447\u0430\u0441\u0442\u043e. \u0412\u0441\u0435 \u0442\u0430\u043a, \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c\u0438, \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445 \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435, \u0438 \u0432 \u043a\u0430\u043a\u043e\u0439 \u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0441\u0435\u0434\u0430\u043d\u0438\u044f \u043f\u043e \u043f\u0435\u0440\u0444\u0443, \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0443\u0439\u0442\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0431\u043b\u0438\u0436\u0435 \u0432 \u043e\u0434\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0440\u0435\u0437\u043a\u0443\u044e \u0434\u0435\u0433\u0440\u0430\u0434\u0430\u0446\u0438\u044e \u043f\u0435\u0440\u0444\u0430 \u043d\u0430 \u043e\u0431\u0445\u043e\u0434\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430. <br \/>    \u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043a\u044d\u0448\u0435 \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e, \u043f\u0440\u043e\u043c\u0430\u0445 \u043a\u044d\u0448\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043b\u0438\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043a\u044d\u0448\u0430 \u0438 \u043f\u043e\u0438\u0441\u043a\u0443 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0432 \u043a\u044d\u0448\u0435 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0444\u0430\u0439\u043b\u0430 \u043f\u043e\u0434\u043a\u0430\u0447\u043a\u0438. \u041d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 Intel\/AMD \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u043c\u0430\u0445\u0430 \u043a\u044d\u0448\u0430 L3 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0431\u043e\u043b\u0435\u0435 30 \u0446\u0438\u043a\u043b\u043e\u0432 + \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u0430 \u044d\u0442\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u0440\u043e\u0441\u0442\u043e\u044f. \u0422\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u043c\u0430\u0445\u0438 \u043e\u0431\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u0440\u043e\u0433\u043e. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0442\u0430\u043a\u0436\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u043c\u0430\u0445\u0430 \u0432 \u043a\u044d\u0448\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u0441\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u044d\u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u043a\u044d\u0448.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/5a7\/074\/c28\/5a7074c2846e6eb30a68543b43ecbe76.png\" width=\"1000\" height=\"186\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5a7\/074\/c28\/5a7074c2846e6eb30a68543b43ecbe76.png\"\/><figcaption><\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043b\u0438 \u0431\u043b\u0438\u0437\u043a\u043e \u043a page size \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 (cache poisoning)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">u32 constexpr operator\"\" _B(unsigned long long int n) { return n; } u32 constexpr operator\"\" _KB(unsigned long long int n) { return n * 1024; } u32 constexpr operator\"\" _MB(unsigned long long int n) { return n * 1000 * 1000; }  const u32 cache_line_size = 64_B; const u32 page_size = 4_KB;  struct TestNode {   TestNode *next = nullptr;   char members[page_size]; };  static TestNode *find_last_node(TestNode *head, u32 num_ops) {   while (num_ops--) head = head->next;   return head; }  static void cpu_cache_access(benchmark::State &amp;state) {   const auto mem_block_size = operator\"\"_KB(state.range(0));   const auto num_nodes = mem_block_size \/ cache_line_size;    std::vector&lt;TestNode> nodes(num_nodes);   for (size_t i = 0; i &lt; nodes.size() - 1; i++) nodes[i].next = &amp;nodes[i + 1];   nodes[nodes.size() - 1].next = &amp;nodes[0];    const u32 num_ops = 1_MB;   while (state.KeepRunningBatch(num_ops)) {     auto last_node = find_last_node(&amp;nodes[0], num_ops);     benchmark::DoNotOptimize(last_node);   }    state.counters[\"Nodes\"] = benchmark::Counter(num_nodes, benchmark::Counter::kDefaults, benchmark::Counter::OneK::kIs1024);   state.counters[\"Read Rate\"] = benchmark::Counter( state.iterations() * cache_line_size, benchmark::Counter::kIsRate, benchmark::Counter::OneK::kIs1024); } BENCHMARK(cpu_cache_access)     ->ArgName(\"KB\")     ->RangeMultiplier(2)     ->Range(1, 2048)     ->Range(4096, 16384)     \/\/ L1 Cache     ->DenseRange(1, 8, 1)     \/\/ L2 Cache     ->DenseRange(48, 160, 16)     \/\/ L3 Cache     ->DenseRange(512, 4096, 512);<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/828\/751\/5aa\/8287515aa33bf29d8331eb7f35f0f6ba.png\" alt=\"\" title=\"\" width=\"965\" height=\"287\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/828\/751\/5aa\/8287515aa33bf29d8331eb7f35f0f6ba.png\"\/><figcaption><\/figcaption><\/figure>\n<p>   \u0412\u044b\u0445\u043e\u0434 \u0437\u0430 \u0440\u0430\u043c\u043a\u0438 L3 \u043a\u044d\u0448\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u0441\u043e\u0432\u0441\u0435\u043c \u0443\u0436\u0435 \u043a \u043f\u043b\u0430\u0447\u0435\u0432\u043d\u044b\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u0441 \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u0431\u043e\u043b\u044c\u0448\u0435 20ns \u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c\u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0443. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0438\u0433\u0440\u0430\u0432 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430, \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0431\u0440\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u0438 \u043d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043e\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435, \u0432\u0441\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0436\u0435\u043b\u0435\u0437\u0430. <\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c31\/ad9\/75d\/c31ad975dda2b97484ba8fb3feee67de.png\" alt=\"\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0441\u0442\u0430\u0440\u0430\u044f (\u0435\u0449\u0435 2015 \u0433\u043e\u0434\u0430), \u043d\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0445\u043e\u0436\u0438 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\" title=\"\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0441\u0442\u0430\u0440\u0430\u044f (\u0435\u0449\u0435 2015 \u0433\u043e\u0434\u0430), \u043d\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0445\u043e\u0436\u0438 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\" width=\"497\" height=\"308\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/c31\/ad9\/75d\/c31ad975dda2b97484ba8fb3feee67de.png\"\/><figcaption>\u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0441\u0442\u0430\u0440\u0430\u044f (\u0435\u0449\u0435 2015 \u0433\u043e\u0434\u0430), \u043d\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0445\u043e\u0436\u0438 \u043d\u0430 \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b<\/figcaption><\/figure>\n<p>    \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0431\u0445\u043e\u0434 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 65\u041a\u0431 \u043a\u0430\u0436\u0434\u044b\u0439, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u043c\u044b \u043d\u0430\u0448\u043b\u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0441 \u0442\u0430\u043a\u0438\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u043c \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u0435\u0433\u043e \u0432 \u0442\u0435\u0441\u0442\u0430\u0445. \u0412 \u0442\u0435\u0441\u0442\u0430\u0445 \u0432\u0441\u0435 \u0445\u043e\u0440\u043e\u0448\u043e, \u043a\u0440\u0430\u0441\u0438\u0432\u043e, \u043d\u0430\u043f\u0438\u0441\u0430\u043b\u0438 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0438 \u043f\u043e\u043a\u0430\u0437\u0430\u043b\u0438 \u043b\u0438\u0434\u0443, \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0434\u0430\u043a\u0448\u043d \u043a\u043e\u0434&#8230; \u0418 \u0432 \u0445\u0443\u0434\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0435 \u0432\u0438\u0434\u0438\u043c \u043f\u0440\u0438\u0440\u043e\u0441\u0442\u0430, \u0432 \u043b\u0443\u0447\u0448\u0435\u043c &#8212; \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a\u043e\u0439 \u0442\u043e \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u043e\u043e\u0431\u0449\u0435 \u043d\u0435 \u0441\u0442\u043e\u0438\u043b \u0437\u0430\u0442\u0440\u0430\u0447\u0435\u043d\u043d\u044b\u0445 \u0443\u0441\u0438\u043b\u0438\u0439. \u0425\u043e\u0442\u044f \u0434\u0430\u0436\u0435 \u043f\u0430\u0440\u0430 \u0444\u043f\u0441 \u043f\u0440\u0438\u0440\u043e\u0441\u0442\u0430 \u0432 \u0438\u0433\u0440\u0435, \u0438\u043b\u0438 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u0444\u043f\u0441 \u0442\u043e\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u043f\u043e\u0431\u0435\u0434\u0430. <\/p>\n<p>   \u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c? \u0420\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u0434\u0430\u043b\u044c\u0448\u0435, \u043f\u043e\u0447\u0435\u043c\u0443 \u0432 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0435 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u0445\u043e\u0440\u043e\u0448\u0438\u0439, \u0430 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0445\u043e\u0440\u043e\u0448\u043e \u0435\u0441\u043b\u0438 \u043f\u0430\u0440\u0430 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432. \u0415\u0441\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u044b \u0432 \u0441\u0442\u0435\u0440\u0438\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u0445, \u0432\u044b\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0431\u0440\u0430\u0443\u0437\u0435\u0440, \u043f\u043e\u0447\u0442\u0443, \u0441\u0442\u0443\u0434\u0438\u044e, \u0442\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0442\u0441\u044f \u043e\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0443 \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438, \u043d\u043e&#8230; \u043d\u0438\u043a\u0442\u043e \u043d\u0435 \u0436\u0438\u0432\u0435\u0442 \u0432 \u0441\u0442\u0435\u0440\u0438\u043b\u044c\u043d\u043e\u043c \u043c\u0438\u0440\u0435, \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0442\u044c \u0431\u0440\u0430\u0443\u0437\u0435\u0440 \u0438 \u0441\u0442\u0443\u0434\u0438\u044e \u043f\u0435\u0440\u0435\u0434 \u043a\u0430\u0436\u0434\u044b\u043c \u0437\u0430\u043f\u0443\u0441\u043a\u043e\u043c? \u041c\u0435\u043d\u044f \u043d\u0435 \u0445\u0432\u0430\u0442\u0438\u043b\u043e \u043d\u0430\u0434\u043e\u043b\u0433\u043e \u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u043c\u0430\u043d\u043a\u0438 \u0432\u043e\u0440\u043a\u0441 \u0438 \u044f \u0443\u0448\u0435\u043b \u043f\u0438\u0442\u044c \u043a\u043e\u0444\u0435 \u0438 \u0434\u0443\u043c\u0430\u0442\u044c.   <br \/>    \u041d\u0435 \u0431\u0443\u0434\u0443 \u0434\u043e\u043b\u0433\u043e \u0445\u043e\u0434\u0438\u0442\u044c \u0432\u043e\u043a\u0440\u0443\u0433 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0439 \u043f\u0440\u0438\u0447\u0438\u043d\u044b, \u0432 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 Chrome + Visual Studio + Slack \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u043b\u0438\u044f\u043b\u0438 \u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u0435\u0441\u0442\u043e\u0432, \u043f\u0440\u0438\u0447\u0435\u043c \u0445\u0443\u0436\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u044b\u043b\u043e \u043f\u0440\u0438 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u043c \u0441\u043b\u0430\u043a\u0435. \u0427\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u0441 \u043a\u044d\u0448\u0435\u043c \u0441\u043b\u0430\u043a \u044f \u043d\u0435 \u0437\u043d\u0430\u044e, \u043d\u043e \u043f\u0440\u0438 \u0435\u0433\u043e \u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u043b\u0443\u0447\u0448\u0435. \u0421\u0432\u043e\u0438 5% \u0432\u043b\u0438\u044f\u043d\u0438\u044f \u043d\u0430 \u0442\u0435\u0441\u0442\u044b \u044d\u0442\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u043d\u043e\u0441\u0438\u043b\u043e, \u0445\u0440\u043e\u043c \u0438 \u0441\u0442\u0443\u0434\u0438\u044f \u0442\u043e\u0436\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b\u0438, \u043d\u043e \u043d\u0435 \u0442\u0430\u043a \u0441\u0438\u043b\u044c\u043d\u043e, 1- 2% \u0447\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043d\u0435\u0441\u0442\u0438 \u0443\u0436\u0435 \u043a \u043f\u043e\u0433\u0440\u0435\u0448\u043d\u043e\u0441\u0442\u0438 \u0438\u0437\u043c\u0435\u0440\u0435\u043d\u0438\u0439. \u0421\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0440\u0430\u0437\u043d\u043e\u043c\u0443 \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u043f\u0435\u0440\u0444\u043e\u0440\u043c\u0430\u043d\u0441, \u044d\u0442\u043e \u043c\u0430\u043b\u043e\u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0435\u0441\u043b\u0438 \u0442\u0435\u0441\u0442\u044b \u0438 \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0432\u043b\u0435\u0437\u0430\u044e\u0442 \u0432 L1 \u0438 L2, \u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u0437\u0430\u0442\u0440\u0430\u0433\u0438\u0432\u0430\u0435\u043c \u0443\u0440\u043e\u0432\u0435\u043d\u044c L3, \u0442\u0435\u0441\u0442\u0443 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0434\u0435\u043b\u0438\u0442\u044c \u0435\u0433\u043e \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430\u043c\u0438 (\u0435\u0441\u043b\u0438 \u0447\u0442\u043e, \u0443 \u0432\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443). \u0422\u0430\u043a \u0438 \u0432 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438, \u043d\u0430\u0448\u0438\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043a\u043e\u043d\u043a\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u043c\u0438 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 \u0437\u0430 \u043a\u044d\u0448 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e L3 \u043d\u043e \u0442\u0430\u043a\u0436\u0435 \u0438 L2, \u0430 \u0442.\u043a. \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432\u0441\u0435 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u043d\u0430\u0448\u0438 \u043a\u044d\u0448\u0438 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043f\u043e\u0442\u043e\u043a \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0442\u0435\u043a\u0441\u0442\u0443\u0440 \u0438\u043b\u0438 \u0441\u0442\u0440\u0438\u043c\u0438\u043d\u0433 \u043c\u043e\u0434\u0435\u043b\u0435\u0439, \u043f\u043e\u0438\u0441\u043a \u0442\u0430\u043a\u0438\u0445 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u0442\u044f\u043d\u0443\u0442\u044c\u0441\u044f \u043d\u0430\u0434\u043e\u043b\u0433\u043e \u0438 \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0431\u043b\u0438\u0436\u0435 \u043a \u0440\u0435\u043b\u0438\u0437\u0443 \u0438\u0433\u0440\u044b.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/e63\/c3f\/6c0\/e63c3f6c06529bd74e7364e9ecf7b01b.png\" alt=\"\u0422\u0435\u0441\u0442\u044b \u0441 \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u043c Slack\" title=\"\u0422\u0435\u0441\u0442\u044b \u0441 \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u043c Slack\" width=\"834\" height=\"284\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/e63\/c3f\/6c0\/e63c3f6c06529bd74e7364e9ecf7b01b.png\"\/><figcaption>\u0422\u0435\u0441\u0442\u044b \u0441 \u0432\u044b\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u043c Slack<\/figcaption><\/figure>\n<p><strong>\u041f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u043c\u0441\u044f \u043a \u0433\u0440\u0430\u043d\u0438\u0446\u0430\u043c \u043a\u044d\u0448\u0435\u0439 (\u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c)<\/strong><\/p>\n<p>    \u0415\u0441\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0442\u0440\u0430\u043d\u0441\u043f\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u0430\u0442\u0440\u0438\u0446\u044b, \u0438\u043b\u0438 \u043a\u0430\u043a\u0430\u044f \u0442\u043e \u0434\u0440\u0443\u0433\u0430\u044f \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0430\u044f \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430. \u0421\u043d\u0438\u0436\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c, \u0435\u0441\u043b\u0438 \u0434\u0432\u0435 \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u043a\u044d\u0448-\u043b\u0438\u043d\u0438\u0439 \u0441\u043e\u0440\u0435\u0432\u043d\u0443\u044e\u0442\u0441\u044f \u0437\u0430 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 (\u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u043a\u044d\u0448 \u044d\u0442\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043a\u0438) \u0442\u0430\u043a\u0430\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f \u0440\u0435\u0434\u043a\u0430, \u043d\u043e \u0440\u043e\u0432\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 \u0431\u043b\u0438\u0437\u043a\u0438\u0435 \u043a \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u043a\u044d\u0448\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u044f\u0442 \u043a \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0432 \u043d\u0435\u043c \u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u044c\u0441\u044f \u0434\u0432\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0435 \u043d\u0430 \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435\u0436\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u042d\u0442\u043e \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0442\u0430\u043a, \u0447\u0442\u043e \u043d\u043e\u0432\u0430\u044f \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u0430\u044f \u043b\u0438\u043d\u0438\u044f \u0432\u044b\u0431\u0438\u0432\u0430\u0435\u0442 \u0438\u0437 \u043a\u044d\u0448\u0430 \u0443\u0436\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0443\u044e \u0432 \u043d\u0435\u0439, \u0447\u0442\u043e \u0438 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0440\u043e\u0441\u0442\u0443 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0445 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432 \u043d\u0430 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441 \u0442\u0430\u043a\u0438\u043c\u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430\u043c\u0438. <\/p>\n<p>    \u041f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0441\u0438\u043d\u0442\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439, \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u0434\u0435\u043b\u0430\u043d \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b, \u043d\u043e \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043f\u043e\u0434\u0431\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u043a \u0442\u0430\u043a\u043e\u043c\u0443, \u0447\u0442\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u044b \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 \u043a\u044d\u0448\u0430 (\u0430 \u043c\u044b \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0430\u0431\u043e\u0442\u044b, \u0442\u0430\u043a?), \u0442\u043e \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u0432\u0441\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u0435\u0435 \u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u043b\u0438\u043d\u0438\u044f\u043c\u0438 \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438 (cache associative way) \u043a\u044d\u0448\u0430 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 <strong>Critical Stride &#8212; <\/strong>\u044d\u0442\u043e \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u044d\u0448\u0430, \u043f\u043e\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0439 \u043d\u0430 \u0435\u0433\u043e \u0430\u0441\u0441\u043e\u0446\u0438\u0430\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c. \u0412 \u043c\u043e\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 critical stride =<strong> <\/strong>32\u043a\u0431 \\ 8 way = 4\u043a\u0431,  \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438 \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u043c\u0441\u044f \u043a \u0435\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c, \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0449\u0438\u043c\u0441\u044f \u043d\u0430 \u044d\u0442\u0443 \u0432\u0435\u043b\u0438\u0447\u0438\u043d\u0443 \u0440\u0435\u0437\u043a\u043e \u0432\u043e\u0437\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e cache misses \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u0443\u0431\u0438\u0432\u0430\u044f \u043f\u0435\u0440\u0444.<\/p>\n<details class=\"spoiler\">\n<summary>\u0442\u0440\u0430\u043d\u0441\u043f\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\u044b (critical stride)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">int transpose(int *mat, int size) {    for ( int i = 0 ; i &lt; size ; i++ )    for ( int j = 0 ; j &lt; size ; j++ )    {        int ij = i * size + j;        int ji = j * size + i;        int aux = mat[ij];        mat[ij] = mat[ji];        mat[ji] = aux;    }    return 0; }  static void TransposeMatrix(benchmark::State&amp; state) {   const int msize = state.range(0);   std::vector&lt;int> matv;   matv.resize(msize * msize);   int *mat = matv.data();   for ( int i = 0 ; i &lt; msize ; i++ )   for ( int j = 0 ; j &lt; msize ; j++ )      mat[i * msize + j] = i+j;    for (auto _ : state) {     benchmark::DoNotOptimize(transpose((int*)mat, msize));   } } BENCHMARK(TransposeMatrix)     ->DenseRange(63, 68, 1)     ->DenseRange(125, 129, 1)     ->DenseRange(254, 257, 1)     ->DenseRange(510, 514, 1)     ->DenseRange(1022, 1026, 1);<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8e5\/6c5\/a95\/8e56c5a9501b5c97e4414670b5aae9da.png\" alt=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u044b\u0445 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043a\u044d\u0448\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\" title=\"\u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u044b\u0445 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043a\u044d\u0448\u0435 \u043c\u0430\u0442\u0440\u0438\u0446\" width=\"882\" height=\"455\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8e5\/6c5\/a95\/8e56c5a9501b5c97e4414670b5aae9da.png\"\/><figcaption>\u041f\u0440\u0438\u043c\u0435\u0440 \u043d\u0435\u0443\u0434\u043e\u0431\u043d\u044b\u0445 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0432 \u043a\u044d\u0448\u0435 \u043c\u0430\u0442\u0440\u0438\u0446<\/figcaption><\/figure>\n<p><strong>\u041a\u043e\u0433\u0435\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u043a\u044d\u0448\u0430\u0445 (\u0421\u043e\u0433\u043b\u0430\u0441\u043e\u0432\u0430\u043d\u043d\u043e\u0441\u0442\u044c)<\/strong><br \/>    \u0415\u0441\u043b\u0438 \u0441 \u043a\u0430\u043a\u0438\u043c\u0438-\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u044f\u0434\u0440\u0430 (\u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u0430\u0445), \u0442\u043e \u043d\u0430\u0434\u043e \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043a\u044d\u0448\u0430\u043c\u0438. \u0417\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b, \u043d\u043e \u043e\u0431\u044b\u0447\u043d\u043e L1 \u043a\u044d\u0448 \u0443 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u044f\u0434\u0440\u0430 \u0441\u0432\u043e\u0439, \u044f\u0434\u0440\u0430 \u043a\u0430\u043a \u0442\u043e \u0434\u0435\u043b\u044f\u0442 \u043a\u044d\u0448 L2 (\u043e\u0434\u0438\u043d \u043d\u0430 \u0434\u0432\u0430 \u044f\u0434\u0440\u0430, \u0438\u043b\u0438 \u043e\u0434\u0438\u043d \u043d\u0430 4) \u0438 \u043e\u0431\u0449\u0438\u0439 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u044f\u0434\u0435\u0440 \u043a\u044d\u0448 L3. \u0422\u043e\u0433\u0434\u0430 \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0431\u0443\u0434\u0435\u0442 \u044f\u0432\u043d\u0430\u044f \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u0442\u043e\u0433\u043e \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u044f\u0434\u0435\u0440 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043f\u0438\u0435\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442. \u041d\u043e \u043a\u044d\u0448 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0431\u0430\u0439\u0442\u0430\u043c\u0438, \u0430 \u0441\u0440\u0430\u0437\u0443 \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439, \u0442.\u0435. \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044f \u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442 \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u0447\u0442\u043e \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0436\u0435\u043d\u044b \u0432\u0441\u0435 \u043a\u044d\u0448-\u043b\u0438\u043d\u0438\u0438 \u0432\u043e \u0432\u0441\u0435\u0445 \u044f\u0434\u0440\u0430\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u043c\u0435\u043b\u0438 \u043d\u0435\u0441\u0447\u0430\u0441\u0442\u044c\u0435 \u0435\u0451 \u0437\u0430\u043f\u0440\u043e\u0441\u0438\u0442\u044c. \u041d\u0430\u0447\u043d\u0435\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430, \u0443\u0431\u0435\u0434\u0438\u043c\u0441\u044f \u0447\u0442\u043e \u043f\u043e\u0442\u043e\u043a\u0438 \u043d\u0435 \u0430\u0444\u0444\u0435\u043a\u0442\u044f\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430 \u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u043a \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439  <\/p>\n<details class=\"spoiler\">\n<summary>\u043b\u043e\u043a\u0430\u043b\u044c\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0434\u043b\u044f \u043f\u043e\u0442\u043e\u043a\u0430 (iterations = 500M)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">struct NonAtomicVariable {   void RunThread() {     volatile int64_t counter = 0;     for (auto i = 0; i &lt; iterations; ++i) {       ++counter;     }   } };<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<pre><code>NonAtomicVariable: numThreads = 1 ... 224 ms NonAtomicVariable: numThreads = 2 ... 236 ms NonAtomicVariable: numThreads = 3 ... 245 ms NonAtomicVariable: numThreads = 4 ... 201 ms NonAtomicVariable: numThreads = 5 ... 185 ms NonAtomicVariable: numThreads = 6 ... 198 ms NonAtomicVariable: numThreads = 7 ... 175 ms NonAtomicVariable: numThreads = 8 ... 204 ms NonAtomicVariable: numThreads = 9 ... 227 ms NonAtomicVariable: numThreads = 10 ... 201 ms<\/code><\/pre>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u043a\u0430\u043a\u043e\u0435 \u0432\u0440\u0435\u043c\u044f (200\u043c\u0441), \u0437\u0430\u043f\u043e\u043c\u043d\u0438\u043b\u0438 \u0435\u0433\u043e, \u0432\u0441\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e. \u0423\u0441\u043b\u043e\u0436\u043d\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u043f\u0440\u043e\u0441\u0438\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0431\u0449\u0438\u0435 \u0438 \u0438\u0445 \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0432 \u043b\u044e\u0431\u043e\u0439 \u043c\u043e\u043c\u0435\u043d\u0442.<\/p>\n<details class=\"spoiler\">\n<summary>\u043e\u0431\u0449\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u043c\u0435\u0436\u0434\u0443 \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438  (iterations = 500M)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code>volatile int64_t _counter; struct NonAtomicShared { public:   void RunThread() {     for (auto i = 0; i &lt; iterations; ++i) {       ++_counter;     }   } };<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<pre><code>NonAtomicShared: numThreads = 1 ... 235 ms NonAtomicShared: numThreads = 2 ... 2381 ms NonAtomicShared: numThreads = 3 ... 3548 ms NonAtomicShared: numThreads = 4 ... 4957 ms NonAtomicShared: numThreads = 5 ... 6332 ms NonAtomicShared: numThreads = 6 ... 7522 ms NonAtomicShared: numThreads = 7 ... 8806 ms NonAtomicShared: numThreads = 8 ... 10183 ms NonAtomicShared: numThreads = 9 ... 11500 ms NonAtomicShared: numThreads = 10 ... 12787 ms<\/code><\/pre>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a\u043e\u0435 \u043a\u0440\u0438\u0442\u0438\u0447\u043d\u043e \u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0444\u0430 &#8212; \u043b\u044e\u0431\u043e\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0432 \u043b\u044e\u0431\u043e\u043c \u0438\u0437 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u0432\u0441\u044e \u043a\u044d\u0448 \u043b\u0438\u043d\u0438\u044e \u0432\u043e \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u044f\u0434\u0440\u0430\u0445 \u0438 \u0437\u0430\u0431\u0438\u0440\u0430\u0442\u044c \u0435\u0451 \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438. \u0411\u043e\u043b\u044c\u0448\u0435 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439, \u0431\u043e\u043b\u044c\u0448\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0445 \u0440\u0430\u0441\u0445\u043e\u0434\u043e\u0432. \u0412 \u0438\u0442\u043e\u0433\u0435 \u043d\u0430 10 \u043f\u043e\u0442\u043e\u043a\u0430\u0445, \u043e\u043d\u0438 \u043f\u0440\u043e\u0441\u0442\u043e &#171;\u0441\u0442\u043e\u044f\u0442&#187; \u0432\u0441\u0435 \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u044f \u043a\u044d\u0448, \u0438 \u043a\u0430\u043a-\u0442\u043e \u044d\u0442\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043c\u0435\u043d\u044f\u044f, \u0432\u0441\u0435 \u044d\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u043a\u044d\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u043c. \u0425\u043e\u0440\u043e\u0448\u043e, \u0447\u0442\u043e \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u0438\u043c\u0435\u044e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0435 \u0437\u0430\u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c\u0443 \u0443\u0447\u0430\u0441\u0442\u043a\u0443 \u043f\u0430\u043c\u044f\u0442\u0438 \u043f\u0440\u0438 \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u044d\u0442\u043e \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e \u0447\u0435\u0440\u0435\u0437 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0443\u044e \u0448\u0438\u043d\u0443, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043a\u0435. \u042d\u0442\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0434\u043e\u0440\u043e\u0433\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f, \u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0435 \u0441 \u043a\u044d\u0448\u0435\u043c, \u0441\u0432\u043e\u0434\u044f \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u043c\u0430\u0445\u043e\u0432 \u043a 1-2%. \u0423\u0436\u0435 \u043f\u0440\u043e\u0441\u0442\u0430\u044f (relaxed) \u043c\u043e\u0434\u0435\u043b\u044c \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u043b\u0443\u0447\u0448\u0435. \u0412\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0432\u044b\u0440\u043e\u0441\u043b\u043e \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a, \u043d\u043e \u043e\u0431\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0432\u044b\u0440\u043e\u0432\u043d\u044f\u043b\u043e\u0441\u044c.<\/p>\n<details class=\"spoiler\">\n<summary>\u0430\u0442\u043e\u043c\u0430\u0440\u043d\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f (\u043b\u043e\u043a \u043d\u0430 \u0443\u0447\u0430\u0441\u0442\u043e\u043a \u043f\u0430\u043c\u044f\u0442\u0438)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">std::atomic_int64_t _counter; struct AtomicVariable {   void RunThread() noexcept override {     for (auto i = 0; i &lt; Iterations; ++i) {       _counter.fetch_add(1, Order);     }   }   };<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<pre><code>AtomicVariable(relaxed): numThreads = 1 ... 2002 ms AtomicVariable(relaxed): numThreads = 2 ... 2018 ms AtomicVariable(relaxed): numThreads = 3 ... 2028 ms AtomicVariable(relaxed): numThreads = 4 ... 2029 ms AtomicVariable(relaxed): numThreads = 5 ... 2048 ms AtomicVariable(relaxed): numThreads = 6 ... 2054 ms AtomicVariable(relaxed): numThreads = 7 ... 2075 ms AtomicVariable(relaxed): numThreads = 8 ... 2077 ms AtomicVariable(relaxed): numThreads = 9 ... 2099 ms AtomicVariable(relaxed): numThreads = 10 ... 2108 ms<\/code><\/pre>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440\u043e\u043c \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0437\u0432\u0430\u0442\u044c \u0441\u043f\u0438\u043d\u043b\u043e\u043a \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u043c\u0438, \u0432\u043e\u0437\u044c\u043c\u0435\u043c <strong>Test-And-Set <\/strong>\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Test-and-set\" rel=\"noopener noreferrer nofollow\">https:\/\/en.wikipedia.org\/wiki\/Test-and-set<\/a>), \u043e\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u0430\u044f \u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0430\u044f, \u043d\u043e \u0432 \u044d\u0442\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0435 \u043a\u0440\u043e\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0432\u043e\u0445 &#8212; \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u043e\u043c \u0447\u0438\u0441\u043b\u0435 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0438 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u043c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0438 \u0441 \u043a\u044d\u0448\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u0435. <\/p>\n<details class=\"spoiler\">\n<summary>Test-And-Set spinlock (simple)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">namespace this_thread {     int cmpxchg(volatile int&amp; v, int exc, int cmp) { return _InterlockedCompareExchange((unsigned long*)&amp;v, exc, cmp);  }   int load(volatile int* v) { return *v;  } }  structtas_spin_lock { enum{ SPINLOCK_FREE= 0, SPINLOCK_FREE = -1 }; volatile int_lock;  voidlock() { while (this_thread::cmpxchg(_lock, SPINLOCK_FREE, SPINLOCK_FREE)) _mm_pause(); }  voidunlock() { _lock= SPINLOCK_FREE; }  tas_spin_lock()  : _lock(SPINLOCK_FREE) {} };<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>    \u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0440\u0435\u0441\u0443\u0440\u0441 (\u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043f\u0438\u043d\u043b\u043e\u043a) \u0431\u0443\u0434\u0435\u0442 \u043e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u0431\u0443\u0434\u0435\u0442 <strong>1 \/ (core * ht) = 1 \/ (12 * 2) = 1 \/ 24 <\/strong> (\u0434\u043b\u044f \u043c\u043e\u0435\u0433\u043e cpu)<br \/>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043d\u0438\u0436\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u044f \u0432\u0437\u044f\u043b \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u041c\u043e\u0436\u043d\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0438\u043b\u0438 \u0434\u0432\u0430, \u0435\u0441\u043b\u0438 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c <br \/>&#8212; \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430<br \/>&#8212; \u043f\u0440\u043e\u0441\u0442\u043e\u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432<br \/>&#8212; \u0434\u0440\u0443\u0433\u0438\u0435 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432. <br \/>\u0422.\u0435. \u043d\u0430 \u0443\u0441\u043b\u043e\u0432\u043d\u044b\u0435 240-2400 \u0446\u0438\u043a\u043b\u043e\u0432, \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043f\u0440\u043e\u0441\u0442\u043e \u0434\u0435\u043b\u0430\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 \u043e\u043f\u0440\u043e\u0441 \u043a\u044d\u0448\u0430, \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437 \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e \u043b\u043e\u043a \u043d\u0430 \u044d\u0442\u043e\u043c \u0443\u0447\u0430\u0441\u0442\u043a\u0435 \u043f\u0430\u043c\u044f\u0442\u0438. \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c \u0441\u043f\u0438\u043d\u043b\u043e\u043a \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043e\u043d \u043a\u0430\u043a\u043e\u0435 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0435\u0451 \u043d\u0435 \u0442\u0440\u043e\u0433\u0430\u043b, \u0434\u0430\u0432\u0430\u044f \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u043c \u043a\u043e\u043d\u0441\u044e\u043c\u0435\u0440\u0430\u043c \u0437\u0430\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0443 \u0441 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u043c. \u042d\u0442\u0438\u043c \u043c\u044b \u0441\u043d\u0438\u0437\u0438\u043b\u0438 \u043e\u0431\u0449\u0443\u044e \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u044d\u0448\u0435\u043c, \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432 \u0432\u0440\u0435\u043c\u044f \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u043c. \u0417\u0430\u043c\u0435\u0434\u043b\u044f\u044f \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u0442\u043e\u043a, \u043c\u044b \u0441\u043d\u0438\u0436\u0430\u0435\u043c \u043e\u0431\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b, \u0437\u0432\u0443\u0447\u0438\u0442 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0441\u0442\u0440\u0430\u043d\u043d\u043e, \u043d\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442.<\/p>\n<details class=\"spoiler\">\n<summary>Test-Test-And-Swap spinlock (backoff wait)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">structttas_spin_lock { enum{ SPINLOCK_FREE= 0, SPINLOCK_TAKEN= -1 }; volatile int_lock;  voidlock() { for (;;) { \/\/ Optimistically assume the lock is free on the first try if (!this_thread::cmpxchg(_lock, SPINLOCK_TAKEN, SPINLOCK_FREE)) { break; }  \/\/ Wait for lock to be released without generating cache annoying uint8_t wait = 1; while (SPINLOCK_FREE != this_thread::load(&amp;_lock)) { wait *= 2; \/\/ exponential backoff if can't get lock for (uint8_t i = 0; i &lt; wait; i++) _mm_pause(); } } } voidunlock() { _lock = SPINLOCK_FREE; }  spin_lock(pcstr = 0) : _lock(SPINLOCK_FREE) {} };<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>     \u041e\u0431\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0442\u043e\u043a\u0430 \u0443\u043f\u0430\u043b\u043e \u0441 2 \u0441\u0435\u043a\u0443\u043d\u0434, \u0434\u043e 0.3 \u0441\u0435\u043a\u0443\u043d\u0434. \u0422\u0435\u0441\u0442 \u0442\u043e\u0442 \u0436\u0435, \u0447\u0442\u043e \u0438 \u043e\u0431\u0449\u0435\u0439 \u0430\u0442\u043e\u043c\u0430\u0440\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439, \u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d \u043f\u043e\u0434\u0445\u043e\u0434 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0435\u0439 &#8212; \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u043e &#171;\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435&#187; \u043e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u0441\u043b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439.<\/p>\n<pre><code>SpinLock(TAS impl): numThreads = 1 ... 1802 ms numThreads = 2 ... 1908 ms numThreads = 3 ... 1738 ms numThreads = 4 ... 1829 ms numThreads = 5 ... 1949 ms numThreads = 6 ... 2154 ms numThreads = 7 ... 1785 ms numThreads = 8 ... 1767 ms numThreads = 9 ... 1990 ms numThreads = 10 ... 2208 ms  SpinLock(T-TAS impl):  numThreads = 1 ... 0.1690 ms numThreads = 2 ... 0.2000 ms numThreads = 3 ... 0.5880 ms numThreads = 4 ... 0.3110 ms numThreads = 5 ... 0.1680 ms numThreads = 6 ... 0.1570 ms numThreads = 7 ... 0.2960 ms numThreads = 8 ... 0.5710 ms numThreads = 9 ... 0.1870 ms numThreads = 10 ... 0.1610 ms<\/code><\/pre>\n<p><strong>\u0418 \u043d\u0430\u043f\u043e\u0441\u043b\u0435\u0434\u043e\u043a \u043f\u0440\u043e \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 (Alignment)<\/strong><\/p>\n<p>    \u0422\u0435\u0441\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043e\u0447\u0435\u043d\u044c \u043b\u0435\u0433\u043a\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e &#8212; <strong>\u043d\u0443\u0436\u043d\u043e<\/strong> \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043e\u043f\u0446\u0438\u044e \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0431\u0435\u0437 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044f \u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0442\u044c \u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0448\u0438\u0440\u043e\u043a\u043e\u043c\u0443 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0443 \u0430\u0434\u0440\u0435\u0441\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u0438 \u043a\u0430\u0441\u0430\u043b\u0438\u0441\u044c \u043a\u0440\u0430\u0435\u0432 \u0441\u0442\u0440\u043e\u043a \u043a\u044d\u0448\u0430.   <\/p>\n<details class=\"spoiler\">\n<summary>unaligned access \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b (\u043f\u043e\u0442\u0435\u0440\u0438 \u0431\u043e\u043b\u0435\u0435 10%)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">#pragma pack(1) struct my_packed_struct_s {     uint8_t byte1;     uint32_t val1;     uint8_t byte2;     uint32_t val2; }; #pragma pack()  static void Test00(benchmark::State&amp; state) {   int steps = 16 * 1024;   int offset = state.range(0);    char *x1 = new char[16 * 1024 * 1024];   my_packed_struct_s *non_packed_s = new my_packed_struct_s[16 * 1024 * 1024];    for (auto _ : state) {     for (int i = 0; i &lt; steps; i++) {         non_packed_s[i].byte2 = x1[i];         benchmark::DoNotOptimize(non_packed_s);     }   } } BENCHMARK(Test00)->DenseRange(0, 64, 8);  struct auto_packed_struct_s {     uint8_t byte1;     uint32_t val1;     uint8_t byte2;     uint32_t val2; };  static void Test01(benchmark::State&amp; state) {   int steps = 16 * 1024;   int offset = state.range(0);    char *x2 = new char[16 * 1024 * 1024];   auto_packed_struct_s *auto_packed_s = new auto_packed_struct_s[16 * 1024 * 1024];    for (auto _ : state) {     for (int i = 0; i &lt; steps; i++)     {         auto_packed_s[i].byte2 = x2[i];         benchmark::DoNotOptimize(auto_packed_s);     }   } } BENCHMARK(Test01)->DenseRange(0, 64, 8);<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<pre><code>\/\/ \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u044b, \u043c\u0435\u043d\u044c\u0448\u0435 -> \u043b\u0443\u0447\u0448\u0435 Test00\/0        23685 ns        23542 ns        29867 Test00\/8        22759 ns        22496 ns        29867 Test00\/16       22717 ns        22496 ns        29867 Test00\/24       22770 ns        22949 ns        32000 Test00\/32       22649 ns        22461 ns        32000 Test00\/40       22809 ns        22496 ns        29867 Test00\/48       22728 ns        22496 ns        29867 Test00\/56       22676 ns        22949 ns        32000 Test00\/64       22785 ns        22949 ns        32000  \/\/ \u0434\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u044b Test01\/0        19068 ns        19252 ns        37333 Test01\/8        19050 ns        18834 ns        37333 Test01\/16       18946 ns        18834 ns        37333 Test01\/24       19147 ns        19252 ns        37333 Test01\/32       19195 ns        19252 ns        37333 Test01\/40       19037 ns        19252 ns        37333 Test01\/48       18941 ns        19252 ns        37333 Test01\/56       19011 ns        19252 ns        37333 Test01\/64       19001 ns        18589 ns        36462<\/code><\/pre>\n<p>   \u041f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0441\u0435 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0441\u0442\u0440\u0430\u0434\u0430\u044e\u0442 \u043e\u0442 \u043d\u0435\u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0441\u0442\u0443\u043f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0447\u0442\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u0441\u043b\u043e\u0432\u043d\u043e\u043c\u0443 \u0430\u0434\u0440\u0435\u0441\u0443 0x1001) \u0438 \u044d\u0442\u043e \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u043d\u0438\u0436\u0430\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c. \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 memcpy \u0432 gcc (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432 256 + 3 \u0431\u0430\u0439\u0442\u0430), \u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0442\u0430\u043a\u043e\u0439: \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0435\u0444\u0438\u043a\u0441 \u0434\u043e \u0440\u043e\u0432\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 (\u043e\u0434\u0438\u043d \u0431\u0430\u0439\u0442), \u043e\u0441\u0442\u0430\u0435\u0442\u0441\u044f 258, \u0437\u0430\u0442\u0435\u043c \u043a\u043e\u043f\u0438\u0440\u0443\u0435\u0442\u0441\u044f 256 \u0431\u0430\u0439\u0442\u043e\u0432 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0443\u044e \u0448\u0438\u0440\u0438\u043d\u0443 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430, \u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 2 \u0431\u0430\u0439\u0442\u0430 \u043c\u043e\u0433\u0443\u0442 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u043a\u0430\u043a \u0434\u0432\u0430 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0431\u0430\u0439\u0442\u0430 \u0438\u043b\u0438 \u043a\u0430\u043a short, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0438 \u0434\u043e\u043b\u0433\u043e \u0438 \u0434\u043e\u0440\u043e\u0433\u043e, \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435\u043c 256 + 8 \u0431\u0430\u0439\u0442\u043e\u0432, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0442\u0430\u043c \u043b\u0435\u0436\u0438\u0442 \u043c\u0443\u0441\u043e\u0440.<\/p>\n<p>    \u041c\u043e\u0436\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u0441\u044f \u0438 \u0442\u0430\u043a, \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0434\u0432\u0443\u0445 \u0431\u0430\u0439\u0442 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 0x1001 (\u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u0440\u043e\u0432\u043d\u044b\u043c\u0438 0x0FFC, 0x0FFC) \u0441 \u043f\u0440\u043e\u043c\u0430\u0445\u0430\u043c\u0438 \u043a\u044d\u0448\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u0442 \u043a \u0447\u0442\u0435\u043d\u0438\u044e \u0434\u0432\u0443\u0445 \u0441\u0442\u0440\u043e\u043a, \u0433\u0434\u0435 0x1001 \u2014 \u044d\u0442\u043e \u043e\u0434\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u043a\u044d\u0448\u0430, \u0433\u0434\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043f\u0430\u043b\u0438 \u0432 \u043a\u043e\u043d\u0435\u0446, \u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0431\u0430\u0439\u0442 \u043f\u043e\u043f\u0430\u043b \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u0441\u0442\u0440\u043e\u043a\u0443. \u0422.\u0435. \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u0438\u0437 128 \u0431\u0430\u0439\u0442 \u043a\u044d\u0448\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0442\u043e\u043b\u044c\u043a\u043e 2. \u041f\u0435\u0440\u0435\u0445\u043e\u0434\u044f \u043a \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0439 \u0442\u0430\u043a\u0438\u0435 \u043f\u043e\u043b\u044f, \u043c\u044b \u043e\u043f\u044f\u0442\u044c \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u0434\u0432\u0435 \u0441\u0442\u0440\u043e\u043a\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c 2 \u0431\u0430\u0439\u0442\u0430 \u0438 \u0442.\u0434.     \u0422\u043e, \u043a\u0430\u043a \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0446\u0435\u043b\u043e\u043c, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u044d\u0442\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u043c \u0438 \u0441\u0438\u043b\u044c\u043d\u043e \u0432\u043b\u0438\u044f\u0435\u0442 \u043d\u0430 \u043e\u0431\u0449\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432. \u0418 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0437\u0434\u0435\u0441\u044c \u043d\u0438\u043a\u0430\u043a \u043d\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442, \u0440\u0430\u0437\u0432\u0435 \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0443\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0432\u044b\u0440\u043e\u0432\u043d\u0435\u043d\u044b. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0438\u0433\u0440\u043e\u0432\u044b\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0430\u043b\u043b\u043e\u043a\u0430\u0442\u043e\u0440\u044b \u043f\u0430\u043c\u044f\u0442\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435 \u043e\u0442\u0434\u0430\u044e\u0442 \u043a\u0443\u0441\u043e\u0447\u043a\u0438 \u043f\u0430\u043c\u044f\u0442\u0438 \u043c\u0435\u043d\u0435\u0435 64 \u0431\u0430\u0439\u0442.<\/p>\n<p><strong>\u0412\u043c\u0435\u0441\u0442\u043e \u0432\u044b\u0432\u043e\u0434\u043e\u0432:<br \/>    <\/strong>\u042f \u043d\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u043f\u0440\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435, \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u0438 \u0440\u0443\u0447\u043d\u043e\u0435 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 cache prefetching \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e, \u044d\u0442\u0430 \u0442\u0435\u043c\u0430 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u0448\u0438\u0440\u043d\u0430\u044f \u0438 \u0441\u043e \u0441\u0432\u043e\u0438\u043c\u0438 \u0437\u0435\u043c\u043b\u044f\u043c\u0438 \u0434\u0440\u0430\u043a\u043e\u043d\u043e\u0432. \u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0440\u044f\u0434 \u043b\u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0438 \u0441 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u043c\u0438 \u0432\u0441\u0435 \u043e\u043f\u0438\u0441\u0430\u0442\u044c.<\/p>\n<p>    \u0412\u0441\u0435, \u0447\u0442\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u0434\u043b\u044f \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0431\u043e\u043b\u0435\u0435 \u0448\u0438\u0440\u043e\u043a\u0438\u0435 \u0448\u0438\u043d\u044b \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u043d\u0432\u0435\u0439\u0435\u0440\u044b, \u043a\u044d\u0448\u0438, \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439, \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u044f\u0434\u0435\u0440 \u0438 ht. \u042d\u0442\u043e \u0432\u0441\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442, \u043d\u043e \u0443 \u0432\u0441\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u0441\u043b\u0430\u0431\u044b\u0435 \u043c\u0435\u0441\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u0430\u043a \u043d\u0430\u043c\u0435\u0440\u0435\u043d\u043d\u043e, \u0442\u0430\u043a \u0438 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0438\u043b\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043c\u0430\u043b\u043e \u0447\u0442\u043e \u043c\u043e\u0433\u0443\u0442 \u0441 \u044d\u0442\u0438\u043c \u043f\u043e\u0434\u0435\u043b\u0430\u0442\u044c, \u0435\u0441\u043b\u0438 \u0432\u0430\u0441 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0443\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c, \u0442\u043e \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u0432\u0430\u0436\u043d\u0435\u0439\u0448\u0438\u0445 \u0444\u0430\u043a\u0442\u043e\u0440\u043e\u0432 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0435 \u0432 \u043a\u044d\u0448, \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u0434\u0430 \u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0430 &#171;\u0443\u0434\u043e\u0431\u043d\u044b\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0443&#187;, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u043e 32, 64, 128, 256. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u043c\u043e\u0433\u0443\u0442 \u043f\u043e\u043c\u043e\u0447\u044c, \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0441\u0443\u043f\u0435\u0440\u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0439 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b, \u0438\u043b\u0438 \u043f\u0435\u0440\u0435\u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0442\u044c \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430 \u043d\u0435 \u0438\u043c\u0435\u044e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043c\u043e\u0433\u0443\u0442 \u0434\u0430\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u0438 \u0430\u0432\u0442\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430.<\/p>\n<p>    \u0418 \u0431\u041e\u043b\u044c\u0448\u0438\u043c \u0443\u043f\u0443\u0449\u0435\u043d\u0438\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u043c\u044b\u0441\u043b\u044c, \u0447\u0442\u043e \u0443\u0437\u043a\u0438\u043c \u043c\u0435\u0441\u0442\u043e\u043c \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440, \u0430 \u043d\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c. \u041e\u0442 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u044b \u043a\u043e\u0440\u043c\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0433\u043e, \u043c\u043e\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043f\u043e\u0442\u044b\u043a\u0430\u0442\u044c\u0441\u044f \u043e \u043a\u044d\u0448 \u0438\u043b\u0438 \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u0435, \u0438 \u0438\u043c\u0435\u0442\u044c \u0442\u0430\u043a\u0443\u044e \u0436\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u043a\u0430\u043a bubble-sort. \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0432 \u0434\u0430\u0436\u0435 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043f\u0435\u0440\u0435\u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435, \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u044f \u043e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445\/\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440, \u0443\u043f\u043e\u0440\u044f\u0434\u043e\u0447\u0438\u0432\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0432 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u0432\u044b\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0432\u044b\u0441\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437.<\/p>\n<p>   \u041a\u043d\u0438\u0433\u0443 &#171;\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0438 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445&#187; \u0432 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u043c \u0438\u0437\u0434\u0430\u043d\u0438\u0438 \u043d\u0430\u0434\u043e \u043f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0432 &#171;\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b&#187; &#8212; \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u0430\/\u0432\u0430\u0436\u043d\u043e\u0441\u0442\u0438 (\u0441)\u00a0<br \/>\u041a\u043d\u0438\u0433\u0430 \u041d\u0438\u043a\u043b\u0430\u0443\u0441\u0430 \u0412\u0438\u0440\u0442\u0430 \u0442\u0443\u0442 (<a href=\"https:\/\/everythingcomputerscience.com\/books\/AD.pdf\" rel=\"noopener noreferrer nofollow\">https:\/\/everythingcomputerscience.com\/books\/AD.pdf<\/a>)<\/p>\n<p>\u0411\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044e, \u0447\u0442\u043e \u0434\u043e\u0447\u0438\u0442\u0430\u043b\u0438, \u0432\u0441\u0435\u043c \u0431\u0435\u0437\u0431\u0430\u0436<s>\u0448\u0435\u043d<\/s>\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439.<\/p>\n<p>\u0417.\u042b. \u041f\u043e\u0441\u043b\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0442\u0430\u0442\u044c\u0438, \u044f \u043f\u043e\u0438\u0441\u043a\u0430\u043b \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u043d\u0430 \u0445\u0430\u0431\u0440\u0435: \u0440\u0430\u0437 (<a href=\"https:\/\/sohabr.net\/habr\/post\/335832\/\" rel=\"noopener noreferrer nofollow\">https:\/\/sohabr.net\/habr\/post\/335832\/<\/a>) \u0438 \u0434\u0432\u0430 (<a href=\"https:\/\/habr.com\/ru\/post\/93263\/\" rel=\"noopener noreferrer nofollow\">https:\/\/habr.com\/ru\/post\/93263\/<\/a>), \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043d\u0430 \u0448\u0430\u0440\u043f\u0435. \u0412 \u043e\u0431\u0449\u0435\u043c, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0438\u043a\u0443\u0434\u0430 \u043d\u0435 \u0434\u0435\u043b\u0438\u0441\u044c, \u0432\u0441\u0435 \u0442\u0435\u0436\u0435, \u0432\u0441\u0435 \u0442\u0430\u043c\u0436\u0435&#8230;<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<div class=\"v-portal\" style=\"display:none;\"><\/div>\n<\/div>\n<p> <!----> <!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/post\/687146\/\"> https:\/\/habr.com\/ru\/post\/687146\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>    \u0412\u0441\u0435\u043c \u0432\u0435\u0434\u044c \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0437\u0430\u043d\u0438\u043c\u0430\u0442\u044c\u0441\u044f \u0443\u043b\u0443\u0447\u0448\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438? \u0414\u043b\u044f \u0438\u0433\u0440 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e, \u043d\u0443 \u043c\u043e\u0436\u0435\u0442 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0442\u0440\u0438-\u0432-\u0440\u044f\u0434 \u043d\u0435 \u0441\u0442\u0440\u0430\u0434\u0430\u0435\u0442 \u044d\u0442\u0438\u043c. \u041a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u0435\u0440\u0435\u0431\u0440\u044f\u043d\u043e\u0439 \u043f\u0443\u043b\u0438 \u043d\u0435\u0442, \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u043c \u0441\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440 \u0434\u0430\u043d\u043d\u044b\u0445, \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432, \u0441\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u0441\u044f \u043d\u0438\u0436\u0435, \u0430 \u0435\u0441\u043b\u0438 \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442, \u043f\u0440\u0438\u0434\u0443\u043c\u044b\u0432\u0430\u0435\u043c SoA, AoS \u0448\u0430\u0431\u043b\u043e\u043d\u044b. \u0415\u0441\u043b\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043d\u0435 \u0440\u0435\u0448\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u0434\u0442\u044f\u0433\u0438\u0432\u0430\u0435\u043c \u043f\u0440\u043e\u0444\u0430\u0439\u043b\u0435\u0440\u044b \u0438 \u043f\u0440\u0435\u0434\u043c\u0435\u0442\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0435\u043c \u0443\u0437\u043a\u0438\u0435 \u043c\u0435\u0441\u0442\u0430, \u043d\u043e \u0432\u0441\u0435 \u0447\u0442\u043e\u0431\u044b \u043c\u044b \u043d\u0435 \u0434\u0435\u043b\u0430\u043b\u0438 \u0437\u0430\u0447\u0430\u0441\u0442\u0443\u044e \u0442\u0430\u043a\u0438\u043c \u0443\u0437\u043a\u0438\u043c \u043c\u0435\u0441\u0442\u043e\u043c \u0432\u0441\u0435\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u0442 &#171;\u0436\u0435\u043b\u0435\u0437\u043e&#187;. \u041c\u043e\u0436\u043d\u043e \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0433\u043e\u0434\u043d\u043e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0431\u043e\u0442\u044b, \u043d\u043e CPU c \u0435\u0433\u043e \u0433\u0438\u0433\u0430\u0433\u0435\u0440\u0446\u0430\u043c\u0438 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u0430\u0438\u0432\u0430\u0442\u044c 90% \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e &#171;\u043a\u043e\u0440\u043c\u0438\u0442\u044c&#187; \u0434\u0430\u043d\u043d\u044b\u043c\u0438. \u041e\u0434\u043d\u043e\u0439 (\u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u043e\u0439 \u0438\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c) \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043e\u0439 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 \u0431\u0443\u0434\u0435\u0442 \u043c\u0435\u043d\u044c\u0448\u0435, \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0442\u044c \u0438 \u0443\u043c\u0435\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043a\u044d\u0448\u0430\u043c\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0443\u0440\u043e\u0432\u043d\u0435\u0439.  <br \/>    \u0422\u0443\u0442 \u043d\u0430 \u0432\u0438\u043a\u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u043e (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Cache_pollution\" rel=\"noopener noreferrer nofollow\">https:\/\/en.wikipedia.org\/wiki\/Cache_pollution<\/a>) \u043a\u0430\u043a &#171;\u043d\u0430 \u043f\u0430\u043b\u044c\u0446\u0430\u0445&#187; \u0431\u044b\u0441\u0442\u0440\u0435\u043d\u044c\u043a\u043e \u0443\u0431\u0438\u0442\u044c \u043f\u0435\u0440\u0444 \u043d\u0430 \u043e\u0431\u0445\u043e\u0434\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430, \u043e\u0431\u0449\u0435\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043d\u0435\u0442, \u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f (This can be achieved by using special\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Cache_control_instruction\" rel=\"noopener noreferrer nofollow\">cache control instructions<\/a>,\u00a0<a href=\"https:\/\/en.wikipedia.org\/wiki\/Operating_system\" rel=\"noopener noreferrer nofollow\">operating system<\/a>\u00a0support or hardware support). \u041c\u043e\u0436\u043d\u043e \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u044d\u0448\u0430, \u0447\u0442\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0438 \u0434\u0435\u043b\u0430\u044e\u0442 (\u0433\u0434\u0435 \u0442\u043e \u0437\u0434\u0435\u0441\u044c \u043d\u0430 \u0445\u0430\u0431\u0440\u0435 \u0431\u044b\u043b\u0430 \u043d\u043e\u0432\u043e\u0441\u0442\u044c, \u0447\u0442\u043e \u0418\u043d\u0442\u0435\u043b \u043f\u0440\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0435 \u043d\u0430 L1 \u043a\u044d\u0448 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c 32\u043a\u0431, \u0437\u0430\u043d\u043e\u0432\u043e \u0441\u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0431\u043b\u043e\u043a \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043d\u0435\u043c\u0443, \u0441\u043e\u0440\u044f\u043d \u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u0441\u0441\u044b\u043b\u043a\u0443), \u043d\u043e \u044d\u0442\u043e \u0434\u043e\u0440\u043e\u0433\u043e, \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u043d\u0430 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0430\u0445 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u043e\u0432, \u0438 \u0432\u0441\u0435\u0433\u0434\u0430 \u043d\u0430\u0439\u0434\u0443\u0442\u0441\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u044d\u0442\u043e\u0442 \u043a\u044d\u0448 \u043e\u0442\u0440\u0430\u0432\u044f\u0442, \u043e\u043f\u044f\u0442\u044c. \u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e \u043a\u0430\u043a \u043f\u043e\u0447\u0438\u043d\u0438\u0442\u044c? \u0433\u043e \u043f\u043e\u0434 \u043a\u0430\u0442&#8230;\u00a0<\/p>\n<figure class=\"\"><figcaption>\u041a\u0414\u041f\u0412 (\u041d\u0430\u0439\u0434\u0435\u043d\u0430 \u0433\u0434\u0435\u0442\u043e \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u043e\u0432)<\/figcaption><\/figure>\n<hr\/>\n<p>    \u0412\u0441\u0435 \u0442\u0435\u0441\u0442\u044b \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043d\u0430 \u0442\u0430\u043a\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 &#8212; <strong>AMD Ryzen 9 3900X 12-Core 3.80 GHz<\/strong><\/p>\n<details class=\"spoiler\">\n<summary>\u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u044d\u0448\u0435\u0439<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cmake\">Cache size   L1 Data 32 KiB (x12)   L1 Instruction 32 KiB (x12)   L2 Unified 512 KiB (x12)   L3 Unified 16384 KiB (x4) Cache associativity    Level 1 cache size - 12 x 32 KB 8-way set associative caches   Level 2 cache size - 12 x 512 KB 8-way set associative unified caches   Level 3 cache size - 4 x 16 MB 16-way set associative shared caches Cache latency 4 (L1 cache)   12 (L2 cache)   40 (L3 cache)<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>    \u0412\u043e\u043e\u0431\u0449\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u044b \u043f\u0430\u043c\u044f\u0442\u0438 (\u043a\u0442\u043e-\u0442\u043e \u0447\u0438\u0442\u0430\u043b \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0438 \u0435\u0440\u0440\u0430\u0442\u044b \u043d\u0430 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440 \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043b\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0438\u043d\u0442\u0435\u043b\u043e\u0432?) \u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u044f \u043a\u044d\u0448\u0435\u0439 \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435, \u0432\u0435\u0449\u044c \u043e\u0447\u0435\u043d\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u0430\u044f \u0434\u0430\u0436\u0435 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0434\u043d\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432, \u043d\u0435 \u0433\u043e\u0432\u043e\u0440\u044f \u0443\u0436\u0435 \u043e \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430\u0445 \u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u0440\u0430\u0441\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044f\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043b\u0443\u0447\u0448\u0438\u043c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435\u043c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0438 \u043f\u043e\u0438\u0433\u0440\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0441\u0432\u043e\u0435\u043c \u0436\u0435\u043b\u0435\u0437\u0435, \u0442\u0430\u043a \u0432\u0435\u0440\u043d\u0435\u0435. <br \/>    \u042d\u0442\u043e \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u043e\u0441\u044c \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0438 \u043e\u043f\u044b\u0442\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430\u043c\u0438 \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c\u0438 \u0432 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0438\u0433\u0440\u043e\u0432\u044b\u0445 \u0434\u0432\u0438\u0436\u043a\u0430\u0445 (EA Unity, Dagor Engine, 4A Engine). \u0412 \u0442\u0435\u0441\u0442\u0430\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f <strong>c++14 std<\/strong> \u0438 <strong>EASTL <\/strong>(<a href=\"https:\/\/github.com\/electronicarts\/EASTL\" rel=\"noopener noreferrer nofollow\"><u>https:\/\/github.com\/electronicarts\/EASTL<\/u><\/a>), \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u0442\u0435\u0441\u0442\u043e\u0432, EASTL &#8212; \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u0435 \u0444\u0430\u043a\u0442\u043e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442 \u0434\u043b\u044f \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 \u0438\u0433\u0440, \u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0437\u0430 \u0432\u0440\u0435\u043c\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0432\u0438\u0436\u043a\u0430 \u043d\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0430 \u0441\u0432\u043e\u044f stl \u0441 \u043f\u0440\u0435\u0444\u0435\u0440\u0430\u043d\u0441\u043e\u043c \u0438 \u0434\u0430\u043c\u0430\u043c\u0438. \u041a\u043e\u043d\u0435\u0447\u043d\u043e \u0436\u0435, \u0432\u0441\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u0432\u0437\u044f\u0442\u044b \u0438\u0437 \u0433\u043e\u043b\u043e\u0432\u044b, \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0433\u043e \u0432 \u043f\u0440\u043e\u0434\u0435 \u043d\u0435\u0442, \u044f \u043d\u0430\u0434\u0435\u044e\u0441\u044c&#8230; \ud83d\ude42  <\/p>\n<p>    \u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0442\u0435\u0441\u0442 \u0441 \u0440\u0430\u0437\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043c\u0443\u0447\u0430\u0442\u044c \u043a\u044d\u0448 \u043f\u0440\u0438 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435? \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u0430\u043a-\u0442\u043e \u0442\u0430\u043a, \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0443\u044e map, eastl::map, \u0438 \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u0443\u044e map, \u0441\u0434\u0435\u043b\u0430\u043d\u043d\u0443\u044e \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430<\/p>\n<details class=\"spoiler\">\n<summary>map\/eastl::map\/fastmap find (1 \u043c\u043b\u043d \u043f\u0430\u0440)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">constexpr u32 test_size = 1000000;  struct map_holder {     std::map&lt;int, int> test_map_std;     eastl::map&lt;int, int> test_map_eastl;     fastmap&lt;int, int> test_fastmap;      map_holder() {         for (int j=0; j &lt; test_size; j++) {             test_map_std.insert({j, j+1});             test_map_eastl.insert({j, j+1});             test_fastmap.insert({j, j+1});         }     } };  static map_holder holder;  static void EAstlMapFind(benchmark::State&amp; state) {   for (auto _ : state) {     for (int j = 0; j &lt; state.range(1); ++j) {       auto v = holder.test_map_eastl.find(j);       benchmark::DoNotOptimize(v);     }   } } BENCHMARK(EAstlMapFind)->Args({1, test_size});  static void MapFind(benchmark::State&amp; state) {   for (auto _ : state) {     for (int j = 0; j &lt; state.range(1); ++j) {       auto v = holder.test_map_std.find(j);       benchmark::DoNotOptimize(v);     }   } } BENCHMARK(MapFind)->Args({1, test_size});  static void FastMapFind(benchmark::State&amp; state) {   for (auto _ : state) {     for (int j = 0; j &lt; state.range(1); ++j) {       auto v = holder.test_fastmap.find(j);       benchmark::DoNotOptimize(v);     }   } } BENCHMARK(FastMapFind)->Args({1, test_size});<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>    \u0422\u0435\u0441\u0442 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438 \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0435\u0441\u0442\u044c \u0440\u044f\u0434 \u043e\u0448\u0438\u0431\u043e\u043a, fastmap \u0441\u0434\u0435\u043b\u0430\u043d \u0447\u0435\u0440\u0435\u0437 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440, std\/eastl::map \u043e\u0431\u044b\u0447\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u044b \u0447\u0435\u0440\u0435\u0437 red-black tree (<a href=\"https:\/\/en.wikipedia.org\/wiki\/Red%E2%80%93black_tree\" rel=\"noopener noreferrer nofollow\">https:\/\/en.wikipedia.org\/wiki\/Red\u2013black_tree<\/a>). \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c \u0442\u0435\u0441\u0442, \u0447\u0442\u043e\u0431\u044b \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0442\u044c \u043c\u044f\u0433\u043a\u043e\u0435 \u0441 \u043c\u044f\u0433\u043a\u0438\u043c \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0431\u043e\u043b\u0435\u0435 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u0438\u043c\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b.<\/p>\n<details class=\"spoiler\">\n<summary>map\/unordered_map\/eastl::map\/fastmap find (1 \u043c\u043b\u043d \u043f\u0430\u0440)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">constexpr u32 test_size = 1000000;  struct map_holder {     std::unordered_map&lt;int, int> test_map_unordered;     std::map&lt;int, int> test_map_std;     eastl::map&lt;int, int> test_map_eastl;     fastmap&lt;int, int> test_fastmap;      map_holder() {         for (int j=0; j &lt; test_size; j++) {             test_map_std.insert({j, j+1});             test_map_eastl.insert({j, j+1});             test_fastmap.insert({j, j+1});             test_map_unordered.insert({j, j+1});         }     } };  static map_holder holder;  static void UnorderedMapFind(benchmark::State&amp; state) {   for (auto _ : state) {     for (int j = 0; j &lt; state.range(1); ++j) {       auto v = holder.test_map_unordered.find(j);       benchmark::DoNotOptimize(v);     }   } } BENCHMARK(UnorderedMapFind)->Args({1, test_size});  static void EAstlMapFind(benchmark::State&amp; state) {   for (auto _ : state) {     for (int j = 0; j &lt; state.range(1); ++j) {       auto v = holder.test_map_eastl.find(j);       benchmark::DoNotOptimize(v);     }   } } BENCHMARK(EAstlMapFind)->Args({1, test_size});  static void MapFind(benchmark::State&amp; state) {   \/\/ Code inside this loop is measured repeatedly   for (auto _ : state) {     for (int j = 0; j &lt; state.range(1); ++j) {       auto v = holder.test_map_std.find(j);       benchmark::DoNotOptimize(v);     }   } } BENCHMARK(MapFind)->Args({1, test_size});  static void FastMapFind(benchmark::State&amp; state) {   for (auto _ : state) {     for (int j = 0; j &lt; state.range(1); ++j) {       auto v = holder.test_fastmap.find(j);       benchmark::DoNotOptimize(v);     }   } } BENCHMARK(FastMapFind)->Args({1, test_size});<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>    \u0423\u0436\u0435 \u043b\u0443\u0447\u0448\u0435, \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435, \u043d\u043e \u0441\u0430\u043c \u0442\u0435\u0441\u0442 \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0447\u0442\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e, \u0442.\u0435. \u043c\u044b \u0441\u0430\u043c\u0438 \u043e\u0431\u0443\u0447\u0430\u0435\u043c BPU \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430, \u0447\u0442\u043e \u0434\u0430\u043b\u044c\u0448\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0445\u043e\u0436\u0438\u0435 \u0432\u044b\u0431\u043e\u0440\u043a\u0438, \u0438 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0441\u0430\u043c\u0438 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0435. \u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b, \u043d\u0430\u0434\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u044b \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043f\u0430\u043c\u044f\u0442\u0438, \u044d\u0442\u043e \u0432\u0430\u0436\u043d\u043e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e, \u0447\u0435\u043c \u0431\u043b\u0438\u0436\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043a \u0440\u0430\u0437\u043c\u0435\u0440\u0443 \u043a\u044d\u0448\u0430, \u0442\u0435\u043c \u0441\u0438\u043b\u044c\u043d\u0435\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0440\u043e\u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f \u043f\u0440\u043e\u043c\u0430\u0445\u043e\u0432 (cache misses). \u041c\u0430\u0441\u0441\u043e\u0432\u043e\u0435 \u0438 \u043f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u043e\u0435 \u043f\u0440\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u043c\u0430\u0445\u043e\u0432 \u043a\u044d\u0448\u0430, \u043a\u0430\u043a \u0440\u0430\u0437 \u0438 \u043d\u043e\u0441\u0438\u0442 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 &#171;\u043e\u0442\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043a\u044d\u0448\u0430&#187; \u0434\u0430\u043d\u043d\u044b\u043c\u0438 &#8212; cache pollution.<\/p>\n<p>    \u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043e\u0440\u0438\u0438: \u0432\u0440\u0435\u043c\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u043e\u0447\u0435\u043d\u044c \u0431\u043e\u043b\u044c\u0448\u043e\u0435, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0443\u0447\u0430\u0441\u0442\u043a\u0438 \u0435\u0451 \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u0432 \u043a\u044d\u0448, \u0447\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u043e\u0432\u044b\u0448\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435. \u0422\u0430\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0436\u0434\u0443 \u043a\u044d\u0448\u0430\u043c\u0438 \u0440\u0430\u0437\u043d\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u0438 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u044c\u044e, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0435 \u043a\u043e\u0433\u0435\u0440\u0435\u043d\u0442\u043d\u043e\u0441\u0442\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u0435\u0436\u0434\u0443 \u043a\u044d\u0448\u0430\u043c\u0438 \u044f\u0434\u0435\u0440 \u0432 \u043c\u043d\u043e\u0433\u043e\u044f\u0434\u0435\u0440\u043d\u044b\u0445 \u0438  \u043c\u043d\u043e\u0433\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043d\u044b\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u0445.<\/p>\n<figure class=\"float full-width\"><figcaption><\/figcaption><\/figure>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c \u0441 \u044d\u0442\u0438\u043c \u0437\u043d\u0430\u043d\u0438\u0435\u043c \u043f\u0435\u0440\u0435\u043f\u0438\u0448\u0435\u043c \u0442\u0435\u0441\u0442, \u0442\u0430\u043a \u0447\u0442\u043e\u0431\u044b \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u043b\u0441\u044f \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0435. \u0421\u043c\u044b\u0441\u043b \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f &#8212; \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c \u0438\u0433\u0440\u043e\u0432\u044b\u0435 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043b\u0435\u0436\u0430\u0442 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u0434\u0440\u0443\u0433 \u0437\u0430 \u0434\u0440\u0443\u0433\u043e\u043c, \u043c\u044b \u0437\u043d\u0430\u0435\u043c \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c \u043f\u043e\u0431\u043e\u043b\u044c\u0448\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0440\u044f\u0434\u043e\u043c, \u0442\u043e cpu \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0449\u0435 \u0441 \u043d\u0438\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u043e\u043d\u0438 \u043f\u043e\u0434\u0433\u0440\u0443\u0437\u044f\u0442\u0441\u044f \u0432 \u043a\u044d\u0448, \u043d\u0435 \u043f\u0440\u0438\u0434\u0435\u0442\u0441\u044f \u043b\u0430\u0437\u0438\u0442\u044c \u0432 \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043a\u0443 \u0447\u0430\u0441\u0442\u043e. \u0412\u0441\u0435 \u0442\u0430\u043a, \u044d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0432\u043e-\u043f\u0435\u0440\u0432\u044b\u0445 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043d\u0438\u043c\u0438, \u0432\u043e-\u0432\u0442\u043e\u0440\u044b\u0445 \u0434\u043b\u044f \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439, \u0434\u0435\u043b\u0430\u0435\u043c \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u0432\u0441\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438 \u0431\u043e\u043b\u044c\u0448\u0435, \u0438 \u0432 \u043a\u0430\u043a\u043e\u0439 \u0442\u043e \u043c\u043e\u043c\u0435\u043d\u0442 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0441\u0442\u0440\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0441\u0435\u0434\u0430\u043d\u0438\u044f \u043f\u043e \u043f\u0435\u0440\u0444\u0443, \u043e\u0442 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0445\u043e\u0442\u0435\u043b\u0438 \u0443\u0439\u0442\u0438 \u0440\u0430\u0437\u043c\u0435\u0449\u0430\u044f \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0431\u043b\u0438\u0436\u0435 \u0432 \u043e\u0434\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u0440\u0438 \u0434\u043e\u0441\u0442\u0438\u0436\u0435\u043d\u0438\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0440\u0435\u0437\u043a\u0443\u044e \u0434\u0435\u0433\u0440\u0430\u0434\u0430\u0446\u0438\u044e \u043f\u0435\u0440\u0444\u0430 \u043d\u0430 \u043e\u0431\u0445\u043e\u0434\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u0430. <br \/>    \u042d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u043f\u043e\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0435, \u043a \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043e\u0431\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u043a\u043e\u0434 \u043d\u0430\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u0432 \u043a\u044d\u0448\u0435 \u0432\u0441\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e, \u043f\u0440\u043e\u043c\u0430\u0445 \u043a\u044d\u0448\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0432\u044b\u0433\u0440\u0443\u0437\u043a\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043b\u0438\u043d\u0438\u0438 \u044d\u0442\u043e\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f \u043a\u044d\u0448\u0430 \u0438 \u043f\u043e\u0438\u0441\u043a\u0443 \u0438 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0432 \u043a\u044d\u0448\u0435 \u0432\u0435\u0440\u0445\u043d\u0435\u0433\u043e \u0443\u0440\u043e\u0432\u043d\u044f, \u0432\u043f\u043b\u043e\u0442\u044c \u0434\u043e \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u043b\u0438 \u0432\u043e\u043e\u0431\u0449\u0435 \u0444\u0430\u0439\u043b\u0430 \u043f\u043e\u0434\u043a\u0430\u0447\u043a\u0438. \u041d\u0430 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 Intel\/AMD \u0432\u0440\u0435\u043c\u044f \u043f\u0440\u043e\u043c\u0430\u0445\u0430 \u043a\u044d\u0448\u0430 L3 \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0431\u043e\u043b\u0435\u0435 30 \u0446\u0438\u043a\u043b\u043e\u0432 + \u0432\u0440\u0435\u043c\u044f \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043e\u043f\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e\u0439 \u043f\u0430\u043c\u044f\u0442\u0438, \u0430 \u044d\u0442\u043e \u044d\u0442\u043e \u0443\u0436\u0435 \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u043a\u0443\u043d\u0434 \u043f\u0440\u043e\u0441\u0442\u043e\u044f. \u0422\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u043c\u0430\u0445\u0438 \u043e\u0431\u0445\u043e\u0434\u044f\u0442\u0441\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u043e\u0447\u0435\u043d\u044c \u0434\u043e\u0440\u043e\u0433\u043e. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u0440\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0442\u0430\u043a\u0436\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u043c\u0430\u0445\u0430 \u0432 \u043a\u044d\u0448\u0435, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0432\u0441\u0435 \u043c\u0435\u043d\u044c\u0448\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043f\u043e\u043c\u0435\u0449\u0430\u044e\u0442\u0441\u044f \u0432 \u044d\u0442\u043e\u0442 \u0441\u0430\u043c\u044b\u0439 \u043a\u044d\u0448.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<details class=\"spoiler\">\n<summary>\u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0431\u043e\u043b\u044c\u0448\u0435 \u0438\u043b\u0438 \u0431\u043b\u0438\u0437\u043a\u043e \u043a page size \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0435 (cache poisoning)<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"cpp\">u32 constexpr operator\"\" _B(unsigned long long int n) { return n; } u32 constexpr operator\"\" _KB(unsigned long long int n) { return n * 1024; } u32 constexpr operator\"\" _MB(unsigned long long int n) { return n * 1000 * 1000; }  const u32 cache_line_size = 64_B; const u32 page_size = 4_KB;  struct TestNode {   TestNode *next = nullptr;   char members[page_size]; };  static TestNode *find_last_node(TestNode *head, u32 num_ops) {   while (num_ops--) head = head->next;   return head; }  static void cpu_cache_access(benchmark::State &amp;state) {   const auto mem_block_size = operator\"\"_KB(state.range(0));   const auto num_nodes = mem_block_size \/ cache_line_size;    std::vector&lt;TestNode> nodes(num_nodes);   for (size_t i = 0; i &lt; nodes.size() - 1; i++) nodes[i].next = &amp;nodes[i + 1];   nodes[nodes.size() - 1].next = &amp;nodes[0];    const u32 num_ops = 1_MB;   while (state.KeepRunningBatch(num_ops)) {     auto last_node = find_last_node(&amp;nodes[0], num_ops);     benchmark::DoNotOptimize(last_node);   }    state.counters[\"Nodes\"] = benchmark::Counter(num_nodes, benchmark::Counter::kDefaults, benchmark::Counter::OneK::kIs1024);   state.counters[\"Read Rate\"] = benchmark::Counter(<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-338186","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/338186","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=338186"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/338186\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=338186"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=338186"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=338186"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}