Современная электронная библиотека ModernLib.Net

Компьютерра (№255) - Журнал «Компьютерра» № 13 от 04 апреля 2006 года

ModernLib.Net / Компьютеры / Компьютерра / Журнал «Компьютерра» № 13 от 04 апреля 2006 года - Чтение (стр. 3)
Автор: Компьютерра
Жанр: Компьютеры
Серия: Компьютерра

 

 


В Астрахани, крупнейшем городе России, где наблюдалось полное затмение, эта вероятность составляла 46%. В выходные дни перед затмением в разных местах Сети можно было увидеть диаметрально противоположные прогнозы. Люди ехали и летели в город с тревогой, понимая, что испортить все может даже одна неторопливая тучка, оказавшаяся в «нужном» месте в «нужное» время. В отличие от Москвы, где за чистым небом иногда надо обращаться к Лужкову, в Астрахани или Пятигорске разгонять облака никто не станет. Самые отчаянные ради солнечных затмений даже поднимаются в горы, чтобы быть выше обстоятельств в буквальном смысле слова. Несколько таких экспедиций состоялись и в этом году.

Судя по лентам новостей, 29 марта почти весь мир, вместо того чтобы работать, провел день с задранной к небу головой. «Компьютерра», конечно, не могла остаться в стороне от столь увлекательного занятия. Поскольку для жителей европейской части нашей страны самой удобной точкой для наблюдения полной фазы затмения оказалась Астрахань (вернее, ее южные окрестности), то незадолго до дня X наш корреспондент отправился в этот город.

Еще до поездки в дельту Волги я рассчитывал на общение с кем-то из Астраханского областного планетария, однако директор учреждения даже не вышла поздороваться, а у не назвавшей себя сотрудницы удалось узнать, что научной работы планетарий не ведет и комментировать редкое явление они никак не могут. Поэтому я вдвойне порадовался удаче, благодаря которой несколькими часами ранее познакомился с людьми, чьей основной профессией астрономия не является.

Егор и его спутник Алексей выехали из Москвы на том же поезде, что и я. Егор работает в «Склифе», Алексей учится в МАИ, а в Астрахань они отправились, чтобы изучать влияние затмения на… погоду. По большей части затмения интересуют астрофизиков, а объектом внимания является Солнце. Исследований же, подобных тому, что задумали мои новые знакомые, можно по пальцам пересчитать. Более чем за сутки до начала затмения были начаты ежечасные измерения температуры, давления, скорости ветра, облачного покрова. Те же наблюдения во время и после затмения помогут судить о влиянии кратковременного ослабления потока солнечных лучей на динамику атмосферных процессов (после обработки данных результаты должны появиться на сайте Skywatching.net).

Метеорологи-любители обещали хорошую погоду, тем более что они были в ней кровно заинтересованы. Добравшись до Астрахани, Алексей и Егор отправились дальше на юг, в район города Камызяк, где длительность полной фазы затмения достигала двух минут, а я решил проделать путь еще больший, желая получить в свое распоряжение лишнюю минуту.

Утро встретило ясным небом с легкой проседью облаков. По пути из Астрахани выяснилось, что большая половина пассажиров рейсового автобуса — из Москвы. С профессионалами, если они и были, поговорить не довелось, но энтузиазму любителей можно позавидовать. Один молодой человек ради этой поездки даже уволился с работы, а добирался сюда на электричках.

Около десяти утра, когда мы прибыли на место и разбрелись в поисках удобных мест, налетел сильный холодный ветер, и Солнце скрылось за плотной грядой облаков. Эмоции, которые наверняка испытывал каждый проделавший долгий путь, понятны и не подлежат изложению в печатном виде. Однако к часу дня небо очистилось. В начале третьего Луна стала потихоньку отъедать у солнечного диска кусок за куском, медленно сгущались сумерки, а минут через семьдесят поселок погрузился во тьму. Нашей группе из четырех человек три минуты сияния солнечной короны показались секундами, так быстро небо снова залило светом.

