2012-06-29 2 views
7

Я смущен, потому что, читая страницу вики, кажется, что у меня есть система проверки и фиксации для загрузок и хранилищ. Является ли цель решения проблем синхронизации? Является ли это задачей программного обеспечения на основе текущего оборудования, или это аппаратная реализация через ISA? В чем разница между каждой (HW/SW) реализацией?Что такое транзакционная память?

Спасибо.

ответ

3

На уровне реализации транзакционная память является частью уровня кэша. Это позволяет программному обеспечению «попробовать» некоторые операции с памятью, а затем «зафиксировать» их позже, только если никакие другие мультипроцессоры в системе не модифицировали какую-либо память, которая была прочитана или записана. В очень параллельных средах SMP, где большинство доступов не сталкиваются, это может быть быстрее, чем все потоки, блокирующие одни и те же (сильно конкурирующие) примитивы синхронизации.

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

3

С транзакционной памятью gcc Wiki:

In general, implementations come in two forms: a Software Transactional Memory 
(STM) system uses locks or other standard atomic instructions to do its job. 
A Hardware Transactional Memory (HTM) system uses multi-word synchronization 
operations of the CPU to implement the requirements of the transaction directly 
(e.g., see the Rock processor). Because most HTM systems are likely to be best 
effort facilities (i.e., not all transactions can be executed using HTM), 
practical TM implementations that incorporate HTM also have a STM component 
and are thus termed Hybrid Transactional Memory systems.

23

является концепцией использования транзакций, а не замков для синхронизации процессов, которые выполняются параллельно и совместно использовать память.

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

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

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


Целью транзакционной памяти является простота программирования и безопасности; правильно внедренная система ТМ, способная обеспечить соблюдение того, что транзакции используются правильно, дает жесткие гарантии, что в программе нет ошибок параллелизма (взаимоблокировок, условий гонки и т. д.), и требуется только, чтобы программист определял транзакции (а иногда переменные транзакции, если система не просто считает всю память неявно переменной транзакции), без необходимости точно определять, какие блокировки необходимы, получить их в правильном порядке, чтобы предотвратить тупик и т. д. и т. д.«Трансацитоны используются правильно» подразумевает отсутствие обмена данными между потоками без прохождения переменных транзакции, отсутствие доступа к транзакционным данным, кроме транзакций, и никаких «отказоустойчивых» операций внутри транзакций); библиотечные программные системы транзакционной памяти для императивных языков, таких как C, Java и т. д., как правило, не могут обеспечить выполнение всего этого, что может воссоздать возможность некоторых ошибок параллелизма.

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

На практике (с того момента, как несколько лет назад я исследовал проект своих почестей), транзакционная память аппаратного обеспечения на самом деле не была снята, а текущие программные системы оперативной памяти имеют значительные накладные расходы. Таким образом, транзакционная память программного обеспечения больше ориентирована на «разумную производительность, которая масштабируется с доступными процессорами умеренно хорошо и довольно легко кодируется», а не дает вам абсолютную максимальную производительность.

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

+1

Я думаю, что вы перепродажа здесь. ТМ-алгоритмы тонкие, так же, как традиционные методы синхронизации. И полученные ошибки могут быть одинаково непостижимыми. В любом случае вам вообще нужен рабочий традиционный вариант в любом случае в качестве резерва для транзакционных столкновений, поэтому бесплатного обеда нет. По этим причинам STM в значительной степени не удалось поймать. HTM в Haswell выглядит многообещающим, но более того, с точки зрения производительности, чем простота программирования. –

+0

** Если ** система STM направлена ​​на обеспечение надежных гарантий безопасности ** и ** существует механизм для обеспечения того, чтобы (a) доступ к транзакционным данным осуществлялся только из транзакций (b) транзакции никогда не имели побочных эффектов, тогда Гарантируется, что программы STM будут свободны от условий гонки и тупиков. Это работало над реализацией STM. Плохое использование такой STM-системы может дать вам ужасную производительность из-за конкуренции, но она не может дать вам взаимоблокировки или условия гонки, которые могут вызывать проблемы только в чрезвычайно точных условиях синхронизации. – Ben

+0

Эти предпосылки не соответствуют реалиям STM, основанным на библиотеке для C, хотя, поскольку без языковой интеграции нет возможности обеспечить соблюдение (a) и (b), а с C в любом случае довольно сложно что-либо принудить. Я не знаю столько о HTM, но я понимаю, что вы снова нуждаетесь в языковой интеграции для обеспечения гарантий безопасности, поэтому использование HTM с C или ассемблера не идет с бесплатным обедом, нет. – Ben

Смежные вопросы