Category: компьютеры

Category was added automatically. Read all entries about "компьютеры".

horror

А как вы используете свой GPU?

Немного истории. В середине 90х на рынке появилось несколько графических плат, которые ни много ни мало умели осуществлять 3D растеризацию. Конечно, самой популярной платой на то время была Voodoo Graphics от 3Dfx Interactive. Я до сих пор помню, как впервые играл в Half Life 1 в компьютерном клубе, графика была просто потрясающей, а возможность выбрать в опциях не “Software renderer” радовала сердце. Славные времена. Позже у меня тоже появилась эта плата, но переживания детства было уже не вернуть: видеокарта постоянно подвисала, отказывалась работать с 90% игр, сыпала программными исключениями и обильно сдабривала выстраданную картинку артефактами.  

hl1

Конечно, возможности данной платы были весьма ограниченными с современной точки зрения. Никаких шейдеров, никаких вершинных преобразований. CPU осуществлял всю работу, а затем на вход графической платы передавал координаты треугольников для растеризации. Такой себе отлитый в кремнии пиксельный шейдер. Вместе с координатой вершины также можно было передать координату текстуры и RGBA цвет. Координата текстуры использовалась для доступа к единственной текстуре (неожиданно, да?), а интерполированный цвет можно было комбинировать со значением, извлеченным из текстуры, с помощью ограниченного множества операций. Альфа-канал тоже поддерживался. Если опустить некоторые другие детали, то на этом возможности Voodoo Graphics полностью исчерпывались. Все это не шло ни в какое сравнение с утонченными программными рендерами, но в контексте чистой мощности Voodoo Graphics был просто монстром. Вычислительная революция также имела и отрицательные стороны, в частности, большинство трехмерных игр тех времен были малоотличимы друг от друга в графическом плане.

Современные GPU шагнули далеко вперед. На их фоне архаичная Voodoo Graphics выглядит паровым двигателем на дровах, тем не менее, сохранилась преемственность в подходе: растеризировать максимальное количество треугольников за единицу времени. Но если раньше процесс растеризации или вообще было невозможно контролировать или контролировать с помощью ограниченного набора вызовов типа glLight, то теперь у нас есть шейдеры и это прекрасно. Для тех кто в танке, шейдеры — это такие программы, написанные на специальном языке (к примеру, GLSL или HLSL), которые исполняются на шейдерных процессорах. Про шейдерные процессоры я их хотел поговорить. 

Все мы в детстве грезили суперкомпьютерами: огромными мейнфреймами, которые пылятся в подземных военных бункерах и мигают лампочками в томительном ожидании. Широко известно, что если в подобные суперкомпьютеры ввести координаты и импульсы всех частиц во вселенной, то они с радостью и в мгновение ока рассчитают следующее состояние вселенной, при условии что dt будет стремиться к нулю. Наверное. В теории. Детство закончилось, а мечты исполнились. Любой современный ПК — это суперкомпьютер в миниатюре, в основном благодаря не многоядерным центральным процессорам наперевес с гигабайтами оперативной памяти, а графическим платам. Прометей украл GPU у богов и передал его людям.  

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

bmwx6xdrive50iengine

Мое близкое знакомство с GPU началось с год назад. Тогда я и не подозревал, насколько увлекательней может быть программирование, когда у тебя под рукой огромные вычислительные мощности. Но за все нужно платить, хотя бы потому что обычная программа на С/C++ скорей всего откажется исполняться на шейдерном процессоре. Да и вообще сама парадигма программирования GPU имеет мало общего со всем тем, что нам приходится кодить изо дня в день.

Здесь важно отметить, что использовать GPU по назначению, т.е. для растеризации громадного количества треугольников, как правило, не очень интересно, если вы конечно не пишите очередного убийцу CryENGINE. Всегда есть исключения, но в основном это неблагодарное занятие, для которого отношение «вау-эффект / количество кода» стремится к нулю. Так я и познакомился с такими разношерстными областями человеческой деятельности как рейтрейсинг, объемный рендеринг, симуляция жидкости/дыма, рендеринг на основе функций-дистанций, включая всеми любимые фракталы, на этот раз трехмерные. Но об этом я напишу как-нибудь в другой раз. Обязательно. Наверное. 

Я много раз употреблял прилагательное «огромный» в применении к существительному «мощность». Пора бы все выразить и в конкретных цифрах. За эталон можно взять… правильно, компьютер, который отправил человека на Луну, а именно Apollo Guidance Computer (AGC). 

agc

