The future of programming as we know it

Автор работы: Пользователь скрыл имя, 07 Января 2013 в 20:07, реферат

Краткое описание

Аннотация: Будущий рост мощности компьютерной техники вытекает из программного параллелизма. Закон Гордона Мура помог описать условия достижения успеха при использовании этой технологии. Исследуя проблемы программирования параллельных систем, были выдвинуты современные тенденции развития компьютерных

Содержание работы

THE FUTURE OF PROGRAMMING AS WE KNOW IT 0
Abstract 2
Main part 2
Moore’s bounty: software abstractions 2
Software abstractions and hardware mechanisms needed 2
Current State of Programming 2
Основная часть 2
Премия Мура: абстракции программного обеспечения 2
Необходимые абстракции и аппаратные механизмы программного обеспечения 2
Текущее состояние программирования 2
Bibliographic References 2

Содержимое работы - 1 файл

Proekt.docx

— 54.50 Кб (Скачать файл)

1) Программы будут содержать  меньше ошибок, потому что запись, чтение и понимание ФОРТРАНА  проще, чем выполнение тех же  задач в ассемблере.

2) Потребуется меньше времени,  чтобы записать корректную программу  в ФОРТРАНЕ, потому что каждый  оператор FORTRAN - представление многих инструкций в ассемблере.

3) Производительность программы  будет сопоставима с программами  из ассемблера, которые предоставляют  хорошую технологию компилятора.

Требуемые преимущества высокоуровневых  языков теперь широко приняты. Фактически, поскольку компьютеры становятся быстрее, в современные языки программирования добавляется все больше абстракций. Например, новые языки — такие как Java, C#, Ruby, Python, F#, PHP и JavaScript — обеспечивают такие функции, как автоматическое управление памятью, объектная ориентация, статический контроль типов, динамический контроль типов и ссылочную прозрачность, все из которых упрощают задачу программирования. Они играют роль в стоимости производительности, но компании выбирают эти языки, чтобы улучшить правильность и функциональность их программного обеспечения, которые они оценивают больше, чем производительность главным образом потому, что прогресс Закона Гордона Мура скрыл затраты на абстракции. Несмотря на то, что более высокие уровни абстракции часто приводят к потерям производительности, первоначальный переход от ручного кодирования на ассемблере шел с роста производительности в том, что компиляторы стали лучше управлять сложностью низких уровней генерации кода, таких как распределение регистров и инструкционного планирования, причем лучше, чем большинство программистов. Тот образец увеличений производительности процессора, который связывался с увеличением использования абстракций языка программирования, неоднократно терял своё значение.

Высокоуровневые языки программирования упростили создание программ, способных выполнять большие, сложные, последовательные вычисления. В самый разгар взаимодействия между программным обеспечением и увеличением однопроцессорных скоростей в 1997, Натан Михрволд, бывший главный инженер Microsoft, вывел четыре “закона программного обеспечения”:

1) Программное обеспечение  - газ. Программное обеспечение  всегда расширяется, чтобы соответствовать  контейнеру, в котором оно сохранено.

2) Программное обеспечение  растет, пока не станет ограниченным  Законом Гордона Мура. Рост программного обеспечения первоначально быстр, как газовое расширение, но неизбежно ограничен темпом увеличения аппаратной скорости.

3) Рост программного обеспечения  делает Закон Гордона Мура возможным. Люди покупают новые аппаратные средства, потому как программное обеспечение требует его.

4) Программное обеспечение  ограничено только человеческим  стремлением и ожиданием.

Мы будем всегда находить новые алгоритмы, новые приложения и новых пользователей. Анализ Михрволда объясняет и расширяет существующие приложения и взрывной рост в инновационных приложениях. Часть расширения кода может быть приписана нехватке внимания к использованию памяти и производительности: часто проще оставить старый и неэффективный код в системе, чем оптимизировать его и отредактировать. Но рост производительности также позволил добавить новые функции и новые парадигмы вычислений в уже существующие системы программного обеспечения. Например, Винсент Мэрэйа сообщает, что в 1993, Windows NT 3.1 операционной системы (OS) состоял из 4-5 миллионов строк кода и к 2003, у Windows Server ОС было 50 миллионов строк, что в 10 раз больше. Точно так же с 2000 до 2007 Debian 2.2 Linux ОС вырос приблизительно в 5 раз от 59 - 283 миллионов строк в версии 4.0.

