среда, 23 марта 2016 г.

Перспективные направления программного обеспечения

Предполагаю, что в недалеком будущем мир софтвера может плавно измениться в направлениях, ранее не предполагавшихся. Части из нижеперечисленных направлений уже находятся в стадиях активных разработок и исследований.

Распараллеливание выполнения
Когда-то в распоряжении обычных разработчиков и в эксплуатации находились лишь однопроцессорные системы. В лучшем случае - многопроцессорные. В настоящее время в коммерчески доступной эксплуатации уже находятся компьютерные системы с большим числом процессоров или ядер, то есть аппаратных модулей выполняющих операции физически параллельно.
Множество организаций рассчитывают на то, что, приобретя компьютерную систему с бОльшим числом ядер или процессоров, вправе рассчитывать на улучшение общей производительности применяемых программных систем. В то же время далеко не все программные средства повседневного применения готовы реально использовать десятки ядер или процессоров.
И в качестве одного из направлений перспектив софтвера видится разработка стратегий выполнения алгоритмов и обработки данных, ориентированных на физическое распараллеливание.
Алгоритмы и структуры большой памяти
Когда-то оперативная память была наиболее ценным ресурсом, и одновременно с тем весьма ограниченным. Разрабатывавшиеся программистами алгоритмы и структуры были в существенной степени ориентированы на минимизацию ее использования. В настоящее время типовая коммерчески доступная компьютерная система располагает несколькими гигабайтами оперативной памяти, что превосходит весь объем жестких дисков, применявшихся ранее.
И в качестве следующего направления перспектив видится разработка алгоритмов и структур данных, размещаемых в оперативной памяти и занимающих большие объемы. Ранее такие методы применялись, в частности, в таблицах предвычисленых значений и в табличных вычислениях. Видится перспективным развитие алгоритмов и структур данных, применяющих намного бОльшие объемы оперативной памяти в целях сокращения объемов вычислений. Как вариант, применение табличных вычислений и того что будет изобретено в этом направлении, для задач преобразований - кодирование и декодирование данных (СУБД, графика, видео, звук, спецформаты, задачи поиска).
Алгоритмы и структуры быстрой памяти
Ранее применявшиеся и применяющиеся в качестве основных накопителей жесткие диски имеют время доступа намного большее чем время доступа к оперативной памяти. И разрабатывавшиеся основные алгоритмы и стратегии баз данных были ориентированы на компенсацию этого фактора. В частности, методы кеширования и блочной организации файлов данных в СУБД.
В настоящее время получают распространение твердотельные накопители SSD, имеющие колоссальную скорость доступа, и фактор соотношения времени доступа к диску и оперативной памяти изменился. Как следствие этого, можно предположить направление исследований по изменению принципов доступа к базам данных, например замена структур B*-tree на RB-tree или другие, отход от принципов кеширования блоков и изобретение чего-то иного.
Быстрое портирование на разные операционные системы
Когда-то давно, если кем-то применялась определенная операционная система, то и все программное обеспечение подбиралось под нее. Со временем фактор доступности программного обеспечения для определенной операционной системы изменился из-за огромной работы, проделанной программистами, по портированию программ на различные операционки. Множество программ общего и специального назначения более чем доступны для самых разных операционных систем.
В настоящее время вопрос выбора и привязки к определенной операционной системе не столь актуален и это придется учитывать при планировании перспектив как программистам, так и управляющему персоналу. Чем дальше тем более легко пользователи меняют операционки, руководствуясь лишь собственными эстетическими предпочтениями. Попытка влиять на выбор операционки или как-либо ее навязывать уже не имеет никаких оснований. Фактор привязки, ранее действовавший, изменился.
Как следствие этого, к перспективам софтвера относится возможность портирования программного обеспечения. К ним относятся различные средства - от применения интерпретирующих систем и средств виртуализации до средств кросскомпиляции. Но пытливые умы программистов могут придумать и что-то новое.
В семействе операционных систем Windows x86-32 применялось интересное решение - операционная система легко выполняет программы, написанные для других систем - DOS, Win16, Win32, подмножество OS/2 и Posix, и не будет удивительным, если появится операционная система, ну например UniOS, выполняющая программы для самых разных других операционных систем без применения отдельных промежуточных виртуальных систем или эмуляторов. В различных операционных системах такие подходы уже применяются, охватывая пока лишь архитектурно близкие операционные системы.
Линейные алгоритмы и структуры
Применявшиеся ранее в качестве ядра компьютерной системы процессоры имели совершенно грошовые внутренние кеши. К ним программисты относились, можно с уверенностью утверждать, просто никак. Средства встроенных или дополнительных кешей процессоров могли быть как-то использованы лишь при выборе компьютерной аппаратной части. На работу программистов, на планирование алгоритмов и структур данных это никак не влияло.
В настоящее время размеры кешей и их сложность стали такими, что их влияние и характеристики работы стали реально действующим фактором для программистов. Эффективность алгоритмов и структур с точки зрения эффективности попадания данных в кеш-линейки современных процессоров уже постепенно входят в руководства для разработчиков по оптимизации программного обеспечения. Уже есть множество примеров, когда простая перестановка полей в структуре данных может приводить к росту производительности программы на десятки процентов, если по схеме выполнения алгоритма второе обращение к полю в структуре данных попадает в кеш процессора, в уже прочитанные при предыдущем обращении данные.
Если ранее разработчики видели, что переход от линейных структур к сложным давал ускорение общего времени выполнения, то в настоящее время из-за увеличения кешей процессоров могут получить преимущество как раз линейные структуры, ориентированные на последовательные проходы - вторичное обращение к следующему элементу выполняется намного быстрее, чем к элементу, не находящемуся в кеше процессора.
Другим направлением в линейности являются исследования в области алгоритмов, выполняющихся линейно, или содержащих минимизированное число переходов. Выполнение такого алгоритма существенно улучшается как из-за кеширования последовательности исполняемых кодов, так и из-за встроенных в процессоры и давно применяющихся средств конвейеризации выполнения. Одним из таких направлений, в частности и для примера, является метод развертывания циклов.
Другой метод в линейности выполнения применен в процессорах ARM. В них есть так называемые модификаторы команд, например кроме команды MOV есть команда MOVEQ и MOVNE - соответственно для выполнения команды MOV если установлен или если не установлен соответствующий индикатор. Этот метод используется для эффективного выполнения кратких последовательностей без команды JUMP, и соответственно без перегрузки конвейера команд
; if (r0 == r1)
CMP r0, r1
ITE EQ        ; ARM: no code ... Thumb: IT instruction
; then r0 = r2;
MOVEQ r0, r2  ; ARM: conditional; Thumb: condition via ITE 'T' (then)
; else r0 = r3;
MOVNE r0, r3  ; ARM: conditional; Thumb: condition via ITE 'E' (else)
; recall that the Thumb MOV instruction has no bits to encode "EQ" or "NE"

