Представитель Шуры Люберецкого в ЖЖ (brat_luber) wrote,
Представитель Шуры Люберецкого в ЖЖ
brat_luber

Category:

Про вычислительную мощность

Развитие нынешней вычислительной техники идет по пути наращивания вычислительных возможностей в рамках существующей архитектуры – больше гигагерц тактовой частоты, больше операций в секунду, больше гигабайт памяти… Для чего нужны такие мощности применительно к “домашнему” персональному компьютеру? Для того, чтобы отрисовывать “окошки” Windows или просчитывать несложную логику в играх, вполне достаточно чего-нибудь наподобие первого “Пентиума”, а то “четыреста восемьдесят шестого”.

Будем считать, что все программы написаны “хорошо”, никто не пытается производить сложные вычисления только по причине криворукости программиста (луч анального поноса посылается фирме Lotus). Тогда все задачи, требующие большого количества вычислений, разбиваются на две категории – “мультимедиа”, то есть работа с графикой, видео, цифровым звуком, синтез 3D-графики и “действительно сложные задачи” - например, расчет индекса Доу-Джонса или цены на бананы в Гондурасе.

“Мультимедийные” задачи, можно сказать, естественны для домашнего компьютера. Конечно, я ни разу не сторонник той мысли, что домашний компьютер должен быть гибридом медиацентра и игровой приставки с выходом в Интернет, но возьмем это в качестве примера. Мало кто рассчитывает дома атомные бомбы, а вот посмотреть фильм или поиграть в Doom – милое дело. Давайте оценим сложность, к примеру, декодирования JPEG. Предположим, что все вычисления выполняются на обычном “универсальном” процессоре. Тогда достаточно оценить скорость выполнения двух наиболее сложных операций – “деквантизации”, представляющей собой 64 умножения и обратного косинус-преобразования. Если косинус-преобразование ускорить тем же способом, что и в случае быстрого дискретного преобразования Фурье, то в конечном итоге для декодирования каждого блока 8×8 понадобится 106 мультипликативных и 42 аддитивных операции. Точно так же оценивается и количество операций при кодировании JPEG. Заметьте, что я намеренно считаю сложения и умножения “порознь” - умножение зачастую - гораздо более сложная операция, обычно занимающая намного больше тактов процессора.

Все широко используемые видеокодеки основаны на той же идее дискретного косинус-преобразования и “квантизации”, поэтому оценки скорости этих операций дают нам представление о числе операций, необходимом для просмотра видео на компьютере. Понятно, что это – довольно требовательная к ресурсам задача. Например, на стоящем в моем ноутбуке Pentium M с частотой 1,7 ГГц просмотр DVD-фильма требует 30-50% процессорного времени. Стоимость “минимального” процессора, способного в реальном времени декодировать MPEG-2 (какой-нибудь Pentium III), получается довольно высокой (а если учитывать и “обвязку” в виде памяти и контролеров привода – очень и очень существенной). При этом кажется непонятным, почему китайский DVD-плеер может стоить менее 30$, а микросхема, используемая в нем в качестве процессора, стоит около 10$.

Дело в том, что совершенно необязательно считать “элементарными” операциями обычные арифметические операции. Если рассмотреть все то же косинус-преобразование с квантизацией как функцию, “входом” которой являются 512 бит (таблица 8×8 байт), и с теми же 512 битами на выходе, то можно составить ее таблицу значений. Можно составить, например, схему из функциональных элементов И, ИЛИ и НЕ, которая будет реализовывать эту функцию. Есть даже методы автоматического синтеза таких схем, например, асимптотически оптимальный (то есть строящий схему с довольно близким к минимальному числом элементов) метод Лупанова. Реализовав такую схему “в железе”, например, как модуль процессора, получим возможность вычислить заданную функцию за один такт.

Конечно, пример выше – своего рода жульничество. Нам никто не разрешит использовать такое количество элементов, которое возникнет в рассмотренной выше схеме – ее сложность будет сопоставима с “полноценным” процессором. Практическая ценность его близка к нулю, и сравнима с таковой, например, у программы для машины Тьюринга или чего-нибудь Brainfuck-подобного. В реальности поступают проще. Достаточно легко, к примеру, реализовать любой конечный автомат. Кроме этого, можно разбить задачу на более простые операции с более простыми схемами. Таким образом можно упростить схему. При этом скорость ее работы все равно останется очень высокой. Например, сделанный “на скорую руку” JPEG-кодер на довольно простой и “медленной” ПЛИС фирмы Xilinx способен обработать в секунду порядка 3 мегапикселей (тактовая частота – всего 50 МГц), при этом он состоит примерно из 7000 элементов. Для сравнения, “универсальный” процессор Zilog Z80 состоял из 3500 элементов, но ни о каком JPEG-кодировании на нем речь даже не идет. Если же вместо ПЛИС использовать специально разработанную микросхему, то скорость повысится на порядок. JPEG-кодер (какой-нибудь Zoran COACH или Ambarella) в любом современном цифровом фотоаппарате-мыльнице способен за одну секунду обработать не менее 20-30 мегапикселей. Это сравнимо с производительностью Pentium IV, но на порядок выгоднее и с точки зрения стоимости (напрямую зависящей от числа элементов), и с точки зрения энергопотребления.

