<?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"
	>

<channel>
	<title>Блоги Intel® Software Network &#187; Графика</title>
	<atom:link href="http://software.intel.com/ru-ru/blogs/category/visual-computing/feed/" rel="self" type="application/rss+xml" />
	<link>http://software.intel.com/ru-ru/blogs</link>
	<description></description>
	<pubDate>Sun, 22 Nov 2009 20:40:40 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.6.5</generator>
	<language>en</language>
			<item>
		<title>Распараллеливание черного ящика.(ч.1)</title>
		<link>http://software.intel.com/ru-ru/blogs/2009/10/26/2002338/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2009/10/26/2002338/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 12:16:56 +0000</pubDate>
		<dc:creator>Kirill Mavrodiev (Intel)</dc:creator>
		
		<category><![CDATA[Intel Software Network]]></category>

		<category><![CDATA[Академическое сообщество]]></category>

		<category><![CDATA[Графика]]></category>

		<category><![CDATA[Конкурсы и мероприятия]]></category>

		<category><![CDATA[Параллельное программирование]]></category>

		<category><![CDATA[Разработка софта]]></category>

		<category><![CDATA[Parallel Studio]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2009/10/26/2002338/</guid>
		<description><![CDATA[Существует точка зрения, что при распараллеливании неправильно рассматривать последовательно реализованную программу как черный ящик. Другими словами, необходимо знать алгоритмы, которые реализованы в данном пакете. С одной стороны, это правильно, ведь порой эффективнее заменить, существующий алгоритм на другой. На алгоритм, который хорошо ложиться на ту или иную архитектуру.
Я хочу рассказать о результате летнего школьника Интел-ННГУ 2009, [...]]]></description>
			<content:encoded><![CDATA[<p>Существует точка зрения, что при распараллеливании неправильно рассматривать последовательно реализованную программу как черный ящик. Другими словами, необходимо знать алгоритмы, которые реализованы в данном пакете. С одной стороны, это правильно, ведь порой эффективнее заменить, существующий алгоритм на другой. На алгоритм, который хорошо ложиться на ту или иную архитектуру.<br />
Я хочу рассказать о результате летнего школьника Интел-ННГУ 2009, т.е. о проекте, которым занимался студент, у которого я был руководителем. Задача стояла следующая: взять уже существующий проект и распараллелить его с помощью Intel(R) Parallel Studio, рассматривая его как черный ящик. А потом сравнить с параллельным вариантом разработчиков сэмпла. Главное условие было взять только последовательный вариант проекта и не смотреть параллельный вариант. Выбор остановился на сэмпле для Intel(R) TBB - Tachyon, у которого существует два параллельных варианта с использованием технологии Intel(R) TBB. (если установлен пакет "Intel(R) Parallel Studio", то солющен(Solution) можно найти тут: C:\Program Files\Intel\Parallel Studio\Composer\tbb\examples\parallel_for\tachyon). Это трассировщик лучей, один из результатов которого фрактал с тремя источниками освещения.</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/tachyon1.jpg"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/tachyon1-289x300.jpg" alt="" width="289" height="300" class="aligncenter size-medium wp-image-2002337" /></a></p>
<p>Стоит заметить, что 3 ноября будет проведен Онлайн Семинар "<a href="http://www.intel.com/corporate/europe/emea/rus/country/jobs/students/programs.htm">Intel(R) Parallel Studio Workflow</a>"  на базе Tachyon. Количество участников ограничено.<br />
Первый Шаг в расспараллеливание - это найти наиболее часто используемый участок программы. Для этого использовался Intel(R) Parallel Amplifier. И для сравнения удобства и простоты работы Intel(R) VTune(TM) Performance Analyzer. Как Amplifier так и VTune указали на функции:<br />
<code>grid_intersect и sphere_intersect</code>. </p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/tachyon1_22.jpg"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/tachyon1_22.jpg" alt="" width="500" height="128" class="aligncenter size-full wp-image-2002343" /></a></p>
<p>Анализ данных функций показывает, что они не совсем пригодны к распараллеливанию или тюнингу. Соответственно нужно найти либо родительские либо дочерние функции, которые содержат циклы.<br />
Для VTune пришлось собрать профиль Call Graph, на что ушло порядка 13 минут  накладных расходов (время работы последовательного варианта Tachyon 30 сек). И 1 час на анализ профиля. У Ampilfier-а использовался уже созданный профиль, что оказалось очень удобным:</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/tachyon1_31.jpg"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/tachyon1_31.jpg" alt="" width="500" height="424" class="aligncenter size-full wp-image-2002345" /></a></p>
<p>В результате мы остановились на кандидате parallel_thread:</p>
<pre name="code" class="cpp">static void parallel_thread (void)
{

    unsigned int serial = 1;
	unsigned int mboxsize = sizeof(unsigned int)*(max_objectid() + 20);
    unsigned int * local_mbox = (unsigned int *) alloca(mboxsize);
	memset(local_mbox,0,mboxsize);

    for (int y = starty; y &lt; stopy; y++) { {
        drawing_area drawing(startx, totaly-y, stopx-startx, 1);
        for (int x = startx; x next_frame()) return;
     }

}</pre>
<p>И пока я дописываю следующий Блог, предлагаю Вам самим попытаться распараллелить.</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2009/10/26/2002338/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Сжать Вассермана</title>
		<link>http://software.intel.com/ru-ru/blogs/2009/08/25/2002019/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2009/08/25/2002019/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 12:17:29 +0000</pubDate>
		<dc:creator>vilianov</dc:creator>
		
		<category><![CDATA[Intel Software Network]]></category>

		<category><![CDATA[Графика]]></category>

		<category><![CDATA[Moyea]]></category>

		<category><![CDATA[Анатолий Вассерман]]></category>

		<category><![CDATA[сжатие видео]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2009/08/25/2002019/</guid>
		<description><![CDATA[Возможно, некоторые читатели знают, что на портале "Компьютерра-Онлайн" ведет <a href="http://www.computerra.ru/blogs/wasserman/">видеоблог легендарный Анатолий Вассерман</a>. Учитывая, что вся техническая сторона этого великого дела идет через меня, появляется масса возможностей попережимать видео не только для PSP. Ну и набраться некоторых наблюдений.]]></description>
			<content:encoded><![CDATA[<p>Возможно, некоторые читатели знают, что на портале "Компьютерра-Онлайн" ведет <a href="http://www.computerra.ru/blogs/wasserman/">видеоблог легендарный Анатолий Вассерман</a>. Учитывая, что вся техническая сторона этого великого дела идет через меня, появляется масса возможностей попережимать видео не только для PSP.</p>
<p>Технологиия изготовления блогов, в общем-то, проста. У Анатолия Александровича есть личная видеокамера компании XXX (нет <span style="line-through;">бесплатному</span> навязчивому пиару торговых марок!), отличающаяся весьма компактными размерами. Она путешествует с владельцем по России и Украине. Наговорив в объектив определенное количество монологов, Вассерман переправляет их в редакцию - или на флэшке "живьем", или через ftp. Далее я конвертирую исходные файлы в формат, пригодный для сайта, и вуаля, можно смотреть!</p>
<p>По ряду причин, нам подходит только конвертер Moyea Flash Video MX Pro. Я уже не раз и не два ругал его в этом блоге, и главным образом - за упорное желание работать только на одном ядре. Но вот вчера, тестируя новый казенный ноутбук Acer 5737Z, я решил не включать Главный Домашний Компьютер и пережать новые монологи Анатолия Александровича силами мобильного Pentium Dual-Core. Запустил процесс - и чуть со стула на упал: Task Manager явно демонстрировал, что конвертер грузит ОБА ЯДРА! Тут уж пришлось включать Главный Компьютер, где стоит та же версия конвертера и операционной системы, и вновь убеждаться, что на Core i7 продолжает использоваться только одно ядро из четырех возможных. Впрочем, как и на редакционном Core 2 Quad. Запускаю снова конвертацию на ноуте - вуаля, пашут оба ядрышка.</p>
<p>Мистика, правда? Я, конечно, понимаю, что все мы - лишь полуденный сон Анатолия Вассермана, а во сне возможно что угодно. Но как можно было заставить программу на двух ядрах работать нормально, а на четырех - через известное место, искренне не понимаю. Особая программистская магия, не иначе.</p>
<p>Кстати, 3.2-гигагерцовый Core i7 одним ядром жмет в два с лишним раза быстрее, чем 2.18-гигагерцовый Pentium Dual-Core двумя. И не только Вассермана.</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2009/08/25/2002019/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Суперкомпьютеры в народ</title>
		<link>http://software.intel.com/ru-ru/blogs/2009/08/20/2001968/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2009/08/20/2001968/#comments</comments>
		<pubDate>Thu, 20 Aug 2009 10:40:01 +0000</pubDate>
		<dc:creator>ksili</dc:creator>
		
		<category><![CDATA[Графика]]></category>

		<category><![CDATA[Игры]]></category>

		<category><![CDATA[Разработка софта]]></category>

		<category><![CDATA[3D-игры]]></category>

		<category><![CDATA[видео]]></category>

		<category><![CDATA[игровой движок]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2009/08/20/2001968/</guid>
		<description><![CDATA[Не так давно Дмитрий Оганезов пытался выяснить мнение читаталей блога о том, для чего могут пригодиться мощности суперкомпьютеров в домашних условиях. Я хочу продолжить разговор, предложив ещё одну идею для обсуждения. ]]></description>
			<content:encoded><![CDATA[<p>Не так давно Дмитрий Оганезов пытался <a href="http://software.intel.com/ru-ru/blogs/2009/06/03/2001472/">выяснить</a> мнение читаталей блога о том, для чего могут пригодиться мощности суперкомпьютеров в домашних условиях. Обсуждение, по-моему зашло в тупик, в том смысле, что никаких более-менее масовых вариантов использования придумать не удалось. Я хочу продолжить разговор, предложив ещё одну идею для обсуждения.</p>
<p>Идея не моя, я её всего лишь вспомнил и развил. В выходившем некогда журнале Game.EXE была рубрика с письмами от читателей. В одном из них (где-то за 2004-05 год) излагалась примерно такая идея (возможно, она родилась под впечатлением от парочки новых на то время 3D-игр, но тем менее). Сейчас уровень развития движков 3D-игр таков, что позволяет генерировать на экране картинку очень близкую к реальной, при этом с неплохим fps. Почему бы не начать делать фильмы на основе этих движков? То есть зритель уже не будет довольствоваться тем, что ему покажет одна-единственная камера, а сможет, например, наблюдать один и тот же эпизод глазами разных персонажей. Предполагалось, что это позволит глубже понять задумку режиссера и то, почему в некоторых ситуациях разные персонажи совершают определённые поступки.</p>
<p>Разумеется для этого придётся неоднократно отматывать видео назад, что представляется не очень удобным. Но здесь пока идет речь не об удобстве. Как показывает опыт (Apple, например), работу в любой системе можно сделать приятной и удобной.</p>
<p>Мне лично представляется, что здесь можно привнести элемент игры. Добавлять всякие бонусные или альтернативные взгляды на происходящее, которые можно обнаружить, а можно и не обнаружить при беглом обзоре. Типа вида на перестрелку глазами каждого из противников или, вообще, глазами пролетающей мимо мухи. А ещё мне кажется было бы любопытно таким образом смотреть командные виды игр. Например реконструкция какого-то важного футбольного матча. Просмотрев его глазами каждого из игроков, сразу станет понятно, кто накосячил, кто полностью отдавался игре, а кто профилонил полматча.</p>
<p>Понятно, что такое видео будет уже гораздо больше по объему, т.к. это уже не просто хранимая последовательность кадров, а хранимая динамичная трёхмерная сцена, вид с камер на которую рендерится по ходу просмотра. Можно конечно и по-другому организовать. Зависит от продвинутости технологии, например, насколько оперативным будет переключение между камерами. А может траектории камер сделать не фиксированными, а сделать камеры более интерактивными, вручив каждому зрителю по джойстику? <img src='http://software.intel.com/ru-ru/blogs/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> Тогда уж точно без суперкомпьютера не обойтись. А уж какие мощности понадобятся, чтобы создать такой фильм...</p>
<p>Мне кажется, что такую идею, в принципе, можно обернуть в такую обёртку, которая сделает суперкомпьютер привлекательным и для обычного человека - не учёного, не программиста, не конструктора и не дизайнера. Конечно, это если не оглядываться на стоимость суперкомпьютера. Что скажете?</p>
<p>P.S. Кстати уже после того как это написал, обнаружил, что Intel совместно с некоторыми организациями с громкими названиями проводит конкурс по применению высокопроизводительных вычислений («МАКСИМАЛЬНАЯ МАСШТАБИРУЕМОСТЬ – 2009»). Вроде то, что я тут изложил туда бы пошло. Вот только там нужны уже реальные проекты, а у меня пока только идея. Странно, что на форуме и блогах ISN нет никакой информации об этом конкурсе, и даже письма никакого не прислали. Хотя однажды мне (в ответ на моё письмо) обещали, что будут извещать о конкурсах и других мероприятиях в академической программе Intel, в которых я смогу принимать участие.</p>
<p>Кстати, там почему-то на разных сайтах разная информация о призах для победителей. Вот <a href="http://csr.spbu.ru/archives/4473">здесь</a> - 250000 руб и 12500 руб, а вот <a href="http://ru.intel.com/business/community/?act=abouthpc2009">здесь</a> - 350000 и 150000 руб.</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2009/08/20/2001968/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Правильная параллелизация</title>
		<link>http://software.intel.com/ru-ru/blogs/2009/07/20/2001715/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2009/07/20/2001715/#comments</comments>
		<pubDate>Mon, 20 Jul 2009 13:02:20 +0000</pubDate>
		<dc:creator>Victor Cherepanov (Intel)</dc:creator>
		
		<category><![CDATA[Графика]]></category>

		<category><![CDATA[Параллельное программирование]]></category>

		<category><![CDATA[Разработка софта]]></category>

		<category><![CDATA[digital video]]></category>

		<category><![CDATA[h264]]></category>

		<category><![CDATA[optimization]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2009/07/20/2001715/</guid>
		<description><![CDATA[Давным-давно, лет 9 назад, многопроцессорные системы были не так распространены, как сейчас, и проблемы правильной параллелизации «тяжёлых» приложений мало кого интересовали. Всё поменялось с выходом в массы процессоры Pentium 4 с ядром Northwood. Присутствовавшая в нём технология HyperThreading делала многопоточность доступной массовому потребителю. А с выходом процессоров семейства CoreDuo распараллеливание «тяжёлых» вычислений окончательно закрепилось в [...]]]></description>
			<content:encoded><![CDATA[<p>Давным-давно, лет 9 назад, многопроцессорные системы были не так распространены, как сейчас, и проблемы правильной параллелизации «тяжёлых» приложений мало кого интересовали. Всё поменялось с выходом в массы процессоры Pentium 4 с ядром Northwood. Присутствовавшая в нём технология HyperThreading делала многопоточность доступной массовому потребителю. А с выходом процессоров семейства CoreDuo распараллеливание «тяжёлых» вычислений окончательно закрепилось в категории must have для любого мало-мальски уважающего себя приложения.</p>
<p>Не секрет, что способов и схем параллелизации существует огромное множество. Все они отличаются эффективностью использования всех процессорных ядер и объёмом дополнительной памяти, необходимой для работы алгоритма. Здесь и далее под термином «способ» я буду подразумевать способ декомпозиции данных для параллелизации, а под термином «схема» - схему взаимодействия рабочих потоков между собой. В данной заметке я бы хотел поделиться историей внедрения распараллеливания в декодер видео стандарта H264.</p>
<p>Когда нам поставили задачу эффективно использовать 2 ядра, декодер содержал только последовательный код. Чтобы сделать декодер  многопоточным предстояло полностью переписать его внутреннее устройсто.<br />
Мы пошли по пути наименьшего сопротивления. Т.к. процесс декодирования видео стандарта H264 состоит из нескольких независимых этапов, самого декодирования и процесса исправление ошибок квантизации - «деблокинга», первое решение было сделать так, чтобы эти этапы выполнялись в разных потоках. От нас практически не потребовалось вносить в декодер какие-либо значительные изменения. Этот способ параллелизации дал декодеру существенное ускорение при использовании второго процессора, однако до заветных 2х было ещё далеко. К тому же, нагрузка на ядра процессора, при использовании этого способа параллелизации, сильно зависела от настроек кодирования видеопотока, использования особенностей стандарта и варьировалась в широких пределах.</p>
<p>Следующий шаг, который был нами предпринят, - параллелизация по слайсам (анг. slice). Слайс – часть сжатого кадра, которая не зависит от остальных слайсов (частей) этого кадра. Это были идеальные предпосылки для внедрения параллелизации. И хотя внутренняя структура декодера была переработана более существенным образом, чем в первом случае, параллелизация по слайсам принесла более впечатляющие результаты. Теперь декодер демонстрировал почти двукратное прибавление в производительности при использовании второго рабочего потока, по сравнению с однопоточной версией. Впрочем, этот способ имел один очень существенный недостаток: не все видеопотоки содержат кадры, состоящие из нескольких слайсов. Соответственно, параллелизация по слайсам была абсолютно бесполезна при декодировании видеопотоков, которые состоят из кадров содержащих только один слайс.</p>
<p>На следующем этапе параллелизации нам пришлось провести декомпозицию процесса декодирования по данным. Это потребовало практически полной переписки декодера, но мы рассчитывали получить впечатляющие результаты. Теперь рабочий поток получал для обработки не целиком слайс, а только одну строчку макроблоков из него. К тому же, поток выполнял не полное декодирование переданной ему строчки, а только часть: декомпрессию данных макроблоков или реконструирование макроблоков, используя ранее декомпрессированые данные. Данные макроблоков декомпрессировались в специальные временные буфера, откуда позже использовались для реконструирования. Процесс деблокинга также был подвергнут процессу декомпозиции по данным. Теперь оба рабочих потока могли выбирать на исполнение любую их 3х задач (декомпрессию, реконструкцию, деблокинг), в зависимости от текущей стадии декодирования кадра. И хотя этот способ оказался непременим при декодировании некоторых видеопотоков, сжатых с использованием особенности slice group стандарта H264, в целом он продемонстрировал отличную производительность. Теперь декодер легко показывал двукратное ускорение при декодировании любых видеопотоков.</p>
<p>На самом деле, я немного слукавил, описывая первые три этапа параллелизации, когда говорил «любые видеопотоки». Я имел ввиду потоки большого разрешения. Больше, чем стандартное телевизионное (SD, 720x576) разрешение. Когда мы попытались протестировать декодер на видеопотоках с маленьким разрешением, мы наткнулись на неприятный сюрприз: не было никаких признаков двукратного роста производительности при использовании второго потока. Максимум, что показывал декодер – было 30ти процентное ускорение, что было полностью неприемлимо для нас. Дальнейшее расследование выявило несколько проблем, которые полностью отсутствовали при декодировании видеопотоков с большим (HD, 1920x1080, 1280x720) разрешением. Решение этих проблем стало залогом к блестяще работающей параллелизации.<br />
Сначала мы избавились от лишних обновлений кэша ядер процессоров. Дело в том, что выполняя реконструирование макроблоков, рабочие потоки использовали временные буфера для хранения промежуточных данных, что вызывало лишние принудительные обновления кэша у второго ядра. Мы переписали функции, выполняющие реконструирование, чтобы они не «портили» данные во временном буфере, а использовали стэк для хранения промежуточных данных. Принудительные обновления кэша ядер исчезли, что положительно сказалось на общей производительности, но конечная скорость работы декодера по-прежнему была неприемлима.</p>
<p>Оказалось, что виновницей низкой производительности декодера была не вполне корректная схема параллелизации. Мы использовали схему, когда синхронизация главного и дополнительного потоков осуществлялась на каждый вызов метода декодера для декодирования очередного кадра (DoDecode). Среди параметров к вызову DoDecode был указатель на сжатый кадр, который «регистрировался» главным потоком внутри декодера. После этого главный поток подавал сигнал внутреннему потоку, что «можно начинать работать», выполнял свою часть декодирования кадра и ждал, пока внутренний поток выполнит свою часть работы, выставит сигнал «внутренний поток закончил свою часть работы» и «заснёт», после чего главный поток выходил из метода DoDecode, возвращая разжатый кадр вызывающему приложению.<br />
<div id="attachment_2001714" class="wp-caption aligncenter" style="width: 510px"><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/scheme0.png"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/scheme0.png" alt="Первоначальная схема синхронизации" width="500" height="246" class="size-full wp-image-2001714" /></a><p class="wp-caption-text">Первоначальная схема синхронизации</p></div><br />
При декодировании видеопотоков с маленьким разрешением времена старта и ожидания завершения работы внутреннего потока оказались сопоставимы с временем декодирования самого кадра. Чтобы избавиться от этого неприятного эффекта требовалось, чтобы у декодера не было нужды в старте-остановке внутреннего потока.<br />
Для этих целей была разработана схема параллелизации без необходимости синхронизации потоков между собой, которая была позже запатентована.<br />
Главное её отличие от предыдущей было в том, что дополнительный поток не «засыпал» между вызовами.<br />
Дополнительный поток запускался в момент инициализации декодера и непрерывно опрашивал специальный объект (хранилище сжатых и разжатых кадров) на наличие работы. Если работы не было, внутренний поток «засыпал» на очень малое количество времени, после чего опять опрашивал хранилище на наличие работы (сжатых кадров).<br />
Сжатые кадры попадали внутрь хранилища в момент вызова метода DoDecode в главном потоке. Только теперь главный поток не «регистрировал» сжатые данные, а честно их копировал в хранилище. После копирования сжатые данные сразу же становились доступны для внутреннего потока, который незамедлительно приступал к их разжатию. Если количество скопированных сжатых кадров было меньше, чем количество видеопотоков для декодирования, то главный поток тут же возвращается из метода DoDecode со значением «требуются ещё данные». Данная процедура копирования сжатых кадров в хранилище повторялась несколько раз. В итоге, в тот момент, когда в хранилище скапливалось нужное количество сжатых кадров, была большая вероятность, что самый «старый» кадр оказывался уже разжат, и главному потоку оставалось только «доставить» этот кадр пользователю. Если же самый «старый» кадр был ещё не до конца разжат, то главный поток принимал ещё и участие в его декодировании.<br />
<div id="attachment_2001718" class="wp-caption aligncenter" style="width: 510px"><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/scheme1.png"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/scheme1.png" alt="Конечная схема синхронизации" width="500" height="260" class="size-full wp-image-2001718" /></a><p class="wp-caption-text">Конечная схема синхронизации</p></div><br />
Данная схема параллелизации обеспечила великолепную балансировку нагрузки по потокам и сделала возможным загрузку всех процессоров даже в том случае, когда главный поток находился вне декодера. Ключом к подобным результатам было обеспечение декодирования нескольких кадров в параллель. Именно для этих целей главный поток «доставлял» в хранилище несколько сжатых кадров перед тем, как принять участие в декомпрессии. И если два потока не могли принимать участие в декодировании одного кадра, то один из потоков отправлялся декодировать следующий кадр. Чтобы сделать возможным декодирование зависимых кадров, для каждого из опорных кадров, т.е. тех кадров, информация из которых используется для декодирования других кадров, велась статистика, на сколько кадр декодирован. При декодировании зависимых кадров эта статистика учитывалась, чтобы избежать ситуации, когда вектора движения в зависимом кадре выходят за границу декодированной области в опорном кадре. Наглядно, подобную организацию можно представить в виде «лесенки» (вид сбоку):<br />
<div id="attachment_2001719" class="wp-caption aligncenter" style="width: 510px"><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/scheme2.png"><img src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/scheme2.png" alt="Зависимая декомпрессия опорных кадров" width="500" height="305" class="size-full wp-image-2001719" /></a><p class="wp-caption-text">Зависимая декомпрессия опорных кадров</p></div><br />
Теперь декодер демонстрировал блестящую производительность и масштабируемость на любых потоках, независимо от их размера и способа сжатия.<br />
Вернёмся к началу. Статья называлась «правильная» параллелизация. Что же тут правильного? Грамотно разработанная схема и способ параллелизации, которая при переносе на новые условия показывает столь же высокие результаты. В частности, конечная схема параллелизации продемонстрировала высокую масштабируемость при работе на 16 процессорах включительно. Такие же результаты были достигнуты при портировании кода декодера на последнюю графическую карту от Intel’а Larrabee. Всё это служит отличным доказательством хорошо реализованной параллелизации, работающей всегда и везде. Правильной параллелизации.</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2009/07/20/2001715/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Играем в карты. Интегрированные графические карты Интел.</title>
		<link>http://software.intel.com/ru-ru/blogs/2009/07/08/2001661/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2009/07/08/2001661/#comments</comments>
		<pubDate>Wed, 08 Jul 2009 14:28:45 +0000</pubDate>
		<dc:creator>Victoria Zhislina (Intel)</dc:creator>
		
		<category><![CDATA[Графика]]></category>

		<category><![CDATA[Игры]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2009/07/08/2001661/</guid>
		<description><![CDATA[Сначала - немного истории.   Будучи инженером-консультантом Интел, уже пять лет  на всевозможных конференциях для разработчиков программного обеспечения в разных странах и городах я традиционно и неизменно рассказываю об "особенностях интергированных графических карт интел и их эффективном использовании при разработке графических приложений ".
Конечно же, я не повторяю один и тот же доклад из года в год. И вовсе не [...]]]></description>
			<content:encoded><![CDATA[<p>Сначала - немного истории.   Будучи инженером-консультантом Интел, уже пять лет  на всевозможных конференциях для разработчиков программного обеспечения в разных странах и городах я традиционно и неизменно рассказываю об "особенностях интергированных графических карт интел и их эффективном использовании при разработке графических приложений ".</p>
<p>Конечно же, я не повторяю один и тот же доклад из года в год. И вовсе не перекрашиваю слайды предыдущих лет с небольшими изменениями (доклады - это совсем не "Семнадцать Мгновений Весны":) ).  Время идет, Интел постоянно представляет новые графические решения (за это время сменилось два поколения, включающие как минимум пять семейств карт), соответственно у разработчиков появляются новые возможности и требующие освещения вопросы.</p>
<p>Но кое-что точно остается без перемен.  Прежде всего, это один из вступительных слайдов презентации, сообщающий, что "рынок Интергированной графики Интел огромен уже сейчас, он будет сильно расти и дальше, причем, среди всех категорий пользователей, так что эти карты необходмо учитывать при разработке  игр".</p>
<p>Но, если раньше единственное, имевшееся у меня подтверждение этих слов было теоретическое -  соответсвующий график или диаграмма из какого-нибудь серьезного источника типа Mercury Research, то теперь у меня появилось практическое подтверждение.</p>
<p>А именно, недавно мне пришлось походить по компьютерным магазинам Нижнего Новгорода - типичного крупного российского города. Так вот, оказалось, что во всех магазинах - начиная от дорогого сетевого  "Белого Ветра" и заканчивая мелкими безвестными магазинчиками, примерно одна и та же картина: большие компьютеры (десктопы) стыдливо засунуты в самые дальние углы и под прилавки, а на виду расположились всевозможные ноутбуки -от больших "дескноутов" до компактных "нетбуков". И найти среди них модель с дискретной видеокартой, либо с интегрированной графической картой НЕ Интел не так просто. Это будет примерно одна модель из четырех-пяти.  Все остальные девайсы содержат Intel GMA, т.е. интегрированную графику Интел. Так что не учитывать ее при выпуске новых игр сейчас никак нельзя.</p>
<p>Кроме того, теперь я могу гораздо лучше ответить на повторяющийся в ходе каждого моего выступления вопрос из зала: "А какие игры идут на вашей интегрированной графике?".  Если еще год назад я могла сказать только то, что на IGFX работает 95% игр выпуска до 2004 года, а список современных игр, совместимых с IGFX, можно найти на сайте интел (<a href="http://www.intel.com/support/graphics/sb/cs-012643.htm">http://www.intel.com/support/graphics/sb/cs-012643.htm</a>).  Причем, на самом деле списков - несколько, свой для каждого семейства интегрированных карт и ОС (Win ХР -Vista). Но, хотя в среднем в этом списке присутствует более 40 игр, назвать его полным и даже почти полным никак нельзя. Дело в том, что игр на рынке ну очень много, кроме того, постоянно появляются новые, так что протестировать их у инженеров Интел нет никакой возможности. Хотя, для кого-то, конечно, это была бы работа мечты - получать зарплату за тестирование игр, но, увы, такой должности нет в штатном расписании Интел.</p>
<p>Но, оказывается, есть люди, занимающиеся тем же самым независимо от Интел, совершенно бесплатно, - для своей пользы и удовольствия. Недавно мне показали сайт, точнее блог (на русском языке!) с говорящим названием -<a href="http://games4intelgma.blogspot.com/">http://games4intelgma.blogspot.com/</a></p>
<p>Автор блога, незнакомый мне, и, насколько я понимаю, никак не связанный с Интел, протестировал на совместимость с Intel GMA множество игр , и по результатам составил свой список, который постоянно пополняется, причем, не только усилиями самого автора, но и читателями блога - так называемый "народный список".  В сумме эти списки почти вдвое длиннее представленных на сайте Интел. Но, конечно же, и они не являются полными. Поэтому теперь я буду давать адрес этого блога всем желающим, предлагая дополнить их своими находками.</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2009/07/08/2001661/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Быстрое копирование видеопамяти. Параллелизация копирования</title>
		<link>http://software.intel.com/ru-ru/blogs/2009/07/06/2001632/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2009/07/06/2001632/#comments</comments>
		<pubDate>Mon, 06 Jul 2009 09:48:20 +0000</pubDate>
		<dc:creator>Dmitry Serkin (Intel)</dc:creator>
		
		<category><![CDATA[Intel Software Network]]></category>

		<category><![CDATA[Графика]]></category>

		<category><![CDATA[Параллельное программирование]]></category>

		<category><![CDATA[Разработка софта]]></category>

		<category><![CDATA[буфер]]></category>

		<category><![CDATA[память]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2009/07/06/2001632/</guid>
		<description><![CDATA[Долго не решался опубликовать данную заметку.  Слишком много подводных камней и предположений с которыми еще предстоит разобраться. Но думаю все же некоторым будет интересно.
В первой заметке этой серии, я рассказал про технику позволяющую качественно улучшить производительность копирования данных между системной и USWC памятью. Однако, это еще не предел. Еще одна оптимизация основана на том факте, [...]]]></description>
			<content:encoded><![CDATA[<p>Долго не решался опубликовать данную заметку.  Слишком много подводных камней и предположений с которыми еще предстоит разобраться. Но думаю все же некоторым будет интересно.</p>
<p>В <a href="http://software.intel.com/ru-ru/blogs/2009/05/07/2001208/">первой заметке</a> этой серии, я рассказал про технику позволяющую качественно улучшить производительность копирования данных между системной и USWC памятью. Однако, это еще не предел. Еще одна оптимизация основана на том факте, что каждое ядро процессора имеет свои независимые буфера записи.</p>
<p>На каждый исполнительный юнит приходится всего по 4 буфера. Процессор использует их постоянно, загружая и выгружая данные во все уровни кэша и DRAM память. Поэтому если попытаться разделить регион копируемой памяти на несколько частей и каждую из частей копировать в отдельном потоке, то  эффект не заставит себя ждать. В итоге, наращивая количество потоков, производительность упрется в пропускную способность подсистемы памяти.</p>
<p>Приведем результаты замеров для разного количества потоков. В каждом случае производилось 10 запусков синтетического теста и выбиралось минимальное время работы.</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/untitled3.png"><img class="aligncenter size-full wp-image-2001631" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/untitled3.png" alt="" width="500" height="326" /></a></p>
<p>Из графика видно, что на 4-5 потоках синтетический тест достигает своей пиковой производительности.</p>
<p>На тестовой машине установлена  3х-канальная DDR3 память с пиковой нагрузкой в 32 Гб/c. Вряд ли мы ее превысили. С большей степенью вероятности, причина спада производительности на большем количестве потоков заключается в том, что наш Core i7 содержит всего 4 физических ядра. И уже при больше, чем на 4 потоках, они начинают делить между собой ресурсы процессора, вызывая тем самым нежелательные кэш эффекты.</p>
<p>Хочется обсудить способ определения пропускной способности памяти. Мы написали маленькую программу для определения пропускной способности памяти на чтение и на запись. В цикле происходит «холостое» чтение из памяти или запись в память.</p>
<pre name="code" class="cpp">
enum
{
BLOCKSIZE                   = 1024 * 1024 * 256,
ITER                        = 128,
ALIGN                       = 64
};

typedef unsigned char byte;

int main(int argc, char **argv)
{
byte *mem, *pBuf = new byte [BLOCKSIZE + ALIGN];
LARGE_INTEGER start, stop, freq;
__int64 temp;
int timePerBlock;
int mbPerSec;

SetThreadAffinityMask(GetCurrentThread(), 2);

mem = (byte *) ((((size_t) pBuf) + ALIGN - 1) &amp; -ALIGN);
memset(mem, 0, BLOCKSIZE);

// start timing
QueryPerformanceCounter(&amp;start);

for (int i = 0; i &lt; ITER; i++)
{

__asm
{
mov ecx, BLOCKSIZE
mov esi, dword ptr [mem]
pxor xmm0, xmm0

jmp NEXT

ALIGN 10h
RESTART_LOOP:
#if 0
// read speed test
movdqa xmm0, oword ptr [esi + 000h]
movdqa xmm1, oword ptr [esi + 010h]
movdqa xmm2, oword ptr [esi + 020h]
movdqa xmm3, oword ptr [esi + 030h]
movdqa xmm4, oword ptr [esi + 040h]
movdqa xmm5, oword ptr [esi + 050h]
movdqa xmm6, oword ptr [esi + 060h]
movdqa xmm7, oword ptr [esi + 070h]
movdqa xmm0, oword ptr [esi + 080h]
movdqa xmm1, oword ptr [esi + 090h]
movdqa xmm2, oword ptr [esi + 0a0h]
movdqa xmm3, oword ptr [esi + 0b0h]
movdqa xmm4, oword ptr [esi + 0c0h]
movdqa xmm5, oword ptr [esi + 0d0h]
movdqa xmm6, oword ptr [esi + 0e0h]
movdqa xmm7, oword ptr [esi + 0f0h]
#else
// write speed test
movntdq oword ptr [esi + 000h], xmm0
movntdq oword ptr [esi + 010h], xmm0
movntdq oword ptr [esi + 020h], xmm0
movntdq oword ptr [esi + 030h], xmm0
movntdq oword ptr [esi + 040h], xmm0
movntdq oword ptr [esi + 050h], xmm0
movntdq oword ptr [esi + 060h], xmm0
movntdq oword ptr [esi + 070h], xmm0
movntdq oword ptr [esi + 080h], xmm0
movntdq oword ptr [esi + 090h], xmm0
movntdq oword ptr [esi + 0a0h], xmm0
movntdq oword ptr [esi + 0b0h], xmm0
movntdq oword ptr [esi + 0c0h], xmm0
movntdq oword ptr [esi + 0d0h], xmm0
movntdq oword ptr [esi + 0e0h], xmm0
movntdq oword ptr [esi + 0f0h], xmm0
#endif

add esi, 100h
sub ecx, 100h

NEXT:
cmp ecx, 0
jne RESTART_LOOP
}

}

// finish timing
QueryPerformanceCounter(&amp;stop);

QueryPerformanceFrequency(&amp;freq);

timePerBlock = (int) ((stop.QuadPart - start.QuadPart) * 1000 * 10 / (freq.QuadPart * ITER));
printf("msec : %d.%d\n", timePerBlock / 10, timePerBlock % 10);

temp = ITER * (BLOCKSIZE / (1024 * 1024));
temp *= freq.QuadPart;
temp /= (stop.QuadPart - start.QuadPart);
mbPerSec = (int) temp;
printf("mb/s: %d\n", mbPerSec);

delete [] pBuf;

return 0;
}
</pre>
<p>Таким образом можно вычислить фактическую пропускную способность памяти. Мне хочется верить в это ?. На тестовой конфигурации получаем 7 gb/s на запись и 11 gb/s на чтение.</p>
<p>В конечном итоге, параллелизация не принесла своих плодов. Но все объясняется просто. Тестовый декодер имеет хорошую схему параллелизации и максимально использует доступные аппаратные ресурсы. Параллелизация копирования памяти не имеет смысла, так как, во-первых, порождает борьбу за ресурсы процессора с процессом декодирования, который исполняется параллельно, и, во-вторых, приносит гораздо меньшую пользу по сравнению с последним. Поэтому, лучшее решение - оставить копирование на совести основного потока.</p>
<p>Как часто бывает, синтетический тест оказался далек от жизненных реалий. Практика опять разошлась теорией.</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2009/07/06/2001632/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Тайна третьей планеты</title>
		<link>http://software.intel.com/ru-ru/blogs/2009/06/25/2001574/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2009/06/25/2001574/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 07:47:44 +0000</pubDate>
		<dc:creator>Dmitry Serkin (Intel)</dc:creator>
		
		<category><![CDATA[Intel Software Network]]></category>

		<category><![CDATA[Графика]]></category>

		<category><![CDATA[3D graphics]]></category>

		<category><![CDATA[C#]]></category>

		<category><![CDATA[гравитация]]></category>

		<category><![CDATA[планетарий]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2009/06/25/2001574/</guid>
		<description><![CDATA[Ностальгирую по прошлым временам.
Несколько лет назад я участвовал в проекте по разработке компьютерного планетария Stellarium. Основная функциональность программы уже была написана французскими умельцами, и мы занимались реализацией специфических возможностей или же улучшением существующих. Так, например, часть людей работала над улучшением текстурирования планет, реалистичной визуализацией поверхности Солнца. На мою же долю пришлись задачи загрузки и отрисовки [...]]]></description>
			<content:encoded><![CDATA[<p>Ностальгирую по прошлым временам.</p>
<p>Несколько лет назад я участвовал в проекте по разработке компьютерного планетария Stellarium. Основная функциональность программы уже была написана французскими умельцами, и мы занимались реализацией специфических возможностей или же улучшением существующих. Так, например, часть людей работала над улучшением текстурирования планет, реалистичной визуализацией поверхности Солнца. На мою же долю пришлись задачи загрузки и отрисовки трехмерных объектов (спутники, шатлы и впрочем абсолютно любая модель, вплоть до космической коровы), моделирование гравитации и движения камеры по свободным траекториям. Все это было необходимо нижегородскому планетарию для создания познавательных и красивых шоу.</p>
<p>Остановимся подробнее на задаче о гравитации. И начну я, как всегда, обстоятельно и издалека :).</p>
<p>Гравитация – одно из самых загадочных и фундаментальных физических явлений во Вселенной. Гравитация определяет слабейшее взаимодействие во Вселенной, но наряду с этим отвечает за такие крупномасштабные явления, как столкновение галактик, образования черных дыр и расширение Вселенной. И, конечно, гравитация определяет элементарные астрономические явления — орбиты планет, простое притяжение к поверхности Земли и падения тел.</p>
<p>Гравитация была первым взаимодействием, описанным математической теорией. В рамках классической механики, гравитационное взаимодействие описывается законом всемирного тяготения Ньютона, который гласит, что сила гравитационного притяжения между двумя материальными точками массы m1 и m2, разделённых расстоянием r есть</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/13.png"><img class="aligncenter size-full wp-image-2001560" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/13.png" alt="" width="137" height="63" /></a></p>
<p>Где G - гравитационная постоянная, равная -6,673e-11 м2/(кг с2). Знак минус означает, что сила, действующая на тело, всегда противоположна по направлению радиус-вектору, направленному на тело, т. е. гравитационное взаимодействие всегда приводит к притяжению любых тел.</p>
<p>Раздел механики, изучающий движение тел в пустом пространстве только под действием гравитации называется небесной механикой.</p>
<p>Наиболее простой задачей небесной механики является гравитационное взаимодействие двух тел в пустом пространстве. Эта задача решается аналитически до конца и результат её решения часто формулируют в виде трёх законов Кеплера.</p>
<p>При увеличении количества взаимодействующих тел задача резко усложняется. Так, уже знаменитая задача трёх тел не может быть решена аналитически в общем виде. При численном же решении, достаточно быстро наступает неустойчивость решений относительно начальных условий. В применении к Солнечной системе, эта неустойчивость не позволяет предсказать движение планет на масштабах, превышающих сотню миллионов лет.</p>
<p>Общая задача n-тел описывается системой дифференциальных уравнений следующего вида:<br />
<a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/22.png"><img class="aligncenter size-full wp-image-2001561" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/22.png" alt="" width="236" height="149" /></a>Где mi, ri и vi - масса, радиус-вектор и скорость i-го тела соответственно (i изменяется от 1 до N). Массы тел, а также положения и скорости в начальный момент времени считаются известными. Необходимо найти положения и скорости всех частиц в произвольный момент времени, т.е. полностью определить эволюцию системы N гравитирующих тел.</p>
<p>Но мы с вами рассмотрим частный случай (идеализацию) задачи N тел. При исследовании гравитационного взаимодействия между планетами Солнечной системы и космическим объектом, очевидно, можно исключить из рассмотрения силы, действующие со стороны объекта на планеты, ввиду его несравнимо малой массы mс. Также примем, что наибольшее воздействие на траекторию движения объекта оказывают две ближайшие планеты с массами m1 и m2. Радиус-векторы планет определяются как r1 и r2, соответственно.</p>
<p>Запишем второй закон Ньютона для данной системы тел:<br />
<a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/32.png"><img class="aligncenter size-full wp-image-2001562" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/32.png" alt="" width="187" height="163" /></a></p>
<p>Распишем действующие гравитационные силы:</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/42.png"><img class="aligncenter size-full wp-image-2001563" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/42.png" alt="" width="278" height="71" /></a></p>
<p>Сокращая на mc и переходя к дифференциалу получим:</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/5.png"><img class="aligncenter size-full wp-image-2001564" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/5.png" alt="" width="214" height="66" /></a></p>
<p>Таким образом, уравнения определяющие эволюцию движения космического объекта будут выглядеть следующим образом:</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/6.png"><img class="aligncenter size-full wp-image-2001565" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/6.png" alt="" width="242" height="137" /></a></p>
<p>Широкий спектр физических явлений описываются производными второго порядка. Процесс гравитации не исключение.</p>
<p>Существуют различные методы численного решения дифференциальных уравнений. Все они отличаются вычислительной сложностью и точностью. Метод Эйлера – один из самых простых и неточных вычислительных методов. Построим схему метода.</p>
<p>Рассмотрим непрерывную функцию x(t)  и ее изменения с течением времени. Начиная с начального значения x0, можно вычислить следующее значение функции x1 используя уравнение производной функции. Формально производная определяется следующим образом:</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/7.png"><img class="aligncenter size-full wp-image-2001566" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/7.png" alt="" width="231" height="72" /></a></p>
<p>Понятно, что для вычисления значения функции в последующий момент времени нам нужно знать значение в предыдущий момент времени. Следовательно, приблизительное решение дифференциального уравнения получается за счет известного начального значения и схемы</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/8.png"><img class="aligncenter size-full wp-image-2001567" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/8.png" alt="" width="192" height="81" /></a></p>
<p>Второе слагаемое уравнения есть не что иное,  как первый член разложения функции в ряд Тейлора в точке ti. Данная схема для численной аппроксимации решения дифференциальных уравнений была придумана Леонардом Эйлером.</p>
<p>Применим данную схему к нашей задаче и вычислим новые координаты и скорости объекта. Согласно схеме формулы выглядят следующим образом:</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/9.png"><img class="aligncenter size-full wp-image-2001569" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/9.png" alt="" width="234" height="111" /></a></p>
<p>Для вычислений необходимо спроектировать эти уравнения на оси координат. Спроектируем силы на Oxyz:</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/10.png"><img class="aligncenter size-full wp-image-2001568" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/10.png" alt="" width="314" height="234" /></a></p>
<p>Запишем, в качестве примера, вычисление следующего значения абсциссы точки:</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/111.png"><img class="aligncenter size-full wp-image-2001571" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/111.png" alt="" width="220" height="123" /></a></p>
<p>Реализуем описанную выше математическую модель движения объекта в поле действия гравитационных сил. Рассматривается случай с двумя статическими массами, действующими на объект различными по модулю гравитационными силами.</p>
<p>Для графической визуализации используется библиотека OpenGL.</p>
<p>В демо приложении используется следующая структура для описания сферического твердого тела, имеющего основные характеристики, такие как масса, радиус, скорость и координаты:</p>
<pre name="code" class="cpp">
struct SolidSphere
{
double coord[3];
double velocity[3];
double mass;
double radius;
};</pre>
<p>Функции, отвечающие за проецирование гравитационных сил на оси координат Oxyz:</p>
<pre name="code" class="cpp">double fx (double mass, double x, double y, double z, double xp, double yp, double zp)
{
return  mass*(xp-x)/(pow(pow(x-xp,2)+pow(y-yp,2)+pow(z-zp,2),1.5));
}

double fy (double mass, double x, double y, double z, double xp, double yp, double zp)
{
return  mass*(yp-y)/(pow(pow(x-xp,2)+pow(y-yp,2)+pow(z-zp,2),1.5));
}

double fz (double mass, double x, double y, double z, double xp, double yp, double zp)
{
return  mass*(zp-z)/(pow(pow(x-xp,2)+pow(y-yp,2)+pow(z-zp,2),1.5));

}</pre>
<p>Численный метод, решающий дифференциальную систему уравнений:</p>
<pre name="code" class="cpp">satellite.velocity[0] = vx  + dt*(fx(m1, x, y, z, x1, y1, z1) + fx(m2, x, y, z, x2, y2, z2) + fx(m3, x, y, z, x3, y3, z3));
vx = satellite.velocity[0];
satellite.coord[0] = x + vx*dt;

satellite.velocity[1] = vy  + dt*(fy(m1, x, y, z, x1, y1, z1) + fy(m2, x, y, z, x2, y2, z2) + fy(m3, x, y, z, x3, y3, z3));
vy = satellite.velocity[1];
satellite.coord[1] = y + vy*dt;

satellite.velocity[2] = vz  + dt*(fz(m1, x, y, z, x1, y1, z1) + fz(m2, x, y, z, x2, y2, z2) + fz(m3, x, y, z, x3, y3, z3));
vy = satellite.velocity[2];
satellite.coord[2] = z + vz*dt;</pre>
<p>Задавая различые начальные условия Коши получаются различные траектории движения:</p>
<div id="attachment_200157" class="wp-caption aligncenter" style="width: 472px"><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/121.png"><img class="size-full wp-image-2001570" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/121.png" alt="" width="462" height="363" /></a><p class="wp-caption-text">рис.1 Траектория движения объекта под действием двух статических масс</p></div>
<div id="attachment_2001572" class="wp-caption aligncenter" style="width: 462px"><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/14.png"><img class="aligncenter size-full wp-image-2001573" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/14.png" alt="" width="452" height="351" /></a><p class="wp-caption-text">рис.2 Траектория движения объекта под действием одной статической массы </p></div>
<div id="attachment_2001572" class="wp-caption aligncenter" style="width: 464px"><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/131.png"><img class="size-full wp-image-2001572" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/131.png" alt="рис.2 Траектория движения объекта под действием одной статической массы " width="454" height="352" /></a><p class="wp-caption-text">рис.2 Траектория движения объекта под действием одной статической массы </p></div>
<p class="MsoNormal"><span lang="RU">Вот как то так </span><span style="Wingdings;" lang="RU"><span> <img src='http://software.intel.com/ru-ru/blogs/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span></span><span lang="RU"> Осталось только зайти в нижегородский планетарий и посмотреть как космические корабли бороздят просторы <span style="text-decoration: line-through;">большого театра</span> Вселенной, под радостные крики и слезы счастья местной ребятни. </span>I’m so proud <span style="Wingdings;"><span> <img src='http://software.intel.com/ru-ru/blogs/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span></span></p>
<p class="MsoNormal"><span lang="RU">Надеюсь, было интересно </span><span style="Wingdings;" lang="RU"><span> <img src='http://software.intel.com/ru-ru/blogs/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2009/06/25/2001574/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Дорога познания</title>
		<link>http://software.intel.com/ru-ru/blogs/2009/06/11/2001513/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2009/06/11/2001513/#comments</comments>
		<pubDate>Thu, 11 Jun 2009 11:57:33 +0000</pubDate>
		<dc:creator>vilianov</dc:creator>
		
		<category><![CDATA[Графика]]></category>

		<category><![CDATA[Разработка софта]]></category>

		<category><![CDATA[GPU]]></category>

		<category><![CDATA[опрос]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2009/06/11/2001513/</guid>
		<description><![CDATA[Если вы думаете, что тема антивирусов волновала меня на этой неделе просто так, это ошибочное мнение. В ближайший понедельник я вылетаю в Вену, а оттуда автобусом добираюсь до Братиславы - в офис компании ESET. Да, той самой, которая делает антивирус NOD32. Надо посмотреть вблизи на процесс борьбы с виртуальными зловредами, а также уточнить - куда [...]]]></description>
			<content:encoded><![CDATA[<p>Если вы думаете, что тема антивирусов волновала меня на этой неделе просто так, это ошибочное мнение. В ближайший понедельник я вылетаю в Вену, а оттуда автобусом добираюсь до Братиславы - в офис компании ESET. Да, той самой, которая делает антивирус NOD32. Надо посмотреть вблизи на процесс борьбы с виртуальными зловредами, а также уточнить - куда уходят работать бывшие сотрудники компании? В комментариях к предыдущему моему посту мы договорились до того, что их выносят по ночам, завернутыми в пластиковые пакеты...</p>
<p>А на дорожку - о занимательной статистике. На прошлой неделе мы запустили опрос на Computerra.ru - "Применяете ли вы GPU в неигровых задачах?". Проголосовало относительно немного людей, всего 852, но с учетом специфики нашего портала - выборка вполне и вполне.</p>
<p>Итак, чуть менее 7 процентов участников опроса (58 человек) используют GPU только для пережима видео. Около 10 процентов (84 опрошенных) ответили, что применяют видеокарту "для самых разных видов расчетов, GPU не простаивает". 17 с половиной процентов (149 респондентов) еще не пробовали использовать GPU не по назначению, но обязательно попробуют. Еще 21 процент (180 граждан) грустно сказали, что и в игровых-то задачах ничего такого не пользуют. Наконец, самый популярный ответ оказался... шуточным. Мы всегда придумываем такой, дабы внести элемент здорового раздолбайства, и в этот раз шутка удалась: 372 человека, или 42 процента опрошенных, ищут... способы запуска Linux на GPU.</p>
<p>С другой стороны, в каждой шутке есть доля шутки. Нынешние линуксы, кажется, могут запуститься на чем угодно, вплоть до процессоров электронных часов средней степени навороченности. А видеокарта - она помощнее будет. Правда, когда в конце года появятся процессоры Intel с встроенным графическим ядром, отделить одно от другого будет непросто, но так даже интереснее.</p>
<p>Хороших всем выходных. Лично я отдыхать не собираюсь, потому что дома лежит двухтерабайтный винчестер Westtern Digital и про него надо написать статью. Эх, до сих пор помню, как в 97-м году мой состоятельный товарищ купил себе винт емкостью 6.4 гигабайта. А я две недели ходил и спрашивал знакомых: ну куда такой монстрила? Что на нем хранить? Чем забивать? Это ж нереал какой-то. Теперь, спустя 12 лет, мне и два терабайта кажутся не ахти каким объемом. Готов на спор забить за полгодика. А вы? <img src='http://software.intel.com/ru-ru/blogs/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /></p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2009/06/11/2001513/feed/</wfw:commentRss>
		</item>
		<item>
		<title>Галопом по GPU: CUDA, Stream SDK &#38; Larrabee</title>
		<link>http://software.intel.com/ru-ru/blogs/2009/06/10/gpu-cuda-stream-sdk-amp-larrabee/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2009/06/10/gpu-cuda-stream-sdk-amp-larrabee/#comments</comments>
		<pubDate>Wed, 10 Jun 2009 10:31:47 +0000</pubDate>
		<dc:creator>Dmitry Serkin (Intel)</dc:creator>
		
		<category><![CDATA[Intel Software Network]]></category>

		<category><![CDATA[Графика]]></category>

		<category><![CDATA[Параллельное программирование]]></category>

		<category><![CDATA[Разработка софта]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2009/06/10/gpu-cuda-stream-sdk-amp-larrabee/</guid>
		<description><![CDATA[Как много разговоров вокруг центрального и графического процессоров. Последние прочно зарекомендовали себя как очень мощные "числодробилки". Но хватит разговоров, пора пощупать технологии своими руками и оценить сложность и подводные камни разработки под GPU.
Отлично. Как раз имеется прекрасная задача, которая идеально ложится на архитектуру многоядерности современных GPU. Речь идет о вычислительно сложных алгоритмах оценки движения (motion [...]]]></description>
			<content:encoded><![CDATA[<p>Как много разговоров вокруг <a href="http://software.intel.com/ru-ru/blogs/2009/05/21/cpu-vs-gpu/">центрального и графического процессоров</a>. Последние прочно зарекомендовали себя как очень мощные "числодробилки". Но хватит разговоров, пора пощупать технологии своими руками и оценить сложность и подводные камни разработки под GPU.</p>
<p>Отлично. Как раз имеется прекрасная задача, которая идеально ложится на архитектуру многоядерности современных GPU. Речь идет о вычислительно сложных алгоритмах оценки движения (motion estimation), краткий курс в которые был изложен в предыдущей <a href="http://software.intel.com/ru-ru/blogs/2009/05/13/2001318/">статье</a>.</p>
<p>Не будем голословными и произведем оценку вычислительной сложности алгоритма нахождения наилучшего совпадения макроблоков в исходном и опорном изображении. Для этого необходимо подсчитать какое количество сравнений необходимо произвести алгоритму в зависимости от размера кадра и окна поиска.</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/drawing41.png"><img class="aligncenter size-full wp-image-2001486" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/drawing41.png" alt="" width="416" height="409" /></a></p>
<p>Рассмотрим изображение состоящее из N x M макроблоков (16х16). Алгоритм полного поиска (Full Search) производит поиск наиболее похожего макроблока в некоторой области, называемой окном поиска, размером (2x + 1) х (2y + 1) макроблоков. Тогда формула для нахождения искомой величины с учётом краевых эффектов выглядит следующим образом:</p>
<p style="center;"><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/untitled.png"><img class="size-full wp-image-2001487 aligncenter" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/untitled.png" alt="" width="649" height="72" /></a></p>
<p>Первое слагаемое представляет собой общее количество комбинаций сравнения макроблоков с учетом заданного окна поиска. И из этого общего количества вычитаются невозможные случаи, определяемые граничными условиями, когда окно поиска выходит за границы изображения.</p>
<p>Не вдаваясь в детали, приведем лишь цифру в почти 9 миллионов сравнений для кадра размером 1920x1088 и минимальным окном поиска в 1 макроблок. А ведь опорных кадров может быть несколько, да и область поиска в 1 макроблок слишком мала. Таким образом, цифра получается впечатляющая. Зная точное количество сравнений макроблоков возможно рассчитать количество микроопераций процессора.</p>
<p>А что из себя представляет сравнение макроблоков?</p>
<p>Одно сравнение есть не что иное, как вычисление критерия SAD (Sum of Absolute Difference) между макроблоками в исходном и опорном изображении.</p>
<p><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/untitled21.png"><img class="aligncenter size-full wp-image-2001489" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/untitled21.png" alt="" width="493" height="249" /></a></p>
<p>Таким образом, приблизительно (очень приблизительно :)) 1279 операций тратится на одно сравнение двух макроблоков размером 16x16. Умножаем на общее количество сравнений и получаем искомую цифру.</p>
<p>С вычислительной сложностью теперь более-менее понятно. Дело за малым, перенести обсчет алгоритма на GPU. Легче сказать, чем сделать. Особенно, если учитывать отсутствие какого либо прошлого опыта в этой сфере.</p>
<p>Последние поколения GPU процессоров являются программируемыми. Они состоят из множества потоковых исполнительных устройств, которые исполняют различные программы, называемые ядрами (kernels). Потоковые исполнительные устройства могут производить вычисления общего назначения, используя модель вычислений SIMD (Single Instruction Multiple Data). В этой модели программирования, входящие массивы данных хранятся в памяти, отображаемой на некоторое количество исполняемых устройств, которые, исполняя пользовательские программы-ядра, генерируют выходные данные, и те в свою очередь записываются назад в память. Каждый экземпляр программы-ядра, запускаемый на SIMD процессоре, называется нитью (thread).  Определенный прямоугольный регион выходного буфера, на который отображаются нити, называется исполняемым регионом (domain of execution). Потоковый процессор распределяет массив нитей по группам, пока все нити не будут распределены. Затем программы-ядра могут начинать вычисления, используя вычислительные ресурсы каждой из этих групп. Упрощенная схема данной модели вычислений представлена на рисунке на примере решения AMD.</p>
<p style="center;"><a href="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/amd.png"><img class="aligncenter size-full wp-image-2001490" src="http://software.intel.com/ru-ru/blogs/wordpress/wp-content/uploads/amd.png" alt="" width="648" height="334" /></a></p>
<p>Производители графических адаптеров предоставляют весь необходимый   инструментарий для программирования GPU. NVIDIA поставляет CUDA, а AMD - Stream SDK.</p>
<p>Оба решения предполагают две модели использования: программирование GPU используя расширение языка C и native использование. В первом случае код небходимо предварительно скомпилировать в родной ISA (Instruction Set Architecture). Для этого NVIDIA и AMD поставляют специальные компиляторы. Мне удалось попробовать данный подход в рамках обоих продуктов и CUDA показала себя с лучшей стороны. Технология представляется мне более стабильной и завершенной. Второй подход подразумевает под собой использование run-time функций библиотеки. Здесь необходимо работать с такими понятиями как девайс, контекст, вручную загружать данные в ту или иную область видео памяти,  подгружать функцию-ядро и запускать ее на выполнение. Так как в данном случае мы имеем возможность выбирать тип памяти (текстурная, разделяемая, глобальная) и писать ядра на родном ISA видео процессоров, второй подход имеет смысл использовать для полной выжимки возможностей GPU.</p>
<p style="150%;">И конечно же, было невозможно пройти мимо Larrabee. За счет гетерогенной архитектуры Larrabee <!--[if gte mso 9]&gt;  Normal 0     false false false  EN-US X-NONE X-NONE                           &lt;![endif]--><!--[if gte mso 9]&gt;                                                                                                                                            &lt;![endif]--> <span style="150%;" lang="RU">код, предназначенный для выполнения на видеокарте, представляет собой привычный всем </span><span style="150%;">CPU</span><span style="150%;"> <span lang="RU">совместимый код, написанный на языке </span></span><span style="150%;">C</span><span style="150%;" lang="RU">/</span><span style="150%;">C</span><span style="150%;" lang="RU">++. Все, что остается сделать, это перенести нужную функциональность и представить ее в виде исполняемого модуля для </span><span style="150%;">Larrabee</span><span style="150%;" lang="RU">, а также передать данные для обработки на видеоадаптер. </span></p>
<p style="150%;"><span style="&quot;Calibri&quot;,&quot;sans-serif&quot;;" lang="RU">Последнее достигается путем создания специальной прослойки между приложением</span><span style="&quot;Calibri&quot;,&quot;sans-serif&quot;;"> <span lang="RU">и кодом, исполняемым на дискретной карте. </span></span><span style="150%;"><span lang="RU">Данная прослойка базируется на </span></span><span style="150%;">Intel</span><span style="150%;"> </span><span style="150%;">Larrabee</span><span style="150%;"> </span><span style="150%;">Native</span><span style="150%;"> </span><span style="150%;">SDK</span><span style="150%;" lang="RU">, который предоставляет весь необходимый функционал для написания приложений: загрузка и конфигурирование исполняемых модулей </span><span style="150%;">Larrabee</span><span style="150%;" lang="RU">, передача исходных данных на графическую карту и приём готовых конечных данных с графической карты.</span></p>
<p style="150%;">В результате Larrabee версия заняла меньше всего времени на разработку и оказалась наиболее приятной платформой для использования возможностей GPU. К сожалению, не имею права приводить какие либо цифры и детали реализации.</p>
<p style="150%;">В заключение хочется сказать, что "не так страшен черт, как его малюют". Писать код под GPU было интересно и местами даже забавно. Особенно было забавно тратить несколько дней на поиск ошибки в своем GPU коде, а в результате это оказывалась ошибка в драйвере и вас в очередной раз просили откатиться на предыдущую версию или поставить апдейт. Нужно всегда с подозрением относиться к ошибкам и использовать CPU эмуляцию или собственную CPU реализацию алгоритма. С ее помощью я обнаруживал ошибки в работе драйвера и портил жизнь support службе одной известной компании.</p>
<p style="150%;">Если подходить к делу совсем серьезно, то стоит изучить ISA вашей платформы. Это займет больше времени, но и позволит свободно ориентироваться в специфическом ассемблере и проводить оптимизацию. Но даже без таковой можно определенно сказать, что "овчинка стоит выделки". Если ваш алгоритм не подразумевает большие зависимости по данным и отлично дробиться на атомарные задачи, то это повод задуматься о GPU.</p>
<p style="150%;">
<p style="150%;">
<p style="150%;">
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2009/06/10/gpu-cuda-stream-sdk-amp-larrabee/feed/</wfw:commentRss>
		</item>
		<item>
		<title>А напишите мне одну программку? Или «кому нужны четыре терафлопа»</title>
		<link>http://software.intel.com/ru-ru/blogs/2009/06/03/2001472/</link>
		<comments>http://software.intel.com/ru-ru/blogs/2009/06/03/2001472/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 18:33:43 +0000</pubDate>
		<dc:creator>Dmitry Oganezov (Intel)</dc:creator>
		
		<category><![CDATA[Intel Software Network]]></category>

		<category><![CDATA[Графика]]></category>

		<category><![CDATA[Параллельное программирование]]></category>

		<category><![CDATA[Разработка софта]]></category>

		<category><![CDATA[Microsoft]]></category>

		<category><![CDATA[Natal]]></category>

		<category><![CDATA[видео]]></category>

		<category><![CDATA[графика]]></category>

		<guid isPermaLink="false">http://software.intel.com/ru-ru/blogs/2009/06/03/2001472/</guid>
		<description><![CDATA[Всем привет!
Думаю, мне стОит иногда отвлекаться от конкурсов, а то что ж это я… Массовик-затейник, что ли? Так вот, о чем хотел сказать…
Мы тут всё рассуждаем о высокопроизводительных вычислениях, математике, оптимизации, HPC (не к вечеру будь они помянуты), скоростной передаче данных, и прочих хитромудрых новоизобретениях. Недавно Вильянов проводил сбор мнений «что бы было, если бы [...]]]></description>
			<content:encoded><![CDATA[<p>Всем привет!</p>
<p>Думаю, мне стОит иногда отвлекаться от конкурсов, а то что ж это я… Массовик-затейник, что ли? Так вот, о чем хотел сказать…</p>
<p>Мы тут всё рассуждаем о высокопроизводительных вычислениях, математике, оптимизации, HPC (не к вечеру будь они помянуты), скоростной передаче данных, и прочих хитромудрых новоизобретениях. Недавно Вильянов проводил сбор мнений «<a href="http://software.intel.com/ru-ru/blogs/2009/05/28/2001447/">что бы было, если бы у вас был беспроводной безлимитный Интернет со стремящейся к бесконечностью скоростью</a>». Да ничего бы не было! <img src='http://software.intel.com/ru-ru/blogs/wordpress/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> По крайней мере, кроме видео-трансляций с нудистских пляжей никаких идей у сообщества не появилось. Впрочем, и с пляжем нужно еще разобраться: очень я опасаюсь, что в силу ряда причин трансляции эти не станут мега популярными…</p>
<p>И все-таки, давайте пофантазируем! Вопрос мой звучит так: «что бы было, если бы у вас были неограниченные вычислительные мощности при стремящих к нулю тепловом пакете и цене?». Нет, правда… Уже сейчас за каких-нибудь пару десятков тысяч долларов вы можете прикупить себе не-скажу-какой компьютер с производительностью 4 TeraFlops и, вероятно, попадете с ним вот в <a href="http://supercomputers.ru/?page=rating">этот список</a>. Кроме почетного места в списке, практической пользы от этого ящика в домашнем хозяйстве не будет – только вред один. Что на нем считать-то? Есть идеи?</p>
<p>У меня сегодня утром появилась одна, спешу поделиться. Перед тем как читать дальше, давайте условимся: если заработаете на ней бессовестно много денег, вы потом в мемуарах напишите, что это, мол, вас Дмитрий c ISN надоумил. Пустяк, а мне приятно. Впрочем, вам еще рано думать о мемуарах.</p>
<p>Итак, идея. Собственно, это комбинация двух идей. Microsoft продемонстрировал концепт <a href="http://www.youtube.com/watch?v=uqjtHDQZhQg">Natal</a> на <a href="http://e3.gamespot.com/press-conference/microsoft-e3/">GamesSpot E3 v.2009</a>. Видео стОит тысячи слов, но если коротко, то это система взаимодействия с компьютером (в данном случае – с игровой приставкой), основанная на распознавании 3D образа пользователя. Проше говоря, вы делаете вид, что пинаете мяч, а компьютер распознает, что вы как бы пинаете как бы мяч. В результате виртуальный мяч летит туда, куда вы его как бы пнули. Видео:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/uqjtHDQZhQg&amp;hl=en&amp;fs=1" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/uqjtHDQZhQg&amp;hl=en&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Вторая часть идеи: Я как-то с год назад <a href="http://software.intel.com/ru-ru/blogs/2008/05/28/64/">писал</a> о бете видеоплеера, который умеет распознавать длинные траектории движения объектов по Motion векторам. В двух словах: вы смотрите футбол, Аршавин бьет по мячу, который, понятное дело, летит в ворота. Вы тыкаете в летящий мяч, картинка останавливается, на экране рисуется траектория мяча (от ноги до ворот). Вы можете потаскать мяч туда-сюда по траектории, при этом все остальные футболисты перемещаются соответственно. Видео:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="425" height="344" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/WcIy9O344bI&amp;hl=ru&amp;fs=1" /><embed type="application/x-shockwave-flash" width="425" height="344" src="http://www.youtube.com/v/WcIy9O344bI&amp;hl=ru&amp;fs=1" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Объединяем две идеи и смотрим, что получилось. А получился у нас  домашний медиа-центр воспроизводящий HD видео с <em>расширенными </em>возможностьями управления на основе распознавания 3D образа зрителя. Представили? Пока нет? Поясняю: никаких пультов ДУ, никаких кнопок… Сидя в кресле перед 50” телевизором 1080p, вы ловите летящий в ворота мяч выверенным движением руки, медиа-центр тут же рисует траекторию полета (масштабируя картинку при необходимости), и вам остается только переместить воображаемый мяч в нужную точку рукой, чтобы посмотреть еще раз тот самый удар Аршавина. Круто? Принимайте заказ на разработку!</p>
<p>Традиционно всем удачи и побольше терафлопов.</p>
<p>PS: Специально для Сергея Вильянова: да, да, и еще раз да. Все это прекрасно ложится на идею <a href="http://software.intel.com/ru-ru/blogs/2009/05/28/2001447/">прямой трансляции видео с нудистских пляжей</a>, по WiMax.</p>
]]></content:encoded>
			<wfw:commentRss>http://software.intel.com/ru-ru/blogs/2009/06/03/2001472/feed/</wfw:commentRss>
		</item>
	</channel>
</rss>
