Внутри нее можно выделить следующие процессы: спиральная разработка архитектуры (от ядра системы к подключаемым модулям), постоянный выпуск прототипов (для контроля функциональности), выпуск наравне с бетами регулярных стабильных версий (для контроля ошибок), применение нисходящего программирования в микромасштабах (особенно для систем реального времени), набирающее популярность экстремальное программирование[Очень рекомендую посетить сайт www.xprogramming.ru] (постоянное взаимодействие с заказчиком; воплощение прежде всего тех функций, которые именно сейчас нужны пользователям; написание одного и того же кода парой программистов: один пишет - другой смотрит, потом меняются). На рисунке видно, как соотносятся эти методики.
   Итак, прогресс в области разработки программного обеспечения, несмотря на проблемы, сходные с проблемами конца 60-х, не стоит на месте. Мною проводились ежегодные исследования - какие методики применяют те или иные компании при разработке ПО. Были изучены корпоративные стандарты большинства крупных мировых компаний-разработчиков софта. В Индии: Motorola MEI, Infosys, Tata, Patni; в Японии: Hitachi, NEC, IBM Japan, NTT Data, SRA, Matsushita, Omron, Fuji Xerox, Olympus; в США: IBM, HP, Agilent, Microsoft, Siebel, AT amp;T, Fidelity, Merrill Lynch, Lockheed Martin, TRW, Micron Tech; в Европе: Siemens, Nokia, Business Objects, и многих других. В результате можно выявить несколько основных тенденций. Так, почти все из перечисленных компаний постоянно выпускают бета-версии, регулярно изменяют и дополняют документы, описывающие базовую архитектуру будущего ПО. Все проводят тестирование нового куска кода в рамках всего проекта (так называемый регрессионный анализ, который можно сравнить с порядком, установленным на конвейере компании Toyota, - если кто-либо из рабочих заметил дефект, он обязан остановить движение всего конвейера), чтобы не потерять достигнутой стабильности и функциональности.
   Однако видны и различия. В первую очередь выделяется Индия, где высок процент применения парного программирования, всегда имеется детальное описание проекта (для сравнения, в США только 30% проектов имеют этот документ), относительно низкий уровень применения генераторов кода. Япония в этом плане не слишком отличается от Индии. В Европе же гораздо чаще применяют методику микроциклов, больше развит выпуск бета-версий с независимым бета-тестированием. Таким образом, очевидна тенденция перевода «человекоемких» технологий в страны с дешевой рабочей силой и активное применение новых «технологических» (вроде кодогенераторов) решений вкупе со стремлением к сокращению сроков разработки в европейских странах.
 
 
   Япония, со своей традиционной методикой разработки ПО, стоит как бы в стороне, однако можно отметить высокий уровень организации бизнес-процессов, что отличает ее от Индии. Поэтому Япония имеет одно важное преимущество перед другими мировыми центрами разработки: при очень высоком уровне производства кода (почти 500 тысяч строк в месяц на человека, тогда как в Европе 436 тысяч, в Индии - всего 209 тысяч) поддерживается минимальный уровень ошибок - меньше 0,02 (!) ошибочных строчек на тысячу (в США - 0,4, в Индии - 0,26). Добиваются они этого активным повторным использованием уже отлаженного кода и наличием детальных описаний проектов.
   Анализируя результаты работы компаний, исповедующих различные подходы к организации процесса, можно выделить следующие факты. Компании, выпускающие первый прототип, обладающий всего лишь 20% функциональности, в итоге уменьшали количества ошибок на 27%. Далее, регрессионное тестирование снижает количество ошибок на 36%, уточнение архитектуры конечного продукта на каждом этапе дает 55% снижения. Кстати, ранний выпуск работающих прототипов повышает общую производительность программистов на 35%. А если прототипы выпускаются ежедневно, то она вырастает почти вдвое - вот какой эффект имеет осязаемость результатов своего труда!
   Итак, по разным оценкам, более 60% программного обеспечения создается на основе новых методов организации рабочего процесса. Только в 36% случаев применяется нисходящее программирование с детально проработанным планом и подробными спецификациями до начала его реализации. Можно смело утверждать, что мир разработки ПО окончательно изменился и большинство компаний применяют смесь из обычного программирования и итеративных методик. Это свидетельствует о том, что ориентация софтверных фирм на рынок «вообще» сменилась ориентацией на решение задач конкретного пользователя.
   При сегодняшнем росте сложности разрабатываемого ПО неизбежен и рост удельного количества ошибок в нем, поэтому стремление к постоянному наращиванию скорости производства кода уже не может являться главной целью. Удивительно низкий уровень ошибок японских производителей при сохранении традиционного подхода вряд ли может быть применим в других регионах, так как для этого необходимо перенести туда и японский менталитет. Качество же индийского кода, продолжая расти, все-таки пока остается на недостаточном для современных задач уровне.
 

