Нам это не нужно

Этой тарахтелкой можно пугать беременных кошек, но какой прок от неё в бою? — генерал Китченер о первом танке, 1915.
Эта заметка получилась у меня странным образом. Изначально я сел, чтобы написать текст об особенностях использования юнит-тестов для ресурсоемких приложений. Хотелось написать, что вот-вот на наши столы взгромоздятся компьютеры с сотнями гигабайт оперативной памяти и сотнями процессорных ядер. А затем описать, как это может повлиять на разработку и тестирование приложений.
Но еще не приступив к сути, я почувствовал что со всех сторон стекаются комментарии «такая система мне не нужна», «программам не нужны такие ресурсы», «текущих ресурсов и так для всего хватает», «будущее за видеокартами».
Я сделал отступление, чтобы написать для чего это нужно. Потом развил отступление. А потом взял и написал пост, почему я считаю, зачем нужны и полезны гигабайты и много-много ядер.
«Потенциальный мировой рынок копировальных аппаратов вместит не более 5000 единиц», — От IBM основателям компании Xerox, 1959.
Ресурсоемкие приложения, потребляющие гигабайты памяти и несколько ядер, скоро не будут таковыми. Через несколько лет они станут типовыми программами с типовыми запросами. Это просто произойдет, и по этому поводу совершенно не стоит переживать или обвинять кого-то в неэффективном использовании ресурсов.
Вот уже становятся доступны 32-гигабайтные планки памяти, а Сергей Вильянов пишет заметки о многоядерных процессорах в духе "Последнее предупреждение". И это хорошо! Постепенная эволюция последних лет в сфере hardware может дать возможность совершать революции в сфере software. Появляется возможность существенно улучшить возможности и удобство программ.
Я работал на компьютере Апогей БК01 (и мне не 50 лет! :-) в текстовом редакторе, который занимал 2 килобайта памяти. Сейчас я пишу этот текст в Microsoft Word, который съел около 30 мегабайт. При чем идеологически ничего не изменилось. И там, и там я набирал текст, удалял символы, пользовался поиском, мог сохранить результат. Однако удобство, которое я получаю от функциональности Word и его дизайна несопоставимы с тем редактором. И мне совершенно понятно, куда уходят эти мегабайты и я чувствую что затраты памяти совершенно оправданы, получаемым в замен удобством.
Американцам может и нужен телефон, а нам — нет. У нас достаточно мальчиков-посыльных. — Сэр Уильям Прис, главный инженер Управления почт, 1878.
Отличия Word от редактора текстов на Апогей БК01 можно назвать революцией. Революцией потому, что Word может начать использовать новичок. Редактором на Апогей БК01 мог пользоваться только Энтузиаст с большой буквы. Революция простоты использования стала возможной благодаря выросшей на несколько порядков вычислительной мощности. И есть надежда, что возможны новые революции упрощения.
Раньше я не мог представить, зачем текстовому редактору быть графическим, и тем более зачем нужен не текстовый редактор, а то что сейчас представляет из себя Word. Соответственно не мог представить, как программа может использовать больше мегабайта памяти. Сейчас я не могу представить, зачем будущему аналогу Word может понадобиться терабайта оперативной памяти и сотни ядер. Но уверен, что такое будет и это будет удобно. Доступность таких ресурсов откроет возможности, которых сейчас мы просто не видим и не рассматриваем.
В редакторах может появиться искусственный интеллект, который будет помогать человеку творить, завершая начатые мысли или динамически подстраивать интерфейс под особенности пользователя, угадывать желания. Уже сейчас есть программные комплексы, управление которыми требует высокой квалификации, что приводит к тому, что такие системы используются только на несколько процентов. Я знаю, что уже есть попытки внедрения алгоритмов искусственного интеллекта в интерфейс пакетов по обработки данных сейсморазведки, поскольку работа с такими пакетами крайне сложна.
Мои знания по сейсморазведки равны нулю, так что примером тому может быть все тот же Word. Задачей искусственного интеллекта станет угадывание желаний пользователя и помощь в автоматизации этих операций. В самом простом виде я могу представить это так. Пусть новичок ищет в тексте ряд ключевых слов и выделяет их жирным шрифтом или скажем делает ссылкой. Конечно, в начале он может прочитать толстенное руководство и написать макрос. Но скажите честно, кто из вас начинал знакомство с Photoshop, Word, Internet Explorer с чтения руководства, а не с запуска программы? Сейчас мы изучаем возможности программ постепенно, уже работая в них. И будет крайне приятно, если искусственный интеллект, уловив закономерность наших действий предложит как их упростить. Пусть он поможет пользователю выполнить все замены автоматически или покажет ему, как воспользоваться макросом и как его написать.
«Телевидение не продержится на рынке и шести месяцев. Людям вскоре надоест пялиться каждую ночь в фанерную коробку», — Дэррил Занук, кинопродюсер 20th Century Fox, 1946.
В начале интерфейсы со встроенным искусственным интеллектом будут несовершенны, скорее даже ужасны и пользователи как всегда будут злиться на них. :) По аналогии можно привести графический интерфейс пришедший на смену командной строке, который также весьма критиковался. Описанный путь развития интерфейса на мой взгляд неизбежен, так как программы обзаводятся все новой функциональностью, которой практически никто кроме специалистов не пользуется.
Сколько необходимо ресурсов для построения подобных систем сказать сложно. Но любые алгоритмы из сферы искусственного интеллекта весьма ресурсоемки и те возможности которые получаются современные персональные компьютеры все еще весьма скромны для таких задач.
Другим направлением использования новых аппаратных возможностей станет большая реалистичность. Сейчас различные физические процессы в играх все-таки больше «рисуются», чем считаются. Другими словами в играх может быть начато использование численного моделирования физических процессов, которое сейчас реализуется в специализированных численных пакетах, рассчитывающих движение жидкости, газов и так далее. Все это даст новый уровень реалистичности. А подобная реалистичность достигается как раз за счет работы огромного количества процессоров, обрабатываемых параллельно разные участки пространства. При этом каждый участок пространства требует существенного объема памяти для хранения информации и распределении в нем газов, температуры, давления и других характеристик, требующихся для моделирования физического процесса. При этом, чем больше памяти и ядер, тем точнее будут вычисления и объем пространства в которых они будут производится. Алгоритмы точного моделирования физики в виртуальном мире — практически неограниченный потребитель ресурсов.
Уверен, что можно привести массу других примеров, где наличие большого объема памяти и количества ядер остается узким местом. И где их увеличение позволит делать совершенное новы вещи на компьютерах стоящих у нас на столах.
P.S.
Обязательно спросят — «При чем здесь Intel?» :) Заранее отвечу. Разработки Intel (как аппаратные, так и инструменты для разработчиков) приближают будущее программ, которым тесны рамки современных аппаратных решений!
«Я объездил всю страну вдоль и поперёк, разговаривал с величайшими специалистами, поэтому могу вас уверить, что прихоть под названием обработка информации — кратковременное явление, которое не продлится и года», — редактор колонки о бизнес-литературе в Prentice Hall, 1957.
Параллельность это новая эпоха и не стоит ждать, что через пару лет опять будут одноядерные процессоры, но уже с частотой 20 гигагерц. Берите Intel Parallel Studio и в путь. Тем более, что открываются горизонты для новых инновационных идей в области ресурсоемких вычислений и новые сегменты рынка. Желаю успехов.
комментарии (70)
en.wikiquote.org/wiki/Bill_Gates#Misattributed
пока остальные чешут репу, у Ларри есть реальная тема сейчас выстрелить с соляркой на х86_64. просто флеш-рояль приобрёл.
Симулятор пользователя точно будет встроен в приложения для прогнозирования его поведения. А прогноз нужен для более качественного взаимодействия.
Приведу пример: всегда проще договориться с человеком, который вас понимает с полуслова, чем с тем которому всё приходится объяснять. Так же и с ИС.
Можно сказать, что симуляторы пользователя встроены в сущестувующие интернет-поисковые системы. Они обучаются под конкретного пользователя. Строят некоторую модель его области знаний.
Интересно было бы реализовать ПРОЛОГ машину на CUDA.
www.dailytechinfo.org/infotech/843-fastra-ii-odin-iz-samyx-moshhnyx-nastolnyx.html
>Таким образом, в сумме система содержит 13 высокопроизводительных графических процессоров, дающих системе вычислительную мощность в 12 TFLOPS.
И это на тех видеокартах, а они ведь быстрее становятся. Но что гораздо интереснее это то, что материнскую плату можно купить в обычном магазине SuperComputer, ну к примеру в этом, и обращаю внимание на цену в промежутке 400-500 баксов.
www.nix.ru/autocatalog/motherboards_asustek/ASUS_P6T7_WS_SuperComputer_LGA1366_X58_7xPCIE_2xGbLAN_1394_SATA_SAS_RAID_6DDRIII_86855.html
То есть в другом вероятно можно дешевле взять насколько то баксов. Главное что это доступно самому обычному юзеру, которому вот прямо сейчас может в голову стукнуть создать свой суперкомпьютер, что ранее было невозможно. А ведь это ещё всё в кластера может собираться.
И конечно есть CUDA, OpenCL через CUDA, PhysX через CUDA и так далее. Возможности для нынешних программистов просто изумительные.
Для примера, можно создать более реалистичные ММОРПГ где физика просчитывается на сервере или что-то ещё. Я говорю возможности, но не подразумеваю, что ими сможет воспользоваться каждый. «Домашние» суперкомпьютеры это в общем тот шанс, который многие люди грубо говоря «просрут», а единицы сильно разбогатеют.
Многие геймдевелоперы вообще шугаются от физики как от огня, они просто не верят в возможность эмуляции тряпки, например, и предпочитают анимацию физике, ссылаясь на то, что анимация 100% предсказуема и не несет в себе технологических рисков, в отличии от физики, в своей практике то же сильно ожегся на PhysX несколько месяцев закопал на то, что бы сделать необходимые эффекты, сделал, как только добавили их в сцену в необходимом колличестве — получили 3 кадра в секунду, с физическим ускорителем было чуть лучше, но у нас это была очень важная декорация, а делать её доступной только для людей с карточками от NVidia — это самоубийство, потому для остальных игра будет неиграбельная. Отказались вообще, написали свою реализацию не физический движок конечно, только то что нужно было. Так что физику в играх не декоративную, а действительно гейплейную, для которой не нужно будет дополнительно делать скрипты на каждый случай мы увидим нескоро, думаю после того как начнется эра постороения освещения честным методом трасировки луча. В ММОРПГ самый сок это социалка, общение людей, люди туда приходят не для того что бы посмотреть графический эффект или реальную физику, они туда приходят что бы стать круче чем Вася, вынести Петю и купить самую крутую в игре дубинку которая будет только у них, тем самым потешить чувство собственного достоинства, а потом все это обсудить в клановом чате.
Сейчас в некоторых играх используют реальную физику, то есть без имитации скриптом, но с одним большим «но». Взять хотя бы любого персонажа, реально это ограничивающий объём (bounding value) некой фигурой взаимодействующий с физическим миром внутри которого происходит 3D анимация, ну хотя бы с применением скелетной анимации или вообще смена сетки. Использование же предметов просто крепление условных точек на них, с самим скелетом.
То есть сам персонаж если его отрисовать по законам физического мира или параллелепипед, сфера, капсула или что-либо ещё. Другие объекты могут быть выпуклыми телами более сложной геометрии. По нормальному же для персонажей надо создавать тела, ставить на них сочленения и ограничения собирая скелет и прикреплять силы, которые должны управляться неким умным контроллером, анализирующий пространство и непрерывно меняющий позы персонажа.
А ММОРПГ это уже отдельная песня, реально они работают с координатами на карте. Теоретически же имея мощный компьютер можно просчитывать физику на сервере, ну скажем вплоть до твёрдых тел с сочленениями и ограничениями, плюс минимальный набор глобальных и локальных сил. Тогда надо будет передавать только два вектора на один объект.
А вот мягкие тела, ткани и флюиды считать с помощью клиентского компьютера как эффекты. Хотя если так рассуждать, то можно вообще всё посчитать на сервере, только вот сеть не потянет, если передавать слишком много инфы, тем более для ММОРПГ. И ещё по поводу ММОРПГ, у них сейчас на мой взгляд следующие недостатки:
1. Нет реальной физики, хотя упомянутый ранее PhysX это не какой-то псеводозаменитель, он способен считать всё как надо.
2. Отсутствует возможность создавать свои предметы и новые физические действия своего персонажа.
3. Нельзя создавать что-то совместно, например тексты, картины, музыку и прочее, естественно с возможностью воспроизведения.
4. А вот это особенно интересно хотя мнение уже довольно старое и много раз обсуждалось. ММОРПГ по идее должна закидывать в фантастический мир где всё живёт по тем правилам, только с массой игроков. На деле же люди как раз всё и портят, потому что они не играют роли. То есть система общения должна быть как-то пересмотрена, так как одно дело говорить с тем же эльфом, пусть и компьютерным, другое дело с реальным человеком ведущим себя, ну скажем мягко — не так.
То что вы говорите очень сильно напоминает Эйфорию — физический движок GTA4, к сожалению сам не играл, так что отзыв оставить не могу. Но в общем это сейчас считают дальнейшим развитием физики в играх и называют процедурной анимацией, когда строят скелет, эмулируют работу мышц, учитывают влияние внешних сил, например удара или неровностей поверхности. В идеале все должно быть очень красиво, уникальность каждого движения, немного покрутив значения параметров (допустим рандомная генерация по диапазону) и все персонажи двигаются немного поразному, сознание может не заметит, а вот подсознание 100% заметит и будет сидеть на правом плече и говорить игроку: «это реально, все что ты видишь реально».
>1. Нет реальной физики, хотя упомянутый ранее PhysX это не какой-то псеводозаменитель, он способен считать всё как надо.
Одна из самых главных проблем PhysX — он есть только у части игроков, у второй части такоя же дорогущая, мощная видеокарта но без него. А без ускорения много физики не сделаешь.
Вторая проблема, это возможно алгоритм расчета, фактически классические школьные уравнения движения. На мой взгляд более реалистичную картину за меньшее процессорные «деньги» дает Verlet integration которая использовалась игре Хитман. Если интересно можете почитать вот эту статью www.teknikus.dk/tj/gdc2001.htm там все очень подробно описано, даже есть примеры кода.
Это как раз не проблема, так как разговор начинался о CUDA, значит об NVidia и соответственно о серверах, а не клиентах. Для CUDA ведь тоже надо современную видеокарту и драйвера, иначе работать не будет.
Плюс сохраняется тот же закон, чем быстрее и больше видеокарт, тем лучше. Деньги по сути на устройства одни и те же, а остальное рассматривать нет смысла, так как это уже выбор самих людей.
>развитием физики в играх и называют процедурной анимацией, когда строят скелет, эмулируют работу мышц, учитывают влияние внешних сил, например удара или неровностей поверхности
В эти игры не играл, но по сути это обычный Ragdoll. То есть превратить на время столкновения объект в тряпичную куклу можно. Можно даже дать ей силы, чтобы она изгалялась пока летит. Но нужно то как раз умное управление, чтобы кукла могла управляться контроллером только с помощью её «мышц», а не превращаться в ограничивающий объём.
И ещё хорошо что CUDA работает на линуксе, можно сервера будет дешевле ставить с физиксом, если у кого-нибудь получится такое замутить.
word — это текстовый процессор.
а в остальном правда, да.
Растущие же требования к hardware-части есть результат сотрудничества крупнейших разработчиков ПО и «железа».
Примером маниакальной оптимизации является небезызвестная ColibriOS, которая, обладая урезанным, но все же GUI, умещается на дискете.
Вот если бы можно запускать поток, отвечающий за UI на одном ядре, а обработчики событий элементов управления на другом… :)
Я когда реализовывал один из проектов и ему понадобилось получать данные по сети — вынес в отдельный поток. Результат — прога всегда реагировала на пользователя, как бы ни тупила сеть.
Это и есть удобство параллельности.
Есть то оно очень давно, а вот активно использовать ещё многие не начали.
Мне кажется что со временем будет дробление сегментов рынка, оно сейчас есть, но не такое явное, огромная популярность intel atom нам наглядно показывает что далеко не всем нужно 8 ядер и 32 гб оперативы. Оно нужно там где нужно, серверы, рабочии станции дизайнеров, программеров, инженеров.
На тему ИИ помошника сейчас сложно теоретизировать, но мне кажется, что если он будет настолько умным, что может дополнять и помогать пользователю — то тогда останется один шаг до полного исключения пользователя. А если он будет просто подсказывать на какую кнопку жать — то это или полная деградация пользователя или ужасный интерфейс. Микросовт второй вариант (не ужасный интерфейс :) а помошника) пыталась реализовать несколько раз — на данный момент из её линейки продуктов подобные вещи были исключены. Может быть эти продукты просто опередили свое время, может им не хватало ресурсов в том числе и вычислительных, что бы это реализовать, думаю время покажет.
А вообще всегда радуюсь как ребенок новому процессору или видеокарте, но рывковые революции происходят крайне редко. Наверно их можно посчитать по пальцам — это первые персональные компьютеры, появление графического интерфейса, выход первого трехмерного ускорителя, быстрый интернет (VoIP, вебсервисы). Сейчас похоже, что грядет очередная революция — облачные вычисления или уже пришла, но я пока ещё на себе не ощутил её прихода, разве что dropbox'ом пользуюсь иногда.
Рост системных требований давно сильно опережает рост реальных потребностей в ресурсах.
По-моему, фразу «уже сейчас» — логичнее заменить на «до сих пор» ;)
Во первых по теории массового обслуживания, мощности мощных компов в еденицу времени нужно меньше, чем той, если у каждого дома будет стоять 100 ядерный «манстриламазафака». Я понимаю, что энергопотребление их тоже будет снижаться, но полной мощности своего компа я не выбираю и сейчас.
Во вторых Интернет сейчас, не знаю как вы, но я рассматриваю как какую то шину PCI (кучу сервисов туда воткнуть можно, причем одновремнно) если хотите; ) в каждом компе должна быть (в большинстве точно уже имеется), а если нет, то и делать уже за компом нечего особо то. Там и радио, и телевидение, и почитать, и поиграть, и пообщаться, и поработать.
И еще что очень приятно, что штатах уже есть сервис, когда я со слабым компом запуская современные игры на их серверах, а дома получаю только картинку. Мне вот совсем не жалко заплатить 100 рублей за поиграть скучным вечером во что нибудь классное, зрелищное и атмосферное. Часто все равно играть не получается, и если разделить стоимость хорошого игрового компа на колличество вечеров, проведенных за ним в игре, в моем случае выйдет куда дороже 100 рублей; )
Чуток не совсем в тему конечно, но я вижу будущее таким.
Откуда появилась многоядерность? Очень просто, с частотой уперлись или скоро упремся в физические ограничения. С другой стороны инженеры могут впердолить на кристалл все больше транзисторов. Но эти лишние транзисторы нафиг не нужны современным процессорам. Поэтому делаем несколько ядер. Отлично! Но встает проблема, как эти ядра использовать. На серверах ладно, можно раскидать обслуживание запросов по разным ядрам. А на рабочих станциях? Проблема в том, что есть возможность быстро исполнять параллельно много процессов (ну или нитей), однако нет методов хорошего параллельного программирования тех задач, которые нам нужны. Ну или если с другой стороны глянуть, те задачи, которые нам нужны, плохо параллелятся.
WYSIWYG на Xerox Alto — вот куда надо оглядываться.
А заглядывать в GNU/Linux.
Параллельность будет медленно наступать программистам на горло. На самом деле два ядра хватает для интерактивности с лихвой. Единственное слабое место — жоский диск (долго читать/писать). Но если распаралелить жоский диск в райд, то… наступит будущее, где у всех будет скоростные ssd (где многие банки будут зеркалироваться и за счет этого будет повышаться скорость)
Параллельность в приложениях — это просто распораллеливания обработки событий гуя. Параллельность должна быть на уровне прикладных библиотек. Думаю проблем с этим не будет в будущем (да и сейчас). Еще бы круто было наконец массово выпускать программистов и начальников проектов умеющих представить себе способ решения проблем параллельно.
И не плохо бы язык программирования с удобным способом распораллеливания задачи (не знаю как вы, а я считаю с++ идеальным языком, но нет удобных бесплатных IDE для отладки ). Вот NetBeans действительно удобна. MSVS — дороговата. QTCreator — сыровата.
И еще очень бесит разные системы сборки tmake, cmake, qmake, nmake… и особенно те, которые не легко собрать под винду (autotools).
Бесят совсем не паралельные GNU проекты с их тулзами которые написаны на сишнике 30 лет, на которые нету достойной документации, и компания fsf трясется над ними как над зеницей ока, вершиной программистской мысли.
… лет через 30 все равно будем копаться в не параллельном коде, не оптимизированных программах.
Кстати видюхи никого не спасут — мы все равно уткнемся в предел производительности, тем более не любая операция на видюхе быстрее работает.
Оно и понятно: в силу технологических причин дальнейшее наращивание производительности отдельных процессоров просто невозможно, а бизнес вести как-то надо.
Для продолжения экспоненциального роста производительности необходимо многоядерные системы — другого выхода просто нет.
Но вот вопрос: кто будет нести тяжесть оптимизационного процесса?
Это могут быть программисты или дизайнеры процессоров. Работа идет с двух сторон, понятное дело, но кажется, что Интел пытается спихнуть часть своих проблем на разработчиков софта (особенно это чувствуется по докладам circuit designer-ов)…
Тем не менее, мне кажется, что обилие старого но используемого не параллельного софта и сложность написания программ для эффективного использования на параллельных компьютерах не позволит пользователям насладиться потенциальной мощью своих компьютеров еще очень долго.
А если нет никакой разницы, зачем платить больше (процессор, который я куплю сейчас устареет быстрее, чем массово напишут параллельный софт)?
PS Последняя фраза относится ко мне лично, я знаю, что многие программы уже успешно (в той или иной степени) используют дополнительные ядра.
У моего первого компьютера был 14-дюймовый монитор с трёхмерным изображением (ибо экран был выпуклым как лупа :) ). Через два года я его сменил на 15-дюймовник, потом ещё через пару лет на ЖК. Мой нынешний монитор несколько больше первого ЖК, но по сути это почти тот же прибор — углы обзора пошире, отклик меньше. Вот и всё.
Думаю, компьютеры уже почти достигли уровня автомобилей. Конечно, ресурсы будут расти. Но куда мне запихнуть монитор в два метра шириной в свою маленькую квартиру? А про текстовые редакторы и тому подобное — тоже смешно. Сначала у меня был Офис 97, теперь Офис 07. Что все обсуждают? Ribbon! Уря, воткнули цветные иконки и сделали ленту. А начинка какая была, почти в том же виде и осталась. Так что я бы не говорил столь категорично.
До кордуо был просто пень, а до пня…
… А 10 лет назад у меня появился k6 333 мегагерца, ребята не верили что такие скорости сущесвуют, и боже, как это было круто.
Сижу и думаю… почему 10 лет на пне 133 все тормозило… также как сейчас?
Серьезно, чем меня больше всего бесит «многоядерность» так это тем, что лучше бы сделали возможность докупать процессоры. А вместо этого нужно для повышения производительности покупать не только новый проц, но и плату, RAM, жесткий диск… прям дремучий лес какой-то, и это в 21 веке :)