<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Блоги &#187; Vladimir Tsymbal (Intel)</title>
	<atom:link href="http://software.intel.com/ru-ru/blogs/author/vladimir-tsymbal/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/ru-ru/blogs</link>
	<description></description>
	<lastBuildDate>Thu, 24 May 2012 12:16:29 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Как и зачем мерить FLOPSы</title>
		<link>http://software.intel.com/ru-ru/blogs/2012/05/24/flops/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2012/05/24/flops/#comments</comments>
		<pubDate>Thu, 24 May 2012 12:16:29 +0000</pubDate>
		<dc:creator>Vladimir Tsymbal (Intel)</dc:creator>
				<category><![CDATA[Intel Software Network]]></category>
		<category><![CDATA[Разработка софта]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2012/05/24/flops/</guid>
		<description><![CDATA[Следующий обзор на Хабре - рассматриваются способы измерения производительнcоти вычислительных систем в FLOPS, а также метод измерения FLOPS программной реализации алгоритмов с помощью Intel VTune Amplifier XE. Хабра-ссылка. Как всегда, вопросы можно задавать и здесь, на ISN.]]></description>
			<content:encoded><![CDATA[<p>Следующий обзор на Хабре - рассматриваются способы измерения производительнcоти вычислительных систем в FLOPS, а также метод измерения FLOPS программной реализации алгоритмов с помощью Intel VTune Amplifier XE. <a href="http://habrahabr.ru/company/intel/blog/144388/">Хабра-ссылка</a>. Как всегда, вопросы можно задавать и здесь, на ISN.</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2012/05/24/flops/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Простая логика Инспектора</title>
		<link>http://software.intel.com/ru-ru/blogs/2012/05/17/2007570/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2012/05/17/2007570/#comments</comments>
		<pubDate>Thu, 17 May 2012 10:35:54 +0000</pubDate>
		<dc:creator>Vladimir Tsymbal (Intel)</dc:creator>
				<category><![CDATA[Intel Software Network]]></category>
		<category><![CDATA[Разработка софта]]></category>
		<category><![CDATA[Inspector XE]]></category>
		<category><![CDATA[operator new]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2012/05/17/2007570/</guid>
		<description><![CDATA[Многим кажется, что Инпектор иррационален, совершает бессмысленные действия, дает ненужную информацию, и вообще его сложно понять. Доходит до смешного: обвинению подвергаются всем знаковые и милые горожане. В данном посте мы попытаемся понять простую логику Инспекора, которая, порою, объясняется сложными или даже скрытными действиями его подопечных.]]></description>
			<content:encoded><![CDATA[<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/1_mil_louis_defunes.jpg"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/1_mil_louis_defunes.jpg" alt="" width="300" height="350" class="alignright size-full wp-image-2007573" /></a></p>
<p><i>- Крюшо, в чем дело?<br />
- Мы только что приехали!<br />
- Вижу. А перед этим?<br />
- А перед этим выехали..<br />
(Жандарм и инопланетяне)</i></p>
</p>
<p>Многим кажется, что Инпектор иррационален, совершает бессмысленные действия, дает ненужную информацию, и вообще его сложно понять. Доходит до смешного: обвинению подвергаются всем знаковые и милые горожане. В данном посте мы попытаемся понять простую логику Инспектора, которая, порою, объясняется сложными или даже скрытными действиями его подопечных.</p>
<p>В этот раз речь пойдет об уже набившей оскомину диагностике <strong>“Mismatched Allocation/Deallocation”</strong>, которую выдает <a href="http://software.intel.com/en-us/articles/intel-inspector-xe/">Inspector XE</a> при анализе ошибок памями (Memory Checking). Простые жители Сан-Тропе недоумевают, почему в списке подозреваемых оказываются совершенно невинные объекты. В их действиях, видимо, совершенно нет ничего криминального. Ну посудите сами, где здесь нарушения и почему Инспектор подозревает в несовпадении парных операций выделения и уничножения объекта памяти в куче?</p>
<pre name="code" class="cpp">
	Ray *p = NULL;
	const int nsize=4;
	CMemAllocTestDlg dlg;
	m_pMainWnd = &amp;dlg;
	INT_PTR nResponse = dlg.DoModal();

	if (nResponse == IDOK){
		p = new Ray[nsize];	}
	else if (nResponse == IDCANCEL){
	}

	if (p != NULL)
		delete [] p;</pre>
</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/2_mil.jpg"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/2_mil.jpg" alt="" width="662" height="481" class="alignnone size-full wp-image-2007583" /></a></p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/3_mil.jpg"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/3_mil.jpg" alt="" width="653" height="423" class="alignnone size-full wp-image-2007584" /></a></p>
<p>Первой зацепкой в данном запутанном деле должно стать то, что в отчете Memory Checking анализа в поле Allocation Site (место выделеня памяти) указан не пользовательский модуль с кодом p = new Ray[nsize], а отладочная версия модуля mfc100.dll – его видно, если пойти вверх по стеку вызовов в Инспекторе. Это очень важная зацепка. Иногда ее может не быть, если например библиотека MFC, которая используется в приложении, расположена где-нибудь в нестандартном месте или вообще отсутствует в системных путях, и приставлена к программе в какой-нибудь директории.</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/4_mil.jpg"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/4_mil.jpg" alt="" width="328" height="407" class="alignnone size-full wp-image-2007586" /></a></p>
<p>Далее, пользуясь этой зацепкой, раскручиваем стек вызовов с помощью республиканской гвардии, то есть отладчика. Остановим выполнение программы на строчке с вызовом оператора <em>new</em>, и «прыгнем» в этот вызов. И что мы видим? Оказывается, коварные инопланетяне подменили всем известного и знакомого горожанина <em>new</em> своим железным макросом NEW_DEBUG,</p>
<pre name="code" class="cpp">
#ifdef _DEBUG
#define new DEBUG_NEW
#endif</pre>
<p>который, если ему постучать кулаком по спине, отзовется гулким эхом <em>_malloc_dbg</em> (оканчивающийся вызовом имплементации функции <em>malloc()</em> с помощью <em>HeapAlloc()</em> в malloc.c):</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/5_mil.jpg"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/5_mil.jpg" alt="" width="612" height="140" class="alignnone size-full wp-image-2007588" /></a></p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/6_mil.jpg"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/6_mil.jpg" alt="" width="624" height="365" class="alignnone size-full wp-image-2007589" /></a></p>
<p>Да, Инспектор прост и логичен: он, исследуя (следы преступления) исполнение кода сопоставил два оператора, которые выделяли и уничтожали объект. В первом случае <em>new</em> оказался подозрительным, был опрошен с пристрастием, и признался что он <em>malloc</em>. А вот во втором от встречает <em>delete[]</em>, интерпретировал его как деаллокатор, о чем смело и рапортовал шефу.Он не стал раскручивать стек, так как внутренняи имплементация оператора его не интересует (а зря, так как имплементация <em>delete</em> тоже оканчивается вызовом <em>HeapFree()</em>).</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/7_mil.jpg"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/7_mil.jpg" alt="" width="626" height="138" class="alignnone size-full wp-image-2007591" /></a></p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/8_mil.jpg"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/8_mil.jpg" alt="" width="630" height="194" class="alignnone size-full wp-image-2007592" /></a></p>
</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/9_mil_le-gendarme.jpg"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/9_mil_le-gendarme.jpg" alt="" width="200" height="202" class="alignright size-full wp-image-2007596" /></a></p>
<p>Как не попасться Инспектору и избежать задержания и доставления в участок? Довольно просто. Нужно переопределить оператор <em>new</em> для ваших модулей, или убрать переопределение, которое установили инопланетяне при генерировании шаблона проекта в Visual Studio. Кстати, необходимо помнить, что заголовочный файл "afxtempl.h" тоже переопределяет этот оператор.</p>
<p>Надо отметить, что с годами работы Испектор становится все опытнее и мудрее. Скоро, возможно, он научится распознавать инопланетные клоны «на глаз», и будет их игнорировать, если они не нарушают порядок в маленьком городе. В конеце-концов, они прилетели к нам с миром, и совсем не мечтают о его завоевании. Но это не значит, что Инспектор потеряет бдительность. Он все так же следит за всем, что происходит вокруг.</p>
<p>Cсылки на прошлые посты об Инспекторе:<br />
<a href="http://software.intel.com/ru-ru/blogs/2010/10/04/2004014/">Имеет ли Инспектор право на ошибку?</a><br />
<a href="http://software.intel.com/ru-ru/blogs/2009/12/21/2002802/">Куда смотрит Инспектор?</a><br />
<a href="http://software.intel.com/ru-ru/blogs/2009/11/10/2002484/">Когда Инспектор слишком строг</a><br />
<a href="http://software.intel.com/ru-ru/blogs/2009/10/09/inspector/">Когда Inspector мышей не ловит</a><br />
<a href="http://software.intel.com/ru-ru/blogs/2009/08/24/2002017/">Разгадываем загадку многопоточности</a><br />
<a href="http://software.intel.com/ru-ru/blogs/2009/07/10/parallel-inspector/">Загадочная многопоточность и Parallel Inspector</a></p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2012/05/17/2007570/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Делиться не всегда полезно: оптимизируем работу с кэш-памятью</title>
		<link>http://software.intel.com/ru-ru/blogs/2012/05/10/2007324/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2012/05/10/2007324/#comments</comments>
		<pubDate>Thu, 10 May 2012 10:18:35 +0000</pubDate>
		<dc:creator>Vladimir Tsymbal (Intel)</dc:creator>
				<category><![CDATA[Intel Software Network]]></category>
		<category><![CDATA[Параллельное программирование]]></category>
		<category><![CDATA[False Sharing]]></category>
		<category><![CDATA[Intel VTune Amplifier XE]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2012/05/10/2007324/</guid>
		<description><![CDATA[Очередной обзор на Хабре - рассмотривается случай возникновения проблем производительности многопоточных программ, как их обнаруживать с помощью General Exploration анализа в VTune Amplifier XE, а затем я даю несколько общих рекомендаций, как избежать проблемы потери эффективности вычислений из-за разделения кэша между потоками. Хабра-ссылка. Как всегда, вопросы можно задавать и здесь, на ISN.]]></description>
			<content:encoded><![CDATA[<p>Очередной обзор на Хабре - рассмотривается случай возникновения проблем производительности многопоточных программ, как их обнаруживать с помощью General Exploration анализа в VTune Amplifier XE, а затем я даю несколько общих рекомендаций, как избежать проблемы потери эффективности вычислений из-за разделения кэша между потоками. <a href="http://habrahabr.ru/company/intel/blog/143446">Хабра-ссылка</a>. Как всегда, вопросы можно задавать и здесь, на ISN.</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2012/05/10/2007324/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Давайте сделаем паузу. Способ улучшения синхронизации потоков.</title>
		<link>http://software.intel.com/ru-ru/blogs/2012/04/20/2007130/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2012/04/20/2007130/#comments</comments>
		<pubDate>Fri, 20 Apr 2012 14:44:06 +0000</pubDate>
		<dc:creator>Vladimir Tsymbal (Intel)</dc:creator>
				<category><![CDATA[Intel Software Network]]></category>
		<category><![CDATA[Параллельное программирование]]></category>
		<category><![CDATA[Intel VTune Amplifier XE]]></category>
		<category><![CDATA[openmp]]></category>
		<category><![CDATA[pause instruction]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2012/04/20/2007130/</guid>
		<description><![CDATA[Еще один обзор на Хабре - на этот раз обсуждается подход к решению проблемы избыточной синхронизации в OpenMP приложении, влияющей на производительность, с помощью нового типа анализа в VTune Amplifier XE 2013 beta. Хабра-ссылка. Как всегда, вопросы можно задавать и здесь, на ISN.]]></description>
			<content:encoded><![CDATA[<p>Еще один обзор на Хабре - на этот раз обсуждается подход к решению проблемы избыточной синхронизации в OpenMP приложении, влияющей на производительность, с помощью нового типа анализа в VTune Amplifier XE 2013 beta. <a href="http://habrahabr.ru/company/intel/blog/142382/">Хабра-ссылка</a>. Как всегда, вопросы можно задавать и здесь, на ISN.</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2012/04/20/2007130/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Оптимизация для CPU: как найти черную кошку в темной комнате</title>
		<link>http://software.intel.com/ru-ru/blogs/2012/03/29/cpu-3/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2012/03/29/cpu-3/#comments</comments>
		<pubDate>Thu, 29 Mar 2012 15:04:19 +0000</pubDate>
		<dc:creator>Vladimir Tsymbal (Intel)</dc:creator>
				<category><![CDATA[Intel Software Network]]></category>
		<category><![CDATA[Разработка софта]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2012/03/29/cpu-3/</guid>
		<description><![CDATA[Опубликовал новый обзор по решению одной из проблем производительности на Intel микроархитектуре с помощью VTune Amplifier XE профилировки. Хабра-ссылка. Если есть вопросы, их можно задавать и здесь, на ISN.]]></description>
			<content:encoded><![CDATA[<p>Опубликовал новый обзор по решению одной из проблем производительности на Intel микроархитектуре с помощью VTune Amplifier XE профилировки. <a href="http://habrahabr.ru/company/intel/blog/140965/">Хабра-ссылка</a>. Если есть вопросы, их можно задавать и здесь, на ISN.</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2012/03/29/cpu-3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ява снова доступна!</title>
		<link>http://software.intel.com/ru-ru/blogs/2012/03/06/2006969/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2012/03/06/2006969/#comments</comments>
		<pubDate>Tue, 06 Mar 2012 10:37:14 +0000</pubDate>
		<dc:creator>Vladimir Tsymbal (Intel)</dc:creator>
				<category><![CDATA[Intel Software Network]]></category>
		<category><![CDATA[Разработка софта]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[VTune Amplifier XE]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2012/03/06/2006969/</guid>
		<description><![CDATA[Хотя правооблатетели торговой марки Java(TM) не признают, что произношение острова Jawa имеет отношение к их продукту, логотип, напоминающий чашечку дымящегося кофе, довольно устойчиво ассоциируется с замечательным кофе Лювак, проиводящимся в Индонезии, и вкус которого запомнится любому попробовавшему его кофеману. Спустя 6 лет после сильнейшего цунами, обрушевшегося на остров Ява, туристы снова потянулись на этот удивительный [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/java-0.jpg"><img class="alignleft size-full wp-image-2006977" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/java-0.jpg" alt="" width="122" height="92" /></a><br />
Хотя правооблатетели торговой марки Java(TM) не признают, что произношение острова Jawa имеет отношение к их продукту, логотип, напоминающий чашечку дымящегося кофе, довольно устойчиво ассоциируется с замечательным кофе Лювак, проиводящимся в Индонезии, и вкус которого запомнится любому попробовавшему его кофеману.</p>
<p>Спустя 6 лет после сильнейшего цунами, обрушевшегося на остров Ява, туристы снова потянулись на этот удивительный индонезийский остров. Все возвращается на круги своя. Многие пользователи старого доброго VTune Performance Analyser наверняка помнят, что в нем поддерживался анализ Java-приложений, хотя этот тип профилировки имеет довольно специфичное назначение. С выходом нового поколения продуктов Parallel Amplifier и VTune Amplifier XE, поддержка Java как-то исчезла из списка приоритетных задач и не была востребована пользователями. Но сейчас возник новый интерес к профилировке производительности «чистых» Java и особенно гибридных Java + нативных C/C++ приложений. Поэтому этот инструмент снова появляется в VTune Amplifier XE в дополнение к поддержке jit-компилированных приложений.</p>
<p>Итак, что же позволяет нам сделать профилировка Java-приложений. Основное назначение профилировки – это выявление функций или участков кода, которые больше всего занимают процессорное время, и определить, насколько эффективно они это делают. Не смотря на то, что код выполняется под управлением Managed Run Time Environment, оперирование данными в памяти может быть также неэффективным, как и в нативных приложениях. Например, учитывать кэш-иерархию системы памяти и скорость доступа к массивам в основной физической памяти системы можно и нужно при написании Java-кода. В этом смысле профилировка Java-приложения почти ничем не отличается от профилировки C/C++ приложения, кроме, наверное, того, что показатели производительности теперь надо отображать относительно исходного кода, который виртуальная машина (JVM) выполняла как ей заблагорассудится (либо скомпилировала, либо интерпретировала), и еще в специальном виртуальном адресном пространстве.</p>
<p>Тем не менее, в результате Hotspot-анализа мы получаем список самых «горячих» функций-методов, выполнявшихся в приложении, с временными характеристиками, а также стеки их вызовов. Обратите внимание, что распределение нагрузки по потокам тоже отображается в результатах, а именованые потоки помогают определить, где выполнялся «тяжелый» код.</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/java-1.jpg"><img class="alignnone size-full wp-image-2006978" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/java-1.jpg" alt="" width="698" height="378" /></a></p>
<p>Не секрет, что в приложениях, где некоторый функционал требует максимальной производительности на платформе, часто прибегают к такой хитрости: наиболее критичные участки программы пишут и компилируют на низкоуровневых языках, например на С или даже на ассемблере. Это делают чтобы задействовать некоторые архитектурные особенности процессора, например векторный вычислитель. Часто такие функции и являются хотспотами, так как берут на себя львиную долю вычислительной нагрузки. Но иногда нам необходимо определить, откуда они были вызваны, что может оказаться проблемой в гибридном коде, потому что часть алгоритма вычисления реализована в Java-коде, а С-код вызывается с помощью интерфейса JNI.</p>
<p>В результатах Hotspot-анализа вы увидлите, что VTune Amplifier XE «сшивает» стеки вызовов сделанных из Java-кода, и перенаправленных в нативный C-код. Впрочем, и обратные вызовы из С-модуля в Java будут отображены на панели стеков.</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/java-2.jpg"><img class="alignnone size-full wp-image-2006979" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/java-2.jpg" alt="" width="692" height="275" /></a></p>
<p>Ну и теперь блюдо для гурманов. Java-приложение можно анализировать и оптимизировать для микроархитектуры конкретного поколения микропроцессоров, как не парадоксально это звучит. Дело в том, что не смотря на то, что сама суть Java-машины в том, чтобы программист не задумывался, на какой платфотме она будет выполнять его приложние, исходный программный код, оптимизированный для выполнения на текущем поколении процессоров Intel, с большой вероятностью буде работать достаточно оптимально и на более новых Intel-процессорах.</p>
<p>Тем, кто любит поковыряться в недрах процессорного конвеера и вычислительных блоках, предлагается Hardware Event-based Sampling анализ, который позволяет собирать процессорные аппаратные события, и по их соотношениям или метрикам (как встроенным, так и пользовательским) судить о тех или иных проблемах в очереди исполнения команд. Все результаты в виде Hardware Events и метрик доступны на уровне методов и исходного кода Java-программы.</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/java-3.jpg"><img class="alignnone size-full wp-image-2006980" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/java-3.jpg" alt="" width="694" height="353" /></a></p>
<p>К сожалению, JVM-машина, выполняя различные трюки с исходным кодом, не всегда обеспечивает информацию о точном соответствии адреса исполняемой инструкции номеру строки исходного кода. В результате мы можем получить некоторое «сползание» временных значений относительно строк исходника. А если это цикл, то правильное время CPU Time может "уползти" и вверх. Здесь нужно просто быть внимательным, и оценивать какая именно из соседних строк с кодом может соответствовать результатам.</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/java-4.jpg"><img class="alignnone size-full wp-image-2006981" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/java-4.jpg" alt="" width="567" height="372" /></a></p>
<p>Иногда JVM предпочитает некоторые не часто вызываемые методы проинтерпретировать, так как компиляция требует большего времени. Символы таких функций мы пока не умеем надежно определять, поэтому они будут заменены на символ “!Interpreter” в стеке вызовов. Если вам необходимо увидеть эту функцию в стеке, заставьте JVM скомпилировать все методы опцией “–Xcomp”. Хотя и в этом случае нет гарантии появления символа в стеке, так как некоторые функции могут быть «заинлайнены».</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/java-51.jpg"><img class="alignnone size-full wp-image-2006988" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/java-51.jpg" alt="" width="633" height="464" /></a></p>
<p>Есть ли еще какие-либо ограничения в анализе Java-приложений? Конечно же есть. Поддержать все многообразие Java Runtime Environment (JRE) довольно сложно, поэтому мы остановились на поддержке Oracle* Java 6 и 7. Кроме того, профилировка полностью поддержвается в рамках Hotspot-анализа, и анализа на основе Hardware Event-based Sampling (например Lightweight Hotspot), а Cuncurrency-анализ ограничен тем, что некоторые встроенные в Java примитивы синхронизации (которые не вызывают напрямую объекты синхронизации ядра ОС) мы не сможем распознать, вследствие чего, некоторые временные характеристики могут быть искажены. Тоже самое относится и к Locks&amp;Waits анализу. Пользователь пока не может прикрепиться инструментом к jre-процессу во время исполнения и у нас нет специальных библиотек, поддерживающих User API для управления коллекцией в коде Java-приложений. Но особо настойчивые могут попытаться «прикрутить» обычный API для С-программ, обернув соответствующие _itt вызовы JNI-функциями.</p>
<p>Ну и маленький совет тем, кто профилирует Java-приложения под Linux: на linux x86 платформах используйте клиентскую JVM, а не серверную, или специфицируйте опцию “–client” в командной строке.</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2012/03/06/2006969/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Портируем Windows OpenMP-приложение на Intel OpenMP run-time</title>
		<link>http://software.intel.com/ru-ru/blogs/2010/12/14/windows-openmp-intel-openmp-run-time/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2010/12/14/windows-openmp-intel-openmp-run-time/#comments</comments>
		<pubDate>Tue, 14 Dec 2010 10:28:42 +0000</pubDate>
		<dc:creator>Vladimir Tsymbal (Intel)</dc:creator>
				<category><![CDATA[Параллельное программирование]]></category>
		<category><![CDATA[Разработка софта]]></category>
		<category><![CDATA[openmp]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2010/12/14/windows-openmp-intel-openmp-run-time/</guid>
		<description><![CDATA[Перенос Windows OpenMP-приложения на OpenMP run-time от Intel – довольно простая задача. С использованием Intel OpenMP run-time появляется возможность анализировать и находить ошибки многопоточности с помощью Intel Parallel Inspector либо Intel Inspector XE. Здесь представлена пошаговая инструкция, как это сделать.]]></description>
			<content:encoded><![CDATA[<p>Главный вопрос, зачем на это может быть вообще понадобиться. Ответ на него недавно был мною получен эмпирическим путем. А именно, путем изучения результатов анализа Инспектора и потерей времени на то, чтобы понять, почему он выдал большое число необъяснимых ошибок. Неимоверное количество data race диагностик было обнаружено в структурах данных, которые, как казалось, вроде бы не должны иметь место, так как эти данные вполне разнесены в полях объектов и обращение к ним из потоков должно быть безопасным. </p>
<p>Об эти ошибки пришлось изрядно поломать голову, прежде чем я сообразил, что мы имеем дело с OpenMP run-time от Microsoft*. Вернее я не сообразил, мне подсказали.</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/OpenMP-Warning-1.jpg"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/OpenMP-Warning-1.jpg" alt="" width="539" height="277" class="alignnone size-full wp-image-2004224" /></a></p>
<p>Что ж, в удаленном анализе приложения клиента есть свои недостатки. Именно поэтому сообщение Инспектора при старте анализа в окне вывода я не видел, да и про и свою же <a href="http://software.intel.com/ru-ru/blogs/2009/10/09/inspector/">статью</a> по этому поводу успешно забыл (да, так бывает).</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/OpenMP-Warning.jpg"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/OpenMP-Warning.jpg" alt="" width="681" height="287" class="alignnone size-full wp-image-2004226" /></a></p>
<p>Существует и ряд других причин, о которых говорить здесь было бы не этично, по отношению к нашим партнерам из Майкрософт, т.к. баги есть у всех – оставим их изучение пользователям технологии OpenMP.</p>
<p>Итак, с чего же начать? Прежде всего необходимо скачать и установить последнюю версию <a href="http://software.intel.com/en-us/articles/intel-composer-xe/">Intel® Composer XE 2011</a> (пакет, в который входит профессиональная версия C++ компилятора Intel). Кстати, можно обойтись и более бюджетным <a href="http://software.intel.com/en-us/articles/intel-parallel-composer/">Intel® Parallel Composer 2011</a>.</p>
<p>Дальше я приведу пошаговую инструкцию, применительно для С/С++ проекта, разрабатываемого в Microsoft* Visual Studio 2008. В проекте необходимо произвести изменения в установках среды разработки, которые позволят импользовать библиотеку совместимости OpenMP от Intel. Для 64-битного проекта, в Debug-режиме, при динамической линковке OpenMP-библиотеки необходимо сделать следующее:</p>
<p>1.	Определите символ <em>_OPENMP_NOFORCE_MANIFEST</em> в свойствах проекта (Property Pages): <strong>C/C++ &gt;Preprocessor &gt; Preprocessor Definitions</strong></p>
<p>2.	В свойствах проекта установите путь к библиотеке Intel OpenMP: <strong>Linker &gt; General &gt; Additional Library Directories</strong> установите <code>&lt;Intel_Сomposer_installation_path&gt;\compiler\lib\intel64\</code></p>
<p>3.	Сделайте библиотеку Intel OpenMP доступной для отладки: <strong>Debugging &gt; Environment</strong> установите <code>PATH=%PATH%;&lt;Intel_Сomposer_installation_path&gt;\redist\intel64\compiler\</code></p>
<p>4.	Добавьте имя библиотеки Intel OpenMP в опции линковщика и исключите библиотеку Microsoft OpenMP которая используется по-умолчанию:<br />
<strong>Linker &gt; Input &gt; Additional Dependencies</strong> установите <code>libiomp5md.lib</code><br />
<strong>Linker &gt; Input &gt; Ignore Specific Library</strong> установите <code>vcompd.lib</code></p>
<p>5.	Удостоверьтесь, что установлена опция поддержки OpenMP в проекте: <strong>C/C++ &gt; Language &gt; OpenMP Support</strong> установите <code>Yes(/openmp)</code></p>
<p>6.	Удостоверьтесь, что установлена опция многопоточной библиотеки run-time: <strong>C/C++ &gt;Code Generation &gt; Runtime Library</strong> установите <code>Multi-threaded Debug DLL (/MDd)</code></p>
<p>Вот и все. Проект можно продолжать компилировать с использованием компилятора Visual C++, при этом управлением OpenMP-потоками займется библиотека Intel OpenMP run-time, а Intel Inspector будет выдавать более-менее вменяемые результаты анализа ошибок многопоточности.</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2010/12/14/windows-openmp-intel-openmp-run-time/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Имеет ли Инспектор право на ошибку?</title>
		<link>http://software.intel.com/ru-ru/blogs/2010/10/04/2004014/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2010/10/04/2004014/#comments</comments>
		<pubDate>Mon, 04 Oct 2010 09:19:46 +0000</pubDate>
		<dc:creator>Vladimir Tsymbal (Intel)</dc:creator>
				<category><![CDATA[Разработка софта]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2010/10/04/2004014/</guid>
		<description><![CDATA[Несколько моих последних записей, посвященных Инспектору, раскрывали некоторые «особенности» и стиль его работы. Больше всего внимания на страницах вечерних газет уделялось его эффективности обнаружения ошибок памяти. Надо сказать, что в Скотланд Ярде его считают не таким уж и плохим профессионалом. Да что там неплохим. Лучшим!]]></description>
			<content:encoded><![CDATA[<p style="text-align: left">
<p style="text-align: left;padding-left: 180pt"><em>- Слава Богу, дело ведёт инспектор Лестрейд. Газеты пишут - лучший инспектор.<br />
- Инспектор Лестрейд - самодовольный осёл, миссис Хадсон.<br />
- Так пишет «Таймс»…</em></p>
<p style="text-align: left"><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/sherlock_holmes_lestrade_22.jpg"><img class="alignleft size-full wp-image-2004015" style="margin-left: 12px;margin-right: 12px" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/sherlock_holmes_lestrade_22.jpg" alt="" width="200" height="240" /></a></p>
<p style="text-align: left">Несколько моих последних записей, посвященных Инспектору, раскрывали некоторые «особенности» и стиль его работы. Больше всего внимания на страницах вечерних газет уделялось его эффективности обнаружения ошибок памяти. Надо сказать, что в Скотланд Ярде его считают не таким уж и плохим профессионалом. Да что там неплохим, лучшим.. Однако находятся выскочки, которые считают себя гениальными и незаслуженно лишенными славы на страницах уголовных хроник. В прошлом, они не раз <a href="http://software.intel.com/ru-ru/blogs/2009/12/21/2002802/">пытались</a> копнуть под Инспектора и опорочить его профессиональную репутацию. Что ж посмотрим, что они нам предъявляют на этот раз.</p>
<p style="text-align: left">На этот раз суть претензий к Инспектору состоит в том, что он не обнаруживает утечки памяти в глобальных, либо статических объектах, которая была выделена в «куче», то есть с помощью операторов malloc или new. Другими словами, если глобальный или статический объект, содержащий в себе указатели на память, выделенную в «куче», не позаботится об ее освобождении, то Инспектор не находит в этом ни какого криминала.</p>
<p style="text-align: left">Вот небольшой пример:</p>
<pre name="code" class="cpp">namespace{
  struct GObj {
    GObj():m(new int()){
    }
    ~GObj()
    {
    // так делают настоящие джентльмены
    // delete m;
    }
  int * const m;
  };

  static GObj obj;
}

int main()
{
  GObj obj;
  // ой, мы забыли освободить память
  return 0;
}</pre>
<p>Слово Инспектору:</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/insp11.jpg"><img class="alignnone size-full wp-image-2004016" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/insp11.jpg" alt="" width="752" height="419" /></a></p>
<p style="text-align: left">Инспектор обнаруживает утечку памяти, и даже указывает функцию конструктора сруктуры, где память была выделена:</p>
<p style="text-align: left"><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/insp21.jpg"><img class="alignnone size-full wp-image-2004019" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/insp21.jpg" alt="" width="752" height="420" /></a></p>
<p style="text-align: left">Однако, в виду простоты кода, нам не сложно заметить, что, если пройти по стеку вниз, то диагностика утечки соответствует созданию объекта в obj в функции main():</p>
<p style="text-align: left"><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/insp31.jpg"><img class="alignnone size-full wp-image-2004020" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/insp31.jpg" alt="" width="752" height="420" /></a></p>
<ul> - А как же объект, созданный глобально? Почему в нем не обнаружена утечка?<br />
- Элементарно, Ватсон. Глобальные и статические объекты существуют в памяти и после выхода управления из функции main(), а значит потерянными не считаются.<br />
- Что же тогда считается потерянной памятью?<br />
- Мой дорогой доктор, настоящий детектив ищет ответ на вопрос, «какие из объектов памяти, выделенные с помощью функций malloc() или new(), которые не были освобождены с помощью функций free() или delete(), не доступны процессу по любой цепочке указателей, находящихся в глобальном или статическом объекте». Так что в этот раз наш Инспектор оказался прав.</ul>
<p style="text-align: left">Таким образом, автоматический объект obj, созданный в main() должен убрать за собой при выходе из функции. В тоже время, глобальный объект obj существует и при выходе из main(), а его память доступна процессу вплоть до прекращения его существования, и хотите вы этого или нет, утечкой считаться не будет. В общем Инспектор не на столько плох, как мы о нем думали.</p>
<p style="text-align: left">Погодите, но есть более вопиющие случаи. Давайте не будем разводить глобальные объекты как йоркширских терьеров, давайте ограничимся глобальным указателем. Инспектор молчит и соблюдает полное спокойствие.</p>
<p style="text-align: left">Вот например:</p>
<pre name="code" class="cpp">#include &lt;stdio.h&gt;

namespace
{
  int * a;
}
int main()
{
  a = new int(5);
  int* b = a;

  printf("%d\n", *b);
  return 0;
// упс, попользовались памятью по
// указателю b и забыли про нее
}</pre>
<p style="text-align: left">Все эти «сложности» с указателем b только чтобы ввести следствие в заблуждение. На самом деле здесь выделена память в «куче»,  а ее адрес назначен статическому указателю. Поэтому Инспектор и молчит, так как соблюдает правило, изложенное выше: в глобальной области существует указатель, по которому можно добраться до выделенной памяти, значит утечки нет.</p>
<p style="text-align: left"><span style="color: #000080">Теперь вопрос к Титанам. Почему это так важно, соблюдение Инспектором данного правила? Ведь процесс все-равно заканчивается с выходом из функции main(), и память потеряна. В чем тут может быть загвоздка?</span></p>
<p style="text-align: left"><span style="color: #000080"> </span><br />
Следствие продолжается...</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2010/10/04/2004014/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Куда смотрит Инспектор?</title>
		<link>http://software.intel.com/ru-ru/blogs/2009/12/21/2002802/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2009/12/21/2002802/#comments</comments>
		<pubDate>Mon, 21 Dec 2009 16:40:23 +0000</pubDate>
		<dc:creator>Vladimir Tsymbal (Intel)</dc:creator>
				<category><![CDATA[Разработка софта]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2009/12/21/2002802/</guid>
		<description><![CDATA[Продолжаю общаться с Инспектором и находить все новые случаи вроде бы парадоксального поведения. Теперь это будет Memory Checker. Проверяем ошибки работы с памятью, выделенной на стеке.]]></description>
			<content:encoded><![CDATA[<p style="text-align: right">“<em>Полицейский находится на своем месте не для того, чтобы создавать беспорядок; <br />полицейский находится там, чтобы поддерживать беспорядок.</em>”</p>
<p style="text-align: right">(Ричард Дейли, мэр Чикаго)</p>
<p style="text-align: left"><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/insp1.jpg"><img class="alignleft size-full wp-image-2002803" style="margin-left: 6px;margin-right: 6px" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/insp1.jpg" alt="" width="344" height="228" /></a></p>
<p>Продолжаю общаться с Инспектором и находить все новые случаи вроде бы парадоксального поведения. Теперь это будет Memory Checker. Проверяем ошибки работы с памятью, выделенной на стеке.</p>
<p>Собственно данная тема, возможно, будет интересна только Титанам, активно использующим фунции проверки памяти с помощью Intel Parallel Inspector. Интересно было бы узнать, возникает ли такая проблема с другими инструментами проверки памяти.</p>
<p>Пример, как всегда, пришел от одного из наших радиослушателей. Законопослушный гражданин недоумевает, почему Инспектор пропускает случаи вопиющего использования неинициализированной памяти без каких либо санкций. Злоумышленники, конечно, замаскировали некорректное использование переменных под объект С++ класса, но это же не должно останавливать всевидящего Инспектора. При этом, в случае простого и очевидного нарушения, Инспектор тут как тут. Может он просто недостаточно компетентен, и ему требуется внеплановая переаттестация? Пришлось провести внутреннее служебное расследование, и я хотел бы поделиться с Титанами его результатами.</p>
<p>Ниже представлен пример кода, в котором допущены две ошибки доступа к неинициализированной памяти в стеке. Если в первом случае с переменной <code>x</code> инспектор рапортует об ошибке, то в случае вызова метода <code>GetValue()</code>, который возвращает неинициализированную переменную <code>fp_value</code> член класса <code>CTest</code>, никакой диагностики не наблюдается.</p>
<pre name="code" class="cpp">class CTest
{
public:
	CTest(){};
	double GetValue() {
	return fp_value;
}
private:
	double fp_value;
};

int main() {

int x;
int y = x + 1;//Uninitialized Memory Read

CTest test;
double z = test.GetValue();//Инспектор не реагирует
printf("%f\n",z);

return 0;
}</pre>
<p>Первой ниточкой, за которую мы потянули в процессе расследования, было сообщение run-time библиотеки:</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/insp2.jpg"><img class="size-full wp-image-2002807 alignnone" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/insp2.jpg" alt="" width="474" height="208" /></a></p>
<p>Значит, по-умолчанию у нас была включена опция копилятора RTCu, которая включает run-time check. Да и в процессе компиляции мы получили соответствующее сообщение относительно переменной <code>x</code>.<br />
А что же с <code>fp_value</code>? Придется поднять дело, то есть залезть в дизассемблер, и посмотреть, что там натворили в соседнем отделе, в Компиляторе (ну, скажем так, в смежном соседнему отделу, так как код собирался компилятором Microsoft – требование радиослушателя). А там все очень интересно:</p>
<pre name="code" class="cpp">	double GetValue() {
004114D0  push        ebp
004114D1  mov         ebp,esp
004114D3  sub         esp,0CCh
004114D9  push        ebx
004114DA  push        esi
004114DB  push        edi
004114DC  push        ecx
004114DD  lea         edi,[ebp-0CCh]
004114E3  mov         ecx,33h
004114E8  mov         eax,0CCCCCCCCh
004114ED  rep stos    dword ptr es:[edi]
004114EF  pop         ecx
004114F0  mov         dword ptr [ebp-8],ecx
	return fp_value;</pre>
<p>При включении run-time check, библиотека сама инициализирует переменные на стеке, и поэтому Инспектор, анализирующий код в процессе исполнения, никак не реагирует, так как никаких нарушений нет.<br />
Если посмотреть на инструкции, сгенерированные компилятором, то можно увидеть, как в регистр <code>eax</code> загружается шаблон инициализации <code>0CCCCCCCCh</code>, а следующая инструкция <code>rep stos dword ptr es:[edi]</code> уже заполняет стек содержимым регистра <code>eax</code>. Если же мы отключим опцию проверки, Project Properties -&gt; C/C++ -&gt; Code Generation -&gt; Basic Runtime Checks: Default, то Инспектор сразу же обнаруживает непорядок (уровень mi4), и сообщает об этом куда надо:</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/insp3.jpg"><img class="size-full wp-image-2002808 alignnone" style="margin-left: 6px;margin-right: 6px" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/insp3.jpg" alt="" width="548" height="380" /></a></p>
<p>Вызов метода <code>GetValue()</code> в данном случае выглядит в дизассемблере следующим образом:</p>
<pre name="code" class="cpp">double GetValue() {
004112F0  push        ebp
004112F1  mov         ebp,esp
004112F3  sub         esp,44h
004112F6  push        ebx
004112F7  push        esi
004112F8  push        edi
004112F9  mov         dword ptr [ebp-4],ecx
	return fp_value;</pre>
<p>Инструкция <code>sub esp,44h</code> резервирует зачем-то много места на стеке (по-моему, слишком избыточно для объекта класса), но память ничем ни инициализируется. Это и не прошло мимо внимательного Инспектора, поэтому он зафиксировал нарушение.</p>
<p>Однако, наш бдительный радиослушатель не унимался. Он сообщил, что если перекомпилировать пример в релизном режиме (опция run-time check при этом выключается), инспектор снова не желает замечать очевидное. Мы проверили и установили: да, не желает. Поэтому пришлось подключать наши лучшие силы, и искать правильный след с собаками.</p>
<p>Скомпилированная в релизном режиме вся программа выглядит довольно короткой. Оно и понятно – ненужные вычисления с иксами и игреками были отимизированы и выброшены за ненадобностью. Объект класса <code>CTest</code> был тоже оптимизирован, причем довольно интересно.</p>
<pre name="code" class="cpp">int main() {
00401000  push        ebp
00401001  mov         ebp,esp
00401003  and         esp,0FFFFFFC0h 

int x;
int y = x + 1;//Uninitialized Memory Read

CTest test;
double z = test.GetValue();//Инспектор не реагирует
printf("%f\n",z);
00401006  fld         qword ptr [esp-8]
0040100A  sub         esp,40h
0040100D  sub         esp,8
00401010  fstp        qword ptr [esp]
00401013  push        offset string "%f\n" (4020F4h)
00401018  call        dword ptr [__imp__printf (4020A0h)]
0040101E  add         esp,0Ch 

return 0;
00401021  xor         eax,eax
}
00401023  mov         esp,ebp
00401025  pop         ebp
00401026  ret</pre>
<p>Обратите внимание  на связку инструкций:</p>
<pre name="code" class="cpp">sub esp,8
fstp qword ptr[esp]</pre>
<p>Похоже, что первая резервирует место на стеке под объет класса. А вторая копирует в стек величину, находящеюся на вершине FP-стека, то есть совершенно случайное значение. Получается, что компилятор соптимизировал программу так, что и объект класса <code>CTest test</code> и его переменная-член класса <code>d</code> занимают одно и тоже место на стеке. А вторая инструкция может интерпретироваться либо как инициализация по-умолчанию объекта <code>test</code>, либо как присвоение значения переменной <code>d</code>. Ну а так как оба находятся по одному и тому же адресу в стеке, можно считать, что инструкция оптимально сразу обоих и инициализирует. От этого чтение переменной <code>d</code> в функции <code>printf</code> не приводит Инспектора к заключению, что имело место быть Uninitialized Memory Access на стеке.</p>
<p>Что ж, в этот раз нам не удалось подловить Инспектора, и он не засыпался на мелочах. Остается только надеяться, что реальные пользовательские приложения не настолько просты, чтобы повторить этот пример. Но мы призываем граждан не терять бдительность и просим присылать все свои наблюдения и подозрения в <a href="http://software.intel.com/ru-ru/forums/intel-parallel-studio/">редакцию</a>. Мы обязательно их расследуем.</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2009/12/21/2002802/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Суперкомпьютеры и HPC Симпозиум 2009</title>
		<link>http://software.intel.com/ru-ru/blogs/2009/11/26/hpc-2009/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2009/11/26/hpc-2009/#comments</comments>
		<pubDate>Thu, 26 Nov 2009 13:46:28 +0000</pubDate>
		<dc:creator>Vladimir Tsymbal (Intel)</dc:creator>
				<category><![CDATA[ISN календарь]]></category>
		<category><![CDATA[Академическое сообщество]]></category>
		<category><![CDATA[Конкурсы и мероприятия]]></category>
		<category><![CDATA[Параллельное программирование]]></category>
		<category><![CDATA[24.11.2009]]></category>
		<category><![CDATA[HPC]]></category>
		<category><![CDATA[Симпозиум]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2009/11/26/hpc-2009/</guid>
		<description><![CDATA[В виду жаркой дискуссии, развернувшейся в ветке об использовании суперкомпьютеров в промышленности, хочу поделиться своими впечатлениями об HPC Симпозиуме, прошедшем на днях в Москве, и на котором мне довелось даже прочитать доклад о взаимодействии Intel и пользователей нашего программного обеспечения.]]></description>
			<content:encoded><![CDATA[<p class="MsoNormal"><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/hpcsymposium.jpg"><img class="alignleft size-full wp-image-2002596" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/hpcsymposium.jpg" alt="" width="300" height="200" /></a></p>
<p class="MsoNormal"><span lang="RU">В виду жаркой дискуссии, развернувшейся в </span><span lang="RU"><a href="http://software.intel.com/ru-ru/blogs/2009/11/18/2002566/">ветке</a></span><span lang="RU"> </span><span lang="RU">об использовании суперкомпьютеров в промышленности, хочу поделиться своими впечатлениями об </span>HPC<span lang="RU"> Симпозиуме, прошедшем на днях в Москве, и на котором мне довелось даже прочитать доклад о взаимодействии Intel и пользователей нашего программного обеспечения.</span></p>
<p class="MsoNormal">
<p class="MsoNormal"><span lang="RU">Я для HPC индустрии человек скорее сторонний, хотя и участвую в различных семинарах по HPC, однако основной диапазон моих интересов лежит в области софта, а не железа. Поэтому, возможно, кому-то будет интересен «свежий» взгляд на то, что происходило на симпозиуме.</span></p>
<p class="MsoNormal">Во-первых, скажу, что это довольно закрытая «тусовка», где представлены различные участники рынка: университеты (как обладатели самых мощных кластерных установок), промышленность (как самые естественные потребители и заказчики готовых систем) и производители (как интеграторы, так и поставщики компонент, <span> </span>каким, например, является Интел ). Все представители занимают довольно высокое положение в своей области, и определенно имеют какое-то влияние на ход событий в индустрии. Для примера, скажу, что МГУ представлял Владимир Воеводин, заместитель директора НИВЦ.</p>
<p class="MsoNormal"><span lang="RU">Во-вторых, участники давно друг друга знают благодаря и этой конференции и другим, типа </span><span lang="RU"><a href="http://ru.intel.com/business/community/index.php?automodule=blog&amp;blogid=182&amp;showentry=658">ПаВТ</a></span><span lang="RU">, и это была одна из задач прошлых симпозиумов – свести все три ветви заинтересованных лиц в одно место и добиться установления плотного контакта между ними. Правда на нынешнем, юбилейном (4-м, h100) симпозиуме, на первый план вышла тема софта для HPC, что безусловно является правильной тенденцией.</span></p>
<p class="MsoNormal"><span lang="RU">В-третьих, сегодня ставятся задачи на развитие и внедрение этой «тусовки» в более представительные форумы, став их двигательной силой, и добиваясь влияния на принятие решений уже на государственном уровне.</span></p>
<p class="MsoNormal"><span lang="RU"> </span></p>
<p class="MsoNormal"><span lang="RU">Однако, что мне показалось очень интересным из того, что мне довелось услышать, это дискуссии о проблемах образования, наличия кадров, и поиска задач, которые бы выполнялись в имеющихся высокопроизводительных системах.</span></p>
<p class="MsoNormal"><span lang="RU">Мне кажется, <span> </span>Воеводин попал в самую точку, представляя сигнальный экзепляр книги (вот не помню ее точное название, и все тут...), в которой описываются конкретные индустриальные задачи, по-профильно, то есть геология, медицина, машиностроение, и т.д., где применяются высокопроизводительные вычисления. Проблема-то в том, что никто не понимает, зачем HPC вообще нужно, кроме как в каких-то теоретическо-научных целях. Вот эта книжа и является неким пособием по предмету «Введение в специальность» для студентов, и «ликбезом» для чиновников. То есть скакать надо от задач, а не от вопроса, какой поставить кластер и чем его загрузить.</span></p>
<p class="MsoNormal">Какими задачами можно грузить кластеры нам подробно изложил представитель Шлюмберже, приглашенный на симпозиум. Не буду особо останавливаться на подробностях его доклада, они интересны только специалистам. Скажу только, что я вынес интересного для себя из доклада. Он рассказал на примере их московского подразделения, что требуется около 5-ти лет, чтобы набрать уровень экспертизы, необходимый для эффективного решения задач с использованием высокопроизводительных систем. И это отчасти из-за того, что найти готового специалиста не представляется возможным. Звучит как некий упрек в сторону составителей учебных программ для специальностей в университетах.</p>
<p class="MsoNormal"><span lang="RU">Представители университетов сами согласны с тем, что активных профессоров, занимающихся данной тематикой, и готовых предложить методику предподавания, в стране можно пересчитать по пальцам одной руки, и естественно это крайне удручающая ситуация. Тут можно было бы найти точку соприкосновения университетов и компаний, таких как Интел, которая готова тратить свои ресурсы на обучение преподавателей. Как положительный шаг, было озвучено успешное создание <a href="http://hpc-russia.ru/">СУПЕРКОМПЬЮТЕРНОГО КОНСОРЦИУМА УНИВЕРСИТЕТОВ РОССИИ</a>, основателями которого являются четыре ведущих (в этой теме) университета Росиии, и в состав которого входят уже более двух десятков. Президент Консорциума - ректор Московского государственного университета им. М.В.Ломоносова, вице-президент РАН, академик В.А.Садовничий. Можно надеяться, что результатом работы Консорциума станут в том числе и новые специальности, которые бы готовили профессионалов для нашей индустрии.</span></p>
<p class="MsoNormal">
<p class="MsoNormal">Ну а что касается материальной базы и финансирования, то увы, мы живем в такой стране, где государственная поддержка является единственным способом развития HPC-индустрии. И если в случае с университетами это нормально, то для (коммерческой) промышленности просто нереально получить такую поддержку. Но тогда откуда возьмутся те задачи, которыми можно грузить кластерные системы?</p>
<p class="MsoNormal">
<p class="MsoNormal"><span>P.S</span><span lang="RU">. Владимир Воеводин попросил перенести его доклад на более раннее время, так как спешил закончить приготовления, связанные с мероприятием, которое произошло на следующий день. Думаю, многие видели </span><span lang="RU"><a href="http://www.1tv.ru/news/polit/156208">новости</a></span><span lang="RU">. </span></p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2009/11/26/hpc-2009/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

