<?xml version='1.0' encoding='utf-8' ?>
<!--  If you are running a bot please visit this policy page outlining rules you must respect. http://www.livejournal.com/bots/  -->
<rss version='2.0' xmlns:lj='http://www.livejournal.org/rss/lj/1.0/' xmlns:media='http://search.yahoo.com/mrss/' xmlns:atom10='http://www.w3.org/2005/Atom'>
<channel>
  <title>ironpeter</title>
  <link>http://ironpeter.livejournal.com/</link>
  <description>ironpeter - LiveJournal.com</description>
  <lastBuildDate>Sun, 05 Jul 2009 17:11:02 GMT</lastBuildDate>
  <generator>LiveJournal / LiveJournal.com</generator>
  <lj:journal>ironpeter</lj:journal>
  <lj:journalid>9927764</lj:journalid>
  <lj:journaltype>personal</lj:journaltype>
  <atom10:link rel='hub' href='http://pubsubhubbub.appspot.com/' />
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/7118.html</guid>
  <pubDate>Sun, 05 Jul 2009 17:11:02 GMT</pubDate>
  <title>Прощайте, скалистые горы</title>
  <link>http://ironpeter.livejournal.com/7118.html</link>
  <description>&lt;p&gt;&lt;br /&gt;Из-за общей бурности жизни решил распрощаться со старой работой. Работалось в &amp;quot;Нивал Онлайн&amp;quot; долго и плодотворно, спасибо всем.&lt;br /&gt;&lt;br /&gt;О решении уйти я вроде пока не жалею - перспективы открываются разные, заманчивые.&lt;br /&gt;&lt;br /&gt;Если есть желание меня нанять ( очень желательная Москва ), то пишите на IronSPeter &apos;at&apos; gmail.com&lt;br /&gt;&lt;br /&gt;Вот собственно и все. До новых встреч.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
  <comments>http://ironpeter.livejournal.com/7118.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/6471.html</guid>
  <pubDate>Mon, 04 Jun 2007 06:26:32 GMT</pubDate>
  <title>Фрактальный оркестр.</title>
  <link>http://ironpeter.livejournal.com/6471.html</link>
  <description>--Архитектура - это застывшая музыка ( не помню кто, кажется, Гете ). &lt;br /&gt;--Хороший код - фрактальный код ( наш aruslan ).&lt;br /&gt;&lt;br /&gt;Сразу оговорюсь, что ненавижу цитирования в шапке, они обычно неуместны. Но тут не мог удержаться - ибо надо что-то оставить над катом. Под катом - нудные технические подробности.&lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Пост написан прежде всего под впечатлением от процесса программирования на Cell SPU. Такого удовольствия от процесса я не испытывал давно. Случилось первый раз за много лет, что я сидел за компьютером часов до трех ночи.&lt;br /&gt;&lt;br /&gt;Итак, коротенько про SPU, эти &quot;синергетические процессорные устройства&quot;. Имеют эти устройства локальную память в 256K, все операции производятся над ней. Можно инициировать DMA - запрос. Попросить скопировать из основной памяти кусок, или залить в нее. С каждым DMA запросом можно ассоциировать тег и следить за выполнением запроса. На лету может быть несколько запросов. Имеется 128 регистров ширины 128 бит. Имеются четные и нечетные команды. Четные команды - это булевая, целочисленная и плавучая арифметика. Нечетные команды - загрузка, выгрузка и замечательная команда перемешивания двух регистров - shuffle. За такт может быть выполнена одна четная, одна нечетная команда.&lt;br /&gt;Правые и левые NOPы прилагаются, кстати - для просветленных.&lt;br /&gt;&lt;br /&gt;Команда shuffle на самом деле является центральным местом всей архитектуры. А делает она очень простую вещь - по двум регистрам ( суммарно 32 байта ) составляет регистр ( 16 байт ), составленный из перемешанных в произвольном порядке произвольных байтов исходных регистров. Я повторяю - произвольном порядке. Как только есть произвольные перестановки байт - в коде появляется постоянные игры с SOA и AOS подходом. Байты перекидиваются туда-сюда, как мячики дрессированными тюленями в цирке. &lt;br /&gt;&lt;br /&gt;Вполне себе рабочая задача - есть массив vec_float4, которые символизируют собой вершины сетки. Есть второй массив - просто массив байт, каждые три байта - индекс треугольника. Надо умножить вершины на матрицу преобразования, для каждого треугольника определить ориентацию, сложить прореженные вершины и индексы последовательно в другие массивы. Такой софтверный back face cull.&lt;br /&gt;&lt;br /&gt;Чтобы работать с треугольниками, надо превратить индексы в что-то посущественнее байта. Скажем, превратить голые последовательные 48 байт в 16 треугольников ( содержимое регистра: 3 int индекса, четвертый элемент 0 ). Примерно таким образом, извиняюсь за интимные детали:&lt;br /&gt;&lt;br /&gt;&lt;table width=&quot;100%&quot; bgcolor=&quot;#f4f4f4&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;font color=&quot;white&quot;&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_0&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x00&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_1&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x01&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_2&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x02&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_3&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x03&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_4&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x04&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_5&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x05&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_6&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x06&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_7&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x07&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_8&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x08&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_9&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x09&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_A&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x0A&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_B&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x0B&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_C&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x0C&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_D&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x0D&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_E&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x0E&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_F&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x0F&lt;/font&gt;

&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;N8_0&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x10&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;N8_1&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x11&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;N8_2&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x12&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;N8_3&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x13&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;N8_4&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x14&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;N8_5&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x15&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;N8_6&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x16&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;N8_7&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x17&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;N8_8&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x18&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;N8_9&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x19&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;N8_A&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x1A&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;N8_B&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x1B&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;N8_C&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x1C&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;N8_D&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x1D&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;N8_E&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x1E&lt;/font&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;N8_F&lt;/font&gt;       &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x1F&lt;/font&gt;

&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;E4&lt;/font&gt;  &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#ff0000&quot;&gt;0x80&lt;/font&gt;

&lt;font color=&quot;#000000&quot;&gt;tw0_0&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;qword&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;spu_shuffle&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t1&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t1&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;SWZ&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;{&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_0&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_1&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_2&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;E4&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;}&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;tw1_0&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;qword&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;spu_shuffle&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t1&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t1&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;SWZ&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;{&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_3&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_4&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_5&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;E4&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;}&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;tw2_0&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;qword&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;spu_shuffle&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t1&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t1&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;SWZ&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;{&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_6&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_7&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_8&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;E4&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;}&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;tw3_0&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;qword&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;spu_shuffle&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t1&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t1&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;SWZ&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;{&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_9&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_A&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_B&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;E4&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;}&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
        
&lt;font color=&quot;#000000&quot;&gt;tw0_1&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;qword&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;spu_shuffle&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t1&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t1&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;SWZ&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;{&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_C&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_D&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_E&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;E4&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;}&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;tw1_1&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;qword&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;spu_shuffle&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t1&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t2&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;SWZ&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;{&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_F&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;N8_0&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;N8_1&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;E4&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;}&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;tw2_1&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;qword&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;spu_shuffle&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t2&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t2&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;SWZ&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;{&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_2&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_3&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_4&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;E4&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;}&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;tw3_1&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;qword&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;spu_shuffle&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t2&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t2&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;SWZ&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;{&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_5&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_6&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_7&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;E4&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;}&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
        
&lt;font color=&quot;#000000&quot;&gt;tw0_2&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;qword&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;spu_shuffle&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t2&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t2&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;SWZ&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;{&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_8&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_9&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_A&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;E4&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;}&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;tw1_2&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;qword&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;spu_shuffle&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t2&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t2&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;SWZ&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;{&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_B&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_C&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_D&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;E4&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;}&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;tw2_2&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;qword&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;spu_shuffle&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t2&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t3&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;SWZ&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;{&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_E&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_F&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;N8_0&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;E4&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;}&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;tw3_2&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;qword&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;spu_shuffle&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t3&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t3&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;SWZ&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;{&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_1&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_2&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_3&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;E4&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;}&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
        
