ATI Stream Computing: зачем это нужно на практике?...

Автор: Wilde
Дата: 13.11.2006
Все фото статьи

Немного о вреде PR


Очень часто случается так, что при представлении крупным производителем какой-нибудь новой технологии ее непосредственная суть просто теряется в потоках словесной мишуры, усердно сочиняемой сотрудниками PR-отделов в попытках придать ей больше основательности и солидности. В таких случаях приходится ждать, когда специалисты в этой области разберутся с преимуществами технологии и сообщат мировому сообществу ее суть доступным языком, сиречь - расскажут, что собственно говоря, в этой технологии хорошего и что это даст всем нам на практике.
К подобным анонсам, без сомнения, можно отнести недавнее представление технологии "Stream Computing" компанией ATI, которое, помимо всего прочего, просто затерялось на фоне процесса вливания самой ATI в AMD. Все, что запомнилось неискушенному в этом вопросе читателю (если вообще что-то запомнилось!), так это фразы "Научные вычисления", "Физические расчеты" и "Ускорение расчетов в 40 раз". Что за вычисления имелись в виду, почему они должны ускориться в 40 раз и почему вообще эта технология получила название, дословно переводимое на русский как "Потоковые вычисления" - все это, увы, осталось в большом тумане, который Ваш покорный слуга и собирается немного рассеять этой статьей.

Немного теории


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

последовательное вычисление в один поток: for i:=1 to 1000 do {некий набор операций над i}
говоря по-русски, для каждого числа i мы выполняем какой-то один и тот же набор операций, при этом выбираем числа i одно за одним.
параллельное вычисление той же самой задачи в четыре потока, которые можно выполнять одновременно на разных исполнительных устройствах, выглядит следующим образом:
поток1: for i:=1 to 250 do {некий набор операций над i}
поток2: for i:=251 to 500 do {тот же набор операций над i}
поток3: for i:=501 to 750 do {тот же набор операций над i}
поток4: for i:=751 to 1000 do {тот же набор операций над i}
заметьте, что результаты каждого потока самодостаточны, то есть не зависят друг от друга.

Понятно, что при решении данной задачи на четырехпроцессорном компьютере, не учитывая накладных расходов, можно получить практически четырехкратное превосходство в скорости вычисления по сравнению с однопроцессорным. Также понятно, что круг задач, приспособленных к параллельному решению, пока весьма ограничен, однако в недалеком уже будущем он наверняка расширится: поиск в базах данных, в том числе и по графическому/аудио совпадению, моделирование сейсмической активности, анализ/предсказание финансовых показателей, и, конечно, научные исследования. Для решения таких задач ATI и предлагает использовать видеочипы своего производства с помощью технологии Stream Computing. Почему именно видео, а не центральный процессор?

Немного сравнений


Несложно заметить, что интенсивное развитие мощности центральных процессоров фактически остановилось уже года полтора-два назад. Все имевшиеся ресурсы по улучшению внутренней структуры процессоров были исчерпаны довольно давно, а затем на первое место встало и ограничение по энергопотреблению, которое сделало невозможным дельнейший рост частоты процессоров. Что сделали в данной ситуации производители? Правильно, продолжили движение вперед по экстенсивному пути - увеличению числа ядер внутри процессора, что, помноженное на рост количество процессоров в системе, дало неплохой потенциал для роста производительности на ближайшие годы. Однако, достаточно ли мощности центрального процессора, пусть даже состоящего из нескольких ядер, для объемных параллельных вычислений?
Возьмем, к примеру, передовой процессор Intel в этой области - Core 2 Extreme QX6700 (ядро Kentsfield), имеющий четыре вычислительных ядра, работающих на частоте 2.66 ГГц. При использовании данного процессора в некоей задаче, идеально подходящей для параллельных вычислений, мы получим, образно говоря, "результирующую частоту" 10.64 ГГц.
Вроде бы впечатляет. Однако, давайте теперь, в целях сравнения, возьмем чип R580, являющийся основой линейки Radeon X1900 и X1950, который изначально и предназначался для параллельной обработки однотипных данных (пикселей в кадровом буфере). В этом чипе имеется 48 конвейеров, в каждый из которых может быть загружена некая последовательность действий, которая будет выполняться над объектами ({некий набор операций над i}, см. пример параллельных вычислений выше). При стандартной частоте чипа 625 МГц мы получим "результирующую частоту" 30 ГГц, то есть втрое больше, чем у самого передового, четырех-ядерного CPU! Конечно, сравнение очень грубое, которое, к тому же, вообще не учитывает наличие SIMD инструкций в центральных процессорах, способных значительно ускорять вычисления подобного типа. Однако, согласитесь, потенциал в видео чипах есть и немаленький, что, собственного говоря, и пытается доказать нам ATI, предлагая использовать чипы видеоплат Radeon X1900/X1950 для самых разнообразных неграфических расчетов, имеющих возможности к распараллеливанию. Кстати говоря, не забываем, что не за горами выпуск и более современных чипов ATI, оснащенных еще большим количеством конвейеров, так что это только начало...