Эти операционные системы  добавили новые возможности, не замедляя существующие функции, к примеру, усовершенствованная надежность, и пользователи испытали более быстрое время запуска операционной системы и улучшение общей производительности. Кроме того, улучшения, описанные Законом Гордона Мура, включали в себя новые приложения в таких разделах как наука, развлечение, бизнес и связь. Таким образом, ключевой двигатель в эффективном цикле использования Закона Гордона Мура - то, что приложения извлекли выгоду из улучшений производительности процессора без тех приложений, которым необходима адаптация к изменениям в аппаратных средствах. Программы работали быстрее на последовательных поколениях аппаратных средств, позволяя новым функциям добавляться, не замедляя производительность приложений.

Таким образом, текущие программы не будут работать быстрее на следующих поколениях аппаратных средств. Сдвиг в аппаратной отрасли повредил производительность - соединение мобильности в эффективном цикле - последовательные программы не будут извлекать выгоду из увеличений производительности процессоров, которые используют технологию многоядерности. Было и много других проблем — например, в поиске, веб-приложениях, графике и научных вычислениях — которые требуют намного большей возможности обработки, чем обработка, которую обеспечивает один процессор. Разработчики приложений и систем программирования добились большого прогресса в предоставлении соответствующих абстракций, но не достаточно, так как большинство разработчиков и систем программирования в настоящее время используют последовательную модель. Стандартные последовательные программы и системы программирования плохо оборудованы, чтобы поддерживать параллельное программирование, потому что они испытывают недостаток в абстракциях, чтобы иметь дело с проблемами извлечения параллелизма, синхронизируя вычисления, управляя местоположением и уравновешивающей нагрузкой. В будущем, однако, все программное обеспечение должно быть в состоянии использовать многоядерные процессоры, чтобы ввести в новый эффективный цикл с последовательными поколениями параллельных аппаратных средств, которые разворачивают возможности программного обеспечения и генерируют новые приложения. Чтобы разработать параллельные приложения, будущие разработчики должны изобрести новые параллельные алгоритмы и создать новые параллельные приложения. Приложениям потребуются: новые языки параллельного программирования, абстракции, компиляторы, отладчики, области выполнения, операционные системы и аппаратные системы виртуализации. Мы называем эти инструменты вместе - как система программирования. Будущие системы программирования, чтобы создавать приложения, должны будут использовать в своих интересах все те функции, производительность которых будет в состоянии изменить к лучшему последовательные поколения параллельных аппаратных средств, которые увеличивают их возможности, увеличивая число процессоров. Программы, в отличие от тех, что мы имеем на сегодняшний день,  базировались на обычных последовательного-программируемых системах, строящихся на основе двух абстракций, которые в корне расходятся с параллелизмом и локализацией. Во-первых, они связывают упорядочивание операторов в программе к последовательному порядку выполнения. Любая форма параллелизма нарушает эту модель, если она не является ненаблюдаемой. Во-вторых, стандартные программы записаны на предположении о невыгоде экономики универсальной формы глобальной системы памяти. Координирование местоположения (минимизируя число дорогих ссылок оперативной памяти) противоречит плоской модели памяти, которая не различает быструю и медленную память (например, on и off микросхемы). Параллелизм и локализация часто находятся в конфликте в той части, которая реализует конструкцию, в которой все данные помещают близко к единственному процессору, чтобы избежать дорогих удаленных ссылок, тогда как выполнение вычислений параллельно требует распространяющихся данных среди процессоров.

Необходимые абстракции и аппаратные механизмы программного обеспечения

 