&lt;font color=&quot;#000000&quot;&gt;tw0_3&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;qword&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;spu_shuffle&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t3&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t3&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;SWZ&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;{&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_4&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_5&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_6&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;E4&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;}&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;tw1_3&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;qword&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;spu_shuffle&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t3&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t3&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;SWZ&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;{&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_7&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_8&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_9&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;E4&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;}&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;tw2_3&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;qword&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;spu_shuffle&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t3&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t3&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;SWZ&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;{&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_A&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_B&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_C&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;E4&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;}&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
&lt;font color=&quot;#000000&quot;&gt;tw3_3&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;qword&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;spu_shuffle&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t3&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t3&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;SWZ&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;{&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_D&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_E&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;C8_F&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;E4&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;}&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Магическое число 16 тут возникает вполне естественно, треугольников именно 16, потому что 48 это наименьшее общее кратное 16 и 3.&lt;br /&gt;Для каждого из треугольников надо прочитать 3 вершины, определить ориентацию. Математика тут очень простая и работает почти вся со скалярными операциями. Неминуемо логика кода повелевает обрабатывать треугольники четверками. И проводить вычисления вот в таком стиле:&lt;br /&gt;&lt;table width=&quot;100%&quot; bgcolor=&quot;#f4f4f4&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;font color=&quot;white&quot;&gt;
&lt;b&gt;&lt;font color=&quot;#0000ff&quot;&gt;static&lt;/font&gt;&lt;/b&gt; &lt;font color=&quot;#000000&quot;&gt;vec_float4&lt;/font&gt; &lt;b&gt;&lt;font color=&quot;#0000ff&quot;&gt;inline&lt;/font&gt;&lt;/b&gt;  &lt;font color=&quot;#000000&quot;&gt;Cross&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt;
    &lt;b&gt;&lt;font color=&quot;#0000ff&quot;&gt;const&lt;/font&gt;&lt;/b&gt; &lt;font color=&quot;#000000&quot;&gt;vec_float4&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;&amp;amp;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;ax&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt;
    &lt;b&gt;&lt;font color=&quot;#0000ff&quot;&gt;const&lt;/font&gt;&lt;/b&gt; &lt;font color=&quot;#000000&quot;&gt;vec_float4&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;&amp;amp;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;bx&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt;
    &lt;b&gt;&lt;font color=&quot;#0000ff&quot;&gt;const&lt;/font&gt;&lt;/b&gt; &lt;font color=&quot;#000000&quot;&gt;vec_float4&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;&amp;amp;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;cx&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt;
    &lt;b&gt;&lt;font color=&quot;#0000ff&quot;&gt;const&lt;/font&gt;&lt;/b&gt; &lt;font color=&quot;#000000&quot;&gt;vec_float4&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;&amp;amp;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;ay&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt;
    &lt;b&gt;&lt;font color=&quot;#0000ff&quot;&gt;const&lt;/font&gt;&lt;/b&gt; &lt;font color=&quot;#000000&quot;&gt;vec_float4&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;&amp;amp;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;by&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt;
    &lt;b&gt;&lt;font color=&quot;#0000ff&quot;&gt;const&lt;/font&gt;&lt;/b&gt; &lt;font color=&quot;#000000&quot;&gt;vec_float4&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;&amp;amp;&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;cy&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;
&lt;font color=&quot;#000099&quot;&gt;{&lt;/font&gt;
    &lt;font color=&quot;#000000&quot;&gt;vec_float4&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;abx&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;spu_sub&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;ax&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;bx&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
    &lt;font color=&quot;#000000&quot;&gt;vec_float4&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;aby&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;spu_sub&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;ay&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;by&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
    &lt;font color=&quot;#000000&quot;&gt;vec_float4&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;acx&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;spu_sub&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;ax&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;cx&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
    &lt;font color=&quot;#000000&quot;&gt;vec_float4&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;acy&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;spu_sub&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;ay&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;cy&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
    &lt;b&gt;&lt;font color=&quot;#0000ff&quot;&gt;return&lt;/font&gt;&lt;/b&gt; &lt;font color=&quot;#000000&quot;&gt;spu_msub&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;abx&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;acy&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;spu_mul&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;aby&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;acx&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
&lt;font color=&quot;#000099&quot;&gt;}&lt;/font&gt;
&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Замечаете страшное? Я замечаю. Латентность команд от двух до шести тактов, эти вычисления банально провисают, они слишком зависимы.  Неминуемо надо выполнять несколько таких функций Cross параллельно.&lt;br /&gt;Желательно не меньше четыре.  Я наивный и верю компилятору, что 4 последовательных вызова функции Cross с независимыми параметрами довольно удачно разведутся по латентностям.  Японцы наверняка ( и примкнувший к ним Боря ) фыркнут на мое  &quot;Я наивный и верю компилятору&quot;. У них все правильно, на ассемблере. С четными и нечетными командами рядом. И несколькими столбиками паралелльных вычислений. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Помните мега-тред на gamedev.ru про параллельное программирование? См. &lt;a href=&quot;http://www.gamedev.ru/code/forum/?id=19939&amp;page=2&quot;&gt;http://www.gamedev.ru/code/forum/?id=19939&amp;page=2&lt;/a&gt;. Вот идеология параллельного программирования в действии:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;table width=&quot;100%&quot; bgcolor=&quot;#f4f4f4&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;font color=&quot;white&quot;&gt;
&lt;i&gt;&lt;font color=&quot;#008800&quot;&gt;//&amp;#1087;&amp;#1077;&amp;#1088;&amp;#1077;&amp;#1084;&amp;#1077;&amp;#1085;&amp;#1085;&amp;#1099;&amp;#1077; &amp;#1076;&amp;#1083;&amp;#1103; &amp;#1095;&amp;#1077;&amp;#1090;&amp;#1074;&amp;#1077;&amp;#1088;&amp;#1082;&amp;#1080; &amp;#1090;&amp;#1088;&amp;#1077;&amp;#1091;&amp;#1075;&amp;#1086;&amp;#1083;&amp;#1100;&amp;#1085;&amp;#1080;&amp;#1082;&amp;#1086;&amp;#1074;&lt;/font&gt;&lt;/i&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;VARS&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: #ffffcc&quot;&gt;\&lt;/font&gt;
        &lt;font color=&quot;#000000&quot;&gt;vec_float4&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;a0&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;a1&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;a2&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;a3&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;;&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: #ffffcc&quot;&gt;\&lt;/font&gt;
        &lt;font color=&quot;#000000&quot;&gt;vec_float4&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;b0&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;b1&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;b2&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;b3&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;;&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: #ffffcc&quot;&gt;\&lt;/font&gt;
        &lt;font color=&quot;#000000&quot;&gt;vec_float4&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;c0&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;c1&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;c2&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;c3&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;;&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: #ffffcc&quot;&gt;\&lt;/font&gt;
        &lt;font color=&quot;#000000&quot;&gt;vec_float4&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;ax&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;bx&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;cx&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;;&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: #ffffcc&quot;&gt;\&lt;/font&gt;
        &lt;font color=&quot;#000000&quot;&gt;vec_float4&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;ay&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;by&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;cy&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;;&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: #ffffcc&quot;&gt;\&lt;/font&gt;
        &lt;font color=&quot;#000000&quot;&gt;vec_float4&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;c&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;;&lt;/font&gt;

&lt;i&gt;&lt;font color=&quot;#008800&quot;&gt;//&amp;#1047;&amp;#1072;&amp;#1075;&amp;#1088;&amp;#1091;&amp;#1079;&amp;#1082;&amp;#1072; 3 &amp;#1074;&amp;#1077;&amp;#1088;&amp;#1096;&amp;#1080;&amp;#1085; &amp;#1076;&amp;#1083;&amp;#1103; &amp;#1082;&amp;#1072;&amp;#1078;&amp;#1076;&amp;#1086;&amp;#1075;&amp;#1086; &amp;#1090;&amp;#1088;&amp;#1077;&amp;#1091;&amp;#1075;&amp;#1086;&amp;#1083;&amp;#1100;&amp;#1085;&amp;#1080;&amp;#1082;&amp;#1072;&lt;/font&gt;&lt;/i&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;PREP&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: #ffffcc&quot;&gt;\&lt;/font&gt;
    &lt;font color=&quot;#000000&quot;&gt;Prepare&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;tw0&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;tw1&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;tw2&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;tw3&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;v&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;a0&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;a1&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;a2&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;a3&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;b0&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;b1&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;b2&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;b3&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;c0&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;c1&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;c2&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;c3&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;

&lt;i&gt;&lt;font color=&quot;#008800&quot;&gt;//&amp;#1092;&amp;#1086;&amp;#1088;&amp;#1084;&amp;#1080;&amp;#1088;&amp;#1086;&amp;#1074;&amp;#1072;&amp;#1085;&amp;#1080;&amp;#1077; SOA &amp;#1074;&amp;#1077;&amp;#1082;&amp;#1090;&amp;#1086;&amp;#1088;&amp;#1086;&amp;#1074;&lt;/font&gt;&lt;/i&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;S&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: #ffffcc&quot;&gt;\&lt;/font&gt;
  &lt;font color=&quot;#000000&quot;&gt;ConvertXY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;S&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;0&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;S&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;1&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;S&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;2&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;S&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#ff0000&quot;&gt;3&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;S&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;x&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;S&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;y&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;

&lt;i&gt;&lt;font color=&quot;#008800&quot;&gt;//&amp;#1074;&amp;#1099;&amp;#1095;&amp;#1080;&amp;#1089;&amp;#1083;&amp;#1077;&amp;#1085;&amp;#1080;&amp;#1077; &amp;#1086;&amp;#1088;&amp;#1080;&amp;#1077;&amp;#1085;&amp;#1090;&amp;#1072;&amp;#1094;&amp;#1080;&amp;#1080; &amp;#1076;&amp;#1083;&amp;#1103; 4 &amp;#1090;&amp;#1088;&amp;#1077;&amp;#1091;&amp;#1075;&amp;#1086;&amp;#1083;&amp;#1100;&amp;#1085;&amp;#1080;&amp;#1082;&amp;#1086;&amp;#1074; &amp;#1089;&amp;#1088;&amp;#1072;&amp;#1079;&amp;#1091;.&lt;/font&gt;&lt;/i&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;CRS&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: #ffffcc&quot;&gt;\&lt;/font&gt;
  &lt;font color=&quot;#000000&quot;&gt;c&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;=&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;Cross&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;ax&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;bx&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;cx&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;ay&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;by&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;cy&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;