ТЕХНОЛОГИИ: На холодный конец

 
   Автор: Константин Курбатов
   В начале двадцатого века паровозы доставляли пассажиров из Москвы в Санкт-Петербург за десять часов. При этом их КПД не превышал семи процентов. То есть использовалась только одна четырнадцатая часть энергии дров и угля, а остальные тринадцать обогревали атмосферу. Конструкторы тех лет придумывали самые изощренные способы, дабы сохранить тепло.
   Процессоры в современных серверных стойках тоже обогревают атмосферу, однако в данном случае конструкторы преследуют диаметрально противоположную цель - отвести от чипа как можно больше избыточного тепла.
   Современные высокопроизводительные процессоры греются не хуже ламп накаливания; «топовые» модели производят до 130 Вт тепла, а порой и больше. Теперь представьте, что в одном сервере толщиной в один юнит (1,75 дюйма, около 4,4 см) может находиться два таких процессора, а юнитов в стойке - до сорока двух штук. Количеству выделяемых стойкой калорий позавидует иная тепловая пушка, обогревающая производственные помещения.
 
   Но это не все трудности, встающие на пути инженеров-разработчиков высокопроизводительных систем. Вторая проблема - малый размер процессоров. Чтобы отвести тепло с небольшой площади радиатора, необходимо обдувать его очень большим количеством воздуха, а значит, вентиляторы должны быть высокопроизводительными и, как следствие, шумными.
   Компания Cray - всемирно известная своими суперкомпьютерами, пошла по иному пути. Например, в модели ETA-10 была применена система охлаждения процессоров жидким азотом, что позволило вдвое повысить производительность. С эффективностью такой системы не поспоришь, однако ее цена заставляет задуматься даже военные ведомства. Так что применение этой технологии пока остается уделом сверхплотных и сверхпроизводительных систем стоимостью несколько сот тысяч и даже миллионов долларов.
   Другой способ - закрытые кондиционированные шкафы, куда подается уже сильно охлажденный воздух. Но и здесь есть свои трудности. Во-первых, стоимость подобных шкафов и затраты на их эксплуатацию хоть и в разы меньше, чем у системы на азоте, тем не менее весьма высоки. Несмотря на кажущуюся простоту, приходится искать решения множества технологических задач, таких как равномерное распределение холодного воздуха в стойке, интенсивный отвод теплого воздуха, герметичность. Становится очень важным правильное распределение (не всегда совпадающее с желаемым) серверов внутри стойки и прочие тонкости. Да и КПД такой системы охлаждения тоже оказывается не на высоте: получается тройная передача тепловой энергии - сначала охлаждается фреон, который затем охлаждает воздух, а воздух, в свою очередь, охлаждает процессоры.
   Специалисты российской компании Kraftway, изучив проблему, подумали: а зачем вообще нужен воздух в этой системе «теплых взаимоотношений»? И решили охлаждать процессоры сразу фреоном кондиционера.
   Однако не все так просто. Подумайте, легко ли конфигурировать систему, насквозь пронизанную трубками с фреоном?! Поэтому было решено охлаждать не сами процессоры, которые располагаются в разных серверах по-разному, а сначала отводить тепло от раскаленных невероятной вычислительной мощностью ядер тепловыми трубками. То есть один ее конец располагается на самом процессоре, отбирая тепло, а другой - выводится на заднюю стенку сервера. Тем самым упрощается не только конструкция охладителя, но и процесс замены серверов: достаточно отвинтить тепловую трубку и вынуть корпус из стойки, не останавливая и не разбирая всю систему охлаждения.
   Устройство тепловой трубки тоже заслуживает упоминания. Как известно, в них применяются самые разные теплоносители (вода, эфир, фреон). Однако большинство из них не обладают достаточной производительностью. Даже вода, несмотря на свою впечатляющую теплоемкость, не может справиться с той скоростью отвода тепла, которая требуется для современных процессоров[Главная проблема - скорость циркуляции. Есть, однако, примеры и удачного применения воды. Компания Icebear System построила систему водяного охлаждения для стоек. Мне, правда, не приходилось встречать сообщений о ее реальных применениях. К тому же прототип этой системы был предназначен только для машин на базе процессоров Opteron]. Есть и другой момент: представьте, что трубка вдруг начнет протекать… это явно не обрадует электрические схемы материнской платы.
 
   Применение фреона позволяет добиться необходимой производительности и безопасности. В случае протечки он тут же улетучивается, а теплоемкость его испарения сравнима с водой. Устроена трубка следующим образом. Жидкий фреон по капиллярной губке направляется к процессору, там, испаряясь, поднимается к «утюжкам» (рис. 2), прикрепленным к постоянно охлаждаемой металлической колонне (о ней будет рассказано ниже), в которых он охлаждается и, конденсируясь, стекает вниз в горизонтальную часть трубки, где благодаря капиллярному эффекту попадает обратно к ядру процессора. Далее - по кругу. Надежность такой замкнутой и герметичной системы очень высока.
   Однако выведя процессорное тепло наружу, мы решили только половину задачи. Ведь его все равно нужно каким-то образом передать дальше, «на улицу». Тут и выступает на сцену вышеупомянутая колонна, к которой прикреплены горячие «утюжки» тепловых трубок. Несмотря на свой заурядный вид, она вовсе не является копией морозилки бытового холодильника.
 
   Внутри этой прямоугольной тепловой колонны расположена медная трубка с массой мельчайших отверстий[Как утверждают разработчики, для их изготовления пришлось применить лазерное сверление, ведь диаметр отверстий не превышает нескольких десятков микрон], в которую специальная помпа подает хладагент[Используется опять же фреон, однако любителям природы не стоит волноваться, - применяется безопасная для озонового слоя марка хладона (HFC R142b)]. Протекая по трубке, фреон через отверстия разбрызгивается на внутреннюю поверхность колонны. Испаряясь на ней, он отбирает тепло у «утюжков» и уходит по трубке к основному компрессору[Вообще, «теплый конец» - это стандартный внешний блок сплит-системы кондиционирования воздуха], который может быть расположен далеко за пределами стойки (например, на улице вместе с радиатором охлаждения хладагента). Дополнительная помпа (рис. 1) понадобилась для того, чтобы регулировать нагрузку: стойка с серверами может быть заполнена только частично, и охлаждать колонну целиком - пустая трата энергии. С другой стороны, основной компрессор кондиционера работает на постоянных оборотах, и снижать их недопустимо, так как он может просто-напросто сгореть (можно вспомнить частые случаи перегорания компрессоров холодильников в сельской местности из-за пониженного напряжения). Поэтому оказалось рациональнее (хоть это немного и усложнило конструкцию) поставить дополнительную помпу непосредственно в стойке и управлять уже ее оборотами. Таким образом, инженеры продолжают бороться за общее повышение КПД системы.
   Итак, получается двойная, а не тройная система охлаждения. Сначала нагревается непосредственно фреон, минуя воздушную стадию (нагревом корпуса трубок можно пренебречь), и уже он отдает тепло окружающему воздуху, причем далеко за пределами серверной стойки.
   Если мы избавились от воздушного охлаждения процессоров, то нет необходимости в большом количестве вентиляторов внутри каждого сервера. По утверждению разработчика, для охлаждения всех оставшихся схем, включая жесткий диск и блок питания, достаточно лишь одного вентилятора на корпус. Это радикально снижает шум, что позволяет размещать такие стойки внутри рабочих комнат, не вынося их в специальные помещения.
   Представители компании Kraftway очень неохотно отвечали на вопрос о возможной стоимости подобной системы. Ссылаясь на то, что пока существует только прототип и многие решения еще не вышли на стадию массового производства, говорить о конкретных расчетах слишком трудно. Однако мне удалось в приватной беседе выяснить, что ориентировочная стоимость в расчете на один процессор не должна превышать пятидесяти долларов (не забывайте, что речь идет о многопроцессорных системах с количеством чипов около сотни). Это, согласитесь, уже близко к цене обычных медных радиаторов и, разумеется, гораздо меньше стоимости систем на жидком азоте.
   Похоже, Россия становится не только «родиной слонов» и великих комбинаторов, но и местом рождения остроумных технических решений для современных высокопроизводительных вычислительных систем. Возможно, недалек тот день, когда первые строчки знаменитого Top 500 будут занимать компьютеры, построенные именно у нас.
 

