Механизм запроса поздней блокировки для пропуска аппаратной блокировки (hle)

Иллюстрации

Показать все

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

Реферат

Настоящее изобретение относится к области процессорных режимов выполнения, в частности к запросу блокировки выполнения участков кода.

УРОВЕНЬ ТЕХНИКИ

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

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

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

Другая методика синхронизации данных включает в себя использование транзакционной памяти (TM). Часто транзакционное выполнение включает в себя интеллектуальное выполнение группы из множества микроопераций, операций или команд. В вышеприведенном примере оба потока выполняются в хеш-таблице и их доступ контролируется/отслеживается. Если оба потока осуществляют доступ к одной и той же записи/изменяют одну и ту же запись, то для разрешения конфликта одна из транзакций может быть прекращена. Однако в некоторых приложениях преимущество программирования транзакционной памяти может не использоваться, при этом для пропуска блокировок с целью извлечения преимуществ, аналогичных преимуществам использования транзакционной памяти, применяется методика синхронизации, часто называемая пропуском аппаратной блокировки (HLE).

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

КРАТКОЕ ОПИСАНИЕ ЧЕРТЕЖЕЙ

Иллюстрации представленного изобретения приведены в качестве примера, при этом не предполагается, что прилагаемые чертежи ограничивают изобретение.

На Фигуре 1 проиллюстрирован вариант осуществления мультипроцессорного элемента, включающего в себя механизм запроса поздней блокировки.

На Фигуре 2 проиллюстрирован вариант осуществления логического узла для осуществления запроса поздней блокировки для критического участка.

На Фигуре 3a проиллюстрирован вариант осуществления структурной схемы способа запроса поздней блокировки для текущего критического участка.

На Фигуре 3b проиллюстрирован вариант осуществления структурной схемы способа останова операций по следующему критическому участку во время запроса поздней блокировки для текущего критического участка.

На Фигуре 3c проиллюстрирован другой вариант осуществления структурной схемы способа останова операций по следующему критическому участку во время запроса поздней блокировки для текущего критического участка.

ПОДРОБНОЕ ОПИСАНИЕ

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

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

На Фигуре 1 приведена иллюстрация варианта осуществления многоядерного процессора 100, который способен производить запрос поздней блокировки для критического участка. Как показано на фигуре, процессор 100 содержит произвольное число процессорных элементов. Процессорным элементом может являться поток, процесс, контекст, логический процессор, аппаратный поток, ядро и/или любой процессорный элемент, который, потенциально, использует коллективный доступ к ресурсам процессора, таким как элементы резервирования, элементы выполнения, каналы информации и кэш/память более высокого уровня. Физическим процессором, как правило, называется интегральная схема, которая может содержать произвольное число процессорных элементов, таких как ядра и аппаратные потоки.

Ядром часто называют логический элемент, находящийся на интегральной схеме, способный поддерживать независимое состояние архитектуры, при этом каждое независимо поддерживаемое состояние архитектуры связано с, по меньшей мере, несколькими выделенными ресурсами выполнения. В отличие от ядер, аппаратным потоком обычно называется логический элемент, расположенный на интегральной схеме, способный поддерживать независимое состояние архитектуры, при этом независимо поддерживаемое состояние архитектуры использует коллективный доступ к ресурсам выполнения. Физический процессор 100, как проиллюстрировано на Фигуре 1, содержит два ядра, ядра 101 и 102, которые имеют общий доступ к кэшу более высокого уровня 110. Кроме того, ядро 101 содержит два аппаратных потока 101a и 101b, тогда как ядро 102 содержит два аппаратных потока 102a и 102b. Следовательно, программные сущности, такие как операционная система или приложения, потенциально рассматривают процессор 100 как четыре отдельных процессора, при этом процессор 100 может выполнять четыре программных потока.

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

В одном из вариантов осуществления процессор 100 является многоядерным процессором, способным к параллельному выполнению нескольких потоков. Здесь первый поток связан с регистрами состояния архитектуры 101a, второй поток связан с регистрами состояния архитектуры 101b, третий поток связан с регистрами состояния архитектуры 102a, и четвертый поток связан с регистрами состояния архитектуры 102b. Упоминание процессорных элементов процессора 100 в одном из вариантов осуществления относится к ядрам 101 и 102, а также к потокам 101a, 101b, 102a и 102b. В другом варианте осуществления термин «процессорный элемент» относится к элементам одного уровня иерархии домена обработки. Например, ядра 101 и 102 находятся на одном и том же доменном уровне, потоки 101a и 101b находятся на одном и том же доменном уровне в ядре 101, и потоки 101a, 101b, 102a и 102b находятся на одном и том же доменном уровне в ядрах 101 и 102.

