Яка модель обчислення "найкраща"?


41

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

В результаті у нас є десяток алгоритмів для, наприклад, SORT-задачі для різних моделей обчислення. На жаль, ми навіть не можемо бути впевнені, що реалізація алгоритму із часом виконання O (n) у слові RAM з дозволеними бітовими векторними операціями буде працювати швидше, ніж реалізація алгоритму із часом виконання O (n⋅logn) у слово ОЗУ (я, звичайно, кажу лише про "хороші" реалізації).

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


1
Перехресне повідомлення на MathOverflow ( mathoverflow.net/questions/44558/… ), хоча тут переспрямовано.
Дейв Кларк

@Tatiana, Добре запитання, що ви розумієте під "найкращим"? Ви маєте на увазі модель з теоретичним часом виконання, близькою до "реального" часу виконання?
Мохаммед Аль-Туркстані

8
Якщо ви хочете точно моделювати "реальні" часи роботи, то, здається, може бути важливо точно моделювати кеші. Зокрема, сучасні обчислення мають багато шарів кешування (процесор, оперативна пам’ять, диск і т. Д.), Причому деякі шари на порядок менші, ніж інші; не викликає сумніву, що "реальний" час роботи алгоритму визначається кількістю пропусків кешу. Анекдотично я чув, що одна з причин того, що бар'єрні методи в лінійному програмуванні працюють настільки добре, незважаючи на їхні погані теоретичні гарантії, полягає в тому, що вони часто є досить кеш-ефективними.
mhum

4
Наскільки я можу сказати, як каже mhum, найбільші невідповідності передбачуваних час роботи в моделі слова ОЗУ та реального часу роботи, як правило, виникають через пошук даних ... неправильні змінні знаходяться в кешованій пам’яті, а час пошуку сповільнюється. вниз величезно через це. Було багато спроб моделювати це за допомогою теоретичної моделі ієрархічної пам'яті, і я не вірю, що будь-яка з цих спроб була дуже успішною, тому що моделі в кінцевому підсумку є занадто складними, щоб легко працювати з ними.
Петро Шор

2
Якщо у вас є алгоритм, який, на вашу думку, може бути корисним на практиці, і ви хочете, щоб він фактично використовувався, найкраще, що ви можете зробити, щоб це забезпечити - це реалізувати його або змусити когось іншого реалізувати його (навіть якщо це не добре достатня реалізація для включення в практичне програмне забезпечення). Для прикладу в цьому випадку подивіться історію алгоритму стиснення даних LZW. Насправді, мабуть, немає сенсу намагатися зрозуміти, як кешування впливає на алгоритм, якщо це не той, який люди хочуть реалізувати; інакше ніхто не зверне уваги на ваші результати.
Петро Шор

Відповіді:


30

Я завжди вважав стандартну модель оперативної пам’яті Word «найкращою» у вашому розумінні. Кожен, хто навчився програмувати на такій мові, як C (або будь-які вільні еквіваленти, такі як Java тощо), має на увазі саме цю модель, коли думає про комп'ютер.

Звичайно, іноді вам потрібні узагальнення залежно від режимів, в яких ви працюєте. Модель зовнішньої пам’яті є важливою, яку слід пам’ятати. Він застосовується не тільки при роботі з дисками, але і в розумінні (змушує вас дбати про кеш). Звичайно, поводження з ним занадто серйозно може також призвести до безглуздих результатів, оскільки чиста модель зовнішньої пам'яті не враховує обчислення. Ще одне узагальнення ОЗУ Word - це паралелізм, але там ми зараз усі трохи заплутані :)

O(n)O(nlgn)nn