ТЕХНОЛОГИИ: Сколько мегапикселов можно разместить

 
   Автор: Юрий Ревич
   И фотолюбители, и журналисты, пишущие о цифровой фотографии, как «Отче наш» затвердили, что количество мегапикселов в матрице не главная характеристика цифрового фотоаппарата. Но ни в одном из известных мне источников вы не найдете точного ответа на вопросы, которые возникают по этому поводу у неискушенного покупателя цифровой камеры.
 
   Самый главный вопрос - почему? Интуитивно кажется, что чем больше мегапикселов, тем камера лучше, и маркетологи вовсю играют на этом заблуждении. В то же время их оппоненты из пишущей братии в лучшем случае что-то промямлят про низкую чувствительность и повышенный уровень шумов. «Чайник» покупает камеру, убеждается, что никаких шумов там нет, и лишний раз приходит к справедливому выводу, что верить печатному слову не следует. Это действительно так практически для любой из популярных моделей камер в ценовом диапазоне от $200 - исключая, разумеется, экстремальные условия съемки при низкой освещенности, когда никто ничего хорошего и не ждет. Но чем 8-мегапиксельная «мыльница» Nikon Coolpix P1 тогда хуже 6-мегапиксельного Nikon D70? Неужели, кроме зеркального видоискателя, сменной оптики и количества функций - то есть, грубо говоря, удобства и некоторых специальных возможностей, - ничем не хуже? За что тогда почти втрое большая цена - только за зеркало и возможность подключения продвинутой внешней вспышки?
   Другой важный вопрос, который задает себе фотолюбитель, особенно если его в техническом вузе научили инженерному подходу к действительности: а сколько их надо, этих мегапикселов? И в каких случаях это действительно важно, а в каких нет? Недавно Роман Косячков показал мне карточку 10х15, отпечатанную на термосублимационном принтере. Отличного качества отпечаток, хоть в журнале помещай. Секрет состоял в том, что исходное изображение скачано из Интернета, и его размер был 700х466 точек - 0,3 мегапиксела! Даже если принять сей факт за лишнее подтверждение того, что нас всех обувают, как лохов, - но не в такой же степени?!
   Далее мы попробуем в этом разобраться. И для начала подчеркнем, что физический размер матрицы и количество мегапикселов в ней - это параметры, которые имеют важное значение каждый сам по себе, вне прямой зависимости друг от друга.
 
