Закончился ли бесплатный обед? [закрыто]

12

В своей знаменитой статье 2005 года «Свободный обед окончен» Херб Саттер предсказал параллельную программную революцию, столь же большую, как объектно-ориентированная революция. Действительно ли эта революция произошла в 2005 - 2013 годах?


Ключевые моменты в статье:

  • Производители процессоров исчерпали свои традиционные подходы к повышению производительности процессора. Вместо того чтобы увеличивать тактовую частоту, они вместо этого обращаются к гиперпоточным и многоядерным архитектурам.

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

  • «Ох, производительность не имеет большого значения, компьютеры просто продолжают работать быстрее», утверждение будет ошибочным.

  • Оптимизация эффективности и производительности станет более важной, а не менее важной. Те языки, которые уже поддаются тяжелой оптимизации, обретут новую жизнь; те, кому не нужно искать способы конкурировать и стать более эффективными и оптимизируемыми. Ожидайте долгосрочный рост спроса на ориентированные на производительность языки и системы.

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

CPP
источник
15
Сколько ядер у вашего телефона?
Мэтт D
6
Моя Nokia 2700 имеет одно ядро.
cpp
5
@MattD Извините, но почему пришло «время для обновления», и какое количество ядер в телефоне cpp связано с этим? Откуда вы знаете, что Nokia 2700 недостаточно для его / ее потребностей?
Андрес Ф.
2
Я собираюсь официально заявить, что совершенно ненаучным наблюдением было сказано, что произошла такая революция в области аппаратных средств, но революция в области программного обеспечения была чрезвычайно медленной. Получение качественных параллельных инструментов для всех программистов - все еще трудная задача, и параллелизм - все еще то, что путает даже опытных параллельных разработчиков трудными для воспроизведения способами.
Джесси С. Слайсер
2
Я просто хочу отметить, что только потому, что время прогнозов неверно, это не обязательно делает прогнозы неправильными. Совершенно очевидно, что ключевые пункты, которые вы перечислили выше, не получили подразумеваемой важности, но были шаги в направлении каждого из этих пунктов. Так что я бы сказал, что вышеприведенные прогнозы сбудутся, вопрос только в том, когда. КОГДА будет, когда это станет требованием, а не просто желанием. Знать, когда этот порог будет преодолен, - вот почему предсказывать, когда это так сложно.
Данк

Ответы:

23

Да, но это зависит

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

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

С 2005 года мы приобрели новые и улучшенные инструменты, такие как OpenCL, CUDA, OpenMP и наборы векторных инструкций для работы с параллелизмом и параллелизмом данных в установленных языках. Тем не менее, относительные новички с самого начала были предназначены для одновременного выполнения многих других интересных задач.

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

Эти системы обеспечивают безопасность памяти, быстродействие и статическую защиту от некоторых видов гонок. По умолчанию неизменяемость Haskell и Rust значительно упрощает управление параллелизмом. Erlang был сделать это уже в 80 - х годах, но потребности программного обеспечения и наших знаний о том , как проектировать системы программирования также улучшились с тех пор, слава богу.

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

Джон Перди
источник
2
Я не настолько уверен в упадке некоторых языков, я надеюсь, что мы увидим код, написанный с большим вниманием к минимизации зависимостей, чем что-либо еще В конце концов, дело не в языке, а в том, как вы его используете. И «низко висящий плод» его использования больше не соответствует многопоточности / параллелизму.
Мэтт Д
6
@MattD: и то, как вы используете язык, и сам язык могут быть ошибочными. Скажите, что ваша программа неверна. Вы тот, кто написал это неправильно, но язык не обязательно поможет вам написать это правильно , и это не менее важно.
Джон Перди
6

Вот несколько точек данных; решите сами, считается ли это революцией.

Параллельное оборудование

Около 2005 года Intel и AMD начинают массовое производство двухъядерных процессоров x86 для настольных ПК (Pentium D и Athlon 64) с тактовой частотой около 3 ГГц.

В 2006 году была выпущена PlayStation 3 с процессором Cell с 8 + 1 ядром на частоте 3,2 ГГц.

В 2006 году выпущена серия GeForce 8. Он состоит из большого числа (~ 100) «потоковых процессоров» общего назначения, а не графических модулей. Примерно в 2007 году была выпущена спецификация CUDA 1.0, позволяющая выполнять вычисления общего назначения на аппаратно-параллельном оборудовании NVidia.

С тех пор тенденции продолжались.

Например, теперь, в 2013 году, Intel и AMD предлагают 4, 8 и 16-ядерные процессоры с тактовой частотой чуть выше 4 ГГц. Двухъядерные и четырехъядерные конструкции распространены для устройств с низким энергопотреблением, таких как ноутбуки и смартфоны.

Все это массовое, повседневное компьютерное оборудование потребительского уровня.

Програмное обеспечение

CUDA выпущен в 2007 году, затем OpenCL в 2008 году, что позволяет использовать массивно-параллельные графические процессоры для общих (неграфических) вычислений. Модель становится популярной; многие хостинговые компании (например, Amazon) предлагают графические процессоры для общих вычислительных задач.

Go выпущен в 2009 году с очень дешевыми приоритетными потоками («goroutines») и позволяет эффективно выражать высококонкурентные алгоритмы.

Инструментарий Akka выпущен для Java и Scala в 2009 году, что обеспечивает параллелизм на основе акторов.

Эрланг (высококонкурентный язык) видит некоторое увеличение в использовании.

Параллелизм против параллелизма

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

Параллельная обработка может использовать более традиционные языки и параллельные структуры, такие как map-Reduce или MPC или OpenMP. Для таких платформ наличие нескольких ядер в одном кристалле ЦП концептуально не сильно отличается от наличия большего количества ЦП в кластере; разница в основном скорость.

Пока нет бесплатного обеда

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

9000
источник