Остаточне зауваження щодо алгоритмів та "реальності": завжди пам’ятайте, чого ви намагаєтесь досягти. Працюючи в алгоритмах, ми намагаємося вирішити найскладніші проблеми там (наприклад, SAT на 50 змінних або сортуючи мільярд чисел). Якщо ви намагаєтесь сортувати 200 чисел або розв’язувати SAT на 20 змінних, вам не потрібен фантазійний алгоритм. Ось чому більшість алгоритмів насправді є банальними. Це не говорить нічого поганого щодо алгоритмічних досліджень - ми просто трапимося зацікавленими в тій незвичайній 1/1000 реальних проблем, які трапляються важко ...


Дякую за вашу відповідь. Я хочу зрозуміти, які узагальнення варто додати до слова ОЗУ. Чи можемо ми описати модель, яка буде включати в себе всі ці хитрощі, такі як біт-векторні операції, паралелізм, кеш-пам’яті та все ще бути простими?
Тетяна Стариковська

10

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

Мульти-стрічковий апарат Тьюрінга, безумовно, теоретично добре визначений, і багато алгоритмів були розроблені та проаналізовані в цій моделі протягом багатьох років. Однак дехто це не стосується достатньо близько до того, як працюють справжні комп’ютери, щоб справді бути хорошою моделлю, яку можна використовувати у 21 столітті. З іншого боку, модель Word-RAM набула популярності і, схоже, більш точно відображає роботу сучасних комп’ютерів (операції над словами, не бітами, постійний доступ у часі до пам'яті). Однак є аспекти, які є менш ідеальними. Наприклад, немає жодної слова RAM-моделі. Спершу слід вказати, які операції над словами слід дозволити в постійний час. Існує безліч варіантів цього без єдиної прийнятої відповіді. По-друге, розмір слова w, як правило, встановлюється з ростом вхідного розміру (щонайменше так само швидко, як log (n)), щоб дозволити адресувати будь-який елемент у пам'яті за допомогою постійної кількості слів. Це означає, що треба уявити нескінченний клас машин, на яких працює ваш алгоритм, або ще гірше, що машина змінюється, коли ви подаєте їй більше даних. Це неприємна думка як мінімум для найчистіших серед моїх студентів. Нарешті, ви отримуєте дещо дивовижні результати складності за допомогою слова RAM-моделі, яка може не співпадати з тими, хто навчається студентом. Наприклад, множення двох n-бітних чисел є O (n) часом у цій моделі, а просто читання в n-бітовій рядку - це раптово підлінійна операція часу. Це означає, що треба уявити нескінченний клас машин, на яких працює ваш алгоритм, або ще гірше, що машина змінюється, коли ви подаєте їй більше даних. Це неприємна думка як мінімум для найчистіших серед моїх студентів. Нарешті, ви отримуєте дещо дивовижні результати складності за допомогою слова RAM-моделі, яка може не співпадати з тими, хто навчається студентом. Наприклад, множення двох n-бітних чисел є O (n) часом у цій моделі, а просто читання в n-бітовій рядку - це раптово підлінійна операція часу. Це означає, що треба уявити нескінченний клас машин, на яких працює ваш алгоритм, або ще гірше, що машина змінюється, коли ви подаєте їй більше даних. Це неприємна думка як мінімум для найчистіших серед моїх студентів. Нарешті, ви отримуєте дещо дивовижні результати складності за допомогою слова RAM-моделі, яка може не співпадати з тими, хто навчається студентом. Наприклад, множення двох n-бітних чисел є O (n) часом у цій моделі, а просто читання в n-бітовій рядку - це раптово підлінійна операція часу.

Сказавши все це, якщо ви просто хочете дізнатися, чи ваш алгоритм, швидше за все, працює швидко, або зробить найімовірніше :-)


