понедельник, 5 августа 2013 г.

Для чего нужна вычислительная мощность?

Часто в рекламных сообщения о выпуске нового процессора/микроконтроллера в число главных достоинств ставят вычислительную мощность. И вот в очередной раз читая книгу "The Definiteve Guide to ARM Cortex-M3" задался вопросом "а зачем нам собственно эта вычислительная мощность?". В современном смартфоне её во много сотен тысяч раз больше чем на космическом корабле Буран, облетевшем землю и севшем на аэродроме полностью автоматически. А мы же используем это для запуска птичек по свиньям.


Embedded realm

Именно тут возникает больше всего сомнений "а зачем нам мегафлопсы в микроконтроллере, который управляет дисплеем и магнетроном в микроволновке, ах да, ещё кнопки опрашивает". На самом деле в микроволновке - незачем. И ещё в большинстве применений совершенно не нужна большая вычислительная мощность. Для примера: проект на ARM Cortex-M3 работающем на 100МГц, включает в себя TCP/IP стек, опрос аналоговых входов, работу с внешней памятью и micro SD, не сильно сложный последовательный интерфейс на bit-bang, кое-какая логика между всем этим. Это всё под простенькой RTOS. 3% процессорного времени занято. Всё остальное время процессор бездействует. Может подскочить до 5% - это парсинг текстовой команды в простом интерпретаторе через telnet. Всё остальное время процессор вертится в idle task. Отлично, т.к. тут можно включить спящий режим и экономить много энергии батареек. Пригодился бы SSL, но там тяжёлые алгоритмы шифрования и для них как правило используются отдельные криптографические процессоры, либо в составе микроконтроллера, но тоже отдельная сущность, а не вычисление на основном CPU. Запомним этот результат и пойдём дальше.

Смартфон 

Тут уже интереснее. Принципиально современный смартфон ничем не отличается от нормального сотового телефона какие были 10 лет назад. Только 10 лет назад даже Cortex-M3 из предыдущего параграфа не было. А сейчас нам нужен Cortex-A9, да 2 ядра, а лучше 4. Но зачем? Для видео высокого разрешения и игр. Больше нет никаких задач, в которых нужная высокая вычислительная мощность. Хотя найдутся те кто невостребованную вычислительную мощность использует на благо человечества в распределённых вычислениях, но этот случай не рассматриваем. Но чем принципиально отличаются те самые птички от, скажем, змейки что была на старых нокиах? btw, той самой змейки мне очень не хватает. Графика, шмафика - не убедили. Не настолько она сложнее чтобы требовать для своей работы в тысячи раз больше вычислительной мощности. А для свободных видеокодеков аппаратные декодеры уже давно чуть ли не в микроконтроллеры встраивают, в виде DSP и собственно кодека. Опять же отдельная сущность - DSP - вместо основного CPU.

Персональный компьютер

Изначально делался для офисных задач. Довольно быстро железа стало хватать для этого. Потом мультимедиа. Но опять десяток лет и любые фильмы и музыка в твоём компе бесплатно без смс. Потом игры. Я не слежу за этим, но кажется сейчас уже для самых новых выходящих игр стало достаточно не самого нового железа. Ещё лет 10 и техпроцесс производства полупроводниковых приборов упрётся в размер одного атома. Дальше наращивать вычислительную мощность просто не получится, поэтому не так давно взялись распараллеливать вычисления между ядрами, а не тупо повышать тактовую частоту. 20 лет назад векторные процессоры не взлетели т.к. не были нужны. Тогда людям было нужно документы печатать и в пэкмэна играть, а суперкомпьютеры нужны только безумным учёным. Но чем в конечном счёте отличается пэкмэн от какого-нибудь современного шутера? Теми сотнями тысяч раз, которыми отличается вычислительная мощность железа?

Абстракция - главное слово в electrical engineering & computer science

Когда говорится про вычисления и вычислительную мощность у меня сразу возникает ассоциация с научным расчётом сложных явлений, вроде генома в биологии или мировой экономики. Т.е. непосредственно для каких-то вычислений. Но в современном мире большая часть вычислительных мощностей тратится не на это, а на поддержание огромного слоя абстракций. Вспомните пример из первого параграфа. Это не самое простое устройство, хотя и не сложное вовсе. Но в нём нет того безумного числа абстракций между процессором и приложением который есть, например, в смартфоне. В нём нужен Cortex-A9 не для расчёта траектории движения всех планет в видимой части вселенной, а для запуска Linux. Потому что для передачи байта по TCP/IP в голом железе нам надо на 3 месяца закопаться в даташит на процессор (1000 страниц эдак с описанием сотен тысяч битов для настройки всей периферии)  и ещё столько же в RFC, описывающие сетевой стек. А потом на этот Linux посадить Java виртуальную машину потому что писать на Си под Linux - дорого, память там течёт, да и вообще много низкоуровневых задач, отвлекающих от конечной цели - запуска птички в свинку. В силу ограничений вычислительной мощности человеческого мозга мы нуждаемся в таких абстракциях. Это действительно сложно - отправить байт по сети. Огромное количество регистров с сотнями битов, которые надо выставить верным образом чтобы всё заработало. Одному человеку в современном мире не осилить тех самых птичек на голом железе, или хотя бы в простой RTOS. И редкая компания осилит иметь такой штат сотрудников. Некоторые могут - они и производят те самые смартфоны и SDK к ним чтобы дать людям максимально простую возможность писать приложения, не погружаясь в принцип работы всего устройства.  Сложно это и дорого. Вот так в современном мире "двигателем прогресса" является обслуживание всё большего числа новых абстракций, из которых непосредственно прикладную задачу выполняет 5% ресурсов. Остальные 95% обслуживают абстракции, которые ещё и дырявыми бывают. Всё как в реальной жизни. А значит направление это верное и эффективное, ибо человек все идеи заимствует из окружающего мира, порой сам об этом не подозревая. Но об этом надеюсь написать отдельную статью.

Комментариев нет:

Отправить комментарий