Лэнс Фотноу - Золотой билет
Независимо от того, равны классы P и NP или не равны, изучение проблемы P и NP поможет выработать подход к решению данных вопросов.
Параллельные вычисления
В 1965 году Гордон Мур заметил, что число базовых элементов микросхемы – транзисторов – стремительно возрастает с каждым годом. Мур выдвинул смелое предположение: в последующее десятилетие количество транзисторов на одном кристалле каждые два года будет увеличиваться вдвое. Десятью годами дело в результате не ограничилось; закон Мура – так окрестили правило – действует и по сей день, и в ближайшие годы тенденция, похоже, сохранится.
Долгое время закон Мура гарантировал также повышение скорости. Однако примерно к 2005 году на сцену выступили некоторые физические ограничения. Дальнейшее ускорение представлялось нецелесообразным, так как возросшие энергозатраты перевешивали все преимущества быстрых процессоров. Для оптимизации потребления энергии процессоры пришлось даже немного замедлить.
И все же транзисторов на кристалле становится все больше и больше. Зачем это нужно? Чтобы запускать сразу несколько вычислений одновременно: распараллеливая работу, мы значительно уменьшаем время решения задач.
Возьмем для примера суперкомпьютер IBM по имени Уотсон, который в феврале 2011 победил в американской телевикторине «Jeopardy!». Уотсон состоит из 90 серверов IBM Power 750 по 4 процессора Power 7 в каждом. Один процессор Power 7 содержит восемь более мелких процессоров, или ядер, и может параллельно вести сразу восемь вычислений. В итоге получается 32 ядра в одном сервере и 2880 во всем компьютере, так что Уотсон может запускать 2880 процессов одновременно. Неудивительно, что он анализирует варианты ответа быстрее, чем соперники, и успевает нажать кнопку миллисекундой раньше! Впрочем, если производительность компьютеров продолжит расти по закону Мура, то уже через несколько лет 2880 параллельных процессов покажутся нам сущим пустяком; в ближайшие десятилетия могут появиться компьютеры с миллионами и даже миллиардами ядер.
Для организации такого количества параллельных вычислений нам придется призвать на помощь всю теоретическую информатику. Как научить компьютер распределять вычисления по нескольким ядрам и серверам, добиваясь при этом наилучшей производительности? Вероятно, нам следует модифицировать основные языки программирования, чтобы из программы можно было обращаться к разным ядрам? Но тогда как это сделать лучше всего?
К проблеме равенства P и NP тоже пытались применить распараллеливание. Помните Веруку Солт? Девочку из книги «Чарли и шоколадная фабрика», о которой мы говорили в первой главе? Верука очень хотела найти золотой билет, а все билеты были спрятаны в шоколадных плитках. Ее отец – владелец ореховой фабрики – распараллелил задачу, разделив шоколадки между всеми своими рабочими, которых у него было более ста. Так почему бы не сделать то же самое с задачами из класса NP? Например, распределить все потенциальные клики между разными ядрами и даже компьютерами? Иногда время перебора действительно может заметно сократиться – например, с нескольких недель до нескольких часов, однако некоторые NP-задачи и после распараллеливания останутся такими же неприступными. Будь у нас даже миллион компьютеров с триллионом ядер, каждое из которых выполняет квинтиллион операций в секунду, – для поиска клики размера 50 среди 20000 жителей Королевства все равно потребовалось бы в гугол раз больше лет, чем живет наша вселенная (а гугол, как уже говорилось, – это единица и сто нулей). В мире, где можно распараллелить любой процесс, вопрос о равенстве P и NP по-прежнему актуален.
А как обстоит дело с задачами из P? С теми, которые можно решить эффективно? Сумеем ли мы в полной мере воспользоваться всеми преимуществами распараллеливания? Как правило, эффективные алгоритмы действительно удается модифицировать, идет ли речь о простых арифметических задачах или о поиске кратчайшего пути и максимального числа паросочетаний; для всех этих задач вычисления с успехом распределяются по большому количеству ядер.
Класс задач, которые можно быстро решить в параллельном режиме, тоже получил обозначение: его назвали NC, или Nick’s Class, – в честь пионера параллелизации алгоритмов Николаса Пиппенджера. Если P = NP (так ли это, мы пока не знаем), то задачи, для которых существует эффективный алгоритм, в параллельном режиме решаются в разы быстрее. А если NP = NC (что, опять-таки, пока находится под большим вопросом), то и любую переборную задачу из NP тоже можно решить практически мгновенно, распараллелив вычисления по разным машинам и ядрам, – т. е. мир, где NP = NC, еще более совершенен, чем тот, где P = NP. И хотя классы NC и NP вряд ли окажутся равны, отношения между ними не менее загадочны, чем отношения между P и NP.
Большие данные
Каждую секунду мы загружаем 35 минут видеоматериала на YouTube, создаем 1600 сообщений в Twitter, 11000 постов в Facebook, 50000 поисковых запросов в Google и отправляем 3000000 электронных писем (из которых 90 процентов – это спам).
Телескоп «Хаббл» вращается на околоземной орбите и фотографирует космос, отсылая на Землю 200000 байт информации в секунду (один байт – это примерно один символ алфавита). На смену «Хабблу» планируется запустить «Джеймс Уэбб» с огромным параболическим зеркалом, который будет отправлять уже 3500000 байт в секунду.
Большой адронный коллайдер – самый крупный ускоритель частиц на планете – разместился близ границы Швейцарии и Франции. Каждую секунду он создает примерно полмиллиарда байт информации – и так изо дня в день, из года в год, а в году, между прочим, 31 миллион секунд!
Коллайдер построили в Европейском центре ядерных исследований (ЦЕРН). В пару к нему была создана сверхмощная вычислительная сеть, которая распределяет потоки генерируемых коллайдром данных по серверам в тридцати четырех странах; обработкой и анализом этих данных занимаются ученые по всему миру.
Описание ДНК человека занимает примерно 55 миллионов байт. Для хранения ДНК всех жителей Земли, т. е. семи миллиардов человек, потребуется что-то около 400 квадриллионов байт. А если считать не только людей?
Мы умеем быстро и довольно дешево создавать самые разнообразные датчики, которые могут измерить все, что угодно, – температуру, звук, движение, уровень радиации. Каждый датчик постоянно генерирует какую-то информацию, а в одной системе их может быть несколько тысяч – как в американской армии, которая буквально «тонет в датчиках и захлебывается мощными потоками данных».
Информация не всегда приходит из внешнего мира. Научные эксперименты часто оказываются слишком сложными и дорогими, и для понимания физических, биологических и химических процессов активно используется компьютерное моделирование. Результат – очередные колоссальные объемы данных, которые ждут не дождутся, когда их проанализируют.
Как правило, большая часть получаемой информации – мусор. Случайные помехи, избыточные данные. Отобрать полезное и ценное совсем не просто, а потом все это нужно еще правильно истолковать! Вот если бы P оказалось равно NP, у нас бы автоматически появились алгоритмы, которые отсеивали бы все лишнее и фильтровали информацию по принципу «бритвы Оккама», давая нам возможность лучше понимать и предсказывать развитие событий.
Но поскольку в совершенном мире мы, скорее всего, не живем, алгоритмы приходится изобретать или переделывать под конкретные цели. Поиск ключевой информации в больших массивах данных – задача крайне важная и чрезвычайно трудоемкая.
Впрочем, иногда большие данные – это не катастрофа, а благо, и в особенности если речь идет о машинном обучении. Алгоритмы тренируются, получая на вход различные выборки данных; чем больше информации, тем умнее станет алгоритм. В распоряжении Google имеется колоссальное число обучающих примеров, и поэтому он так хорошо отсеивает спам, распознает голоса и переводит тексты.
В ближайшем будущем у нас уже накопится достаточно данных, чтобы на порядок лучше проводить медицинскую диагностику, создавать «умные» сети с пониженным потреблением энергии и управлять автомобилем без участия водителя, а также продвигаться к новому пониманию природы явлений. На плечи ученых ляжет труднейшая задача – интерпретировать эти данные и научиться использовать их для повышения качества жизни.
Интернет вещей
Почти два миллиарда жителей планеты общаются через интернет: пишут электронные письма и сидят в социальных сетях. Вообще же, общение, работа, учеба и развлечения вышли на такой уровень, который в XX веке невозможно было даже представить.
Что будет, если начать подключать к интернету и вещи? Уже совсем скоро в продаже появятся недорогие и компактные чипы, способные выходить в интернет через Wi-Fi и сотовые сети или другие беспроводные системы, которые пока находятся на стадии разработки. Такой чип мы сможем поставить почти на любой предмет, будь то одежда, деталь автомобиля или еда из супермаркета. Под нашим контролем окажется практически все: мы будем знать, когда наши дети не пристегнуты, и без всяких расчетов получим количество съеденных за день калорий. Кончается молоко или шампунь? Беспокоиться не о чем – новую партию доставят автоматически; наверняка она уже на пути к вашему дому. С приемом лекарств больше не будет случаться никаких накладок. Одежда, которую вы надеваете, предупредит вас, если для данной погоды и мероприятия она не годится, а может, даже спросит что-то вроде: «Вы уверены, что хотите надеть с этими брюками именно эту рубашку?» Если вы плохо различаете цвета или совсем не разбираетесь в моде, такая помощь может оказаться очень кстати.