&lt;i&gt;&lt;font color=&quot;#008800&quot;&gt;//&amp;#1089;&amp;#1073;&amp;#1088;&amp;#1086;&amp;#1089; &amp;#1090;&amp;#1088;&amp;#1077;&amp;#1091;&amp;#1075;&amp;#1086;&amp;#1083;&amp;#1100;&amp;#1085;&amp;#1080;&amp;#1082;&amp;#1086;&amp;#1074; &amp;#1089; &amp;#1085;&amp;#1091;&amp;#1078;&amp;#1085;&amp;#1086;&amp;#1081; &amp;#1086;&amp;#1088;&amp;#1080;&amp;#1077;&amp;#1085;&amp;#1090;&amp;#1072;&amp;#1094;&amp;#1080;&amp;#1077;&amp;#1081; &amp;#1074; &amp;#1073;&amp;#1091;&amp;#1092;&amp;#1077;&amp;#1088;&lt;/font&gt;&lt;/i&gt;
&lt;font color=&quot;#660000&quot;&gt;#define&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;DMP&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;&lt;font color=&quot;#000000&quot; style=&quot;background-color: #ffffcc&quot;&gt;\&lt;/font&gt;
  &lt;font color=&quot;#000000&quot;&gt;Dump&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;tw0&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;tw1&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;tw2&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;tw3&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;c&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;##&lt;/font&gt;&lt;font color=&quot;#000000&quot;&gt;X&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;t&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;

        &lt;font color=&quot;#000000&quot;&gt;VARS&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_0&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;  &lt;font color=&quot;#000000&quot;&gt;VARS&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_1&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;  &lt;font color=&quot;#000000&quot;&gt;VARS&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_2&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;  &lt;font color=&quot;#000000&quot;&gt;VARS&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_3&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
        &lt;font color=&quot;#000000&quot;&gt;PREP&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_0&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;  &lt;font color=&quot;#000000&quot;&gt;PREP&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_1&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;  &lt;font color=&quot;#000000&quot;&gt;PREP&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_1&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;  &lt;font color=&quot;#000000&quot;&gt;PREP&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_3&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
        &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;a&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_0&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;a&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_1&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;a&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_2&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;a&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_3&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
        &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;b&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_0&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;b&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_1&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;b&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_2&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;b&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_3&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
        &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;c&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_0&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;c&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_1&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;c&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_2&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;c&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_3&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;        
        &lt;font color=&quot;#000000&quot;&gt;CRS&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_0&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;   &lt;font color=&quot;#000000&quot;&gt;CRS&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_1&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;   &lt;font color=&quot;#000000&quot;&gt;CRS&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_2&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;   &lt;font color=&quot;#000000&quot;&gt;CRS&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_3&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
        &lt;font color=&quot;#000000&quot;&gt;DMP&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_0&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;   &lt;font color=&quot;#000000&quot;&gt;DMP&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_1&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;   &lt;font color=&quot;#000000&quot;&gt;DMP&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_2&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;   &lt;font color=&quot;#000000&quot;&gt;DMP&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_3&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;А вот  переход от параллельного программирования к диагональному, самое сердце кода:&lt;br /&gt;&lt;br /&gt;&lt;table width=&quot;100%&quot; bgcolor=&quot;#f4f4f4&quot;&gt;&lt;tr&gt;&lt;td&gt;&lt;pre&gt;&lt;font color=&quot;white&quot;&gt;

        &lt;font color=&quot;#000000&quot;&gt;VARS&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_0&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
        &lt;font color=&quot;#000000&quot;&gt;PREP&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_0&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;  &lt;font color=&quot;#000000&quot;&gt;VARS&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_1&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
        &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;a&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_0&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;PREP&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_1&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;  &lt;font color=&quot;#000000&quot;&gt;VARS&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_2&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
        &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;b&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_0&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;a&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_1&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;PREP&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_2&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;  &lt;font color=&quot;#000000&quot;&gt;VARS&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_3&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
        &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;c&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_0&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;b&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_1&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;a&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_2&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;PREP&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_3&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
        &lt;font color=&quot;#000000&quot;&gt;CRS&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_0&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;   &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;c&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_1&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;b&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_2&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;a&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_3&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
        &lt;font color=&quot;#000000&quot;&gt;DMP&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_0&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;   &lt;font color=&quot;#000000&quot;&gt;CRS&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_1&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;   &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;c&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_2&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;b&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_3&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
        &lt;i&gt;&lt;font color=&quot;#008800&quot;&gt;/*      */&lt;/font&gt;&lt;/i&gt;  &lt;font color=&quot;#000000&quot;&gt;DMP&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_1&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;   &lt;font color=&quot;#000000&quot;&gt;CRS&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_2&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;   &lt;font color=&quot;#000000&quot;&gt;XY&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;c&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;,&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_3&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
        &lt;i&gt;&lt;font color=&quot;#008800&quot;&gt;/*      */&lt;/font&gt;&lt;/i&gt;              &lt;font color=&quot;#000000&quot;&gt;DMP&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_2&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;)&lt;/font&gt;   &lt;font color=&quot;#000000&quot;&gt;CRS&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_3&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;
        &lt;i&gt;&lt;font color=&quot;#008800&quot;&gt;/*      */&lt;/font&gt;&lt;/i&gt;                          &lt;font color=&quot;#000000&quot;&gt;DMP&lt;/font&gt;&lt;font color=&quot;#000099&quot;&gt;(&lt;/font&gt; &lt;font color=&quot;#000000&quot;&gt;_3&lt;/font&gt; &lt;font color=&quot;#000099&quot;&gt;);&lt;/font&gt;

