Чи закінчився безкоштовний обід? [зачинено]


12

У своїй знаменитій статті «Вільний обід є понад» від 2005 року Герб Саттер передбачив революцію одночасного програмування настільки ж велику, як і об'єктно-орієнтована революція. Чи справді відбулася ця революція у 2005 - 2013 роках?


Основні моменти статті:

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

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

  • "О, продуктивність не має великого значення, комп'ютери просто продовжують швидше" твердження буде помилковим.

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

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


15
Скільки ядер має ваш телефон?
Метт

6
Моя Nokia 2700 має одне ядро.
cpp

5
@MattD Вибачте, але чому "час оновлення", і яка кількість ядер у телефоні cpp пов'язана з цим? Як ви знаєте, що Nokia 2700 недостатня для його потреб?
Андрес Ф.

2
Я буду продовжувати записувати, щоб сказати, абсолютно не науковим спостереженням, що відбулася така революція в апаратній частині речей, але революція в програмному забезпеченні надзвичайно повільна. Отримання якісних одночасних інструментів для всіх програмістів - це ще нелегка робота, і паралельність - це все-таки те, що нагадує навіть досвідчених паралельних розробників важко відтворити способами.
Jesse C. Slicer

2
Я просто хочу зазначити, що, оскільки терміни прогнозування невірні, це не обов'язково робить прогнози неправильними. Цілком очевидно, що ключові моменти, які ви перерахували вище, не отримали важливого значення, але були зроблені кроки у напрямку кожної з цих точок. Тож я б сказав, що вищезазначені прогнози стануть істинними, це лише питання, коли. КОЛИ буде, коли це стане вимогою, а не просто бажанням. Знання, коли цей поріг буде перекреслено - це чому передбачити, коли так важко.
Данк

Відповіді:


23

Так, але це залежить.

Ви не можете розраховувати писати нетривіальне , високоефективне програмне забезпечення, не скориставшись паралельним обладнанням та використовуючи паралельність як техніку структурування програми. Але більшість програмного забезпечення є як тривіальною, так і неефективною. Веб-додаток не спрацьовує великого скорочення чисел, а додатки CRUD не мають нічого іншого, як жорсткі межі часового моделювання та медичного програмного забезпечення.

Зокрема, розробникам ігор потрібно дбати про це, адже ігри - це найпоширеніший тип додатків із м'якими вимогами до реального часу. Проблема полягає в мобільному телефоні, де ви хочете вичавити якомога більше обчислювальної та енергетичної потужності з інтегрованого чіпа з двома ядрами процесора та графічним процесором низької потужності. Це ще одна причина, що так багато розробників дивляться на Haskell і чекають мов, таких як Rust, щоб дозріти - ми хочемо безпеку та ефективність сучасного обладнання.

З 2005 року ми набули нових та вдосконалених інструментів, таких як OpenCL, CUDA, OpenMP та векторні набори інструкцій для роботи з паралельністю та паралелізмом даних на усталених мовах. Однак відносні прибульці з самого початку покликані робити багато цікавих речей з одночасністю.

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

Ці системи пропонують безпеку пам’яті, виконуючий час виконання та статичний захист від певних видів гонок. Незмінність Haskell і Rust за замовчуванням значно спрощує людину в управлінні. Erlang був зробити це вже в 80 - х роках, але потреби програмного забезпечення і наших знань про те , як проектувати системи програмування також покращилися з тих пір, слава богу.

Нарешті, багато існуючих мов - я не буду називати імена - готові відмовитись як надійні варіанти написання нового програмного забезпечення. Їх тягар складності та погана абстракція одночасності робить їх непридатними для міркувань сучасних застосувань. Ми просто чекаємо зрілих альтернатив.


2
Я не дуже впевнений у зниженні певних мов, сподіваюся, що ми побачимо код, написаний з більшою увагою на мінімізації залежностей, ніж будь-що інше. Зрештою, виною насправді не мова, а те, як ви її використовуєте. А «низько висячий плід» його використання вже не узгоджується з багатопоточністю / одночасністю.
Метт Д

6
@MattD: І як ви використовуєте мову і мову сам по собі може бути у вині. Скажіть, що ваша програма неправильна. Ти той , хто написав це неправильно, але мова не обов'язково допоможе вам написати це право , і це так само важливо.
Джон Перді

6

Ось кілька точок даних; вирішіть самі, чи вважатиметься це революцією.

Паралельне обладнання

Близько 2005 року як Intel, так і AMD почали масово виробляти 2-ядерні настільні процесори x86 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 році, що дозволяє використовувати масово паралельні GPU в загальних (не графічних) обчисленнях. Модель стає популярною; багато хостинг-компаній (наприклад, Amazon) пропонують графічні процесори для загальних обчислювальних завдань.

Go випущений у 2009 році, містить дуже дешеві попереджувальні потоки ("goututines") і дозволяє ефективно виражати високо одночасні алгоритми.

Інструментарій Akka випущений для Java та Scala в 2009 році, що забезпечує одночасність на основі акторів.

Ерланг (дуже супутня мова) бачить деяке збільшення використання.

Паралельність проти паралелізму

Зауважимо, що для використання паралельних апаратних засобів не обов'язково потрібна програмна паралельність , тобто жонглювання нитками виконання в рамках обчислення. Багато проблем вирішуються паралельними , не взаємодіючими процесами, де кожен процес є традиційною послідовною програмою.

Паралельна обробка може використовувати більш традиційні мови та паралельні рамки, наприклад зменшення карт або MPC або OpenMP. Для таких каркасів наявність декількох ядер на одному кристалі процесора концептуально не дуже відрізняється від того, що у кластері є більше процесорів; різниця в основному в швидкості.

Поки що немає безкоштовного обіду

Швидкість процесора все ще затримується на рівні близько 5 ГГц на високому кінці. Маючи кращі технології на виду, як графенові транзистори, частоти можуть знову зрости в майбутньому, але не дуже скоро.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.