Хотя процессор 100 может содержать асимметричные ядра, то есть ядра с различной конфигурацией, функциональные блоки и/или логические элементы, на Фигуре 1 показаны симметричные ядра. В результате ядро 102, которое по иллюстрации является идентичным ядру 101, не будет подробно рассматриваться в целях упрощения обсуждения.

Как видно из иллюстрации, регистры состояния архитектуры 101a дублируются в регистрах состояния архитектуры 101b, таким образом, имеется возможность хранения отдельных архитектурных состояний/контекстов для процессорного элемента 101a и процессорного элемента 101b. Более мелкие ресурсы, такие как указатели команд и логический элемент переименования в логическом элементе распределения и переименования 130, также могут дублироваться для потоков 101a и 101b. Некоторые ресурсы, такие как переупорядочивающие буферы в блоке переупорядочивания/выведения 135, ILTB 120, буферы загрузки/хранения 180, и очереди могут совместно использоваться посредством разбиения на разделы. Другие ресурсы, такие как внутренние регистры общего назначения, базовый регистр таблицы страницы, низкоуровневый кэш данных и данные буфера TLB 110, блок(-и) выполнения 140 и блок внеочередного выполнения 135, потенциально могут быть совместно использованы целиком. Следует отметить, что поток может быть реализован посредством любого способа организации коллективного доступа к ресурсам ядра 101.

Модуль интерфейса шины 105 должен взаимодействовать с внешними по отношению к процессору 100 устройствами, такими как системная память 175, чипсет, северный мост, или другой интегральной схемой. Память 175 может быть выделена для процессора 100 или находиться в коллективном пользовании с другими устройствами системы. В качестве примеров памяти 175 выступает динамическая оперативная память (DRAM), статическая оперативная память (SRAM), постоянная память (ПЗУ) и долговременное хранилище.

Обычно модуль интерфейса шины 105 содержит буферы ввода/вывода (I/O) для передачи и получения сигналов шины на внутреннее соединение 170. Примеры внутреннего соединения 170 включают в себя шину приемопередатчиков (GTL), шину GTL+, шину с удвоенной скоростью передачи данных (DDR), насосную шину, дифференциальную шину, шину с кэш-когерентностью, сквозную шину, многоточечную шину или другое известное внутреннее соединение, реализующее любой известный протокол шины. Как показано, модуль интерфейса шины 105 также должен взаимодействовать с кэшем более высокого уровня 110.

Кэш более высокого уровня или более отдаленный кэш 110 предназначен для кэширования недавно вызванных и/или выполненных элементов. Следует отметить, что термины «более высокого уровня» и «более отдаленный» относятся к возрастанию или удалению уровней кэша от блока(-ов) выполнения. В одном из вариантов осуществления кэш более высокого уровня 110 является кэшем данных второго уровня. Однако кэш более высокого уровня 110 не ограничивается данным примером, поскольку он может являться кэшем команд или содержать его, при этом он также может называться кэшем трассировки. Кэш трассировки может быть вместо этого присоединен после декодера 125 с целью хранения недавно декодированных трассировок. Модуль 120 также потенциально содержит буфер адресов ветвлений для предсказания ветвлений, которые должны быть выполнены/взяты, и буфер трансляции команд (I-TLB) для хранения записей преобразования адресов для команд. В этом случае процессор, способный к интеллектуальному выполнению, потенциально осуществляет предварительную выборку и интеллектуально выполняются предсказанные ветвления.

Модуль декодирования 125 присоединяется к блоку вызова 120 с целью декодирования вызванных элементов. В одном из вариантов осуществления процессор 100 связан со структурой системы команд (ISA), которая определяет/задает команды, выполнимые на процессоре 100. Здесь команды машинного кода, распознанные ISA, часто содержат часть команды, называемую кодом операции, которая дает ссылку на/задает команду или операцию, которая должна быть выполнена.