&lt;/font&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Столбики являются слабо зависимыми друг от друга, так что они могут быть смещены &quot;по высоте&quot; произвольно. Но такой порядок понравился компилятору сильнее всего.&lt;br /&gt;Наверное потому, что в функции DMP происходит инкрементация буфера для записи треугольников ( тех которые с правильной ориентацией ). Эти вызовы DMP ( X ) зависимы друг от друга. И компилятор не смог провести глобальную оптимизацию кода, лишь чуть пошевелив порядок команд. Кроме того, в разнородных функциях встречаются разнородные четные и нечетные команды, которые компилятор смог эффективно спарить. Наличие четных и нечетных задач сыграло тогда, когда мы стали работать с масштабами кода в сотни команд - сотни тактов. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Следующий уровень детализации фрактала - это цикл, тело кторого приведено выше. Цикл, каждая итерация которого обрабатывает по 16 треугольников. При характерных размерах батча геометрии в 256 треугольников у нас будет порядка 16 итераций. Число 256 тоже не взято с потолка. Оно гармонично и прекрасно. Если у нас 256 треугольников, то DMA запросы будут выкачивать порядка килобайта данных. Этот тот размер DMA пакета, начиная с которого скорость трансфера выходит на плато.&lt;br /&gt;&lt;br /&gt;Следующий уровень фрактала виден достаточно отчетливо. На финальном коде вычисления занимают на 256 треугольниках примерно 1.6e-6 секунды. DMA трансферы ( входящие и исходящие ) занимают меньше, порядка 1.0e-6, но число того же порядка. Надо завести две копии рабочих данных - в одну стриммим DMA, во второй считаем, код заиграет новыми красками на модельках по несколько тысяч треугольников. Смотрите, какая прекрасная аналогия с четными и нечетными командами.&lt;br /&gt;&lt;br /&gt;Следующий уровень фрактала - понятие &quot;задача&quot; для spu. Код в SPU можно заливать DMA трансфером, но кажется более разумным на запущенном spe потоке выполнять много однотипных работ. Много моделек по много кластеров каждая. Естественно, у меня в тестах этого уровня абстракции нету. А вот в реальной игре - будет, да еще как будет.  &lt;br /&gt;&lt;br /&gt;Посмотрите на всю структуру кода-фрактала. Снизу свою волю диктует SIMD архитектура ( масштаб одного такта ), спаривание четных и нечетных команд ( масштаб пары операций ), латентность команды ( масштаб 2-6 операций ), чуть выше - циклы и условные переходы ( масштаб 20 тактов простоя на условном переходе ), посередине обосновались DMA - трансферы с характерными размерами 1 килобайт, сверху - уровень однотипных задач для &quot;spu&quot;.&lt;br /&gt;&lt;br /&gt;Низкоуровневый код весь пронизан духом SOA-AOS преобразования. Вершины, скажем, до DMA трансфера хранятся в виде SOA, на матрицу умножаются в таком же виде, потом сохраняются в AOS виде для индесного доступа, потом в коде обработки треугольников их x y компоненты снова ложатся лежа в регистры по четыре штуки. Куда там cuda c ее фиксированными SIMD линейками ( наверняка они и не линейки вовсе на самом низком уровне ). &lt;br /&gt;&lt;br /&gt;Итоговая скорость - чуть меньше 200 миллионов треугольников ( половина приняты, половина отброшены  ) в секунду на одном SPU. Одном из 6 доступных. Задача простая, но, скажем, наличие скелетной анимации не сильно бы понизило скорость. &lt;br /&gt;&lt;br /&gt;Пишешь такой код и проникаешься ненавистью к графическому конвееру в общем и придуманной за тебя функции DIP в частности. Не так надо, не так...&lt;br /&gt;&lt;br /&gt;</description>
  <comments>http://ironpeter.livejournal.com/6471.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>15</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/6169.html</guid>
  <pubDate>Fri, 04 May 2007 08:27:15 GMT</pubDate>
  <title>Гайдзинам с любовью. Сони.</title>
  <link>http://ironpeter.livejournal.com/6169.html</link>
  <description>Купил на днях чудо-приставку PS3. Приставка просто так не включается, нужен монитор с поддержкой HDCP. На агрегат с поддержкой 1080p любви к Сони у меня не хватило, приобрел &quot;простенький&quot; 22 дюймовый монитор с поддержкой 720p. &lt;br /&gt;&lt;br /&gt;Встроенная Game OS в русской транскрипции забавна. &quot;Отформатировать утилиту&quot; - &quot;Format Utility&quot;. Заставка могильного цвета - говорят, что ее цвет зависит от месяца. Хочу зелененькую. Или желтенькую. Или синенькую - по желанию, а не в зависимости от фазы луны. Тормозит. Впрочем, эта самая Game OS была мне плоско-параллельна. Только для того, чтобы установить linux bootloader.&lt;br /&gt;&lt;br /&gt;Дистрибутив YDL установился как легкий ветерок. Как обычно, совершил ужасную ошибку - выбрал русский язык в качестве системного. Каждый раз, когда ставлю новый дистрибутив, зачем-то делаю так. Раскаиваюсь, конечно, но поздно. В этот раз почти все шрифты отображались. Где-то половина, остальные - квадратиками. Это безусловный прогресс по сравнению с предыдущими наблюдениями. &lt;br /&gt;&lt;br /&gt;&lt;a name=&quot;cutid1&quot;&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Шаловливые ручки сразу потянулись к libspe. Пример почти сразу откомпилировался и заработал. За вычетом грустных нубовских ошибок. Ну там пробелы в makefile вместо tabs. Ну там некратный 16 размер DMA пакета для посылки на SPU - bus error. Ну там функция clock() не работала, выдавала константный 0 - в ответ я заюзал функцию spu_read(write)_decrementer ( пример найден на блоге японского товарища на японском языке ) и получил счастье. &lt;br /&gt;&lt;br /&gt;Хотелось peak, то есть - сияющих высот. Естественно, на стандартной задаче - умножении матриц. Пик тут простой - simd float4 fmad на SPU за такт ( 8 flops ). На одном SPU должно получиться 24 гигафлопа. Параллельно с multiply-add может запускаться load-store.&lt;br /&gt;&lt;br /&gt;Сишный вариант не зажог, до гигафлопа не дотянул. Я не растерялся, взял интринсики. &lt;br /&gt;&lt;br /&gt;vec_float4 *a = &amp;pd.a;&lt;br /&gt;vec_float4 *b = &amp;pd.b;&lt;br /&gt; &lt;br /&gt;for( i = 0; i &amp;lt; 256; i += 4 )&lt;br /&gt;{&lt;br /&gt;r0 += a[i] * b[i] + &lt;br /&gt;      a[i + 1] * b[i + 1] + &lt;br /&gt;      a[i + 2] * b[i + 2] + &lt;br /&gt;      a[i + 3] * b[i + 3]; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Посчитал в уме, что код будет давать 12 гигафлоп, потому что темп загрузки-выгрузки двойной по сравнению с математикой. Откомпилировал (-O3), запустил: 3.2 гигафлопа. Смотрю листинг:&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://rafb.net/p/BQMhrV71.html&quot;&gt;http://rafb.net/p/BQMhrV71.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Вижу страшное. Обратите внимание на блок fma в конце. Зависимая цепочка - команды встали &quot;друг над другом&quot;. Вместо одного такта - 6 каждая. Установка скобочек ( + ) + ( + ) в коде помогла чуть. И по мелочевке - левые и правые команды не захотели спариться. &quot;Я тогда цежу сквозь зубы, но уже конечно грубо...&quot; Написал &lt;br /&gt;&lt;br /&gt;for( i = 0; i &amp;lt; 256; i += 4 )&lt;br /&gt;{&lt;br /&gt;r0 += a[i] * b[i];&lt;br /&gt;r1 += a[i + 1] * b[i + 1]; &lt;br /&gt;r2 += a[i + 2] * b[i + 2]; &lt;br /&gt;r3 += a[i + 3] * b[i + 3]; &lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Стало маргинально лучше, но команды все равно не спаривались.&lt;br /&gt;&lt;br /&gt;Почесал нос. Вспомнил, как консольные люди говорили мне: &quot;прежде всего, макроассемблер с удобной подсветкой синтаксиса захочешь ты&quot;... Макроассемблер с удобной подсветкой синтаксиса нужен мне, да.&lt;br /&gt;&lt;br /&gt;Засыпал, думал, что удобного языка для написания под SPU не придумали еще. Хочется писать симпатичный код вроде &lt;br /&gt;&lt;br /&gt;foreach( object in sceneObjects | IsIn( object-&amp;gt;GetBoundingBox(), cameraFrustrum ) )object-&amp;gt;Draw();&lt;br /&gt;&lt;br /&gt;Хочется счастья - в функции не задумываться о том, что происходит на нижних уровнях. Хочется, чтобы этот самый foreach генерировал серию DMA запросов на код виртуальных функций и на данные. Параллельно обрабатывал. &lt;br /&gt;&lt;br /&gt;Функция становится объектом неминуемо. Контекст работы функции - тоже объект.  Получается какой-то функциональный язык с императивным подъязыком. Сразу хочется GC и компактификации в пределах SPU local storage.&lt;br /&gt;&lt;br /&gt;Если мир Haskell и мир макроассемблера встретится - будет счастье на SPU. &quot;Покамест лес Бирнамский не двинулся на Дунсинанский холм, мне страх неведом.&quot;&lt;br /&gt;&lt;br /&gt;</description>
  <comments>http://ironpeter.livejournal.com/6169.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>11</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/6036.html</guid>
  <pubDate>Thu, 26 Apr 2007 07:44:24 GMT</pubDate>
  <title>Денарий Гордиана III</title>
  <link>http://ironpeter.livejournal.com/6036.html</link>
  <description>&lt;img src=&quot;http://s173.photobucket.com/albums/w48/IronPeter/ant.jpg&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Рим, примерно 250 год нашей эры. Прошло немногим больше двухсот лет с момента казни Иисуса Христа. Сменяющие друг друга императоры печатают монету для оплаты легионов.&lt;br /&gt;Первоначально серебряный денарий теперь отливается из сплава меди и серебра. Потом он станет медным, а после бронзовым и выйдет из обихода. Но пока - 4 грамма, половина серебра.&lt;br /&gt;&lt;br /&gt;Годовое жалование легионера - 300 денариев. Исходя из современных 15000 долларов годового денежного довольствия рядового американской армии можно примерно вывести современный денежный эквивалент этой монетки - 50 долларов.&lt;br /&gt;&lt;br /&gt;Очень интересные ощущения испытваешь, когда держишь такую монетку в руках, но это лирика.&lt;br /&gt;&lt;br /&gt;Практическая сторона вопроса состоит в том, что за почти две тысячи лет денарий не потерял, но и не приобрел покупательной способности. И монетка стоит примерно те же 50 долларов на аукционе.</description>
  <comments>http://ironpeter.livejournal.com/6036.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>23</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/5726.html</guid>
  <pubDate>Wed, 28 Mar 2007 06:45:53 GMT</pubDate>
  <title>Риски программиста</title>
  <link>http://ironpeter.livejournal.com/5726.html</link>
  <description>&lt;p&gt;Лежал в постели, пытался заснуть. Похоже, температурил. Внезапно в памяти всплыла фраза из TDD Пятых Героев: &quot;А риски многопользовательской разработки будут сняты внедрением системы чекина-чекаута для SQL базы данных&quot;. Неожиданно картинка моего прихода в Нивал всплыла с необыкновенной яркостью. Почти как сон Кольриджа:&lt;br /&gt;&lt;br /&gt;В стране Ксанад благословенной&lt;br /&gt;Дворец&amp;nbsp; построил&amp;nbsp; Кубла Хан,&lt;br /&gt;Где Альф бежит, поток священный,&lt;br /&gt;Сквозь мглу пещер гигантских, пенный,&lt;br /&gt;Впадает&amp;nbsp; в сонный океан.&lt;br /&gt;&lt;br /&gt;Рассказываю. Есть SQL база, в ней дохрена табличек. Каждому игровому типу соответствует своя табличка.&amp;nbsp;Массивам-членам класса тоже соответствует своя табличка и чтобы этот массив получить, надо сказать SELECT BY PARENT_ID. Над этим висит xsd схема, управляет структурой базы. Из схемы генерится C++ код для классов. Схема же используется в редакторе, который показывает такой симпатичный property view прямо из базы данных.&lt;br /&gt;&lt;br /&gt;Шоколадно? Да, только игра не умеет читать SQL базу напрямую. А читает она бинарный дамп. Который генерится из базы такой мощной сериализацией всего. Ну, скажем, 30 минут. На 10 процентах ассетов в игре.&lt;br /&gt;&lt;br /&gt;Шоколадно? Да, только предполагается, что человек по жизни отконнекчен от материнской базы данных. У него есть опорная база, которая представляет собой срез материнской базы данных. И рабочая база данных. Когда человек хочет залить свои изменения, волшебным образом считается diff между опорной базой данных и рабочей. И применяется к материнской базе данных. Ух, как круто! Представляете, как считать diff в условиях того, что&lt;br /&gt;&lt;br /&gt;a) схема базы постоянно меняется.&lt;br /&gt;b) объекты имеют интовые идентификаторы, которые генерируются децентрализованно. И постоянно конфликтуют.&lt;br /&gt;&lt;br /&gt;Сюда надо добавить такие мелочи вроде концептуального отличия std::vector от неупорядоченной коллекции, которой представлены массивы в SQL базе.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Сюда добавить то, что бинарные файлы хранятся таки не как блобы, а как файлики на диске. И их тоже надо синхронизировать.&lt;br /&gt;&lt;br /&gt;Зачем такое надо? Говорили, что надо аутсорсерам. Да вот только заводить игровые ассеты аутсорсеры не будут никогда,&lt;br /&gt;выложат готовые майские сцены и текстуры на ftp&amp;nbsp;- и апгемахт. А абстракция для карты как файлика на диске перебивает абстракцию 100+ записей в 100+ табличках огромной базы данных, hardwired by keys.&lt;br /&gt;&lt;br /&gt;Стоит ли говорить, что когда rate чекинов в эту базу данных повышался до 10 в день, то все переставало работать? Центральная база раздалбывалась в хлам, а у&amp;nbsp;клиентов ( которые ждали очереди на заливку своего diff часами ) тупо горело рабочее время.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Лежал я в постели и вспоминал такое. Думалось, что Large Scale Design - искусство. И что для программиста необходимо чувство a&apos;la музыкальный слух. Чтобы стукнуть камертоном по концепции - и слышать. Отзовется она нежным звонким звуком или станет надтреснуто дребезжать.&lt;br /&gt;&lt;br /&gt;Еще я ненавижу общие концепции. Когда вроде умные люди спрашивают &quot;а подумай, как расширить свой код, мы его может заюзаем&quot; - я плююсь.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
  <comments>http://ironpeter.livejournal.com/5726.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>40</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/5539.html</guid>
  <pubDate>Fri, 15 Dec 2006 09:30:14 GMT</pubDate>
  <title>Наш человек на Олимпе.</title>
  <link>http://ironpeter.livejournal.com/5539.html</link>
  <description>Вот, голосование идет.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://community.livejournal.com/rykov_premia/9040.html&quot;&gt;http://community.livejournal.com/rykov_premia/9040.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Голосуйте за Руслана, он осознал, что код - это всего лишь застывшая музыка. Не более, но и не менее. Музыку надо уметь слушать, это сложно.&lt;br /&gt;&lt;br /&gt;И дело не в пунктах стандарта С++, дело в ясном созерцании и абсолютном музыкальном слухе.&lt;br /&gt;&lt;br /&gt;Пусть на Олимпе будет он.</description>
  <comments>http://ironpeter.livejournal.com/5539.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/5284.html</guid>
  <pubDate>Thu, 14 Dec 2006 12:54:36 GMT</pubDate>
  <title>Корпоративная вечеринка и судьбы русской интеллигенции</title>
  <link>http://ironpeter.livejournal.com/5284.html</link>
  <description>Вчера была устроена вечеринка по случаю десятилетия компании Нивал. Устроена в длинном как сосика подвале, замаскированном под ночной клуб. В подвале было очень некомфортно. По мозгам била музыка, людей набилось как сельдей в бочке, жратвы - кукиш. Голые девочки ( и полуголые мальчики в рваной джинсе - на любителя ) радовали взгляд, но не настолько, чтобы оставаться на празднике. &lt;br /&gt;&lt;br /&gt;Шел из клуба, весь рефлексировал ( как и положено русскому интеллигенту в пятом поколении ). Ах, как плохо устроили вечеринку! Смаковал, как буду повествовать в своем ЖЖ об отвратительной корпоративной вечеринке. Как расскажу всему миру про непотребство.&lt;br /&gt;&lt;br /&gt;В метро - инвалид без рук, он ходит между по вагонам, побирается. Вышел на перрон, попросил меня набрать ему номер на сотовом и приложить ему к уху ( рук нету, без них с телефоном не управишься ). Я минут пять понабирал номера, потыкал по клавишам.&lt;br /&gt;&lt;br /&gt;Дошло, насколько мелочно мое возмущение и насколько жизнь прекрасна.&lt;br /&gt;&lt;br /&gt;Вот так вот.</description>
  <comments>http://ironpeter.livejournal.com/5284.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>1</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/4928.html</guid>
  <pubDate>Mon, 11 Dec 2006 10:06:48 GMT</pubDate>
  <title>Гламурные программисты</title>
  <link>http://ironpeter.livejournal.com/4928.html</link>
  <description>Обсуждали программиста X, я присутствовал и слушал. Говорили, что программист X чрезвычайно гламурен. Распиарен - это раз, вхож в разные программистские тусовки - это два, ко всем своим достоинствам пишет на Джаве - это три, все его хотят и хедхантят - это четыре.&lt;br /&gt;&lt;br /&gt;Смотрел на себя, оценивал гламурность. С ужасом ощупывал костюм и сорочку, купленные накануне в гламурном магазине &quot;Эстет&quot;. Параллельно думал страшные мысли, что не пойду со всеми есть еду из пластиковых коробочек, а, обратно, пойду пижонить в кафешку-ресторан &quot;Фантоцци&quot;. Думал разное, можно ли считать #ff гламурной тусовкой. &lt;br /&gt;&lt;br /&gt;Однако, я пока не пишу на Джаве! Я не совсем потерян и гламурен, черт побери!</description>
  <comments>http://ironpeter.livejournal.com/4928.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>18</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/4730.html</guid>
  <pubDate>Fri, 27 Oct 2006 12:22:18 GMT</pubDate>
  <title>Выйти из тени.</title>
  <link>http://ironpeter.livejournal.com/4730.html</link>
  <description>Нынче я работаю в Нивал Онлайн.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.dtf.ru/news/read.php?id=42716&quot;&gt;http://www.dtf.ru/news/read.php?id=42716&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Вот сижу и вижу, как эти 20 миллионов по справедливости делят между программистами, дизайнерами и художниками... Хочу уже свою долю.&lt;br /&gt;&lt;br /&gt;Радует, что обещают дать писать тек. Надо будет взять исходники старого корпоративного движка и предать их очистительному пламени.  Обнаружил, что эти идиотские исходники ассоциируются с конкретными людьми. Надо себя бороть и не отождествлять. Что очень сложно.</description>
  <comments>http://ironpeter.livejournal.com/4730.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>17</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/4575.html</guid>
  <pubDate>Tue, 03 Oct 2006 07:22:46 GMT</pubDate>
  <title>Пиджак +5 shadow damage</title>
  <link>http://ironpeter.livejournal.com/4575.html</link>
  <description>Играл в ВОВ, ходил в DeadMines. Нарулил себе синюю рубашку и синюю палку &lt;a href=&quot;http://www.thottbot.com/?i=4815&quot;&gt;http://www.thottbot.com/?i=4815&lt;/a&gt;. Палка сама с красным концом - такой кристалл на тонких ножках в навершии. Абсолютно неэргономичная конструкция, непонятно, как ей можно тыкать врага - каменюка должен сразу выпасть. Однако тыкать можно, и врагу больно.&lt;br /&gt;&lt;br /&gt;Думал по дороге на работу о разных игровых условностях. Взял в руки палку - и опа! Стал круче. Интеллект поднялся и дух воспрял. И выносливости наросло ( на целых пять условных единиц ). Думалось мне, что в жизни такого не бывает.&lt;br /&gt;&lt;br /&gt;Однако, пришел на работу, сижу, тыкаю пальцами в клавиши. Тут надо сказать, что хожу я на работу в костюме, а все остальные программисты кто в чем. Подходит новый в Нивале менеджер, просит чтобы я &quot;проставил у своих людей опоздания&quot;. Я объяснил, что проставлять опоздания не входит в мои профессиональные обязанности.  &lt;br /&gt;&lt;br /&gt;Так что хорошая одежда рулит в обоих мирах. Пиджак +5 shadow damage.</description>
  <comments>http://ironpeter.livejournal.com/4575.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>14</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/4338.html</guid>
  <pubDate>Wed, 20 Sep 2006 15:44:42 GMT</pubDate>
  <title>Про любовь</title>
  <link>http://ironpeter.livejournal.com/4338.html</link>
  <description>Дело было в Вестфолле, в минутах полета на грифоне от людской твердыни. &lt;br /&gt;&lt;br /&gt;Его звали BETEPOK, он был орком-шаманом 60 уровня; в наплечниках его доспеха бились живые молнии. Он был элитой Орды.  Ее звали... не помню как, да и не важно это. Она была человеком; люди - силы Альянса, Альянс враждебен Орде. &lt;br /&gt;&lt;br /&gt;Она была босая и в длинных одеждах. Он ставил на землю четыре тотема ( тотем земли, тотем огня, тотем воды и тотем воздуха ) по вершинам квадрата и садился на землю в центре. А она танцевала для него.&lt;br /&gt;&lt;br /&gt;Пришли двое. Один был быстр, как красная молния. Второй соткался прямо из тени и атаковал орка со спины. Оба были 60 уровня. Все произошло быстро, и ее смех звучал как колокольчик.&lt;br /&gt;&lt;br /&gt;&quot;Нубы! Нажрались химии и вдвоем одного одолеть не смогли! Он вас сквозь натурпротекты убил!&quot;&lt;br /&gt;&lt;br /&gt;Потом началась заваруха и стальной кулак Альянса таки раздавил врага. Одинокого орка-шамана 60 уровня. &lt;br /&gt;&lt;br /&gt;Она плакала над его трупом, над погасшими наплечниками. &lt;br /&gt;&lt;br /&gt;А я, ворлок 19 уровня, думал про то, что игра - это почти жизнь.</description>
  <comments>http://ironpeter.livejournal.com/4338.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>6</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/4047.html</guid>
  <pubDate>Fri, 01 Sep 2006 12:06:03 GMT</pubDate>
  <title>Серебряная пуля для кабана</title>
  <link>http://ironpeter.livejournal.com/4047.html</link>
  <description>Присутствовал на собеседовании, задавал простые вопросы.&lt;br /&gt;&lt;br /&gt;В голове созрела мега-задача, которой можно свалить кабана.&lt;br /&gt;&lt;br /&gt;Вот она - в трехмерном пространстве есть набор выпуклых полигонов, надо определить, есть ли прямая, пересекающая каждый. В других терминах - надо определить, блокирует ли данный набор порталов видимость полностью.&lt;br /&gt;&lt;br /&gt;Интересно, кто думает, что знает решение?</description>
  <comments>http://ironpeter.livejournal.com/4047.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>51</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/3636.html</guid>
  <pubDate>Thu, 31 Aug 2006 09:25:03 GMT</pubDate>
  <title>Последний день лета</title>
  <link>http://ironpeter.livejournal.com/3636.html</link>
  <description>Затем, что дни для нас —&lt;br /&gt;ничто. Всего лишь&lt;br /&gt;ничто. Их не приколешь,&lt;br /&gt;и пищей глаз&lt;br /&gt;не сделаешь: они&lt;br /&gt;на фоне белом,&lt;br /&gt;не обладая телом,&lt;br /&gt;незримы.</description>
  <comments>http://ironpeter.livejournal.com/3636.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>0</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/3345.html</guid>
  <pubDate>Mon, 03 Jul 2006 07:30:24 GMT</pubDate>
  <title>прекрасное в программировании</title>
  <link>http://ironpeter.livejournal.com/3345.html</link>
  <description>Прекрасно, когда функции называются маленькими_буквами_с_подчеркиваниями, ясно и внятно, например: calc_distance_or_return_if_greater_than_treshold.&lt;br /&gt;&lt;br /&gt;Прекрасно как бы ненароком бросить взгляд на ассемблерный листинг от Intel C Compiler и краем глаза увидеть россыпь parallel scalar SSE команд. &lt;br /&gt;&lt;br /&gt;Прекрасны даже строки std::vector&lt;blah-blah-blah&gt; в коде. Мимолетное чувство радости охватывает тебя в тот момент, когда наводишь указатель мыши на них. Ах, как приятно нажать в этот момент на backspace!&lt;br /&gt;&lt;br /&gt;Прекрасны юнит-тесты, которые пройдены модулем.&lt;br /&gt;&lt;br /&gt;Но прекраснее всего commit в SVN на машине с RAID0 массивом. Клик мыши, треск дисков на мгновения - и тишина.</description>
  <comments>http://ironpeter.livejournal.com/3345.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>13</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/3218.html</guid>
  <pubDate>Mon, 26 Jun 2006 17:43:48 GMT</pubDate>
  <title>Об общем и частном</title>
  <link>http://ironpeter.livejournal.com/3218.html</link>
  <description>Вот ехал в метро и думал  про &lt;a href=&quot;http://boris-batkin.livejournal.com/8847.html?nc=8&quot;&gt;http://boris-batkin.livejournal.com/8847.html?nc=8&lt;/a&gt; . Реакция на отрывок &quot;...то таки поправить в другом...&quot; забавна. Забавна тем, что из всего русско-программистского ЖЖ откликнулись два моих товарища по работе и откликнулись на пункт минимального интереса.&lt;br /&gt;&lt;br /&gt;В свое время разговаривал с другим товарищем по работе, пили чай. Я рассказывал про то, как присутствовал на собеседовании. Посетовал, что собеседуемый не смог написать на asm на бумажке критическую секцию своими руками и как-то не особо зажег на той же бумажке скиннингом на HLSL. Товарищ по работе прослушал, а потом сказал: &quot;Это еще что, я вот собеседовал и собеседуемый не смог назвать ни одного Способа Организации Сцены&quot;. Последние три слова были явно именованы с большой буквы. Я подавился чаем - срочно стал соображать, что за Способ Организации Сцены, именованный с Больших Букв. Спросил, ибо я нахальный и не стесняюсь повышать свои знания. Оказалось, что правильный ответ &quot;octree&quot; и еще что-то, что именно, я забыл. Нет, не то чтобы я не знал это слово, но было оно на краю сознания. У меня сразу возникли ассоциации: &quot;Маргинальное Ускорение Функции FrustrumCull(...)&quot; и &quot;Большие Проблемы С MoveUnit( const CVec3 &amp;vPos )&quot;. Мелькнули и исчезли на краю сознания. Второй Способ Организации Сцены у меня вызвал еще меньше ассоциаций, его я даже не запомнил. Продолжали пить чай.&lt;br /&gt;&lt;br /&gt;Думал я так шибко, что проехал Китай-Город, пришлось сделать RollBack на одну остановку.</description>
  <comments>http://ironpeter.livejournal.com/3218.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>26</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/2925.html</guid>
  <pubDate>Sun, 25 Jun 2006 10:09:46 GMT</pubDate>
  <title>Шопен, прелюдия 24</title>
  <link>http://ironpeter.livejournal.com/2925.html</link>
  <description>Слушал &lt;a href=&quot;http://classic.chubrik.ru/Chopin/Prel_Argerich.html&quot;&gt;http://classic.chubrik.ru/Chopin/Prel_Argerich.html&lt;/a&gt; , 24 прелюдию. Создалось ощущение, что исполнитель адски мажет. В конце первой фразы, когда шестнадцатой играет си-бемоль перед ударной ля.&lt;br /&gt;&lt;br /&gt;Скачал &quot;сорцы&quot; &lt;a href=&quot;http://www.sheetmusicarchive.net/compositions_b/pre28_24.pdf&quot;&gt;http://www.sheetmusicarchive.net/compositions_b/pre28_24.pdf&lt;/a&gt; Нет, сука, все правильно. И как у Рубинштейна получалось не акцентировать эту самую си-бемоль, которая ни к селу ни к городу? &lt;br /&gt;&lt;br /&gt;После перерыва в год сел за фортепиано, решил сыграть сам. Получил адское разочарование. Со слуха кажется, что вещь простая. Левая рука тихонько переливает шестнадцатые. Правая ведет мелодию, простую, как &quot;Мурка&quot;. А на практике - хуя. Левой надо в адском темпе с пятого на первый палец летать через полторы октавы. И не акцентировать, мягко. А правая взрывается шопеновскими проигрышами по всей клавиатуре up down. Я в таком темпе не могу. &lt;br /&gt;&lt;br /&gt;Сколько же надо тренировать пальцы, чтобы играть эту, несложную с первого взгляда вещь? Или вот просто так, нахаляву кому-то дается? От Бога? Как Паганини, который якобы по причине особой болезни суставов пальцев мог феерически играть? Или надо всего лишь по 6 часов играть гаммы? Каждый день, 20 лет. В духе тренировок восточных монахов. &lt;br /&gt;&lt;br /&gt;Думаю, что от Бога.</description>
  <comments>http://ironpeter.livejournal.com/2925.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>20</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/2590.html</guid>
  <pubDate>Thu, 08 Jun 2006 11:54:41 GMT</pubDate>
  <title>Послеобеденное расслабленное</title>
  <link>http://ironpeter.livejournal.com/2590.html</link>
  <description>Рядом с Нивалом есть торговый комплекс &quot;Пятая Авеню&quot; ( оказывается, что Авеню - это она ). Поскольку нам либерализовали услуги питания, то пошел кушать туды.&lt;br /&gt;&lt;br /&gt;Итальянская кафешка &quot;Фантоцци&quot;. Кафешку от ресторана отличить легко, кафешка женского рода, ресторан - мужского. В кафешке официантки, в ресторане - официанты. Так вот, в &quot;Фантоцци&quot; большинство персонала - девушки, но есть и пара официантов, так что есть стремление от к.&lt;br /&gt;&lt;br /&gt;Взял премилую &quot;Груду цыпленка по-милански&quot; - куриное филе с кэрри, ломтиками сладкого перца и ананаса. Продукт крайне рулит за счет грамотного подбора специй. Белого вина в розлив не было, пришлось взять ром, 40 грамм. Ром ординарный, грубоватый. Закончилось все кофе. Сверху пенка, пенка посыпана корицей - вкусно. Чизкейк с ванильным соусом и клубничными разводами по тарелке. Клубничные разводы пахли синтетикой, это минус. Общая оценка 4+.&lt;br /&gt;&lt;br /&gt;Вот, работать хочется.&lt;br /&gt;&lt;br /&gt;rev 1.1: Грудка цыпленка, а не груда.</description>
  <comments>http://ironpeter.livejournal.com/2590.html</comments>
  <lj:music>Шопен, Фантазия-Экспромт, до-диез минор.</lj:music>
  <media:title type="plain">Шопен, Фантазия-Экспромт, до-диез минор.</media:title>
  <lj:mood>working</lj:mood>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/2400.html</guid>
  <pubDate>Wed, 07 Jun 2006 09:11:02 GMT</pubDate>
  <title>Модный тренд.</title>
  <link>http://ironpeter.livejournal.com/2400.html</link>
  <description>С прекрасно-художественной точки зрения речь пойдет про ZBrush, который привносит в 3D моделирование классические скульптурные техники. Создаем крупную форму, общую топологию, рисуем поверх кисточкой. Мнем, вытягиваем по-разному, красим. Разные кисточки - разная фактура. &lt;br /&gt;&lt;br /&gt;С точки зрения реализации - сначала делается экстремально lo-poly моделька. Делается ей subdivision, получается почти регулярная сетка, по которой совсем легко рисовать кисточкой. Храним смещения.&lt;br /&gt;&lt;br /&gt;Вот посмотрим, что можно делать с такой моделькой. Во-первых, результирующая модель имеет очень простую топологию, нет проблемы строить уровни детализации. Во-вторых, нет проблемы прикручивать адаптивные алгоритмы тесселяции в стиле ROAM, ибо модель состоит из кусков с регулярной топологией. Считать разные уровни детализации, морфить между ними - не проблема. Опять же сжимается информация на раз - сетка состоит из регулярных кусков, а сжимать 2D массивы лихо надрочились. В том числе и тупо, см. DXTN алгоритмы сжатия текстур. Легкие данные - легкий стримминг, общность подхода: от ландшафта, крупных объектов вроде скал, пещер, утесов до монстров. Вот додумаются в ZBrush ( или аналоге ) ландшафт моделить - совсем круто будет. Как обычно, все упирается в конвенциональные средства редактирования.&lt;br /&gt;&lt;br /&gt;Имеется куча академических работ, посвященных кластеризации и multiresolution анализу произвольных мешей. Как эту бедную нерегулярную сетку на куски рубят, потом симплифицируют куски, потом на стыках мучаются - до реализации обычно не доходит, но диссертации защищаются регулярно. Ясно дело, что никто на практике использовать это не будет. Как не жгут академические работы по multiresolution анализу, и как зажигает подход от ZBrush, который удобен и прост.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Спускаясь к железу - все становится просто отвратительно. Плавающая тесселяция, которая есть на XENOS и которой нигде больше нету и не будет; могучие SPU, которые могут считать на лету все что хошь, хошь тесселяцию; PC с перспективами странного интерфейса DX10. Прямо жить хочется. Мне кажется, что тема будет модной.&lt;br /&gt;&lt;br /&gt;И, как обычно, ничего нового. Вспомните, когда были сказаны слова &quot;npatches&quot; и &quot;vertex displacement&quot;.</description>
  <comments>http://ironpeter.livejournal.com/2400.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>4</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/2068.html</guid>
  <pubDate>Wed, 31 May 2006 08:38:00 GMT</pubDate>
  <title>Депрессивное постаттестационное.</title>
  <link>http://ironpeter.livejournal.com/2068.html</link>
  <description>Прошла аттестация. Аттестовали, зарплату подняли, назвали нужным. Конечно, пожурили так отечески. Что не дело знать шейдеры ps 3.0, несолидно это. Лучше бы изучил корпоративную систему UI. Она страх какая сложная, сама мыслит, а внутре у ней неонка. &lt;br /&gt;&lt;br /&gt;Настроение депрессивное - специально ходил по Нивалу, смотрел, кто зажигает. Никто не зажигает. Далее - совершенно абстрактно.&lt;br /&gt;&lt;br /&gt;Мега-дизайнер с супер-идеей игры. Менеджер говорит: &quot;Издателям не нужны новые жанры и новые игры, давайте купим Ай-Пи. И будем делать игру про э... Человека-Паука, это очень крутой Ай-Пи. Давайте, дизайните пропозал, через неделю дедлайн.&quot; &lt;br /&gt;&lt;br /&gt;Программист хочет писать low level, ему говорят: &quot;Мы не фигней занимаемся, а делаем игру про Человека-Паука! Посему будем делать игру про человека-паука на Движке За Миллион, а ты скрипты попишешь.&quot;&lt;br /&gt;&lt;br /&gt;Лид-программист перекладывает бумажки, спокойный, как Будда. Ему наплевать на технологии, процессы, производимый продукт про Человека-Паука, он перекладывает бумажки. Формализованный подход. Все задачи про Человека-Паука должны быть разбиты на подзаздачи ( не больше 2 и не меньше 1 дня ) и положены в формалин. &lt;br /&gt;&lt;br /&gt;На ff возникло отличное новое слово: &quot;Слабак&quot;. Не просто мудак. А слабак. Который не верит, что может что-то сделать. И никто не верит в то, что он может что-то сделать. Сидит, делает заформализованные задачи. Рожденный ползать. Состояние души. Есть чужая Ай-Пи, есть миддлварь, еще можно совсем сузиться, уволить программистов и поаутсорсить арт. Зачем жечь, убеждать что могу, потом напряжением всех сил делать - нафиг оно?  &lt;br /&gt;&lt;br /&gt;И совсем с другой стороны - посмотрим на постсоветское, на вечное. На Сталкера. Эх, слева бесы, справа бесы.</description>
  <comments>http://ironpeter.livejournal.com/2068.html</comments>
  <lj:music>Где-то кони пляшут в такт, нехотя и плавно</lj:music>
  <media:title type="plain">Где-то кони пляшут в такт, нехотя и плавно</media:title>
  <lj:security>public</lj:security>
  <lj:reply-count>41</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/1892.html</guid>
  <pubDate>Mon, 15 May 2006 15:23:48 GMT</pubDate>
  <title>Агейская железка</title>
  <link>http://ironpeter.livejournal.com/1892.html</link>
  <description>Получил от начальства агейскую железку в черной коробке, внутри уложенной розовым поролоном. Выглядит загадочно. Сама железка в компьютер воткнулась, примеры запускаются и работают. По первым впечатлениям - бутылочное горлышко пополам в OpenGL рендеринге в стиле glutSolidCube, пополам в физике. &lt;br /&gt;&lt;br /&gt;Ясное дело, что начальство не само железку скрафтило - спасибо Ageia за их агрессивный менеджмент и любовь к девелоперам.&lt;br /&gt;&lt;br /&gt;Есть еще API. Собственные размышления на тему std::vector, vec3, quat, ray, plane прилагаются, имеется специальный класс для колеса. Все как в лучших домах Лондона. Имеются виртуальные функции - и не просто из пустых понтов, а настоящий ООП, все наследуется и инкапуслируется со страшной силой. По умолчанию объект имеет отрицательную массу, и остается верить документации, что данная масса будет вычислена автоматически.&lt;br /&gt;&lt;br /&gt;Вот вспоминаю OpenGL, разные glVertex3vf(). И нету никаких собственных векторов, и нету труевого ООП. Однако, пальцы сами летают и программу пишут. А тут - хуя. Зачем такой API, когда пишешь, а в кончиках пальцев нет удовольствия?</description>
  <comments>http://ironpeter.livejournal.com/1892.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>27</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/1592.html</guid>
  <pubDate>Wed, 10 May 2006 07:19:35 GMT</pubDate>
  <title>Разное.</title>
  <link>http://ironpeter.livejournal.com/1592.html</link>
  <description>После завершения героических битв начальство отпустило всех в отпуск. С 1 по 10 мая.&lt;br /&gt;&lt;br /&gt;В связи с чем спал 10 дней. Лицо болит от подушки, да.&lt;br /&gt;&lt;br /&gt;Из запоминающихся событий - решил реализовать в себе потенцию цветовода, купил вот такой дендр:&lt;br /&gt;&lt;br /&gt;&lt;img src=&quot;http://forum.flo.com.ua/album_pic.php?pic_id=826&quot; /&gt;&lt;br /&gt;&lt;br /&gt;Обсуждения&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://flo.com.ua/forum/viewtopic.php?p=18975&amp;sid=07d70a4f9eb4a56761cd2a3533637bb1&quot;&gt;http://flo.com.ua/forum/viewtopic.php?p=18975&amp;sid=07d70a4f9eb4a56761cd2a3533637bb1&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;К дендру купил фотоаппарат Canon A620. Из всех фичей больше всего удивило, что при портретной или ландшафтной съемке фотик автоматически переворачивает картинку на 90&apos;. Вот ведь сука, как узнает!&lt;br /&gt;&lt;br /&gt;Посмотрел х.ф. &quot;Охота на пиранью&quot;. Много смеялся. Битва Главного Героя с Мужиком В Каске порадовала. Ну, это нормально.&lt;br /&gt;&lt;br /&gt;А логин на ЖЖ у меня только с работы. Чем надеюсь избежать ЖЖ - аддикции.</description>
  <comments>http://ironpeter.livejournal.com/1592.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>7</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/1429.html</guid>
  <pubDate>Thu, 20 Apr 2006 11:58:19 GMT</pubDate>
  <title>Пятые герои</title>
  <link>http://ironpeter.livejournal.com/1429.html</link>
  <description>А вот вышли на золото. Начальство написало на форуме, значит информация открыта.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://forums.ag.ru/?board=heroes&amp;action=display&amp;s=0&amp;num=1116344234&amp;start=175&quot;&gt;http://forums.ag.ru/?board=heroes&amp;action=display&amp;s=0&amp;num=1116344234&amp;start=175&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Ну что можно сказать? Полтора года моей жизни промелькнули как легкий сон. Было разное, много героических битв. Но, черт побери, Heroes 5 gone gold! Есть повод откупорить шампанскую бутылку.</description>
  <comments>http://ironpeter.livejournal.com/1429.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>32</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/1095.html</guid>
  <pubDate>Tue, 18 Apr 2006 08:04:18 GMT</pubDate>
  <title>Чье кун-фу самое сильное</title>
  <link>http://ironpeter.livejournal.com/1095.html</link>
  <description>Семен &lt;a href=&quot;http://sim0nsays.livejournal.com&quot;&gt;http://sim0nsays.livejournal.com&lt;/a&gt; тут давече писал про стиль программирования, когда код пишется как бы сам.&lt;br /&gt;&lt;br /&gt;Между сборками Heroes 5 Gold Master закачал я последний билд &lt;a href=&quot;http://sourceforge.net/projects/collada-dom/&quot;&gt;http://sourceforge.net/projects/collada-dom/&lt;/a&gt; Проект интересный, архинужный, почему полезный и зачем нужный - объяснять не буду. Взял я значит последний билд, выбрал там пример по загрузке анимации, запустил.&lt;br /&gt;&lt;br /&gt;GPF. Смотрим на код.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.everfall.com/paste/id.php?bd1m51dmolfz&quot;&gt;http://www.everfall.com/paste/id.php?bd1m51dmolfz&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Батюшки, так Name это переменная класса, char *. Как-то нездорово ее в cout совать. Комментируем ошибку, смотрим что дальше.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.everfall.com/paste/id.php?wjenglhhz289&quot;&gt;http://www.everfall.com/paste/id.php?wjenglhhz289&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Еще один GPF. Угадайте, почему? Если не угадали, то посмотрите на определение(я) LdaeElement&lt;br /&gt;&lt;br /&gt;Правим, находим еще один GPF, он дуален первому. Скрестили пальцы, натравили файлик на колладовский dae файл с анимацией. Опять не работает.&lt;br /&gt;&lt;br /&gt;&lt;a href=&quot;http://www.everfall.com/paste/id.php?8bwbnrzvfqy5&quot;&gt;http://www.everfall.com/paste/id.php?8bwbnrzvfqy5&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;nElements случился нулем. i&amp;gt;= nElements всегда true. &lt;br /&gt;&lt;br /&gt;Спросил важного человека, чье имя слишком известно, чтобы здесь упоминать, возмутился: &quot;Неужели эти ****** из Сони не хотят предоставить удобные и безбажные тулзы?&quot; Получил ответ: &quot;А зачем?&quot;. &quot;Ну как, чтобы удобнее писать, чтобы снизить ценз вхождения в программирование под PS3...&quot; &quot;Гм, а зачем?&quot;&lt;br /&gt;&lt;br /&gt;В этот момент я испытали просветление. Тапком по голове, да.</description>
  <comments>http://ironpeter.livejournal.com/1095.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>22</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/825.html</guid>
  <pubDate>Thu, 06 Apr 2006 14:16:47 GMT</pubDate>
  <title>Дао программирования, пп 7.1-7.2</title>
  <link>http://ironpeter.livejournal.com/825.html</link>
  <description>Всю неделю решалось, пойдут ли программисты Нивала на КРИ в пятницу. Пойдут или не пойдут, пойдут или не пойдут. Наверное, снаружи любопытно смотреть на коловращение писем, указаний и инструкций, но когда ты там, внутри коловращения, весь в боевой раскраске  - то вовсе не любопытно. Вот будьте умнее - дождитесь, когда проблема разрешится сама, постойте в сторонке ( согласно Дао ). Не надо кастовать на себя Adrenalin Rush и бросаться в кучу-малу.&lt;br /&gt;&lt;br /&gt;Вроде решилось, вроде программисты Нивала пойдут на КРИ в пятницу. Будет круглый стол, будут встречи, будет все. До встречи на КРИ.&lt;br /&gt;&lt;br /&gt;Опять будет похмелье, чччччерт!</description>
  <comments>http://ironpeter.livejournal.com/825.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>3</lj:reply-count>
