<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
   <channel>
      <title>Hi Tech новости</title>
      <link>http://inmarketlink.biz/</link>
      <description>Lasto Blogging Engine</description>
      <language>ru</language>
      <copyright>С Бобрышев</copyright>
      <managingEditor>admin@inmarketlink.biz</managingEditor>
      <webMaster>admin@inmarketlink.biz</webMaster>
      <image>
         <title>Hi Tech новости</title>
         <url>http://inmarketlink.biz/i/lastoblog.png</url>
         <link>http://inmarketlink.biz/</link>
      </image>

      <item>
         <title>CUDA мы катимся: технология NVIDIA CUDA</title>
         <link>http://inmarketlink.biz/post_1247035996.html</link>
         <description>&lt;img src=i/p/1238747478.jpg border=0 align=left hspace=5 vspace=5&gt;
&lt;p&gt;Согласно Дарвинской теории эволюции, первая человекообразная обезьяна (если  быть точным – homo antecessor, человек-предшественник) превратилась впоследствии  в нас. Многотонные вычислительные центры с тысячью и больше радиоламп,  занимающие целые комнаты, сменились полукилограммовыми ноутами, которые, кстати,  не уступят в производительности первым. Допотопные печатные машинки превратились  в печатающие что угодно и на чем угодно (даже на теле человека)  многофункциональные устройства. Процессорные гиганты вдруг вздумали замуровать  графическое ядро в «камень». А видеокарты стали не только показывать картинку с  приемлемым FPS и качеством графики, но и производить всевозможные вычисления. Да  еще как производить! О технологии многопоточных вычислений средствами GPU, &lt;b&gt; NVIDIA CUDA&lt;/b&gt; и пойдет речь.&lt;/p&gt;

&lt;p&gt;&lt;img border="0" src="/img/410170353724832.jpg" width="450" height="212" alt="NVIDIA CUDA"&gt;&lt;/p&gt;

&lt;h2&gt;Почему GPU?&lt;/h2&gt;

&lt;p&gt;Интересно, почему всю вычислительную мощь решили переложить на графический  адаптер? Как видно, процессоры еще в моде, да и вряд ли уступят свое теплое  местечко. Но у GPU есть пара козырей в рукаве вместе с джокером, да и рукавов  хватает. Современный центральный процессор заточен под получение максимальной  производительности при обработке целочисленных данных и данных с плавающей  запятой, особо не заботясь при этом о параллельной обработке информации. В то же  время архитектура видеокарты позволяет быстро и без проблем «распараллелить»  обработку данных. С одной стороны, идет обсчет полигонов (за счет 3D-конвейера),  с другой – пиксельная обработка текстур. Видно, что происходит «слаженная  разбивка» нагрузки в ядре карты. Кроме того, работа памяти и видеопроцессора  оптимальнее, чем связка «ОЗУ-кэш-процессор». В тот момент, когда единица данных  в видеокарте начинает обрабатываться одним потоковым процессором GPU, другая  единица параллельно загружается в другой, и, в принципе, легко можно достичь  загруженности графического процессора, сравнимой с пропускной способностью шины,  однако для этого загрузка конвейеров должна осуществляться единообразно, без  всяких условных переходов и ветвлений. Центральный же процессор в силу своей  универсальности требует для своих процессорных нужд кэш, заполненный  информацией.&lt;/p&gt;

&lt;p&gt;Ученые мужи задумались насчет работы GPU в параллельных вычислениях и  математике и вывели теорию, что многие научные расчеты во многом схожи с  обработкой 3D-графики. Многие эксперты считают, что основополагающим фактором в  развитии &lt;b&gt;GPGPU&lt;/b&gt; (&lt;b&gt;General Purpose computation on GPU – универсальные  расчеты средствами видеокарты&lt;/b&gt;) стало появление в 2003 году проекта Brook GPU.&lt;/p&gt;