В одном из примеров блок распределения и переименования 130 содержит распределитель для резервирования ресурсов, таких как файлы регистров, для хранения результатов обработки команд. Однако потоки 101a и 101b имеют потенциальную возможность внеочередного выполнения, при этом блок распределения и переименования 130 также резервирует другие ресурсы, такие как переупорядочивающие буферы, для трассировки результатов команд. Блок 130 также может содержать узел переименования регистров, предназначенный для переименования регистров ссылок на программу/команду в другие регистры, являющиеся внутренними по отношению к процессору 100.

Блок переупорядочивания/выведения 135 содержит такие компоненты, как вышеупомянутые переупорядочивающие буферы и буферы загрузки/хранения 180, предназначенные для поддержки внеочередного выполнения и последующего выведения команд, выполненных вне очереди. В одном из вариантов осуществления в буферах 180 могут храниться поля/значения для указания того, что связанные доступы к памяти должны быть заблокированы/остановлены до тех пор, пока не завершится запрос поздней блокировки для критического участка. Хотя показано, что буферы 180 размещены в одной области, это не является обязательным для буферов 180 и логического элемента запроса поздней блокировки. В действительности, логика трассировки 180 может быть распределена посредством процессора 100, а также может быть ассоциирована с любой частью процессорного конвейера фронтального или постпроцессора.

Блок узла(-ов) планирования и выполнения 140 в одном из вариантов осуществления содержит планировщик для распределения команд/операций по узлам выполнения. В действительности, команды/операции потенциально распределяют по узлам выполнения в соответствии с доступностью их типов. Например, команда с использованием плавающей точки распределяется на порт узла выполнения, в котором имеется доступный узел выполнения операций с плавающей точкой. Файлы регистров, связанные с узлами выполнения, также включаются для хранения результатов обработки информации команды. Приведенные в качестве примера узлы выполнения содержат узел выполнения с плавающей точкой, узел целочисленного выполнения, узел выполнения перехода, узел выполнения загрузки, узел выполнения сохранения и другие известные узлы выполнения.

Исходя из вышеописанного, следует отметить, что, как показано на иллюстрации, процессор 100 может одновременно выполнять по меньшей мере четыре программных потока. Кроме того, в одном из вариантов осуществления процессор 100 может осуществлять транзакционное выполнение. Транзакционное выполнение обычно включает в себя группирование множества команд или операций в транзакцию, элементарный участок кода или критический участок кода. В некоторых случаях слово «команда» относится к макрокоманде, составленной из множества операций. В процессоре транзакция, как правило, выполняется интеллектуально и завершается после окончания транзакции. В данном документе неопределенность транзакции относится к транзакции, выполнение которой было начато и не было завершено или прервано, то есть ожидающей обработки. Обычно во время, когда транзакция все еще ожидает обработки, производится трассировка адресов, загружаемых или записываемых в пределах памяти.

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

Таким образом, в одном из вариантов осуществления процессор 100 может выполнять пропуск аппаратной блокировки (HLE), при этом аппаратное обеспечение может пропускать блокировки для критических участков и выполнять их одновременно. Здесь пре-компилированные двоичные файлы без транзакционной поддержки или вновь скомпилированные двоичные файлы, для которых применяется программирование с блокировкой, могут получать преимущество от одновременного выполнения посредством поддержки HLE. Как следствие обеспечения явной совместимости, HLE часто включает в себя аппаратное обеспечение для определения критических участков и трассировки доступа к памяти. В действительности, поскольку блокировки, обеспечивающие исключение данных, пропускаются, то доступ к памяти может трассироваться таким же образом, как при выполнении транзакций. Таким образом, схема запроса поздней блокировки, обсуждаемая в данном документе, может применяться для транзакционного выполнения, HLE, другой схемы трассировки доступа к памяти, или их комбинации. Следовательно, нижеприведенное обсуждение выполнения критических участков потенциально содержит ссылку на критический участок транзакции или критический участок, определенный посредством HLE.

В одном из вариантов осуществления устройство памяти, к которому осуществляется доступ, применяется для трассировки доступа к критическому участку. Например, кэш данных низкого уровня 150 применяется для трассировки доступа к критическим участкам, связанным с транзакционным выполнением или HLE. В кэше 150 должны храниться элементы, к которым недавно осуществлялся доступ, такие как операнды, хранимые в памяти, и которые потенциально хранятся в когерентных состояниях памяти, таких как состояния изменения, исключения, коллективного доступа и неисправности (MESI). Кэш 150 может быть организован как полностью ассоциативный, модульно-ассоциативный, кэш прямого отображения или иметь другую известную организацию кэша. Хотя это не представлено на иллюстрации, D-TLB может быть ассоциирован с кэшем 150 с целью хранения последних преобразований адресов из виртуальных/линейных в физические.

