{"id":380959,"date":"2024-06-29T03:23:45","date_gmt":"2024-06-29T03:23:45","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=380959"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=380959","title":{"rendered":"<span>\u041f\u0440\u0438\u0451\u043c\u044b \u0432\u044b\u0441\u043e\u043a\u043e\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u043e\u0439 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 Card Raytracer<\/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<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7d2\/c92\/61f\/7d2c9261f6a23cbd189bf0ba98fcfc0f.png\" width=\"512\" height=\"512\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/7d2\/c92\/61f\/7d2c9261f6a23cbd189bf0ba98fcfc0f.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0425\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0441\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 <a href=\"http:\/\/fabiensanglard.net\/rayTracing_back_of_business_card\" rel=\"noopener noreferrer nofollow\">card raytracer<\/a> &#8212; \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0439\u0442\u0440\u0435\u0439\u0441\u0435\u0440\u0430, \u043a\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0438\u0437\u0438\u0442\u043a\u0435.<\/p>\n<p>\u0422\u043e\u0447\u043d\u0435\u0435, \u044d\u0442\u043e \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442\u0430\u044f \u0434\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0439 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u0435\u0440\u0441\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432 <a href=\"https:\/\/web.archive.org\/web\/20180922234544\/http:\/\/www.sql.ru\/forum\/1173809-1\/tyapnichnyy-benchmark-cpu-part-1\" rel=\"noopener noreferrer nofollow\">\u0444\u043e\u0440\u0443\u043c\u043d\u043e\u0439 \u0432\u0435\u0442\u043a\u0435<\/a><br \/> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043a\u0430\u043a \u0442\u0435\u0441\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u044f \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u044d\u0442\u0443 \u0432\u0435\u0442\u043a\u0443, \u044f \u043a\u0430\u043a \u0440\u0430\u0437 \u0438\u0437\u0443\u0447\u0430\u043b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b C\u0438, \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0432\u043e\u0437\u043d\u0430\u043c\u0435\u0440\u0438\u043b\u0441\u044f \u0432\u0441\u0435\u0445 <s>\u043f\u043e\u0440\u0432\u0430\u0442\u044c<\/s> \u043e\u0431\u043e\u0433\u043d\u0430\u0442\u044c. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u043e\u0433\u043d\u0430\u043b, \u043d\u043e \u0441 \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b &#8212; \u0441\u043b\u0435\u0433\u043a\u0430 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e &#171;\u0437\u0430\u0442\u043e\u0447\u0438\u0442\u044c&#187; \u043a\u043e\u0434 \u043f\u043e\u0434 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e, \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u0443\u043c\u0435\u0440\u0435\u043d\u043d\u044b\u043c \u0440\u043e\u0441\u0442\u043e\u043c \u043e\u0431\u044a\u0451\u043c\u0430 \u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u042f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a\u0438\u0435 \u0435\u0441\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u043e\u0434 \u0438 \u0434\u0430\u043d\u043d\u044b\u0435, \u0438 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0447\u0435\u0440\u043d\u043e\u0432\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 &#8212; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f, \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0440\u0438\u043d\u0441\u0438\u043a\u0438.<\/p>\n<p>\u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u0432 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u043d\u043e\u0432\u0438\u0447\u043a\u0430\u043c, \u043d\u043e \u0438 \u043e\u043f\u044b\u0442\u043d\u044b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 (\u043f\u043e \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0435 \u043f\u0438\u0448\u0443\u0449\u0438\u0435 SIMD-\u043a\u043e\u0434 \u0438\u043d\u0442\u0440\u0438\u043d\u0441\u0438\u043a\u0430\u043c\u0438) \u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u0439\u0442\u0438 \u0447\u0442\u043e-\u0442\u043e \u043d\u043e\u0432\u043e\u0435.<br \/>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 &#8212; \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c Clang, \u043c\u043e\u0436\u043d\u043e GCC, \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u044f \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0438 \u043f\u043e\u0434 MSVC.<\/p>\n<h2>1. \u041f\u0435\u0440\u0432\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0435\u0439\u0442\u0440\u0435\u0439\u0441\u0435\u0440\u0430.<\/h2>\n<p>\u041f\u043e \u0421ard raytracer \u043d\u0430 \u0425\u0430\u0431\u0440\u0435 \u0443\u0436\u0435 \u0431\u044b\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u0438: <a href=\"https:\/\/habr.com\/post\/434528\/\" rel=\"noopener noreferrer nofollow\">\u0441 \u0440\u0430\u0437\u0431\u043e\u0440\u043e\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430<\/a>,  <a href=\"https:\/\/habr.com\/ru\/post\/443804\/\" rel=\"noopener noreferrer nofollow\">\u0441 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u0430 C#<\/a>. <\/p>\n<p>\u041d\u043e \u044f \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0440\u0435\u0439\u0442\u0440\u0435\u0439\u0441-\u0432\u0438\u0437\u0438\u0442\u043a\u0438, \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u0437\u0430\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c (\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u043c\u0438\u043d\u0443\u0442). \u041a\u043b\u0430\u0441\u0441\u0438\u043a\u0430 \u0440\u0435\u0439\u0442\u0440\u0435\u0439\u0441\u0430 &#8212; \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0444\u0435\u0440\u044b \u0441 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435\u043c, \u043c\u044f\u0433\u043a\u0438\u043c\u0438 \u0442\u0435\u043d\u044f\u043c\u0438 \u0438 \u0430\u043d\u0442\u0438\u0430\u043b\u0438\u0430\u0441\u0438\u043d\u0433\u043e\u043c.<\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c&#8230; \u043d\u043e \u0447\u0435\u0441\u0442\u043d\u043e \u0441\u043a\u0430\u0436\u0443, \u044f \u043f\u043e\u043d\u0430\u0447\u0430\u043b\u0443 \u043f\u043e\u043b\u0435\u043d\u0438\u043b\u0441\u044f \u0432\u043d\u0438\u043a\u0430\u0442\u044c, \u0430 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043b\u0435\u0437 \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434. \u0418 \u0441\u0435\u0439\u0447\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e.<\/p>\n<p>\u041f\u0440\u0438 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u043e\u043c \u0432\u0437\u0433\u043b\u044f\u0434\u0435 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043e\u043d \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0440\u0430\u0441\u0447\u0451\u0442\u043e\u0432 \u0441 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 [x,y,z]. \u0418 \u0441\u0430\u043c\u044b\u0439 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 &#8212; \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0432 SIMD-\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0438 \u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 addps \u0432\u043c\u0435\u0441\u0442\u043e 3-\u0445 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u0412\u043e\u0442 <a href=\"https:\/\/habr.com\/ru\/post\/326900\/\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a> \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0435\u0441\u0442\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 (\u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u043e \u043d\u0435 \u0441\u0443\u0442\u044c).<\/p>\n<p>\u042f \u043d\u0435 \u0441\u0442\u0430\u043b \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0438\u043d\u0442\u0440\u0438\u043d\u0441\u0438\u043a\u0430\u043c\u0438, \u0430 \u043f\u043e-\u0431\u044b\u0441\u0442\u0440\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u043f\u0440\u0430\u0432\u0438\u043b \u043a\u043e\u0434 \u043f\u043e\u0434 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f Clang, \u0431\u043b\u0430\u0433\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u0445 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u043e\u0437\u0436\u0435, \u0441\u0435\u0439\u0447\u0430\u0441 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 &#8212; \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435.<\/p>\n<p>i5-12400F, Clang 14, -march=haswell -O3 -ffast-math<br \/>(\u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043d\u0435\u043a\u0443\u044e \u0441\u043c\u0435\u0441\u044c card-raytracer-opt\/card-raytracer-rwolf c <a href=\"https:\/\/github.com\/Mark-Kovalyov\/CardRaytracerBenchmark\" rel=\"noopener noreferrer nofollow\">\u0413\u0438\u0442\u0425\u0430\u0431\u0430<\/a>, double \u0437\u0430\u043c\u0435\u043d\u0451\u043d \u043d\u0430 float) <\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><code>Base<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>4.55<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Vector Extensions<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>5.08<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Raytracer_handofdos_r2.c<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>4.13<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0410 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f, \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e\/\u043d\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u0445. \u0412\u0435\u0440\u0441\u0438\u044f <a href=\"https:\/\/github.com\/Mark-Kovalyov\/CardRaytracerBenchmark\/blob\/master\/c\/Raytracer_handofdos_r2.c\" rel=\"noopener noreferrer nofollow\">\u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0438\u043d\u0442\u0440\u0438\u043d\u0441\u0438\u043a\u043e\u0432<\/a> \u0434\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0442\u043e\u0436\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u0435\u0442 &#8212; \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0430 10% (<a href=\"https:\/\/github.com\/Mark-Kovalyov\/CardRaytracerBenchmark\/blob\/master\/c\/Raytracer_handofdos_r3experimental.c\" rel=\"noopener noreferrer nofollow\">Raytracer_handofdos_r3experimental<\/a> \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e, \u0442\u0430\u043c \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c, \u0430 \u0431\u0435\u0437 \u043d\u0435\u0451 \u0432\u0441\u0451 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438).<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u0432 \u0447\u0451\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430 &#8212; \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0442\u0430\u043a\u0438 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c.<br \/>\u041f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434\u043e\u043c \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<p><code>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f:<br \/>   \u0412\u044b\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c 64 \u043b\u0443\u0447\u0430 \u0438 \u0443\u0441\u0440\u0435\u0434\u043d\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<br \/>     \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043b\u0443\u0447\u0430:<br \/>       \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u0441\u043e \u0441\u0446\u0435\u043d\u043e\u0439 (49 \u0441\u0444\u0435\u0440\u0430\u043c\u0438), \u043f\u0440\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0438 \u0432 \u0441\u0444\u0435\u0440\u0443 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0442\u0440\u0430\u0436\u0451\u043d\u043d\u044b\u0439 \u043b\u0443\u0447 (\u0441\u043d\u043e\u0432\u0430 \u043f\u0435\u0440\u0435\u0447\u0435\u0441\u0435\u043d\u0438\u0435 \u0441 49 \u0441\u0444\u0435\u0440\u0430\u043c\u0438 \u0438 \u0442.\u0434.).<\/code><\/p>\n<p>\u0421\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0441\u0430\u043c\u043e\u0435 &#171;\u0433\u043e\u0440\u044f\u0447\u0435\u0435&#187; \u043c\u0435\u0441\u0442\u043e &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u043b\u0443\u0447\u0430 \u0441\u043e \u0441\u0444\u0435\u0440\u043e\u0439, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u043e\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043c\u0438\u043d\u0438\u043c\u0443\u043c 64 * 49 = 3136 \u0440\u0430\u0437. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 tracer, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0435 \u0432 \u043f\u043e\u043b \u0438\u043b\u0438 \u043d\u0435\u0431\u043e, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f 0 \u0434\u043b\u044f \u043d\u0435\u0431\u0430, 1 \u0434\u043b\u044f \u043f\u043e\u043b\u0430, 2 \u0434\u043b\u044f \u0441\u0444\u0435\u0440\u044b. \u041d\u043e \u043f\u043e\u043b \u0438 \u043d\u0435\u0431\u043e \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0434\u0430\u044e\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0444\u0435\u0440:<\/p>\n<pre><code class=\"cpp\">\/\/ \u0421\u0444\u0435\u0440\u044b \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043a\u0430\u043a 2D \u043c\u0430\u0441\u0441\u0438\u0432, \u0442\u043e\u0447\u043d\u0435\u0435, \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u043e  \/\/ 1D \u043c\u0430\u0441\u0441\u0438\u0432 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043c\u0430\u0441\u043e\u043a, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443 \u043d\u0430\u0441 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0446\u0438\u043a\u043b - \u043f\u043e \u043c\u0430\u0441\u043a\u0430\u043c \u0438 \u043f\u043e \u0431\u0438\u0442\u0430\u043c  \/\/ \u0432 \u043c\u0430\u0441\u043a\u0435 for (int k = 19; k--;) for (int j = 9; j--;) if (G[j] &amp; 1 &lt;&lt; k) { \/\/ \u0431\u0438\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d - \u0435\u0441\u0442\u044c \u0441\u0444\u0435\u0440\u0430 \u0432 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \/\/ \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440 \u0446\u0435\u043d\u0442\u0440\u0430 \u0441\u0444\u0435\u0440\u044b Vector p = o + Vector(-k, 0, -j - 4);  \/\/ \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0435 \u043b\u0443\u0447\u0430 \u0432 \u0441\u0444\u0435\u0440\u0443 fltype b = p % d; fltype c = p % p - 1; fltype q = b * b - c; if (q > 0) { \/\/ \u043f\u043e\u043f\u0430\u043b\u0438  \/\/ \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u043b\u0443\u0447\u0430 (\u043e\u0442 \u043a\u0430\u043c\u0435\u0440\u044b \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0430) \u0434\u043e \u0441\u0444\u0435\u0440\u044b fltype s = -b - sqrt(q); if (s &lt; t &amp;&amp; s > .01f) { \/\/ \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0431\u043b\u0438\u0437\u043a\u0443\u044e \u0441\u0444\u0435\u0440\u0443 \u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0434\u043b\u044f \u043d\u0435\u0451 \u043d\u043e\u0440\u043c\u0430\u043b\u044c t = s; n = !(p + d * t); m = 2; } } }<\/code><\/pre>\n<p>\u041d\u0443\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u0434\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044f (q > 0), \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043c\u044b \u041d\u0415 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u043c (\u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432 80 \u043b\u0443\u0447\u0435\u0439 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u0441\u0444\u0435\u0440\u044b, \u0430 \u0435\u0441\u043b\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442, \u0442\u043e \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0432 1 \u0438\u0437 49), \u0438 \u043a\u043e\u0434 \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u0440\u0430\u0439\u043d\u0435 \u0440\u0435\u0434\u043a\u043e.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435:<\/p>\n<pre><code class=\"cpp\">fltype b = p % d;  fltype c = p % p - 1;  fltype q = b * b - c;<\/code><\/pre>\n<p>\u0418\u0437 \u0442\u0440\u0451\u0445 \u0441\u0442\u0440\u043e\u043a \u0434\u0432\u0435 &#8212; \u044d\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f %, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e dot product, \u0438\u043b\u0438 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 (\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u0430\u0451\u0442 \u043a\u043e\u0441\u0438\u043d\u0443\u0441 \u0443\u0433\u043b\u0430 \u043c\u0435\u0436\u0434\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 &#8212; \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0434\u043e\u0432\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0432 \u043a\u043e\u043c\u043f. \u0433\u0440\u0430\u0444\u0438\u043a\u0435). \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u0432\u0438\u0434\u0438\u043c:<\/p>\n<pre><code class=\"cpp\">fltype operator%(const Vector &amp;l, const Vector &amp;r) {      return l.x * r.x + l.y * r.y + l.z * r.z;  }<\/code><\/pre>\n<p>&#8230;\u0438 \u0432\u0438\u0434\u0438\u043c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 <strong>\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430<\/strong>. \u0412\u043e\u0442 \u0438 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 &#171;\u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442\u0441\u044f&#187;: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440 \u0432 SIMD-\u0440\u0435\u0433\u0438\u0441\u0442\u0440, \u0430 \u043f\u043e\u0442\u043e\u043c \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432\u044b\u043a\u043e\u0432\u044b\u0440\u0438\u0432\u0430\u0442\u044c \u0438\u0437 \u043d\u0435\u0433\u043e [x,y,z] \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0438\u043c\u0438 \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434.<\/p>\n<p>\u0414\u0430, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u043c:<\/p>\n<pre><code class=\"cpp\">inline fltype dot(const Vector &amp;l, const Vector &amp;r) {     Vector v = l * r;     return v.x + v.y + v.z;  }<\/code><\/pre>\n<p>\u041d\u043e \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442? \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0434\u043b\u044f \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0439\u0442\u0440\u0435\u0439\u0441\u0435\u0440\u0430 \u0438 \u0434\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u0445.<br \/><a href=\"https:\/\/gcc.godbolt.org\/z\/47W4zfTq7\" rel=\"noopener noreferrer nofollow\">https:\/\/gcc.godbolt.org\/z\/47W4zfTq7<\/a><br \/><a href=\"https:\/\/gcc.godbolt.org\/z\/hPGKT8x3f\" rel=\"noopener noreferrer nofollow\">https:\/\/gcc.godbolt.org\/z\/hPGKT8x3f<\/a><\/p>\n<p>\u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b, \u043e\u043d \u0438 \u0442\u0430\u043a \u0432 \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u0442 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 &#8212; \u0432\u0438\u0434\u0438\u043c \u0434\u0432\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b vmul<strong>p<\/strong>s (\u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u043b\u043e\u0445\u043e \u0437\u043d\u0430\u0435\u0442\u0435 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440, \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 SIMD-\u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043b\u0435\u0433\u043a\u043e \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u043e\u0442 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0445 \u043f\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0431\u0443\u043a\u0432\u0435: <strong>p<\/strong> &#8212; parallel, <strong>s<\/strong> &#8212; scalar. \u0421\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u044f, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 &#171;\u043f\u044d&#187; \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435 :)).<\/p>\n<p>\u041d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u0447\u0430\u0449\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b FMA, \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439 (\u0432\u043e\u0442 \u044d\u0442\u0438 \u0437\u0443\u0431\u043e\u0434\u0440\u043e\u0431\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0432\u0443\u0447\u0430\u0449\u0438\u0435 vfmadd231ss &#8212; 3 \u0432\u043c\u0435\u0441\u0442\u043e 1), \u0438 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0438\u043c\u0435\u0435\u043c 14 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432\u043c\u0435\u0441\u0442\u043e 17.<\/p>\n<p>\u0414\u0430, \u044f \u0437\u043d\u0430\u044e \u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0434\u043b\u044f \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 (v)dpps, \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0440\u0438\u043d\u0441\u0438\u043a, \u0438 \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u0432\u0441\u0451 \u043a\u0440\u0430\u0441\u0438\u0432\u043e, <a href=\"https:\/\/gcc.godbolt.org\/z\/ThnK1eqee\" rel=\"noopener noreferrer nofollow\">6 \u043a\u043e\u043c\u0430\u043d\u0434<\/a> \u0432\u043c\u0435\u0441\u0442\u043e 14\/17&#8230; \u043d\u043e \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0442\u0430\u043a \u0435\u0449\u0451 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435! 6.70 \u0432\u043c\u0435\u0441\u0442\u043e 4.55\/5.08 \u0441. \u041e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0435\u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c\u044e dpps, \u043c\u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u043b\u0438\u0441\u044c <a href=\"https:\/\/blog.lexa.ru\/2011\/09\/11\/o_vektornom_umnozhenii_final.html\" rel=\"noopener noreferrer nofollow\">\u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f<\/a>, \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043d\u0430 SSE2 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u041f\u0440\u0438\u0447\u0451\u043c \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0430 SSE4-AVX, a \u0441 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c FMA (Haswell) dpps \u0432\u0438\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<p>\u041d\u043e \u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e FMA \u0443 \u043d\u0430\u0441 \u0441\u0435\u0439\u0447\u0430\u0441 &#171;s&#187;, \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0435, \u0447\u0442\u043e \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u0435\u043b \u043c\u0435\u0447\u0442\u0430\u043d\u0438\u0439. \u0418 \u0432 \u0446\u0435\u043b\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0441\u0442\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043d\u0430\u0438\u0432\u043d\u043e\u0439 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u043b\u0430\u0441\u044c, \u043d\u0443\u0436\u043d\u044b \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<\/p>\n<h2>2. \u0412\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430. \u0410\u0432\u0442\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f<\/h2>\n<p>\u0418\u0434\u0435\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u0440\u043e\u0441\u0442\u0430 &#8212; \u0435\u0441\u043b\u0438 \u043f\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0432\u0435\u043a\u0442\u043e\u0440\u0443 [x,y,z]) \u043a\u043e\u0434 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043b\u043e\u0445\u043e, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043b\u0443\u0447\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0432\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0430 \u0446\u0438\u043a\u043b, \u0442\u043e \u043d\u0430\u0434\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440\u043d\u043e\u043c: \u043f\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0443 \u0438\u0437 49 \u0441\u0444\u0435\u0440.<\/p>\n<p>\u041a\u0430\u0436\u0435\u0442\u0441\u044f \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0430 \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 &#171;\u043f\u043e \u0446\u0438\u043a\u043b\u0443&#187;. \u041a\u0430\u043a \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442: \u0432\u044b \u043f\u0438\u0448\u0435\u0442\u0435 \u0446\u0438\u043a\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0435 \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0435\u0433\u043e \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 &#171;\u0430 \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e&#187;, \u0438 \u0435\u0441\u043b\u0438 \u0434\u0430, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0434\u0432\u0430 \u0446\u0438\u043a\u043b\u0430 &#8212; \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0439, \u0441\u0447\u0438\u0442\u0430\u044e\u0449\u0438\u0439 \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0440\u0430\u0437\u0443, \u0438 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 \u0434\u043b\u044f &#171;\u0445\u0432\u043e\u0441\u0442\u0430&#187; \u043f\u0440\u0438 \u043a\u043e\u043b-\u0432\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0435 \u043a\u0440\u0430\u0442\u043d\u043e\u043c \u0448\u0430\u0433\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u0447\u0443\u0442\u044c \u043b\u0438 \u043d\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 <a href=\"https:\/\/github.com\/dotnet\/machinelearning\/blob\/287bc3e9b84f640e9b75e7b288c2663a536a9863\/src\/Microsoft.ML.CpuMath\/AvxIntrinsics.cs#L988-L1095\" rel=\"noopener noreferrer nofollow\">API \u0434\u043b\u044f SIMD<\/a> (\u0438\u0437 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u043a <a href=\"https:\/\/habr.com\/post\/435840\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 Net).<\/p>\n<p>\u041f\u0443\u0441\u0442\u044c \u043b\u0443\u0447\u0448\u0435 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435: 5 \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u043d\u0430 \u0421\u0438, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0435 1 \u0431\u0430\u0439\u0442 \u0437\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f&#8230; <a href=\"https:\/\/gcc.godbolt.org\/z\/43abvW954\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f<\/a>&#8230; \u0432 125 \u0441\u0442\u0440\u043e\u043a \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430 \u0438 256 \u0431\u0430\u0439\u0442 \u0437\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e!<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e? \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e &#171;\u0448\u0438\u0440\u043e\u043a\u0430\u044f&#187; \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 AVX2 (-march=haswell \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 AVX2+FMA), \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u043e 32 \u0431\u0430\u0439\u0442\u0430. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043d\u0430\u0448 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043e\u0434 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u043c\u0438 \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u0438 \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u043e\u0446\u0438\u0440\u0443\u0435\u0442 Clang \u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a SIMD \u0435\u0449\u0451 \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0446\u0438\u043a\u043b &#8212; \u043d\u0430 4 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 (\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435 \u0438\u0434\u0443\u0442 \u0447\u0435\u0442\u0432\u0451\u0440\u043a\u0430\u043c\u0438) \u0438 \u043d\u0430 2 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0446\u0438\u043a\u043b\u0430. \u0422\u0430\u043a \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f 32 * 4 * 2 = 256.<\/p>\n<p>\u042d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0434\u0435\u0430\u043b\u0435\u043d \u0434\u043b\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0442\u043e\u0440\u0430: \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0446\u0438\u043a\u043b, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435, \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435, \u0437\u0430\u043f\u0438\u0441\u044c, \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u0436\u0438\u0437\u043d\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u0441\u0447\u0430\u0441\u0442\u044c\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u0434\u043a\u043e. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u0440\u0435\u0439\u0442\u0440\u0435\u0439\u0441\u0435\u0440\u0443, \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0438\u043a\u043b \u0438 \u0434\u0440\u0443\u0436\u043d\u043e \u043e\u0433\u043e\u0440\u0447\u0430\u0435\u043c\u0441\u044f: \u0434\u0432\u043e\u0439\u043d\u043e\u0439, \u0434\u0430 \u0435\u0449\u0451 \u0438 \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c.<\/p>\n<pre><code class=\"cpp\">for (int k = 19; k--;) \/\/ 19 \u0438\u0442\u0435\u0440. for (int j = 9; j--;) \/\/ 9 \u0438\u0442\u0435\u0440. if (G[j] &amp; 1 &lt;&lt; k) { ... }<\/code><\/pre>\n<p>\u041d\u0443 \u043b\u0430\u0434\u043d\u043e, \u0434\u0432\u043e\u0439\u043d\u043e\u0439 &#8212; \u043d\u0435 \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0446\u0438\u043a\u043b\u044b \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u0447\u0442\u043e\u0431\u044b \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c (\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u043c\u044b\u043c) \u0431\u044b\u043b \u0434\u043b\u0438\u043d\u043d\u044b\u0439, \u043d\u0430 19 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f 19 \/ 8 (AVX) = 2.375 (3) * 9 = 27 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u0432\u043c\u0435\u0441\u0442\u043e 19 * 9 \/ 8 = 22 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c &#8212; \u043d\u0435 \u0442\u0430\u043a\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430.<\/p>\n<p>\u041d\u043e \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0435\u0449\u0451 \u0443\u0441\u043b\u043e\u0432\u0438\u0435. \u041d\u0430\u0434\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0432 SIMD \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0443\u0441\u043b\u043e\u0432\u0438\u0439. \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u0434\u0430\u044e\u0442 \u0447\u0438\u0441\u043b\u043e\u0432\u0443\u044e \u043c\u0430\u0441\u043a\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 true = $FF, false = $00, \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430:<\/p>\n<ol>\n<li>\n<p>\u041f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0431\u0435 \u0432\u0435\u0442\u043a\u0438 if () else (), \u0430 \u043f\u043e\u0442\u043e\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0430\u0441\u043a\u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0434\u0432\u0443\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432: dst = (res1 &amp; mask) | (res2 &amp; !mask) &#8212; \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 ReplaceChr \u0432\u044b\u0448\u0435. \u0415\u0441\u043b\u0438 \u0432\u0435\u0442\u043a\u0430 \u043e\u0434\u043d\u0430, \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0435, \u0432\u043c\u0435\u0441\u0442\u043e res2 \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0412 \u0440\u0435\u0439\u0442\u0440\u0435\u0439\u0441\u0435\u0440\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043c\u0430\u0441\u043a\u0430, \u0437\u0430\u0434\u0430\u044e\u0449\u0430\u044f \u0431\u0443\u043a\u0432\u044b: <\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/743\/091\/99e\/74309199e4c0d4cd0be3e36b313e8edd.png\" width=\"221\" height=\"349\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/743\/091\/99e\/74309199e4c0d4cd0be3e36b313e8edd.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u043d\u043e \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 0 \u0438\u043b\u0438 1 &#8212; \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0440\u0430\u0441\u0447\u0451\u0442\u043e\u0432 \u0441\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e \u0442\u0430\u043c \u0441\u043f\u043b\u043e\u0448\u044c 1, \u0430 \u0443\u0436\u0435 \u0438\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0433\u043e\u0434\u043d\u043e, \u0435\u0441\u043b\u0438 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u043d\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u043e \u0443 \u043d\u0430\u0441 \u043d\u043e\u043b\u0438\u043a\u043e\u0432 \u0432 \u043c\u0430\u0441\u043a\u0435 \u044f\u0432\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435. \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043a\u0438\u043d\u0443\u0442\u044c \u0442\u0430\u043a: \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u0434\u0435 19*9=171 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f, \u043d\u043e \u0438\u0437 \u043d\u0438\u0445 \u0442\u043e\u043b\u044c\u043a\u043e 49 \u043f\u043e\u043b\u043d\u043e\u0432\u0435\u0441\u043d\u044b\u0445, \u0442.\u043a. \u0432\u0441\u0435\u0433\u043e 49 \u0441\u0444\u0435\u0440. \u0412\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0434\u0430\u0441\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 &#8212; 27 \u0432\u043c\u0435\u0441\u0442\u043e 49 &#8212; \u043d\u043e \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 <strong>\u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c<\/strong> \u0432 1.8 \u0440\u0430\u0437\u0430, \u0430 \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435 \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0445\u0443\u0436\u0435. \u041f\u0440\u0438 \u0448\u0430\u0433\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 8 \u043d\u0435 \u043e\u0441\u043e\u0431\u043e \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u0435\u0442.<\/p>\n<\/li>\n<li>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443 (v)movmskps (\u0438\u043d\u0442\u0440\u0438\u043d\u0441\u0438\u043a _mm(256)_movemask_ps), \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 SIMD-\u043c\u0430\u0441\u043a\u0438 \u0432 32-\u0431\u0438\u0442\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u0443\u0436\u0435 \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0434\u0436\u0430\u043c\u043f \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c &#171;\u0435\u0441\u043b\u0438 \u0434\u043b\u044f \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0432 \u043d\u0430\u0448\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 = true, \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u044d\u0442\u0443 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e, \u0438\u043d\u0430\u0447\u0435 \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u043c&#187;. \u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043a \u043d\u0430\u0448\u0435\u0439 \u043c\u0430\u0441\u043a\u0435 &#8212; \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u0430 \u0435\u0434\u0438\u043d\u0438\u0447\u043a\u0430 \u0432 \u043f\u0430\u0447\u043a\u0435 \u0438\u0437 4-8 \u0448\u0442\u0443\u043a. \u0418 \u0442\u0435\u043f\u0435\u0440\u044c \u0443\u0436\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0435\u0434\u0438\u043d\u0438\u0447\u0435\u043a \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \ud83d\ude42 C 8-\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043d\u044b\u043c\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0435 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0441\u0442\u0440\u043e\u0447\u043a\u0430\u0445, \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 25 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439. \u0421 4-\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043d\u044b\u043c\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 &#171;\u043f\u0443\u0441\u0442\u044b\u043c\u0438&#187; \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f 11 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u0434\u043b\u044f \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0438\u0440\u0443\u044e: <\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/601\/18a\/a8c\/60118aa8cbfd39327b8534862cc15aae.png\" width=\"259\" height=\"344\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/601\/18a\/a8c\/60118aa8cbfd39327b8534862cc15aae.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u043d\u043e \u0438 \u043e\u0431\u0449\u0435\u0435 \u043a\u043e\u043b-\u0432\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432 2 \u0440\u0430\u0437\u0430, 60-11 = 49. \u0421 \u0442\u0435\u043c \u0436\u0435 \u0443\u0441\u043f\u0435\u0445\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0431\u0440\u0430\u0442\u044c \u0441\u0444\u0435\u0440\u044b \u043f\u043e \u043e\u0434\u043d\u043e\u0439&#8230;<\/p>\n<\/li>\n<\/ol>\n<p>\u041a\u0441\u0442\u0430\u0442\u0438, \u043f\u043e\u0434\u0443\u043c\u0430\u043b \u044f. \u0427\u0442\u043e \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u0435\u0440\u0437\u0430\u0442\u044c \u044d\u0442\u0443 \u0431\u0438\u0442\u043e\u0432\u0443\u044e \u043c\u0430\u0441\u043a\u0443, \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u0431\u0440\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b 49 \u0441\u0444\u0435\u0440? \u041f\u043e \u0441\u0443\u0442\u0438 \u043c\u0430\u0441\u043a\u0430 \u043d\u0443\u0436\u043d\u0430 \u0438\u0437-\u0437\u0430 (\u043d\u0435\u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u043b\u044f \u043d\u0430\u0441) \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432 \u0432\u0438\u0437\u0438\u0442\u043a\u0438, \u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0435\u0449\u0451 \u0443\u0434\u043e\u0431\u043d\u043e &#171;\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c&#187; \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435, \u043d\u043e \u0432 \u0441\u043c\u044b\u0441\u043b\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0441 \u043d\u0435\u0439 \u0441\u043f\u043b\u043e\u0448\u043d\u044b\u0435 \u043c\u0443\u0447\u0435\u043d\u0438\u044f. \u041c\u043e\u0436\u043d\u043e \u0434\u0430\u0436\u0435 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043c\u0430\u0441\u043a\u0443 \u043a\u0430\u043a \u0438\u0441\u0445\u043e\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c\u0438 \u043d\u0430 49 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0435\u0440\u0435\u0433\u043e\u043d\u044f\u044e\u0442\u0441\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0441\u0444\u0435\u0440 \u043d\u0435\u043c\u0443\u0434\u0440\u0451\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c:<\/p>\n<pre><code class=\"cpp\">int const SpCnt  = 49; fltype Gxa[SpCnt] attribute ((aligned(32))); fltype Gza[SpCnt] attribute ((aligned(32))); int i = 0; for (int j = 9; j--;)   for (int k = 19; k--;)     if (G[j] &amp; 1 &lt;&lt; k) {       Gxa[i] = -k; Gza[i] = -j-4;       i++;     };<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0431\u0443\u0434\u0435\u0442 \u043f\u043e \u0446\u0438\u043a\u043b\u0443, \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u043b\u0443\u0447\u0448\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0442\u044c, \u0447\u0442\u043e\u0431\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043c\u043e\u0433 \u0431\u0440\u0430\u0442\u044c \u043f\u043e 8 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 Gxa\/Gza \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 vmovaps.<\/p>\n<p>\u0418 \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0446\u0438\u043a\u043b \u043d\u0430 \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u044d\u0442\u0438\u0445 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432, \u0431\u0435\u0437\u043e \u0432\u0441\u044f\u043a\u0438\u0445 \u043f\u043e\u043f\u044b\u0442\u043e\u043a \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"cpp\">for (int k = 19; k--;)     for (int j = 9; j--;)     if (G[j] &amp; 1 &lt;&lt; k) {       Vector p = o + (Vector){(fltype)-k, 0, (fltype)-j-4};     {...}     } -> for (int j = 0; j &lt; SpCnt; j++) {     Vector p = o + (Vector){Gxa[j], 0, Gza[j]};     {...} }<\/code><\/pre>\n<p>&#8230;\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u0438 \u0432 \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u0440\u0430\u0437\u0430:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><code>base<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>4.55<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>1D-array<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>3.14<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0414\u0430, \u043f\u043e \u043c\u0435\u0440\u043a\u0430\u043c <a href=\"https:\/\/web.archive.org\/web\/20180922234544\/http:\/\/www.sql.ru\/forum\/1173809-1\/tyapnichnyy-benchmark-cpu-part-1\" rel=\"noopener noreferrer nofollow\">\u0444\u043e\u0440\u0443\u043c\u043d\u043e\u0433\u043e \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u043e\u0432\/\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432<\/a>, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0432\u0441\u0451 \u043d\u0430\u0447\u0438\u043d\u0430\u043b\u043e\u0441\u044c,    \u044d\u0442\u043e &#171;\u043d\u0435\u0447\u0435\u0441\u0442\u043d\u043e&#187;, \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043c\u0435\u043d\u044c\u0448\u0435 \u0440\u0430\u0431\u043e\u0442\u044b, \u0447\u0435\u043c \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u0434\u0435. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0446\u0435\u043b\u044c \u0431\u044b\u043b\u0430 &#8212; \u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c \u044f\u0437\u044b\u043a\u0438\/\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b, \u0442\u043e \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043d\u0430 \u043e\u0434\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b \u0442\u0430\u043a\u0436\u0435 \u0438 \u043a\u043e\u0434 \u043d\u0430 \u0432\u0441\u0435\u0445 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u0430\u0445. \u041d\u043e \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044f \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043b, \u0447\u0442\u043e \u043c\u043d\u0435 \u0432\u0430\u0436\u043d\u0435\u0435 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0430 \u0432 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 \u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u043d\u044b\u0445 \u043a \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u043c \u0443\u0441\u043b\u043e\u0432\u0438\u044f\u043c (\u043a\u043e\u0433\u0434\u0430 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b), \u0447\u0435\u043c &#171;\u043f\u043e\u0431\u0435\u0434\u0430&#187; \u043d\u0430 \u0443\u0436\u0435 \u043c\u0451\u0440\u0442\u0432\u043e\u043c \u0444\u043e\u0440\u0443\u043c\u0435.<\/p>\n<p>\u0422\u0435\u043e\u0440\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0435\u0440\u043d\u044b\u043c \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c \u043c\u043e\u0436\u0435\u0442 \u0434\u0430\u0442\u044c \u0441\u043e\u043b\u0438\u0434\u043d\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e: 49 \/ 8 = 6.175 -> \u0432\u0441\u0435\u0433\u043e 7 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0430 49 \u0441\u0444\u0435\u0440. \u041d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043c\u044b \u0437\u0430\u0431\u0435\u0436\u0430\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u043f\u0435\u0440\u0451\u0434, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u043e\u043a\u0430 \u043d\u0435 \u043e\u0447\u0435\u0432\u0438\u0434\u0435\u043d \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 &#8212; \u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043b\u0438 \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043a\u043e\u0434 tracer, \u0434\u0430\u0436\u0435 \u0441 \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c? \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0431\u044b\u043b\u0438 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u043c\u0438 \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430.<\/p>\n<p>Tracer \u043f\u043e \u0441\u0443\u0442\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 2 \u0437\u0430\u0434\u0430\u0447\u0438: \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u043b\u0443\u0447\u0430 \u0432 \u0441\u0444\u0435\u0440\u044b \u0438 \u0432\u044b\u0431\u043e\u0440 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0431\u043b\u0438\u0437\u043a\u043e\u0439 \u0441\u0444\u0435\u0440\u044b. \u041e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u0432 \u0441\u0444\u0435\u0440\u044b \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e. \u0418 \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0435\u0440\u0432\u0443\u044e \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0443 tracer (\u0441 \u0437\u0430\u043f\u0438\u0441\u044c\u044e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u044d\u0444\u0444-\u0442\u0430 q \u0432 \u043c\u0430\u0441\u0441\u0438\u0432) \u044d\u0442\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442, \u0432\u0441\u0451 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0431\u0435\u0437 \u043f\u0440\u043e\u0431\u043b\u0435\u043c:<br \/> <a href=\"https:\/\/gcc.godbolt.org\/z\/vs9dvq8Pf\" rel=\"noopener noreferrer nofollow\">https:\/\/gcc.godbolt.org\/z\/vs9dvq8Pf<\/a><\/p>\n<p>\u043f\u0440\u0438\u0447\u0451\u043c \u0432\u043e\u043e\u0431\u0449\u0435 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u043a\u043e\u0434\u0430; \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u043b\u043e \u043f\u043e\u043d\u044f\u0442\u043d\u0435\u0435, \u043a\u0430\u043a \u044d\u0442\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u0442\u0441\u044f, \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0432\u0435\u0440\u0441\u0438\u044e \u0441 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0438 \u0437\u0430\u0438\u043d\u043b\u0430\u0439\u043d\u0438\u043b \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e:<br \/> <a href=\"https:\/\/gcc.godbolt.org\/z\/8e43jxM35\" rel=\"noopener noreferrer nofollow\">https:\/\/gcc.godbolt.org\/z\/8e43jxM35<\/a><\/p>\n<p>\u041e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043d\u0430\u0448\u0435\u0433\u043e \u0446\u0438\u043a\u043b\u0430 \u043f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 &#8212; \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u044b (ox, oy, oz &#8212; \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u0430\u044f \u0442\u043e\u0447\u043a\u0430, dx, dy, dz &#8212; \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043b\u0443\u0447\u0430), \u0438 8-\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u044b\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0434\u043b\u044f \u043d\u0438\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0437\u0430\u043b\u0438\u0432\u0430\u0435\u0442 \u043e\u0434\u043d\u0438\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c (vbroadcastss \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0438).<\/p>\n<p>\u0410 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0442\u043e\u043b\u044c\u043a\u043e Gxa \u0438 Gza, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0431\u0435\u0440\u0451\u0442 \u0438\u0445 \u0438\u0437 \u043c\u0430\u0441\u0441\u0438\u0432\u0430 \u0438 \u0441\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u0430\u043c\u0438 vaddps ymm5, ymm0, ymmword ptr [rax + Gxa]. \u0414\u0430\u043b\u0435\u0435 \u0432\u0441\u0451 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043f\u0430\u0447\u043a\u0430\u043c\u0438 \u043f\u043e 8 \u0447\u0438\u0441\u0435\u043b (\u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0439 \u0446\u0438\u043a\u043b &#8212; \u0441\u0442\u0440\u043e\u043a\u0438 16-28 \u0432 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435) \u0438 \u044d\u0442\u0438 8-\u043a\u0438 \u043f\u0438\u0448\u0443\u0442\u0441\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 qa. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043c\u0430\u0441\u0441\u0438\u0432 \u043e\u0431\u043e\u0437\u043d\u0430\u0447\u0435\u043d \u043a\u0430\u043a __restrict &#8212; \u044d\u0442\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 \u0434\u043b\u044f \u0430\u0432\u0442\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u0433\u0430\u0440\u0430\u043d\u0442\u0438\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443, \u0447\u0442\u043e \u043c\u0430\u0441\u0441\u0438\u0432 (\u0432 \u0421\u0438 \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0443\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c) \u043d\u0435 \u043f\u0435\u0440\u0435\u0441\u0435\u043a\u0430\u0435\u0442\u0441\u044f \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438.<\/p>\n<p>\u0414\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0430 #pragma clang loop unroll(disable) \u043e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0443 \u0446\u0438\u043a\u043b\u0430 \u0434\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0439 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u0431\u0435\u0437 \u043d\u0435\u0451 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0433\u0440\u043e\u043c\u043d\u0430\u044f &#171;\u043f\u0440\u043e\u0441\u0442\u044b\u043d\u044f&#187; &#8212; \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0432\u0441\u0435 6 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439.<\/p>\n<p>\u0421\u043e \u0432\u0442\u043e\u0440\u043e\u0439 \u0447\u0430\u0441\u0442\u044c\u044e tracer (\u0432\u044b\u0431\u043e\u0440 \u0441\u0430\u043c\u043e\u0439 \u0431\u043b\u0438\u0437\u043a\u043e\u0439 \u0441\u0444\u0435\u0440\u044b) \u0441\u043b\u043e\u0436\u043d\u0435\u0435 &#8212; \u0437\u0434\u0435\u0441\u044c \u043c\u044b \u0438\u043c\u0435\u0435\u043c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f\u0445, \u0442\u043e \u0435\u0441\u0442\u044c \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430, \u0438 \u043d\u0430 \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434 \u044d\u0442\u043e \u043b\u043e\u043c\u0430\u0435\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e. \u041e\u0434\u043d\u0430\u043a\u043e \u0435\u0441\u0442\u044c \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u0451\u043c: \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u043a\u043a\u0443\u043c\u0443\u043b\u044f\u0442\u043e\u0440\u0430 \u0432\u0435\u043a\u0442\u043e\u0440, \u0430 \u043d\u0435 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043e N \u0441\u0430\u043c\u044b\u0445 \u0431\u043b\u0438\u0437\u043a\u0438\u0445 \u0441\u0444\u0435\u0440, \u0430 \u043f\u043e\u0441\u043b\u0435 \u043f\u0440\u043e\u0439\u0442\u0438\u0441\u044c \u043f\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0443 \u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u0430\u043c\u0443\u044e \u0431\u043b\u0438\u0437\u043a\u0443\u044e \u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u0435.<\/p>\n<p>\u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0434\u0430\u0436\u0435 \u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u0430\u043a\u043e\u0435 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. \u041d\u043e \u0432 \u044d\u0442\u043e\u043c, \u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0431\u044b \u043c\u043e\u0433, \u043e\u043d \u0441\u0434\u0435\u043b\u0430\u043b \u0431\u044b \u043d\u0435\u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e. \u0414\u0435\u043b\u043e \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0442\u043e\u0440 \u043d\u0435 \u0443\u043c\u0435\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c SIMD-\u0434\u0436\u0430\u043c\u043f\u044b \u0447\u0435\u0440\u0435\u0437 \u043a\u043e\u043c\u0430\u043d\u0434\u0443 (v)movmskps, \u0442\u043e\u043b\u044c\u043a\u043e \u0445\u0430\u0440\u0434\u043a\u043e\u0440, \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0441\u0447\u0451\u0442 \u0432\u0441\u0435\u0445 \u0432\u0435\u0442\u043e\u043a, \u0447\u0442\u043e \u043f\u0440\u0438 \u043c\u0430\u043b\u043e\u0439 \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u0432 \u0441\u0444\u0435\u0440\u0443 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435 \u0432\u044b\u0433\u043e\u0434\u043d\u043e.<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0442\u044f\u0436\u0451\u043b\u0443\u044e \u0430\u0440\u0442\u0438\u043b\u043b\u0435\u0440\u0438\u044e \u0432 \u0432\u0438\u0434\u0435 \u0438\u043d\u0442\u0440\u0438\u043d\u0441\u0438\u043a\u043e\u0432, \u043d\u043e \u043c\u043d\u0435 \u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043e\u0431\u043e\u0439\u0442\u0438\u0441\u044c \u0430\u0432\u0442\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0435\u0439.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0446\u0438\u043a\u043b \u043d\u0430 \u0434\u0432\u0430 &#8212; \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0439 \u0438 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439. \u0412\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u043c\u0430\u0441\u0441\u0443 \u0440\u0430\u0441\u0447\u0451\u0442\u043e\u0432, \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u044f \u043a\u043e\u044d\u0444\u0444-\u0442\u044b q \u0438 b \u0432 \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u043c\u0430\u0441\u0441\u0438\u0432\u044b, \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u043c \u0438 \u0438\u0437\u0432\u043b\u0435\u043a\u0430\u0435\u0442 \u0438\u0437 \u043d\u0438\u0445 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u0432 \u0441\u0444\u0435\u0440\u044b, \u0435\u0441\u043b\u0438 \u0435\u0441\u0442\u044c.<\/p>\n<p>\u041d\u0430 \u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u044f \u043d\u0435 \u0447\u0438\u0442\u0430\u043b \u043e\u0442\u0447\u0451\u0442\u044b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430 \u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u043d\u043e \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043b &#8212; \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 <a href=\"https:\/\/gcc.godbolt.org\/z\/ofcaE65dW\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0438\u0448\u0451\u043b \u043a \u0442\u043e\u043c\u0443 \u0436\u0435 \u0432\u044b\u0432\u043e\u0434\u0443<\/a>.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/17b\/9d2\/5cf\/17b9d25cf4cdd0f74a031d9298c11672.png\" width=\"1005\" height=\"516\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/17b\/9d2\/5cf\/17b9d25cf4cdd0f74a031d9298c11672.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0412 godbolt \u0435\u0441\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0432\u044b\u0432\u043e\u0434 \u043e\u0442\u0447\u0451\u0442\u043e\u0432 Clang &#8212; \u043e\u043a\u043d\u043e Add new (\u0438\u043a\u043e\u043d\u043a\u0430 \u0441 \u043f\u043b\u044e\u0441\u043e\u043c) \/ Optimization, \u0435\u0441\u043b\u0438 \u043d\u0430\u0432\u0435\u0441\u0442\u0438 \u043a\u0443\u0440\u0441\u043e\u0440 \u043d\u0430 \u043f\u043e\u043b\u043e\u0441\u043a\u0443 \u0440\u044f\u0434\u043e\u043c \u0441 \u043d\u0430\u0447\u0430\u043b\u043e\u043c \u0446\u0438\u043a\u043b\u0430, Clang \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0432\u0435\u0442\u0443\u0435\u0442 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u0435\u043c\u0443 loop distribution (\u044d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0442\u043e \u0441\u0430\u043c\u043e\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0446\u0438\u043a\u043b\u043e\u0432), \u0430 \u0435\u0441\u043b\u0438 \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c, \u0436\u0430\u043b\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0441\u043f\u0440\u0430\u0432\u0438\u0442\u044c\u0441\u044f \u0441 unsafe dependencies. &#171;\u041d\u0435 \u0448\u043c\u043e\u0433\u043b\u0430&#187;&#8230; \u043b\u0430\u0434\u043d\u043e, \u0434\u0435\u043b\u0430\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0432\u0440\u0443\u0447\u043d\u0443\u044e.<\/p>\n<p>\u0412\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0449\u0451 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u044d\u0444\u0444-\u0442\u0430 b.<br \/><a href=\"https:\/\/gcc.godbolt.org\/z\/x47varsqz\" rel=\"noopener noreferrer nofollow\">https:\/\/gcc.godbolt.org\/z\/x47varsqz<\/a><\/p>\n<p>\u041b\u0438\u0448\u043d\u044f\u044f \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u043f\u0430\u043c\u044f\u0442\u044c &#8212; \u043d\u0435\u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u043a\u044d\u0448 \u0434\u043e\u043b\u0436\u0435\u043d \u0432\u044b\u0432\u0435\u0437\u0442\u0438, \u043d\u0435 \u0442\u0430\u043a\u0438\u0435 \u0442\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u043e\u0431\u044a\u0451\u043c\u044b.<\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0439 rHitCnt &#8212; \u043f\u043e \u0441\u043c\u044b\u0441\u043b\u0443 \u044d\u0442\u043e \u0444\u043b\u0430\u0433 &#171;\u043f\u043e\u043f\u0430\u043b\u0438 \u0432\u043e \u0447\u0442\u043e-\u0442\u043e \u0438\u043b\u0438 \u043d\u0435\u0442&#187; (\u043c\u043e\u0436\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0438 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u043a\u0430\u043a \u0444\u043b\u0430\u0433: rHitCnt = rHitCnt | ((q > 0.0f) ? 1 : 0), \u043d\u043e \u044d\u0442\u0430 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044f \u0432 \u0441\u0442\u0430\u0440\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043c\u0435\u043d\u0435\u0435 \u043d\u0430\u0434\u0451\u0436\u043d\u043e). \u0415\u0441\u043b\u0438 \u043d\u0438 \u0432\u043e \u0447\u0442\u043e \u043d\u0435 \u043f\u043e\u043f\u0430\u043b\u0438, \u0442\u043e \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u043d\u0430 49 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c, \u043f\u0440\u0438 80 \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0430\u0445 \u043f\u0440\u043e\u0445\u043e\u0434\u044f\u0449\u0438\u0445 \u043c\u0438\u043c\u043e \u043b\u0443\u0447\u0435\u0439 \u044d\u0442\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b.<\/p>\n<p>\u0412\u043d\u0443\u0442\u0440\u0438 \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u043b \u0432\u044b\u0448\u0435 &#8212; \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0439 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u043d\u0430 8 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0441\u043b\u0435 \u0446\u0438\u043a\u043b\u0430 \u0441\u0443\u043c\u043c\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0434\u0435\u043b\u0430\u0435\u0442 \u044d\u0442\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.<\/p>\n<p>\u0421\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u043f\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0443 \u0441\u0432\u043e\u0435\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u044b\u0434\u0430\u0451\u0442 \u043d\u043e\u043c\u0435\u0440 \u0441\u0430\u043c\u043e\u0439 \u0431\u043b\u0438\u0437\u043a\u043e\u0439 \u043a \u043b\u0443\u0447\u0443 \u0441\u0444\u0435\u0440\u044b.<\/p>\n<pre><code class=\"cpp\">int mj = -1; if (rHitCnt > 0) \/\/ checking spheres - non-vectorized loop (because of (s &lt; t))   for (int j = 0; j &lt; SpCnt; j++)     \/\/Does the ray hit the sphere ?     if (qa[j] > 0.0f) {       \/\/It does, compute the distance camera-sphere       fltype s = -ba[j] - sqrt(qa[j]);       \/\/ find the minimum distance       if ((s > .01f) &amp;&amp; (s &lt; t)) {         t = s; mj = j;       }     }<\/code><\/pre>\n<p>\u0412 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0437\u0434\u0435\u0441\u044c \u0436\u0435 \u0441\u0447\u0438\u0442\u0430\u043b\u0430\u0441\u044c \u0438 \u043d\u043e\u0440\u043c\u0430\u043b\u044c \u043a \u0441\u0444\u0435\u0440\u0435 &#8212; \u0442\u043e \u0435\u0441\u0442\u044c \u043e\u043d\u0430 \u043c\u043e\u0433\u043b\u0430 \u0441\u0447\u0438\u0442\u0430\u0442\u044c\u0441\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437, \u0445\u043e\u0442\u044f \u043d\u0443\u0436\u043d\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0430 \u043d\u043e\u0440\u043c\u0430\u043b\u044c. \u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u041f\u043e\u043b \u0425\u0435\u043a\u0431\u0435\u0440\u0442 \u0432\u044b\u0431\u0440\u0430\u043b \u043d\u0435 \u0441\u043e\u0432\u0441\u0435\u043c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u0447\u0442\u043e\u0431\u044b \u0441\u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043c\u0435\u0441\u0442\u043e \u043d\u0430 \u0432\u0438\u0437\u0438\u0442\u043a\u0435. \u041d\u043e \u043d\u0430\u043c-\u0442\u043e \u043c\u0435\u0441\u0442\u043e \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u043d\u0435 \u043d\u0443\u0436\u043d\u043e, \u0438 \u044f \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u043b \u0441\u0435\u0431\u0435 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f, \u0432\u043f\u0440\u043e\u0447\u0435\u043c, \u043c\u0430\u043b\u043e \u043d\u0430 \u0447\u0442\u043e \u0432\u043b\u0438\u044f\u0435\u0442 (\u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u043e \u043b\u0443\u0447\u0435\u0439 \u0435\u0441\u043b\u0438 \u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u0442 \u0432 \u0441\u0444\u0435\u0440\u0443, \u0442\u043e \u0432 \u043e\u0434\u043d\u0443).<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0432\u0441\u0435\u0433\u0434\u0430 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u0432 \u043f\u043e\u043b, \u0445\u043e\u0442\u044f \u0435\u0441\u043b\u0438 \u043c\u044b \u043f\u043e\u043f\u0430\u043b\u0438 \u0432 \u0441\u0444\u0435\u0440\u0443, \u0442\u043e \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u0434\u043e \u043f\u043e\u043b\u0430 \u043b\u0443\u0447 \u0443\u0436\u0435 \u043d\u0435 \u0434\u043e\u0439\u0434\u0451\u0442. \u042d\u0442\u043e \u044f \u0442\u043e\u0436\u0435 \u0438\u0441\u043f\u0440\u0430\u0432\u0438\u043b, \u0438 \u043e\u043f\u044f\u0442\u044c-\u0442\u0430\u043a\u0438 \u044d\u0444\u0444\u0435\u043a\u0442 \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0438\u0437-\u0437\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438 \u043c\u0430\u043b\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u043d\u0442\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0439 \u0432 \u0441\u0444\u0435\u0440\u044b. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u043e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><code>base<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>4.55<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>1D-array<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>3.14<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>autovec<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>2.02<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>&#8230;\u0438 \u043e\u043d\u043e \u0435\u0441\u0442\u044c, 1.5-2.2 \u0440\u0430\u0437\u0430, \u0441\u043c\u043e\u0442\u0440\u044f \u043a\u0430\u043a \u0441\u0447\u0438\u0442\u0430\u0442\u044c, \u043f\u043e \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u0443 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e base \u0438\u043b\u0438 \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u0441\u0442\u043d\u043e, \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e 1D-array. \u0421 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u044d\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043a\u0440\u043e\u043c\u043d\u043e, \u0440\u0430\u043d\u0435\u0435 \u044f \u043e\u0442\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0441\u044f \u043e\u0442 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0432 1.5 \u0440\u0430\u0437 \u043a\u0430\u043a \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0441\u043b\u0430\u0431\u043e\u0433\u043e. \u0421 \u0434\u0440\u0443\u0433\u043e\u0439 &#8212; \u044d\u0442\u043e \u044f\u0432\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0438\u043d\u0442\u0440\u0438\u043d\u0441\u0438\u043a\u043e\u0432\u044b\u0435 10%, \u0438 \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043a\u043e\u0434 \u043e\u0441\u0442\u0430\u043b\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u0438 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u043c. \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0430 \u043f\u043e\u0440\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b \u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b, \u043a\u0440\u043e\u043c\u0435 \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u043e\u0433\u043e \u0434\u043b\u044f gcc\/Clang attribute ((aligned(32))), \u043d\u043e \u044d\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0442\u044c. \u041e\u0431\u0449\u0438\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 tracer \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043b\u0441\u044f \u0432 1.5 \u0440\u0430\u0437\u0430, \u0434\u043b\u044f SIMD-\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u044d\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043d\u0435\u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u0438\u0440\u043e\u0441\u0442.<\/p>\n<p>\u0411\u043e\u043d\u0443\u0441-\u0442\u0440\u0435\u043a: <a href=\"https:\/\/habr.com\/ru\/post\/483864\/\" rel=\"noopener noreferrer nofollow\">\u0448\u0438\u0440\u043e\u043a\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439<\/a> \u0432 \u0443\u0437\u043a\u0438\u0445 \u043a\u0440\u0443\u0433\u0430\u0445 \u043c\u0430\u043d\u044c\u044f\u043a\u043e\u0432-\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0442\u043e\u0440\u043e\u0432 wc \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/gcc.godbolt.org\/z\/9bbWxv8fW\" rel=\"noopener noreferrer nofollow\">\u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c<\/a> (\u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0439 \u0446\u0438\u043a\u043b &#8212; \u0441\u0442\u0440\u043e\u043a\u0438 205-251 \u0432 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435).<br \/>\u0422\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0434\u0430\u0432\u043d\u043e, \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0432\u0440\u043e\u0434\u0435 \u0431\u044b\u043b\u043e 1.6 \u0440\u0430\u0437\u0430, \u0447\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0443 \u0434\u0440\u0443\u0433\u0438\u0445 SIMD-\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439, \u043d\u043e \u0437\u0430\u0442\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u0443 \u0434\u0440\u0443\u0433\u0438\u0445 \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u041b\u0435\u0432\u0435\u043d\u0448\u0442\u0435\u0439\u043d\u0430 \u043d\u0435\u0442 \u0438 \u0432 \u043f\u043e\u043c\u0438\u043d\u0435.<\/p>\n<h2>3. \u0422\u0440\u0435\u0442\u044c\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430. \u0412\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f<\/h2>\n<p>\u041a\u043e\u0433\u0434\u0430 \u044f \u0434\u0443\u043c\u0430\u043b \u043e \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0435\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438, \u043c\u0435\u043d\u044f \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u0441\u043c\u0443\u0449\u0430\u043b \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u043d\u0430 49 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u043f\u0443\u0441\u0442\u044c \u0434\u0430\u0436\u0435 \u043b\u0435\u0433\u043a\u043e\u0432\u0435\u0441\u043d\u044b\u0439 \u0438 \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0434\u043a\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439. \u0425\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043e\u0442 \u043d\u0435\u0433\u043e \u0438\u0437\u0431\u0430\u0432\u0438\u0442\u044c\u0441\u044f, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043d\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u0445 \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u0443\u0441\u043b\u043e\u0432\u0438\u044f if (q > 0) &#171;SIMD-\u0434\u0436\u0430\u043c\u043f\u043e\u043c&#187;, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0446\u0438\u043a\u043b\u044b.<\/p>\n<p>\u0427\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f? \u042d\u0442\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u044f\u0437\u044b\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430 CPU \u0432 &#171;\u0448\u0435\u0439\u0434\u0435\u0440\u043d\u043e\u043c&#187; \u0441\u0442\u0438\u043b\u0435:<\/p>\n<pre><code class=\"cpp\">float4 a = {1, 2, 3, 4};  float4 b = {5, 6, 7, 8};  float4 c = a + b;  \/\/ c = { a[0] + b[0], a[1] + b[1], a[2] + b[2], a[3] + b[3] } = {6, 8, 10, 12}<\/code><\/pre>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u043e \u0438\u043d\u0442\u0440\u0438\u043d\u0441\u0438\u043a\u043e\u0432\u043e\u0433\u043e _mm_add_ps(a, b) \u043c\u043e\u0436\u043d\u043e \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u0443\u0434\u0430 \u0431\u043e\u043b\u0435\u0435 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0435 \u0438 \u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 a+b, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043e\u043d\u043e \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0442\u0443 \u0436\u0435 \u0441\u0430\u043c\u0443\u044e \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e (v)addps. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e, <a href=\"https:\/\/gcc.godbolt.org\/z\/djnrjzWdn\" rel=\"noopener noreferrer nofollow\">\u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043f\u0440\u0438\u043c\u0435\u0440\u0430\u0445<\/a> \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u0435\u0442, \u043d\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043c\u0430\u043b\u043e-\u043c\u0430\u043b\u044c\u0441\u043a\u0438 \u0441\u043b\u043e\u0436\u043d\u0443\u044e \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u043a\u0443 \u043d\u0430 \u0438\u043d\u0442\u0440\u0438\u043d\u0441\u0438\u043a\u0430\u0445 \u0438 \u0443\u0436\u0430\u0441\u043d\u0438\u0442\u0435\u0441\u044c. \u0410 \u043d\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u0445 \u0432\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0442\u0430\u043a \u0436\u0435 \u0438\u043b\u0438 \u043f\u043e\u0447\u0442\u0438 \u0442\u0430\u043a \u0436\u0435, \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<p>\u0417\u0430\u043c\u0435\u0442\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u044e\u0442\u0441\u044f \u0438 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043e\u0432\u043a\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432. \u042d\u0442\u043e \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0443\u0434\u043e\u0431\u043d\u043e \u0434\u043b\u044f \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432 \u0432 SIMD &#8212; \u0435\u0441\u043b\u0438 \u043d\u0443\u0436\u043d\u043e, \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c 8-\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0434\u0432\u0443\u043c\u044f \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u043c\u0438 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442\u0430\u043c\u0438, \u0442\u043e \u043c\u044b \u043d\u0435 \u043b\u0435\u0437\u0435\u043c \u0432 \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a \u043f\u043e \u0438\u043d\u0442\u0440\u0438\u043d\u0441\u0438\u043a\u0430\u043c, \u0430 \u043f\u0440\u044f\u043c\u043e \u0442\u0430\u043a \u0438 \u043f\u0438\u0448\u0435\u043c:<\/p>\n<p> <code>float k1, k2;<br \/> float8 mmk = {k1, k1, k1, k1, k2, k2, k2, k2};<\/p>\n<p><\/code>\u0418 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c <a href=\"https:\/\/godbolt.org\/z\/TYv11hneq\" rel=\"noopener noreferrer nofollow\">\u0432\u043f\u043e\u043b\u043d\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043a\u043e\u0434<\/a>. <\/p>\n<p>\u0415\u0441\u0442\u044c \u0438 \u043d\u0435\u0438\u043d\u0442\u0443\u0438\u0442\u0438\u0432\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438 <a href=\"https:\/\/godbolt.org\/z\/fjvfenzG4\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0442\u0438\u043f\u043e\u0432<\/a>: \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0441\u0438\u0448\u043d\u043e\u0433\u043e &#171;(\u0442\u0438\u043f)\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435&#187; \u043d\u0443\u0436\u043d\u043e \u043b\u0438\u0431\u043e \u0440\u0430\u0441\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043d\u043e, \u043b\u0438\u0431\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u0446\u0438\u043a\u043b, \u043b\u0438\u0431\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u0430\u043a\u043b\u0438\u043d\u0430\u043d\u0438\u0435 __builtin_convertvector. \u041f\u0440\u0438\u0447\u0451\u043c \u0435\u0441\u043b\u0438 Clang \u0432\u043e \u0432\u0441\u0435\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0432\u044b\u0434\u0430\u0451\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u043a\u043e\u0434, \u0442\u043e gcc \u0438\u043d\u043e\u0433\u0434\u0430 \u043d\u0435 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0434\u0430\u0436\u0435 \u0437\u0430\u043a\u043b\u0438\u043d\u0430\u043d\u0438\u0435, \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e float[N]&lt;->byte[N] \u043e\u043d \u043d\u0435 \u043e\u0441\u0438\u043b\u0438\u0432\u0430\u0435\u0442 \u043d\u0438 \u0432 \u043a\u0430\u043a\u043e\u043c \u0432\u0438\u0434\u0435.<\/p>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u0432 \u0446\u0435\u043b\u043e\u043c Clang \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f, gcc \u0445\u0443\u0436\u0435 (\u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f &#171;\u043f\u0430\u0442\u0447\u0438\u0442\u044c&#187; \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u043d\u044b\u0435 \u043c\u0435\u0441\u0442\u0430 \u0438\u043d\u0442\u0440\u0438\u043d\u0441\u0438\u043a\u0430\u043c\u0438), \u0430 \u0432\u043e\u0442 &#171;\u0440\u043e\u0434\u043d\u043e\u0439&#187; \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 MSVC, \u0443\u0432\u044b, \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0438\u043a\u0430\u043a. \u0412 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 MSVC \u0435\u0441\u0442\u044c \u043e\u043f\u0446\u0438\u044f &#171;\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0431\u044d\u043a\u0435\u043d\u0434 Clang&#187;, \u0438 \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0442\u0435\u0441\u0442\u043e\u0432 \u044f \u0435\u0451 \u043f\u0440\u043e\u0432\u0435\u0440\u044e, \u043d\u043e \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u0432 \u0441\u0435\u0440\u044c\u0451\u0437\u043d\u043e\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0435 \u0442\u0430\u043a \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440. \u0422\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c ICC (\u043e\u043d \u0436\u0435 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u0432 IDE MSVC?), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 gcc-\u043d\u043e\u0442\u0430\u0446\u0438\u044e.<\/p>\n<p>\u0418 \u0440\u0430\u0437\u0443\u043c\u0435\u0435\u0442\u0441\u044f, \u0432\u0441\u0435\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/github.com\/FROL256\/SWGL\/blob\/master\/gl_sc_swr\/vfloat8_x64.h\" rel=\"noopener noreferrer nofollow\">\u0441\u043b\u0435\u043f\u0438\u0442\u044c \u043d\u0435\u043a\u0443\u044e \u0438\u043c\u0438\u0442\u0430\u0446\u0438\u044e<\/a>, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0443 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 C++ \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 &#171;\u0435\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0443\u044e&#187; \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0443. \u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0438 \u0433\u043e\u0442\u043e\u0432\u044b\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 VectorClass \u043e\u0442 \u0410\u0433\u043d\u0435\u0440\u0430 \u0424\u043e\u0433\u0430, xsimd \u0438 \u043f\u0440. \u0421\u0430\u043c \u044f \u043a\u043e\u0433\u0434\u0430-\u0442\u043e \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b VectorClass &#8212; \u0432 \u0446\u0435\u043b\u043e\u043c \u043d\u0435\u043f\u043b\u043e\u0445\u043e, \u043d\u043e \u0440\u0430\u0437\u0434\u0440\u0430\u0436\u0430\u0435\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u044c \u043a\u0440\u043e\u043c\u0435 &#171;\u043f\u0440\u043e\u0441\u0442\u043e SIMD&#187; \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0435\u0449\u0451 \u0438 &#171;SIMD \u0432 \u043f\u043e\u043d\u0438\u043c\u0430\u043d\u0438\u0438 \u0430\u0432\u0442\u043e\u0440\u0430 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438&#187; (\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043d\u0430\u0431\u043e\u0440 \u044d\u0442\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 \u0438 \u0442.\u043f.). \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0443 \u043d\u043e\u0432\u0438\u0447\u043a\u043e\u0432 \u0432 C++ \u0441\u043e \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0438\u043c\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430\u043c\u0438 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u0432\u0441\u044f\u043a\u0438\u0435 \u0433\u043b\u0443\u043f\u044b\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u043d\u0438 (\u043c\u044b) \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0438\u0442\u0430\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f &#171;\u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438&#187; \ud83d\ude42<\/p>\n<p>\u041d\u043e \u0432\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043e\u0442 \u043e\u0431\u0449\u0438\u0445 \u0440\u0430\u0441\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u0439 \u043a \u0440\u0435\u0439\u0442\u0440\u0435\u0439\u0441\u0435\u0440\u0443.<\/p>\n<p>\u0427\u0435\u043c \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f \u043a\u043e\u0434 \u043d\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u0445 \u043e\u0442 \u0437\u0430\u0442\u043e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0434 \u0430\u0432\u0442\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e? \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0442\u0435\u043c, \u0447\u0442\u043e \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0441 &#171;\u043f\u0430\u0447\u043a\u0430\u043c\u0438&#187; \u0447\u0438\u0441\u0435\u043b (\u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0440\u0435\u0439\u0442\u0440\u0435\u0439\u0441\u0435\u0440\u0430 &#8212; 8-\u043a\u0430\u043c\u0438, \u0435\u0441\u043b\u0438 \u0441\u0447\u0438\u0442\u0430\u0442\u044c AVX\/float-\u0432\u0435\u0440\u0441\u0438\u044e \u0437\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e). \u0412\u0440\u043e\u0434\u0435 \u0431\u044b \u043f\u043e\u0445\u043e\u0436\u0435 \u043d\u0430 \u0438\u043d\u0442\u0440\u0438\u043d\u0441\u0438\u043a\u0438, \u043d\u043e \u0435\u0441\u0442\u044c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e: \u043d\u0435\u0442 \u0436\u0451\u0441\u0442\u043a\u043e\u0439 \u043f\u0440\u0438\u0432\u044f\u0437\u043a\u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043a \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u043a\u043e\u043c\u0430\u043d\u0434. \u041c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c 256-\u0431\u0438\u0442\u043d\u044b\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043f\u043e\u0434 128-\u0431\u0438\u0442\u043d\u044b\u0439 SSE \u0438 \u0432\u0441\u0451 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c, \u0438\u043d\u043e\u0433\u0434\u0430 \u0434\u0430\u0436\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u0437\u0430 \u0441\u0447\u0451\u0442 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0438 \u043d\u0430 2 (\u043f\u0440\u0438\u043c\u0435\u0440: <a href=\"https:\/\/gcc.godbolt.org\/z\/hde1fxWj9\" rel=\"noopener noreferrer nofollow\">\u0430\u043b\u044c\u0444\u0430-\u0431\u043b\u0435\u043d\u0434\u0438\u043d\u0433<\/a> \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438, \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0438\u043f\u0430 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u0432\u044b\u0448\u0435\u043d \u0440\u0430\u0434\u0438 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0438, \u0447\u0442\u043e \u0434\u0430\u0432\u0430\u043b\u043e, \u0435\u0441\u043b\u0438 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u043f\u043e\u043c\u043d\u044e, +20%).<\/p>\n<p>\u041d\u043e \u043a\u0440\u0430\u0441\u0438\u0432\u0430\u044f \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u0430 \u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0441\u043b\u0443\u0447\u0430\u0435\u0432 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d &#171;\u0440\u043e\u0434\u043d\u043e\u0439&#187; \u0440\u0430\u0437\u043c\u0435\u0440 \u0442\u0438\u043f\u0430. \u0422\u0430\u043a\u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434 \u043d\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u0445 \u0432\u043e\u043e\u0431\u0449\u0435 \u0431\u0435\u0437 SIMD, \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e.<\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0435 \u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043c\u044b \u0434\u0435\u043b\u0430\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u0432\u0440\u0443\u0447\u043d\u0443\u044e (\u0445\u043e\u0442\u044f \u0438 \u0441 \u043f\u0440\u0438\u044f\u0442\u043d\u044b\u043c \u0441\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0441\u043e\u043c) &#8212; \u043d\u0443\u0436\u043d\u043e  \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c &#171;\u0445\u0432\u043e\u0441\u0442&#187;. 49 \u0441\u0444\u0435\u0440 \u044d\u0442\u043e 48 \/ 8 = 6 + 1. \u0425\u043e\u0442\u044c \u043e\u043d\u0430 \u0438 \u043e\u0434\u043d\u0430, \u043d\u043e \u043b\u0443\u0447\u0448\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u0434\u043b\u044f \u043d\u0435\u0451 \u0446\u0438\u043a\u043b, \u0442\u043e\u0433\u0434\u0430 \u043c\u043e\u0436\u043d\u043e \u0441 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0439 \u0448\u0430\u0433 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 (4, 16).<\/p>\n<p>\u041f\u0440\u0438\u044f\u0442\u043d\u0430\u044f \u043d\u043e\u0432\u043e\u0441\u0442\u044c \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0446\u0438\u043a\u043b\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0430 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u044e\u0442\u0441\u044f, \u0432 \u0438\u0442\u043e\u0433\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043e\u043f\u044f\u0442\u044c-\u0442\u0430\u043a\u0438 2 \u0446\u0438\u043a\u043b\u0430.<\/p>\n<p>\u041d\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0437\u0430\u0431\u0435\u0433\u0430\u0442\u044c \u0432\u043f\u0435\u0440\u0451\u0434, \u043d\u0430\u0447\u043d\u0451\u043c \u0441 \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e &#8212; \u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0439, \u0442\u0430\u043a \u0436\u0435 \u043a\u0430\u043a \u0441 \u0430\u0432\u0442\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0435\u0439:<br \/> <a href=\"https:\/\/gcc.godbolt.org\/z\/7z6d77oMY\" rel=\"noopener noreferrer nofollow\">https:\/\/gcc.godbolt.org\/z\/7z6d77oMY<\/a><\/p>\n<p>\u0427\u0442\u043e \u0432 \u044d\u0442\u043e\u043c \u043a\u043e\u0434\u0435 \u043f\u0440\u0438\u043c\u0435\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0433\u043e? \u041e\u0431\u044a\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432 (\u0441\u0442\u0440\u043e\u043a\u0430 30) \u0434\u043b\u044f Clang \u044f \u0434\u0435\u043b\u0430\u044e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c <a href=\"http:\/\/clang.llvm.org\/docs\/LanguageExtensions.html#vectors-and-extended-vectors\" rel=\"noopener noreferrer nofollow\">OpenCL-\u0441\u0442\u0438\u043b\u044f<\/a>, \u0445\u043e\u0442\u044f Clang \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0438 gcc-\u043d\u043e\u0442\u0430\u0446\u0438\u044e \u0441 vector_size, \u043d\u043e OpenCL-\u043d\u043e\u0442\u0430\u0446\u0438\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u0430\u044f \u0438 \u0432\u0438\u0434\u0438\u043c\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0434\u043b\u044f Clang.<br \/>\u0412 \u0441\u0430\u043c\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043a\u0430\u043a \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b\u043e\u0441\u044c, \u043c\u044b \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e \u0441 \u043f\u0430\u0447\u043a\u0430\u043c\u0438 \u0432 8 \u0447\u0438\u0441\u0435\u043b, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0430\u043d\u043e\u0432\u044f\u0442\u0441\u044f \u0441\u0432\u043e\u0441\u044c\u043c\u0435\u0440\u0451\u043d\u043d\u044b\u043c\u0438, \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 vector8 (x[8], y[8], z[8]) \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u044f dot8 \u0434\u043b\u044f \u043d\u0435\u0451, \u0446\u0438\u043a\u043b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f SpCnt \/ 8 \u0440\u0430\u0437 \u0438 \u0442.\u0434.<\/p>\n<p>\u0412 \u0441\u0442\u0440\u043e\u043a\u0435 65 \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0439 (p8.x = o.x + Gx8[j]) &#8212; \u0434\u0430, \u0442\u0430\u043a \u043c\u043e\u0436\u043d\u043e, \u043f\u0440\u0438\u0447\u0451\u043c \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c o.x \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0441\u0430\u043c \u0432\u044b\u043d\u043e\u0441\u0438\u0442 \u0438\u0437 \u0446\u0438\u043a\u043b\u0430.<\/p>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u0445\u043e\u0436 \u043d\u0430 \u0430\u0432\u0442\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e &#8212; \u0442\u0435 \u0436\u0435 \u0441\u0430\u043c\u044b\u0435 5 \u043a\u043e\u043c\u0430\u043d\u0434 FMA \u043d\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e.<\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0440\u0430\u0434\u0438 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u0430 \u043f\u043e\u043a\u0440\u0443\u0442\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e VSize (\u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0435\u043a\u0442\u043e\u0440\u0430) &#8212; c VSize=4 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043d\u0430 xmm-\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u044d\u0442\u043e \u0438\u043c\u0435\u043b\u043e \u0431\u044b \u0441\u043c\u044b\u0441\u043b \u043f\u0440\u0438 \u0437\u043d\u0430\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0440\u0430\u0437\u043d\u0438\u0446\u0435 \u0432 \u0447\u0430\u0441\u0442\u043e\u0442\u0430\u0445 \u043c\u0435\u0436\u0434\u0443 SSE \u0438 AVX, \u043d\u043e \u0443 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u043e\u043d\u0430 \u043d\u0435 \u0442\u0430\u043a\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0430\u044f. \u0421 VSize=16 Clang \u0441\u043b\u0435\u0433\u043a\u0430 \u043f\u0435\u0440\u0435\u0433\u043b\u044e\u0447\u0438\u0432\u0430\u0435\u0442, \u043e\u043d \u0432\u044b\u0434\u0430\u0451\u0442 \u043e\u0433\u0440\u043e\u043c\u043d\u0443\u044e \u043f\u0440\u043e\u0441\u0442\u044b\u043d\u044e \u043f\u0435\u0440\u0435\u0442\u0430\u0441\u043e\u0432\u043e\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0441\u0442\u0435\u043a\u0435. \u0423 gcc \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f <a href=\"https:\/\/gcc.godbolt.org\/z\/6dEd83Gqz\" rel=\"noopener noreferrer nofollow\">\u0447\u0442\u043e-\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0447\u0438\u0442\u0430\u0435\u043c\u043e\u0435<\/a>, \u043d\u043e \u0435\u0441\u0442\u044c \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u0441\u0442\u0435\u043a\u0443 \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435 &#8212; \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432 \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442. \u0418 \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e\u0433\u043e interleaving \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0441\u0434\u0432\u043e\u0435\u043d\u043d\u044b\u0435-\u0441\u0447\u0435\u0442\u0432\u0435\u0440\u0451\u043d\u043d\u044b\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043a\u0430\u0436\u0434\u0430\u044f \u0441\u0432\u043e\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b. \u0422\u0430\u043a \u0447\u0442\u043e \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0437\u0434\u0435\u0441\u044c \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442, \u0445\u043e\u0442\u044f \u043f\u043e\u0442\u043e\u043c \u043f\u0440\u043e\u0442\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0435 &#8212; \u0432\u0442\u043e\u0440\u043e\u0439 \u0446\u0438\u043a\u043b \u0441 \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u043c\u0438\u043d. \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043d\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u0445. \u0421\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e q \u0438 b \u0443\u0436\u0435 \u043f\u043e\u0441\u0447\u0438\u0442\u0430\u043d\u044b \u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0438\u0437\u0432\u043d\u0435 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445.<br \/> <a href=\"https:\/\/gcc.godbolt.org\/z\/7r5vrPned\" rel=\"noopener noreferrer nofollow\">https:\/\/gcc.godbolt.org\/z\/7r5vrPned<\/a><\/p>\n<p>\u0423\u0441\u043b\u043e\u0432\u0438\u0435 if (q > 0) \u043a\u0430\u043a \u0440\u0435\u0434\u043a\u043e \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0435\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c &#171;SIMD-\u0434\u0436\u0430\u043c\u043f\u043e\u043c&#187; \u0447\u0435\u0440\u0435\u0437 _mm(256)_movemask_ps, \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0438\u043d\u0442\u0440\u0438\u043d\u0441\u0438\u043a, \u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u0445 \u043d\u0435\u0442 \u043a\u043e\u043c\u0430\u043d\u0434\u044b &#171;\u0438\u0437\u0432\u043b\u0435\u0447\u044c \u0431\u0438\u0442\u044b \u043c\u0430\u0441\u043a\u0438 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f&#187;. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0443 \u043c\u0435\u043d\u044f \u0431\u044b\u043b \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435\u043c \u043c\u0430\u0441\u043a\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0438 \u043e\u0442\u0440\u0435\u0437\u0430\u043d\u0438\u0435\u043c \u044d\u0442\u043e\u0439 \u043c\u0430\u0441\u043a\u043e\u0439 \u043d\u0435\u043d\u0443\u0436\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432:<\/p>\n<pre><code class=\"cpp\">int8 c = q8 > 0.0f; if (test_bits_any(c)) {     &lt;...>     s8 = (float8)((int8)s8 &amp; c);     &lt;...> }<\/code><\/pre>\n<p>\u042f \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u043b, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043f\u0430\u0441\u0430\u043b\u0441\u044f \u0432\u044b\u043b\u0435\u0437\u0430\u043d\u0438\u044f NaN \u0432 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0441\u043b\u043e\u0442\u0430\u0445. \u041d\u043e \u0438 \u0431\u0435\u0437 \u043c\u0430\u0441\u043a\u0438 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0433\u043b\u044e\u043a\u043e\u0432 \u0437\u0430\u043c\u0435\u0447\u0435\u043d\u043e \u043d\u0435 \u0431\u044b\u043b\u043e, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439:<br \/><code>if (any_positive(q8)) {...} \/\/ any_positive \u043f\u0440\u043e\u0441\u0442\u043e \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 bool<\/code><\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u0435 &#8212; \u0432\u044b\u0431\u043e\u0440 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0431\u043b\u0438\u0437\u043a\u043e\u0439 \u0441\u0444\u0435\u0440\u044b &#8212; \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u043c\u0435\u0442\u043e\u0434\u043e\u043c &#171;\u0441\u043c\u0435\u0448\u0438\u0432\u0430\u043d\u0438\u0435 \u0432\u0435\u0442\u043e\u043a true\/false \u043f\u043e \u043c\u0430\u0441\u043a\u0435&#187;. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u043d\u0442\u0440\u0438\u043d\u0441\u0438\u043a _mm256_blendv_ps, \u043d\u043e \u0441 \u0441\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430\u043c\u0438 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u0444\u043e\u0440\u043c\u0443\u043b\u0430 (x1 &amp; mask) | (x2 &amp; !mask) \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0432 \u0442\u0443 \u0436\u0435 \u0441\u0430\u043c\u0443\u044e vblendvps, \u0442\u0430\u043a \u0447\u0442\u043e \u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0430 \u0444\u043e\u0440\u043c\u0443\u043b\u0430, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0438\u043d\u0442\u0440\u0438\u043d\u0441\u0438\u043a\u043e\u0432 \u043f\u043e\u0434 \u0440\u0430\u0437\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0435\u043a\u0442\u043e\u0440\u0430.<\/p>\n<p>\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442: <a href=\"https:\/\/gcc.godbolt.org\/z\/661Wcq5aK\" rel=\"noopener noreferrer nofollow\">https:\/\/gcc.godbolt.org\/z\/661Wcq5aK<\/a><\/p>\n<p>\u0422\u0435\u0441\u0442\u044b:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><code>base<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>4.55<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>1D-array<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>3.14<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>autovec<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>2.02<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>vext<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>1.77<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>vext VSize=16<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>3.61 (gcc)<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 14% (\u0430 \u0437\u0430\u0432\u044b\u0448\u0435\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0445\u0443\u0436\u0435). \u041d\u0435 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u044e\u0449\u0435, \u0441 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u0440\u043e\u043d\u044b, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0440\u0430\u0434\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0430\u0432\u0442\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u0435\u043d. \u0422\u0430\u043a\u0436\u0435 \u043e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u043d\u0430 \u0441\u0442\u0430\u0440\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435 \u0441 AVX1, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u043d\u0430\u0447\u0438\u043d\u0430\u043b \u0441\u0432\u043e\u0438 \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b, \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u0431\u044b\u043b \u0431\u043e\u043b\u044c\u0448\u0435 (\u043e\u043a\u043e\u043b\u043e 40%), \u0438\u0437-\u0437\u0430 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0439 rHitCnt \u0432 \u0430\u0432\u0442\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0435. \u0412 AVX1 \u043d\u0435\u0442 256-\u0431\u0438\u0442\u043d\u044b\u0445 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434, \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0441\u043e \u0441\u0447\u0451\u0442\u0447\u0438\u043a\u043e\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432\u044b\u043d\u0443\u0436\u0434\u0435\u043d \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442\u044c \u043d\u0430 128-\u0431\u0438\u0442\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b, \u0447\u0442\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u0442 5-6 \u043a\u043e\u043c\u0430\u043d\u0434; \u0430 \u0432 AVX2 \u0441\u0447\u0451\u0442\u0447\u0438\u043a \u0438\u043d\u043a\u0440\u0435\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439.<\/p>\n<p>\u0414\u043b\u0438\u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 (\u0438\u0437-\u0437\u0430 &#171;\u0445\u0432\u043e\u0441\u0442\u0430&#187;) \u043e\u043f\u044f\u0442\u044c \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u043b\u0430\u0441\u044c, 75 \u0441\u0442\u0440\u043e\u043a \u0432\u043c\u0435\u0441\u0442\u043e 38 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430 \u0435\u0441\u043b\u0438 \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0434\u0435\u043a\u043b\u0430\u0440\u0430\u0446\u0438\u044f\u043c\u0438\/\u043e\u0431\u0451\u0440\u0442\u043a\u0430\u043c\u0438, \u0442\u043e 124 \u0441\u0442\u0440\u043e\u043a\u0438. \u041f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0430\u044f, \u0435\u0441\u043b\u0438 \u043d\u0435 \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0442\u044c \u0432 \u043e\u0431\u0451\u0440\u0442\u043a\u0438.<\/p>\n<h2>4. Random, \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c, \u0442\u0435\u0441\u0442\u044b<\/h2>\n<p>\u0412 \u0441\u0430\u043c\u043e\u0439 \u043e\u043f\u0442\u0438\u043c\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u0439 \u0442\u0440\u0430\u043a\u0442\u043e\u0432\u043a\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0432 4.55 \/ 1.77 = 2.57 \u0440\u0430\u0437\u0430 &#8212; \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0447\u0442\u043e \u044d\u0442\u043e \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043c\u0430\u043b\u043e\u0432\u0430\u0442\u043e \u0434\u043b\u044f \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043d\u0430 \u0432\u0438\u0434 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430 \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u043c\u0438 FMA.<br \/>\u0421\u0442\u043e\u0438\u0442 \u0437\u0430\u0434\u0443\u043c\u0430\u0442\u044c\u0441\u044f \u043e \u0442\u043e\u043c, \u0447\u0442\u043e \u0436\u0435 \u0435\u0449\u0451 \u043c\u043e\u0436\u0435\u0442 \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442\u044c. \u0412 \u043e\u0431\u0441\u0443\u0436\u0434\u0435\u043d\u0438\u044f\u0445 \u0440\u0435\u0439\u0442\u0440\u0435\u0439\u0441\u0435\u0440\u0430 \u043d\u0430 \u0444\u043e\u0440\u0443\u043c\u0435 \u0432\u044b\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u043f\u043e\u0434\u043e\u0437\u0440\u0435\u043d\u0438\u044f \u043e Random, \u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u0435\u0441\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c return (fltype) rand() \/ RAND_MAX \u043d\u0430 return 0.0f, \u0442\u043e \u0432\u0441\u0451 \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442\u0441\u044f \u0432 2 \u0441 \u043b\u0438\u0448\u043d\u0438\u043c \u0440\u0430\u0437\u0430 &#8212; \u043e\u0442\u0447\u0430\u0441\u0442\u0438 \u0438\u0437-\u0437\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u043b\u0443\u0447\u0435\u0439 \u0432 \u043e\u0434\u043d\u043e \u043c\u0435\u0441\u0442\u043e, \u043d\u043e \u0438 \u0438\u0437-\u0437\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0433\u043e rand() \u0442\u043e\u0436\u0435.<\/p>\n<p>\u0417\u0430\u043c\u0435\u043d\u044f\u0435\u043c rand() \u043d\u0430 \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u043e 8 \u043f\u0441\u0435\u0432\u0434\u043e-\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0445 \u0447\u0438\u0441\u043b\u0430 \u043d\u0430 \u043b\u0443\u0447, \u0447\u0442\u043e \u0434\u0430\u0451\u0442 \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e \u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u044b\u0439 (\u0445\u043e\u0442\u044f \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0434\u0440\u0443\u0433\u043e\u0439) \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\">\n<\/td>\n<td>\n<p align=\"left\"><code>rand()<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>simple Rand<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>base<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>4.55<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>3.492<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>1D-array<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>3.14<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>2.137<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>autovec<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>2.02<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>1.045<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>vext<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>1.77<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.832<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0432\u043b\u0438\u044f\u043d\u0438\u0435 Random \u043c\u0435\u043d\u0435\u0435 \u0437\u0430\u043c\u0435\u0442\u043d\u043e (\u0445\u043e\u0442\u044f 30% &#8212; \u0442\u043e\u0436\u0435 \u043d\u0435 \u0442\u0430\u043a \u043c\u0430\u043b\u043e), \u0430 \u0432 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u043e\u043d\u043e \u0432\u044b\u0440\u0430\u0441\u0442\u0430\u0435\u0442 \u0434\u043e 2-\u0445 \u0440\u0430\u0437. \u0418 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u043e\u043c\u0443 Random \u043c\u044b \u043d\u0430\u043a\u043e\u043d\u0435\u0446 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0441\u043e\u043b\u0438\u0434\u043d\u043e\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 base\/vext = 4 \u0440\u0430\u0437\u0430. \u0410 \u043e\u0442\u043b\u0438\u0447\u0438\u044f \u0432 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0435 &#8212; \u0441\u043c\u043e\u0442\u0440\u0438\u0442\u0435 \u0441\u0430\u043c\u0438, \u0441\u043c\u043e\u0436\u0435\u0442\u0435 \u0438\u0445 \u0440\u0430\u0437\u0433\u043b\u044f\u0434\u0435\u0442\u044c?<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/484\/48b\/d90\/48448bd9053f4e4d316912373a04adb2.png\" width=\"1024\" height=\"512\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/484\/48b\/d90\/48448bd9053f4e4d316912373a04adb2.png\"\/><figcaption><\/figcaption><\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435, \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c. \u041f\u043e\u0447\u0435\u043c\u0443 \u044f \u0432\u0437\u044f\u043b\u0441\u044f \u0437\u0430 \u043d\u0435\u0451 \u0432 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c? \u041d\u0443 \u0432\u0440\u043e\u0434\u0435 \u043a\u0430\u043a \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e, \u0447\u0442\u043e \u0442\u0440\u0430\u0441\u0441\u0438\u0440\u043e\u0432\u0449\u0438\u043a\u0438 \u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044f\u0442\u0441\u044f, \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044d\u0442\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044f \u043c\u043d\u0435 \u043a\u0430\u0437\u0430\u043b\u0430\u0441\u044c \u043d\u0430\u0438\u043c\u0435\u043d\u0435\u0435 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439. \u0412\u0441\u0435\u0433\u043e-\u0442\u043e \u0438 \u043d\u0443\u0436\u043d\u043e, \u0447\u0442\u043e \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438 \u0441 \u0444\u0430\u0439\u043b\u0430 \u043d\u0430 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438 \u0432\u043e\u0442\u043a\u043d\u0443\u0442\u044c #pragma omp parallel for \u043d\u0430 \u0432\u043d\u0435\u0448\u043d\u0438\u0439 (\u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u044b\u0439) \u0446\u0438\u043a\u043b \u043f\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f\u043c \u0432 main (\u0438 \u0435\u0449\u0451 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u043e\u0437\u0438\u0442\u044c\u0441\u044f \u0441 \u043b\u0438\u043d\u043a\u043e\u0432\u043a\u043e\u0439 omp). \u041f\u0440\u043e\u0441\u0442\u043e \u0432\u0437\u044f\u0442\u044c \u0438 \u0432\u043e\u0442\u043a\u043d\u0443\u0442\u044c&#8230; \u043a\u0430\u0436\u0435\u0442\u0441\u044f, \u0442\u0430\u043a\u043e\u0435 \u0443\u0436\u0435 \u0431\u044b\u043b\u043e \u0432 \u043d\u0430\u0447\u0430\u043b\u0435, \u0434\u0430?<\/p>\n<p><code>i5-12400 serial \/ parallel 0.832 \/ 0.167 = 4.98<\/code><\/p>\n<p>\u041d\u0435 \u0442\u0430\u043a \u043f\u043b\u043e\u0445\u043e \u043d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u043b\u0438\u0437\u043e\u043a \u043a \u043a\u043e\u043b-\u0432\u0443 \u044f\u0434\u0435\u0440 (6), \u0438 \u043c\u043e\u0436\u043d\u043e \u043a\u0438\u0432\u043d\u0443\u0442\u044c \u043d\u0430 \u0437\u0430\u043a\u043e\u043d \u0410\u043c\u0434\u0430\u043b\u0430 \u0438 \u0443\u0441\u043f\u043e\u043a\u043e\u0438\u0442\u044c\u0441\u044f.<\/p>\n<p>\u041d\u043e \u0435\u0441\u043b\u0438 \u0437\u043d\u0430\u0442\u044c, \u0447\u0442\u043e \u0446\u0438\u043a\u043b\u044b \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044f\u0442\u0441\u044f \u0434\u0432\u0443\u043c\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u043c\u0438 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438:<\/p>\n<ol>\n<li>\n<p>\u043a\u043e\u043b-\u0432\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430 \u043a\u043e\u043b-\u0432\u043e \u044f\u0434\u0435\u0440 \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u0442\u043e\u043a\/\u044f\u0434\u0440\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u043e \u0441\u0432\u043e\u0438\u043c \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442\u043e\u043c;<\/p>\n<\/li>\n<li>\n<p>\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0440\u0430\u0441\u043a\u0438\u0434\u044b\u0432\u0430\u043d\u0438\u0435 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u043f\u043e \u043f\u0443\u043b\u0443 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u0431\u043e\u043b\u0435\u0435 \u0433\u0438\u0431\u043a\u0438\u0439 \u043f\u043e\u0434\u0445\u043e\u0434, \u043d\u043e \u0434\u0430\u0451\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b. <\/p>\n<\/li>\n<\/ol>\n<p>&#8230;\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u0442\u044c, \u0447\u0442\u043e \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e omp \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 1-\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 &#8212; \u0442\u043e \u0435\u0441\u0442\u044c \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 \u0434\u0435\u043b\u0438\u0442\u0441\u044f \u043d\u0430 12 \u043f\u043e\u043b\u043e\u0441\u043e\u043a \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438, \u0438 \u044d\u0442\u0438 \u043f\u043e\u043b\u043e\u0441\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u0440\u0430\u0437\u043d\u0443\u044e \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0443, \u0433\u0434\u0435-\u0442\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0442\u043e\u043b\u043e\u043a\/\u043f\u043e\u043b, \u0433\u0434\u0435-\u0442\u043e \u043c\u043d\u043e\u0433\u043e \u0441\u0444\u0435\u0440, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0442\u043e\u043a\u0438 \u043e\u0442\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0442 \u0437\u0430 \u0440\u0430\u0437\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u044f. \u0417\u043d\u0430\u0447\u0438\u0442, \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043d\u0430 2-\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442: #pragma omp parallel for schedule(dynamic)<\/p>\n<p><code>i5-12400 serial \/ parallel 0.832 \/ 0.107 = 7.66<\/code><\/p>\n<p>\u0412\u043e\u0442 \u0442\u0435\u043f\u0435\u0440\u044c \u0442\u0430\u043a\u0438 &#171;\u043f\u0440\u0435\u043a\u0440\u0430\u0441\u043d\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0442\u0441\u044f&#187;, \u0434\u0430\u0436\u0435 \u0433\u0438\u043f\u0435\u0440\u0442\u0440\u0435\u0434\u0438\u043d\u0433 \u043f\u043e\u043c\u043e\u0433 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u043b 1.66 \u044f\u0434\u0440\u0430. \u041a\u0441\u0442\u0430\u0442\u0438, \u0432 \u0444\u043e\u0440\u0443\u043c\u043d\u043e\u043c \u0430\u0440\u0445\u0438\u0432\u0435 \u043d\u0430 \u0413\u0438\u0442\u0425\u0430\u0431 \u0442\u043e\u0436\u0435 \u0435\u0441\u0442\u044c <a href=\"https:\/\/github.com\/Mark-Kovalyov\/CardRaytracerBenchmark\/tree\/master\/cpp-mt\" rel=\"noopener noreferrer nofollow\">\u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f<\/a>, \u0438 \u043e\u043d\u0430 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u0430 &#8212; \u043d\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u0443\u0441\u043b\u043e\u0436\u043d\u044f\u0435\u0442 \u043a\u043e\u0434 \u043f\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044e \u0441 \u043c\u043e\u0435\u0439 \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u0434\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u0447\u043a\u043e\u0439.<\/p>\n<p>\u0424\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 i5-12400 (\u0441 \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u044b\u043c Random):<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\">\n<\/td>\n<td>\n<p align=\"left\"><code>serial<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>parallel<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>serial\/parallel<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>base<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>3.492<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.553<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>6.3<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>1D-array<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>2.137<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.346<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>6.2<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>vext<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.832<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.107<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>7.7<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>base\/vext<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>4.19<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>5.12<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>max:32.6<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 &#171;\u043c\u0430\u0440\u043a\u0435\u0442\u043e\u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435&#187; \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 base+serial \/ vext+parallel &#8212; 32 \u0440\u0430\u0437\u0430, \u0431\u043e\u043b\u0435\u0435 \u0447\u0435\u0441\u0442\u043d\u043e\u0435 1D+serial \/ vext+parallel &#8212; 20, \u0447\u0442\u043e \u0442\u043e\u0436\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u043e.<\/p>\n<p>\u0410 \u0443\u0436 16-\u044f\u0434\u0435\u0440\u043d\u044b\u0439 Ryzen 5950 \u0438 \u0432\u043e\u0432\u0441\u0435 \u043e\u0442\u0440\u0430\u0434\u0430 \u043c\u0430\u0440\u043a\u0435\u0442\u043e\u043b\u043e\u0433\u0430:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\">\n<\/td>\n<td>\n<p align=\"left\"><code>serial<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>parallel<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>serial\/parallel<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>base<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>2.830<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.219<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>13<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>vext<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.708<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.037<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>19<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>base\/vext<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>4.00<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>5.92<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>max: 76.4<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>76 \u0440\u0430\u0437! \u041d\u0443 \u0434\u0430, \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u043c\u0438 \u043e\u0433\u043e\u0432\u043e\u0440\u043a\u0430\u043c\u0438&#8230;<\/p>\n<p>\u0418\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u0447\u0442\u043e \u0443 \u043e\u0431\u043e\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0443\u0441\u0438\u043b\u0438\u0432\u0430\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430, \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0443 \u043d\u0438\u0445 \u043f\u0440\u044f\u043c\u043e-\u0442\u0430\u043a\u0438 \u0441\u0438\u043d\u0435\u0440\u0433\u0438\u044f. \u0423 Ryzen \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u043e, \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0449\u0451 \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u0440\u0430\u0437\u0430 \u043d\u0430 \u0440\u043e\u0432\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u0445\u043e\u0442\u044f \u043f\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c \u044d\u0442\u043e\u0433\u043e \u0440\u0430\u0437\u0434\u0435\u043b\u0430 \u043f\u043e\u043d\u0430\u0447\u0430\u043b\u0443 \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434 &#171;\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0430\u0444\u0438\u0433 \u043d\u0435 \u043d\u0443\u0436\u043d\u0430&#187;&#8230; \u043d\u0443 \u043b\u0430\u0434\u043d\u043e, &#171;\u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u0435\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0434\u0430\u0451\u0442 \u0431\u041e\u043b\u044c\u0448\u0443\u044e \u0432\u044b\u0433\u043e\u0434\u0443 \u043f\u0440\u0438 \u043a\u0443\u0434\u0430 \u043c\u0435\u043d\u044c\u0448\u0438\u0445 \u0443\u0441\u0438\u043b\u0438\u044f\u0445&#187; &#8212; \u0434\u0430, \u0432\u0441\u0451 \u0442\u0430\u043a, \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438, \u0447\u0442\u043e \u0432\u0430\u0448 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0445\u043e\u0440\u043e\u0448\u043e \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0442\u0441\u044f. 13 \u0440\u0430\u0437 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e \u043b\u0443\u0447\u0448\u0435, \u0447\u0435\u043c 4 &#8212; \u043d\u043e 76 \u0440\u0430\u0437 \u0435\u0449\u0451 \u043b\u0443\u0447\u0448\u0435, \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435\u043c \u0442\u043e\u0433\u043e \u0438 \u0434\u0440\u0443\u0433\u043e\u0433\u043e. \u0422\u0430\u043a \u0447\u0442\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0441\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u0441\u043e \u0441\u0447\u0435\u0442\u043e\u0432.<\/p>\n<p>\u041d\u0430 \u043a\u0440\u0430\u0441\u0438\u0432\u043e\u0439 \u0446\u0438\u0444\u0440\u0435 &#171;76 \u0440\u0430\u0437&#187; \u043c\u044b \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u0435\u043c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e, \u0445\u043e\u0442\u044f \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u0435\u0449\u0451 \u0435\u0441\u0442\u044c, \u043d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0442\u0440\u044e\u043a\u043e\u0432 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 bounding box\/rect \u0434\u043b\u044f \u0431\u0443\u043a\u0432, \u0447\u0442\u043e\u0431\u044b \u0431\u044b\u0441\u0442\u0440\u043e \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u043b\u0443\u0447\u0438, \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u0435 \u0432 \u0441\u0444\u0435\u0440\u044b, \u0438\u043b\u0438 \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u044b\u0435 \u0434\u043b\u044f \u0433\u0440\u0430\u0444\u0438\u043a\u0438 quadtree\/octree) \u0438 \u0437\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044f <a href=\"https:\/\/www.shadertoy.com\/view\/MscSWl\" rel=\"noopener noreferrer nofollow\">GPU<\/a> (\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0434\u0440\u0443\u0433\u043e\u0439, \u043d\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u043d\u0435\u0448\u043d\u0435 \u043f\u043e\u0445\u043e\u0436, \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0438).<\/p>\n<h2>5. \u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b<\/h2>\n<p>\u041b\u044e\u0431\u0438\u043c\u0430\u044f \u043c\u043d\u043e\u0433\u0438\u043c\u0438 \u0440\u0443\u0431\u0440\u0438\u043a\u0430 &#171;\u043a\u0438\u0442 \u043f\u0440\u043e\u0442\u0438\u0432 \u0441\u043b\u043e\u043d\u0430&#187;, \u0442\u043e\u0447\u043d\u0435\u0435, \u043f\u0430\u0440\u0430 \u043a\u0438\u0442\u043e\u0432 clang \u0438 gcc \u043f\u0440\u043e\u0442\u0438\u0432 \u0441\u043a\u0440\u043e\u043c\u043d\u043e\u0433\u043e \u0441\u043b\u043e\u043d\u0438\u043a\u0430 MSVC. \u041a\u0440\u043e\u043c\u0435 \u0442\u0435\u0441\u0442\u043e\u0432, \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043e\u0431 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044f\u0445 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 clang\/gcc \u043f\u043e\u0434 Windows.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\">\n<\/td>\n<td>\n<p align=\"left\"><code>base<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>max.optim.<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Clang 14.0.3<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>4.550<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.107<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Gcc 12.1<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>5.214<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.110<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>diff.<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>14%<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>4%<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0412 \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u043a\u0438\u0442\u043e\u0432 \u043b\u0443\u0447\u0448\u0438\u043c \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f Clang, \u043f\u0440\u0438\u0447\u0451\u043c \u044d\u0444\u0444\u0435\u043a\u0442 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0437\u0430\u043c\u0435\u0442\u0435\u043d \u043d\u0430 \u043d\u0435\u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043a\u043e\u0434\u0435. \u0425\u043e\u0442\u044f \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u043e\u043a\u043e\u043b\u0435\u043d\u0438\u044f\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432 \u0431\u044b\u0432\u0430\u043b\u043e \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443, \u043a\u043e\u0433\u0434\u0430-\u0442\u043e gcc \u0434\u0430\u0432\u0430\u043b \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0448\u0438\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 (\u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u043f\u043e\u043c\u043d\u044e, \u043d\u043e \u043d\u0430\u0432\u0435\u0440\u043d\u043e\u0435 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0430 Clang 5 \u0438\u043b\u0438 7, \u043a\u043e\u0433\u0434\u0430 \u044f \u043d\u0430\u0447\u0438\u043d\u0430\u043b \u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u044b \u0441 \u0440\u0435\u0439\u0442\u0440\u0435\u0439\u0441\u0435\u0440\u043e\u043c). \u0422\u0430\u043a \u0447\u0442\u043e gcc \u0435\u0449\u0451 \u043c\u043e\u0436\u0435\u0442 \u0441\u0435\u0431\u044f \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c.<\/p>\n<p>\u0423 MSVC \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0442\u0441\u044f \u0441 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f &#8212; \u043d\u043e \u0430\u0432\u0442\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043d\u0435 \u0445\u0443\u0436\u0435? \u041d\u0435\u0442, \u043e\u0431\u044b\u0447\u043d\u0430\u044f autovec-\u0432\u0435\u0440\u0441\u0438\u044f \u043d\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0438 \u0432\u044b\u0434\u0430\u0451\u0442 7 \u0441\u0435\u043a\u0443\u043d\u0434, MSVC <a href=\"https:\/\/gcc.godbolt.org\/z\/oo9c9sjPe\" rel=\"noopener noreferrer nofollow\">\u043d\u0435 \u043d\u0440\u0430\u0432\u044f\u0442\u0441\u044f \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u043f\u043e\u043b\u044f\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440<\/a>, \u043f\u0435\u0440\u0435\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u043d\u0430 \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 (\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e &#171;\u0440\u0430\u0434\u0443\u0435\u0442&#187;, \u0447\u0442\u043e \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0438\u043c \u044f\u0437\u044b\u043a\u043e\u043c \u043e\u043d \u043e\u0431 \u044d\u0442\u043e\u043c \u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0435 \u043c\u043e\u0436\u0435\u0442, \u0438\u0449\u0438\u0442\u0435 \u0441\u0430\u043c\u0438 <a href=\"https:\/\/docs.microsoft.com\/ru-ru\/cpp\/error-messages\/tool-errors\/vectorizer-and-parallelizer-messages?view=msvc-170\" rel=\"noopener noreferrer nofollow\">\u043a\u043e\u0434 \u043e\u0448\u0438\u0431\u043a\u0438<\/a>).<\/p>\n<p>\u041b\u0430\u0434\u043d\u043e, \u0437\u0434\u0435\u0441\u044c MSVC \u043f\u043e\u0432\u0435\u0437\u043b\u043e, \u0443 \u043c\u0435\u043d\u044f \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044f \u0441 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u043c\u0438, \u0438 \u043e\u043d\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u0443\u0441\u043f\u0435\u0448\u043d\u043e:<br \/><a href=\"https:\/\/gcc.godbolt.org\/z\/fnfedhExM\" rel=\"noopener noreferrer nofollow\">https:\/\/gcc.godbolt.org\/z\/fnfedhExM<\/a><\/p>\n<p>\u0412\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0439 \u0446\u0438\u043a\u043b &#8212; \u0441\u0442\u0440\u043e\u043a\u0438 177-203, \u0442\u0430\u043c \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u043a\u0430 \u043d\u0430 2, \u043d\u043e \u043f\u043e \u0441\u0443\u0442\u0438 \u044d\u0442\u043e \u0442\u0435 \u0436\u0435 5 FMA-\u043a\u043e\u043c\u0430\u043d\u0434 \u043d\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\">\n<\/td>\n<td>\n<p align=\"left\"><code>base<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>autovec<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>vext<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Clang 14.0.3<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>4.550<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.138<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.107<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Gcc 12.1<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>5.214<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.176<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.110<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>MSVC 2022<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>7.125<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.180<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>-<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u043b\u0438\u0437\u043e\u043a \u043a gcc \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 autovec, \u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u044d\u0442\u043e \u043d\u0435\u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430 gcc, \u043e\u043d \u043c\u0435\u043d\u0435\u0435 \u0430\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 FMA \u0432 \u044d\u0442\u043e\u0439 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 &#8212; <a href=\"https:\/\/gcc.godbolt.org\/z\/83z439Y7j\" rel=\"noopener noreferrer nofollow\">3 \u0432\u043c\u0435\u0441\u0442\u043e 5<\/a> (\u0445\u043e\u0442\u044f \u043e\u0441\u0442\u0430\u0432\u0448\u0438\u0435\u0441\u044f 2 \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u043d\u0430 2 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u044f \u0438 1 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u043d\u0435 \u0442\u0430\u043a \u043f\u043b\u043e\u0445\u043e?). \u0418 \u043e\u0442 \u0442\u043e\u043f\u043e\u0432\u044b\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 MSVC \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043e\u0442\u0441\u0442\u0430\u0451\u0442, \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0432 \u043f\u043e\u043b\u0442\u043e\u0440\u0430 \u0440\u0430\u0437\u0430.<\/p>\n<p>\u042f \u0442\u0430\u043a\u0436\u0435 \u043e\u0431\u0435\u0449\u0430\u043b \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c <a href=\"https:\/\/docs.microsoft.com\/ru-ru\/cpp\/build\/clang-support-msbuild?view=msvc-170\" rel=\"noopener noreferrer nofollow\">Clang \u043a\u0430\u043a \u0431\u044d\u043a\u0435\u043d\u0434 \u0434\u043b\u044f MSVC<\/a>  &#8212; \u043d\u0443\u0436\u043d\u043e \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0442\u043e\u0440\u0435 MSVC, \u043f\u043e\u0442\u043e\u043c \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0438\u0442\u044c &#171;\u041d\u0430\u0431\u043e\u0440 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b&#187; \u0432 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430.<\/p>\n<p>\u0412\u0430\u0440\u0438\u0430\u043d\u0442 \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u043c\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c\u0438 \u043f\u043e\u043d\u0430\u0447\u0430\u043b\u0443 \u0432\u044b\u0434\u0430\u043b \u043d\u0435\u0432\u0435\u0440\u043d\u0443\u044e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0443. \u041e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0434\u0435\u043b\u043e \u0432 \u0432\u044b\u0440\u0435\u0437\u0430\u043d\u0438\u0438 \u043d\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0441\u043b\u043e\u0442\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f if (q > 0), \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u044f \u043e\u043f\u0440\u043e\u043c\u0435\u0442\u0447\u0438\u0432\u043e \u0443\u0431\u0440\u0430\u043b \u0442.\u043a. &#171;\u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u0433\u043b\u044e\u043a\u043e\u0432 \u043d\u0435\u0442 \u0438 \u0442\u0430\u043a&#187;. \u041f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0432\u0435\u0440\u043d\u0443\u0442\u044c, \u0445\u043e\u0442\u044f \u043e\u043d\u043e \u043d\u0435\u043c\u043d\u043e\u0433\u043e (\u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 5%) \u0437\u0430\u043c\u0435\u0434\u043b\u044f\u0435\u0442.<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td data-colwidth=\"175\" width=\"175\">\n<p align=\"left\">\n<\/td>\n<td>\n<p align=\"left\"><code>base<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>autovec<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>vext<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"175\" width=\"175\">\n<p align=\"left\"><code>Clang 14.0.3<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>4.550<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.138<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.107<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"175\" width=\"175\">\n<p align=\"left\"><code>Gcc 12.1<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>5.214<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.176<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.110<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"175\" width=\"175\">\n<p align=\"left\"><code>MSVC 2022<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>7.125<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.180<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>-<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-colwidth=\"175\" width=\"175\">\n<p align=\"left\"><code>MSVC+Clang 13<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>5.528<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.170<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>0.135<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u041d\u0443 \u0447\u0442\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c &#8212; \u043f\u043e\u0447\u0442\u0438, \u043f\u043e\u0447\u0442\u0438 \u043a\u0430\u043a \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u0439 Clang, \u043d\u043e \u0432\u0441\u0451-\u0442\u0430\u043a\u0438 \u043d\u0430 20% \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435. \u0412\u0440\u044f\u0434 \u043b\u0438 \u0434\u0435\u043b\u043e \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u044f\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0430, \u0435\u0441\u043b\u0438 <a href=\"https:\/\/gcc.godbolt.org\/z\/7q9WsGrra\" rel=\"noopener noreferrer nofollow\">\u0441\u0440\u0430\u0432\u043d\u0438\u0442\u044c<\/a> 13-\u044e \u0438 14-\u044e \u0432\u0435\u0440\u0441\u0438\u0438 \u0432 godbolt, \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043f\u043e\u0447\u0442\u0438 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439, \u043d\u044e\u0430\u043d\u0441\u044b \u0432 \u043f\u0430\u0440\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 \u0438 \u0432 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u043c \u0446\u0438\u043a\u043b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043e\u0441\u043e\u0431\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f.<\/p>\n<p>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u043e \u043f\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u0438 &#8212; \u0432\u0435\u0442\u043a\u0430 \u0441 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u043c\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u043c\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f, \u043d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043a\u0430\u043a .x, .y &#8212; \u0442\u0430\u043a\u043e\u0435 \u043e\u0449\u0443\u0449\u0435\u043d\u0438\u0435, \u0447\u0442\u043e \u043e\u0442\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0430 gcc-\u0441\u0442\u0438\u043b\u044c \u0432\u043c\u0435\u0441\u0442\u043e &#171;\u0440\u043e\u0434\u043d\u043e\u0433\u043e&#187;.<\/p>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c, \u043c\u043d\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0441\u044f Clang \u0432 \u0432\u0435\u0440\u0441\u0438\u0438 Microsoft, \u0445\u043e\u0442\u044f \u0438 \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u0447\u0442\u043e \u0434\u043b\u044f \u043c\u043d\u043e\u0433\u0438\u0445 \u043f\u0440\u0438\u0432\u044b\u0447\u043d\u0430\u044f IDE \u043a\u0443\u0434\u0430 \u0446\u0435\u043d\u043d\u0435\u0435 \u0432\u0441\u0435\u0445 \u044d\u0442\u0438\u0445 \u043d\u044e\u0430\u043d\u0441\u043e\u0432.<\/p>\n<p>\u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u0442\u0435\u0441\u0442\u0430\u0445 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u0440\u043e\u0441\u0442\u0443\u044e (\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0430\u0440\u0445\u0430\u0438\u0447\u043d\u0443\u044e \u0432 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0438 \u0441 \u0433\u043b\u0430\u043c\u0443\u0440\u043d\u043e\u0439 MSVC) IDE Code::Blocks \u0438 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0435 \u0447\u0435\u0440\u0435\u0437 msys2 Clang \u0438 gcc.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/08a\/8bb\/4d8\/08a8bb4d81c33aa23ffb5feff179c651.png\" width=\"1293\" height=\"852\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/08a\/8bb\/4d8\/08a8bb4d81c33aa23ffb5feff179c651.png\"\/><figcaption><\/figcaption><\/figure>\n<p>Code::Blocks &#8212; \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0441 \u043d\u0438\u043c \u043f\u0440\u0438 \u0436\u0435\u043b\u0430\u043d\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e, \u0430 \u043f\u043e msys2 \u043f\u043e\u044f\u0441\u043d\u044e \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435. \u042d\u0442\u043e linux-style \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440 \u043f\u0430\u043a\u0435\u0442\u043e\u0432, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043f\u043e\u0434 Windows \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0432\u0435\u0440\u0441\u0438\u0438 &#171;\u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u0445&#187; C\/C++ \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432, \u043d\u0430 12.08.2022 \u044d\u0442\u043e \u0431\u044b\u043b\u0438 gcc 12.1 \u0438 clang 14.0.6.<\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 msys2 \u043d\u0443\u0436\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<p> <code>pacman -Syuu<\/code> \/\/ \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0441\u043a\u0430\u0436\u0435\u0442, \u0447\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u043d\u0435\u0447\u0435\u0433\u043e<br \/> <code>pacman -S mingw-w64-x86_64-gcc<br \/> pacman -S mingw-w64-x86_64-clang<\/code><br \/> (32-\u0431\u0438\u0442\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e: <code>mingw-w64-i686-gcc mingw-w64-i686-clang<\/code>)<\/p>\n<p>\u041e\u0442\u043b\u0430\u0434\u0447\u0438\u043a \u0442\u043e\u0436\u0435 \u0441\u0442\u0430\u0432\u0438\u0442\u0441\u044f \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e:<\/p>\n<p> <code>mingw-w64-x86_64[i686]-gdb<\/code>, \u043a\u0430\u043a \u0432\u0430\u0440\u0438\u0430\u043d\u0442, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c<br \/> <code>mingw-w64-x86_64[i686]-toolchain<\/code>, \u043f\u043e\u0441\u0442\u0430\u0432\u0438\u0442 gcc, gdb, \u043d\u043e \u0438 \u043c\u043d\u043e\u0433\u043e \u0432\u0441\u0435\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0424\u043e\u0440\u0442\u0440\u0430\u043d\u0430 \u0438 \u0410\u0434\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440.<\/p>\n<p>\u041f\u043e\u0442\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b \u0442\u043e\u0439 \u0436\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 pacman -Syuu. \u0412 IDE \u0443\u043a\u0430\u0437\u0430\u0442\u044c [\u043f\u0443\u0442\u044c \u043a msys2]\\mingw64 \u0438\u043b\u0438 mingw32.<\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u0432\u0441\u0451, <a href=\"https:\/\/github.com\/Little-Alien\/CardRaytracerSIMD\" rel=\"noopener noreferrer nofollow\">\u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u043f\u0440\u0438\u043b\u0430\u0433\u0430\u044e\u0442\u0441\u044f<\/a>. \u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0431\u044b\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/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\/articles\/685228\/\"> https:\/\/habr.com\/ru\/articles\/685228\/<\/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<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u0425\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0437\u0430\u043d\u0438\u043c\u0430\u043b\u0441\u044f \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0435\u0439 <a href=\"http:\/\/fabiensanglard.net\/rayTracing_back_of_business_card\" rel=\"noopener noreferrer nofollow\">card raytracer<\/a> &#8212; \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0439\u0442\u0440\u0435\u0439\u0441\u0435\u0440\u0430, \u043a\u043e\u0434 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0443\u043c\u0435\u0449\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0432\u0438\u0437\u0438\u0442\u043a\u0435.<\/p>\n<p>\u0422\u043e\u0447\u043d\u0435\u0435, \u044d\u0442\u043e \u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442\u0430\u044f \u0434\u043b\u044f \u043b\u0443\u0447\u0448\u0435\u0439 \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0432\u0435\u0440\u0441\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0432 <a href=\"https:\/\/web.archive.org\/web\/20180922234544\/http:\/\/www.sql.ru\/forum\/1173809-1\/tyapnichnyy-benchmark-cpu-part-1\" rel=\"noopener noreferrer nofollow\">\u0444\u043e\u0440\u0443\u043c\u043d\u043e\u0439 \u0432\u0435\u0442\u043a\u0435<\/a><br \/> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0430\u0441\u044c \u043a\u0430\u043a \u0442\u0435\u0441\u0442 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u043e\u0432.<\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u044f \u043d\u0430\u0442\u043a\u043d\u0443\u043b\u0441\u044f \u043d\u0430 \u044d\u0442\u0443 \u0432\u0435\u0442\u043a\u0443, \u044f \u043a\u0430\u043a \u0440\u0430\u0437 \u0438\u0437\u0443\u0447\u0430\u043b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u044b C\u0438, \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e \u043d\u0435\u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e \u0432\u043e\u0437\u043d\u0430\u043c\u0435\u0440\u0438\u043b\u0441\u044f \u0432\u0441\u0435\u0445 <s>\u043f\u043e\u0440\u0432\u0430\u0442\u044c<\/s> \u043e\u0431\u043e\u0433\u043d\u0430\u0442\u044c. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u043e\u0431\u043e\u0433\u043d\u0430\u043b, \u043d\u043e \u0441 \u043d\u0430\u0440\u0443\u0448\u0435\u043d\u0438\u0435\u043c \u043f\u0440\u0430\u0432\u0438\u043b &#8212; \u0441\u043b\u0435\u0433\u043a\u0430 \u043f\u043e\u043f\u0440\u0430\u0432\u0438\u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u0422\u0435\u043c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435, \u044d\u0442\u043e \u0445\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e &#171;\u0437\u0430\u0442\u043e\u0447\u0438\u0442\u044c&#187; \u043a\u043e\u0434 \u043f\u043e\u0434 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e, \u0441 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435\u043c \u0447\u0438\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0438 \u0443\u043c\u0435\u0440\u0435\u043d\u043d\u044b\u043c \u0440\u043e\u0441\u0442\u043e\u043c \u043e\u0431\u044a\u0451\u043c\u0430 \u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u0438. \u042f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443, \u043a\u0430\u043a\u0438\u0435 \u0435\u0441\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u043e\u0434 \u0438 \u0434\u0430\u043d\u043d\u044b\u0435, \u0438 \u043d\u0430\u043a\u043e\u043d\u0435\u0446, \u043a\u0430\u043a \u043f\u0435\u0440\u0435\u043b\u043e\u0436\u0438\u0442\u044c \u043d\u0430 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0447\u0435\u0440\u043d\u043e\u0432\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u043f\u043e \u043a\u043e\u0434\u043e\u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 &#8212; \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f, \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0438 \u0441\u043e\u0432\u0441\u0435\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0440\u0438\u043d\u0441\u0438\u043a\u0438.<\/p>\n<p>\u041d\u0430\u0432\u0435\u0440\u043d\u043e\u0435, \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u0443\u0434\u0435\u0442 \u0432 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043f\u043e\u043b\u0435\u0437\u043d\u0430 \u043d\u043e\u0432\u0438\u0447\u043a\u0430\u043c, \u043d\u043e \u0438 \u043e\u043f\u044b\u0442\u043d\u044b\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438 (\u043f\u043e \u043f\u0440\u0438\u0432\u044b\u0447\u043a\u0435 \u043f\u0438\u0448\u0443\u0449\u0438\u0435 SIMD-\u043a\u043e\u0434 \u0438\u043d\u0442\u0440\u0438\u043d\u0441\u0438\u043a\u0430\u043c\u0438) \u043c\u043e\u0433\u0443\u0442 \u043d\u0430\u0439\u0442\u0438 \u0447\u0442\u043e-\u0442\u043e \u043d\u043e\u0432\u043e\u0435.<br \/>\u041a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 &#8212; \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c Clang, \u043c\u043e\u0436\u043d\u043e GCC, \u0432 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u043c \u0438\u0442\u043e\u0433\u0435 \u044f \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u0438 \u043f\u043e\u0434 MSVC.<\/p>\n<h2>1. \u041f\u0435\u0440\u0432\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0435\u0439\u0442\u0440\u0435\u0439\u0441\u0435\u0440\u0430.<\/h2>\n<p>\u041f\u043e \u0421ard raytracer \u043d\u0430 \u0425\u0430\u0431\u0440\u0435 \u0443\u0436\u0435 \u0431\u044b\u043b\u0438 \u0441\u0442\u0430\u0442\u044c\u0438: <a href=\"https:\/\/habr.com\/post\/434528\/\" rel=\"noopener noreferrer nofollow\">\u0441 \u0440\u0430\u0437\u0431\u043e\u0440\u043e\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430<\/a>,  <a href=\"https:\/\/habr.com\/ru\/post\/443804\/\" rel=\"noopener noreferrer nofollow\">\u0441 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u0435\u043c \u043d\u0430 C#<\/a>. <\/p>\n<p>\u041d\u043e \u044f \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0443\u044e \u0432\u0435\u0440\u0441\u0438\u044e \u0440\u0435\u0439\u0442\u0440\u0435\u0439\u0441-\u0432\u0438\u0437\u0438\u0442\u043a\u0438, \u0431\u043e\u043b\u0435\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439, \u0437\u0430\u0442\u043e \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c (\u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441\u0435\u043a\u0443\u043d\u0434\u044b \u0432\u043c\u0435\u0441\u0442\u043e \u043c\u0438\u043d\u0443\u0442). \u041a\u043b\u0430\u0441\u0441\u0438\u043a\u0430 \u0440\u0435\u0439\u0442\u0440\u0435\u0439\u0441\u0430 &#8212; \u0437\u0435\u0440\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u0444\u0435\u0440\u044b \u0441 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435\u043c, \u043c\u044f\u0433\u043a\u0438\u043c\u0438 \u0442\u0435\u043d\u044f\u043c\u0438 \u0438 \u0430\u043d\u0442\u0438\u0430\u043b\u0438\u0430\u0441\u0438\u043d\u0433\u043e\u043c.<\/p>\n<p>\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c&#8230; \u043d\u043e \u0447\u0435\u0441\u0442\u043d\u043e \u0441\u043a\u0430\u0436\u0443, \u044f \u043f\u043e\u043d\u0430\u0447\u0430\u043b\u0443 \u043f\u043e\u043b\u0435\u043d\u0438\u043b\u0441\u044f \u0432\u043d\u0438\u043a\u0430\u0442\u044c, \u0430 \u0441\u0440\u0430\u0437\u0443 \u043f\u043e\u043b\u0435\u0437 \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434. \u0418 \u0441\u0435\u0439\u0447\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0433\u043b\u044f\u0434\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u043d\u0430\u0434\u043e.<\/p>\n<p>\u041f\u0440\u0438 \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u043e\u043c \u0432\u0437\u0433\u043b\u044f\u0434\u0435 \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043d\u044f\u0442\u044c, \u0447\u0442\u043e \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043e\u043d \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0440\u0430\u0441\u0447\u0451\u0442\u043e\u0432 \u0441 \u0433\u0435\u043e\u043c\u0435\u0442\u0440\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 [x,y,z]. \u0418 \u0441\u0430\u043c\u044b\u0439 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 &#8212; \u043f\u043e\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u044d\u0442\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0432 SIMD-\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0438 \u0434\u0435\u043b\u0430\u0442\u044c, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 \u043e\u0434\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 addps \u0432\u043c\u0435\u0441\u0442\u043e 3-\u0445 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0445 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u0412\u043e\u0442 <a href=\"https:\/\/habr.com\/ru\/post\/326900\/\" rel=\"noopener noreferrer nofollow\">\u0437\u0434\u0435\u0441\u044c<\/a> \u0432 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u0435\u0441\u0442\u044c \u043a\u0440\u0430\u0441\u0438\u0432\u0430\u044f \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 (\u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u043c\u0435\u0441\u0442\u043e \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u043e \u043d\u0435 \u0441\u0443\u0442\u044c).<\/p>\n<p>\u042f \u043d\u0435 \u0441\u0442\u0430\u043b \u0437\u0430\u043c\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c\u0441\u044f \u0441 \u0438\u043d\u0442\u0440\u0438\u043d\u0441\u0438\u043a\u0430\u043c\u0438, \u0430 \u043f\u043e-\u0431\u044b\u0441\u0442\u0440\u043e\u043c\u0443 \u043f\u0435\u0440\u0435\u043f\u0440\u0430\u0432\u0438\u043b \u043a\u043e\u0434 \u043f\u043e\u0434 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f Clang, \u0431\u043b\u0430\u0433\u043e \u044d\u0442\u043e \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u0445 \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0436\u0443 \u043f\u043e\u0437\u0436\u0435, \u0441\u0435\u0439\u0447\u0430\u0441 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 &#8212; \u0447\u0442\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435.<\/p>\n<p>i5-12400F, Clang 14, -march=haswell -O3 -ffast-math<br \/>(\u0431\u0430\u0437\u043e\u0432\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043d\u0435\u043a\u0443\u044e \u0441\u043c\u0435\u0441\u044c card-raytracer-opt\/card-raytracer-rwolf c <a href=\"https:\/\/github.com\/Mark-Kovalyov\/CardRaytracerBenchmark\" rel=\"noopener noreferrer nofollow\">\u0413\u0438\u0442\u0425\u0430\u0431\u0430<\/a>, double \u0437\u0430\u043c\u0435\u043d\u0451\u043d \u043d\u0430 float) <\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><code>Base<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>4.55<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Vector Extensions<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>5.08<\/code><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\"><code>Raytracer_handofdos_r2.c<\/code><\/p>\n<\/td>\n<td>\n<p align=\"left\"><code>4.13<\/code><\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<p>\u0410 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u043e\u0441\u044c \u043d\u0438\u043a\u0430\u043a\u043e\u0433\u043e \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f, \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043d\u0435 \u0442\u043e\u043b\u044c\u043a\u043e\/\u043d\u0435 \u0441\u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u0445. \u0412\u0435\u0440\u0441\u0438\u044f <a href=\"https:\/\/github.com\/Mark-Kovalyov\/CardRaytracerBenchmark\/blob\/master\/c\/Raytracer_handofdos_r2.c\" rel=\"noopener noreferrer nofollow\">\u0441 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435\u043c \u0438\u043d\u0442\u0440\u0438\u043d\u0441\u0438\u043a\u043e\u0432<\/a> \u0434\u043b\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0442\u043e\u0436\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u044f\u0435\u0442 &#8212; \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0433\u043e \u043d\u0430 10% (<a href=\"https:\/\/github.com\/Mark-Kovalyov\/CardRaytracerBenchmark\/blob\/master\/c\/Raytracer_handofdos_r3experimental.c\" rel=\"noopener noreferrer nofollow\">Raytracer_handofdos_r3experimental<\/a> \u043d\u0435 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044e, \u0442\u0430\u043c \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c, \u0430 \u0431\u0435\u0437 \u043d\u0435\u0451 \u0432\u0441\u0451 \u043d\u0430\u043c\u043d\u043e\u0433\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0431\u0430\u0437\u043e\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438).<\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u0432 \u0447\u0451\u043c \u043f\u0440\u0438\u0447\u0438\u043d\u0430 &#8212; \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u0442\u0430\u043a\u0438 \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0441 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u043c.<br \/>\u041f\u0441\u0435\u0432\u0434\u043e\u043a\u043e\u0434\u043e\u043c \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u043e\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<p><code>\u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f:<br \/>   \u0412\u044b\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u0435\u043c 64 \u043b\u0443\u0447\u0430 \u0438 \u0443\u0441\u0440\u0435\u0434\u043d\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<br \/>     \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043b\u0443\u0447\u0430:<br \/>       \u041f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u0435 \u0441\u043e \u0441\u0446\u0435\u043d\u043e\u0439 (49 \u0441\u0444\u0435\u0440\u0430\u043c\u0438), \u043f\u0440\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0438 \u0432 \u0441\u0444\u0435\u0440\u0443 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0442\u0440\u0430\u0436\u0451\u043d\u043d\u044b\u0439 \u043b\u0443\u0447 (\u0441\u043d\u043e\u0432\u0430 \u043f\u0435\u0440\u0435\u0447\u0435\u0441\u0435\u043d\u0438\u0435 \u0441 49 \u0441\u0444\u0435\u0440\u0430\u043c\u0438 \u0438 \u0442.\u0434.).<\/code><\/p>\n<p>\u0421\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u043f\u043e\u043d\u044f\u0442\u043d\u043e, \u0447\u0442\u043e \u0441\u0430\u043c\u043e\u0435 &#171;\u0433\u043e\u0440\u044f\u0447\u0435\u0435&#187; \u043c\u0435\u0441\u0442\u043e &#8212; \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0435\u0440\u0435\u0441\u0435\u0447\u0435\u043d\u0438\u044f \u043b\u0443\u0447\u0430 \u0441\u043e \u0441\u0444\u0435\u0440\u043e\u0439, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u0438\u043a\u0441\u0435\u043b\u044f \u043e\u043d\u043e \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u043c\u0438\u043d\u0438\u043c\u0443\u043c 64 * 49 = 3136 \u0440\u0430\u0437. \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u0434\u0435\u043b\u0430\u0435\u0442\u0441\u044f \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 tracer, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0442\u0430\u043a\u0436\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0435 \u0432 \u043f\u043e\u043b \u0438\u043b\u0438 \u043d\u0435\u0431\u043e, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f 0 \u0434\u043b\u044f \u043d\u0435\u0431\u0430, 1 \u0434\u043b\u044f \u043f\u043e\u043b\u0430, 2 \u0434\u043b\u044f \u0441\u0444\u0435\u0440\u044b. \u041d\u043e \u043f\u043e\u043b \u0438 \u043d\u0435\u0431\u043e \u043f\u043e\u0447\u0442\u0438 \u043d\u0435 \u0434\u0430\u044e\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438, \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0437\u0434\u0435\u0441\u044c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0444\u0435\u0440:<\/p>\n<pre><code class=\"cpp\">\/\/ \u0421\u0444\u0435\u0440\u044b \u0445\u0440\u0430\u043d\u044f\u0442\u0441\u044f \u043a\u0430\u043a 2D \u043c\u0430\u0441\u0441\u0438\u0432, \u0442\u043e\u0447\u043d\u0435\u0435, \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u043e\u0441\u0442\u0438 \u044d\u0442\u043e  \/\/ 1D \u043c\u0430\u0441\u0441\u0438\u0432 \u0431\u0438\u0442\u043e\u0432\u044b\u0445 \u043c\u0430\u0441\u043e\u043a, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443 \u043d\u0430\u0441 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0446\u0438\u043a\u043b - \u043f\u043e \u043c\u0430\u0441\u043a\u0430\u043c \u0438 \u043f\u043e \u0431\u0438\u0442\u0430\u043c  \/\/ \u0432 \u043c\u0430\u0441\u043a\u0435 for (int k = 19; k--;) for (int j = 9; j--;) if (G[j] &amp; 1 &lt;&lt; k) { \/\/ \u0431\u0438\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d - \u0435\u0441\u0442\u044c \u0441\u0444\u0435\u0440\u0430 \u0432 \u044d\u0442\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \/\/ \u0444\u043e\u0440\u043c\u0438\u0440\u0443\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440 \u0446\u0435\u043d\u0442\u0440\u0430 \u0441\u0444\u0435\u0440\u044b Vector p = o + Vector(-k, 0, -j - 4);  \/\/ \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u0435 \u043b\u0443\u0447\u0430 \u0432 \u0441\u0444\u0435\u0440\u0443 fltype b = p % d; fltype c = p % p - 1; fltype q = b * b - c; if (q > 0) { \/\/ \u043f\u043e\u043f\u0430\u043b\u0438  \/\/ \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u043b\u0443\u0447\u0430 (\u043e\u0442 \u043a\u0430\u043c\u0435\u0440\u044b \u0434\u043b\u044f \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u0433\u043e \u043b\u0443\u0447\u0430) \u0434\u043e \u0441\u0444\u0435\u0440\u044b fltype s = -b - sqrt(q); if (s &lt; t &amp;&amp; s > .01f) { \/\/ \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u043c \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0431\u043b\u0438\u0437\u043a\u0443\u044e \u0441\u0444\u0435\u0440\u0443 \u0438 \u0441\u0447\u0438\u0442\u0430\u0435\u043c \u0434\u043b\u044f \u043d\u0435\u0451 \u043d\u043e\u0440\u043c\u0430\u043b\u044c t = s; n = !(p + d * t); m = 2; } } }<\/code><\/pre>\n<p>\u041d\u0443\u0436\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0432\u0430\u0436\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u043e\u043f\u0430\u0434\u0430\u043d\u0438\u044f \u0434\u043e \u0443\u0441\u043b\u043e\u0432\u0438\u044f (q > 0), \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u0431\u044b\u0447\u043d\u043e \u043c\u044b \u041d\u0415 \u043f\u043e\u043f\u0430\u0434\u0430\u0435\u043c (\u043f\u0440\u043e\u0446\u0435\u043d\u0442\u043e\u0432 80 \u043b\u0443\u0447\u0435\u0439 \u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442 \u0432 \u0441\u0444\u0435\u0440\u044b, \u0430 \u0435\u0441\u043b\u0438 \u043f\u043e\u043f\u0430\u0434\u0430\u044e\u0442, \u0442\u043e \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0432 1 \u0438\u0437 49), \u0438 \u043a\u043e\u0434 \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043a\u0440\u0430\u0439\u043d\u0435 \u0440\u0435\u0434\u043a\u043e.<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435:<\/p>\n<pre><code class=\"cpp\">fltype b = p % d;  fltype c = p % p - 1;  fltype q = b * b - c;<\/code><\/pre>\n<p>\u0418\u0437 \u0442\u0440\u0451\u0445 \u0441\u0442\u0440\u043e\u043a \u0434\u0432\u0435 &#8212; \u044d\u0442\u043e \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f %, \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e dot product, \u0438\u043b\u0438 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 (\u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u0434\u0430\u0451\u0442 \u043a\u043e\u0441\u0438\u043d\u0443\u0441 \u0443\u0433\u043b\u0430 \u043c\u0435\u0436\u0434\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c\u0438 &#8212; \u0432\u043e\u043e\u0431\u0449\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0434\u043e\u0432\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0432 \u043a\u043e\u043c\u043f. \u0433\u0440\u0430\u0444\u0438\u043a\u0435). \u0421\u043c\u043e\u0442\u0440\u0438\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0438 \u0432\u0438\u0434\u0438\u043c:<\/p>\n<pre><code class=\"cpp\">fltype operator%(const Vector &amp;l, const Vector &amp;r) {      return l.x * r.x + l.y * r.y + l.z * r.z;  }<\/code><\/pre>\n<p>&#8230;\u0438 \u0432\u0438\u0434\u0438\u043c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0441 <strong>\u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430\u043c\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u0430<\/strong>. \u0412\u043e\u0442 \u0438 \u043e\u0442\u0432\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 &#171;\u043f\u043e\u0447\u0435\u043c\u0443 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0443\u0441\u043a\u043e\u0440\u044f\u0435\u0442\u0441\u044f&#187;: \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043c\u044b \u043f\u043e\u043c\u0435\u0449\u0430\u0435\u043c \u0432\u0435\u043a\u0442\u043e\u0440 \u0432 SIMD-\u0440\u0435\u0433\u0438\u0441\u0442\u0440, \u0430 \u043f\u043e\u0442\u043e\u043c \u0437\u0430\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432\u044b\u043a\u043e\u0432\u044b\u0440\u0438\u0432\u0430\u0442\u044c \u0438\u0437 \u043d\u0435\u0433\u043e [x,y,z] \u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u043d\u0438\u043c\u0438 \u043f\u043e \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0432\u043c\u0435\u0441\u0442\u043e \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u044b\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434.<\/p>\n<p>\u0414\u0430, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0447\u0442\u043e\u0431\u044b \u043f\u043e \u043a\u0440\u0430\u0439\u043d\u0435\u0439 \u043c\u0435\u0440\u0435 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0431\u044b\u043b\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u043c:<\/p>\n<pre><code class=\"cpp\">inline fltype dot(const Vector &amp;l, const Vector &amp;r) {     Vector v = l * r;     return v.x + v.y + v.z;  }<\/code><\/pre>\n<p>\u041d\u043e \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u0442\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442? \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0447\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0434\u043b\u044f \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0435\u0439\u0442\u0440\u0435\u0439\u0441\u0435\u0440\u0430 \u0438 \u0434\u043b\u044f \u0432\u0435\u0440\u0441\u0438\u0438 \u043d\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\u0445.<br \/><a href=\"https:\/\/gcc.godbolt.org\/z\/47W4zfTq7\" rel=\"noopener noreferrer nofollow\">https:\/\/gcc.godbolt.org\/z\/47W4zfTq7<\/a><br \/><a href=\"https:\/\/gcc.godbolt.org\/z\/hPGKT8x3f\" rel=\"noopener noreferrer nofollow\">https:\/\/gcc.godbolt.org\/z\/hPGKT8x3f<\/a><\/p>\n<p>\u041e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f, \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u0435 \u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0443 \u043d\u0435 \u043d\u0443\u0436\u043d\u044b, \u043e\u043d \u0438 \u0442\u0430\u043a \u0432 \u043e\u0431\u043e\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u0442 \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 &#8212; \u0432\u0438\u0434\u0438\u043c \u0434\u0432\u0435 \u043a\u043e\u043c\u0430\u043d\u0434\u044b vmul<strong>p<\/strong>s (\u0434\u0430\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u043f\u043b\u043e\u0445\u043e \u0437\u043d\u0430\u0435\u0442\u0435 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440, \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435 SIMD-\u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043b\u0435\u0433\u043a\u043e \u043e\u0442\u043b\u0438\u0447\u0438\u0442\u044c \u043e\u0442 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0445 \u043f\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u0431\u0443\u043a\u0432\u0435: <strong>p<\/strong> &#8212; parallel, <strong>s<\/strong> &#8212; scalar. \u0421\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u044f, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0447\u0442\u043e \u0447\u0435\u043c \u0431\u043e\u043b\u044c\u0448\u0435 &#171;\u043f\u044d&#187; \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043b \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440, \u0442\u0435\u043c \u043b\u0443\u0447\u0448\u0435 :)).<\/p>\n<p>\u041d\u043e \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u0447\u0430\u0449\u0435 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u044b FMA, \u0443\u043c\u043d\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0441\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u0434\u043d\u043e\u0439 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0435\u0439 (\u0432\u043e\u0442 \u044d\u0442\u0438 \u0437\u0443\u0431\u043e\u0434\u0440\u043e\u0431\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0432\u0443\u0447\u0430\u0449\u0438\u0435 vfmadd231ss &#8212; 3 \u0432\u043c\u0435\u0441\u0442\u043e 1), \u0438 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0438\u043c\u0435\u0435\u043c 14 \u043a\u043e\u043c\u0430\u043d\u0434 \u0432\u043c\u0435\u0441\u0442\u043e 17.<\/p>\n<p>\u0414\u0430, \u044f \u0437\u043d\u0430\u044e \u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u0435 \u0434\u043b\u044f \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u0432 (v)dpps, \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u0438\u043d\u0442\u0440\u0438\u043d\u0441\u0438\u043a, \u0438 \u0432\u0440\u043e\u0434\u0435 \u0431\u044b \u0432\u0441\u0451 \u043a\u0440\u0430\u0441\u0438\u0432\u043e, <a href=\"https:\/\/gcc.godbolt.org\/z\/ThnK1eqee\" rel=\"noopener noreferrer nofollow\">6 \u043a\u043e\u043c\u0430\u043d\u0434<\/a> \u0432\u043c\u0435\u0441\u0442\u043e 14\/17&#8230; \u043d\u043e \u043f\u043e \u0444\u0430\u043a\u0442\u0443 \u0442\u0430\u043a \u0435\u0449\u0451 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435! 6.70 \u0432\u043c\u0435\u0441\u0442\u043e 4.55\/5.08 \u0441. \u041e\u0431\u044a\u044f\u0441\u043d\u0438\u0442\u044c \u044d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u043d\u0435\u0432\u044b\u0441\u043e\u043a\u043e\u0439 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c\u044e dpps, \u043c\u043d\u0435 \u043f\u043e\u043f\u0430\u0434\u0430\u043b\u0438\u0441\u044c <a href=\"https:\/\/blog.lexa.ru\/2011\/09\/11\/o_vektornom_umnozhenii_final.html\" rel=\"noopener noreferrer nofollow\">\u0443\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u044f<\/a>, \u0447\u0442\u043e \u0434\u0430\u0436\u0435 \u0440\u0430\u0441\u043f\u0438\u0441\u0430\u043d\u043d\u0430\u044f \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043d\u0430 SSE2 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u041f\u0440\u0438\u0447\u0451\u043c \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0430 SSE4-AVX, a \u0441 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435\u043c FMA (Haswell) dpps \u0432\u0438\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435.<\/p>\n<p>\u041d\u043e \u043d\u0430\u043f\u043e\u043c\u043d\u044e, \u0447\u0442\u043e FMA \u0443 \u043d\u0430\u0441 \u0441\u0435\u0439\u0447\u0430\u0441 &#171;s&#187;, \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0435, \u0447\u0442\u043e \u0434\u0430\u043b\u0435\u043a\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u0435\u043b \u043c\u0435\u0447\u0442\u0430\u043d\u0438\u0439. \u0418 \u0432 \u0446\u0435\u043b\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043a\u043e\u043d\u0441\u0442\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0447\u0442\u043e \u043f\u043e\u043f\u044b\u0442\u043a\u0430 \u043d\u0430\u0438\u0432\u043d\u043e\u0439 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0432\u0430\u043b\u0438\u043b\u0430\u0441\u044c, \u043d\u0443\u0436\u043d\u044b \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f.<\/p>\n<h2>2. \u0412\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u043f\u044b\u0442\u043a\u0430. \u0410\u0432\u0442\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f<\/h2>\n<p>\u0418\u0434\u0435\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432\u0435\u0441\u044c\u043c\u0430 \u043f\u0440\u043e\u0441\u0442\u0430 &#8212; \u0435\u0441\u043b\u0438 \u043f\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0432\u0435\u043a\u0442\u043e\u0440\u0443 [x,y,z]) \u043a\u043e\u0434 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u043b\u043e\u0445\u043e, \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u043b\u0443\u0447\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0434\u0432\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u043d\u0430 \u0446\u0438\u043a\u043b, \u0442\u043e \u043d\u0430\u0434\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0434\u0440\u0443\u0433\u043e\u043c \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438, \u043c\u043e\u0436\u043d\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043f\u0435\u0440\u043f\u0435\u043d\u0434\u0438\u043a\u0443\u043b\u044f\u0440\u043d\u043e\u043c: \u043f\u043e \u043c\u0430\u0441\u0441\u0438\u0432\u0443 \u0438\u0437 49 \u0441\u0444\u0435\u0440.<\/p>\n<p>\u041a\u0430\u0436\u0435\u0442\u0441\u044f \u043b\u043e\u0433\u0438\u0447\u043d\u044b\u043c \u0437\u0430\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u043e\u043d\u0430 \u043b\u0443\u0447\u0448\u0435 \u0432\u0441\u0435\u0433\u043e \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0438\u043c\u0435\u043d\u043d\u043e \u0432 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0438 &#171;\u043f\u043e \u0446\u0438\u043a\u043b\u0443&#187;. \u041a\u0430\u043a \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442: \u0432\u044b \u043f\u0438\u0448\u0435\u0442\u0435 \u0446\u0438\u043a\u043b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0435 \u043e\u0434\u0438\u043d \u044d\u043b\u0435\u043c\u0435\u043d\u0442 \u0434\u0430\u043d\u043d\u044b\u0445, \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u0442 \u0435\u0433\u043e \u043d\u0430 \u043f\u0440\u0435\u0434\u043c\u0435\u0442 &#171;\u0430 \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u0441\u0440\u0430\u0437\u0443 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e&#187;, \u0438 \u0435\u0441\u043b\u0438 \u0434\u0430, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0434\u0432\u0430 \u0446\u0438\u043a\u043b\u0430 &#8212; \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0439, \u0441\u0447\u0438\u0442\u0430\u044e\u0449\u0438\u0439 \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u0441\u0440\u0430\u0437\u0443, \u0438 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 \u0434\u043b\u044f &#171;\u0445\u0432\u043e\u0441\u0442\u0430&#187; \u043f\u0440\u0438 \u043a\u043e\u043b-\u0432\u0435 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432 \u043d\u0435 \u043a\u0440\u0430\u0442\u043d\u043e\u043c \u0448\u0430\u0433\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0442\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430, \u043d\u0435 \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0442\u044c \u0447\u0443\u0442\u044c \u043b\u0438 \u043d\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 <a href=\"https:\/\/github.com\/dotnet\/machinelearning\/blob\/287bc3e9b84f640e9b75e7b288c2663a536a9863\/src\/Microsoft.ML.CpuMath\/AvxIntrinsics.cs#L988-L1095\" rel=\"noopener noreferrer nofollow\">API \u0434\u043b\u044f SIMD<\/a> (\u0438\u0437 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0435\u0432 \u043a <a href=\"https:\/\/habr.com\/post\/435840\/\" rel=\"noopener noreferrer nofollow\">\u0441\u0442\u0430\u0442\u044c\u0435<\/a> \u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432 Net).<\/p>\n<p>\u041f\u0443\u0441\u0442\u044c \u043b\u0443\u0447\u0448\u0435 \u0438\u0437\u043e\u0431\u0440\u0435\u0442\u0430\u0435\u0442 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440 \u0432 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435: 5 \u0441\u0442\u0440\u043e\u0447\u0435\u043a \u043d\u0430 \u0421\u0438, \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0435 1 \u0431\u0430\u0439\u0442 \u0437\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e, \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f&#8230; <a href=\"https:\/\/gcc.godbolt.org\/z\/43abvW954\" rel=\"noopener noreferrer nofollow\">\u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u044e\u0442\u0441\u044f<\/a>&#8230; \u0432 125 \u0441\u0442\u0440\u043e\u043a \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0430 \u0438 256 \u0431\u0430\u0439\u0442 \u0437\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e!<\/p>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a \u043c\u043d\u043e\u0433\u043e? \u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e &#171;\u0448\u0438\u0440\u043e\u043a\u0430\u044f&#187; \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043a\u043e\u043c\u0430\u043d\u0434 AVX2 (-march=haswell \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 AVX2+FMA), \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u043e 32 \u0431\u0430\u0439\u0442\u0430. \u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u043d\u0430\u0448 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043a\u043e\u0434 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u0432\u043e\u0431\u043e\u0434\u043d\u044b\u043c\u0438 \u043c\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u0432, \u0438 \u044d\u0442\u043e \u043f\u0440\u043e\u0432\u043e\u0446\u0438\u0440\u0443\u0435\u0442 Clang \u0432 \u0434\u043e\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043a SIMD \u0435\u0449\u0451 \u043a\u0430\u043a \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0446\u0438\u043a\u043b &#8212; \u043d\u0430 4 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u043a\u043e\u043c\u0430\u043d\u0434 (\u0432\u0438\u0434\u043d\u043e, \u0447\u0442\u043e \u043a\u043e\u043c\u0430\u043d\u0434\u044b \u0432 \u0430\u0441\u0441\u0435\u043c\u0431\u043b\u0435\u0440\u0435 \u0438\u0434\u0443\u0442 \u0447\u0435\u0442\u0432\u0451\u0440\u043a\u0430\u043c\u0438) \u0438 \u043d\u0430 2 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0446\u0438\u043a\u043b\u0430. \u0422\u0430\u043a \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f 32 * 4 * 2 = 256.<\/p>\n<p>\u042d\u0442\u043e\u0442 \u043f\u0440\u0438\u043c\u0435\u0440 \u0438\u0434\u0435\u0430\u043b\u0435\u043d \u0434\u043b\u044f \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0442\u043e\u0440\u0430: \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0446\u0438\u043a\u043b, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0447\u0442\u0435\u043d\u0438\u0435, \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435, \u0437\u0430\u043f\u0438\u0441\u044c, \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430.<\/p>\n<p>\u041e\u0434\u043d\u0430\u043a\u043e \u0432 \u0436\u0438\u0437\u043d\u0438 \u043f\u043e\u0434\u043e\u0431\u043d\u043e\u0435 \u0441\u0447\u0430\u0441\u0442\u044c\u0435 \u0431\u044b\u0432\u0430\u0435\u0442 \u0440\u0435\u0434\u043a\u043e. \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u043a \u043d\u0430\u0448\u0435\u043c\u0443 \u0440\u0435\u0439\u0442\u0440\u0435\u0439\u0441\u0435\u0440\u0443, \u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u043c \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0446\u0438\u043a\u043b \u0438 \u0434\u0440\u0443\u0436\u043d\u043e \u043e\u0433\u043e\u0440\u0447\u0430\u0435\u043c\u0441\u044f: \u0434\u0432\u043e\u0439\u043d\u043e\u0439, \u0434\u0430 \u0435\u0449\u0451 \u0438 \u0441 \u0443\u0441\u043b\u043e\u0432\u0438\u0435\u043c.<\/p>\n<pre><code class=\"cpp\">for (int k = 19; k--;) \/\/ 19 \u0438\u0442\u0435\u0440. for (int j = 9; j--;) \/\/ 9 \u0438\u0442\u0435\u0440. if (G[j] &amp; 1 &lt;&lt; k) { ... }<\/code><\/pre>\n<p>\u041d\u0443 \u043b\u0430\u0434\u043d\u043e, \u0434\u0432\u043e\u0439\u043d\u043e\u0439 &#8212; \u043d\u0435 \u0433\u043b\u0430\u0432\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430, \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0446\u0438\u043a\u043b\u044b \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442, \u0447\u0442\u043e\u0431\u044b \u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u043c (\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u043c\u044b\u043c) \u0431\u044b\u043b \u0434\u043b\u0438\u043d\u043d\u044b\u0439, \u043d\u0430 19 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439. \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f 19 \/ 8 (AVX) = 2.375 (3) * 9 = 27 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439, \u0432\u043c\u0435\u0441\u0442\u043e 19 * 9 \/ 8 = 22 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 \u0441 \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u044b\u043c \u0446\u0438\u043a\u043b\u043e\u043c &#8212; \u043d\u0435 \u0442\u0430\u043a\u0430\u044f \u0431\u043e\u043b\u044c\u0448\u0430\u044f \u0440\u0430\u0437\u043d\u0438\u0446\u0430.<\/p>\n<p>\u041d\u043e \u043e\u0441\u0442\u0430\u0451\u0442\u0441\u044f \u0435\u0449\u0451 \u0443\u0441\u043b\u043e\u0432\u0438\u0435. \u041d\u0430\u0434\u043e \u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u0432 SIMD \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0443\u0441\u043b\u043e\u0432\u0438\u0439. \u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u0434\u0430\u044e\u0442 \u0447\u0438\u0441\u043b\u043e\u0432\u0443\u044e \u043c\u0430\u0441\u043a\u0443, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 true = $FF, false = $00, \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430:<\/p>\n<ol>\n<li>\n<p>\u041f\u043e\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043e\u0431\u0435 \u0432\u0435\u0442\u043a\u0438 if () else (), \u0430 \u043f\u043e\u0442\u043e\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u0430\u0441\u043a\u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0434\u0432\u0443\u0445 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432: dst = (res1 &amp; mask) | (res2 &amp; !mask) &#8212; \u0438\u043c\u0435\u043d\u043d\u043e \u0442\u0430\u043a \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 ReplaceChr \u0432\u044b\u0448\u0435. \u0415\u0441\u043b\u0438 \u0432\u0435\u0442\u043a\u0430 \u043e\u0434\u043d\u0430, \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u0442\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043d\u0435\u043d\u0443\u0436\u043d\u043e\u0435, \u0432\u043c\u0435\u0441\u0442\u043e res2 \u0431\u0443\u0434\u0435\u0442 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0437\u0430\u0432\u0435\u0434\u043e\u043c\u043e \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442. \u0412 \u0440\u0435\u0439\u0442\u0440\u0435\u0439\u0441\u0435\u0440\u0435 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u0431\u0438\u0442\u043e\u0432\u0430\u044f \u043c\u0430\u0441\u043a\u0430, \u0437\u0430\u0434\u0430\u044e\u0449\u0430\u044f \u0431\u0443\u043a\u0432\u044b: <\/p>\n<figure class=\"\"><figcaption><\/figcaption><\/figure>\n<p>\u043d\u043e \u043c\u044b \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 0 \u0438\u043b\u0438 1 &#8212; \u0437\u043d\u0430\u0447\u0438\u0442 \u043d\u0430 \u044d\u0442\u0430\u043f\u0435 \u0440\u0430\u0441\u0447\u0451\u0442\u043e\u0432 \u0441\u0447\u0438\u0442\u0430\u0435\u043c, \u0447\u0442\u043e \u0442\u0430\u043c \u0441\u043f\u043b\u043e\u0448\u044c 1, \u0430 \u0443\u0436\u0435 \u0438\u0437 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u0432\u044b\u0431\u0435\u0440\u0435\u043c \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435. \u042d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u0433\u043e\u0434\u043d\u043e, \u0435\u0441\u043b\u0438 \u043e\u0442\u0431\u0440\u0430\u0441\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u043f\u0440\u043e\u0446\u0435\u043d\u0442 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043d\u043e \u0443 \u043d\u0430\u0441 \u043d\u043e\u043b\u0438\u043a\u043e\u0432 \u0432 \u043c\u0430\u0441\u043a\u0435 \u044f\u0432\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435. \u041c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043a\u0438\u043d\u0443\u0442\u044c \u0442\u0430\u043a: \u0432 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u0434\u0435 19*9=171 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f, \u043d\u043e \u0438\u0437 \u043d\u0438\u0445 \u0442\u043e\u043b\u044c\u043a\u043e 49 \u043f\u043e\u043b\u043d\u043e\u0432\u0435\u0441\u043d\u044b\u0445, \u0442.\u043a. \u0432\u0441\u0435\u0433\u043e 49 \u0441\u0444\u0435\u0440. \u0412\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0439 \u0446\u0438\u043a\u043b \u0434\u0430\u0441\u0442 \u043c\u0435\u043d\u044c\u0448\u0435 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439 &#8212; 27 \u0432\u043c\u0435\u0441\u0442\u043e 49 &#8212; \u043d\u043e \u044d\u0442\u043e \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 <strong>\u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c<\/strong> \u0432 1.8 \u0440\u0430\u0437\u0430, <\/p>\n<\/li>\n<\/ol>\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-380959","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/380959","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=380959"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/380959\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=380959"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=380959"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=380959"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}