Упрощение задачи параллельного  программирования требует абстракций программного обеспечения, которые  реализуют мощные механизмы для  синхронизации, баланса загрузки, передачи и локализации, при сокрытии базовых деталей. Актуальнейшие механизмы для этих операций - низкий и архитектурно-зависимый уровень. Механизмы должны быть тщательно запрограммированы для получения хорошей работы с данной параллельной архитектурой, и, получающиеся программы, как правило, не являются оптимальными, т.е. они не показывают лучшую производительность с подобной параллельной архитектурой, у которой есть больше процессоров. Успешные абстракции программного обеспечения нужны для того, чтобы позволить программистам выразить параллелизм, который зависит от программы и отношения между операциями и структурированием, чтобы улучшить локализацию, не будучи увязанным в низкоуровневых архитектурных деталях. Такие абстракции делают параллельное программирование удобным, и результат в переносимых на производительность программах – открытый исследовательский вопрос. Успешные абстракции, вероятно, включат в себя: глобальные адресные пространства, доступные способы описывания или вызова параллельных операции по наборам данных, конструкции для элементарных операций. Абстракции могут также включить абстрактные модели машин, которые получают затраты ресурсов и местоположение при сокрытии деталей определенных машин. Абстракции для параллелизма обычно инкапсулируются в системе программирования и модели выполнения.

Разумная производительность потребует эффективных механизмов использования оборудования, особенно в случаях, которые требуют мелкомодульной передачи и синхронизации. Некоторые параллельные машины требуют, чтобы взаимодействия между процессорами произошли посредством передач сообщений высоких издержек или посредством передачи данных через расположения общей памяти. Такие механизмы полезны, но могут быть громоздкими и могут ограничить множественность параллелизма, которая может быть эффективно использована. Разрешение этих деталей потребует исследования, но успешные механизмы включат в себя низкую служебную передачу и синхронизацию и упростят миграцию данных и операций, чтобы сбалансировать загрузку. Есть несколько появляющихся направлений в аппаратных средствах, чтобы поддерживать параллельные вычисления. Слишком рано, чтобы знать, какая аппаратная архитектура или архитектуры окажутся самыми успешными, но несколько тенденций очевидны:

1)  Многоядерные процессоры, совместно использующие память.  Это направление было взято  многопроцессорными системами микросхем  и было основным подходом, используемым  полу-компаниями, которые не могли продолжать увеличивать свои однопроцессорные разработки.

2) Многоядерные компьютеры  соединены через высокоскоростную  сеть связи. Когда очень большие  средства вычисления необходимы  для исследования или бизнеса,  это непрактично для всех процессоров,  чтобы совместно использовать  память, и высокоскоростное межсоединение используется, чтобы связать сотни или тысячи процессоров в единой системе. Центры обработки данных используют эту модель.

3)  Одиночный процессор,  содержащий модули массовой реализации.  В этой архитектуре один процессор  или поток команд, управляет массивом  подобных модулей выполнения.  Иногда это называют одной командой несколько потоков данных (SIMD) архитектуры.

4)  Массив специализированных  процессоров.  Этот подход эффективен  для того, чтобы выполнить специализированную  задачу, такую как алгоритм обработки  графики или видеоданных.  Каждый  отдельный процессор и его  соединения могут быть адаптированы  для целевого приложения.

5) Программируемые на месте  вентильные матрицы (FPGAs) используются в некоторых системах параллельных вычислений. FPGAs с модулями выполнения, встроенными в их структуру, могут привести к высокой производительности, потому что они используют локализацию и программируют их межсоединения на микросхеме, чтобы соответствовать потоку данных приложения.

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