На практике


Что мы имеем на практике на данный момент? Бета-версию драйверов, которая позволяет задействовать видео чип на платах семейства Radeon X1900/X1950 пока в одном единственном проекте распределенных вычислений Folding@Home, проводимом Стэнфордским университетом. На первый взгляд, совсем негусто, однако, надо же с чего-то начинать, тем более, что данный проект распределенных вычислений на данный момент один из самых перспективных.
Этот научный проект занимается изучением сворачивания белков, преимущественно в аспекте борьбы с некоторыми заболеваниями, порождёнными нарушениями их функций (например, болезнь Альцгеймера, отдельные виды рака, "коровье бешенство" и др.). Белки это цепочки аминоксилот - длинные соединения молекул, управляющие всеми биохимическими реакциями в человеческом организме, участвуя в построении костей, мышц, кровеносных сосудов, а также помогая борьбе организма с инфекциями. Чтобы выполнять свои функции, белкам необходимо принять правильную пространственную структуру (этот процесс и называется сворачиванием). В случае неправильного сворачивания белка он не только не будет выполнять свои функции, но и может стать причиной возникновения смертельных болезней.
Проект Folding@Home как раз и занимается моделированием сворачивания белков, для того чтобы понять, почему (под воздействие каких причин) они могут сворачиваться неправильно. Процесс моделирования сворачивания белков прекрасно распараллеливается, а посему выбор ATI данного проекта для старта вполне объяснимо.
На данный момент драйвера находятся в режиме активного бета-тестирования, их стабильность пока оставляет желать лучшего, но они работают и это главное! Что же касается скорости вычислений, то до заявленного 20-кратного преимущества (не говоря уж о 40-кратном!) по сравнению с одноядерными процессорами пока еще очень далеко, но двух-, четырех-, а то и пятикратное преимущество наблюдается.

Присоединяйтесь к распределенным вычислениям!


Если Вы еще не знаете, что такое распределенные вычисления, но хотите помочь мировому сообществу в борьбе с неизведанными проблемами (в том числе - проблеме неправильного сворачивания белков, описанной выше), предоставив время центрального (или видео) процессора своего ПК во время простоя, то настоятельно рекомендую Вам посетить ресурс самой успешной Российской команды TSC! Russia.

Что дальше?


В дальнейшем ATI планирует внедрять технологию Stream Computing в нефтяной отрасли (для анализа информации при поиске нефти и газа), в финансовой отрасли (прогнозирование на основе данных моделирования), в видеоиграх (для расчета физики), а также в базах данных, где предлагается поиск не только по текстовым ключам, но и по аудио или графической информации (как вам, например, автоматический поиск человека в базе данных по его фото или записанному голосу?). Разумеется, технология "Stream Computing" будет поддержана и будущими графическими процессорами ATI. Что получится у компании на практике, покажет, как обычно, время.