Почему большие матрицы лучше маленьких
 
   Рассматривать влияние физических размеров матрицы на качество снимков мы все же начнем со взаимосвязи этого параметра с числом мегапикселов - то есть сначала разберемся с чувствительностью и шумами. Действительно, продвинутая «мыльница» Olympus Camedia C-770 имеет 4-мегапиксельную матрицу типоразмером 1/2,5”. Ее линейный размер - 5,76х4,29 мм (см. таблицу), и простейший подсчет показывает, что на один элемент приходится квадратик 2,5х2,5 мкм. Эти величины вполне сравнимы с длиной волны видимого света (0,7 мкм для красного), причем надо иметь в виду, что из расчетной площади на собственно сенсор приходится едва ли половина, остальное занимают электрические схемы. То есть в размеры одного сенсора укладывается всего-навсего пара световых волн!
 
 
   Совсем другое дело в случае полноразмерной матрицы (36х24 мм). Даже для 16-мегапиксельной камеры (Canon Mark II) на каждый сенсор приходится 7,2х7,2 мкм, вдобавок площадь, занятая собственно сенсором, там существенно выше. Так почему я утверждаю, что в настоящее время фактор шумов не имеет особого значения? А потому, что прогресс не стоит на месте - маленькая матрица, выпущенная сегодня, на много порядков лучше, чем большая, но изготовленная в году этак 1999-м. И сами матрицы, и технологии подавления шумов стали совершеннее. Разумеется, при непосредственном сравнении C-770 проиграет Mark II, но так ли уж это важно для тех, кто покупает С-770? Учтем еще, что даже заметный шум скрадывается при печати на принтере. Наконец, прогресс в этой области в стенку совсем не уперся - пока нет особых причин, по которым новые поколения матриц не должны шуметь все меньше и меньше.
 