&lt;p&gt;Создателям проекта из Стэндфордского университета предстояло решить непростую  проблему: аппаратно и программно заставить графический адаптер производить  разноплановые вычисления. И у них это получилось. Используя универсальный язык C,  американские ученые заставили работать GPU как процессор, с поправкой на  параллельную обработку. После Brook появился целый ряд проектов по VGA-расчетам,  таких как библиотека Accelerator, библиотека Brahma, система  метапрограммирования GPU++ и другие.&lt;/p&gt;

&lt;p&gt;&lt;img border="0" src="/img/562120454678361.jpg" width="450" height="386" alt="NVIDIA CUDA"&gt;&lt;/p&gt;

&lt;h2&gt;CUDA!&lt;/h2&gt;

&lt;p&gt;Предчувствие перспективности разработки заставило &lt;b&gt;AMD&lt;/b&gt; и &lt;b&gt;NVIDIA&lt;/b&gt;  вцепиться в Brook GPU, как питбуль. Если опустить маркетинговую политику, то,  реализовав все правильно, можно закрепиться не только в графическом секторе  рынка, но и в вычислительном (посмотри на специальные вычислительные карты и  серверы &lt;b&gt;Tesla&lt;/b&gt; с сотнями мультипроцессоров), потеснив привычные всем CPU.&lt;/p&gt;

&lt;p&gt;Естественно, «повелители FPS» разошлись у камня преткновения каждый по своей  тропе, но основной принцип остался неизменным – производить вычисления  средствами GPU. И сейчас мы подробнее рассмотрим технологию «зеленых» – &lt;b&gt;CUDA&lt;/b&gt;  (&lt;b&gt;Compute Unified Device Architecture&lt;/b&gt;).&lt;/p&gt;

&lt;p&gt;Работа нашей «героини» заключается в обеспечении API, причем сразу двух.  Первый – высокоуровневый, CUDA Runtime, представляет собой функции, которые  разбиваются на более простые уровни и передаются нижнему API – CUDA Driver. Так  что фраза «высокоуровневый» применима к процессу с натяжкой. Вся соль находится  именно в драйвере, и добыть ее помогут библиотеки, любезно созданные  разработчиками &lt;b&gt;NVIDIA&lt;/b&gt;: CUBLAS (средства для математических расчетов) и  FFT (расчет посредством алгоритма Фурье). Ну что ж, перейдем к практической  части материала.&lt;/p&gt;

&lt;h2&gt;Терминология CUDA&lt;/h2&gt;

&lt;p&gt;&lt;b&gt;NVIDIA&lt;/b&gt; оперирует весьма своеобразными определениями для CUDA API. Они  отличаются от определений, применяемых для работы с центральным процессором.&lt;/p&gt; &lt;p&gt;&lt;b&gt;Поток (thread)&lt;/b&gt; – набор данных, который необходимо обработать (не  требует больших ресурсов при обработке).&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Варп (warp)&lt;/b&gt; – группа из 32 потоков. Данные обрабатываются только  варпами, следовательно варп – это минимальный объем данных.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Блок (block)&lt;/b&gt; – совокупность потоков (от 64 до 512) или совокупность  варпов (от 2 до 16).&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Сетка (grid)&lt;/b&gt; – это совокупность блоков. Такое разделение данных  применяется исключительно для повышения производительности. Так, если число  мультипроцессоров велико, то блоки будут выполняться параллельно. Если же с  картой не повезло (разработчики рекомендуют для сложных расчетов использовать  адаптер не ниже уровня GeForce 8800 GTS 320 Мб), то блоки данных обработаются  последовательно.&lt;/p&gt;

&lt;p&gt;Также NVIDIA вводит такие понятия, как &lt;b&gt;ядро (kernel)&lt;/b&gt;, &lt;b&gt;хост (host)&lt;/b&gt;  и &lt;b&gt;девайс (device)&lt;/b&gt;.&lt;/p&gt;

&lt;h2&gt;Работаем!&lt;/h2&gt;

&lt;p&gt;Для полноценной работы с CUDA нужно:&lt;/p&gt;
&lt;p&gt;1. Знать строение шейдерных ядер GPU, так как суть программирования  заключается в равномерном распределении нагрузки между ними.&lt;br&gt; 2. Уметь программировать в среде C, с учетом некоторых аспектов.&lt;/p&gt;