Согласно иллюстрации строки 151, 152 и 153 содержат сегменты и поля, например сегмент 151a и поле 151b. В одном из вариантов осуществления поля 151b, 152b и 153b и сегменты 151a, 152a и 153a являются частью одного массива памяти, составляющего строки 151, 152 и 153. В другом варианте осуществления поля 151b, 152b и 153b являются частью отдельного массива, доступ к которому должен осуществляться через отдельные выделенные порты из строк 151a, 152a и 153a. Однако, даже когда поля 151b, 152b и 153b являются частью отдельного массива, поля 151b, 152b и 153b ассоциированы с сегментами 151a, 152a и 153a соответственно. В результате при ссылке на строку 151 кэша 150 строка 151 потенциально содержит сегмент 151a, 151b или их комбинацию. Например, при загрузке из строки 151, может осуществляться загрузка сегмента 151a. Кроме того, при задании поля трассировки для трассировки загрузки из строки 151 может осуществляться доступ к полю 151b.

В одном из вариантов осуществления строки, ячейки, сегменты или слова, например строки 151a, 152a и 153a, могут хранить несколько элементов. Элемент может являться любой командой, операндом, хранимым в памяти операндом, переменной или другой группой логических значений, обычно хранимых в памяти. В качестве примера строка 151 кэша содержит четыре элемента в сегменте 151a, например четыре операнда. Элементы, хранящиеся в строке кэша 151a, могут находиться в упакованном или сжатом состоянии, а также в несжатом состоянии. Кроме того, элементы могут храниться в кэше 150 выровненными или невыровненными относительно границ строк, множеств или маршрутов кэша 150.

Память 150 будет подробнее обсуждаться ниже со ссылкой на нижеприведенные примеры вариантов осуществления.

Кэш 150, так же как и другие элементы и узлы процессора 100, хранит и/или осуществляет операции с логическими значениями. Часто использование логических уровней и логических значений описывается единицами и нулями, представляющими состояния бинарной логики. Например, 1 относится к высокому логическому уровню, и 0 относится к низкому логическому уровню. В компьютерных системах также применялись другие представления значений, например десятичное или шестнадцатеричное представление логических значений или бинарных значений. Например, возьмем десятичное число 10, которое представляется в бинарных величинах как 1010 и в шестнадцатеричной системе как буква A.

В варианте осуществления, проиллюстрированном на Фигуре 1, доступ к строкам 151, 152 и 153 трассируется для поддержки выполнения критических участков. Доступ включает в себя операции, такие как чтение, запись, сохранение, загрузка, откачка, слежение или другие известные виды доступа к ячейкам памяти. Поля трассировки доступа, такие как поля 151b, 152b и 153b, используются для трассировки доступа к соответствующим им строкам памяти. Например, строка/сегмент памяти 151a ассоциирована с соответствующим полем трассировки 151b. Здесь поле трассировки доступа 151b ассоциировано и соответствует строке кэша 151a, поскольку поле трассировки 151b содержит биты, которые являются частью строки кэша 151. Ассоциирование может достигаться посредством физического размещения, как было проиллюстрировано, или другим способом, например соотнесением или отображением поля трассировки доступа 151b со строкой памяти 151a или 151b в аппаратной или программной поисковой таблице.

В качестве упрощенного иллюстративного примера предположим, что поля трассировки доступа 151b, 152b и 153b содержат два транзакционных бита: первый бит чтения трассировки и второй бит записи трассировки. В состоянии по умолчанию, то есть при первом логическом значении, первой и второй биты в полях трассировки доступа 151b, 152b и 153b указывают на то, что к строкам кэша 151, 152 и 153 соответственно не осуществлялся доступ при выполнении критического участка.

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