Наблюдения прошли удачно, как и планировалось, единственной проблемой чуть не стали… коровы. Немалая группа этих вольно пасущихся животных направилась к нашему хрупкому лагерю аккурат ко времени полной фазы. Будучи начитанными о непредсказуемом поведении братьев меньших в минуты затмений, мы изрядно забеспокоились, но в итоге все обошлось разборками внутри стада. Как потом выяснилось, реакция на темноту у большинства коров в поселке Кировский была однозначной: они раньше времени вернулись домой, полагая, что день подошел к концу. Для большинства гостей Астраханской области день на затмении тоже завершился, по возвращении в город весь автобус поголовно спал.

НОВОСТИ: Затмения как двигатель прогресса

Автор: Александр Осинев osinev_ct@mail.ru

Почти все мифы о затмениях связаны с дурными предзнаменованиями. Как правило, некая змея или дракон глотали Луну или Солнце, и, конечно, ничего хорошего за этим не следовало. Вот и сейчас вроде бы вполне просвещенный мир ознакомился через авторитетное агентство Рейтер с прогнозом американского астролога, предсказавшего по случаю затмения лихое время для фондового рынка (падение индекса Доу-Джонса не меньше чем на 10% в ближайший квартал). Меж тем скрупулезное изучение вопроса о влиянии затмений на цивилизацию подводит нас к совершенно иным выводам.

Помнится, не так уж и давно несовершенные расчеты ученых породили гипотезу об искусственности Фобоса, спутника Марса. По всему выходило, что внутри спутник полый, а значит — рукотворный. Планировались даже специальные миссии для забора с его поверхности вещества, из которого неведомые нам братья по разуму сотворили величайшее чудо.

Но давайте взглянем на Луну. Нет, мы не станем доказывать, что ее кто-то сделал, а в недрах Селены мы найдем города давно погибших цивилизаций. Сомнения вызывает не сама Луна, а то, как она, скажем так, размещена. Судите сами.

Луна примерно во столько же раз меньше Солнца, во сколько раз Солнце дальше от Земли. Благодаря этому известному факту у нас и случаются полные затмения. Такого совпадения больше нет нигде в Солнечной системе. Случайность? Может, и так. Но если учитывать распространенное мнение о том, что мы сами — тоже случайность природы, приходится допускать, что такое двойное совпадение — умысел. Натянуто?

Тогда давайте рассмотрим второе обстоятельство: затмения случаются иногда, а не каждый месяц. Чего греха таить, наши предки, познавая мир, часто стремились упростить суть явлений: прямые линии, точные окружности, гармония небесных сфер. И тут на тебе, совершенно непредсказуемые затмения. Большая часть человечества испытывала страх перед неизвестным, меньшая, но прогрессивная задавала вопрос: почему? Затмения побудили людей считать дни между ними и выводить закономерности. В древнем Вавилоне, Китае, Египте, а потом в Греции и Риме научились предсказывать их, опираясь на период в 18 лет и 11 дней, так называемый сарос, через который следовало ожидать повторения затмений.

Однако если не уходить в древность и вернуться всего на 18 лет назад в 18 марта 1988 года, то в той же Астрахани мы не смогли бы увидеть никакого затмения. Оно прошло до того, как в Астрахани рассвело, и было видно совсем из других мест, поскольку длительность сароса — 18 лет, 11 дней и чуть меньше 8 часов. На то, чтобы «отловить» эти часы, понадобились века. Так был замечен другой, более точный период — тройной сарос. Но затмение 1952 года в Астрахани было частным, а не полным, сказывается еще более сложный цикл.

Это сейчас мы знаем, что Луна движется очень сложно, что она вращается скорее не вокруг Земли, а вокруг Солнца, так как притягивается им вдвое сильнее, а Земля лишь вносит свои коррективы. Мы знаем, что орбита Луны — эллипс, а не круг, что плоскость лунной орбиты прецессирует, как и ось Земли, а потому никакой простой системы затмений не выстроишь. О сложное движение Луны разбилось немало систем мира, Луна не покорилась ни Птолемею, ни Кеплеру, ни Ньютону. Но представьте себе, что все было бы просто. Разве был бы у ученых мужей повод совершать свои научные подвиги?