&lt;p&gt;Разработчики &lt;b&gt;NVIDIA&lt;/b&gt; раскрыли «внутренности» видеокарты несколько  иначе, чем мы привыкли видеть. Так что волей-неволей придется изучать все  тонкости архитектуры. Разберем строение «камня» G80 легендарной &lt;b&gt;GeForce 8800  GTX&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;Шейдерное ядро состоит из восьми TPC (Texture Processor Cluster) – кластеров  текстурных процессоров (так, у &lt;b&gt;GeForce GTX 280&lt;/b&gt; – 15 ядер, у &lt;b&gt;8800 GTS&lt;/b&gt;  их шесть, у &lt;b&gt;8600&lt;/b&gt; – четыре и т.д.). Те, в свою очередь, состоят из двух  потоковых мультипроцессоров (streaming multiprocessor – далее SM). SM (их всего  16) состоит из front end (решает задачи чтения и декодирования инструкций) и  back end (конечный вывод инструкций) конвейеров, а также восьми scalar SP (shader  processor) и двумя SFU (суперфункциональные блоки). За каждый такт (единицу  времени) front end выбирает варп и обрабатывает его. Чтобы все потоки варпа  (напомню, их 32 штуки) обработались, требуется 32/8 = 4 такта в конце конвейера.&lt;/p&gt;

&lt;p&gt; &lt;img border="0" src="/img/542246632630761.jpg" width="450" height="262" alt="NVIDIA CUDA"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Каждый мультипроцессор обладает так называемой общей памятью (shared memory).  Ее размер составляет 16 килобайт и предоставляет программисту полную свободу  действий. Распределяй как хочешь :). Shared memory обеспечивает связь потоков в  одном блоке и не предназначена для работы с пиксельными шейдерами.&lt;/p&gt;

&lt;p&gt;Также SM могут обращаться к GDDR. Для этого им «пришили» по 8 килобайт  кэш-памяти, хранящих все самое главное для работы (например, вычислительные  константы).&lt;/p&gt;

&lt;p&gt;Мультипроцессор имеет 8192 регистра. Число активных блоков не может быть  больше восьми, а число варпов – не больше 768/32 = 24. Из этого видно, что G80  может обработать максимум 32*16*24 = 12288 потоков за единицу времени. Нельзя не  учитывать эти цифры при оптимизации программы в дальнейшем (на одной чашу весов  – размер блока, на другой – количество потоков). Баланс параметров может сыграть  важную роль в дальнейшем, поэтому &lt;b&gt;NVIDIA&lt;/b&gt; рекомендует использовать блоки  со 128 или 256 потоками. Блок из 512 потоков неэффективен, так как обладает  повышенными задержками. Учитывая все тонкости строения GPU видеокарты плюс  неплохие навыки в программировании, можно создать весьма производительное  средство для параллельных вычислений. Кстати, о программировании...&lt;/p&gt;

&lt;h2&gt;Программирование&lt;/h2&gt;

&lt;p&gt;Для «творчества» вместе с CUDA требуется &lt;b&gt;видеокарта GeForce не ниже  восьмой серии&lt;/b&gt;. С официального сайта нужно скачать три программных пакета: драйвер с  поддержкой CUDA (для каждой ОС – свой), непосредственно пакет CUDA SDK (вторая  бета-версия) и дополнительные библиотеки (CUDA toolkit). Технология поддерживает  операционные системы Windows (XP и Vista), Linux и Mac OS X. Для изучения я  выбрал Vista Ultimate Edition x64 (забегая вперед, скажу, что система вела себя  просто превосходно). В момент написания этих строк актуальным для работы был  драйвер ForceWare 177.35. В качестве набора инструментов использовался  программный пакет Borland C++ 6 Builder (хотя подойдет любая среда, работающая с  языком C).&lt;/p&gt;

&lt;p&gt;&lt;img border="0" src="/img/750322817188352.jpg" width="450" height="360" alt="NVIDIA CUDA"&gt;&lt;/p&gt;

