Транзакційна пам'ять
Було запропоновано приєднати статтю Апаратні реалізації транзакційної пам'яті до цієї статті або розділу, але, можливо, це варто додатково обговорити. Пропозиція із січня 2020. |
Транзакційна пам'ять — один з підходів у реалізації рівночасних обчислень, при якому деякі групи load-store інструкцій виконуються атомарно. Даний механізм схожий на транзакції у базах даних, але застосований до операцій у спільній пам'яті.
Системи транзакційної пам'яті реалізують високорівневу абстракцію, на противагу низькорівневим примітивам синхронізації потоків виконання. Така абстракція дозволяє координувати рівночасні записи і зчитування спільних даних у паралельних обчислювальних системах.[1]
Завдання
Рівночасне програмування потребує синхронізації у випадку, коли паралельні потоки виконання намагаються отримати доступ до спільного ресурсу. Така синхронізація досягається за допомогою спеціальних примітивів (як правило, низькорівневих), які є «песимістичними»[уточнити], і не дозволяють потокам за межами критичної секції робити будь-які зміни. До того ж, процес заволодіння (acquire) і звільнення (release) примітивів може може спричиняти додатковий overhead[уточнити], особливо у випадках, коли конфліктів між потоками відносно небагато. Транзакційна пам'ять забезпечує optimistic concurrency control[en], дозволяючи потокам паралельно виконуватися з мінімальною інтерференцією.[2]
Метою системи транзакційної пам'яті є прозора підтримка регіонів коду, відмічених як «транзакції», шляхом обов'язкового застосування атомарності, узгодженості та ізоляції.
Транзакція — це набір дій, що виконуються і записують зміни до того, як станеться конфлікт. У випадку виявлення конфлікту транзакція повертається до свого початкового стану (тобто до того стану, коли не було зроблено ніяких змін), і запускається повторно, аж допоки всі конфлікти не буде усунено. Перед тим, як завершено комміт[en], порядок операцій усередині транзакції є довільним — це контрастує з методом синхронізації, заснованому на примітивах lock/unlock, де операції відбуваються послідовно. Таким чином, якщо модифікація спільних ресурсів відбувається нечасто, транзакції уможливлюють додатковий паралелізм. У транзакційному підході програміст не повинен явно вказувати критичні секції — як наслідок, програми з застосуванням транзакційної пам'яті не можуть призвести до взаємного блокування.[2]
Джерела
- ↑ Harris, Tim; Larus, James; Rajwar, Ravi (2 червня 2010). Transactional Memory, 2nd edition. Synthesis Lectures on Computer Architecture (англ.). 5 (1): 1—263. doi:10.2200/S00272ED1V01Y201006CAC011. ISSN 1935-3235.
- ↑ а б Transactional Memory: History and Development. Kukuruku Hub (англ.). Процитовано 16 листопада 2016.