Но и это не все. Благодаря затмениям Луны, еще в древности люди предположили, что Земля — шар. Именно благодаря затмениям уже в новую и новейшую эпоху астрономы получили возможность изучить корону и хромосферу Солнца. Гелий был открыт на Солнце при наблюдении затмения 1868 года, а ведь гелий — это 28% всего, что есть во Вселенной (к тому же при изучении гелия нашли еще три инертных газа). Во время полных затмений Солнца прошлого века было получено первое подтверждение общей теории относительности. В течение нескольких затмений астрономы пытались вычислить величину отклонения света звезд, находящихся вблизи солнечного диска, а ведь без затмений сделать это невозможно.

И наконец, последний аргумент. Ввиду редкости наблюдения полной фазы явления в каждой точке Земли историки получили в руки мощный инструмент, с помощью которого можно датировать рукописи. Тем самым мы можем хронологически сопоставить культурное развитие стран с различными системами летоисчисления.

Подводя итог, отметим, что все имеющие место совпадения, а также важность затмений для науки делают почти неоспоримым факт продуманного размещения Луны возле населенной нами планеты. Если исходить из знаменитой идеи о том, что все во Вселенной спроектировано для возникновения жизни на Земле, то Луна прекрасно вписывается в концепцию, явно отвечая за прогресс разумной составляющей этой самой жизни.

НОВОСТИ: Автор: Козловский Евгений

Разрастание пустоты

Вчера я узнал, что умер Лем, и мне стало как-то… пусто. Я виделся с ним лишь однажды, пять лет назад, и тоже — ранней весной. Специально ездил в Краков от «Компьютерры», чтобы взять у него интервью.

К тому времени мне было уже сильно за пятьдесят, жизнь одарила меня знакомством и общением со многими интересными и некоторыми великими людьми, — а вот поди ж ты: подходя к дому на окраине Кракова, я трясся в мальчишеском треморе. Нервничал сильнее, чем на первом экзамене.

Почему? Черт его знает!.. Неужели только потому, что книжки Лема в ранней юности были для меня так важны и значимы? Что «Сумма технологии», прочтенная тогда, стала чуть ли не основным философским трудом, определившим на всю дальнейшую жизнь мое мировоззрение? Если б я ехал на встречу с Достоевским или с Пушкиным, волновался б, наверное, не меньше, — но с Достоевским и Пушкиным встретиться было уже совершенно невозможно, а с Лемом…

Когда я, поговорив с паном Станиславом часа полтора, записав разговор на пленку и отщелкав полгигабайта фотографий, вышел на улицу, меня пронзила банальная, но показавшаяся странной идея о человеческом невнимании, человеческой несправедливости. «Кто более чем Лем, — подумал я, — достоин Нобелевской премии, во всех отношениях достоин? И как печально, что он скорее всего ее никогда не получит. Не получит потому, что на Западе недостаточно хорошо знакомы с его книгами, а в Штатах, можно сказать, не знакомы вообще. И еще потому, что он был пророком Земли, а ведь известно, что нет пророка в своем отечестве».

Об уровне понимания Лема американцами можно судить по ужасающему фильму Содеберга «Солярис». Если даже гениальный одноименный фильм Тарковского вызывал у пана Станислава такое недоумение непониманием, — что, он подумал, посмотрев фильм американский? Задать этот вопрос Лему я не смог, потому что в тот момент фильма еще не было.

Впрочем, я бы не удивился, если б узнал, что Лем просто отказался его смотреть. Да-да! Потому что от встречи у меня осталось такое вот общее впечатление: пан Станислав последние годы огорченно недоумевает от того, что его почти никто не понимает. Его острый, пронзительный ум, который никогда не мыслил на уровне ниже онтологического, философского, раньше многих осознал тщету технических ухищрений — пусть сколь угодно революционных — на фоне кардинальных, имманентно человеку и человечеству присущих проблем. Он писал об этом, когда еще не взлетел в Космос первый спутник, когда не было и помину Интернета и персональных компьютеров. Он с легкостью, но и с грустью населял свои рассказы, романы и эссе этим бесчувственным «железом будущего», — но его не услышали.

Когда он писал свои последние статьи, к нему относились с легким даже пренебрежением: мол, спятил старик, — а он просто оставался на обычном своем пронзительном уровне постижения мира. На него чуть ли не обижались: как так? человек, предсказавший нынешний мир хайтека, столь скептически к нему относится?! Это — неправильно!!!