&lt;p&gt;Человеку, знающему язык, будет легко освоиться в новой среде. Требуется лишь  запомнить основные параметры. Ключевое слово _global_ (ставится перед функцией)  показывает, что функция относится к kernel (ядру). Ее будет вызывать центральный  процессор, а вся работа произойдет на GPU. Вызов _global_ требует более  конкретных деталей, а именно размер сетки, размер блока и какое ядро будет  применено. Например, строчка _global_ void saxpy_parallel&lt;&lt;&lt;X,Y&gt;&gt;&gt;, где X –  размер сетки, а Y – размер блока, задает эти параметры.&lt;/p&gt;

&lt;p&gt;Символ _device_ означает, что функцию вызовет графическое ядро, оно же  выполнит все инструкции. Эта функция располагается в памяти мультипроцессора,  следовательно, получить ее адрес невозможно. Префикс _host_ означает, что вызов  и обработка пройдут только при участии CPU. Надо учитывать, что _global_ и  _device_ не могут вызывать друг друга и не могут вызывать самих себя.&lt;/p&gt;

&lt;p&gt;Также язык для CUDA имеет ряд функций для работы с видеопамятью: cudafree  (освобождение памяти между GDDR и RAM), cudamemcpy и cudamemcpy2D (копирование  памяти между GDDR и RAM) и cudamalloc (выделение памяти).&lt;/p&gt;

&lt;p&gt;Все программные коды проходят компиляцию со стороны CUDA API. Сначала берется  код, предназначенный исключительно для центрального процессора, и подвергается  стандартной компиляции, а другой код, предназначенный для графического адаптера,  переписывается в промежуточный язык PTX (сильно напоминает ассемблер) для  выявления возможных ошибок. После всех этих «плясок» происходит окончательный  перевод (трансляция) команд в понятный для GPU/CPU язык.&lt;/p&gt;

&lt;p&gt;&lt;img border="0" src="/img/304442570677264.jpg" width="450" height="342" alt="NVIDIA CUDA"&gt;&lt;/p&gt;

&lt;h2&gt;Набор для изучения&lt;/h2&gt;

&lt;p&gt;Практически все аспекты программирования описаны в документации, идущей  вместе с драйвером и двумя приложениями, а также на сайте разработчиков. Размера  статьи не хватит, чтобы описать их (заинтересованный читатель должен приложить  малую толику стараний и изучить материал самостоятельно).&lt;/p&gt;

&lt;p&gt;Специально для новичков разработан CUDA SDK Browser. Любой желающий может  ощутить силу параллельных вычислений на своей шкуре (лучшая проверка на  стабильность – работа примеров без артефактов и вылетов). Приложение имеет  большой ряд показательных мини-программок (61 «тест»). К каждому опыту имеется  подробная документация программного кода плюс PDF-файлы. Сразу видно, что люди,  присутствующие со своими творениями в браузере, занимаются серьезной работой.  Тут же можно сравнить скорости работы процессора и видеокарты при обработке  данных. Например, сканирование многомерных массивов видеокартой &lt;b&gt;GeForce 8800  GT&lt;/b&gt; 512 Мб с блоком с 256 потоками производит за 0.17109 миллисекунды.  Технология не распознает SLI-тандемы, так что если у тебя дуэт или трио,  отключай функцию «спаривания» перед работой, иначе CUDA увидит только один  девайс. Двуядерный &lt;b&gt;AMD Athlon 64 X2&lt;/b&gt; (частота ядра 3000 МГц) тот же опыт  проходит за 2.761528 миллисекунды. Получается, что G92 более чем в 16 раз  быстрее «камня» &lt;b&gt;AMD&lt;/b&gt;! Как видишь, далеко не экстремальная система в  тандеме с нелюбимой в массах операционной системой показывает неплохие  результаты.&lt;/p&gt;

&lt;p&gt;&lt;img border="0" src="/img/164881006368043.jpg" width="450" height="408" alt="NVIDIA CUDA"&gt;&lt;/p&gt;