</item>
<item>
  <guid isPermaLink='true'>http://ironpeter.livejournal.com/691.html</guid>
  <pubDate>Fri, 31 Mar 2006 18:52:48 GMT</pubDate>
  <title>Школа имен</title>
  <link>http://ironpeter.livejournal.com/691.html</link>
  <description>Была такая китайская школа философии, минцзя. Как обычно, исследовали связь предметов и имен. Про отца-основателя ( одного из отцов ) современные ему древние китайцы говорили: &lt;br /&gt;&lt;br /&gt;&quot;Хуэй Ши был очень разносторонен и имел пять повозок книг. Его учение было противоречивым и путаным, а его слова не попадали в цель&quot;. &lt;br /&gt;&lt;br /&gt;В переводе на русский язык случилось трагическое наебалово, замечательное древнекитайское имя испортили. Вовсе ни разу ни Хуэй его звали, а Хуй.&lt;br /&gt;&lt;br /&gt;Эта преамбула должна подготовить вас к маленькому креативу про сферические гармоники. &lt;br /&gt;&lt;br /&gt;Про сабж подробно рассказано допустим вот тут:  &lt;a href=&quot;http://lnfm1.sai.msu.su/grav/russian/lecture/tfe/node5.html&quot;&gt;http://lnfm1.sai.msu.su/grav/russian/lecture/tfe/node5.html&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Из обстоятельного рассказа мы узнаем, что:&lt;br /&gt;&lt;br /&gt;&quot;Свойство ортогональности сферических функций делает их незаменимыми для аналитического представления физического поля, рельефа или других величин, заданных в виде карты на сферической поверхности&quot;.&lt;br /&gt;&lt;br /&gt;Не-за-ме-ни-мы-ми. Окончив математический факультет и вооружившися необходимыми знаниями о незаменимости, можно легко получить грант MicroSoft и присунуть эти замечательные сферические гармоники в DirectX SDK, дабы в аналитическом виде хранить зависимость освещения в точке от направления на источник света. А потом пошло и поехало - только ленивый программист трехмерной графики не выучит три буквы SHM, ибо козырно и модно. &lt;br /&gt;&lt;br /&gt;Какие есть полиномы на сфере степени не выше 1? Тождественная единица, функция x, функция y, функция z. Вот возьмем мы точку на поверхности, есть две полусферы, верхняя и нижняя. Возьмем функцию, которая единица на верхней и минус единица на нижней полусфере. И возьмем разложение этой замечательной функции по нашей системе ( 1, x, y, z ). Что получится? Правильно, первый коэффициент нуль, остальные соответствуют x, y, z компонентам нормали к поверхности. Как считать значение проинтерполированной функции? Конечно, dot с нормалью.&lt;br /&gt;&lt;br /&gt;Каждый программист трехмерной графики, который реализовывал диффузное освещение как dot( light, normal ), может смело писать в своем резюме, что он реализовывал освещение с помощью факторизации BRDF функции по сферическим гармоникам первой степени. Такая запись повысит его оклад как минимум на 100-200$ месячно в условиях современного рынка труда в Москве.&lt;br /&gt;&lt;br /&gt;Итак, у нас есть объект, весь сложный из себя. Будем помещать источник света в разные точки на сфере огромного радиуса и смотреть, как освещается объект. Со всевозможными подповерхностными и обычными отражениями - преломлениями. И будем в каждой точке раскладывать освещенность по нашей волшебной системе ( 1, x, y, z ), как параметр от положения источника света на сфере. Можно вычесть прямое освещение, которое легко считается отдельно. Идея тривиальная? Да. Этой тривиальной идее есть нетривиальное имя. Даже несколько. Ambient Occlusion Map. Или Bent Normal Lighting. Существенно разные имена.&lt;br /&gt;&lt;br /&gt;Кто-то выдумал, что можно хранить в свободном четвертом канале текстуры нормалей угол раствора конуса, который хорошо описывает локальное поведение поверхности. Bump Self Shadowing. Описанное выше яйцо, вид сбоку. &lt;br /&gt;&lt;br /&gt;Едем дальше. Спрашивается, почему не раскладывать что-либо по полиномам второй степени на сфере? Вот они:&lt;br /&gt;&lt;br /&gt;x, y, z&lt;br /&gt;x * y, y * z, z * x&lt;br /&gt;x * x, y * y, z * z&lt;br /&gt;&lt;br /&gt;Единицу я не пишу, так как она есть суть x * x + y * y + z * z &lt;br /&gt;&lt;br /&gt;Приятный такой базис, значение в нем считается на раз-два-три. Раскладывать по нему неутомительно и требует знаний в объемах первого курса ВУЗа. Взяли, посчитали, зашили в трех текстурах. Или сохранили повершинно. &lt;br /&gt;&lt;br /&gt;Наслаждаемся, пользуемся. Вот только будет немодно, ибо не сферические гармоники. Скажешь: &quot;Использую полиномы второй степени на сфере.&quot; Переспросят: &quot;Сферические гармоники?&quot; Ответишь: &quot;Какие такие гармоники? Не знаю никаких гармоник!&quot; Взор вопрошающего потухнет, ибо нынче только ламеры в 3D графике не знают, что такое сферические гармоники.&lt;br /&gt;&lt;br /&gt;Едем дальше. Допустим, наш источник света не просто летает по сфере, а эдак свободно плавает в пространстве вокруг нашей освещаемой модельки.&lt;br /&gt;&lt;br /&gt;Есть замечательные базисные функции ( 1, x, y, z ) на сфере. А еще есть R - расстояние до источника света. Ну и отличные функции, которые убывают на бесконечности. Скажем, exp( -R ), R * exp( -R ), R^2 * exp( -R ), R^3 * exp( -R ). Из них можно сварганить 16 коэффициентов, которые задают освещенность в зависимости от положения источника света. Наверняка, этому скоро придумают какое-то название. Или уже придумали и огребли по случаю грант от MicroSoft. &quot;Light Decomposition using Bessel Functions&quot;, или что-то в таком духе.&lt;br /&gt;&lt;br /&gt;минцзы.</description>
  <comments>http://ironpeter.livejournal.com/691.html</comments>
  <lj:security>public</lj:security>
  <lj:reply-count>8</lj:reply-count>
</item>
</channel>
</rss>