Глубина резкости
 
   Еще одно обстоятельство, которое часто упоминают, рассуждая о недостатках небольших матриц, - чрезмерная глубина резкости. Фокусное расстояние «нормального» объектива примерно равно диагонали матрицы (или чуть превышает ее). Поэтому «нормальным» для того же С-770 будет объектив с фокусным расстоянием около 9 мм, что мы и наблюдаем - камера имеет 10-кратный зум и диапазон фокусных расстояний 6,3-63 мм (38-380 мм в 35-миллиметровом эквиваленте), то есть немного в сторону широкоугольности при минимальном зуме. Глубина резкоизображаемого пространства находится в квадратичной зависимости от фокусного расстояния. Не углубляясь в подробности, приведем только конечную формулу этой функции:
 
   где H - гиперфокальное расстояние (расстояние до передней границы резкоизображаемого пространства при наводке на бесконечность), f - фокусное расстояние объектива, F - значение диафрагмы, а #948; - величина так называемого допустимого кружка рассеяния, которая для кадра 24х36 мм обычно принимается равной 0,05 мм. Матрица у нас много меньше пленочного кадра, поэтому примем #948; = 0,01 мм. Если подсчитать гиперфокальное расстояние, например, при фокусном расстоянии 7 мм и диафрагме 2,8, которая имеет место для рассматриваемого объектива, то получим 1,75 м. Таким образом, все, что дальше 1,75 м, будет отображаться резко без специальной наводки! На самом деле, как мы увидим дальше, нас устроит допущение относительно кружка рассеяния и в 0,05 мм, то есть фактически такой камерой можно снимать, вообще не наводя на резкость на коротком фокусе - зачем? Оттого-то и снимки выходят плоскими и невыразительными, объекты теряются на фоне, и хороший портрет или предметный снимок сделать такой камерой трудно.
 
   Конечно, на длинном фокусе вы получите значительно большие величины. Но на максимальном фокусном расстоянии никто портретов не делает - при обычных освещенностях нужен штатив, да и расстояние слишком велико. Для обычного «портретника» характерно фокусное расстояние около 100 мм, что в пересчете на данную матрицу составит 15 мм, и приемлемого размытия фона вы не получите. При кружке рассеяния 0,05 мм гиперфокальное расстояние составит всего 1,5 м, а такой кружок при увеличении в двадцать раз (для получения снимка размером 10х15) даст минимально различимые детали снимка 1 мм, что визуально воспринимается не как размытие, а лишь как некоторая нечеткость. Обычный (f = 50 мм) достаточно светосильный (Fmax = 2) объектив для компактной пленочной камеры имеет гиперфокальное расстояние 25 м при том же кружке рассеяния. Но даже там получить достаточно размытый фон на портрете не всегда удается.
   Это, конечно, крупный недостаток. Зато, во-первых, снимки из категории «групповой портрет на фоне Колизея», наоборот, автоматически получаются качественными и специально об управлении глубиной резкости заботиться не нужно. Поэтому неопытному любителю это может и не показаться недостатком. Да и далеко не любитель Козловский снимает уже страшно сказать сколько лет «Олимпусом» с матрицей 2/3”, диагональ которой (11 мм) непринципиально отличается от рассматриваемой, и ничего, не жалуется. А во-вторых, это может показаться даже достоинством, поскольку аппараты получаются компактными - не надейтесь встретить аппарат толщиной с записную книжку, имеющий матрицу размером с пленочный кадр.
 