И от этого вот непонимания он чувствовал себя — во всяком случае, выглядел — особенно одиноким. С этой своей сгорбленной спиной и яснейшим разумом…

Мертвых у нас любят больше, чем живых, — так что есть надежда, что сегодняшние читатели с бо,льшим вниманием отнесутся к его книгам и статьям, — ему же теперь, увы, все равно…

ТЕМА НОМЕРА: Персональный суперкомпьютер

Автор: Федор Челноков

К тому, что современные игры не могут обойтись одним лишь центральным процессором (Central Processing Unit, CPU [CPU — central processing unit]), без поддержки видеокарты, мы привыкли настолько, что это считается само собой разумеющимся. Сегодня никого не удивляет анонс очередного графического чипа (Graphics Processing Unit, GPU [GPU — graphics processing unit]) производительностью несколько сотен гигафлопс[gflops — миллиард арифметических операций с действительными числами в секунду]. А ведь самые дорогие CPU, даже серверные, едва ли могут похвастаться и десятой долей этой числодробильной мощности. Как образовался такой колоссальный разрыв в скорости счета? Почему главная роль в компьютере, роль «мозга», по-прежнему остается за CPU, тогда как GPU не простаивает только во время кровавых игрищ? Что мешает задействовать GPU в «мирных» целях, превратить его в настоящий комбайн, выполняющий огромное количество задач, отличных от рендеринга, и ведется ли какая-нибудь работа в этом направлении?

Графический конвейер

Чтобы обстоятельно ответить на эти и другие вопросы, нам необходимо вспомнить основы устройства графической подсистемы. Ее работа организуется в форме конвейера, упрощенно представленного на рис. 1. Информация проходит все стадии конвейера, прежде чем преображается в видимый на экране образ.

В самом начале располагается блок обработки вершин трехмерной сцены, целью которого является выработка данных о каждой вершине: ее положение в экранной системе координат, пара цветов (диффузный и зеркальный), до восьми текстурных координат. Следует напомнить, что текстурными называют координаты на отдельно хранящемся растровом изображении (текстуре). Их задание в каждой вершине треугольника позволяет привязать нужную часть изображения к этому треугольнику. Входные данные отдельно для каждой вершины поступают от программного приложения. Как правило, передаются координаты и нормали вершин в системе модели, которые по известным характеристикам, положению и направлению взгляда камеры трансформируются в экранные координаты. Цвета определяются взаимным расположением вершины, камеры и источников освещения. Отсюда и принятое название: блок трансформации и освещения (T&L). Обработка вершин происходит независимо, здесь система еще не знает, как они связаны между собой.

Информация о том, какие тройки вершин образуют треугольники, поступает только на следующий этап конвейера, носящий название «сборка треугольников» (triangle setup). После этого уже можно определить, какие треугольники будут не видны на экране. Независимым исследованием вершин этого установить нельзя: три выходящие за границы экрана вершины могут сформировать частично видимый треугольник. Полностью скрытые треугольники удаляются, чтобы больше не отнимать на себя ресурсов. От частично видимых треугольников отсекаются ненужные части.

На этапе растеризации треугольники разбиваются на множество фрагментов, каждый из которых соответствует одному пикселу экрана, накрываемому треугольником. Здесь же происходит еще одна важная операция — линейная интерполяция значений из вершин треугольника в соответствии с положением фрагмента. После этого обработка каждого фрагмента может происходить автономно от других фрагментов.

В конечном результате для каждого фрагмента необходимо определить его итоговый цвет и, возможно, изменившуюся глубину. Для чего часто требуется доступ к хранящимся в видеопамяти текстурам, которые могут содержать как непосредственно цвет, так и освещенность, отражательную способность или карту неровностей. Доступ к текстурам осуществляется через блок выборки (fetch), который может вернуть цвет текстуры в произвольной точке, а также может выполнять билинейную или анизотропную фильтрацию.

О фрагментах следует думать как о пре-пикселах. Окончательное значение цвета на экране формируется в результате композиции цвета фрагмента с цветом, уже находящимся в экранном буфере, только частным случаем которой является полное замещение. Фрагмент на этом этапе может быть вообще отвергнут, если не пройдет один из тестов, например тест глубины или величины альфа-канала.

