{"id":487447,"date":"2026-07-15T19:20:36","date_gmt":"2026-07-15T19:20:36","guid":{"rendered":"https:\/\/savepearlharbor.com\/?p=487447"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=487447","title":{"rendered":"\u0411\u0435\u043d\u0447\u043c\u0430\u0440\u043a\u0430\u044f \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435: \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0435 \u0446\u0438\u043a\u043b\u044b \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u044e\u0442 \u043e\u0442 \u00d714 \u0434\u043e \u00d7154"},"content":{"rendered":"<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u0423\u0432\u0430\u0436\u0430\u0435\u043c\u044b\u0435 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0438, \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u0432\u044b\u0432\u043e\u0434\u044b. \u041d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438: \u0441\u0440\u0430\u0432\u043d\u0438\u043b \u043f\u043e\u0438\u0441\u043a \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0446\u0438\u043a\u043b\u043e\u043c \u0441\u043e string.IndexOf \u2014 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u0432 \u0440\u0430\u0437\u044b. \u0417\u0430\u043e\u0434\u043d\u043e \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439 Xeon \u0441 AVX-512 \u0432 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0430 \u0441 AVX2. \u041d\u0438\u0436\u0435 \u0440\u0430\u0437\u0431\u043e\u0440 \u043e\u0431\u043e\u0438\u0445 \u0444\u0430\u043a\u0442\u043e\u0432 \u0441 \u0434\u0438\u0437\u0430\u0441\u043c\u043e\u043c \u0438 \u0437\u0430\u043c\u0435\u0440\u0430\u043c\u0438.<\/p>\n<p>\u0411\u0443\u0434\u0435\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u0438, \u0438 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u2014 \u0432\u043e\u043f\u0440\u043e\u0441, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0438\u0441\u043a\u0430\u043b \u043e\u0442\u0432\u0435\u0442:<\/p>\n<ul>\n<li>\n<p>\u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0439 for \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 string.IndexOf \u2014 \u0438 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0440\u0430\u0437\u0440\u044b\u0432 \u0441 \u0434\u043b\u0438\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438?<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 AVX-512 \u2014 \u0441\u0430\u043c\u044b\u043c\u0438 \u0448\u0438\u0440\u043e\u043a\u0438\u043c\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u043c\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u2014 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0432 \u0434\u0432\u0430 \u0441 \u043b\u0438\u0448\u043d\u0438\u043c \u0440\u0430\u0437\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0430 \u0441 AVX2?<\/p>\n<\/li>\n<li>\n<p>\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0434\u043e\u0433\u043d\u0430\u0442\u044c BCL, \u0435\u0441\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440 \u0441\u0430\u043c\u043e\u043c\u0443 \u0447\u0435\u0440\u0435\u0437 intrinsics? \u042f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438 \u2014 \u043e\u0434\u0438\u043d \u0434\u0430\u043b \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u0435 \u0432 10 \u0440\u0430\u0437.<\/p>\n<\/li>\n<li>\n<p>\u0418 \u0447\u0442\u043e \u0441\u043e \u0432\u0441\u0435\u043c \u044d\u0442\u0438\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435: \u043a\u0430\u043a\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0431\u0440\u0430\u0442\u044c \u0438 \u043a\u0430\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412\u0441\u0451 \u043d\u0430 BenchmarkDotNet v0.15.8, \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u043d\u044f\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 DOTNET_JitDisasm, \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u043d\u0430 \u0433\u0438\u0442\u0435 \u2014 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c. <\/p>\n<p>\u041c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 \u0437\u0430\u043c\u0435\u0440\u043e\u0432: \u0442\u0435\u0441\u0442\u044b \u0433\u043e\u043d\u044f\u043b\u0438\u0441\u044c \u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u0435 (\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0431\u0443\u043a\u0432\u044b \u0438 \u043f\u0440\u043e\u0431\u0435\u043b\u044b, \u0430 \u043d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u2014 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 \u0438\u0437 \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432 \u0446\u0438\u0444\u0440\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0437\u0430\u043d\u0438\u0436\u0435\u043d\u043d\u044b\u043c\u0438), \u0432 \u0434\u0432\u0443\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445 (\u0438\u0441\u043a\u043e\u043c\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0435\u0441\u0442\u044c \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \/ \u0435\u0433\u043e \u043d\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435) \u0438 \u043d\u0430 \u0442\u0440\u0451\u0445 \u0434\u043b\u0438\u043d\u0430\u0445 (32, 512, 65536).<\/p>\n<p>\u0422\u0435\u0441\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<p>\u0427\u0435\u0442\u044b\u0440\u0435 \u043c\u0430\u0448\u0438\u043d\u044b:<\/p>\n<div>\n<div class=\"table\">\n<table>\n<tbody>\n<tr>\n<td>\n<p align=\"left\"><strong>\u041c\u0430\u0448\u0438\u043d\u0430<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>CPU<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u041e\u0421<\/strong><\/p>\n<\/td>\n<td>\n<p align=\"left\"><strong>\u0412\u0435\u043a\u0442\u043e\u0440\u044b<\/strong><\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u21161<\/p>\n<\/td>\n<td>\n<p align=\"left\">AMD Ryzen 9 5950X, 16 \u044f\u0434\u0435\u0440<\/p>\n<\/td>\n<td>\n<p align=\"left\">Windows 10<\/p>\n<\/td>\n<td>\n<p align=\"left\">AVX2 (ymm, 32 \u0411)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u21162<\/p>\n<\/td>\n<td>\n<p align=\"left\">Intel Core i9-10900KF, 10 \u044f\u0434\u0435\u0440<\/p>\n<\/td>\n<td>\n<p align=\"left\">Windows 10<\/p>\n<\/td>\n<td>\n<p align=\"left\">AVX2 (ymm, 32 \u0411)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u21163<\/p>\n<\/td>\n<td>\n<p align=\"left\">2 x Intel Xeon Silver 4314, 32 \u044f\u0434\u0440\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">Windows Server 2022<\/p>\n<\/td>\n<td>\n<p align=\"left\">AVX-512 (zmm, 64 \u0411)<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td>\n<p align=\"left\">\u21164<\/p>\n<\/td>\n<td>\n<p align=\"left\">2 x Intel Xeon Silver 4314, 32 \u044f\u0434\u0440\u0430<\/p>\n<\/td>\n<td>\n<p align=\"left\">Windows Server 2022<\/p>\n<\/td>\n<td>\n<p align=\"left\">AVX-512 (zmm, 64 \u0411)<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<\/div>\n<h2>\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043e\u0440\u0438\u0438: \u043f\u043e\u0447\u0435\u043c\u0443 \u0446\u0438\u043a\u043b \u2014 \u044d\u0442\u043e \u0441\u043a\u0430\u043b\u044f\u0440<\/h2>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0443\u043c\u0435\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u043e\u0434\u0438\u043d \u0441\u0438\u043c\u0432\u043e\u043b \u0437\u0430 \u0442\u0430\u043a\u0442, \u0430 \u0441\u0440\u0430\u0437\u0443 \u0432\u0435\u043a\u0442\u043e\u0440 \u2014 16, 32 \u0438\u043b\u0438 64 \u0431\u0430\u0439\u0442\u0430 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 (SSE, AVX2, AVX-512). \u0417\u0430 \u0441\u0447\u0451\u0442 \u044d\u0442\u043e\u0433\u043e \u0438 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 BCL.<\/p>\n<p>\u0412\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0435\u0433\u043e JIT <em>\u043d\u0435<\/em> \u0434\u0435\u043b\u0430\u0435\u0442. RyuJIT <strong>\u043d\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u0446\u0438\u043a\u043b<\/strong>. \u041a\u043e\u0435-\u0447\u0442\u043e \u043e\u043d \u0443\u043c\u0435\u0435\u0442: \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0446\u0438\u043a\u043b, \u0441\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 Vector&lt;T&gt;, \u0432 .NET 9 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0438\u043d\u0434\u0443\u043a\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u041d\u043e \u0432\u0437\u044f\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 for \u0441\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0438 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u0432 SIMD-\u043f\u043e\u0438\u0441\u043a \u043e\u043d \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u2014 \u043e\u0431\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0430\u0432\u0442\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u0432 \u0442\u0440\u0435\u043a\u0435\u0440\u0435 <a href=\"https:\/\/github.com\/dotnet\/runtime\/issues\/12466\" rel=\"noopener noreferrer nofollow\">dotnet\/runtime #12466<\/a> \u043e\u0442\u043a\u0440\u044b\u0442 \u0441 2019 \u0433\u043e\u0434\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 SIMD-\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0441\u0442\u0440\u043e\u043a \u043b\u0435\u0436\u0438\u0442 \u043d\u0435 \u0432 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0435, \u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 BCL \u2014 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0442\u0430\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0432\u0440\u0443\u0447\u043d\u0443\u044e.<\/p>\n<h2>\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043f\u0435\u0440\u0432\u0430\u044f: \u0446\u0438\u043a\u043b \u043f\u0440\u043e\u0442\u0438\u0432 BCL<\/h2>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u2014 \u043d\u0430\u0439\u0442\u0438 \u0441\u0438\u043c\u0432\u043e\u043b \u0432 \u0441\u0442\u0440\u043e\u043a\u0435. \u041f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2014 \u0446\u0438\u043a\u043b, \u0432\u0442\u043e\u0440\u043e\u0439 \u2014 string.IndexOf:<\/p>\n<pre><code class=\"cs\">static int IndexOfCharManual(string s, char c){    for (int i = 0; i &lt; s.Length; i++)    {        if (s[i] == c)        {            return i;        }    }    return -1;}s.IndexOf(c);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:87px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0421\u043d\u0438\u043c\u0430\u0435\u043c \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0446\u0438\u043a\u043b\u0430 \u2014 \u0447\u0438\u0441\u0442\u044b\u0439 \u0441\u043a\u0430\u043b\u044f\u0440, \u043e\u0434\u0438\u043d \u0441\u0438\u043c\u0432\u043e\u043b \u0437\u0430 \u043f\u0440\u043e\u0445\u043e\u0434, \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430:<\/p>\n<pre><code class=\"assembly\">; IndexOfCharManual, .NET 10 \u2014 \u0442\u0435\u043b\u043e \u0446\u0438\u043a\u043b\u0430movzx    r10, word ptr [rcx+2*r8+0x0C]   ; \u0431\u0435\u0440\u0451\u043c \u041e\u0414\u0418\u041d \u0441\u0438\u043c\u0432\u043e\u043bcmp      r10d, edxje       SHORT FOUNDinc      r8dcmp      eax, r8djg       SHORT LOOP<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0410 \u0432\u043d\u0443\u0442\u0440\u0438 IndexOf \u2014 \u0432\u0435\u043a\u0442\u043e\u0440. \u041d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435 \u044d\u0442\u043e ymm (16 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0437\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e), \u043d\u0430 Xeon \u2014 zmm (32 \u0441\u0438\u043c\u0432\u043e\u043b\u0430):<\/p>\n<pre><code class=\"assembly\">; IndexOf \u0432 BCL, \u0434\u0435\u0441\u043a\u0442\u043e\u043fvpbroadcastw ymm0, ymm0     ; \u0440\u0430\u0437\u043c\u043d\u043e\u0436\u0438\u043b\u0438 \u0438\u0441\u043a\u043e\u043c\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u043f\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 ; IndexOf \u0432 BCL, Xeonvpbroadcastw zmm0, eax      ; \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0432\u0434\u0432\u043e\u0435 \u0448\u0438\u0440\u0435<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0417\u0430\u043c\u0435\u0440 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 64 \u041a\u0411 \u0432 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 Miss \u2014 \u0438\u0441\u043a\u043e\u043c\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u043d\u0435\u0442, \u043e\u0431\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u044e\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0446\u0435\u043b\u0438\u043a\u043e\u043c:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/899\/933\/d9f\/899933d9f817ead3bae641e041f940ec.png\" alt=\"\u0420\u0438\u0441. 1. \u0421\u0432\u043e\u0439 \u0446\u0438\u043a\u043b \u043f\u0440\u043e\u0442\u0438\u0432 IndexOf \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 64 \u041a\u0411: \u0440\u0430\u0437\u0440\u044b\u0432 \u0432 \u0440\u0430\u0437\u044b\" title=\"\u0420\u0438\u0441. 1. \u0421\u0432\u043e\u0439 \u0446\u0438\u043a\u043b \u043f\u0440\u043e\u0442\u0438\u0432 IndexOf \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 64 \u041a\u0411: \u0440\u0430\u0437\u0440\u044b\u0432 \u0432 \u0440\u0430\u0437\u044b\" width=\"1264\" height=\"364\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/899\/933\/d9f\/899933d9f817ead3bae641e041f940ec.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/899\/933\/d9f\/899933d9f817ead3bae641e041f940ec.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><em>\u0420\u0438\u0441. 1. \u0421\u0432\u043e\u0439 \u0446\u0438\u043a\u043b \u043f\u0440\u043e\u0442\u0438\u0432 IndexOf \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 64 \u041a\u0411: \u0440\u0430\u0437\u0440\u044b\u0432 \u0432 \u0440\u0430\u0437\u044b<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u0420\u0430\u0437\u0440\u044b\u0432 \u2014 \u043e\u0442 8 \u0434\u043e 14 \u0440\u0430\u0437 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043c\u0430\u0448\u0438\u043d\u044b. \u041a \u0442\u0430\u043a\u043e\u043c\u0443 \u0437\u0430\u043c\u0435\u0440\u0443 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u0432\u043e\u0437\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0440\u0430\u0437\u0431\u0435\u0440\u0443 \u043e\u0431\u0430.<\/p>\n<h4>\u0410 \u0435\u0441\u043b\u0438 \u0441\u0438\u043c\u0432\u043e\u043b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u043e?<\/h4>\n<p>\u041f\u0435\u0440\u0432\u043e\u0435 \u0432\u043e\u0437\u0440\u0430\u0436\u0435\u043d\u0438\u0435: \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0441\u0438\u043c\u0432\u043e\u043b \u043e\u0431\u044b\u0447\u043d\u043e \u0435\u0441\u0442\u044c, \u0438 \u0446\u0438\u043a\u043b \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0438\u0437 \u043f\u043e\u0438\u0441\u043a\u0430 \u0440\u0430\u043d\u044c\u0448\u0435. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u2014 \u0441\u0442\u0430\u0432\u0438\u043c \u0441\u0438\u043c\u0432\u043e\u043b \u0440\u043e\u0432\u043d\u043e \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0443 (\u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 Hit):<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ef3\/6b3\/acd\/ef36b3acd53c21b2b7a2c35fbccfe27b.png\" alt=\"\u0420\u0438\u0441. 2. \u0420\u0430\u043d\u043d\u0438\u0439 \u0432\u044b\u0445\u043e\u0434 \u043d\u0435 \u0441\u043f\u0430\u0441\u0430\u0435\u0442: \u0434\u0430\u0436\u0435 \u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 BCL \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 13 \u0440\u0430\u0437\" title=\"\u0420\u0438\u0441. 2. \u0420\u0430\u043d\u043d\u0438\u0439 \u0432\u044b\u0445\u043e\u0434 \u043d\u0435 \u0441\u043f\u0430\u0441\u0430\u0435\u0442: \u0434\u0430\u0436\u0435 \u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 BCL \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 13 \u0440\u0430\u0437\" width=\"1176\" height=\"672\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/ef3\/6b3\/acd\/ef36b3acd53c21b2b7a2c35fbccfe27b.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ef3\/6b3\/acd\/ef36b3acd53c21b2b7a2c35fbccfe27b.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><em>\u0420\u0438\u0441. 2. \u0420\u0430\u043d\u043d\u0438\u0439 \u0432\u044b\u0445\u043e\u0434 \u043d\u0435 \u0441\u043f\u0430\u0441\u0430\u0435\u0442: \u0434\u0430\u0436\u0435 \u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 BCL \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 13 \u0440\u0430\u0437<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u0420\u0430\u043d\u043d\u0438\u0439 \u0432\u044b\u0445\u043e\u0434 \u043d\u0435 \u0441\u043f\u0430\u0441\u0430\u0435\u0442: \u0434\u0430\u0436\u0435 \u043a\u043e\u0433\u0434\u0430 \u0441\u0438\u043c\u0432\u043e\u043b \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435, BCL \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 13 \u0440\u0430\u0437. \u0412\u0435\u043a\u0442\u043e\u0440 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0442\u0435 \u0436\u0435 \u043f\u043e\u043b\u0441\u0442\u0440\u043e\u043a\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0447\u043a\u0430\u043c\u0438 \u043f\u043e 16-32 \u0441\u0438\u043c\u0432\u043e\u043b\u0430, \u0430 \u0446\u0438\u043a\u043b \u2014 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443.<\/p>\n<h4>\u0410 \u043d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445?<\/h4>\n<p>\u0412\u0442\u043e\u0440\u043e\u0435 \u0432\u043e\u0437\u0440\u0430\u0436\u0435\u043d\u0438\u0435: \u043d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 (\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0434\u043b\u0438\u043d\u044b, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0445\u0432\u043e\u0441\u0442\u0430) \u043c\u043e\u0433\u0443\u0442 \u0441\u044a\u0435\u0441\u0442\u044c \u0432\u044b\u0438\u0433\u0440\u044b\u0448. \u0420\u0430\u0437\u0440\u044b\u0432 \u043f\u043e \u0434\u043b\u0438\u043d\u0430\u043c:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7a0\/c20\/9cf\/7a0c209cf5bfc75364751679c3a8114e.png\" alt=\"\u0420\u0438\u0441. 3. \u0420\u0430\u0437\u0440\u044b\u0432 \u00d75 \u043d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u0438 \u00d714\u201315 \u043d\u0430 \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u2014 BCL \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0434\u043b\u0438\u043d\u0435 (\u043b\u043e\u0433-\u0448\u043a\u0430\u043b\u0430)\" title=\"\u0420\u0438\u0441. 3. \u0420\u0430\u0437\u0440\u044b\u0432 \u00d75 \u043d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u0438 \u00d714\u201315 \u043d\u0430 \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u2014 BCL \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0434\u043b\u0438\u043d\u0435 (\u043b\u043e\u0433-\u0448\u043a\u0430\u043b\u0430)\" width=\"1168\" height=\"672\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/7a0\/c20\/9cf\/7a0c209cf5bfc75364751679c3a8114e.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/7a0\/c20\/9cf\/7a0c209cf5bfc75364751679c3a8114e.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><em>\u0420\u0438\u0441. 3. \u0420\u0430\u0437\u0440\u044b\u0432 \u00d75 \u043d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u0438 \u00d714\u201315 \u043d\u0430 \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u2014 BCL \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0434\u043b\u0438\u043d\u0435 (\u043b\u043e\u0433-\u0448\u043a\u0430\u043b\u0430)<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430 32 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u0445 \u0440\u0430\u0437\u0440\u044b\u0432 \u043c\u0435\u043d\u044c\u0448\u0435 \u2014 \u00ab\u0432\u0441\u0435\u0433\u043e\u00bb \u00d75, \u043d\u0430 512 \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u00d714\u201315. \u041d\u043e \u043f\u043e\u0440\u043e\u0433\u0430, \u0433\u0434\u0435 \u0441\u0432\u043e\u0439 \u0446\u0438\u043a\u043b \u0432\u044b\u0433\u043e\u0434\u043d\u0435\u0435, <strong>\u043d\u0435\u0442<\/strong> \u2014 BCL \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0434\u043b\u0438\u043d\u0435.<\/p>\n<h3>\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0432\u0442\u043e\u0440\u0430\u044f: AVX-512 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 AVX2<\/h3>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e \u0441\u0435\u0440\u0432\u0435\u0440. \u041f\u043e \u043b\u043e\u0433\u0438\u043a\u0435 \u0443 Xeon \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0432\u0434\u0432\u043e\u0435 \u0448\u0438\u0440\u0435 \u2014 \u0437\u043d\u0430\u0447\u0438\u0442, \u0438 \u043f\u043e\u0438\u0441\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u0414\u0438\u0437\u0430\u0441\u043c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442: Xeon \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0433\u043e\u043d\u044f\u0435\u0442 zmm, \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u044b \u2014 ymm. \u0410 \u043f\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0448\u043b\u043e \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/50f\/432\/90d\/50f43290def5763432d3e3c6cd040752.png\" alt=\"\u0420\u0438\u0441. 4. \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c IndexOf: \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u044b \u043d\u0430 AVX2 \u043f\u0440\u043e\u0442\u0438\u0432 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u043d\u0430 AVX-512\" title=\"\u0420\u0438\u0441. 4. \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c IndexOf: \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u044b \u043d\u0430 AVX2 \u043f\u0440\u043e\u0442\u0438\u0432 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u043d\u0430 AVX-512\" width=\"1260\" height=\"700\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/50f\/432\/90d\/50f43290def5763432d3e3c6cd040752.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/50f\/432\/90d\/50f43290def5763432d3e3c6cd040752.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><em>\u0420\u0438\u0441. 4. \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c IndexOf: \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u044b \u043d\u0430 AVX2 \u043f\u0440\u043e\u0442\u0438\u0432 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u043d\u0430 AVX-512<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u0435\u0441\u043a\u0442\u043e\u043f\u044b \u2014 103 \u0438 119 \u0413\u0411\/\u0441, \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 Xeon \u2014 44. \u0412\u0434\u0432\u043e\u0435 \u0448\u0438\u0440\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u2014 \u0432 \u0434\u0432\u0430 \u0441 \u043b\u0438\u0448\u043d\u0438\u043c \u0440\u0430\u0437\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u0430. \u041f\u0440\u0438\u0447\u0438\u043d \u0434\u0432\u0435, \u0438 \u043e\u0431\u0435 \u043d\u0435 \u043f\u0440\u043e \u0448\u0438\u0440\u0438\u043d\u0443:<\/p>\n<ul>\n<li>\n<p>\u0427\u0430\u0441\u0442\u043e\u0442\u0430. \u0418\u0433\u0440\u043e\u0432\u043e\u0439 Ryzen \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f \u043f\u043e\u0434 5 \u0413\u0413\u0446, Xeon \u2014 2.4 \u0413\u0413\u0446 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0438 \u0434\u043e 3.4 \u0432 \u0442\u0443\u0440\u0431\u043e. \u041f\u043e\u0438\u0441\u043a \u0432 \u043a\u044d\u0448\u0435 \u0443\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u044f\u0434\u0440\u0430, \u0430 \u043d\u0435 \u0432 \u0448\u0438\u0440\u0438\u043d\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043c\u0430\u0441\u043e\u0447\u043d\u044b\u0445 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439. AVX-512-\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0434\u0451\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u043c\u0430\u0441\u043e\u0447\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 (k1 \u0432 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0435 \u043d\u0438\u0436\u0435), \u0438 \u044d\u0442\u0430 \u0441\u0432\u044f\u0437\u043a\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 AVX2-\u043f\u0430\u0440\u044b \u00ab\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 + \u0441\u043d\u044f\u0442\u0438\u0435 \u043c\u0430\u0441\u043a\u0438\u00bb \u2014 \u043d\u0430 \u0440\u044f\u0434\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 AVX2-\u043a\u043e\u0434 \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u0433\u043e\u043d\u044f\u0435\u0442.<\/p>\n<\/li>\n<\/ul>\n<p>\u042d\u0442\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u043e\u043d\u0430 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0432 \u0442\u0440\u0435\u043a\u0435\u0440\u0430\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432. \u0412 LLVM (<a href=\"https:\/\/github.com\/llvm\/llvm-project\/issues\/91302\" rel=\"noopener noreferrer nofollow\">llvm-project #91302<\/a>) \u043f\u043e\u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044e\u0442, \u0447\u0442\u043e AVX-512-\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u043c\u0430\u0441\u043a\u0438 \u0438\u043c\u0435\u0435\u0442 <strong>\u0431\u041e\u043b\u044c\u0448\u0443\u044e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443<\/strong>, \u0447\u0435\u043c AVX2, \u0438 \u043d\u0430 \u0440\u044f\u0434\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 AVX2-\u043a\u043e\u0434 \u0432 \u0440\u0430\u0437\u044b \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u041f\u043e\u0445\u043e\u0436\u0435\u0435 \u043b\u043e\u0432\u0438\u043b\u0438 \u0432 OpenVINO (<a href=\"https:\/\/github.com\/openvinotoolkit\/openvino\/issues\/11710\" rel=\"noopener noreferrer nofollow\">issue #11710<\/a>): Xeon \u0441 AVX-512 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0430 \u0441 AVX2. \u0412\u044b\u0432\u043e\u0434 \u043f\u0440\u043e\u0441\u0442\u043e\u0439: <strong>\u0448\u0438\u0440\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u2014 \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435<\/strong>. \u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430\u0434\u043e \u043d\u0435 \u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0432 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0435, \u0430 \u043d\u0430 \u0437\u0430\u043c\u0435\u0440 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435.<\/p>\n<p>\u0421\u0440\u0430\u0437\u0443 \u0437\u0430\u043a\u0440\u043e\u044e \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u0440\u043e ReadyToRun \u2014 \u00ab\u043c\u043e\u0436\u0435\u0442, \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441\u043e\u0431\u0440\u0430\u043d\u0430 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u0434 \u043e\u0431\u0449\u0435\u0435 \u0436\u0435\u043b\u0435\u0437\u043e?\u00bb. \u041f\u0440\u043e\u0433\u043d\u0430\u043b \u0441 DOTNET_ReadyToRun=0 (\u043f\u0435\u0440\u0435-JIT \u043f\u043e\u0434 \u0441\u0432\u043e\u0451 \u0436\u0435\u043b\u0435\u0437\u043e \u043d\u0430 \u043c\u0435\u0441\u0442\u0435): \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043d\u043e\u043b\u044c, 2.96 \u043f\u0440\u043e\u0442\u0438\u0432 2.95 \u00b5s. \u0414\u0435\u043b\u043e \u0432 \u0447\u0430\u0441\u0442\u043e\u0442\u0435, \u0430 \u043d\u0435 \u0432 \u043f\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438.<\/p>\n<h3>\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0442\u0440\u0435\u0442\u044c\u044f: \u043f\u0438\u0448\u0435\u043c \u0441\u0432\u043e\u0439 SIMD \u2014 \u0438 \u0434\u0435\u043b\u0430\u0435\u043c \u0445\u0443\u0436\u0435<\/h3>\n<p>JIT \u0446\u0438\u043a\u043b\u044b \u043d\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u0442, \u043d\u043e \u0432 .NET \u0435\u0441\u0442\u044c System.Runtime.Intrinsics \u2014 SIMD-\u043f\u043e\u0438\u0441\u043a \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u043c\u0443. \u042f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438.<\/p>\n<h4>\u0421\u043f\u043e\u0441\u043e\u0431 1: AVX2 \u043d\u0430 Vector256<\/h4>\n<p>\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043f\u043e 16 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c, \u0438\u0449\u0435\u043c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043f\u043e \u043c\u0430\u0441\u043a\u0435:<\/p>\n<pre><code class=\"cs\">Vector256&lt;ushort&gt; target = Vector256.Create((ushort)c);for (; i &lt;= length - 16; i += 16){    Vector256&lt;ushort&gt; block = Avx.LoadVector256((ushort*)(p + i));    Vector256&lt;ushort&gt; eq = Avx2.CompareEqual(block, target);    int mask = Avx2.MoveMask(eq.AsByte());    if (mask != 0)    {        return i + BitOperations.TrailingZeroCount(mask) \/ 2;    }}\/\/ + \u0435\u0449\u0451 \u0434\u0435\u0441\u044f\u0442\u043e\u043a \u0441\u0442\u0440\u043e\u043a \u043d\u0430 \u0445\u0432\u043e\u0441\u0442 (\u0441\u0438\u043c\u0432\u043e\u043b\u044b, \u043d\u0435 \u0432\u043b\u0435\u0437\u0448\u0438\u0435 \u0432 \u0432\u0435\u043a\u0442\u043e\u0440)<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u0438\u0437\u0430\u0441\u043c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442 \u2014 AVX2 \u0446\u0435\u043b\u044b\u043c\u0438 ymm:<\/p>\n<pre><code class=\"assembly\">vpbroadcastw ymm0, ymm0                    ; \u0440\u0430\u0437\u043c\u043d\u043e\u0436\u0438\u043b\u0438 \u0438\u0441\u043a\u043e\u043c\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043bvpcmpeqw ymm1, ymm0, ymmword ptr [rcx...]  ; \u0441\u0440\u0430\u0432\u043d\u0438\u043b\u0438 16 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0440\u0430\u0437\u043e\u043cvpmovmskb r9d, ymm1                        ; \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u043c\u0430\u0441\u043a\u0443 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0423\u0441\u043a\u043e\u0440\u0438\u043b \u0441\u043a\u0430\u043b\u044f\u0440 \u0432 \u0440\u0430\u0437\u044b \u2014 \u0441 15.4 \u0434\u043e 1.9 \u00b5s \u043d\u0430 Ryzen. \u041d\u043e BCL \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0432\u043f\u0435\u0440\u0435\u0434\u0438 (1.11). \u0423\u0436\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043d\u043e \u043d\u0435 \u043f\u043e\u0431\u0435\u0434\u0430.<\/p>\n<h4>\u0421\u043f\u043e\u0441\u043e\u0431 2: AVX-512 \u043d\u0430 Vector512<\/h4>\n<p>\u041b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0448\u0430\u0433: \u0443 Xeon \u0435\u0441\u0442\u044c AVX-512, \u0432\u043e\u0437\u044c\u043c\u0443 512-\u0431\u0438\u0442\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u2014 32 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0437\u0430 \u0448\u0430\u0433 \u0432\u043c\u0435\u0441\u0442\u043e 16. \u0422\u043e\u0442 \u0436\u0435 \u043a\u043e\u0434, \u043d\u043e \u043d\u0430 Vector512:<\/p>\n<pre><code class=\"cs\">Vector512&lt;ushort&gt; target = Vector512.Create((ushort)c);for (; i &lt;= length - 32; i += 32){    Vector512&lt;ushort&gt; block = Avx512F.LoadVector512((ushort*)(p + i));    ulong mask = Avx512BW.CompareEqual(block, target)                        .ExtractMostSignificantBits();    if (mask != 0)    {        return i + BitOperations.TrailingZeroCount(mask);    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u2014 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430. \u0420\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c:<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/687\/b43\/04e\/687b4304e3d187da8c00e1a455ce461a.png\" alt=\"\u0420\u0438\u0441. 5. \u0421\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440: \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435 AVX-512 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 AVX2 \u0432 8\u201310 \u0440\u0430\u0437 (\u043a\u0440\u0430\u0441\u043d\u044b\u043c)\" title=\"\u0420\u0438\u0441. 5. \u0421\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440: \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435 AVX-512 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 AVX2 \u0432 8\u201310 \u0440\u0430\u0437 (\u043a\u0440\u0430\u0441\u043d\u044b\u043c)\" width=\"1414\" height=\"364\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/687\/b43\/04e\/687b4304e3d187da8c00e1a455ce461a.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/687\/b43\/04e\/687b4304e3d187da8c00e1a455ce461a.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><em>\u0420\u0438\u0441. 5. \u0421\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440: \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435 AVX-512 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 AVX2 \u0432 8\u201310 \u0440\u0430\u0437 (\u043a\u0440\u0430\u0441\u043d\u044b\u043c)<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u041d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0430\u0445 AVX-512-\u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u0430\u043b <strong>\u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u0435 \u0432 8\u201310 \u0440\u0430\u0437<\/strong> \u043f\u0440\u043e\u0442\u0438\u0432 AVX2-\u0432\u0435\u0440\u0441\u0438\u0438: 15.5 \u00b5s \u043d\u0430 Ryzen \u043f\u0440\u043e\u0442\u0438\u0432 1.9. \u041d\u0430 Xeon \u2014 \u0434\u0430, \u0447\u0443\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 ymm-\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 (3.06 \u043f\u0440\u043e\u0442\u0438\u0432 3.36), \u043d\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 IndexOf. \u041d\u0430\u0433\u043b\u044f\u0434\u043d\u043e (\u043b\u043e\u0433-\u0448\u043a\u0430\u043b\u0430, \u0438\u043d\u0430\u0447\u0435 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u044b\u0439 zmm \u043d\u0435 \u0432\u043b\u0435\u0437\u0430\u0435\u0442):<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c0a\/b25\/701\/c0ab25701c3d2053d0d2e97aae495101.png\" alt=\"\u0420\u0438\u0441. 6. \u0421\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0439 AVX-512 \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435 \u2014 \u043a\u0430\u0442\u0430\u0441\u0442\u0440\u043e\u0444\u0430 (\u043b\u043e\u0433-\u0448\u043a\u0430\u043b\u0430)\" title=\"\u0420\u0438\u0441. 6. \u0421\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0439 AVX-512 \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435 \u2014 \u043a\u0430\u0442\u0430\u0441\u0442\u0440\u043e\u0444\u0430 (\u043b\u043e\u0433-\u0448\u043a\u0430\u043b\u0430)\" width=\"1260\" height=\"700\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/c0a\/b25\/701\/c0ab25701c3d2053d0d2e97aae495101.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/c0a\/b25\/701\/c0ab25701c3d2053d0d2e97aae495101.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><em>\u0420\u0438\u0441. 6. \u0421\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0439 AVX-512 \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435 \u2014 \u043a\u0430\u0442\u0430\u0441\u0442\u0440\u043e\u0444\u0430 (\u043b\u043e\u0433-\u0448\u043a\u0430\u043b\u0430)<\/em><\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a. \u041d\u0438 \u0443 Ryzen 9 5950X (Zen 3), \u043d\u0438 \u0443 i9-10900KF (Comet Lake) <strong>\u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e AVX-512 \u043d\u0435\u0442<\/strong> (\u0443 10900KF \u043f\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 <a href=\"https:\/\/ark.intel.com\/content\/www\/us\/en\/ark\/products\/199331\/intel-core-i9-10900kf-processor-20m-cache-up-to-5-30-ghz.html\" rel=\"noopener noreferrer nofollow\">Intel ARK<\/a> \u0438\u0437 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e SSE4.1\/4.2 \u0438 AVX2): Avx512BW.IsSupported \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 false, \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u0432\u0435\u0442\u043a\u0430 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u0438 \u0432\u0435\u0441\u044c \u043f\u043e\u0438\u0441\u043a \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 \u0445\u0432\u043e\u0441\u0442 \u2014 \u043e\u0442\u0441\u044e\u0434\u0430 \u0446\u0438\u0444\u0440\u044b \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430. \u0422\u043e \u0435\u0441\u0442\u044c \u00ab\u0431\u0435\u0440\u0443 \u0441\u0430\u043c\u043e\u0435 \u0448\u0438\u0440\u043e\u043a\u043e\u0435\u00bb \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435\u043c, \u0430 \u043f\u0440\u043e\u0432\u0430\u043b\u043e\u043c \u0432 10 \u0440\u0430\u0437 \u2014 \u0438 \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u0441\u044f \u044d\u0442\u043e \u0432 \u043b\u0443\u0447\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430 \u043f\u0440\u043e\u0434\u0435.<\/p>\n<p>\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0441 IndexOf \u0432\u043e\u0442 \u0432 \u0447\u0451\u043c: \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0435 \u0431\u0435\u0440\u0451\u0442 AVX-512 \u0432\u0441\u043b\u0435\u043f\u0443\u044e. \u041e\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0433\u0434\u0435 \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u2014 zmm \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u043c Xeon, ymm \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435, \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043d\u0430 \u0441\u0442\u0430\u0440\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435, \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u0442\u043a\u0438 \u043f\u043e\u0434 ARM. \u0414\u0438\u0437\u0430\u0441\u043c \u044d\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u044f\u043c\u043e \u2014 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 .NET 10, \u0434\u0432\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0430:<\/p>\n<pre><code class=\"assembly\">; IndexOf \u0432 BCL \u2014 \u0434\u0435\u0441\u043a\u0442\u043e\u043f (Ryzen), \u043f\u0443\u0442\u044c AVX2vpbroadcastw ymm0, ymm0                    ; \u0441\u0438\u043c\u0432\u043e\u043b \u043d\u0430 \u0432\u0435\u0441\u044c ymm \u2014 16 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432vpcmpeqw ymm1, ymm0, ymmword ptr [rcx]     ; \u0441\u0440\u0430\u0432\u043d\u0438\u043b\u0438 \u0431\u043b\u043e\u043a \u0440\u0430\u0437\u043e\u043c ; IndexOf \u0432 BCL \u2014 \u0442\u043e\u0442 \u0436\u0435 \u0431\u0438\u043d\u0430\u0440\u044c \u043d\u0430 Xeon, \u043f\u0443\u0442\u044c AVX-512vpbroadcastw zmm0, eax                     ; \u0441\u0438\u043c\u0432\u043e\u043b \u043d\u0430 \u0432\u0435\u0441\u044c zmm \u2014 32 \u0441\u0438\u043c\u0432\u043e\u043b\u0430vmovups  zmm1, zmmword ptr [rcx]           ; \u0433\u0440\u0443\u0437\u0438\u043c 64 \u0431\u0430\u0439\u0442\u0430vpcmpeqw k1, zmm1, zmm0                    ; \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u0440\u0430\u0437\u0443 \u0432 \u043c\u0430\u0441\u043e\u0447\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440kortestd k1, k1                            ; \u0435\u0441\u0442\u044c \u043b\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u044d\u0442\u043e, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e \u0432\u0435\u0442\u043a\u0435 \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0445\u0432\u043e\u0441\u0442\u043e\u0432 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u0443\u0436\u0435 \u043b\u0435\u0436\u0438\u0442 \u0432 IndexOf.<\/p>\n<p>\u041c\u043e\u0440\u0430\u043b\u044c: \u0441\u0432\u043e\u0439 SIMD \u043f\u0438\u0441\u0430\u0442\u044c <em>\u043c\u043e\u0436\u043d\u043e<\/em> \u0438 \u044d\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u043d\u0430\u0432\u044b\u043a \u2014 \u043d\u043e \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441 BCL \u0432 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445 \u0441\u043c\u044b\u0441\u043b\u0430 \u043d\u0435\u0442. \u0422\u0430\u043c \u0443\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043b\u0443\u0447\u0448\u0435, \u043f\u043e\u0434 \u0432\u0441\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u0438 \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u0448\u0438\u0440\u0438\u043d\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u0430. \u00ab\u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439\u00bb Vector512 \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435 \u2014 \u044d\u0442\u043e \u00d710 \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u0435 \u0438 unsafe \u0432 \u043f\u0440\u0438\u0434\u0430\u0447\u0443.<\/p>\n<h3>\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u0430\u044f: \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435<\/h3>\n<h4>\u041f\u043e\u0438\u0441\u043a \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043d\u0430\u0431\u043e\u0440\u0430 \u2014 SearchValues<\/h4>\n<p>\u0418\u0449\u0435\u0442\u0435 \u043b\u044e\u0431\u043e\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0438\u0437 \u043d\u0430\u0431\u043e\u0440\u0430 \u2014 \u0433\u043b\u0430\u0441\u043d\u0443\u044e, \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c, \u0437\u0430\u043f\u0440\u0435\u0449\u0451\u043d\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b? \u041d\u0435 \u043f\u0438\u0448\u0438\u0442\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 || ch == &#8230;. \u0421 .NET 8 \u0435\u0441\u0442\u044c <a href=\"https:\/\/learn.microsoft.com\/dotnet\/api\/system.buffers.searchvalues\" rel=\"noopener noreferrer nofollow\">SearchValues<\/a> \u2014 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0435 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u043e\u043b\u0435:<\/p>\n<pre><code class=\"cs\">private static readonly SearchValues&lt;char&gt; Vowels = SearchValues.Create(\"aeiou\"); int i = text.AsSpan().IndexOfAny(Vowels);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0426\u0438\u0444\u0440\u044b \u043d\u0430 64 \u041a\u0411 \u0442\u0435\u043a\u0441\u0442\u0430 \u0431\u0435\u0437 \u0433\u043b\u0430\u0441\u043d\u044b\u0445: \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u0432 \u0446\u0438\u043a\u043b\u0435 \u2014 231 \u00b5s, IndexOfAny \u2014 2.9, SearchValues \u2014 1.5. \u0421\u043e \u0441\u0442\u0430\u0440\u044b\u043c IndexOfAny(&#171;aeiou&#187;) \u0440\u0430\u0437\u0440\u044b\u0432 \u0432 1.8\u20131.9 \u0440\u0430\u0437\u0430: SearchValues \u0441\u0442\u0440\u043e\u0438\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u043f\u043e\u0438\u0441\u043a\u0430 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438, \u0430 IndexOfAny \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439 \u2014 \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0435 (\u0432\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043d\u044b \u0443 \u0421\u0442\u0438\u0432\u0435\u043d\u0430 \u0422\u043e\u0443\u0431\u0430 \u0432 <a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/performance-improvements-in-net-8\/\" rel=\"noopener noreferrer nofollow\">Performance Improvements in .NET 8<\/a>).<\/p>\n<figure class=\"full-width \"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/abf\/6a6\/b9f\/abf6a6b9f545fd3e7bf1b6dff1e0e9f2.png\" alt=\"\u0420\u0438\u0441. 7. \u041f\u043e\u0438\u0441\u043a \u0433\u043b\u0430\u0441\u043d\u043e\u0439: \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u0432 \u0446\u0438\u043a\u043b\u0435 \u043f\u0440\u043e\u0442\u0438\u0432 IndexOfAny \u0438 SearchValues (\u043b\u043e\u0433-\u0448\u043a\u0430\u043b\u0430)\" title=\"\u0420\u0438\u0441. 7. \u041f\u043e\u0438\u0441\u043a \u0433\u043b\u0430\u0441\u043d\u043e\u0439: \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u0432 \u0446\u0438\u043a\u043b\u0435 \u043f\u0440\u043e\u0442\u0438\u0432 IndexOfAny \u0438 SearchValues (\u043b\u043e\u0433-\u0448\u043a\u0430\u043b\u0430)\" width=\"1204\" height=\"672\" sizes=\"auto, (max-width: 780px) 100vw, 50vw\" srcset=\"https:\/\/habrastorage.org\/r\/w780\/getpro\/habr\/upload_files\/abf\/6a6\/b9f\/abf6a6b9f545fd3e7bf1b6dff1e0e9f2.png 780w,&#10;       https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/abf\/6a6\/b9f\/abf6a6b9f545fd3e7bf1b6dff1e0e9f2.png 781w\" loading=\"lazy\" decode=\"async\"\/><\/p>\n<div><figcaption><em>\u0420\u0438\u0441. 7. \u041f\u043e\u0438\u0441\u043a \u0433\u043b\u0430\u0441\u043d\u043e\u0439: \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u0432 \u0446\u0438\u043a\u043b\u0435 \u043f\u0440\u043e\u0442\u0438\u0432 IndexOfAny \u0438 SearchValues (\u043b\u043e\u0433-\u0448\u043a\u0430\u043b\u0430)<\/em><\/figcaption><\/div>\n<\/figure>\n<h4>\u00d7154 \u0441 \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u043e\u043c \u2014 \u044d\u0442\u043e \u0443\u0436\u0435 \u043d\u0435 \u043f\u0440\u043e SIMD<\/h4>\n<p>\u041e\u0442\u043a\u0443\u0434\u0430 \u00d7154, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u043e \u043f\u044f\u0442\u044c \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439 \u043d\u0430 \u0441\u0438\u043c\u0432\u043e\u043b? \u0421\u043d\u0438\u043c\u0430\u0435\u043c \u0434\u0438\u0437\u0430\u0441\u043c \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u0430 \u043d\u0430 .NET 10:<\/p>\n<pre><code class=\"assembly\">; IndexOfVowelManual, .NET 10 \u2014 \u043d\u0430 \u043a\u0430\u0436\u0434\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043bmovzx    r8, word ptr [rcx+2*rax+0x0C]  ; \u0431\u0435\u0440\u0451\u043c \u0441\u0438\u043c\u0432\u043e\u043bcmp      r8d, 101                       ; \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0435 \u21161: \u043d\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 'e'?jle      SHORT CHECK_A_Esub      r8d, 105                       ; \u0441\u0434\u0432\u0438\u0433\u0430\u0435\u043c \u043a 'i'cmp      r8d, 12ja       SHORT NEXT                     ; \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0435 \u21162: \u0432\u043d\u0435 i..u?mov      r10d, 0x1041                   ; \u0431\u0438\u0442\u044b 0, 6, 12 = i, o, ubt       r10d, r8d                      ; \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u043c\u0430\u0441\u043a\u043e\u0439<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>JIT \u0437\u0434\u0435\u0441\u044c \u043d\u0435 \u0442\u0443\u043f\u0438\u0442, \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442: \u0441 .NET 9 \u0446\u0435\u043f\u043e\u0447\u043a\u0443  ch == &#8216;i&#8217; || ch == &#8216;o&#8217; || ch == &#8216;u&#8217;   \u043e\u043d \u0441\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442 \u0432 \u043e\u0434\u043d\u0443 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0443 \u0431\u0438\u0442\u043e\u0432\u043e\u0439 \u043c\u0430\u0441\u043a\u043e\u0439 (bt). \u0418\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043c\u0430\u043b\u043e. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c: \u043e\u0431\u0430 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u0432\u0438\u0441\u044f\u0442 \u043e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0438\u043c\u0432\u043e\u043b\u0430, \u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u2014 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u043e\u0448\u0438\u0431\u0430\u0435\u0442\u0441\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u043d\u043e \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0432\u0442\u043e\u0440\u043e\u043c, \u0438 \u043a\u0430\u0436\u0434\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u0441\u0442\u043e\u0438\u0442 \u043f\u043e\u0440\u044f\u0434\u043a\u0430 13\u201320 \u0442\u0430\u043a\u0442\u043e\u0432 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043c\u0438\u043a\u0440\u043e\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b (<a href=\"https:\/\/www.agner.org\/optimize\/\" rel=\"noopener noreferrer nofollow\">\u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0438 \u0410\u0433\u043d\u0435\u0440\u0430 \u0424\u043e\u0433\u0430<\/a>). \u0418\u0442\u043e\u0433 \u2014 3.5 \u043d\u0441 \u043d\u0430 \u0441\u0438\u043c\u0432\u043e\u043b.<\/p>\n<p>\u0412 \u0446\u0438\u043a\u043b\u0435 \u0441 \u043e\u0434\u043d\u0438\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043d\u0430 Miss \u0432\u0441\u0435\u0433\u0434\u0430 false \u0438 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0434\u0435\u0430\u043b\u044c\u043d\u043e \u2014 0.23 \u043d\u0441 \u043d\u0430 \u0441\u0438\u043c\u0432\u043e\u043b. \u0412\u043e\u0442 \u0438 \u00d715 \u043c\u0435\u0436\u0434\u0443 \u043f\u0435\u0440\u0435\u0431\u043e\u0440\u043e\u043c \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0438 \u043f\u044f\u0442\u0438, \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0435 \u0434\u043e \u00d7154 \u0434\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0432\u0435\u043a\u0442\u043e\u0440.<\/p>\n<p>\u041e\u0442\u0441\u044e\u0434\u0430 \u0436\u0435 \u0438 \u0441\u0442\u0440\u0430\u043d\u043d\u043e\u0441\u0442\u044c \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0435: \u043d\u0430 .NET 8 \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0447\u0435\u043c \u043d\u0430 .NET 9\/10 (154 \u00b5s \u043f\u0440\u043e\u0442\u0438\u0432 231\u2013236). \u041a\u043e\u0434\u0433\u0435\u043d \u0434\u0440\u0443\u0433\u043e\u0439 \u2014 \u043b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439 \u0431\u0435\u0437 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u043d\u043e\u0433\u043e \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f:<\/p>\n<pre><code class=\"assembly\">; IndexOfVowelManual, .NET 8 \u2014 \u043b\u0438\u043d\u0435\u0439\u043d\u0430\u044f \u0446\u0435\u043f\u043e\u0447\u043a\u0430cmp      r8d, 101ja       SHORT CHECK_IOU    ; \u0431\u043e\u043b\u044c\u0448\u0435 'e' \u2014 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c i, o, ucmp      r8d, 97            ; 'a'?je       SHORT FOUNDcmp      r8d, 101           ; 'e'?je       SHORT FOUND<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u041d\u043e\u0432\u044b\u0439 \u043a\u043e\u0434\u0433\u0435\u043d \u0444\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u0435\u0435, \u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0435\u0449\u0451 \u043e\u0434\u043d\u043e \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u043e \u0434\u0430\u043d\u043d\u044b\u043c \u2014 \u0438 \u043d\u0430 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u0435 \u0441\u0442\u0430\u043b \u043d\u0430 \u0442\u0440\u0435\u0442\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435. \u041c\u043e\u0440\u0430\u043b\u044c \u0442\u0430 \u0436\u0435, \u0447\u0442\u043e \u0432\u043e \u0432\u0441\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435: \u0440\u0435\u0448\u0430\u044e\u0442 \u043d\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438, \u0430 \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u044f \u043f\u043e \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u043c \u0434\u0430\u043d\u043d\u044b\u043c. \u0423 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 BCL \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439 \u043f\u043e \u0434\u0430\u043d\u043d\u044b\u043c \u043d\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435 \u2014 \u043e\u043d \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442 \u0431\u043b\u043e\u043a \u0446\u0435\u043b\u0438\u043a\u043e\u043c \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u0442 \u043c\u0430\u0441\u043a\u0443 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439.<\/p>\n<h4>\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u2014 \u043d\u0435 ToLower \u0432 \u0446\u0438\u043a\u043b\u0435<\/h4>\n<p>\u041a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430 \u2014 \u0438\u0441\u043a\u0430\u0442\u044c \u0431\u0435\u0437 \u0443\u0447\u0451\u0442\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430:<\/p>\n<pre><code class=\"cs\">for (int i = 0; i &lt; s.Length; i++){    if (char.ToLowerInvariant(s[i]) == lower)   \/\/ \u0432\u044b\u0437\u043e\u0432 \u043d\u0430 \u041a\u0410\u0416\u0414\u042b\u0419 \u0441\u0438\u043c\u0432\u043e\u043b    {        return i;    }}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0414\u0438\u0437\u0430\u0441\u043c \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442: ToLowerInvariant \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u2014 \u044d\u0442\u043e \u0432\u044b\u0437\u043e\u0432 \u0432 ICU, \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043b\u043e\u043a\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<pre><code class=\"assembly\">call     [TextInfo:IcuChangeCase(...)]   ; \u0441\u043c\u0435\u043d\u0430 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>\u0410 IndexOf(needle, StringComparison.OrdinalIgnoreCase) \u0434\u0435\u043b\u0430\u0435\u0442 \u0442\u043e \u0436\u0435 \u0441\u0430\u043c\u043e\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043e\u043c. \u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u2014 \u0432 16\u201326 \u0440\u0430\u0437, \u0430 \u043d\u0430 .NET 8 \u0434\u043e\u0445\u043e\u0434\u0438\u0442 \u0434\u043e \u00d739. \u041f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0442\u0430\u043a:<\/p>\n<pre><code class=\"cs\">int i = s.IndexOf(needle, StringComparison.OrdinalIgnoreCase);<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h4>\u0414\u0435\u0444\u043e\u043b\u0442\u044b IndexOf: char \u0438 string \u0438\u0449\u0443\u0442 \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443<\/h4>\n<p>\u041f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0438 IndexOf \u0432\u0435\u0434\u0443\u0442 \u0441\u0435\u0431\u044f \u043f\u043e-\u0440\u0430\u0437\u043d\u043e\u043c\u0443. s.IndexOf(&#8216;a&#8217;) \u0441 char \u0438\u0434\u0451\u0442 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0432 SpanHelpers.IndexOfChar \u2014 \u044d\u0442\u043e \u0432\u0441\u0435\u0433\u0434\u0430 ordinal. \u0410 \u043f\u0435\u0440\u0435\u0433\u0440\u0443\u0437\u043a\u0430 s.IndexOf(&#171;a&#187;) \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0439 <strong>\u043f\u043e \u0434\u0435\u0444\u043e\u043b\u0442\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 StringComparison.CurrentCulture<\/strong> \u2014 \u044d\u0442\u043e \u043a\u043e\u0434 \u0438\u0437 dotnet\/runtime, String.Searching.cs:<\/p>\n<pre><code class=\"cs\">\/\/ dotnet\/runtime, String.Searching.cs (main)public int IndexOf(char value) =&gt; SpanHelpers.IndexOfChar(ref _firstChar, value, Length); public int IndexOf(string value){    return IndexOf(value, StringComparison.CurrentCulture);}<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<p>CurrentCulture \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043f\u043e\u0445\u043e\u0434 \u0432 ICU \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u0430\u043c\u0438 \u0441\u043e\u043f\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u044b \u2014 \u0432 \u0440\u0430\u0437\u044b \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 ordinal-\u043f\u043e\u0438\u0441\u043a\u0430, \u043f\u043b\u044e\u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u043b\u043e\u043a\u0430\u043b\u0438 (\u0432 dotnet\/docs #21249 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0434\u0435\u0444\u043e\u043b\u0442\u043e\u0432 \u043f\u043e \u0432\u0441\u0435\u043c \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u0430\u043c, \u043d\u0430 \u044d\u0442\u043e \u0436\u0435 \u0435\u0441\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u0430\u043d\u0430\u043b\u0438\u0437\u0430\u0442\u043e\u0440\u0430 CA1310). \u041f\u043e\u044d\u0442\u043e\u043c\u0443 StringComparison \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0439\u0442\u0435 \u044f\u0432\u043d\u043e:<\/p>\n<pre><code class=\"cs\">s.IndexOf(\"x\", StringComparison.Ordinal);   \/\/ ordinal: \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043f\u043e \u043a\u043e\u0434\u0430\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432s.IndexOf(\"x\");                             \/\/ CurrentCulture \u043f\u043e \u0434\u0435\u0444\u043e\u043b\u0442\u0443 \u2014 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e<\/code><div class=\"code-explainer\"><a href=\"https:\/\/sourcecraft.dev\/\" class=\"tm-button code-explainer__link\" style=\"visibility: hidden;\"><img style=\"width:14px;height:14px;object-fit:cover;object-position:left;\"\/><\/a><\/div><\/pre>\n<h3>\u0412\u044b\u0432\u043e\u0434\u044b<\/h3>\n<ul>\n<li>\n<p>RyuJIT \u043d\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u0442 \u0432\u0430\u0448\u0438 \u0446\u0438\u043a\u043b\u044b (issue \u0441 2019). \u041f\u0440\u043e\u0441\u0442\u043e\u0439 for \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435 \u2014 \u0432\u0441\u0435\u0433\u0434\u0430 \u0441\u043a\u0430\u043b\u044f\u0440, \u043d\u0430 \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 8\u201314 \u0440\u0430\u0437 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 BCL, \u0438 \u0440\u0430\u043d\u043d\u0438\u0439 \u0432\u044b\u0445\u043e\u0434 \u043d\u0435 \u0441\u043f\u0430\u0441\u0430\u0435\u0442. \u041d\u0435 \u043f\u0438\u0448\u0438\u0442\u0435 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0439 \u043f\u043e\u0438\u0441\u043a \u0441\u0432\u043e\u0438\u043c \u0446\u0438\u043a\u043b\u043e\u043c \u2014 IndexOf, IndexOfAny \u0438 SearchValues \u0432 BCL \u0443\u0436\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0435. Count \u0438 SequenceEqual \u0442\u043e\u0436\u0435: \u0432 \u0437\u0430\u043c\u0435\u0440\u0435 \u043e\u043d\u0438 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0446\u0438\u043a\u043b\u0430 \u0432 5\u20137 \u0440\u0430\u0437 \u043d\u0430 \u0432\u0441\u0435\u0445 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445.<\/p>\n<\/li>\n<li>\n<p>\u0428\u0438\u0440\u0435 \u0432\u0435\u043a\u0442\u043e\u0440 \u2014 \u043d\u0435 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043a\u043e\u0434. \u0421\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439 AVX-512 \u0432 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u0432 \u0434\u0432\u0430 \u0441 \u043b\u0438\u0448\u043d\u0438\u043c \u0440\u0430\u0437\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u043e\u0433\u043e AVX2 (\u0447\u0430\u0441\u0442\u043e\u0442\u0430 + \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043c\u0430\u0441\u043e\u0447\u043d\u044b\u0445 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439), \u0438 \u044d\u0442\u043e \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u044e\u0442 \u0442\u0440\u0435\u043a\u0435\u0440\u044b LLVM \u0438 OpenVINO. \u041c\u0435\u0440\u044f\u0439\u0442\u0435 \u043d\u0430 \u0446\u0435\u043b\u0435\u0432\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435, \u043d\u0435 \u043f\u0435\u0440\u0435\u043d\u043e\u0441\u0438\u0442\u0435 \u0446\u0438\u0444\u0440\u044b \u0434\u0435\u0441\u043a\u0442\u043e\u043f \u2194 \u0441\u0435\u0440\u0432\u0435\u0440.<\/p>\n<\/li>\n<li>\n<p>\u0421\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0439 Vector512 \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435 \u0434\u0430\u0451\u0442 \u00d710 \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u0435: \u043d\u0438 \u0443 Zen 3, \u043d\u0438 \u0443 Comet Lake \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e AVX-512 \u043d\u0435\u0442, \u0438 \u043c\u0435\u0442\u043e\u0434 \u0441\u043a\u0430\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 \u0445\u0432\u043e\u0441\u0442. IndexOf \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u0448\u0438\u0440\u0438\u043d\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u043f\u043e\u0434 \u0436\u0435\u043b\u0435\u0437\u043e \u0441\u0430\u043c \u2014 \u0441\u0430\u043c\u043e\u043c\u0443 \u044d\u0442\u043e \u043d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c, \u043d\u0435 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0432 \u043f\u043e\u043b-\u0440\u0430\u043d\u0442\u0430\u0439\u043c\u0430. \u041d\u0435 \u0441\u043e\u0440\u0435\u0432\u043d\u0443\u0439\u0442\u0435\u0441\u044c \u0441 BCL \u0432 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445.<\/p>\n<\/li>\n<li>\n<p>\u0414\u043b\u044f \u043d\u0430\u0431\u043e\u0440\u0430 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u2014 SearchValues \u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u043e\u043b\u0435: \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u0432 \u0446\u0438\u043a\u043b\u0435 \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 \u0435\u043c\u0443 \u0434\u043e \u00d7154, \u0438 \u0432\u0438\u043d\u043e\u0432\u0430\u0442\u044b \u043c\u0438\u0441\u043f\u0440\u0435\u0434\u0438\u043a\u0442\u044b \u0432\u0435\u0442\u0432\u043b\u0435\u043d\u0438\u0439, \u0430 \u043d\u0435 \u0447\u0438\u0441\u043b\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439. \u0414\u043b\u044f \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0433\u043e \u2014 OrdinalIgnoreCase, \u0430 \u043d\u0435 ToLower \u0432 \u0446\u0438\u043a\u043b\u0435. \u0418 \u0432\u0441\u0435\u0433\u0434\u0430 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0439\u0442\u0435 StringComparison.Ordinal \u044f\u0432\u043d\u043e \u2014 \u0438\u043d\u0430\u0447\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e\u0435 \u043a\u0443\u043b\u044c\u0442\u0443\u0440\u043d\u043e\u0435 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<\/ul>\n<h2>\u041a\u043e\u0434 \u0438\u0437 \u0441\u0442\u0430\u0442\u044c\u0438<\/h2>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/ComboxSoftDeveloper\/SimdProof\" rel=\"noopener noreferrer nofollow\">SimdProof<\/a> \u2014 \u0431\u0435\u043d\u0447\u043c\u0430\u0440\u043a (\u043f\u043e\u0438\u0441\u043a \u0441\u0438\u043c\u0432\u043e\u043b\u0430, \u043f\u043e\u0434\u0441\u0447\u0451\u0442, \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u0440\u043e\u043a, \u043f\u043e\u0438\u0441\u043a \u0433\u043b\u0430\u0441\u043d\u043e\u0439, \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u043e\u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0439 \u043f\u043e\u0438\u0441\u043a, \u0441\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0435 AVX2 \u0438 AVX-512, \u0434\u0432\u0430 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f, \u0442\u0440\u0438 \u0434\u043b\u0438\u043d\u044b, net8\/9\/10) \u0438 \u0441\u043d\u044f\u0442\u0438\u0435 \u0434\u0438\u0437\u0430\u0441\u043c\u0430<\/p>\n<\/li>\n<\/ul>\n<h2>\u0421\u0441\u044b\u043b\u043a\u0438<\/h2>\n<ul>\n<li>\n<p><a href=\"https:\/\/github.com\/dotnet\/runtime\/issues\/12466\" rel=\"noopener noreferrer nofollow\">Issue #12466 \u2014 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0430\u0432\u0442\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u0432 RyuJIT, \u0441 2019<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/llvm\/llvm-project\/issues\/91302\" rel=\"noopener noreferrer nofollow\">LLVM #91302 \u2014 \u043f\u043e\u0447\u0435\u043c\u0443 AVX-512-\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u043c\u0430\u0441\u043a\u0438 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 AVX2 (\u043f\u043e\u043a\u043e\u043c\u0430\u043d\u0434\u043d\u044b\u0439 \u0440\u0430\u0437\u0431\u043e\u0440)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/openvinotoolkit\/openvino\/issues\/11710\" rel=\"noopener noreferrer nofollow\">OpenVINO #11710 \u2014 Xeon \u0441 AVX-512 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0430 \u0441 AVX2<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/dotnet\/runtime\/blob\/main\/src\/libraries\/System.Private.CoreLib\/src\/System\/String.Searching.cs\" rel=\"noopener noreferrer nofollow\">String.Searching.cs \u0432 dotnet\/runtime \u2014 \u0434\u0435\u0444\u043e\u043b\u0442\u044b IndexOf \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/dotnet\/docs\/issues\/21249\" rel=\"noopener noreferrer nofollow\">dotnet\/docs #21249 \u2014 \u0442\u0430\u0431\u043b\u0438\u0446\u0430 \u0434\u0435\u0444\u043e\u043b\u0442\u043e\u0432 ordinal\/culture \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u043c API<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/learn.microsoft.com\/dotnet\/api\/system.buffers.searchvalues\" rel=\"noopener noreferrer nofollow\">SearchValues \u2014 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f Microsoft<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/dotnet\/runtime\/blob\/main\/docs\/coding-guidelines\/vectorization-guidelines.md\" rel=\"noopener noreferrer nofollow\">Vectorization Guidelines \u2014 \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d\u0430 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0432 dotnet\/runtime<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/github.com\/dotnet\/runtime\/blob\/main\/docs\/design\/coreclr\/jit\/viewing-jit-dumps.md\" rel=\"noopener noreferrer nofollow\">Viewing JIT dumps \u2014 \u043a\u0430\u043a \u0441\u043d\u0438\u043c\u0430\u0442\u044c \u0434\u0438\u0437\u0430\u0441\u043c \u0447\u0435\u0440\u0435\u0437 DOTNET_JitDisasm<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/dotnet\/performance-improvements-in-net-8\/\" rel=\"noopener noreferrer nofollow\">Performance Improvements in .NET 8 (Stephen Toub) \u2014 \u043a\u0430\u043a \u0443\u0441\u0442\u0440\u043e\u0435\u043d SearchValues \u0432\u043d\u0443\u0442\u0440\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/ark.intel.com\/content\/www\/us\/en\/ark\/products\/199331\/intel-core-i9-10900kf-processor-20m-cache-up-to-5-30-ghz.html\" rel=\"noopener noreferrer nofollow\">Intel ARK: Core i9-10900KF \u2014 \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u0442\u043e\u043b\u044c\u043a\u043e SSE4.1\/4.2 \u0438 AVX2, \u0431\u0435\u0437 AVX-512<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.agner.org\/optimize\/\" rel=\"noopener noreferrer nofollow\">\u0410\u0433\u043d\u0435\u0440 \u0424\u043e\u0433, \u0441\u043f\u0440\u0430\u0432\u043e\u0447\u043d\u0438\u043a\u0438 \u043f\u043e \u043c\u0438\u043a\u0440\u043e\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430\u043c \u2014 \u0446\u0435\u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 \u043f\u0440\u0435\u0434\u0441\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044f \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432<\/a><\/p>\n<\/li>\n<\/ul>\n<p><strong>\u0412\u0441\u0435\u043c \u0443\u0434\u0430\u0447\u0438 \u0438 \u0434\u043e \u043d\u043e\u0432\u044b\u0445 \u0432\u0441\u0442\u0440\u0435\u0447!<\/strong><\/p>\n<blockquote>\n<p><em>PS: \u0432\u0441\u0435 \u0446\u0438\u0444\u0440\u044b \u2014 \u0440\u0435\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0440\u043e\u0433\u043e\u043d\u044b \u043d\u0430 \u0447\u0435\u0442\u044b\u0440\u0451\u0445 \u043c\u0430\u0448\u0438\u043d\u0430\u0445 \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0434\u0432\u0430 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f \u0438 \u0442\u0440\u0438 \u0434\u043b\u0438\u043d\u044b. \u041d\u0430 \u0432\u0430\u0448\u0435\u043c \u0436\u0435\u043b\u0435\u0437\u0435 \u0430\u0431\u0441\u043e\u043b\u044e\u0442\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0441\u0432\u043e\u0438 \u2014 \u0432\u0430\u0436\u043d\u043e \u0441\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435: \u0441\u0432\u043e\u0439 \u0446\u0438\u043a\u043b \u043f\u0440\u043e\u0438\u0433\u0440\u044b\u0432\u0430\u0435\u0442 BCL \u0432\u0441\u0435\u0433\u0434\u0430, \u0430 \u043a\u0430\u043a\u043e\u0435 \u0436\u0435\u043b\u0435\u0437\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0440\u0435\u0448\u0430\u0435\u0442 \u0447\u0430\u0441\u0442\u043e\u0442\u0430 \u0438 \u043c\u0438\u043a\u0440\u043e\u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430, \u0430 \u043d\u0435 \u0447\u0438\u0441\u043b\u043e \u0431\u0438\u0442 \u0432 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0435.<\/em><\/p>\n<p><em>NativeAOT \u044f \u043d\u0435 \u0433\u043e\u043d\u044f\u043b \u2014 \u0442\u0430\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f, \u043a\u0430\u0440\u0442\u0438\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u0430\u0442\u044c\u0441\u044f; \u043f\u0440\u043e\u0433\u043e\u043d\u0438\u0442\u0435 \u2014 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u0435\u0441\u044c.<\/em><\/p>\n<\/blockquote>\n<\/div>\n<p>\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\/1059624\/\">https:\/\/habr.com\/ru\/articles\/1059624\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u0423\u0432\u0430\u0436\u0430\u0435\u043c\u044b\u0435 \u0447\u0438\u0442\u0430\u0442\u0435\u043b\u0438, \u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0445\u043e\u0447\u0443 \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u0440\u043e \u043f\u043e\u0438\u0441\u043a \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435 \u0438 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u0432\u044b\u0432\u043e\u0434\u044b. \u041d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438: \u0441\u0440\u0430\u0432\u043d\u0438\u043b \u043f\u043e\u0438\u0441\u043a \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0446\u0438\u043a\u043b\u043e\u043c \u0441\u043e string.IndexOf \u2014 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u043b \u0440\u0430\u0437\u043d\u0438\u0446\u0443 \u0432 \u0440\u0430\u0437\u044b. \u0417\u0430\u043e\u0434\u043d\u043e \u0432\u044b\u044f\u0441\u043d\u0438\u043b\u043e\u0441\u044c, \u0447\u0442\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0439 Xeon \u0441 AVX-512 \u0432 \u044d\u0442\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0438\u0433\u0440\u043e\u0432\u043e\u0433\u043e \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0430 \u0441 AVX2. \u041d\u0438\u0436\u0435 \u0440\u0430\u0437\u0431\u043e\u0440 \u043e\u0431\u043e\u0438\u0445 \u0444\u0430\u043a\u0442\u043e\u0432 \u0441 \u0434\u0438\u0437\u0430\u0441\u043c\u043e\u043c \u0438 \u0437\u0430\u043c\u0435\u0440\u0430\u043c\u0438.\u0411\u0443\u0434\u0435\u0442 \u0447\u0435\u0442\u044b\u0440\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u0438, \u0438 \u0432 \u043a\u0430\u0436\u0434\u043e\u0439 \u2014 \u0432\u043e\u043f\u0440\u043e\u0441, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u0438\u0441\u043a\u0430\u043b \u043e\u0442\u0432\u0435\u0442:\u041d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043e\u0431\u044b\u0447\u043d\u044b\u0439 for \u043f\u043e \u0441\u0442\u0440\u043e\u043a\u0435 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 string.IndexOf \u2014 \u0438 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043b\u0438 \u0440\u0430\u0437\u0440\u044b\u0432 \u0441 \u0434\u043b\u0438\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438?\u041f\u043e\u0447\u0435\u043c\u0443 \u0441\u0435\u0440\u0432\u0435\u0440 \u0441 AVX-512 \u2014 \u0441\u0430\u043c\u044b\u043c\u0438 \u0448\u0438\u0440\u043e\u043a\u0438\u043c\u0438 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u043c\u0438 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u043c\u0438 \u2014 \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0432 \u0434\u0432\u0430 \u0441 \u043b\u0438\u0448\u043d\u0438\u043c \u0440\u0430\u0437\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0430 \u0441 AVX2?\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0434\u043e\u0433\u043d\u0430\u0442\u044c BCL, \u0435\u0441\u043b\u0438 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432\u0435\u043a\u0442\u043e\u0440 \u0441\u0430\u043c\u043e\u043c\u0443 \u0447\u0435\u0440\u0435\u0437 intrinsics? \u042f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438 \u2014 \u043e\u0434\u0438\u043d \u0434\u0430\u043b \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u0435 \u0432 10 \u0440\u0430\u0437.\u0418 \u0447\u0442\u043e \u0441\u043e \u0432\u0441\u0435\u043c \u044d\u0442\u0438\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435: \u043a\u0430\u043a\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0431\u0440\u0430\u0442\u044c \u0438 \u043a\u0430\u043a\u0438\u0445 \u043e\u0448\u0438\u0431\u043e\u043a \u0438\u0437\u0431\u0435\u0433\u0430\u0442\u044c.\u0412\u0441\u0451 \u043d\u0430 BenchmarkDotNet v0.15.8, \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0441\u043d\u044f\u0442 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 DOTNET_JitDisasm, \u0432\u0435\u0441\u044c \u043a\u043e\u0434 \u043d\u0430 \u0433\u0438\u0442\u0435 \u2014 \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u0438\u0442\u044c. \u041c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 \u0437\u0430\u043c\u0435\u0440\u043e\u0432: \u0442\u0435\u0441\u0442\u044b \u0433\u043e\u043d\u044f\u043b\u0438\u0441\u044c \u043d\u0430 \u0440\u0435\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u043d\u043e\u043c \u0442\u0435\u043a\u0441\u0442\u0435 (\u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0431\u0443\u043a\u0432\u044b \u0438 \u043f\u0440\u043e\u0431\u0435\u043b\u044b, \u0430 \u043d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u2014 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 \u0438\u0437 \u043f\u043e\u0432\u0442\u043e\u0440\u043e\u0432 \u0446\u0438\u0444\u0440\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442\u0441\u044f \u0437\u0430\u043d\u0438\u0436\u0435\u043d\u043d\u044b\u043c\u0438), \u0432 \u0434\u0432\u0443\u0445 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f\u0445 (\u0438\u0441\u043a\u043e\u043c\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0435\u0441\u0442\u044c \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \/ \u0435\u0433\u043e \u043d\u0435\u0442 \u0432\u043e\u043e\u0431\u0449\u0435) \u0438 \u043d\u0430 \u0442\u0440\u0451\u0445 \u0434\u043b\u0438\u043d\u0430\u0445 (32, 512, 65536).\u0422\u0435\u0441\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u0432\u0435\u0440\u044f\u0435\u0442, \u0447\u0442\u043e \u0432\u0441\u0435 \u043c\u0435\u0442\u043e\u0434\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.\u0427\u0435\u0442\u044b\u0440\u0435 \u043c\u0430\u0448\u0438\u043d\u044b:\u041c\u0430\u0448\u0438\u043d\u0430CPU\u041e\u0421\u0412\u0435\u043a\u0442\u043e\u0440\u044b\u21161AMD Ryzen 9 5950X, 16 \u044f\u0434\u0435\u0440Windows 10AVX2 (ymm, 32 \u0411)\u21162Intel Core i9-10900KF, 10 \u044f\u0434\u0435\u0440Windows 10AVX2 (ymm, 32 \u0411)\u211632 x Intel Xeon Silver 4314, 32 \u044f\u0434\u0440\u0430Windows Server 2022AVX-512 (zmm, 64 \u0411)\u211642 x Intel Xeon Silver 4314, 32 \u044f\u0434\u0440\u0430Windows Server 2022AVX-512 (zmm, 64 \u0411)\u041d\u0435\u043c\u043d\u043e\u0433\u043e \u0442\u0435\u043e\u0440\u0438\u0438: \u043f\u043e\u0447\u0435\u043c\u0443 \u0446\u0438\u043a\u043b \u2014 \u044d\u0442\u043e \u0441\u043a\u0430\u043b\u044f\u0440\u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0443\u043c\u0435\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043d\u0435 \u043e\u0434\u0438\u043d \u0441\u0438\u043c\u0432\u043e\u043b \u0437\u0430 \u0442\u0430\u043a\u0442, \u0430 \u0441\u0440\u0430\u0437\u0443 \u0432\u0435\u043a\u0442\u043e\u0440 \u2014 16, 32 \u0438\u043b\u0438 64 \u0431\u0430\u0439\u0442\u0430 \u043e\u0434\u043d\u043e\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0435\u0439 (SSE, AVX2, AVX-512). \u0417\u0430 \u0441\u0447\u0451\u0442 \u044d\u0442\u043e\u0433\u043e \u0438 \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0432 BCL.\u0412\u0430\u0436\u043d\u043e \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u0447\u0435\u0433\u043e JIT \u043d\u0435 \u0434\u0435\u043b\u0430\u0435\u0442. RyuJIT \u043d\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0439 \u0446\u0438\u043a\u043b. \u041a\u043e\u0435-\u0447\u0442\u043e \u043e\u043d \u0443\u043c\u0435\u0435\u0442: \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0446\u0438\u043a\u043b, \u0441\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 Vector&lt;T&gt;, \u0432 .NET 9 \u0434\u043e\u0431\u0430\u0432\u0438\u043b\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u044e \u0438\u043d\u0434\u0443\u043a\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445. \u041d\u043e \u0432\u0437\u044f\u0442\u044c \u043e\u0431\u044b\u0447\u043d\u044b\u0439 for \u0441\u043e \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435\u043c \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0438 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u0432 SIMD-\u043f\u043e\u0438\u0441\u043a \u043e\u043d \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u2014 \u043e\u0431\u0449\u0438\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u0430\u0432\u0442\u043e\u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u044e \u0432 \u0442\u0440\u0435\u043a\u0435\u0440\u0435 dotnet\/runtime #12466 \u043e\u0442\u043a\u0440\u044b\u0442 \u0441 2019 \u0433\u043e\u0434\u0430. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 SIMD-\u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0441\u0442\u0440\u043e\u043a \u043b\u0435\u0436\u0438\u0442 \u043d\u0435 \u0432 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u0435, \u0430 \u0432\u043d\u0443\u0442\u0440\u0438 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 BCL \u2014 \u0432\u0435\u043a\u0442\u043e\u0440\u0430 \u0442\u0430\u043c \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u044b \u0432\u0440\u0443\u0447\u043d\u0443\u044e.\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u043f\u0435\u0440\u0432\u0430\u044f: \u0446\u0438\u043a\u043b \u043f\u0440\u043e\u0442\u0438\u0432 BCL\u0417\u0430\u0434\u0430\u0447\u0430 \u2014 \u043d\u0430\u0439\u0442\u0438 \u0441\u0438\u043c\u0432\u043e\u043b \u0432 \u0441\u0442\u0440\u043e\u043a\u0435. \u041f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u2014 \u0446\u0438\u043a\u043b, \u0432\u0442\u043e\u0440\u043e\u0439 \u2014 string.IndexOf:static int IndexOfCharManual(string s, char c){    for (int i = 0; i &lt; s.Length; i++)    {        if (s[i] == c)        {            return i;        }    }    return -1;}s.IndexOf(c);\u0421\u043d\u0438\u043c\u0430\u0435\u043c \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434 \u0446\u0438\u043a\u043b\u0430 \u2014 \u0447\u0438\u0441\u0442\u044b\u0439 \u0441\u043a\u0430\u043b\u044f\u0440, \u043e\u0434\u0438\u043d \u0441\u0438\u043c\u0432\u043e\u043b \u0437\u0430 \u043f\u0440\u043e\u0445\u043e\u0434, \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430:; IndexOfCharManual, .NET 10 \u2014 \u0442\u0435\u043b\u043e \u0446\u0438\u043a\u043b\u0430movzx    r10, word ptr [rcx+2*r8+0x0C]   ; \u0431\u0435\u0440\u0451\u043c \u041e\u0414\u0418\u041d \u0441\u0438\u043c\u0432\u043e\u043bcmp      r10d, edxje       SHORT FOUNDinc      r8dcmp      eax, r8djg       SHORT LOOP\u0410 \u0432\u043d\u0443\u0442\u0440\u0438 IndexOf \u2014 \u0432\u0435\u043a\u0442\u043e\u0440. \u041d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435 \u044d\u0442\u043e ymm (16 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0437\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e), \u043d\u0430 Xeon \u2014 zmm (32 \u0441\u0438\u043c\u0432\u043e\u043b\u0430):; IndexOf \u0432 BCL, \u0434\u0435\u0441\u043a\u0442\u043e\u043fvpbroadcastw ymm0, ymm0     ; \u0440\u0430\u0437\u043c\u043d\u043e\u0436\u0438\u043b\u0438 \u0438\u0441\u043a\u043e\u043c\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u043f\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0443 ; IndexOf \u0432 BCL, Xeonvpbroadcastw zmm0, eax      ; \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0432\u0434\u0432\u043e\u0435 \u0448\u0438\u0440\u0435\u0417\u0430\u043c\u0435\u0440 \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 64 \u041a\u0411 \u0432 \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0438 Miss \u2014 \u0438\u0441\u043a\u043e\u043c\u043e\u0433\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u043d\u0435\u0442, \u043e\u0431\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u0441\u043a\u0430\u043d\u0438\u0440\u0443\u044e\u0442 \u0441\u0442\u0440\u043e\u043a\u0443 \u0446\u0435\u043b\u0438\u043a\u043e\u043c:\u0420\u0438\u0441. 1. \u0421\u0432\u043e\u0439 \u0446\u0438\u043a\u043b \u043f\u0440\u043e\u0442\u0438\u0432 IndexOf \u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0435 64 \u041a\u0411: \u0440\u0430\u0437\u0440\u044b\u0432 \u0432 \u0440\u0430\u0437\u044b\u0420\u0430\u0437\u0440\u044b\u0432 \u2014 \u043e\u0442 8 \u0434\u043e 14 \u0440\u0430\u0437 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043c\u0430\u0448\u0438\u043d\u044b. \u041a \u0442\u0430\u043a\u043e\u043c\u0443 \u0437\u0430\u043c\u0435\u0440\u0443 \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u043e\u0447\u0435\u0432\u0438\u0434\u043d\u044b\u0445 \u0432\u043e\u0437\u0440\u0430\u0436\u0435\u043d\u0438\u044f, \u0440\u0430\u0437\u0431\u0435\u0440\u0443 \u043e\u0431\u0430.\u0410 \u0435\u0441\u043b\u0438 \u0441\u0438\u043c\u0432\u043e\u043b \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0431\u044b\u0441\u0442\u0440\u043e?\u041f\u0435\u0440\u0432\u043e\u0435 \u0432\u043e\u0437\u0440\u0430\u0436\u0435\u043d\u0438\u0435: \u0432 \u0440\u0435\u0430\u043b\u044c\u043d\u043e\u043c \u043a\u043e\u0434\u0435 \u0441\u0438\u043c\u0432\u043e\u043b \u043e\u0431\u044b\u0447\u043d\u043e \u0435\u0441\u0442\u044c, \u0438 \u0446\u0438\u043a\u043b \u0432\u044b\u0445\u043e\u0434\u0438\u0442 \u0438\u0437 \u043f\u043e\u0438\u0441\u043a\u0430 \u0440\u0430\u043d\u044c\u0448\u0435. \u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u2014 \u0441\u0442\u0430\u0432\u0438\u043c \u0441\u0438\u043c\u0432\u043e\u043b \u0440\u043e\u0432\u043d\u043e \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0443 (\u0441\u0446\u0435\u043d\u0430\u0440\u0438\u0439 Hit):\u0420\u0438\u0441. 2. \u0420\u0430\u043d\u043d\u0438\u0439 \u0432\u044b\u0445\u043e\u0434 \u043d\u0435 \u0441\u043f\u0430\u0441\u0430\u0435\u0442: \u0434\u0430\u0436\u0435 \u0441 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u043c \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 BCL \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 13 \u0440\u0430\u0437\u0420\u0430\u043d\u043d\u0438\u0439 \u0432\u044b\u0445\u043e\u0434 \u043d\u0435 \u0441\u043f\u0430\u0441\u0430\u0435\u0442: \u0434\u0430\u0436\u0435 \u043a\u043e\u0433\u0434\u0430 \u0441\u0438\u043c\u0432\u043e\u043b \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435, BCL \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u0432 13 \u0440\u0430\u0437. \u0412\u0435\u043a\u0442\u043e\u0440 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442 \u0442\u0435 \u0436\u0435 \u043f\u043e\u043b\u0441\u0442\u0440\u043e\u043a\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u0430\u0447\u043a\u0430\u043c\u0438 \u043f\u043e 16-32 \u0441\u0438\u043c\u0432\u043e\u043b\u0430, \u0430 \u0446\u0438\u043a\u043b \u2014 \u043f\u043e \u043e\u0434\u043d\u043e\u043c\u0443.\u0410 \u043d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445?\u0412\u0442\u043e\u0440\u043e\u0435 \u0432\u043e\u0437\u0440\u0430\u0436\u0435\u043d\u0438\u0435: \u043d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u0441\u0442\u0440\u043e\u043a\u0430\u0445 \u043d\u0430\u043a\u043b\u0430\u0434\u043d\u044b\u0435 \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 (\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0434\u043b\u0438\u043d\u044b, \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0445\u0432\u043e\u0441\u0442\u0430) \u043c\u043e\u0433\u0443\u0442 \u0441\u044a\u0435\u0441\u0442\u044c \u0432\u044b\u0438\u0433\u0440\u044b\u0448. \u0420\u0430\u0437\u0440\u044b\u0432 \u043f\u043e \u0434\u043b\u0438\u043d\u0430\u043c:\u0420\u0438\u0441. 3. \u0420\u0430\u0437\u0440\u044b\u0432 \u00d75 \u043d\u0430 \u043a\u043e\u0440\u043e\u0442\u043a\u0438\u0445 \u0438 \u00d714\u201315 \u043d\u0430 \u0434\u043b\u0438\u043d\u043d\u044b\u0445 \u2014 BCL \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0434\u043b\u0438\u043d\u0435 (\u043b\u043e\u0433-\u0448\u043a\u0430\u043b\u0430)\u041d\u0430 32 \u0441\u0438\u043c\u0432\u043e\u043b\u0430\u0445 \u0440\u0430\u0437\u0440\u044b\u0432 \u043c\u0435\u043d\u044c\u0448\u0435 \u2014 \u00ab\u0432\u0441\u0435\u0433\u043e\u00bb \u00d75, \u043d\u0430 512 \u0438 \u0434\u0430\u043b\u044c\u0448\u0435 \u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u00d714\u201315. \u041d\u043e \u043f\u043e\u0440\u043e\u0433\u0430, \u0433\u0434\u0435 \u0441\u0432\u043e\u0439 \u0446\u0438\u043a\u043b \u0432\u044b\u0433\u043e\u0434\u043d\u0435\u0435, \u043d\u0435\u0442 \u2014 BCL \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043d\u0430 \u043b\u044e\u0431\u043e\u0439 \u0434\u043b\u0438\u043d\u0435.\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0432\u0442\u043e\u0440\u0430\u044f: AVX-512 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 AVX2\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u043e \u0441\u0435\u0440\u0432\u0435\u0440. \u041f\u043e \u043b\u043e\u0433\u0438\u043a\u0435 \u0443 Xeon \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u0432\u0434\u0432\u043e\u0435 \u0448\u0438\u0440\u0435 \u2014 \u0437\u043d\u0430\u0447\u0438\u0442, \u0438 \u043f\u043e\u0438\u0441\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u0414\u0438\u0437\u0430\u0441\u043c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442: Xeon \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0433\u043e\u043d\u044f\u0435\u0442 zmm, \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u044b \u2014 ymm. \u0410 \u043f\u043e \u043f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0432\u044b\u0448\u043b\u043e \u043d\u0430\u043e\u0431\u043e\u0440\u043e\u0442:\u0420\u0438\u0441. 4. \u041f\u0440\u043e\u043f\u0443\u0441\u043a\u043d\u0430\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e\u0441\u0442\u044c IndexOf: \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u044b \u043d\u0430 AVX2 \u043f\u0440\u043e\u0442\u0438\u0432 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u043d\u0430 AVX-512\u0414\u0435\u0441\u043a\u0442\u043e\u043f\u044b \u2014 103 \u0438 119 \u0413\u0411\/\u0441, \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0435 Xeon \u2014 44. \u0412\u0434\u0432\u043e\u0435 \u0448\u0438\u0440\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u2014 \u0432 \u0434\u0432\u0430 \u0441 \u043b\u0438\u0448\u043d\u0438\u043c \u0440\u0430\u0437\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0440\u0430\u0431\u043e\u0442\u0430. \u041f\u0440\u0438\u0447\u0438\u043d \u0434\u0432\u0435, \u0438 \u043e\u0431\u0435 \u043d\u0435 \u043f\u0440\u043e \u0448\u0438\u0440\u0438\u043d\u0443:\u0427\u0430\u0441\u0442\u043e\u0442\u0430. \u0418\u0433\u0440\u043e\u0432\u043e\u0439 Ryzen \u043a\u0440\u0443\u0442\u0438\u0442\u0441\u044f \u043f\u043e\u0434 5 \u0413\u0413\u0446, Xeon \u2014 2.4 \u0413\u0413\u0446 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u0438 \u0434\u043e 3.4 \u0432 \u0442\u0443\u0440\u0431\u043e. \u041f\u043e\u0438\u0441\u043a \u0432 \u043a\u044d\u0448\u0435 \u0443\u043f\u0438\u0440\u0430\u0435\u0442\u0441\u044f \u0432 \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u044f\u0434\u0440\u0430, \u0430 \u043d\u0435 \u0432 \u0448\u0438\u0440\u0438\u043d\u0443 \u0432\u0435\u043a\u0442\u043e\u0440\u0430.\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0438 \u043c\u0430\u0441\u043e\u0447\u043d\u044b\u0445 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0439. AVX-512-\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0434\u0451\u0442 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u043c\u0430\u0441\u043e\u0447\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 (k1 \u0432 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0435 \u043d\u0438\u0436\u0435), \u0438 \u044d\u0442\u0430 \u0441\u0432\u044f\u0437\u043a\u0430 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 AVX2-\u043f\u0430\u0440\u044b \u00ab\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 + \u0441\u043d\u044f\u0442\u0438\u0435 \u043c\u0430\u0441\u043a\u0438\u00bb \u2014 \u043d\u0430 \u0440\u044f\u0434\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 AVX2-\u043a\u043e\u0434 \u0438\u0437-\u0437\u0430 \u044d\u0442\u043e\u0433\u043e \u043e\u0431\u0433\u043e\u043d\u044f\u0435\u0442.\u042d\u0442\u043e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u0430\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u2014 \u043e\u043d\u0430 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u0430 \u0432 \u0442\u0440\u0435\u043a\u0435\u0440\u0430\u0445 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0442\u043e\u0440\u043e\u0432. \u0412 LLVM (llvm-project #91302) \u043f\u043e\u043a\u043e\u043c\u0430\u043d\u0434\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u044e\u0442, \u0447\u0442\u043e AVX-512-\u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0447\u0435\u0440\u0435\u0437 \u043c\u0430\u0441\u043a\u0438 \u0438\u043c\u0435\u0435\u0442 \u0431\u041e\u043b\u044c\u0448\u0443\u044e \u0437\u0430\u0434\u0435\u0440\u0436\u043a\u0443, \u0447\u0435\u043c AVX2, \u0438 \u043d\u0430 \u0440\u044f\u0434\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 AVX2-\u043a\u043e\u0434 \u0432 \u0440\u0430\u0437\u044b \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u041f\u043e\u0445\u043e\u0436\u0435\u0435 \u043b\u043e\u0432\u0438\u043b\u0438 \u0432 OpenVINO (issue #11710): Xeon \u0441 AVX-512 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0430 \u0441 AVX2. \u0412\u044b\u0432\u043e\u0434 \u043f\u0440\u043e\u0441\u0442\u043e\u0439: \u0448\u0438\u0440\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u2014 \u043d\u0435 \u0437\u043d\u0430\u0447\u0438\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435. \u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430\u0434\u043e \u043d\u0435 \u043d\u0430 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u044e \u0432 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0435, \u0430 \u043d\u0430 \u0437\u0430\u043c\u0435\u0440 \u043d\u0430 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435.\u0421\u0440\u0430\u0437\u0443 \u0437\u0430\u043a\u0440\u043e\u044e \u0432\u043e\u043f\u0440\u043e\u0441 \u043f\u0440\u043e ReadyToRun \u2014 \u00ab\u043c\u043e\u0436\u0435\u0442, \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0441\u043e\u0431\u0440\u0430\u043d\u0430 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043f\u043e\u0434 \u043e\u0431\u0449\u0435\u0435 \u0436\u0435\u043b\u0435\u0437\u043e?\u00bb. \u041f\u0440\u043e\u0433\u043d\u0430\u043b \u0441 DOTNET_ReadyToRun=0 (\u043f\u0435\u0440\u0435-JIT \u043f\u043e\u0434 \u0441\u0432\u043e\u0451 \u0436\u0435\u043b\u0435\u0437\u043e \u043d\u0430 \u043c\u0435\u0441\u0442\u0435): \u0440\u0430\u0437\u043d\u0438\u0446\u0430 \u043d\u043e\u043b\u044c, 2.96 \u043f\u0440\u043e\u0442\u0438\u0432 2.95 \u00b5s. \u0414\u0435\u043b\u043e \u0432 \u0447\u0430\u0441\u0442\u043e\u0442\u0435, \u0430 \u043d\u0435 \u0432 \u043f\u0440\u0435\u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438.\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0442\u0440\u0435\u0442\u044c\u044f: \u043f\u0438\u0448\u0435\u043c \u0441\u0432\u043e\u0439 SIMD \u2014 \u0438 \u0434\u0435\u043b\u0430\u0435\u043c \u0445\u0443\u0436\u0435JIT \u0446\u0438\u043a\u043b\u044b \u043d\u0435 \u0432\u0435\u043a\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u0442, \u043d\u043e \u0432 .NET \u0435\u0441\u0442\u044c System.Runtime.Intrinsics \u2014 SIMD-\u043f\u043e\u0438\u0441\u043a \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0430\u043c\u043e\u043c\u0443. \u042f \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u043b \u0434\u0432\u0443\u043c\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u0430\u043c\u0438.\u0421\u043f\u043e\u0441\u043e\u0431 1: AVX2 \u043d\u0430 Vector256\u0417\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c \u043f\u043e 16 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432, \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u043c, \u0438\u0449\u0435\u043c \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435 \u043f\u043e \u043c\u0430\u0441\u043a\u0435:Vector256&lt;ushort&gt; target = Vector256.Create((ushort)c);for (; i &lt;= length &#8212; 16; i += 16){    Vector256&lt;ushort&gt; block = Avx.LoadVector256((ushort*)(p + i));    Vector256&lt;ushort&gt; eq = Avx2.CompareEqual(block, target);    int mask = Avx2.MoveMask(eq.AsByte());    if (mask != 0)    {        return i + BitOperations.TrailingZeroCount(mask) \/ 2;    }}\/\/ + \u0435\u0449\u0451 \u0434\u0435\u0441\u044f\u0442\u043e\u043a \u0441\u0442\u0440\u043e\u043a \u043d\u0430 \u0445\u0432\u043e\u0441\u0442 (\u0441\u0438\u043c\u0432\u043e\u043b\u044b, \u043d\u0435 \u0432\u043b\u0435\u0437\u0448\u0438\u0435 \u0432 \u0432\u0435\u043a\u0442\u043e\u0440)\u0414\u0438\u0437\u0430\u0441\u043c \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0430\u0435\u0442 \u2014 AVX2 \u0446\u0435\u043b\u044b\u043c\u0438 ymm:vpbroadcastw ymm0, ymm0                    ; \u0440\u0430\u0437\u043c\u043d\u043e\u0436\u0438\u043b\u0438 \u0438\u0441\u043a\u043e\u043c\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043bvpcmpeqw ymm1, ymm0, ymmword ptr [rcx&#8230;]  ; \u0441\u0440\u0430\u0432\u043d\u0438\u043b\u0438 16 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 \u0440\u0430\u0437\u043e\u043cvpmovmskb r9d, ymm1                        ; \u0441\u043e\u0431\u0440\u0430\u043b\u0438 \u043c\u0430\u0441\u043a\u0443 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0439\u0423\u0441\u043a\u043e\u0440\u0438\u043b \u0441\u043a\u0430\u043b\u044f\u0440 \u0432 \u0440\u0430\u0437\u044b \u2014 \u0441 15.4 \u0434\u043e 1.9 \u00b5s \u043d\u0430 Ryzen. \u041d\u043e BCL \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u0432\u043f\u0435\u0440\u0435\u0434\u0438 (1.11). \u0423\u0436\u0435 \u043d\u0435\u043f\u043b\u043e\u0445\u043e\u0439 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442, \u043d\u043e \u043d\u0435 \u043f\u043e\u0431\u0435\u0434\u0430.\u0421\u043f\u043e\u0441\u043e\u0431 2: AVX-512 \u043d\u0430 Vector512\u041b\u043e\u0433\u0438\u0447\u043d\u044b\u0439 \u0448\u0430\u0433: \u0443 Xeon \u0435\u0441\u0442\u044c AVX-512, \u0432\u043e\u0437\u044c\u043c\u0443 512-\u0431\u0438\u0442\u043d\u044b\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u044b \u2014 32 \u0441\u0438\u043c\u0432\u043e\u043b\u0430 \u0437\u0430 \u0448\u0430\u0433 \u0432\u043c\u0435\u0441\u0442\u043e 16. \u0422\u043e\u0442 \u0436\u0435 \u043a\u043e\u0434, \u043d\u043e \u043d\u0430 Vector512:Vector512&lt;ushort&gt; target = Vector512.Create((ushort)c);for (; i &lt;= length &#8212; 32; i += 32){    Vector512&lt;ushort&gt; block = Avx512F.LoadVector512((ushort*)(p + i));    ulong mask = Avx512BW.CompareEqual(block, target)                        .ExtractMostSignificantBits();    if (mask != 0)    {        return i + BitOperations.TrailingZeroCount(mask);    }}\u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u2014 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435 \u0432 \u0434\u0432\u0430 \u0440\u0430\u0437\u0430. \u0420\u0435\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c:\u0420\u0438\u0441. 5. \u0421\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0439 \u0432\u0435\u043a\u0442\u043e\u0440: \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435 AVX-512 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 AVX2 \u0432 8\u201310 \u0440\u0430\u0437 (\u043a\u0440\u0430\u0441\u043d\u044b\u043c)\u041d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0430\u0445 AVX-512-\u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0434\u0430\u043b \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u0435 \u0432 8\u201310 \u0440\u0430\u0437 \u043f\u0440\u043e\u0442\u0438\u0432 AVX2-\u0432\u0435\u0440\u0441\u0438\u0438: 15.5 \u00b5s \u043d\u0430 Ryzen \u043f\u0440\u043e\u0442\u0438\u0432 1.9. \u041d\u0430 Xeon \u2014 \u0434\u0430, \u0447\u0443\u0442\u044c \u0431\u044b\u0441\u0442\u0440\u0435\u0435 ymm-\u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 (3.06 \u043f\u0440\u043e\u0442\u0438\u0432 3.36), \u043d\u043e \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u0435\u0435 IndexOf. \u041d\u0430\u0433\u043b\u044f\u0434\u043d\u043e (\u043b\u043e\u0433-\u0448\u043a\u0430\u043b\u0430, \u0438\u043d\u0430\u0447\u0435 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u043d\u044b\u0439 zmm \u043d\u0435 \u0432\u043b\u0435\u0437\u0430\u0435\u0442):\u0420\u0438\u0441. 6. \u0421\u0430\u043c\u043e\u043f\u0438\u0441\u043d\u044b\u0439 AVX-512 \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435 \u2014 \u043a\u0430\u0442\u0430\u0441\u0442\u0440\u043e\u0444\u0430 (\u043b\u043e\u0433-\u0448\u043a\u0430\u043b\u0430)\u041f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a. \u041d\u0438 \u0443 Ryzen 9 5950X (Zen 3), \u043d\u0438 \u0443 i9-10900KF (Comet Lake) \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0433\u043e AVX-512 \u043d\u0435\u0442 (\u0443 10900KF \u043f\u043e \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 Intel ARK \u0438\u0437 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u2014 \u0442\u043e\u043b\u044c\u043a\u043e SSE4.1\/4.2 \u0438 AVX2): Avx512BW.IsSupported \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 false, \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u0430\u044f \u0432\u0435\u0442\u043a\u0430 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f, \u0438 \u0432\u0435\u0441\u044c \u043f\u043e\u0438\u0441\u043a \u0434\u0435\u043b\u0430\u0435\u0442 \u0441\u043a\u0430\u043b\u044f\u0440\u043d\u044b\u0439 \u0445\u0432\u043e\u0441\u0442 \u2014 \u043e\u0442\u0441\u044e\u0434\u0430 \u0446\u0438\u0444\u0440\u044b \u043f\u043e\u0440\u044f\u0434\u043a\u0430 \u043e\u0431\u044b\u0447\u043d\u043e\u0433\u043e \u0446\u0438\u043a\u043b\u0430. \u0422\u043e \u0435\u0441\u0442\u044c \u00ab\u0431\u0435\u0440\u0443 \u0441\u0430\u043c\u043e\u0435 \u0448\u0438\u0440\u043e\u043a\u043e\u0435\u00bb \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435 \u043e\u0431\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043d\u0435 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u0435\u043c, \u0430 \u043f\u0440\u043e\u0432\u0430\u043b\u043e\u043c \u0432 10 \u0440\u0430\u0437 \u2014 \u0438 \u0432\u044b\u044f\u0441\u043d\u0438\u0442\u0441\u044f \u044d\u0442\u043e \u0432 \u043b\u0443\u0447\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430 \u043f\u0440\u043e\u0434\u0435.\u0420\u0430\u0437\u043d\u0438\u0446\u0430 \u0441 IndexOf \u0432\u043e\u0442 \u0432 \u0447\u0451\u043c: \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u043d\u0435 \u0431\u0435\u0440\u0451\u0442 AVX-512 \u0432\u0441\u043b\u0435\u043f\u0443\u044e. \u041e\u043d\u0430 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442, \u0433\u0434\u0435 \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u0432\u0435\u043a\u0442\u043e\u0440 \u0440\u0435\u0430\u043b\u044c\u043d\u043e \u0431\u044b\u0441\u0442\u0440\u0435\u0435, \u0438 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u2014 zmm \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u043e\u043c Xeon, ymm \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435, \u043e\u0431\u044b\u0447\u043d\u044b\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0438 \u043d\u0430 \u0441\u0442\u0430\u0440\u043e\u043c \u0436\u0435\u043b\u0435\u0437\u0435, \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0432\u0435\u0442\u043a\u0438 \u043f\u043e\u0434 ARM. \u0414\u0438\u0437\u0430\u0441\u043c \u044d\u0442\u043e \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043f\u0440\u044f\u043c\u043e \u2014 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 .NET 10, \u0434\u0432\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0430:; IndexOf \u0432 BCL \u2014 \u0434\u0435\u0441\u043a\u0442\u043e\u043f (Ryzen), \u043f\u0443\u0442\u044c AVX2vpbroadcastw ymm0, ymm0                    ; \u0441\u0438\u043c\u0432\u043e\u043b \u043d\u0430 \u0432\u0435\u0441\u044c ymm \u2014 16 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432vpcmpeqw ymm1, ymm0, ymmword ptr [rcx]     ; \u0441\u0440\u0430\u0432\u043d\u0438\u043b\u0438 \u0431\u043b\u043e\u043a \u0440\u0430\u0437\u043e\u043c ; IndexOf \u0432 BCL \u2014 \u0442\u043e\u0442 \u0436\u0435 \u0431\u0438\u043d\u0430\u0440\u044c \u043d\u0430 Xeon, \u043f\u0443\u0442\u044c AVX-512vpbroadcastw zmm0, eax                     ; \u0441\u0438\u043c\u0432\u043e\u043b \u043d\u0430 \u0432\u0435\u0441\u044c zmm \u2014 32 \u0441\u0438\u043c\u0432\u043e\u043b\u0430vmovups  zmm1, zmmword ptr [rcx]           ; \u0433\u0440\u0443\u0437\u0438\u043c 64 \u0431\u0430\u0439\u0442\u0430vpcmpeqw k1, zmm1, zmm0                    ; \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0441\u0440\u0430\u0437\u0443 \u0432 \u043c\u0430\u0441\u043e\u0447\u043d\u044b\u0439 \u0440\u0435\u0433\u0438\u0441\u0442\u0440kortestd k1, k1                            ; \u0435\u0441\u0442\u044c \u043b\u0438 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u0435\u0427\u0442\u043e\u0431\u044b \u043f\u043e\u0432\u0442\u043e\u0440\u0438\u0442\u044c \u044d\u0442\u043e, \u043f\u0440\u0438\u0434\u0451\u0442\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043f\u043e \u0432\u0435\u0442\u043a\u0435 \u043f\u043e\u0434 \u043a\u0430\u0436\u0434\u0443\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0443 \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0445\u0432\u043e\u0441\u0442\u043e\u0432 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u2014 \u0442\u043e \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u043e, \u0447\u0442\u043e \u0443\u0436\u0435 \u043b\u0435\u0436\u0438\u0442 \u0432 IndexOf.\u041c\u043e\u0440\u0430\u043b\u044c: \u0441\u0432\u043e\u0439 SIMD \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0438 \u044d\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u043d\u0430\u0432\u044b\u043a \u2014 \u043d\u043e \u0441\u043e\u0440\u0435\u0432\u043d\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0441 BCL \u0432 \u0431\u0430\u0437\u043e\u0432\u044b\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f\u0445 \u0441\u043c\u044b\u0441\u043b\u0430 \u043d\u0435\u0442. \u0422\u0430\u043c \u0443\u0436\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043e \u043b\u0443\u0447\u0448\u0435, \u043f\u043e\u0434 \u0432\u0441\u0435 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u0438 \u0441 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u043c \u0432\u044b\u0431\u043e\u0440\u043e\u043c \u0448\u0438\u0440\u0438\u043d\u044b \u0432\u0435\u043a\u0442\u043e\u0440\u0430. \u00ab\u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439\u00bb Vector512 \u043d\u0430 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0435 \u2014 \u044d\u0442\u043e \u00d710 \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u0435 \u0438 unsafe \u0432 \u043f\u0440\u0438\u0434\u0430\u0447\u0443.\u0418\u0441\u0442\u043e\u0440\u0438\u044f \u0447\u0435\u0442\u0432\u0451\u0440\u0442\u0430\u044f: \u0447\u0442\u043e \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0435\u041f\u043e\u0438\u0441\u043a \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043d\u0430\u0431\u043e\u0440\u0430 \u2014 SearchValues\u0418\u0449\u0435\u0442\u0435 \u043b\u044e\u0431\u043e\u0439 \u0441\u0438\u043c\u0432\u043e\u043b \u0438\u0437 \u043d\u0430\u0431\u043e\u0440\u0430 \u2014 \u0433\u043b\u0430\u0441\u043d\u0443\u044e, \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c, \u0437\u0430\u043f\u0440\u0435\u0449\u0451\u043d\u043d\u044b\u0439 \u0441\u0438\u043c\u0432\u043e\u043b? \u041d\u0435 \u043f\u0438\u0448\u0438\u0442\u0435 \u0446\u0435\u043f\u043e\u0447\u043a\u0443 || ch == &#8230;. \u0421 .NET 8 \u0435\u0441\u0442\u044c SearchValues \u2014 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0435 \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u0432 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043f\u043e\u043b\u0435:private static readonly SearchValues&lt;char&gt; Vowels = SearchValues.Create(&#171;aeiou&#187;); int i = text.AsSpan().IndexOfAny(Vowels);\u0426\u0438\u0444\u0440\u044b \u043d\u0430 64 \u041a\u0411 \u0442\u0435\u043a\u0441\u0442\u0430 \u0431\u0435\u0437 \u0433\u043b\u0430\u0441\u043d\u044b\u0445: \u043f\u0435\u0440\u0435\u0431\u043e\u0440 \u0432 \u0446\u0438\u043a\u043b\u0435 \u2014 231 \u00b5s, IndexOfAny \u2014 2.9, SearchValues \u2014 1.5. \u0421\u043e \u0441\u0442\u0430\u0440\u044b\u043c&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-487447","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/487447","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=487447"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/487447\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=487447"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=487447"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=487447"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}