Существует миф, что процессор любого современного карманного калькулятора мощнее AGC. Может это и не миф. AGC обладал 2 килобайтами оперативной памяти, 32 килобайтами памяти только для чтения, 4 регистрами общего назначения и процессором с тактовой частотой в 4,077 МГц (или 0,004077 ГГц).  Если предположить, что данный процессор выполнял одну инструкцию за один такт, то его вычислительная мощность равнялась:

Вычислительная мощность AGC =  1 * 0,004077 ГГц  = 0,004077 гигафлоп

Вроде как немного. На моем домашнем компьютере установлена видеокарта не первой свежести NVidia GeForce 9800 GT. По этой ссылке можно обнаружить, что мощность данной видеокарты составляет:

Вычислительная мощность GPU = 504 гигафлоп

Вроде как много. Интересно найти отношение между вышеуказанными мощностями:

Мощность GPU / Мощность AGC = 504 гигафлоп / 0,004077 гигафлоп = 123620

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

Конечно, сравнивать технологию 60х годов с технологиями нашей эры не совсем спортивно и не совсем законно. Поэтому вернемся опять к моему домашнему компьютеру, на котором установлен центральный процессор Intel Core2 Duo E4000. На этом сайте можно подсмотреть вычислительные мощности всей линейки процессоров Intel и для моего процессора она равняется:

Мощность CPU = 14,4 гигафлоп
Мощность GPU / Мощность CPU = 504 гигафлоп / 14,4 гигафлоп = 35

Теперь прирост не такой огромный: всего в 35 раз. Правда, здесь не все так просто. Эти гигафлопы рассчитаны на основе чисел двойной точности и т.н. MAD (Multiply-Add) инструкций, когда за один такт выполняются две арифметические операции. 

С практической точки зрения это означает, что различные интересные рендеры и не только можно в реальном времени (60 кадров в секунду) выполнять на GPU и нельзя на CPU. С точки зрения чистого удовольствия и вау-эффекта это очень важно. О конкретных приложениях я во всей полноте напишу в последующих постах, а сейчас видео. Встречайте трехмерный фрактал Серпинского.

Volumetric Sierpinski from Ignat Grob on Vimeo.

horror

Фейнман, шаттл и вода со льдом

Когда меня просят посоветовать почитать что-то одновременно веселое и научное, то я, конечно же, рекомендую книгу «Вы, конечно, шутите мистер Фейнман». Как оказалось, у Фейнмана есть ещё и другая менее популярная книга — «Какое тебе дело до того, что думают другие?». Книгу условно можно разбить на две части: веселые забористые истории и одна большая история про то, как Фейнман в составе президентской комиссии расследовал причины крушения шаттла «Челленджер», который взорвался на 73-й секунде полета. С одной стороны странное соседство, но катастрофа случилась в 1986 году, а Фейнман умер в 1988 году, и скорей всего книга просто является посмертной компиляцией его дневников.

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

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

Когда Фейнман начинал вникать в суть дела, то, конечно же, ни о чем таком он не догадывался. Лишь после многочисленных просмотров фотографий и видеозаписей полета шаттла стало понятно, что возгорание возникло в одном из участков ракетоносителя.

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

В то же время Фейнману позвонил генерал Кутина и практически вручил ключ к проблеме.

Потом он говорит: «Сегодня утром я возился с карбюратором своей машины и подумал: шаттл оторвался от земли, когда температура равнялась 28 или 29 градусам. Самая холодная температура до этого полета была 53 градуса. Вы — профессор; каким образом, сэр, холод влияет на кольца?»

— О! — сказал я. — Из-за холода кольца становятся жесткими. Да, безусловно!

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

Наконец, мистер Маллой доходит до этого места, я нажимаю кнопочку своего микрофона и говорю: «Я достал эту резину из модели, поместил в зажим и на некоторое время опустил в воду со льдом».

Я достаю зажим из стакана, поднимаю его вверх и разжимаю со словами: «Я обнаружил, что при раскрытии зажима резина не принимает прежнюю форму. Другими словами, в течение более чем нескольких секунд этот материал не обладает эластичностью, когда находится при температуре в 32 градуса. Я полагаю, что это имеет некоторое значение для нашей проблемы».

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


Ещё я не мог пройти мимо интересных наблюдений Фейнмана по поводу компьютеров и программ, под управлением которых летал в те времена шаттл.

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

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

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

Для большей безопасности на борту есть еще и пятый компьютер, расположенный отдельно от четырех предыдущих, с проводами идущими по другим каналам. В этот компьютер заложено всего две программы: программа подъема и программа спуска (У него едва хватает памяти на размещение двух этих программ). Если что-то произойдет с остальными компьютерами, то этот пятый компьютер сможет вернуть шаттл на Землю. Его никогда нельзя использовать ни для чего другого.

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

