{"id":312357,"date":"2020-10-31T15:00:31","date_gmt":"2020-10-31T15:00:31","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=312357"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=312357","title":{"rendered":"\u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043d\u0430 CPU \u0438 GPU"},"content":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\n<h2>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 CUDA Runtime API \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439. \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 CPU \u0438 GPU \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439<\/h2>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430 C++ \u043d\u0430 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u043c \u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435(\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Nvidia CUDA Runtime API \u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u043c GPU Nvidia). CUDA API \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435. \u0424\u0430\u0439\u043b c++ \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 cuda, \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <b>.cu<\/b>.<br \/>  \u0421\u0445\u0435\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u043d\u0438\u0436\u0435. <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/hm\/7d\/r1\/hm7dr1qw0yltbjj3ax9zp6pio5w.png\"><\/p>\n<p>  \u0417\u0430\u0434\u0430\u0447\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 X, \u043f\u0440\u0438 \u0432\u043e\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432 \u0441\u0442\u0435\u043f\u0435\u043d\u044c degree_of, \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0441\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e max_number. \u0421\u0440\u0430\u0437\u0443 \u043e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0432\u0441\u0435 \u0447\u0438\u0441\u043b\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f GPU, \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043a\u0430\u0436\u0434\u044b\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u043c, \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u0438\u0434:<br \/>  <a name=\"habracut\"><\/a>  <\/p>\n<pre><code class=\"cpp\">int\u00a0degree_of=2; int\u00a0degree_of_max=Number_degree_of_max[0];\/\/\u041c\u0430\u0441\u0441\u0438\u0432\u00a0\u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0439\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u00a0\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439\u00a0\u0441\u0442\u0435\u043f\u0435\u043d\u0438\u00a0\u0447\u0438\u0441\u043b\u0430 int\u00a0x=thread;\/\/\u043d\u043e\u043c\u0435\u0440\u00a0\u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e\u00a0\u043f\u043e\u0442\u043e\u043a\u0430 int\u00a0max_number=INPUT[0];\/\/\u041c\u0430\u0441\u0441\u0438\u0432\u00a0\u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0439\u00a0\u0447\u0438\u0441\u043b\u043e,\u00a0\u043a\u043e\u0442\u043e\u0440\u043e\u0435\u00a0\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u00a0\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c int\u00a0Number=1; int\u00a0Degree; bool\u00a0BREAK=false;\/\/\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f\u00a0\u0434\u043b\u044f\u00a0\u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f\u00a0while while(degree_of&lt;=degree_of_max&amp;&amp;!BREAK){ \u00a0\u00a0\u00a0\u00a0Number=1; \u00a0\u00a0\u00a0\u00a0for(int\u00a0i=0;i&lt;degree_of;i++){ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Number*=x; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Degree=degree_of; \u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0if(Number==max_number){ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0OUT_NUMBER[thread]=X;\/\/OUT_NUMBER\u00a0\u041c\u0430\u0441\u0441\u0438\u0432\u00a0\u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0439\u00a0\u0447\u0438\u0441\u043b\u0430\u00a0\u043a\u043e\u0442\u043e\u0440\u044b\u0435\u00a0\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u00a0\u0432\u043e\u0437\u0432\u0435\u0441\u0442\u0438\u00a0\u0432\u00a0\u0441\u0442\u0435\u043f\u0435\u043d\u044c\u00a0Degree\u00a0\u0434\u043b\u044f\u00a0\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f\u00a0\u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e\u00a0\u0447\u0438\u0441\u043b\u0430 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0OUT_DEGREE[thread]=Degree;\/\/\u00a0OUT_DEGREE\u00a0\u041c\u0430\u0441\u0441\u0438\u0432\u00a0\u0445\u0440\u0430\u043d\u044f\u0449\u0438\u0439\u00a0\u0441\u0442\u0435\u043f\u0435\u043d\u044c\u00a0\u0432\u00a0\u043a\u043e\u0442\u043e\u0440\u0443\u044e\u00a0\u043d\u0443\u0436\u043d\u043e\u00a0\u0432\u043e\u0437\u0432\u0435\u0441\u0442\u0438\u00a0\u0447\u0438\u0441\u043b\u043e\u00a0X\u00a0\u0434\u043b\u044f\u00a0\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f\u00a0\u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e\u00a0\u0447\u0438\u0441\u043b\u0430 \u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0degree_of++; \u00a0\u00a0\u00a0\/\/\u0412\u00a0\u0441\u043b\u0443\u0447\u0430\u0435\u00a0\u0432\u044b\u0445\u043e\u0434\u0430\u00a0\u0437\u0430\u00a0\u043f\u0440\u0435\u0434\u0435\u043b\u00a0: if(degree_of&gt;degree_of_max||Number&gt;max_number){ \u00a0\u00a0\u00a0\u00a0BREAK=true; } }  <\/code><\/pre>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043d\u0430 CPU<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">#include &lt;iostream&gt; #include&lt;vector&gt; #include&lt;string&gt;\/\/\u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043b\u044f getline #include&lt;thread&gt; #include&lt;fstream&gt; using namespace std; int Running_thread_counter = 0; void Upload_to_CPU(unsigned long long  *Number, unsigned long long  *Stepn, bool *Stop,unsigned long long  *INPUT, unsigned long long  *max, int THREAD); void Upload_to_CPU(unsigned long long  *Number, unsigned long long  *Stepn, bool *Stop,unsigned long long  *INPUT, unsigned long long  *max, int THREAD) { \tint thread = THREAD; \tRunning_thread_counter++; \tunsigned long long  MAX_DEGREE_OF = max[0]; \tint X = thread; \tunsigned long long  Calculated_number = 1; \tunsigned long long  DEGREE_OF = 2; \tunsigned long long   INP = INPUT[0]; \tStop[thread] = false; \tbool BREAK = false; \tif (X != 0 &amp;&amp; X != 1) { \t\twhile (!BREAK) { \t\t\tif (DEGREE_OF &lt;= MAX_DEGREE_OF) { \t\t\t\tCalculated_number = 1; \t\t\t\tfor (int counter = 0; counter &lt; DEGREE_OF; counter++) { \t\t\t\t\tCalculated_number *= X; \t\t\t\t} \t\t\t\tif (Calculated_number == INP) { \t\t\t\t\tStepn[thread] = DEGREE_OF; \t\t\t\t\tNumber[thread] = X; \t\t\t\t\tStop[thread] = true; \t\t\t\t\tBREAK = true; \t\t\t\t} \t\t\t\tDEGREE_OF++; \t\t\t} \t\t\telse { BREAK = true; } \t\t} \t} } void Parallelize_to_threads(unsigned long long  *Number, unsigned long long  *Stepn, bool *Stop,unsigned long long  *INPUT, unsigned long long  *max, int size); int main() { \tint size = 1000; \tunsigned long long  *Number = new unsigned long long[size], *Degree_of = new unsigned long long[size]; \tunsigned long long  *Max_Degree_of = new unsigned long long[1]; \tunsigned long long  *INPUT_NUMBER = new unsigned long long[1]; \tMax_Degree_of[0] = 7900;  \tINPUT_NUMBER[0] = 216 * 216 * 216; \tifstream inp(&quot;input.txt&quot;); \tif (inp.is_open()) { \t\tstring t; \t\tvector&lt;unsigned long long&gt;IN; \t\twhile (getline(inp, t)) { \t\t\tIN.push_back(stol(t));  \t\t} \t\tINPUT_NUMBER[0] = IN[0];\/\/\u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \t\tMax_Degree_of[0] = IN[1];\/\/\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \t} \telse { \t\tofstream error(&quot;error.txt&quot;); \t\tif (error.is_open()) { \t\t\terror &lt;&lt; &quot;No file &quot; &lt;&lt; '&quot;' &lt;&lt; &quot;input.txt&quot; &lt;&lt; '&quot;' &lt;&lt; endl; \t\t\terror &lt;&lt; &quot;Please , create a file&quot; &lt;&lt; '&quot;' &lt;&lt; &quot;input.txt&quot; &lt;&lt; '&quot;' &lt;&lt; endl; \t\t\terror &lt;&lt; &quot;One read:input number&quot; &lt;&lt; endl; \t\t\terror &lt;&lt; &quot;Two read:input max stepen&quot; &lt;&lt; endl; \t\t\terror &lt;&lt; &quot;.&quot; &lt;&lt; endl; \t\t\terror.close(); \t\t\tINPUT_NUMBER[0] = 1; \t\t\tMax_Degree_of[0] = 1; \t\t} \t} \t\/\/\u0440\u0430\u0441\u0441\u043a\u043e\u043c\u0435\u0442\u0440\u0438\u0440\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 , \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u0438\u0434\u0435\u0442\u044c \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u043e\u043a\u043d\u0435 \u043a\u043e\u043d\u0441\u043e\u043b\u0438  \t\/\/cout &lt;&lt; INPUT[0] &lt;&lt; endl; \tbool *Elements_that_need_to_stop = new bool[size]; \tParallelize_to_threads(Number, Degree_of, Elements_that_need_to_stop, INPUT_NUMBER, Max_Degree_of, size); \tvector&lt;unsigned long long&gt;NUMBER, DEGREEOF; \tfor (int i = 0; i &lt; size; i++) { \t\tif (Elements_that_need_to_stop[i]) { \t\t\tif (Degree_of[i] &lt; INPUT_NUMBER[0] &amp;&amp; Number[i] &lt; INPUT_NUMBER[0]) {\/\/\u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043d\u0430 \u043e\u0448\u0438\u0431\u043a\u0438  \t\t\t\tNUMBER.push_back(Number[i]); \t\t\t\tDEGREEOF.push_back(Degree_of[i]); \t\t\t} \t\t} \t} \t\/\/\u0440\u0430\u0441\u0441\u043a\u043e\u043c\u0435\u0442\u0440\u0438\u0440\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 , \u0435\u0441\u043b\u0438 \u0445\u043e\u0442\u0438\u0442\u0435 \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \t\/\/\u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043c\u0435\u0434\u043b\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443  \t\/* \tfor (int f = 0; f &lt; NUMBER.size(); f++) { \t\t\tcout &lt;&lt; NUMBER[f] &lt;&lt; &quot;^&quot; &lt;&lt; DEGREEOF[f] &lt;&lt; &quot;=&quot; &lt;&lt; INPUT_NUMBER[0] &lt;&lt; endl; \t\t} \t\t*\/ \tofstream out(&quot;out.txt&quot;); \tif (out.is_open()) { \t\tfor (int f = 0; f &lt; NUMBER.size(); f++) { \t\t\tout &lt;&lt; NUMBER[f] &lt;&lt; &quot;^&quot; &lt;&lt; DEGREEOF[f] &lt;&lt; &quot;=&quot; &lt;&lt; INPUT_NUMBER[0] &lt;&lt; endl; \t\t} \t\tout.close(); \t} } void Parallelize_to_threads(unsigned long long  *Number, unsigned long long  *Stepn, bool *Stop,unsigned long long  *INPUT, unsigned long long  *max, int size) { \tthread *T = new thread[size]; \tRunning_thread_counter = 0; \tfor (int i = 0; i &lt; size; i++) { \t\tT[i] = thread(Upload_to_CPU, Number, Stepn, Stop, INPUT, max, i); \t\tT[i].detach(); \t} \twhile (Running_thread_counter &lt; size - 1);\/\/\u0434\u043e\u0436\u0434\u0430\u0442\u044c\u0441\u044f \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432  } <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u044c\u044e. <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u041a\u043e\u0434 \u0434\u043b\u044f  \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439  \u043d\u0430 GPU<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cpp\">\/\/\u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 cuda_runtime.h \u0438 device_launch_parameters.h \/\/\u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 cyda #include &quot;cuda_runtime.h&quot; #include &quot;device_launch_parameters.h&quot; #include&lt;vector&gt; #include&lt;string&gt;\/\/\u0434\u043b\u044f getline #include &lt;stdio.h&gt; #include&lt;fstream&gt; using namespace std; __global__ void Upload_to_GPU(unsigned long long  *Number,unsigned long long  *Stepn, bool *Stop,unsigned long long  *INPUT,unsigned long long  *max) { \tint thread = threadIdx.x; \tunsigned long long  MAX_DEGREE_OF = max[0];     int X = thread; \tunsigned long long  Calculated_number = 1; \tunsigned long long  Current_degree_of_number = 2;     unsigned long long   Original_numberP = INPUT[0]; \tStop[thread] = false; \tbool BREAK = false; \tif (X!=0&amp;&amp;X!=1) { \t\twhile (!BREAK) { \t\t\tif (Current_degree_of_number &lt;= MAX_DEGREE_OF) { \t\t\t\tCalculated_number = 1; \t\t\t\tfor (int counter = 0; counter &lt; Current_degree_of_number; counter++) { \t\t\t\t Calculated_number\t*=X; \t\t\t\t} \t\t\t\tif (Calculated_number == Original_numberP) { \t\t\t\t\tStepn[thread] = Current_degree_of_number; \t\t\t\t\tNumber[thread] = X; \t\t\t\t\tStop[thread] = true; \t\t\t\t\tBREAK = true; \t\t\t\t} \t\t\t\tCurrent_degree_of_number++; \t\t\t} \t\t\telse { BREAK = true; } \t\t} \t} } cudaError_t Configure_cuda(unsigned long long *Number, unsigned long long  *Stepn, bool *Stop,unsigned long long  *INPUT, unsigned long long  *max,unsigned int size); int main() { \tint size = 1000;     unsigned long long  *Number=new unsigned long long [size], *Degree_of=new unsigned long long [size]; \tunsigned long long  *Max_degree_of = new unsigned long long [1]; \tunsigned long long  *INPUT_NUMBER = new unsigned long long [1];    Max_degree_of[0] = 7900; \t \t \tifstream inp(&quot;input.txt&quot;); \tif (inp.is_open()) { \t\tstring text; \t\tvector&lt;unsigned long long&gt;IN; \t\twhile (getline(inp, text)) { \t\t\tIN.push_back( stol(text)); \t\t\t\t \t\t} \t\tINPUT_NUMBER[0] = IN[0]; \t\tMax_degree_of[0] = IN[1]; \t} \telse { \t\tofstream error(&quot;error.txt&quot;); \t\tif (error.is_open()) { \t\t\terror&lt;&lt;&quot;No file &quot;&lt;&lt;'&quot;'&lt;&lt;&quot;input.txt&quot;&lt;&lt;'&quot;'&lt;&lt;endl; \t\t\terror&lt;&lt;&quot;Please , create a file&quot; &lt;&lt; '&quot;' &lt;&lt; &quot;input.txt&quot; &lt;&lt; '&quot;' &lt;&lt; endl; \t\t\terror &lt;&lt; &quot;One read:input number&quot; &lt;&lt; endl; \t\t\terror &lt;&lt; &quot;Two read:input max stepen&quot; &lt;&lt; endl; \t\t\terror &lt;&lt; &quot;.&quot; &lt;&lt; endl; \t\t\terror.close(); \t\t\tINPUT_NUMBER[0] = 1; \t\t\tMax_degree_of[0] = 1; \t\t} \t} \t \t \tbool *Elements_that_need_to_stop = new bool[size];     \/\/ \u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043c\u0430\u0441\u0441\u0438\u0432\u043e\u0432 \u0432 cuda \tcudaError_t cudaStatus =  Configure_cuda(Number, Degree_of, Elements_that_need_to_stop, INPUT_NUMBER, Max_degree_of, size);     if (cudaStatus != cudaSuccess) {         fprintf(stderr, &quot;addWithCuda failed!&quot;);         return 1;     } \tvector&lt;unsigned long long&gt;NUMBER, DEGREEOF; \tfor (int i = 0; i &lt; size; i++) { \t\tif (Elements_that_need_to_stop[i]) { \t\t\tNUMBER.push_back(Number[i]);\/\/\u0437\u0430\u043d\u0435\u0441\u0442\u0438 \u0432 \u0432\u0435\u043a\u0442\u043e\u0440 \u0447\u0438\u0441\u043b\u043e \t\t\tDEGREEOF.push_back(Degree_of[i]);\/\/\u0437\u0430\u043d\u0435\u0441\u0442\u0438 \u0432 \u0432\u0435\u043a\u0442\u043e\u0440 \u0441\u0442\u0435\u043f\u0435\u043d\u044c \u0447\u0438\u0441\u043b\u0430 \t\t} \t} \t\/\/\u0440\u0430\u0441\u043a\u043e\u043c\u0435\u043d\u0442\u0438\u0440\u0443\u0439\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 , \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u0432\u0435\u0441\u0442\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c \t\/* \tfor (int f = 0; f &lt; NUMBER.size(); f++) { \t\tcout &lt;&lt; NUMBER[f] &lt;&lt; &quot;^&quot; &lt;&lt; DEGREEOF[f] &lt;&lt; &quot;=&quot; &lt;&lt; INPUT_NUMBER[0] &lt;&lt; endl; \t}*\/ \tofstream out(&quot;out.txt&quot;); \tif (out.is_open()) { \t\tfor (int f = 0; f &lt; NUMBER.size(); f++) { \t\t\tout &lt;&lt; NUMBER[f] &lt;&lt; &quot;^&quot; &lt;&lt; DEGREEOF[f] &lt;&lt; &quot;=&quot; &lt;&lt; INPUT_NUMBER[0] &lt;&lt; endl; \t\t} \t\tout.close(); \t} \t     \/\/\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e\u043c     cudaStatus = cudaDeviceReset();     if (cudaStatus != cudaSuccess) {         fprintf(stderr, &quot;cudaDeviceReset failed!&quot;);         return 1;     }      return 0; }   cudaError_t  Configure_cuda(unsigned long long  *Number, unsigned long long *Degree_of, bool *Stop,unsigned long long *INPUT, unsigned long long *max,unsigned int size) { \tunsigned long long *dev_Number = 0; \tunsigned long long *dev_Degree_of = 0; \tunsigned long long *dev_INPUT = 0; \tunsigned long long *dev_Max = 0; \tbool *dev_Elements_that_need_to_stop;  \tcudaError_t cudaStatus;  \t\/\/ \u0423\u0421\u0422\u0410\u041d\u041e\u0412\u041a\u0410 \u0418\u0421\u041f\u041e\u041b\u042c\u0417\u0423\u0415\u041c\u041e\u0413\u041e GPU  \tcudaStatus = cudaSetDevice(0); \tif (cudaStatus != cudaSuccess) { \t\tfprintf(stderr, &quot;cudaSetDevice failed!  Do you have a CUDA-capable GPU installed?&quot;); \t\tgoto Error; \t}  \t\/\/ \u0420\u0415\u0417\u0415\u0420\u0412\u0418\u0420\u041e\u0412\u0410\u041d\u0418\u0415 \u041c\u0415\u0421\u0422\u0410 \u0412 \u041f\u0410\u041c\u042f\u0422\u0418 \u041f\u041e\u0414 \u0414\u0410\u041d\u041d\u042b\u0415 \tcudaStatus = cudaMalloc((void**)&amp;dev_Number, size * sizeof(unsigned long long)); \tif (cudaStatus != cudaSuccess) { \t\tfprintf(stderr, &quot;cudaMalloc failed!dev_Number&quot;); \t\tgoto Error; \t} \tcudaStatus = cudaMalloc((void**)&amp;dev_Degree_of, size * sizeof(unsigned long long)); \tif (cudaStatus != cudaSuccess) { \t\tfprintf(stderr, &quot;cudaMalloc failed!dev_Degree_of&quot;); \t\tgoto Error; \t} \tcudaStatus = cudaMalloc((void**)&amp;dev_Max, size * sizeof(unsigned long long int)); \tif (cudaStatus != cudaSuccess) { \t\tfprintf(stderr, &quot;cudaMalloc failed!dev_Max&quot;); \t\tgoto Error; \t} \tcudaStatus = cudaMalloc((void**)&amp;dev_INPUT, size * sizeof(unsigned long long)); \tif (cudaStatus != cudaSuccess) { \t\tfprintf(stderr, &quot;cudaMalloc failed!dev_INPUT&quot;); \t\tgoto Error; \t} \tcudaStatus = cudaMalloc((void**)&amp;dev_Elements_that_need_to_stop, size * sizeof(bool)); \tif (cudaStatus != cudaSuccess) { \t\tfprintf(stderr, &quot;cudaMalloc failed!dev_Stop&quot;); \t\tgoto Error; \t} \t\/\/ \u041f\u0415\u0420\u0415\u041c\u0415\u0429\u0415\u041d\u0418\u0415 \u0414\u0410\u041d\u041d\u042b\u0425 \u0412 \u041f\u0410\u041c\u042f\u0422\u042c GPU \tcudaStatus = cudaMemcpy(dev_Max, max, size * sizeof(unsigned long long), cudaMemcpyHostToDevice); \tif (cudaStatus != cudaSuccess) { \t\tfprintf(stderr, &quot;cudaMemcpy failed!&quot;); \t\tgoto Error; \t} \tcudaStatus = cudaMemcpy(dev_INPUT, INPUT, size * sizeof(unsigned long long), cudaMemcpyHostToDevice); \tif (cudaStatus != cudaSuccess) { \t\tfprintf(stderr, &quot;cudaMemcpy failed!&quot;); \t\tgoto Error; \t} \tUpload_to_GPU&lt;&lt;&lt;1, size&gt;&gt;&gt;(dev_Number, dev_Degree_of, dev_Elements_that_need_to_stop, dev_INPUT, dev_Max); \t\/\/ \u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u0431\u043e\u0435\u0432 \u044f\u0434\u0440\u0430 \tcudaStatus = cudaGetLastError(); \tif (cudaStatus != cudaSuccess) { \t\tfprintf(stderr, &quot;addKernel launch failed: %s\\n&quot;, cudaGetErrorString(cudaStatus)); \t\tgoto Error; \t}  \t\/\/ \u041e\u0436\u0438\u0434\u0430\u043d\u0438\u0435 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 , \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0445 \u044f\u0434\u0440\u043e\u043c  \tcudaStatus = cudaDeviceSynchronize(); \tif (cudaStatus != cudaSuccess) { \t\tfprintf(stderr, &quot;cudaDeviceSynchronize returned error code %d after launching addKernel!\\n&quot;, cudaStatus); \t\tgoto Error; \t}  \t\/\/ \u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u043f\u0430\u043c\u044f\u0442\u0438 GPU \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u0443\u044e \u043f\u0430\u043c\u044f\u0442\u044c \tcudaStatus = cudaMemcpy(Number, dev_Number, size * sizeof(unsigned long long), cudaMemcpyDeviceToHost); \tif (cudaStatus != cudaSuccess) { \t\tfprintf(stderr, &quot;cudaMemcpy failed!&quot;); \t\tgoto Error; \t} \tcudaStatus = cudaMemcpy(Degree_of, dev_Degree_of, size * sizeof(unsigned long long), cudaMemcpyDeviceToHost); \tif (cudaStatus != cudaSuccess) { \t\tfprintf(stderr, &quot;cudaMemcpy failed!&quot;); \t\tgoto Error; \t} \tcudaStatus = cudaMemcpy(Stop, dev_Elements_that_need_to_stop, size * sizeof(bool), cudaMemcpyDeviceToHost); \tif (cudaStatus != cudaSuccess) { \t\tfprintf(stderr, &quot;cudaMemcpy failed!&quot;); \t\tgoto Error; \t} Error:\/\/\u041e\u0441\u0432\u043e\u0431\u043e\u0436\u0434\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 GPU \u043e\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 \tcudaFree(dev_INPUT); \tcudaFree(dev_Degree_of); \tcudaFree(dev_Max); \tcudaFree(dev_Elements_that_need_to_stop); \tcudaFree(dev_Number);  \treturn cudaStatus; } <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>   \u0418\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 <\/p>\n<pre><code class=\"cpp\">__global__  <\/code><\/pre>\n<p> \u0432 <i>.cu \u0444\u0430\u0439\u043b\u0435<\/i> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u0447\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u044f\u0434\u0440\u0430 GPU. <\/p>\n<p>  \u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 cyda, \u043f\u0435\u0440\u0435\u0434 \u0432\u044b\u0437\u043e\u0432\u043e\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u043d\u0443\u0436\u043d\u043e \u0437\u0430\u0440\u0435\u0437\u0435\u0440\u0432\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043c\u044f\u0442\u044c \u043f\u043e\u0434 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438 \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u044b \u0432 \u043f\u0430\u043c\u044f\u0442\u044c GPU. \u042d\u0442\u043e \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442 \u043e\u0431\u044a\u0435\u043c \u043a\u043e\u0434\u0430, \u043d\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0433\u0440\u0443\u0437\u0438\u0442\u044c CPU, \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u043d\u0430 GPU.\u041f\u043e\u044d\u0442\u043e\u043c\u0443 ,cuda, \u0434\u0430\u0435\u0442 \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0437\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u043d\u0430\u0433\u0440\u0443\u0437\u043e\u043a, \u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 cuda.<\/p>\n<p>  \u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043d\u0430 cuda, \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u0448\u044c \u0432 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043d\u0430 GPU \u0438 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043f\u0440\u0438\u0448\u0435\u0434\u0448\u0438\u0445 \u0441 GPU; \u0412 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0432 \u043a\u043e\u0434\u0435 \u0434\u043b\u044f CPU, \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u043a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u0442\u043e\u043a. \u0421\u0442\u043e\u0438\u0442 \u043e\u0442\u043c\u0435\u0442\u0438\u0442\u044c, \u0447\u0442\u043e cyda \u0438\u043c\u0435\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0443 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0435\u043c\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432 \u043e\u0431\u043e\u0438\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u0445 \u044f \u0432\u0437\u044f\u043b \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432, \u0440\u0430\u0432\u043d\u043e\u0435 1000. \u0422\u0430\u043a\u0436\u0435, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 CPU \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <\/p>\n<pre><code class=\"cpp\">int\u00a0Running_thread_counter\u00a0=\u00a00;<\/code><\/pre>\n<p>  \u0447\u0442\u043e\u0431\u044b \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0443\u0436\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0438 \u0434\u043e\u0436\u0438\u0434\u0430\u0442\u044c\u0441\u044f, \u043f\u043e\u043a\u0430 \u0432\u0441\u0435 \u043f\u043e\u0442\u043e\u043a\u0438 \u043d\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u0441\u044f. <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0422\u0435\u0441\u0442\u0438\u0440\u0443\u0435\u043c\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<ul>\n<li>CPU :amd ryzen 5 1400(4core,8thread) <\/li>\n<li>\u041e\u0417\u0423:8\u0433\u0431DDR4 2666<\/li>\n<li>GPU:Nvidia rtx 2060<\/li>\n<\/ul>\n<p>  <\/p>\n<ul>\n<li> OS:windows 10 version 2004 <\/li>\n<li> Cuda:<br \/> \n<ul>\n<li> Compute Capability 7.5 <\/li>\n<li> Threads per Multiprocessor 1024 <\/li>\n<li> CUDA 11.1.70 <\/li>\n<\/ul>\n<p>   <\/li>\n<li> GPU-Z:version 2.35.0 <\/li>\n<li> Visual Studio 2017 <\/li>\n<\/ul>\n<p>  <i>\u0421\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u043e cyda \u0431\u044b\u043b\u0438 \u0432\u0437\u044f\u0442\u044b \u0438\u0437 <b> GPU-Z<\/b><\/i>  <\/div>\n<\/p><\/div>\n<p>  \u0414\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u043a\u043e\u0434 \u043d\u0430 C#<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"cs\">using\u00a0System; using\u00a0System.Collections.Generic; using\u00a0System.Linq; using\u00a0System.Text; using\u00a0System.Threading.Tasks; using\u00a0System.Diagnostics; using\u00a0System.IO; namespace\u00a0ConsoleAppTESTSTEPEN_CPU_AND_GPU_ { \u00a0\u00a0\u00a0\u00a0class\u00a0Program \u00a0\u00a0\u00a0\u00a0{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0static\u00a0string\u00a0Upload(Int64\u00a0number,Int64\u00a0degree_of) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0string\u00a0OUT\u00a0=\u00a0&quot;&quot;; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0string[]\u00a0Chord_values\u00a0=\u00a0new\u00a0string[2]; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Int64\u00a0Degree_of\u00a0=\u00a0degree_of; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Int64\u00a0Number\u00a0=\u00a0number; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Chord_values[0]\u00a0=\u00a0Number.ToString(); \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Chord_values[1]\u00a0=\u00a0Degree_of.ToString(); \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0File.WriteAllLines(&quot;input.txt&quot;,\u00a0Chord_values);\/\/\u0444\u0430\u0439\u043b\u00a0\u0432\u0445\u043e\u0434\u043d\u044b\u0445\u00a0\u0434\u0430\u043d\u043d\u044b\u0445 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0OUT+=&quot;input\u00a0number:&quot;\u00a0+\u00a0Number.ToString()+&quot;\\n&quot;; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0OUT+=&quot;input\u00a0degree\u00a0of\u00a0number:&quot;\u00a0+\u00a0Degree_of.ToString()+&quot;\\n&quot;; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0DateTime\u00a0running_CPU_application\u00a0=\u00a0DateTime.Now;\/\/\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c\u00a0\u0432\u0440\u0435\u043c\u044f\u00a0\u0437\u0430\u043f\u0443\u0441\u043a\u0430\u00a0\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Process\u00a0proc=\u00a0\u00a0Process.Start(&quot;ConsoleApplication29.exe&quot;);\/\/exe\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u00a0\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u00a0\u043d\u0430\u00a0c++\u00a0x64\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0430\u044f\u00a0CPU\u00a0\u0434\u043b\u044f\u00a0\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0while\u00a0(!proc.HasExited)\u00a0;\/\/\u0434\u043e\u0436\u0434\u0430\u0442\u0441\u044f\u00a0\u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f\u00a0\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0DateTime\u00a0stop_CPU_application\u00a0=\u00a0DateTime.Now;\/\/\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c\u00a0\u0432\u0440\u0435\u043c\u044f\u00a0\u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438\u00a0\u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b\u00a0 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0string[]outs\u00a0=\u00a0File.ReadAllLines(&quot;out.txt&quot;);\/\/\u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0File.Delete(&quot;out.txt&quot;); \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0OUT+=&quot;CPU:&quot;+&quot;\\n&quot;; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if\u00a0(outs.Length&gt;0) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for\u00a0(int\u00a0j\u00a0=\u00a00;\u00a0j\u00a0&lt;\u00a0outs.Length;\u00a0j++) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0OUT+=outs[j]+&quot;\\n&quot;; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0else\u00a0{\u00a0OUT+=&quot;no\u00a0values&quot;+&quot;\\n&quot;;\u00a0} \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0OUT+=&quot;running_CPU_application:&quot;\u00a0+\u00a0running_CPU_application.ToString()+&quot;\\n&quot;; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0OUT+=&quot;stop_CPU_application:&quot;\u00a0+\u00a0stop_CPU_application.ToString()+&quot;\\n&quot;; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0OUT+=&quot;GPU:&quot;+&quot;\\n&quot;; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/\u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u044b\u0435\u00a0\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\u00a0\u0434\u043b\u044f\u00a0\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438\u00a0\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u00a0korenXN.exe\u00a0x64\u00a0\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0433\u043e\u00a0\u0434\u043b\u044f\u00a0\u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439\u00a0GPU \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0DateTime\u00a0running_GPU_application\u00a0=\u00a0DateTime.Now; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Process\u00a0procGPU\u00a0=\u00a0Process.Start(&quot;korenXN.exe&quot;); \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0while\u00a0(!procGPU.HasExited)\u00a0; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0DateTime\u00a0stop_GPU_application\u00a0=\u00a0DateTime.Now; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0string[]\u00a0outs2\u00a0=\u00a0File.ReadAllLines(&quot;out.txt&quot;); \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0File.Delete(&quot;out.txt&quot;); \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if\u00a0(outs2.Length\u00a0&gt;\u00a00) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for\u00a0(int\u00a0j\u00a0=\u00a00;\u00a0j\u00a0&lt;\u00a0outs2.Length;\u00a0j++) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0OUT+=outs2[j]+&quot;\\n&quot;; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0else\u00a0{\u00a0OUT+=&quot;no\u00a0values&quot;+&quot;\\n&quot;;\u00a0} \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0OUT+=&quot;running_GPU_application:&quot;\u00a0+\u00a0running_GPU_application.ToString()+&quot;\\n&quot;; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0OUT+=&quot;stop_GPU_application:&quot;\u00a0+\u00a0stop_GPU_application.ToString()+&quot;\\n&quot;; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0return\u00a0OUT;\/\/\u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0438\u0442\u044c\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0static\u00a0void\u00a0Main() \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Int64\u00a0start\u00a0=\u00a036*36;\/\/\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u00a0\u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e\u00a0\u0447\u0438\u0441\u043b\u0430 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Int64\u00a0degree_of_strat\u00a0=\u00a0500;\/\/\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435\u00a0\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u00a0\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0439\u00a0\u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0int\u00a0size\u00a0=\u00a020-5;\/\/\u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u00a0\u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432\u00a0\u0432\u00a0\u043c\u0430\u0441\u0441\u0438\u0432\u0435 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Int64[]\u00a0Number\u00a0=\u00a0new\u00a0Int64[size];\/\/\u043c\u0430\u0441\u0441\u0438\u0432\u00a0\u0432\u0445\u043e\u0434\u043d\u044b\u0445\u00a0\u0447\u0438\u0441\u0435\u043b \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Int64[]\u00a0Degree_of\u00a0=\u00a0new\u00a0Int64[size];\/\/\u043c\u0430\u0441\u0441\u0438\u0432\u00a0\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0445\u00a0\u0441\u0442\u0435\u043f\u0435\u043d\u0435\u0439 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0string[]outs=\u00a0new\u00a0string[size];\/\/\u043c\u0430\u0441\u0441\u0441\u0438\u0432\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for\u00a0(int\u00a0n\u00a0=\u00a00;\u00a0n\u00a0&lt;\u00a0size;\u00a0n++) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if\u00a0(n\u00a0%\u00a02\u00a0==\u00a00) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Number[n]\u00a0=\u00a0start\u00a0*\u00a0start; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0else \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Number[n]\u00a0=\u00a0start\u00a0*\u00a0degree_of_strat; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Number[n]\u00a0-=\u00a0n\u00a0+\u00a0n; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0start\u00a0+=\u00a036*36; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Degree_of[n]\u00a0=\u00a0degree_of_strat; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0degree_of_strat\u00a0+=1000; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0for\u00a0(int\u00a0n\u00a0=\u00a00;\u00a0n\u00a0&lt;\u00a0size;\u00a0n++) \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0outs[n]\u00a0=\u00a0Upload(Number[n],\u00a0Degree_of[n]); \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0Console.WriteLine(outs[n]); \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0System.IO.File.WriteAllLines(&quot;result.txt&quot;,\u00a0outs);\/\/\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c\u00a0\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b\u00a0\u0432\u00a0\u0444\u0430\u0439\u043b\u00a0result.txt \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0} \u00a0\u00a0\u00a0\u00a0} }  <\/code><\/pre>\n<p>  <\/div>\n<\/p><\/div>\n<p>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u043b \u0444\u0430\u0439\u043b \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u043c\u0438, \u0437\u0430\u0442\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u043b exe \u0444\u0430\u0439\u043b\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0445 CPU \u0438\u043b\u0438 GPU \u0438 \u0437\u0430\u043c\u0435\u0440\u044f\u043b \u0432\u0440\u0435\u043c\u044f \u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u044b, \u0437\u0430\u0442\u0435\u043c \u0437\u0430\u043d\u043e\u0441\u0438\u043b \u044d\u0442\u043e \u0432\u0440\u0435\u043c\u044f \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u0432 \u0444\u0430\u0439\u043b <i>result.txt<\/i>. \u0414\u043b\u044f \u0437\u0430\u043c\u0435\u0440\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b\u0441\u044f <i>\u0434\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440 \u0437\u0430\u0434\u0430\u0447 <\/i>windows.<\/p>\n<p>  \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u0435\u0441\u0442\u0430 \u043f\u0440\u0435\u0432\u0438\u0434\u0435\u043d\u044b \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/li\/nj\/oo\/linjootgmg89znfbokhp6uhhoka.gif\"><\/p>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043d\u0430 GPU \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043d\u0430 CPU.<br \/>  \u041e\u0434\u043d\u0430\u043a\u043e, \u043e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0432\u043e\u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0433\u043e \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 GPU \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u043c CPU, \u0432 \u0414\u0438\u0441\u043f\u0435\u0442\u0447\u0435\u0440\u0435 \u0437\u0430\u0434\u0430\u0447, \u043d\u0435 \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u043b\u0430 30%, \u0432 \u0442\u043e \u0432\u0440\u0435\u043c\u044f \u043a\u0430\u043a \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 CPU, \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u043b \u0435\u0433\u043e \u043d\u0430<i> 68-85%<\/i>, \u0447\u0442\u043e \u0432 \u0441\u0432\u043e\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0438\u043d\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u043e \u043a \u0437\u0430\u043c\u0435\u0434\u043b\u0435\u043d\u0438\u044e \u0434\u0440\u0443\u0433\u0438\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u0422\u0430\u043a\u0436\u0435, \u043d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u0433\u0440\u0430\u0444\u0438\u043a, \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435 \u0432\u043e <br \/>  \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f (\u043f\u043e \u043e\u0441\u0438 Y)CPU \u0438 GPU \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430(\u043f\u043e \u043e\u0441\u0438 X).<\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0433\u0440\u0430\u0444\u0438\u043a<\/b>                         <\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/wt\/z6\/jz\/wtz6jzl340knh9dpm7iwqwv-x_g.png\">  <\/div>\n<\/p><\/div>\n<p>  \u0414\u0430\u043b\u0435\u0435 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435 \u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u043c \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438. \u041f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440 \u0431\u044b\u043b \u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d \u0442\u0430\u043a, \u0447\u0442\u043e \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u043d\u044b\u0439 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0442\u0435\u0441\u0442, \u043d\u0435 \u0437\u0430\u043d\u0438\u043c\u0430\u043b \u0431\u043e\u043b\u044c\u0448\u0435 55% \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u0435\u0441\u0442\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043d\u0438\u0436\u0435:<\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/em\/ej\/dw\/emejdw6idxafec9noga22qztgfy.gif\"><\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0413\u0440\u0430\u0444\u0438\u043a<\/b>                         <\/p>\n<div class=\"spoiler_text\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/ke\/fv\/ae\/kefvaeziuncvuadk6m8xk8j-pk0.gif\">  <\/div>\n<\/p><\/div>\n<p>  \u041a\u0430\u043a \u0432\u0438\u0434\u043d\u043e \u0438\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b, \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 \u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u044b\u043c CPU, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u043d\u0430 GPU, \u0434\u0430\u0435\u0442 \u043f\u0440\u0438\u0440\u043e\u0441\u0442 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438, \u0442\u0430\u043a \u043a\u0430\u043a \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0432 30% \u0443\u043a\u043b\u0430\u0434\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043b\u0438\u043c\u0438\u0442 55%, \u0430 \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f CPU \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439, \u0435\u0433\u043e \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442<i> 68-85% <\/i>, \u0447\u0442\u043e \u0442\u043e\u0440\u043c\u043e\u0437\u0438\u0442 \u0440\u0430\u0431\u043e\u0442\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u0435\u0441\u043b\u0438 CPU \u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438.<\/p>\n<p>  <i>\u041f\u043e\u044d\u0442\u043e\u043c\u0443, \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u044b\u0432\u043e\u0434, \u0447\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 GPU \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439, \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0434\u043e\u043b\u0436\u043d\u043e \u0434\u0430\u0432\u0430\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u0443\u044e \u0440\u0430\u0431\u043e\u0442\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u043e\u0434\u043d\u0430\u043a\u043e, \u043e\u043d\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u043d\u043e \u0440\u0430\u0437\u0433\u0440\u0443\u0437\u0438\u0442\u044c CPU, \u0447\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0438\u0433\u0440\u0430\u0442\u044c \u0440\u043e\u043b\u044c, \u0435\u0441\u043b\u0438 \u043e\u043d \u043d\u0430\u0433\u0440\u0443\u0436\u0435\u043d \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u043c\u0438. <br \/>  <\/i><\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">\u0420\u0435\u0441\u0443\u0440\u0441\u044b:<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<ul>\n<li><a href=\"https:\/\/developer.nvidia.com\/cuda-zone\" rel=\"nofollow\">Cuda zone<\/a>   <\/li>\n<li><a href=\"https:\/\/developer.nvidia.com\/cuda-toolkit\" rel=\"nofollow\">Cuda toolkit<\/a>   <\/li>\n<li><a href=\"https:\/\/developer.nvidia.com\/cuda-downloads\" rel=\"nofollow\">\u0441\u043a\u0430\u0447\u0430\u0442\u044c cuda<\/a>   <\/li>\n<li><a href=\"https:\/\/docs.nvidia.com\/cuda\/cuda-toolkit-release-notes\/index.html\" rel=\"nofollow\">Cuda toolkit documentation<\/a>   <\/li>\n<li><a href=\"https:\/\/developer.nvidia.com\/cuda-gpus\" rel=\"nofollow\">\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u044b\u0435 GPU<\/a>   <\/li>\n<\/ul>\n<p>  <\/div>\n<\/p><\/div>\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\/post\/525892\/\"> https:\/\/habr.com\/ru\/post\/525892\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text-html post__text_v1\" id=\"post-content-body\">\n<h2>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 CUDA Runtime API \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439. \u0421\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 CPU \u0438 GPU \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439<\/h2>\n<p>  \u0412 \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430 C++ \u043d\u0430 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u043c \u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435(\u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Nvidia CUDA Runtime API \u043d\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u043c\u043e\u043c GPU Nvidia). CUDA API \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439 \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0435. \u0424\u0430\u0439\u043b c++ \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 cuda, \u0431\u0443\u0434\u0435\u0442 \u0438\u043c\u0435\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 <b>.cu<\/b>.<br \/>  \u0421\u0445\u0435\u043c\u0430 \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u0430 \u043d\u0438\u0436\u0435. <\/p>\n<p>  <img decoding=\"async\" src=\"https:\/\/habrastorage.org\/webt\/hm\/7d\/r1\/hm7dr1qw0yltbjj3ax9zp6pio5w.png\"><\/p>\n<p>  \u0417\u0430\u0434\u0430\u0447\u0430 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430\u0439\u0442\u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0447\u0438\u0441\u043b\u0430 X, \u043f\u0440\u0438 \u0432\u043e\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432 \u0441\u0442\u0435\u043f\u0435\u043d\u044c degree_of, \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0441\u044f \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e max_number. \u0421\u0440\u0430\u0437\u0443 \u043e\u0442\u043c\u0435\u0447\u0443, \u0447\u0442\u043e \u0432\u0441\u0435 \u0447\u0438\u0441\u043b\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f GPU, \u0431\u0443\u0434\u0443\u0442 \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0432 \u043c\u0430\u0441\u0441\u0438\u0432\u0430\u0445. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c, \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u043a\u0430\u0436\u0434\u044b\u043c \u043f\u043e\u0442\u043e\u043a\u043e\u043c, \u0438\u043c\u0435\u0435\u0442 \u043f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0432\u0438\u0434:  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-312357","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/312357","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=312357"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/312357\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=312357"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=312357"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=312357"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}