Направления поиска перспектив
Другие направления перспектив могут выглядеть как незначимыми, так и наоборот, в каких-то областях гораздо более значимыми. Как определить, что появился и начал действовать фактор перспективы? К общему правилу, которым могут руководствоваться программисты, может быть отнесено появления новых средств обмена информацией, новых носителей или принципов, а также изменение ключевых факторов, обуславливавших применение определенных методов. Часть из них безусловно канут в прошлое почти сразу, часть зафиксируется в применении надолго.
Вообще говоря, появление почти любого нового способа обмена информацией, ее передачи или обработки приводило к небольшой технической а иногда и политической революции:
  • письменность
  • книгопечатание
  • массовая печать
  • радио
  • телевидение
  • перфокарты
  • дискеты
  • CD / DVD
  • Internet
  • беспроводный доступ
  • оптические каналы
Из событий недавнего прошлого:
  • Ключевым фактором беспорядков на Британских островах стало распространение смартфонов BlackBerry, применяющих настоящие средства криптографии и не дававшие полиции возможность понять содержание передаваемой сообщниками погромов информации.
  • Ключевым фактором беспорядков и революций "арабской весны" стали социальные сети, в которых множество людей легко распространяло и получало информацию пособнического и координирующего характера.
Не все новые способы переноса и обработки информации закрепились в применении. Так, появившиеся в свое время ZIP-drive носители на 120 Mb были с легкостью убиты перезаписываемыми CD на 650/700 Mb, а вот средства Wi-Fi так и остались в эксплуатации и массовом применении, хотя к беспроводным средствам относятся еще, видимо, с десяток иных технологий.

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

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