В течение этого времени астронавты ничего не видят, и все изменяется настолько быстро, что снижение должно проводиться автоматически. На высоте около 35 000 футов шаттл замедляется до скорости, не превышающей скорость звука, и тогда им можно управлять вручную, если возникнет такая необходимость. На высоте же в 4000 футов происходит нечто, что выполняет не компьютер: пилот нажимает на кнопку, чтобы опустить шасси. Я нашел это очень странным — глупость, которая, очевидно, связана с психологией пилотов: они герои в глазах публики; все считают, что именно они управляют шаттлом, тогда как истина в том, что им не нужно ничего делать до того момента, когда они нажимают кнопку, чтобы опустить шасси. Для них просто невыносима мысль, что, на самом деле, им делать нечего.

horror

Аналитическая машина

Чарльз Бэббидж был настоящим гением своего времени, блестящим изобретателем, героем романов Гёте: он был готов душу дьяволу продать, лишь бы заглянуть «за кулисы» мироздания. Мы его помним за «Аналитическую Машину». По стопам великого Паскаля он пытался воплотить в жизнь то, что сегодня пылится у каждого в доме. И если первый изобрёл не более чем усложнённые счёты, то Бэббидж намного лет вперёд опередил своё время и предвосхитил создание вычислительных машин.

Как и многие великие учёные, Бэббидж видел корень зла в одном, а именно – в неточных вычислениях. В те поры обычно использовали таблицы с рассчитанными значениями различных функций. Нужен синус 23 градусов, открывай страницу 32. Табличные значения высчитывали люди в столбик, люди ошибались, ошибки накапливались, а Бэббидж негодовал. В конце 80х XIX столетия после того, как он в очередной раз обсудил проблему с астрономом Гершелем, его терпению настал конец. На тот момент у него уже было пару работ, где на высоком уровне анализировались убытки государства за счёт «плохих» цифр, и он решил положить конец проблеме раз и навсегда.

После мучительных и долгих исканий в его голову пришла идея «Разностной Машины». Машина должна была последовательно высчитывать значения какой-либо функции в различных точках. Например, f(x)=x², при x=1..10.  Сразу возникает несколько вопросов, которые сводятся к одному общему: «Как заставить груду металлолома это сделать?». Даже сегодня, имея ПК, зная язык программирования, нам бы пришлось написать какой-никакой рекурсивный анализатор выражений (или parser), решить проблему представления трансцендентных функций (синуса, логарифма) и вычислить в цикле уже все значения. К счастью, вторая проблема была решена ещё задолго до Бэббиджа с помощью рядов Тейлора. Как он решил первый вопрос здесь я и попробую рассказать, последний – оставим механикам.

Возьмём самую простую функцию f(x)=a*x+b. И построим такую таблицу:

x

f(x)

Δf

1

a*1+b

a

2

a*2+b

a

3

a*3+b

a

4

a*4+b

-


Третий столбец строится по формуле Δf=f(x+h)-f(x), где h=1, и он символизирует среднюю скорость изменения функции, для линейной функции она постоянна. Если h устремить к нулю, то мы получим дифференциал, который связан с Δf, как Δf=(f'(x)+ε)*h, т.е. отличается от Δf на величину бесконечно малую высшего порядка. В нашем элементарном примере видно, что для того чтобы получить значение в следующей точке, достаточно прибавить постоянную a. Вот она, главная идея. Если у нас есть полином n-ой степени, то мы можем построить все разности, вплоть до n-ого порядка, и потом рекурсивно делать вычисления. Сейчас всё поясним на примере.


Предположим, что мы хотим подсчитать значения функции f(x)=x³ в точках x=2..2.5, с шагом h=0.1. Теперь строим табличку:

x

f(x)

Δf

Δ²f

Δ³f

2

8.000

1.261

0.126

0.006

2.1

9.261

1.387

0.132

0.006

2.2

10.648

1.519

0.138

0.006

2.3

12.167

1.657

0.144

-

2.4

13.824

1.801

-

-

2.5

15.625

-

-

-

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

9.261 = 8.000 + 1.261;

1.387 = 1.261 + 0.126;

0.132 = 0.126 + 0.006.

Именно это и реализовал Бэббидж, именно поэтому его машина и называлась разностной (или аналитической). Важно отметить, что в его машине было всего 8 ячеек памяти, поэтому удавалось вычислять полиномы только n-ой степени, где n<=8. Каждая ячейка была представлена 31 шестёренкой: могла хранить значение величиной в двойное слово. Машина должна была работать на пару, до ума её довёл уже сын учёного.

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