Свое окончание конвейер находит в экранном буфере или текстуре, его заменяющей, при включении специального режима render-to-texture. Это единственное место в конвейере, которое доступно приложению для обратного считывания (read back).

Предыстория

Как же использовать графический конвейер не только для отображения трехмерных сцен? Еще относительно недавно нужно было обладать незаурядными знаниями всех операций, которые производители «зашили» в графический чип, чтобы заметить задачу, сводимую к рисованию некоторой сцены. В любом случае, способностей GPU хватало лишь на очень узкий круг вычислительных проблем[Не хочется задерживаться на этой теме, но чтобы не быть голословным, привожу одну из ссылок, где есть программа построения диаграммы Вороного], как правило, не слишком требовательных к точности результата. Но с наступлением нового тысячелетия ситуация начала мало-помалу меняться.

Прежде программирование графики можно было отнести к декларативному типу. Трехмерное приложение перечисляло все объекты в сцене, свойства их поверхностей, говорило, где расположены источники освещения, куда смотрит камера и т. п. В завершение следовала команда графической плате: «А теперь возьми и отобрази, что видит камера!» Эта ситуация была бы всем хороша в спокойные времена, но не когда производители игр отчаянно борются за внимание пользователей, которое, по их мнению, можно привлечь только новыми и желательно уникальными эффектами. Поэтому наметился постепенный переход к императивной парадигме программирования графики. То есть вместо выбора одного из предопределенных типов обработки данных производители игр получили возможность самостоятельно писать малюсенькие программки, непосредственно выполняемые графическим процессором. В первую очередь это затронуло блок обработки вершин, а затем и фрагментов (обведены оранжевым цветом на рис. 1). Поскольку главным образом под эффектами понималась более точная передача игры света и тени, то программки эти стали называть шейдерами (от англ. shade — тень), соответственно разделяя их на вершинные и пиксельные. Появились специализированные низкоуровневые ассемблеры.

Поначалу (2001 год) шейдеры были сильно ограничены в функциональности: например, пиксельный шейдер мог считывать цвет точки текстуры только четыре раза и выполнять над этими цветами не больше восьми арифметических операций[Хотя малым это стало казаться только сейчас, а на момент появления впечатляло].

Альтернативное применение

Переломным моментом можно считать самый конец 2002 года, когда в продаже появились платы семейства GeForce FX от nVidia и Radeon 9500 (и выше) от ATI. В них была заложена поддержка стандарта шейдеров Shader Model 2.0, который примечателен главным образом двумя аспектами.

Стандарт требовал от GPU умения выполнять гораздо более сложные программы и по количеству инструкций, и по числу обращений к текстурам.

Все промежуточные операции должны были выполняться с действительными числами высокой (в сравнении с предшествующими моделями GPU) точности. А производители сразу ввели поддержку текстур, в которых цвета хранятся также в виде действительных чисел.

Хотя позже появляются и другие модификации стандарта, включая последний на сегодняшний день Shader Model 3.0, шейдеры второй версии остаются по-прежнему актуальными, потому что платы, поддерживающие только их, присутствуют на рынке и сегодня. Особенности стандартов приведены в таблице 1.

Как только число инструкций в программе достигло десятков, пользоваться ассемблером стало не так удобно. Поэтому к тому же времени формируются специализированные C-подобные языки высокого уровня. Заслуживают упоминания как минимум три из них: cg от nVidia, HLSL из DirectX и GLSL из OpenGL. Все они очень похожи, но, к сожалению, отличаются лексическими и синтаксическими деталями. Их компиляторы к сегодняшнему дню стали довольно зрелыми, способны оптимизировать код, хотя небольшая вероятность наткнуться на неправильно скомпилированный шейдер еще остается. Отказываться от высокоуровневых языков сейчас приходится лишь в исключительных случаях, например, чтобы уложиться в лимит регистров или инструкций.

Достоинства графических чипов: высокая производительность, точность и достаточная простота программирования не могли не быть замеченными, в первую очередь университетами. В 2003 году наблюдается всплеск научных статей, посвященных алгоритмам и принципам расчетов общего назначения средствами графических плат (GPGPU[GPGPU — General-Purpose Computation on GPUs]). С 2004 года специально организуются научные конференции.