2
Я думаю, що якщо ви скасовуєте бітові або арифметичні операції з текстовою моделлю, намагаючись уникнути проблеми "машина зростає з розміром вхідних даних", але все ще використовуєте оперативну пам'ять з рівномірною вартістю або покажчиком, то ви просто обманюєте себе: ті інші моделі мають те саме питання. Як вони індексують свій внесок? Відповідь: у справжніх комп’ютерів не вистачає пам'яті, але, незважаючи на те, що все ж зручніше розробляти алгоритми для них, припускаючи, що вони є оперативною пам'яттю (або, можливо, навіть краще використовувати модель, яка враховує витрати на ієрархію пам'яті), ніж припускати, що вони є a DFA.
Девід Еппштейн

4
Наприклад, модель RAM, яку Кнут обговорює, наприклад, коштує часу на пошук адреси з w бітами і аналогічно w часу для додавання двох w бітних чисел (саме так він отримує Theta (n log n) за час, щоб помножити два n -бітові числа в моделі оперативної пам’яті без жодних постійних часових операцій над словами). Цікаво, як змінилися найбільш широко прийняті моделі за останні 20 років і скільки моделей взагалі ніколи більше не обговорюється.
Рафаель

8

Моделі - просто моделі. Я б не штовхнув це занадто далеко; вони розповідають щось про деякі аспекти ваших алгоритмів, але не всю правду.

Я б запропонував вам просто використати стандартну модель оперативної пам'яті слова у своєму аналізі та реалізувати алгоритм і побачити, наскільки добре він працює на практиці.

(Насправді, просто реалізуючи свій алгоритм, не запускаючи його, він говорить вам вже багато про це ... По-перше, це потім можна реально реалізувати.)


3
Ну, у мене є два заперечення. По-перше, не так багато теоретиків реалізують алгоритми, і все ж ми маємо їх якось порівнювати. По-друге, я хочу зрозуміти, які функції комп'ютера ми можемо додати до моделі, не втрачаючи своєї простоти.
Тетяна Стариковська

11
Пропонований Девідом Джонсоном рішення для цього полягає в тому, щоб більше людей реалізовували алгоритми - він запустив ALENEX та DIMACS Challenges для вирішення цього питання. Я маю певний досвід і з цим. З Кен Кларксоном я розробив рандомізований алгоритм опуклого корпусу, який, на нашу думку, буде добре працювати на практиці. Кларксон мав студента в літньому періоді в Bell Labs. Виходячи з обіцянки цієї реалізації, ідеї були відпрацьовані в програму qhull (написана в Центрі геометрії), але з деякими евристичними прискореннями, що означає, що алгоритм більше не має теоретичної гарантії, що він швидко працює.
Петро Шор

5

Якщо ваше обчислювальне завдання стосується скоріше переміщення даних, ніж виконання (арифметичних) операцій, (набір даних величезний, так що вони навіть не вписуються в основну пам'ять), то модель вводу / виводу (впроваджена Aggarwal та Vitter у 1988 р. ) може бути дуже точним. Для таких завдань, як перекручування великого масиву елементів основної пам'яті, це може допомогти використовувати алгоритми, оптимальні для вводу / виводу (при ретельному виконанні).

Для сучасних багатоядерних комп'ютерів точна модель може бути паралельним варіантом, запровадженим Арджем, Гудрихом, Нельсоном та Сітчінавою у 2008 році .


5

Якщо ви маєте на увазі "найкращу" обчислювальну модель, щоб зробити ваше життя складнішим, тоді ви можете використовувати 2-штатну, 3-символьну універсальну машину для твердіння Wolfram.

ПРО : жодне, окрім відчуття ходіння тонкої лінії між розумом і божевіллям;

СУП : тонн ...

:-D (лише жарт, я в основному згоден з попередніми відповідями ...)


1

Більш теоретична примітка: У статті Кінцеві теоретичні моделі нанокомп'ютерів стверджують, що оборотна 3D-сітчаста модель є оптимальною фізичною моделлю обчислення, в тому сенсі, що жодна інша фізична модель не може бути асимптотично швидшою. Обговорюються такі фізичні міркування, як швидкість світла, принцип Ландауера та обмеження Бекенштейна .

Цитувати реферат:

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

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

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