Вот оно
 
   Настоящая собака зарыта в принципиальном ограничении на качество снимков, которое накладывает разрешающая способность объектива, и влияние этого фактора растет пропорционально уменьшению размеров матрицы. Именно в этом настоящее преимущество Nikon D70 с матрицей 23,7х15,6 мм перед Nikon Coolpix P1 с матрицей 1/1,8” (5,3х7,2 мм). Обратимся к цифрам и фактам.
   Качественные и дорогие профессиональные объективы для камер 6х7 см имеют резкость в середине кадра приблизительно 70-80 лин./мм, по краям - всего до 40. За счет уменьшения поля изображения и диаметра линз приличный 50-миллиметровый объектив для камер 36х24 дает 90-100 лин./мм. Если мы приложим такую величину (которая примерно соответствует разрешающей способности пленки) к миниатюрной матрице и еще раз посмотрим на таблицу физических размеров, то увидим, что в длинную сторону уложится всего-навсего 500-800 линий, в короткую - 400-600. Выходит, изображение на «мыльницах» эквивалентно примерно полмегапикселу? Нет, конечно, это не так. Потому что мы не учитываем двух обстоятельств: во-первых, разрешение объективов в цифровых камерах выше, а во-вторых, нужно специально рассмотреть вопрос о том, как правильно пересчитывать линии в пикселы.
 
Реальная разрешающая способность…
 
   Объективы для маленьких матриц при одинаковой светосиле должны иметь меньший диаметр линз, так как поле изображения у них существенно меньше. Потому их производство упрощается, что позволяет достигать более высокого качества при меньших затратах. Кроме того, разрешение объективов для обычных камер снижается за счет интерференционных явлений в эмульсионном слое, которого матрицы лишены. То есть следует ожидать, что объективы для маленьких матриц будут иметь более высокое разрешение, и это действительно так. Хотя маркетологи редко расщедриваются на то, чтобы обнародовать такие подробности, как разрешение объектива, по некоторым просачивающимся из недр корпораций сведениям можно установить, что конструкторы объективов для приличных камер среднего класса ориентируются на разрешение порядка 130-150 лин./мм. Кое-какие эксперименты с фотографированием миры качественными бюджетными камерами Canon и Sony показывают, что при 15-процентной контрастности разрешение может достигать 120 лин./мм["Четырехмегапиксельный конструктор (сравнение камер Canon G2 и Sony S85)». При интерпретации приведенных в статье результатов не забывайте, что указываемые 1400-1600 штрихов на длинную сторону матрицы 1/1,8” надо делить на два (см. врезку)]. Похожий на правду результат также приведен, например, в тесте передовой для своего времени камеры Olympus Camedia E-10, которая имеет Мп матрицу размером 2/3”. Для нее фотографирование миры показало разрешение в привычных для нас единицах лишь чуть больше 100 лин./мм. Лучший результат получен на Olympus Camedia C-5050[Журнал «foto amp;video» №5, май 2003 г.] - при матрице 1/1,8” разрешение по короткой стороне составило 1800 двойных штрихов, что дает 170 лин./мм.
 
Что такое разрешающая способность?
 
   Разрешающая способность объективов - это максимальное количество линий на миллиметр в поле изображения, при котором линии еще не сливаются. Формулировка эта не очень строгая, поскольку не всегда можно точно определить, где кончается черная линия и начинается белый промежуток. На практике линии по мере уменьшения их толщины сливаются в сплошное серое поле постепенно. Чтобы получить объективную характеристику, надо рассматривать не одну численную величину, а график зависимости контраста между серединой черной линии и серединой белого промежутка от количества линий на миллиметр (причем линии в этом методе нечеткие, и их яркость меняется синусоидально). Такой график называется MTF (Modulation Transfer Function). Методика с использованием MTF позволяет оценить, кроме собственно разрешения (которое оценивается по величине контраста 1,1:1, то есть при 10-процентной разнице в яркости линий), как минимум еще одну не менее важную характеристику - наклон кривой MTF. Два объектива с одинаковым разрешением (скажем, 50 лин./мм) могут иметь разные кривые MTF. У одного график опускается сразу от 1 лин./мм вниз, плавно достигая 10% при 50 лин./мм, а у другого - лишь начиная с 40 лин./мм круто падает вниз. Естественно, при формально одинаковой разрешающей способности второй объектив даст гораздо более жесткий, резкий рисунок. Но чтобы не путаться, мы в эти тонкости вдаваться не будем.