Все современные процессоры представляют собой, грубо говоря, калькуляторы. Конечно, и у них существуют инструкции, позволяющие быстро выполнять некоторые характерные для “мультимедиа” операции, например, набор инструкций MMX в процессорах персоналок. Тем не менее, крайне важно сохранить универсальность центрального процессора, не превращая его в начинку для фотоаппарата или DVD-плеера. Для таких вычислений, как матричные операции для 3D-графики или преобразование Фурье для кодирования графики, уже давно применяют и более специализированные процессоры – соответственно, видеоускорители или аппаратные MPEG-декодеры. Даже первые “Pentium”, снабженные аппаратным декодером MPEG, были способны показывать фильмы с DVD или VideoCD. Стоит упомянуть и компьютеры Amiga, которые в начале 90-х были единственными “персоналками”, способными обрабатывать видео – благодаря специализированным сопроцессорам. Тактовая же частота центрального процессора составляла всего лишь 14 МГц. Конечно, никто не запрещает использовать для тех же вычислений центральный процессор, но специализированные справятся с ними гораздо быстрее.

Собственно, использование сопроцессоров для некоторых сложных операций – давно не новость. Гораздо интереснее может выглядеть другая, менее очевидная вещь. Уже достаточно давно выпускаются ПЛИС – программируемые логические интегральные схемы, специальные микросхемы, состоящие из отдельных “кирпичиков”, каждый из которых может быть элементом И, ИЛИ и НЕ. Связи между этими модулями задаются “прошивкой” микросхемы. Именно с использованием ПЛИС моделируются “заказные” микросхемы (тут передаю горячий привет [info]corvus_bkgk). В зависимости от “прошивки” ПЛИС может реализовывать самые различные функции.

Удивительно, но до использования перепрограммируемых ПЛИС в персональном компьютере “дошли” только у нас в России. Многие “спектрумисты” слышали про “клон” ZX Spectrum под названием Sprinter. На самом деле Sprinter – в корне отличающийся от Spectrum компьютер, способный только эмулировать последний. Более того, Sprinter может имитировать поведение несовместимых между собой “клонов”, и может работать в “своем” режиме, превосходящем по возможностям любой другой Spectrum или его клон. Это достигается путем использования в качестве системной логики в этом компьютере нескольких ПЛИС, “прошивка” которых может заменяться “на лету”, во время работы компьютера.

Довольно “объемистая” ПЛИС может выполнять функции, например, видеоускорителя, или декодера MPEG, и даже сопроцессора для любых других операций, например, криптографических. Конечно, использование ПЛИС в “персоналках” потребовало бы специальных библиотек, наподобие DirectX, но могло бы дать немалый выигрыш в вычислительно сложных операциях.

Не буду говорить об общей “кривости” архитектуры современного PC, состоящей преимущественно из тяжелого наследия уродца фирмы IBM и ночного кошмара фирмы Intel, не буду издеваться над тем, что самые современные процессоры состоят в основном из “костылей и подпорок” ради совместимости с Intel 8086, но замечу, что сейчас увеличение параметров процессоров происходит с большим трудом. Тактовая частота уже не увеличивается, растет лишь количество процессорных ядер на одном кристалле. Боюсь, что привычные нам “пни” уже достигли предела в своем развитии. Вполне возможно, что уже в недалеком будущем появятся первые “реконфигурируемые” вычислительные модули.

Кстати, на ПЛИС можно эмулировать и “обычные” процессоры. Например, уже существует несколько Open Source (!) реализаций все того же Z80. Интересно, чем будут мериться школьники на форумах, когда “апгрейд” процессора превратится в простое “скачивание” новой прошивки из Интернета?

Запись опубликована в блоге Шуры Люберецкого. Вы можете оставлять свои комментарии там, используя свое имя пользователя из ЖЖ (вход по OpenID).

Tags: паяльный бред, программирование
Subscribe

  • О фактчекинге

    Наткнулся на американскую, разумеется, статью “Фактчекинг речи Владимира Путина в ООН”:…

  • Неоламаркизма псто

    Из школьной биологии мы твердо знаем, что приобретенные признаки не наследуются. Кто-то вспомнит про опыт Вейсмана, кто-то задаст простой вопрос…

  • Про псевдонауку

    Пишу сейчас довольно большой и спорный пост, пока не буду раскрывать, о чем – скажу лишь, что залез в википедию (фу, бля – скажете вы и…

Comments for this post were disabled by the author