В этой связи любопытно поведение двух крупнейших игроков на рынке графических чипов. Если aTI, по-видимому, заняла выжидательную, консервативную позицию: «GPU нужен только для игр», то nVidia, наоборот, проявляет заметную активность. Она пропагандирует идею GPGPU, организует курсы, призывая исследователей пользоваться ее аппаратурой для неграфических вычислений[gpgpu.org/s2005], предоставляет им временную или постоянную работу. Под эгидой nVidia издано уже два бестселлера «GPU Gems»[developer.nvidia.com/object, developer.nvidia.com/object/gpu_gems_2_home.html], в которые вошли главы по вычислениям общего назначения. С 2002 года сотрудники фирмы ведут сайт gpgpu.org, пытающийся систематизировать все результаты в этой области. nVidia продает ряд продуктов для нужд киноиндустрии, на деле доказывая нешуточность идеи.

Каковы результаты этой активности? Судя по публикациям, GPU удается найти применение в самых различных областях высокопроизводительных вычислений, включая высококачественный рендеринг, трассировку лучей, обработку изображений и сигналов, машинное зрение, компрессию, поиск и сортировку, биоинформатику, решение систем линейных уравнений, моделирование физических эффектов. Достигаемое ускорение колеблется от случая к случаю, но типично составляет несколько крат по сравнению с расчетом на центральном процессоре. Вы спросите, отчего же CPU так катастрофически проигрывают, если они изготовляются на таких же, если не на лучших полупроводниковых фабриках, содержат сопоставимое число транзисторов[Буквально одно сравнение high-end-продуктов в подтверждение: 376 млн. транзисторов в двухъядерном Intel Pentium EE 955 против 384 млн. в ATI Radeon X1900XTX], а их рабочие частоты в разы выше, чем у GPU?

GPU против СPU

Одно арифметическое устройство, оперирующее числами с плавающей точкой, при современном технологическом процессе производства чипов занимает на кристалле меньше одного квадратного миллиметра[Эти и последующие числа раздела взяты из книги «GPU Gems 2»]. Поэтому во всем чипе их можно иметь сотни, но проблема не в количестве устройств, а в том, как их все загрузить работой. К сожалению, на этом пути есть препятствия.

В первую очередь — память. По закону Мура, каждый год количество транзисторов на чипе возрастает наполовину, возрастает (но медленнее) и скорость их работы, так что суммарно можно говорить примерно о семидесятипроцентном повышении теоретической производительности устройств. Почему теоретической? Да потому, что пропускная способность памяти ежегодно возрастает примерно на 25%, а ее латентность (задержка обращения к новому участку памяти) сокращается и того медленнее — всего на 5% в год. Поэтому если не предпринимать дополнительных усилий, то самое слабое звено и будет определять производительность всей системы.

Центральный процессор обеспечивает просто райские условия для разработчика: любая инструкция в программе может считать или записать произвольную ячейку большой оперативной памяти. На деле это выливается в совершенно нерегулярный набор обращений к памяти. И чтобы ее латентность не была столь критической, в процессор приходится встраивать быструю кэш-память. И встраивать много — кэш сейчас занимает не меньше половины площади кристалла, а значит, ее не занимают вычислительные блоки. Причем во многих сценариях большой кэш оказывается неэффективен, к примеру, если обращение к ячейке памяти происходит лишь единожды, как при обработке потоков.

Второй важной причиной является последовательный характер обычных программ — наборов инструкций, которые для получения желаемого результата должны выполняться друг за другом. Если одна инструкция задержится медленной памятью, то задержится исполнение и всех остальных. Конечно, не все инструкции являются зависимыми и поэтому могут выполняться одновременно. Но явно эта независимость в программе не отражена, так что на выявление скрытого параллелизма тратится другая заметная порция площади кристалла. В самом лучшем случае удается наскрести работу для считанных единиц исполнительных устройств.