Обнадеживающим является то, что программы исследований в  области параллелизма инициируются или возрождаются в нескольких исследовательских университетах. Некоторые научно-исследовательские работы уже полным ходом нацелены на часть проблем, которые излагает этот доклад. Например, в 2008 Калифорнийский университет в Беркли и Университет Иллинойса в Равнине Урбаны были награждены грантами на проведение исследований от Microsoft и Intel, чтобы создать Универсальные Научно-исследовательские центры Параллельных вычислений. В 2009 Стэндфордский университет с промышленным финансированием от Sun, AMD, NVIDIA и других компаний запустил распространяющуюся лабораторию параллелизма (PPL). Эти центры исследования на базе ведущих университетов являются хорошим началом для решения широких и сложных программ исследований. История показывает, что развитие технологий, необходимых для параллелизма, часто занимает десятилетия, а то и больше. Результаты таких исследований необходимы сейчас, так что исследование начинает десятилетие поздно. Кроме того, нет никакой гарантии, что есть решения проблем. Если нет хорошего ответа, мы должны узнать это как можно скорее, чтобы мы могли своевременно продвинуть инноваций в каком-то другом направлении.

Текущее состояние  программирования

 

Одна из точек зрения текущего положения практикующихся программистов в том, что есть большое несоответствие между самыми лучшими программистами и остальными во времени решения и в элегантности решения. Общепринятым является то, что различия в квалификации и производительности между средним программистом и лучшими программистами разнятся в 10 раз и более. Мнения могут отличаться по специфике, но положения программистов разбиваются примерно следующим образом:

A. Незначительное число: отлично обученных, высококвалифицированных, и очень продуктивных разработчиков систем компьютерных наук (CS).

B. Незначительное число: отлично обученных, высококвалифицированных, и очень продуктивных разработчиков приложений CS.

C. Много: умеренно хорошо-обучаемых  (средних), умеренно-продуктивных разработчиков системы CS.

D. Много: умеренно-продуктивных разработчиков без опыта к CS.

Разработчики, которые не обучаются CS, являются учеными, деловыми людьми и другими, которые используют компьютеры в качестве инструмента, чтобы решать свои проблемы. Существует много таких людей. Вполне возможно, что меньше людей будет в состоянии программировать хорошо в будущем, из-за трудности параллельного программирования. Однако если сообщество CS разработает хорошие абстракции и языки программирования, которые упрощают программировать параллельно, то будет ещё больше продуктивных разработчиков. Есть некоторый шанс, что мы найдем новые решения в программах, которые построены на последовательном программировании. Некоторые существующие успешные системы, такие как базы данных и Веб-сервисы, используют параллелизм, но не требуют, чтобы параллельные программы были записаны большинством пользователей и разработчиков. Например, разработчик пишет однопоточный запрос базы данных, который работает параллельно с другими запросами, управляемыми системой баз данных. Другой, более современный и известный пример MapReduce, который абстрагирует множество проблем программирования для поиска и отображения в последовательность карт и сокращение операций. Эти примеры неотразимы и полезны, но мы не можем предположить, что такие проблемно-ориентированные решения сделают вывод ко всем важным и распространяющимся проблемам. В действительности, программисты-мастера могут иметь еще больший эффект на организацию. Действительно, как в искусстве в целом, есть смысл, в котором никакое число простых людей не может выполнить то, что может сделать один одаренный человек. Без соответствующего обучения мы не будем производить достаточно категорий (A) и (B). Без них, кто создаст системы абстракции программирования? Параллельные вычисления а, следовательно, и параллельное программирование показали большие обещания в 1980-ых со сравнительно большими надеждами в том, что могло быть выполнено. Однако, кроме горизонтально масштабируемых парадигм программирования, таких как MapReduce, ограниченное развитие привело к разочарованию и сравнительно маленькому прогрессу в последние годы. Таким образом, центр внимания в последнее время был больше акцентирован на публикацию результатов исследований по теории параллелизма и новых языков и подходов, а не на упрощение выражений и практического использования параллелизма и взаимосовместимости. Было много инвестиций, и был сравнительно ограниченный успех в подходе автоматического извлечения параллелизма от последовательного кода. Таким образом, значительно меньше внимания уделялось эффективному выражению параллелизма.

Информация о работе The future of programming as we know it