Таким образом, в случае если осуществляется проверка битов трассировки в поле 151b, связанных со строкой 151, и биты трассировки находятся в состоянии по умолчанию, то к строке кэша 151 не осуществлялся доступ во время ожидания обработки критического участка. И наоборот, если первый бит чтения трассировки имеет второе значение, то ранее при выполнении критического участка осуществлялось чтение строки кэша 151. Кроме того, если первый бит записи трассировки имеет второе значение, то во время ожидания обработки критического участка осуществлялась запись в строку 151. Поля доступа 151b, 152b и 153b потенциально используются для поддержки любого типа транзакционного выполнения или HLE. В одном из вариантов осуществления, в котором процессор 100 может осуществлять транзакционное выполнение, поля доступа 151b, 152b и 153b должны выявлять конфликты и осуществлять проверку правильности. В другом варианте осуществления, в котором аппаратная транзакционная память (HTM), программная транзакционная память (STM) или гибридная память, состоящая из вышеуказанного, применяется для транзакционного выполнения, поля трассировки доступа 151b, 152b и 153b обеспечивают выполнение аналогичных функций трассировки и проверки.

В качестве первого примера того, каким образом поля доступа и, конкретно, биты трассировки потенциально могут использоваться для способствования транзакционному выполнению, в совместно-поданной заявке на патент США, озаглавленной "Аппаратное ускорение для системы программной транзакционной памяти" с серийным номером 11/349,787 описывается использование полей доступа/транзакционных битов для ускорения STM. В качестве другого примера, расширяющая/виртуализирующая транзакционная память, включающая в себя хранение состояний полей доступа/битов трассировки транзакции во второй памяти, обсуждается в совместно-поданной заявке на патент США, озаглавленной "Способ глобального переполнения для виртуализированной транзакционной памяти" с серийным номером 11/479,902 и номером дела поверенного 042390.P23547.

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

В одном из вариантов осуществления для HLE критический участок определяется посредством команды блокировки, то есть командой начала критического участка и соответствующей командой снятия блокировки, то есть командой завершения критического участка. Команда блокировки может включать загрузку из ячейки адреса, то есть проверку, доступна ли блокировка, и изменения/записи в ячейку адреса, то есть обновление ячейки адреса с целью запроса блокировки. Некоторые примеры команд, которые могут использоваться в качестве команд блокировки, включают в себя команду сравнения и обмена, команду проверки и установки битов и команду обмена и добавления. В наборах команд компании Intel IA-32 и IA-64 вышеупомянутые команды включают в себя CMPXCHG, BTS и XADD в соответствии с документами по множествам команд Intel® 64 и IA-32, которые обсуждались выше.

В качестве примера, где предварительно определенные команды, такие как CMPXCHG, BTS и XADD, выявляются/распознаются, логический узел выявления и/или логический узел декодирования выявляет команды, использующие поле кода операции или другое поле команды. Приведем пример - CMPXCHG связана со следующими кодами операций: 0F B0/r, REX + 0F B0/r и REX.W+0F B1/r. В другом варианте осуществления операции, связанные с командой, используются для выявления команды блокировки. Например, в x86 для осуществления элементарного обновления памяти, указывающего на потенциальную команду блокировки, часто используются следующие три микрооперации: (1) Load_Store_Intent (L_S_I) с кодом операции 0x63; (2) STA с кодом операции 0x76; и (3) STD с кодом операции 0x7F. Здесь L_S_I получает ячейку памяти в состоянии исключительного права собственности и производит чтение ячейки памяти, тогда как операции STA и STD изменяют ячейку памяти и осуществляют запись в нее. Другими словами, логический узел выявления ищет загрузку с целью сохранения (L_S_I) для определения начала критического участка. Следует отметить, что команды блокировки могут иметь любое число других операций как с памятью, так и с не-памятью, связанных с операциями чтения, записи и изменения памяти.

Часто стек, например стек блокировок 205, используется для хранения записи, такой как запись 206, которая ассоциирована с командой блокировки. Запись команды блокировки (LIE) 206 может содержать произвольное количество полей для хранения информации, относящейся к критическим участкам, такой как физический адрес хранилища команд блокировки (LI Str PA), значение и размер загрузки команды блокировки, разблокированное значение, значение и размер хранилища команд блокировки, заблокированное значение, счетчик микроопераций, флаг снятия, флаг запроса поздней блокировки и поле указателя последней команды.