Как же эти проблемы решаются в GPU? При описании графического конвейера неоднократно подчеркивалось, что внутри каждого блока конвейера выполняются независимые действия: вершины обрабатываются независимо одна от другой, аналогичное утверждение справедливо для треугольников и т. д. Поэтому не только отдельные этапы конвейера функционируют одновременно, но и на каждом этапе идет параллельная обработка. В этом смысле внутри GPU выделяются наборы вершинных и пиксельных процессоров (рис. 2). Для обеспечения произвольного порядка обработки фрагментов текстура, в которую выполняется рисование, не может в то же самое время использоваться и для выборки, то есть видеопамять делится на непересекающиеся участки только-для-чтения и только-для-записи. Также не могут совпадать обновляемые точки в целевой структуре, поскольку итоговое положение каждого фрагмента фиксируется еще на этапе растеризации. Этими ограничениями достигается достаточное свойство параллельности пиксельных процессоров. Теперь, несмотря на то что каждый шейдер — это последовательная программа, при задержке обращения к памяти при обработке одного фрагмента GPU может не простаивать, а переключиться на другой фрагмент — кандидатов всегда достаточно. Имеются и элементы явного параллелизма в шейдерах: каждая ассемблерная инструкция может выполнять операцию не со скалярами, а сразу с четырехэлементными векторами[Число четыре возникло не случайно — именно такова размерность гомогенного пространства, и таково число компонентов в полупрозрачной цветной текстуре. Векторными операциями можно не пользоваться, но тогда эффективность GPU резко снижается], есть комбинированная инструкция умножь-затем-прибавь.

Без ячеек памяти, которые можно и считывать, и записывать, совсем обойтись, конечно, нельзя. Каждому шейдеру для этой цели предоставляются регистры, их мало (табл. 1), приходится экономить, но благодаря этому все промежуточные вычисления ведутся без обращения к внешней памяти, куда попадает лишь финальный результат. Малый размер шейдера и его общность для всех фрагментов преследуют ту же цель — хранить код программы не в памяти, а внутри процессора. Ведется последовательная политика, включающая разъяснительные мероприятия среди разработчиков, увеличения количества арифметических операций между последовательными обращениями к памяти.

Сосредоточение силы

Во всем конвейере главными претендентами для выполнения неграфических расчетов, безусловно, являются вершинные и пиксельные процессоры. Рассмотрим для примера плату GeForce 6800 Ultra. В ней имеется шесть вершинных процессоров, каждый из которых способен за такт выполнять максимум две арифметические операции над четырехэлементными векторами, а также шестнадцать пиксельных процессоров, способных на три векторные операции за такт. Умножая на частоту чипа 425 МГц, получаем верхнюю оценку производительности в 100 Гфлопс. Проделав те же выкладки для новейшей GeForce 7900 GTX, имеющей уже восемь вершинных и двадцать четыре пиксельных процессора и функционирующей на частоте 650 МГц, получаем почти 230 Гфлопс.

Можно задействовать и другие участки конвейера. Если в пиксельном шейдере нужно вычислять некоторую линейную[Есть еще сферические и кубические текстуры, но их ценность для целей данной статьи сомнительна] функцию координаты, то можно перенести эту работу на этап растеризации, задав значения функции только в углах треугольника.

На этапе композиции можно выполнять условные присваивания, вычислять линейную комбинацию векторов, так же как и на этапе фильтрации. Однако эти действия не поддерживаются всеми современными платами для интересующих нас чисел высокой точности. Но если вас устроит «половинная» точность (16 бит), то оценка производительности может быть поднята еще выше.

Вы должны понимать, что это крайне оптимистичные оценки, реально достижимая скорость счета заметно ниже. На практике не всегда удается задействовать даже вершинные процессоры. Дело в том, что до Shader Model 3.0 они были лишены доступа к текстурам, то есть к памяти. К тому же их вывод не записывает в память непосредственно, а лишь определяет области, которые будут обсчитаны пиксельными процессорами. Конечно, и этим можно умело пользоваться, чтобы уменьшить размер и повысить скорость пиксельных шейдеров, но трудоемкость разработки всей программы для GPU сильно возрастает. Впрочем, здесь тоже ожидается скорый прогресс — уже вовсю говорят об унифицированных шейдерных процессорах, способных выполнять обработку как вершин, так и пикселов и не простаивать при любом виде нагрузки.


  • Страницы:
    1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11