{"id":385,"date":"2025-01-15T11:22:16","date_gmt":"2025-01-15T11:22:16","guid":{"rendered":"http:\/\/10.220.16.170\/?page_id=385"},"modified":"2025-01-30T08:00:55","modified_gmt":"2025-01-30T08:00:55","slug":"%d0%bc%d0%be%d0%b6%d0%bd%d0%be-%d0%bb%d0%b8-%d0%b7%d0%b0%d0%bf%d1%83%d1%81%d1%82%d0%b8%d1%82%d1%8c-root-%d0%bd%d0%b0-gpu","status":"publish","type":"page","link":"https:\/\/micc.jinr.ru\/?page_id=385","title":{"rendered":"\u041c\u043e\u0436\u043d\u043e \u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c ROOT \u043d\u0430 GPU?"},"content":{"rendered":"<article class=\"b-manual no-sidebar\">\n<h1>ROOT \u043d\u0430 GPU (OpenCL)<\/h1>\n<p>\u0421 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f ROOT \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0437\u043c. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0443\u0441\u0438\u043b\u0438\u0439 \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. ROOT 6 \u0438 \u043d\u043e\u0432\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 CLING \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u044b\u0445 \u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439.<\/p>\n<p>\u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0447\u0430\u0441\u0442\u043e \u0438\u043c\u0435\u044e\u0442 \u0433\u0435\u0442\u0435\u0440\u043e\u0433\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u0442 \u0438\u0437 \u0440\u0430\u0437\u043d\u043e\u0440\u043e\u0434\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 &#8211; \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 (CPU) \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u044f\u0434\u0440\u0430\u043c\u0438 \u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 (GPU). \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0441\u043e\u0442\u043d\u0438 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0433\u0443\u0442 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430\u0434 \u0432\u0445\u043e\u0434\u044f\u0449\u0438\u043c\u0438 \u043f\u043e\u0442\u043e\u043a\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0438\u043c\u0435\u044e\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u043d\u043e\u0446\u0435\u043d\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043e\u0431\u0449\u0438\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439.<\/p>\n<p><strong>GPGPU<\/strong> &#8211; (\u0442\u0430\u043a\u0436\u0435 <strong>GPGP<\/strong>, <strong>GP\u00b2U<\/strong>, \u0430\u043d\u0433\u043b. General-purpose computing on graphics processing units, \u043d\u0435\u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u0445) &#8211; \u0442\u0435\u0445\u043d\u0438\u043a\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u044b, \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u0434\u043b\u044f \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u043e\u0439 \u0433\u0440\u0430\u0444\u0438\u043a\u0438, \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0441\u0447\u0451\u0442\u043e\u0432 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u0434\u043b\u044f \u043e\u0431\u0449\u0438\u0445 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043c\u043e\u0449\u044c \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432 \u0434\u043b\u044f \u043d\u0435\u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0437\u0430\u0434\u0430\u0447 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0440\u0435\u0448\u0430\u0435\u043c\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430 \u0434\u043e\u043f\u0443\u0441\u043a\u0430\u0435\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043d\u0430 \u0441\u043e\u0442\u043d\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0431\u043b\u043e\u043a\u043e\u0432, \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f \u0432 GPU. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0440\u0430\u0441\u0447\u0435\u0442\u043e\u0432 \u043d\u0430 GPU \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u043e\u0442\u043b\u0438\u0447\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u043e\u0434\u043d\u0430 \u0438 \u0442\u0430 \u0436\u0435 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043a \u0431\u043e\u043b\u044c\u0448\u043e\u043c\u0443 \u043e\u0431\u044a\u0435\u043c\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u0440\u0438 \u044d\u0442\u043e\u043c \u043b\u0443\u0447\u0448\u0438\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u044e\u0442\u0441\u044f, \u0435\u0441\u043b\u0438 \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u043b\u0430 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u043a \u0447\u0438\u0441\u043b\u0443 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0439 \u043a \u043f\u0430\u043c\u044f\u0442\u0438 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0432\u0435\u043b\u0438\u043a\u043e.<\/p>\n<p>\u0421\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 GPGPU, \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0441\u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 &#8211; <strong>OpenCL<\/strong> \u0438 <strong>CUDA<\/strong>.<\/p>\n<ul>\n<li><strong><span class=\"method\">CUDA<\/span><\/strong> (Compute Unified Device Architecture) &#8211; \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 (\u0441\u043e\u0432\u043e\u043a\u0443\u043f\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0445 \u0438 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u044b\u0445 \u0441\u0440\u0435\u0434\u0441\u0442\u0432), \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0430\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430 GPU \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u0449\u0435\u0433\u043e \u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043f\u0440\u0438 \u044d\u0442\u043e\u043c GPU \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0432 \u0440\u043e\u043b\u0438 \u043c\u043e\u0449\u043d\u043e\u0433\u043e \u0441\u043e\u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430.<\/li>\n<li><strong><span class=\"method\">OpenCL<\/span><\/strong> &#8211; \u0444\u0440\u0435\u0439\u043c\u0432\u043e\u0440\u043a \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u044b\u0445 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0441 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f\u043c\u0438 \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0438 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430\u0445. \u0412 OpenCL \u0432\u0445\u043e\u0434\u044f\u0442 \u044f\u0437\u044b\u043a \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0441\u043d\u043e\u0432\u0430\u043d \u043d\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u0435 \u044f\u0437\u044b\u043a\u0430 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0421\u0438, \u0438 \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f (\u043d\u0430\u0431\u043e\u0440 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440, \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439) \u043c\u0435\u0436\u0434\u0443 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u043c\u0438 \u0431\u043b\u043e\u043a\u0430\u043c\u0438 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/li>\n<\/ul>\n<p>\u0412 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f CUDA \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0435\u0439, \u043d\u043e \u043e\u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043c\u0430 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f GPU. \u041f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e OpenCL \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043e\u043d \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0435\u0434\u0438\u043d\u044b\u043c \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043e\u043c \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435, \u0433\u0434\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u044b \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u044b, \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u0435\u043b\u0438 \u0438 \u043f\u043b\u0430\u0442\u044b \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f. \u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043c\u0430\u043a\u0440\u043e\u0441\u044b ROOT \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c OpenCL. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e \u044d\u0442\u043e\u0439 \u0442\u0435\u0445\u043d\u043e\u043b\u043e\u0433\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c <a href=\"https:\/\/www.khronos.org\/opencl\/\">\u0437\u0434\u0435\u0441\u044c<\/a>, <a href=\"https:\/\/habr.com\/ru\/post\/124925\/\">\u0437\u0434\u0435\u0441\u044c<\/a> \u0438 <a href=\"https:\/\/dic.academic.ru\/dic.nsf\/ruwiki\/607997\">\u0437\u0434\u0435\u0441\u044c<\/a>.<\/p>\n<h3>\u0420\u0430\u0431\u043e\u0442\u0430 OpenCL-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/h3>\n<p>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0435\u0435 OpenCL, \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 <strong><span class=\"method\">Host<\/span><\/strong> &#8211; \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u0438 <strong><span class=\"method\">Kernel<\/span><\/strong> &#8211; \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u0435\u043c\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 OpenCL, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>\u041f\u0435\u0440\u0432\u043e\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e OpenCL-\u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043e\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u0438\u043c\u0435\u044e\u0449\u0438\u0435\u0441\u044f OpenCL &#8211; \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b. \u0418\u0437 \u0441\u043f\u0438\u0441\u043a\u0430 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0432\u044b\u0431\u0438\u0440\u0430\u0435\u0442 \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u043e\u0434\u043d\u0443 \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 (CPU, GPU \u0438 \u0442.\u043f.) \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 &#8211; \u043d\u0435\u043a\u043e\u0435 \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0435, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c\u0441\u044f \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u044f\u0434\u0440\u0430. \u041a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043d\u0430\u0431\u043e\u0440\u0435 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u044b, \u043f\u0430\u043c\u044f\u0442\u0438, \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0439 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c,\u0430 \u0442\u0430\u043a\u0436\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043a\u043e\u043c\u0430\u043d\u0434 (command queues), \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0434\u043b\u044f \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u044f\u0434\u0435\u0440 \u0438\u043b\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0430\u0434 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u043f\u0430\u043c\u044f\u0442\u0438.<\/p>\n<p>\u0412\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0445\u043e\u0441\u0442\u0430 \u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432 \u043e\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043c\u0430\u043d\u0434, \u0430 \u0434\u043b\u044f \u0434\u043e\u0441\u0442\u0430\u0432\u043a\u0438 \u044d\u0442\u0438\u0445 \u043a\u043e\u043c\u0430\u043d\u0434 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u043c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043e\u0447\u0435\u0440\u0435\u0434\u0438 \u043a\u043e\u043c\u0430\u043d\u0434. \u041e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e \u0441 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439 \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u043e\u0431\u044b\u0442\u0438\u044f (event). \u0422\u0430\u043a\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0442\u044c \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u0435 \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0430\u043d\u0434, \u0430 \u043f\u043e\u0442\u043e\u043c\u0443 \u043c\u043e\u0433\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0438. \u0414\u043b\u044f \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u0430\u043c\u044f\u0442\u0438; \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u0445 (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0447\u0442\u0435\u043d\u0438\u044f\/\u0437\u0430\u043f\u0438\u0441\u0438) \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c. \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b (program objects) \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u043e\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u044f\u0434\u0435\u0440 \u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u043e\u0439 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f (build) \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u044f\u0434\u0435\u0440 (kernel objects), \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0437\u043c \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0438\u043d\u0441\u0442\u0440\u0443\u043a\u0446\u0438\u0439 \u0438 \u043d\u0430 \u0443\u0440\u043e\u0432\u043d\u0435 \u0434\u0430\u043d\u043d\u044b\u0445.<\/p>\n<p>\u041d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0430\u0445 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d \u0440\u0435\u0436\u0438\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0442\u0438\u043f\u0430 double, \u0447\u0442\u043e \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u043e\u0432\u0435\u043d\u0438\u044e \u043e\u0448\u0438\u0431\u043a\u0438 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 5105. \u0414\u043b\u044f \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0440\u0435\u0436\u0438\u043c\u0430 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0447\u0438\u0441\u0435\u043b double \u0432 \u0442\u0435\u043a\u0441\u0442 OpenCL \u2014 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u0443 #pragma OPENCL EXTENSION cl_khr_fp64 : enable. \u041e\u0434\u043d\u0430\u043a\u043e, \u0435\u0441\u043b\u0438 \u0432\u0438\u0434\u0435\u043e\u043a\u0430\u0440\u0442\u0430 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 double, \u0442\u043e \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u043e\u0439 \u0434\u0438\u0440\u0435\u043a\u0442\u0438\u0432\u044b \u043d\u0435 \u043f\u043e\u043c\u043e\u0436\u0435\u0442.<\/p>\n<h3>\u0424\u0443\u043d\u043a\u0446\u0438\u0438 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u043d\u0430 OpenCL<\/h3>\n<p>&nbsp;<\/p>\n<table>\n<tbody>\n<tr>\n<td><span class=\"method\">\u0424\u0443\u043d\u043a\u0446\u0438\u044f<\/span><\/td>\n<td><span class=\"method\">\u00a0 \u00a0 \u00a0\u0414\u0435\u0439\u0441\u0442\u0432\u0438\u0435<\/span><\/td>\n<\/tr>\n<tr>\n<td>CLHandleType<\/td>\n<td>\u00a0&#8211; \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0442\u0438\u043f OpenCL \u0445\u0435\u043d\u0434\u043b\u0430 \u0432 \u0432\u0438\u0434\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f ENUM_OPENCL_HANDLE_TYPE<\/td>\n<\/tr>\n<tr>\n<td>CLGetInfoInteger<\/td>\n<td>\u00a0&#8211; \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0446\u0435\u043b\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043b\u044f OpenCL-\u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438\u043b\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/td>\n<\/tr>\n<tr>\n<td>CLGetInfoString<\/td>\n<td>\u00a0&#8211; \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0434\u043b\u044f OpenCL-\u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438\u043b\u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430<\/td>\n<\/tr>\n<tr>\n<td>CLContextCreate<\/td>\n<td>\u00a0&#8211; C\u043e\u0437\u0434\u0430\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 OpenCL<\/td>\n<\/tr>\n<tr>\n<td>CLContextFree<\/td>\n<td>\u00a0&#8211; \u0423\u0434\u0430\u043b\u044f\u0435\u0442 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442 OpenCL<\/td>\n<\/tr>\n<tr>\n<td>CLGetDeviceInfo<\/td>\n<td>\u00a0&#8211; \u041f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430 \u0438\u0437 OpenCL \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430<\/td>\n<\/tr>\n<tr>\n<td>CLProgramCreate<\/td>\n<td>\u00a0&#8211; \u0421\u043e\u0437\u0434\u0430\u0435\u0442 OpenCL \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430<\/td>\n<\/tr>\n<tr>\n<td>CLProgramFree<\/td>\n<td>\u00a0&#8211; \u0423\u0434\u0430\u043b\u044f\u0435\u0442 OpenCL \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443<\/td>\n<\/tr>\n<tr>\n<td>CLKernelCreate<\/td>\n<td>\u00a0&#8211; \u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 OpenCL<\/td>\n<\/tr>\n<tr>\n<td>CLKernelFree<\/td>\n<td>\u00a0&#8211; \u0423\u0434\u0430\u043b\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u044e \u0437\u0430\u043f\u0443\u0441\u043a\u0430 OpenCL<\/td>\n<\/tr>\n<tr>\n<td>CLSetKernelArg<\/td>\n<td>\u00a0&#8211; \u0412\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0434\u043b\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u0438 OpenCL<\/td>\n<\/tr>\n<tr>\n<td>CLSetKernelArgMem<\/td>\n<td>\u00a0&#8211; \u0412\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u0443\u0444\u0435\u0440 OpenCL \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 OpenCL<\/td>\n<\/tr>\n<tr>\n<td>CLSetKernelArgMemLocal<\/td>\n<td>\u00a0&#8211; \u0417\u0430\u0434\u0430\u0451\u0442 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u0431\u0443\u0444\u0435\u0440 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u0430 kernel-\u0444\u0443\u043d\u043a\u0446\u0438\u0438<\/td>\n<\/tr>\n<tr>\n<td>CLBufferCreate<\/td>\n<td>\u00a0&#8211; \u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u0431\u0443\u0444\u0435\u0440 OpenCL<\/td>\n<\/tr>\n<tr>\n<td>CLBufferFree<\/td>\n<td>\u00a0&#8211; \u0423\u0434\u0430\u043b\u044f\u0435\u0442 \u0431\u0443\u0444\u0435\u0440 OpenCL<\/td>\n<\/tr>\n<tr>\n<td>CLBufferWrite<\/td>\n<td>\u00a0&#8211; \u0417\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043c\u0430\u0441\u0441\u0438\u0432 \u0432 \u0431\u0443\u0444\u0435\u0440 OpenCL \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432<\/td>\n<\/tr>\n<tr>\n<td>CLBufferRead<\/td>\n<td>\u00a0&#8211; \u0427\u0438\u0442\u0430\u0435\u0442 \u0431\u0443\u0444\u0435\u0440 OpenCL \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u043d\u043d\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432<\/td>\n<\/tr>\n<tr>\n<td>CLExecute<\/td>\n<td>\u00a0&#8211; \u0412\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 OpenCL \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443<\/td>\n<\/tr>\n<tr>\n<td>CLExecutionStatus<\/td>\n<td>\u00a0&#8211; \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f OpenCL \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>\u0420\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043f\u0440\u0438\u043c\u0435\u0440, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0438\u0437 \u0434\u0435\u0440\u0435\u0432\u0430 \u0441 12 \u0432\u0435\u0442\u043a\u0430\u043c\u0438. \u0417\u0430\u0442\u0435\u043c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442\u0441\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f, \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c \u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0437\u0430\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0432 \u043d\u043e\u0432\u044b\u0439 root \u0444\u0430\u0439\u043b.<\/p>\n<p><!--\u041d\u0430\u0447\u0430\u043b\u043e \u0431\u043b\u043e\u043a\u0430 \u0441 \u043a\u043e\u0434\u043e\u043c--><\/p>\n<div class=\"b-incut-code\">\n<pre id=\"omp\">#include \"TFile.h\"\r\n#include \"TChain.h\"\r\n#include \"TTree.h\"\r\n#include \"TH1F.h\"\r\n#include \"TCanvas.h\"\r\n#include \"TStopwatch.h\"\r\n#include &lt;iostream&gt;\r\nusing namespace std;\r\n\r\nint TreeNoPar(){\r\n TStopwatch timer;\r\n timer.Start();\r\n TFile *ff =new TFile(\"treeMy.root\");\r\n TTree *treeMy=(TTree*)ff-&gt;Get(\"treeMy\");\r\n const Int_t NumberBranch=12;\r\n Float_t* x=new Float_t[NumberBranch]; \r\n Float_t* y=new Float_t[NumberBranch];\r\n TH1F *h[NumberBranch];\r\n for (Int_t i=0;i &lt; NumberBranch; i++){\r\n     treeMy-&gt;SetBranchAddress(Form(\"x%d\",i),&amp;x[i]);\r\n     h[i]=new TH1F(Form(\"h%d\",i),Form(\"title%d\",i),150,-10,40);\r\n }\r\n Int_t i;\r\n for ( Int_t irow=0; irow &lt; treeMy-&gt;GetEntries(); ++irow ) {\r\n    treeMy-&gt;GetEntry(irow); \r\n    for (i=0;i &lt;  NumberBranch; i++){\r\n        y[i]=sqrt(10+x[i]*x[i]*x[i]*x[i])+sin(x[i])*cos(x[i])-tan(x[i]);\r\n        h[i]-&gt;Fill(y[i]);\r\n    }\r\n }\r\n TFile* f=new TFile(\"NoParallel.root\",\"recreate\");\r\n for(i=0;i &lt; NumberBranch; i++)\r\n     h[i]-&gt;Write();\r\n timer.Stop();\r\n cout&lt;&lt;\"time: \";\r\n timer.Print(\"m\");\r\n return 0;\r\n }\r\n<\/pre>\n<\/div>\n<p><!--\u0411\u043b\u043e\u043a \u043a\u043e\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d--><\/p>\n<p>\u0410 \u0442\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443, \u0440\u0435\u0448\u0430\u044e\u0449\u0443\u044e \u0442\u0443 \u0436\u0435 \u0441\u0430\u043c\u0443\u044e \u0437\u0430\u0434\u0430\u0447\u0443, \u043d\u043e \u0443\u0436\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c OpenCL. \u041a\u0430\u043a \u043e\u0442\u043c\u0435\u0447\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u0448\u0435, \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0430 \u0432 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0434\u0432\u0443\u0445 \u0447\u0430\u0441\u0442\u0435\u0439 &#8211; \u0445\u043e\u0441\u0442\u0430 \u0438 \u044f\u0434\u0440\u0430. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0438 \u0438\u043c\u044f \u043f\u0435\u0440\u0432\u043e\u0439, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0435\u0439, \u0447\u0430\u0441\u0442\u0438 &#8211; TreeOpenCL.C. \u0422\u0435\u043a\u0441\u0442 \u0445\u043e\u0441\u0442\u0430:<\/p>\n<p><!--\u041d\u0430\u0447\u0430\u043b\u043e \u0431\u043b\u043e\u043a\u0430 \u0441 \u043a\u043e\u0434\u043e\u043c--><\/p>\n<div class=\"b-incut-code\">\n<pre>#include \"stdio.h\"\r\n#include \"math.h\"\r\n#include \"stdlib.h\"\r\n#include \"time.h\"      \r\n#include \"CL\/cl.h\"\r\n#include \"TFile.h\"\r\n#include \"TChain.h\"\r\n#include \"TTree.h\"\r\n#include \"TH1D.h\"\r\n#include \"TCanvas.h\"\r\n#include \"TStopwatch.h\"\r\n#include &lt;iostream&gt;\r\n \r\n#define MAX_SOURCE_SIZE (0x100000)\r\n\r\nint main(void)\r\n{\r\n        TFile *ff =new TFile(\"treeMy.root\");\r\n        TTree *treeMy=(TTree*)ff-&gt;Get(\"treeMy\");\r\n\tclock_t begin = clock();\r\n        int Number=treeMy-&gt;GetEntries();\r\n        const int NumberBranch=12;\r\n\tconst int N = Number*NumberBranch;\r\n\tfloat *X = (float*)malloc(sizeof(float)*N);\r\n        float *x = (float*)malloc(sizeof(float)*NumberBranch);\r\n        TH1D *hh[NumberBranch];\r\n\tfor (int i=0;i &lt; NumberBranch;i++){\r\n\t       treeMy-&gt;SetBranchAddress(Form(\"x%d\",i),&amp;x[i]);\r\n\t       hh[i]=new TH1D(Form(\"hh%d\",i),Form(\"title%d\",i),150,-10,140);\r\n        }\r\n\r\n         float **p=new float * [N];\r\n         for(int i=0;i &lt; Number;i++)\r\n\t      p[i]=new float[NumberBranch];\r\n\r\n\/\/       \u0421\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0434\u0435\u0440\u0435\u0432\u0430 \u0438\u0437 root \u0444\u0430\u0439\u043b\u0430 \u0438 \u0437\u0430\u043f\u0438\u0441\u044c \u0438\u0445 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432        \r\n\t for (int irow=0; irow &lt; Number; ++irow){\r\n\t       treeMy-&gt;GetEntry(irow);\r\n\t for(int j=0;j &lt; NumberBranch;j++){\r\n\t   p[irow][j]=x[j];\r\n\t }\r\n\t }\r\n\t  int k=0;\r\n\t  for (int i=0;i &lt; Number;i++){\r\n\t        for(int j=0;j &lt; NumberBranch;j++){\r\n\t              X[k]=p[i][j];\r\n                      k++;\r\n\t  }\r\n\t}\r\n\r\n\/\/\t\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u044f\u0434\u0440\u0430 \u0432 \u043c\u0430\u0441\u0441\u0438\u0432 source_str\r\n\tFILE *fp;\r\n\tchar *source_str;\r\n\tsize_t source_size;\r\n \r\n\tfp = fopen(\"TreeOpenCL_kernel.cl\", \"r\");\r\n\tif (!fp)\r\n\t{\r\n\t\tfprintf(stderr, \"Failed to load kernel.\\n\");\r\n\t\texit(1);\r\n\t}\r\n\tsource_str = (char*)malloc(MAX_SOURCE_SIZE);\r\n\tsource_size = fread( source_str, 1, MAX_SOURCE_SIZE, fp);\r\n\tfclose( fp );\r\n \r\n\/\/\t\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043e \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0435 \u0438 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0430\u0445\r\n\tcl_platform_id platform_id = NULL;\r\n\tcl_device_id device_id = NULL;   \r\n\tcl_uint ret_num_devices;\r\n\tcl_uint ret_num_platforms;\r\n\tclGetPlatformIDs(1, &amp;platform_id, &amp;ret_num_platforms);\r\n\tclGetDeviceIDs( platform_id, CL_DEVICE_TYPE_DEFAULT, 1, &amp;device_id, &amp;ret_num_devices);\r\n \r\n\/\/      \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 OpenCL \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430\r\n\tcl_context context = clCreateContext( NULL, 1, &amp;device_id, NULL, NULL, NULL);\r\n \r\n\/\/\t\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0447\u0435\u0440\u0435\u0434\u0438  \u043a\u043e\u043c\u0430\u043d\u0434\r\n\tcl_command_queue command_queue = clCreateCommandQueue(context, device_id, 0, NULL);\r\n \r\n\/\/\t\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0431\u0443\u0444\u0435\u0440\u043e\u0432 \u043f\u0430\u043c\u044f\u0442\u0438 \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u0435\u043a\u0442\u043e\u0440\u0430\r\n\tcl_mem X_dev = clCreateBuffer(context, CL_MEM_READ_ONLY,  N * sizeof(float), NULL, NULL);\r\n\tcl_mem S_dev = clCreateBuffer(context, CL_MEM_WRITE_ONLY, N * sizeof(float), NULL, NULL);\r\n \r\n\/\/\t\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0432   \u0431\u0443\u0444\u0435\u0440 \u043f\u0430\u043c\u044f\u0442\u0438\r\n\tclEnqueueWriteBuffer(command_queue, X_dev, CL_TRUE, 0, N * sizeof(float), X, 0, NULL, NULL);\r\n \r\n\/\/\t\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b \u0438\u0437 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430 \u044f\u0434\u0440\u0430\r\n\tcl_program program = clCreateProgramWithSource(context, 1, (const char **)&amp;source_str, (const size_t *)&amp;source_size, NULL);\r\n \r\n\/\/\t\u041f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b     \r\n\tclBuildProgram(program, 1, &amp;device_id, NULL, NULL, NULL);\r\n \r\n\/\/\t\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 OpenCL \u044f\u0434\u0440\u0430\r\n\tcl_kernel kernel = clCreateKernel(program, \"Tree_OpenCL\", NULL);\r\n \r\n\/\/\t\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0430\u0440\u0433\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u044f\u0434\u0440\u0430\r\n\tclSetKernelArg(kernel, 0, sizeof(cl_mem), (void *)&amp;X_dev);\r\n\tclSetKernelArg(kernel, 1, sizeof(cl_mem), (void *)&amp;S_dev);\r\n\t\r\n\/\/\t\u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u044f\u0434\u0440\u0430 OpenCL \r\n\tsize_t global_item_size = N; \/\/ Process the entire lists\r\n\tsize_t local_item_size = 64; \/\/ Divide work items into groups of 64\r\n\tclEnqueueNDRangeKernel(command_queue, kernel, 1, NULL, &amp;global_item_size, &amp;local_item_size, 0, NULL, NULL);\r\n\r\n\/\/\t\u0421\u0447\u0438\u0442\u044b\u0432\u0430\u043d\u0438\u0435 \u0438\u0437 \u0431\u0443\u0444\u0435\u0440\u0430 \u043f\u0430\u043c\u044f\u0442\u0438 S_dev \u043d\u0430 \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u0435 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0439  \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 S\r\n\tfloat *S = (float*)malloc(sizeof(float)*N);\r\n\tclEnqueueReadBuffer(command_queue, S_dev, CL_TRUE, 0, N * sizeof(float), S, 0, NULL, NULL);\r\n      \r\n        TFile *f=new TFile(\"TreeOpenCL.root\",\"recreate\");\r\n\tint m=0;\r\n\tfor (int irow=0; irow &lt; Number; ++irow){\r\n\t   for(int j=0;j &lt; NumberBranch;j++){\r\n              hh[j]-&gt;Fill(S[m]);\r\n\t      m++;\r\n\t     }\r\n       \t}\r\n        for (int i=0; i&lt;12; ++i){\r\n\thh[i]-&gt;Write();\r\n\t}\r\n\tf-&gt;Close();\r\n\r\n\tclock_t end = clock();\r\n\tdouble elapsed_secs = (double)(end - begin) \/ CLOCKS_PER_SEC;\t\r\n        printf(\"Time = %e\\n\", elapsed_secs);\r\n\r\n\/\/      \u041e\u0447\u0438\u0449\u0435\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438\t\r\n\tclFlush(command_queue);\r\n\tclFinish(command_queue);\r\n\tclReleaseKernel(kernel);\r\n\tclReleaseProgram(program);\r\n\tclReleaseMemObject(X_dev);\r\n\tclReleaseMemObject(S_dev);\r\n\tclReleaseCommandQueue(command_queue);\r\n\tclReleaseContext(context);\r\n\tfree(X); free(S); free(x);     \r\n\treturn 0;\r\n}      \r\n<\/pre>\n<\/div>\n<p><!--\u0411\u043b\u043e\u043a \u043a\u043e\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d--><\/p>\n<p>\u0422\u0435\u043a\u0441\u0442 \u044f\u0434\u0440\u0430 &#8211; \u043a\u043e\u0434, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043d\u0430 GPU (\u0438\u043c\u044f \u0444\u0430\u0439\u043b\u0430 &#8211; TreeOpenCL_kernel.cl):<\/p>\n<p><!--\u041d\u0430\u0447\u0430\u043b\u043e \u0431\u043b\u043e\u043a\u0430 \u0441 \u043a\u043e\u0434\u043e\u043c--><\/p>\n<div class=\"b-incut-code\">\n<pre>float func(float x) { return sqrt(10+x*x*x*x)+sin(x)*cos(x)-tan(x);\r\n       \t\t      \t}\r\n__kernel void Tree_OpenCL( __global float *X, __global float *Y)\r\n{\r\n\/\/\tGet the index of the current element\r\n\tint gid = get_global_id(0);\r\n\r\n\/\/\tDo the operation\r\n\tY[gid] = func(X[gid]);\r\n}\r\n<\/pre>\n<\/div>\n<p><!--\u0411\u043b\u043e\u043a \u043a\u043e\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d--><\/p>\n<p>\u041f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f, \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 OpenCL, \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u0438 \u0437\u0430\u043f\u0443\u0449\u0435\u043d\u044b \u043d\u0430 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u043b\u0430\u0442\u0444\u043e\u0440\u043c\u0430\u0445. \u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430 hydra.jinr.ru \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0434\u043d\u0443 \u0438\u0437 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u043d\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u0432\u0435\u0440\u0441\u0438\u0439 CUDA, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0430\u043a\u0435\u0442\u043d\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c MODULES: \u0422\u0430\u043a\u0436\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043e\u0434\u043d\u0443 \u0438\u0437 \u0432\u0435\u0440\u0441\u0438\u0439 ROOT. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0442\u0430\u043a:<\/p>\n<p><!--\u041d\u0430\u0447\u0430\u043b\u043e \u0431\u043b\u043e\u043a\u0430 \u0441 \u043a\u043e\u0434\u043e\u043c--><\/p>\n<div class=\"b-incut-code\">\n<pre>module add ROOT\/v6-13-02-1\r\nmodule add cuda\/v9.1-1\r\n<\/pre>\n<\/div>\n<p><!--\u0411\u043b\u043e\u043a \u043a\u043e\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d--><\/p>\n<p>\u0414\u043b\u044f \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043c\u0430\u043a\u0440\u043e\u0441\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043a\u043e\u043c\u0430\u043d\u0434\u0443<\/p>\n<p><!--\u041d\u0430\u0447\u0430\u043b\u043e \u0431\u043b\u043e\u043a\u0430 \u0441 \u043a\u043e\u0434\u043e\u043c--><\/p>\n<div class=\"b-incut-code\">\n<pre>g++ TreeOpenCL.C -lOpenCL `root-config --cflags --glibs`\r\n<\/pre>\n<\/div>\n<p><!--\u0411\u043b\u043e\u043a \u043a\u043e\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d--><\/p>\n<p>\u041f\u0440\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0439 \u043a\u043e\u043c\u043f\u0438\u043b\u044f\u0446\u0438\u0438 \u043e\u0431\u0440\u0430\u0437\u0443\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u0439 \u0431\u0438\u043d\u0430\u0440\u043d\u044b\u0439 \u0444\u0430\u0439\u043b. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u043c\u044f \u0431\u0438\u043d\u0430\u0440\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 &#8211; a.out. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c OpenCL &#8211; \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043d\u0430 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 hybrilit \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c <a href=\"http:\/\/hybrilit.jinr.ru\/how_to_work_on_cluster\/\">\u0437\u0434\u0435\u0441\u044c<\/a>. \u041f\u0440\u0438\u0432\u0435\u0434\u0435\u043c \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u043c\u044b\u0439 \u0432\u0438\u0434 script-\u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430 GPU. \u0418\u043c\u044f \u0441\u043a\u0440\u0438\u043f\u0442\u0430 &#8211; script_gpu.<\/p>\n<p><!--\u041d\u0430\u0447\u0430\u043b\u043e \u0431\u043b\u043e\u043a\u0430 \u0441 \u043a\u043e\u0434\u043e\u043c--><\/p>\n<div class=\"b-incut-code\">\n<pre>#!\/bin\/sh\r\n# Set the partition where the job will run:\r\n#SBATCH -p gpu\r\n# Set the number of GPUs per node\r\n#SBATCH --gres=gpu:1\r\n# Set time of work: \r\n#SBATCH -t 60\r\n# Submit a job for execution:\r\nsrun  .\/a.out\r\n# End script\r\n<\/pre>\n<\/div>\n<p><!--\u0411\u043b\u043e\u043a \u043a\u043e\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d--><\/p>\n<p>\u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043d\u0430 CPU \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043a\u0440\u0438\u043f\u0442 script_cpu:<\/p>\n<p><!--\u041d\u0430\u0447\u0430\u043b\u043e \u0431\u043b\u043e\u043a\u0430 \u0441 \u043a\u043e\u0434\u043e\u043c--><\/p>\n<div class=\"b-incut-code\">\n<pre>#!\/bin\/sh\r\n#SBATCH -p cpu\r\n#SBATCH -c 12\r\n#SBATCH t 60\r\n.\/a.out\r\n<\/pre>\n<\/div>\n<p><!--\u0411\u043b\u043e\u043a \u043a\u043e\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d--><\/p>\n<p>\u0414\u043b\u044f \u0437\u0430\u043f\u0443\u0441\u043a\u0430 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430:<\/p>\n<p><!--\u041d\u0430\u0447\u0430\u043b\u043e \u0431\u043b\u043e\u043a\u0430 \u0441 \u043a\u043e\u0434\u043e\u043c--><\/p>\n<div class=\"b-incut-code\">\n<pre>sbatch script_gpu\r\n<\/pre>\n<\/div>\n<p><!--\u0411\u043b\u043e\u043a \u043a\u043e\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d--><\/p>\n<p>\u0438\u043b\u0438<\/p>\n<p><!--\u041d\u0430\u0447\u0430\u043b\u043e \u0431\u043b\u043e\u043a\u0430 \u0441 \u043a\u043e\u0434\u043e\u043c--><\/p>\n<div class=\"b-incut-code\">\n<pre>sbatch script_cpu\r\n<\/pre>\n<\/div>\n<p><!--\u0411\u043b\u043e\u043a \u043a\u043e\u0434\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d--><\/p>\n<p>\u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 GPGPU (OpenCL \u0438 CUDA) \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0442\u0430\u043a\u043e\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u044f\u0442 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u044b\u0435 \u0410\u0420\u0418\u0424\u041c\u0415\u0422\u0418\u0427\u0415\u0421\u041a\u0418\u0415 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u044d\u0442\u043e \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u043e \u0434\u043b\u044f (\u043f\u043e\u0447\u0442\u0438) \u0432\u0441\u0435\u0445 \u0437\u0430\u0434\u0430\u0447 \u043b\u0438\u043d\u0435\u0439\u043d\u043e\u0439 \u0430\u043b\u0433\u0435\u0431\u0440\u044b. \u042d\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u044e\u0442\u0441\u044f \u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0442 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043d\u0430 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u043e\u0432.<\/p>\n<p>\u041f\u043e <a href=\"https:\/\/git.jinr.ru\/tsolovyeva\/rootongpu\">\u044d\u0442\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435<\/a> \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0442\u0435\u0441\u0442\u043e\u0432, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0440\u0430\u0432\u043d\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u0441\u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e OpenCL \u0438 PROOF.<\/p>\n<\/article>\n","protected":false},"excerpt":{"rendered":"<p>ROOT \u043d\u0430 GPU (OpenCL) \u0421 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0432\u043e\u0435\u0433\u043e \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f ROOT \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c \u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u0438\u0437\u043c. \u041e\u0434\u043d\u0430\u043a\u043e \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435 \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438 \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043b\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0445 \u0443\u0441\u0438\u043b\u0438\u0439 \u043e\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. ROOT 6 \u0438 \u043d\u043e\u0432\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0430\u0442\u043e\u0440 CLING \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u043b\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043c\u043d\u043e\u0433\u043e\u043f\u043e\u0442\u043e\u0447\u043d\u044b\u0445 \u0438 \u043f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439. \u0421\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u0447\u0430\u0441\u0442\u043e \u0438\u043c\u0435\u044e\u0442 \u0433\u0435\u0442\u0435\u0440\u043e\u0433\u0435\u043d\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u0442\u043e \u0435\u0441\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u0442 \u0438\u0437 \u0440\u0430\u0437\u043d\u043e\u0440\u043e\u0434\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 &#8211; \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0440\u0430 (CPU) \u0441 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":303,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"page-root.php","meta":{"_acf_changed":false,"footnotes":""},"class_list":["post-385","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/micc.jinr.ru\/index.php?rest_route=\/wp\/v2\/pages\/385","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/micc.jinr.ru\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/micc.jinr.ru\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/micc.jinr.ru\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/micc.jinr.ru\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=385"}],"version-history":[{"count":2,"href":"https:\/\/micc.jinr.ru\/index.php?rest_route=\/wp\/v2\/pages\/385\/revisions"}],"predecessor-version":[{"id":618,"href":"https:\/\/micc.jinr.ru\/index.php?rest_route=\/wp\/v2\/pages\/385\/revisions\/618"}],"up":[{"embeddable":true,"href":"https:\/\/micc.jinr.ru\/index.php?rest_route=\/wp\/v2\/pages\/303"}],"wp:attachment":[{"href":"https:\/\/micc.jinr.ru\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=385"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}