&lt;p&gt;Помимо браузера существует ряд полезных обществу программ. &lt;b&gt;Adobe&lt;/b&gt;  адаптировала свои продукты к новой технологии. Теперь Photoshop CS4 в полной  мере использует ресурсы графических адаптеров (необходимо скачать специальный  плагин). Такими программами, как Badaboom media converter и RapiHD можно  произвести декодирование видео в формат MPEG-2. Для обработки звука неплохо  подойдет бесплатная утилита Accelero. Количество софта, заточенного под CUDA API,  несомненно, будет расти.&lt;/p&gt;

&lt;h2&gt;А в это время…&lt;/h2&gt;

&lt;p&gt;А пока ты читаешь сей материал, трудяги из процессорных концернов  разрабатывают свои технологии по внедрению GPU в CPU. Со стороны &lt;b&gt;AMD&lt;/b&gt; все  понятно: у них есть большущий опыт, приобретенный вместе с &lt;b&gt;ATI&lt;/b&gt;.&lt;/p&gt;

&lt;p&gt;Творение «микродевайсеров», Fusion, будет состоять из нескольких ядер под  кодовым названием Bulldozer и видеочипа RV710 (Kong). Их взаимосвязь будет  осуществляться за счет улучшенной шины HyperTransport. В зависимости от  количества ядер и их частотных характеристик AMD планирует создать целую ценовую  иерархию «камней». Также планируется производить процессоры как для ноутбуков (Falcon),  так и для мультимедийных гаджетов (Bobcat). Причем именно применение технологии  в портативных устройствах будет первоначальной задачей для канадцев. С развитием  параллельных вычислений применение таких «камней» должно быть весьма популярно.&lt;/p&gt;

&lt;p&gt;&lt;b&gt;Intel&lt;/b&gt; немножко отстает по времени со своей Larrabee. Продукты &lt;b&gt;AMD&lt;/b&gt;,  если ничего не случится, появятся на прилавках магазинов в конце 2009 – начале  2010 года. А решение противника выйдет на свет божий только почти через два  года.&lt;/p&gt;

&lt;p&gt;Larrabee будет насчитывать большое количество (читай – сотни) ядер. Вначале  же выйдут продукты, рассчитанные на 8 – 64 ядера. Они очень сходны с Pentium, но  довольно сильно переработаны. Каждое ядро имеет 256 килобайт кэша второго уровня  (со временем его размер увеличится). Взаимосвязь будет осуществляться за счет  1024-битной двунаправленной кольцевой шины. Интел говорит, что их «дитя» будет  отлично работать с DirectX и Open GL API (для «яблочников»), поэтому никаких  программных вмешательств не потребуется.&lt;/p&gt;

&lt;p&gt;А к чему я все это тебе поведал? Очевидно, что Larrabee и Fusion не вытеснят  обычные, стационарные процессоры с рынка, так же, как не вытеснят с рынка  видеокарты. Для геймеров и экстремалов пределом мечтаний по-прежнему останется  многоядерный CPU и тандем из нескольких топовых VGA. Но то, что даже  процессорные компании переходят на параллельные вычисления по принципам,  аналогичным GPGPU, говорит уже о многом. В частности о том, что такая  технология, как CUDA, имеет право на существование и, по всей видимости, будет  весьма популярна.&lt;/p&gt;

&lt;h2&gt;Небольшое резюме&lt;/h2&gt;

&lt;p&gt;Параллельные вычисления средствами видеокарты – всего лишь хороший инструмент  в руках трудолюбивого программиста. Вряд ли процессорам во главе с законом Мура  придет конец. Компании &lt;b&gt;NVIDIA&lt;/b&gt; предстоит пройти еще длинный путь по  продвижению в массы своего API (то же можно сказать и о детище ATI/AMD). Какой он будет, покажет будущее. &lt;/p&gt;
&lt;br&gt;
&lt;div style="margin-left:10px;color:#575;font-weight:bold;"&gt;&lt;a href="http://inmarketlink.biz/comment_1247035996.html"&gt;Оставить комментарий&lt;/a&gt;&lt;/div&gt;
         </description>
         <pubDate>Wed, 08 Jul 2009 10:53:16 GMT</pubDate>
      </item>
   </channel>
</rss>