Здесь команда снятия блокировки, соответствующая команде блокировки, обозначает конец критического участка. Логический узел выявления осуществляет поиск команды снятия блокировки, соответствующей адресу, измененному командой блокировки. Следует отметить, что адрес, измененный командой блокировки, может находиться в LIE 206 в стеке блокировки 205. В результате в одном из вариантов осуществления команда снятия блокировки включает в себя любую операцию сохранения, которая устанавливает адрес, измененный соответствующей командой блокировки, обратно на незаблокированное значение. Адрес, на который ссылается команда L_S_I, хранящийся в стеке блокировки 206, сравнивается с последующими командами сохранения с целью выявления соответствующей команды снятия блокировки. Более подробную информацию о выявлении и предсказании критических участков можно найти в совместно-поданной заявке на патент США, озаглавленной "Механизм выявления и предсказания критических участков для пропуска аппаратной блокировки", серийный номер заявки 11/599,009.

Другими словами, при использовании HLE, в одном из вариантов осуществления критический участок разграничивается командой L_S_I и соответствующей командой сохранения снятия блокировки. Аналогично, критический участок транзакции определяется командой начала транзакции и командой окончания транзакции. Таким образом, ссылка на команду/операцию начала критического участка включает в себя любую команду, запускающую HLE, транзакционную память, или другой критический участок, тогда как ссылка на команду/операцию окончания критического участка включает в себя запуск HLE, транзакционную память или другие команды окончания критического участка.

В одном из вариантов осуществления буфер доступа, например буфер загрузки 220 и/или буфер хранения 280, используется для хранения записей доступа, связанных с операциями доступа к памяти. Каждая запись буфера доступа содержит поле/сегмент кода блока. По умолчанию поле кода блока предназначено для хранения первого значения, например незаблокированного значения, для указания, что соответствующая операция доступа к памяти является свободной для размещения. Однако, когда инициируется запрос поздней блокировки для текущего критического участка, поля кода блока для записей буфера, связанных со следующим критическим участком, обновляются и получают второе значение или заблокированное значение для указания того, что связанные операции доступа к памяти должны быть заблокированы/остановлены.

Как показано на иллюстрации, буфер загрузки 220 содержит множество записей буфера загрузки, такие как записи 228-233. Когда встречается операция загрузки, в буфере загрузки 220 создается/сохраняется запись буфера загрузки. В одном из вариантов осуществления буфер загрузки 220 хранит записи буфера загрузки в программном порядке, то есть в том порядке, в каком команды или операции упорядочены в коде программы. Здесь на самую раннюю запись буфера загрузки 228, то есть на самую последнюю сохраненную запись буфера загрузки, ссылается хвостовой указатель загрузки 235. В отличие от этого на самую старую запись буфера загрузки 230, которая не является вышестоящей загрузкой, ссылается головной указатель загрузки 236.

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

Запись буфера загрузки 230 может содержать информацию любого типа, например значение обновления памяти, значение указателя, ссылку на связанную операцию загрузки, ссылку на адрес, ассоциированный с операцией загрузки, значение, загруженное из адреса, и другие соответствующие значения, флаги или ссылки буфера загрузки. Следует отметить, что буфер хранения 280 может функционировать аналогичным буферу загрузки 220 образом, так как буфер хранения 280 изображен как содержащий записи 281-286 и поле кода блока 283a для записи 283. Кроме того, как буфер загрузки 220, так и буфер хранения 280 содержат вышестоящие сегменты загрузки 250 и 280 соответственно. В результате, во время транзакционного выполнения или HLE, доступы предварительной пересортировки, доступы после пересортировки или их комбинация можгут применяться для обновления битов трассировки доступа 271-273a-b. В совместно-поданной заявке на патент США, озаглавленной "Пост-пересортировочная схема для трассировки предварительного доступа при транзакционном выполнении" и имеющей серийный номер 11/517,029, более подробно обсуждается использование пост-пересортировочной трассировки доступа для предварительного доступа к памяти. Кроме того, в совместно-поданной заявке на патент США, озаглавленной "Гибридная пре- и пост-пересортировочная схема пропуска аппаратной блокировки (HLE)", имеющей серийный номер 11/936,243, обсуждается гибридная схема для трассировки предварительного доступа.

В одном из вариантов осуществления каждая запись буфера загрузки, такая как запись 230, содержит поле кода блока, такое как поле кода блока 225. В качестве примера, предположим, что операция загрузки с целью сохранения (LSI), соответствующая записи загрузки 230, ссылается на адрес системной памяти. Предположим, что элемент, на который ссылается адрес системной памяти, в текущий момент находится в строке кэша 271a, при этом он может как исходно принадлежать кэшу и находиться в строке кэша 271a, так и считываться в ответ на его отсутс