КОМАНДА ВЕКТОРНОГО ТИПА ДЛЯ ПОИСКА РАВНОЗНАЧНОГО ЭЛЕМЕНТА Российский патент 2016 года по МПК G06F9/305 G06F9/34 G06F7/20 

Описание патента на изобретение RU2585975C2

Предпосылки создания изобретения

Настоящее изобретение относится к сфере обработки текста: Более точно, изобретение относится к сфере эффективной обработки символьных данных.

При обработке текстовой информации часто требуется выполнить сравнение символьных данных, в том числе (но не ограничиваясь) сравнение символьных строк. Обычно команды, применяемые для сравнения символьных данных, в один момент времени выполняют сравнение одиночного байта данных.

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

Сущность изобретения

Для преодоления недостатков уровня техники предложен способ выполнения машинной команды в центральном процессорном устройстве, включающий получение процессором машинной команды для выполнения. Команда определена для выполнения компьютером в соответствии с архитектурой компьютера и содержит: по меньшей мере одно поле кода операции для указания кода операции, идентифицирующего операцию, выполняемую по команде векторного типа для поиска равнозначного элемента (от англ.: Vector Find Element Equal); поле расширения, используемое для обозначения одного или более регистров; поле первого регистра, объединяемое с первой частью указанного поля расширения для обозначения первого регистра, причем указанный первый регистр содержит первый операнд, являющийся векторным операндом, содержащим заданное число элементов; поле второго регистра, объединяемое со второй частью указанного поля расширения для обозначения второго регистра, причем указанный второй регистр содержит второй операнд, являющийся векторным операндом, содержащим заданное число элементов; поле третьего регистра, объединяемое с третьей частью указанного поля расширения для обозначения третьего регистра, причем указанный третий регистр содержит третий операнд, являющийся векторным операндом, содержащим заданное число элементов; поле маски, которое содержит один или более управляющих флагов (параметров), предназначенных для использования во время выполнения машинной команды. Способ также включает выполнение машинной команды, включающее: принятие решения о том, содержит ли поле маски флаг поиска нуля, указывающий на необходимость поиска в векторе равного нулю элемента; на основе поля маски, содержащего флаг поиска нуля, указывающий на необходимость поиска в векторе равного нулю элемента, выполнение поиска во втором операнде равного нулю элемента, причем в результате поиска предоставляется индекс равного нулю элемента, содержащий либо индекс найденного в результате поиска равного нулю элемента, либо длину вектора, если равных нулю элементов не найдено; выполняемое в параллельном режиме сравнение каждого элемента второго операнда с каждым элементом третьего операнда на предмет равенства их значений, причем в результате сравнения предоставляется индекс сравнения, основанный на направлении поиска и длине элементов вектора и содержащий либо индекс найденного в результате сравнения элемента с равенством значений, либо длину вектора, если равнозначных элементов в результате сравнения не найдено; формирование результата, причем в зависимости от того, выполнялся ли поиск равного нулю элемента, результат содержит одно из двух: если поиск равного нулю элемента не выполнялся, то результат содержит индекс сравнения; если поиск равного нулю элемента выполнялся, то результат содержит минимальное из значений индекса сравнения и индекса равного нулю элемента.

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

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

Краткое описание чертежей

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

На чертежах показано:

на фиг. 1 - схема примера вычислительной среды, в состав которой могут входить и в которой могут использоваться один или более аспектов настоящего изобретения,

на фиг. 2А - схема другого примера вычислительной среды, в состав которой могут входить и в которой могут использоваться один или более аспектов настоящего изобретения,

на фиг. 2Б - более детальная схема запоминающего устройства из состава вычислительной среды, показанной на фиг. 2А, согласно варианту осуществления настоящего изобретения,

на фиг. 3 - схема варианта формата команды векторного типа для поиска равнозначного элемента согласно варианту осуществления настоящего изобретения,

на фиг. 4 - схема варианта процедуры, связанной с командой векторного типа для поиска равнозначного элемента, согласно варианту осуществления настоящего изобретения,

на фиг. 5 - схема взаимодействия узлов обработки, реализующая процедуру, показанную на фиг. 4, согласно варианту осуществления настоящего изобретения,

на фиг. 6 - схема примера файла регистра согласно варианту осуществления настоящего изобретения,

на фиг. 7 - схема варианта формата команды векторного типа для поиска элемента, равнозначного любому (от англ.: Vector Find Any Equal), согласно варианту осуществления настоящего изобретения,

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

на фиг. 9 - графическое представление варианта осуществления компьютерного программного продукта, содержащего один или более аспектов настоящего изобретения,

на фиг. 10 - схема варианта осуществления хост-компьютерной системы для внедрения и использования одного или более аспектов настоящего изобретения,

на фиг. 11 - схема другого варианта осуществления компьютерной системы для внедрения и использования одного или более аспектов настоящего изобретения,

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

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

на фиг. 14А - схема варианта осуществления исполнительного устройства из состава компьютерной системы, показанной на фиг. 13, для внедрения и использования одного или более аспектов настоящего изобретения,

на фиг. 14Б - схема варианта осуществления устройства ветвления из состава компьютерной системы, показанной на фиг. 13, для внедрения и использования одного или более аспектов настоящего изобретения,

на фиг. 14В - схема варианта осуществления устройства загрузки-хранения из состава компьютерной системы, показанной на фиг. 13, для внедрения и использования одного или более аспектов настоящего изобретения,

на фиг. 15 - схема варианта осуществления эмулируемой (виртуальной) хост-компьютерной системы для внедрения и использования одного или более аспектов настоящего изобретения.

Подробное описание

Согласно варианту осуществления настоящего изобретения, предоставляется возможность эффективной обработки символьных данных, в том числе (но не ограничиваясь) буквенных символов на любом языке, чисел, образованных из цифр, знаков пунктуации и/или прочих символов. Указанные символьные данные могут являться строками данных или не являться строками данных. С символьными данными связаны стандарты, примерами которых, в том числе, являются: ASCII (от английского American Standard Code for Information Interchange - Американский стандартный код обмена информацией); Юникод (стандарт Международной организации по стандартизации представления символов всех национальных алфавитов), в том числе (но не ограничиваясь) UTF 8 (от английского Unicode Transformation Format - формат преобразования Юникода); UTF16 и т.д.

Согласно одному из вариантов осуществления, вводится команда Find Element Equal, которая сравнивает данные многоэлементных векторов на предмет равенства и формирует признак равенства, если таковое имеет место. Согласно одному из вариантов осуществления, в специально предусмотренном векторном регистре сохраняется индекс, связанный с тем элементом, которому найден равный элемент.

Согласно настоящей заявке, длина элемента векторного регистра (также используется термин "вектор") составляет, например, один, два или четыре байта; векторным операндом является, например, операнд типа SIMD (от английского Single Instruction, Multiple Data - одиночный поток команд, множественный поток данных), состоящий из множества элементов. Согласно другим вариантам осуществления, длина элементов может быть иной, и векторный операнд необязательно имеет тип SIMD и/или может содержать один элемент.

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

Согласно другому варианту осуществления, вводится команда векторного типа для поиска элемента, равнозначного любому (от англ.: Vector Find Any Equal), которая в векторе выполняет поиск определенных символов и/или равных нулю элементов и возвращает маску или индекс (порядковый номер) байта удовлетворяющего условию символа или равного нулю элемента.

Схема одного из вариантов осуществления вычислительной среды для внедрения и использования одного или более вариантов настоящего изобретения показана на фиг. 1. Вычислительная среда 100 содержит, например, процессор 102 [например, центральное процессорное устройство (ЦПУ)], запоминающее устройство 104 (например, основное запоминающее устройство) и одно или более устройств ввода-вывода и/или один или более интерфейсов 106, соединенных с другой вычислительной средой, например, через одну или более шин 108 и/или с помощью иных соединений.

Согласно варианту осуществления, процессор 102 основан на архитектуре z/Architecture (торговая марка, обозначающая архитектуру линейки мейнфреймов), предложенной корпорацией International Business Machines Corporation (корпорацией IBM) и являющейся частью сервера, такого как сервер System z (торговая марка, обозначающая линейку мейнфреймов), который также предлагается корпорацией International Business Machines Corporation и в котором реализована архитектура z/Architecture. Один из вариантов осуществления архитектуры z/Architecture описан в публикации IBM "z/Architecture Principles of Operation" (от англ.: "Принцип действия архитектуры z/Architecture", публикация IBM №SA22-7832-08, 9-е издание, август 2010 г.). Согласно одному из вариантов осуществления, процессор выполняет команды операционной системы, такой как z/OS, также предлагаемой корпорацией IBM. IBM®, Z/ARCHITECTURE® и Z/OS® являются зарегистрированными торговыми марками корпорации International Business Machines Corporation, Армонк, штат Нью-Йорк, США. Прочие наименования, используемые в настоящей заявке, могут также быть зарегистрированными торговыми марками, торговыми марками или наименованиями продуктов корпорации International Business Machines Corporation или других компаний.

Согласно другому варианту осуществления, процессор 102 основан на архитектуре POWER Architecture (от английского Performance Optimization With Enhanced RISC - оптимизация производительности с применением улучшенной архитектуры RISC), предложенной корпорацией IBM. Одна из реализаций архитектуры POWER Architecture описана в публикации корпорации IBM "Power ISA™ Version 2.06 Revision В" от 23 июля 2010 г. POWER ARCHITECTURE® является зарегистрированной торговой маркой корпорации International Business Machines Corporation.

Согласно другому варианту осуществления, процессор 102 основан на архитектуре Intel, предложенной корпорацией Intel. Одна из реализаций архитектуры Intel описана в публикациях "Intel® 64 and IA-32 Architectures Developer′s Manual: Vol.2B, Команды Set Reference, A-L", номер заказа 253666-041US, декабрь 2011 г., и "Intel® 64 and IA-32 Architectures Developer′s Manual: Vol.2B, Команды Set Reference, M-Z", номер заказа 253667-041US, декабрь 2011 г.. Intel® является зарегистрированной торговой маркой корпорации Intel Corporation, г. Санта-Клара, штат Калифорния, США.

Согласно другому варианту осуществления, схема компьютерного окружения для внедрения и использования одного или более аспектов настоящего изобретения показана на фиг. 2А. В данном примере компьютерное окружение 200 содержит, например, собственное ЦПУ 202, запоминающее устройство 204 и одно или более устройств ввода-вывода и/или интерфейсов 206, соединенных между собой, например, через одну или более шин 208 и/или соединений другого типа. Например, компьютерное окружение 200 может содержать: процессор PowerPC, сервер pSeries или сервер xSeries, предложенные корпорацией International Business Machines Corporation, Армонк, штат Нью-Йорк, США; сервер HP Superdome с процессорами Intel Itanium II, предложенный корпорацией Hewlett Packard Corporation, г. Пало-Альто, штат Калифорния, США; и/или другие электронно-вычислительные машины, основанные на архитектурах, предложенных корпорациями International Business Machines Corporation, Hewlett Packard, Intel, Oracle или другими компаниями и корпорациями.

Собственное ЦПУ 202 содержит один или более собственных регистров 210, таких как один или более регистров общего назначения и/или один или более регистров специального назначения, используемых при выполнении вычислений в компьютерном окружении. Перечисленные регистры содержат информацию, которая отражает состояние компьютерного окружения в каждый отдельно взятый момент времени.

Кроме того, собственное ЦПУ 202 выполняет команды и программный код, которые хранятся в запоминающем устройстве 204. Согласно одному из примеров, ЦПУ выполняет код 212 эмулятора, хранящийся в запоминающем устройстве 204. Этот код позволяет компьютерному окружению, сконфигурированному по одной архитектуре, эмулировать (т.е. имитировать) другую архитектуру. Например, код 212 эмулятора позволяет электронным вычислительным машинам, основанным на архитектурах, отличных от z/Architecture, таким как процессоры PowerPC, серверы pSeries, серверы xSeries, серверы HP Superdome или другим, имитировать архитектуру z/Architecture и выполнять программное обеспечение и команды, разработанные для архитектуры z/Architecture.

Использование кода 212 эмулятора показано более подробно на схеме фиг. 2Б. Гостевые команды 250 содержат команды программного обеспечения (например, машинные команды), которые были разработаны для выполнения на архитектуре, отличной от архитектуры собственного ЦПУ 202. Например, гостевые команды 250 могли были быть разработаны для исполнения на процессоре 102, построенном по архитектуре z/Architecture, однако вместо этого эмулируются на собственном ЦПУ 202, которое может быть, например, процессором типа Intel Itanium II. В одном из примеров код 212 эмулятора содержит устройство 252 выборки команд, предназначенное для получения одной или более гостевых команд 250 из запоминающего устройства 204 и, возможно, для выполнения локальной буферизации (временного хранения) полученных команд. Этот код 212 эмулятора также содержит процедуру 254 трансляции команд, предназначенную для определения типа поступившей гостевой команды и трансляции указанной гостевой команды в одну или более соответствующих собственных команд 256 (т.е. команд, предназначенных для исполнения собственным ЦПУ, построенным по собственной архитектуре). В состав процедуры трансляции входят, например, идентификация функции, которая должна выполняться гостевой командой, и выбор собственной команды или набора команд для выполнения этой функции.

Кроме того, эмулятор 212 содержит процедуру 260 управления эмуляцией, обеспечивающую исполнение собственных команд. Процедура 260 управления эмуляцией может заставить собственное ЦПУ 202 выполнять программу из собственных команд, которая имитирует одну или более раннее поступивших гостевых команд, и по окончании этого вычислительного процесса возвращать управление упомянутой процедуре выборки команд для имитации получения следующей гостевой команды или группы гостевых команд. Процесс выполнения собственных команд 256 может содержать загрузку данных в регистр из запоминающего устройства 204, передачу данных из регистра обратно в запоминающее устройство для хранения или выполнение некоторой арифметической или логической операции в соответствии с указаниями процедуры трансляции.

Каждая процедура реализована, например, в программном обеспечении, которое хранится в запоминающем устройстве и выполняется собственным ЦПУ 202. В других примерах одна или более процедур или операций реализованы в постоянном запоминающем устройстве (ПЗУ), в аппаратном или программном обеспечении или в их комбинации. Упомянутые регистры эмулируемого процессора могут имитироваться с использованием регистров 210 собственного ЦПУ или с использованием пространства памяти запоминающего устройства 204. Согласно вариантам осуществления, гостевые команды 250, собственные команды 256 и код 212 эмулятора могут располагаться в одном и том же запоминающем устройстве или могут храниться распределенно (т.е. в различных запоминающих устройствах).

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

В одном из примеров загружаемая, транслируемая и исполняемая гостевая команда 250 является одной из описанных в настоящей заявке команд. Такая команда, предназначенная для одной архитектуры (например, для архитектуры z/Architecture), извлекается из запоминающего устройства, транслируется и представляется набором собственных команд 256 другой архитектуры (например, архитектуры PowerPC, pSeries, xSeries, Intel и т.д.). Затем указанные собственные команды исполняются.

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

Согласно настоящей заявке, векторные команды могут применяться в составе различных архитектур, в том числе (но не ограничиваясь) z/Architecture, Power, Intel и т.д. Несмотря на то, что описываемый в настоящей заявке вариант осуществления ориентирован на архитектуру z/Architecture, векторные команды и один или более аспектов настоящего изобретения могут базироваться и предназначаться для многих других типов архитектур. Архитектура z/Architecture используется исключительно в качестве одного из примеров.

Согласно варианту осуществления, по которому векторный функционал реализован как часть архитектуры z/Architecture, для того, чтобы использовать векторные регистры и команды, в специализированном управляющем регистре (например, управляющем регистре 0) флаги разрешения векторного функционала и векторных регистров должны быть установлены в состояние, например, логической единицы. Если векторный функционал инсталлирован, и векторная команда выполняется без разрешающих флагов, то возникает программное исключение (ошибка) данных. Если же векторный функционал не инсталлирован, и делается попытка выполнить векторную команду, то возникает программное исключение (ошибка) исполнения.

Векторные данные располагаются в запоминающем устройстве, например, в той же самой последовательности, слева направо, как и прочие форматы данных. Разряды формата данных с номерами от 0 до 7 образуют байт в крайней левой (с наименьшим номером) ячейке хранения байтов пространства памяти; разряды с номерами от 8 до 15 образуют байт в следующей за предыдущей ячейке памяти и т.д. В другом примере векторные данные могут располагаться в пространстве памяти запоминающего устройства в иной последовательности, например, справа налево.

Многие векторные команды, поддерживаемые векторным функционалом, снабжены полем, состоящим из специальных разрядов. Такое поле, называемое полем RXB (от английского register extension bit - бит расширения регистра), содержит наиболее значимый разряд для обозначений (т.е. для адресов) векторных регистров операндов. Разряды обозначений векторных регистров операндов, не оговоренные спецификацией команды, являются зарезервированными и должны быть установлены в состояние логического нуля.

Согласно варианту осуществления, поле RXB состоит из четырех разрядов (например, с номерами от 0 до 3), и значения этих разрядов имеют следующее назначение:

разряд 0 - наиболее значимый разряд обозначения векторного регистра первого операнда;

разряд 1 - наиболее значимый разряд обозначения векторного регистра второго операнда, если такой операнд и соответствующий регистр предусмотрены командой;

разряд 2 - наиболее значимый разряд обозначения векторного регистра третьего операнда, если такой операнд и соответствующий регистр предусмотрены командой;

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

Каждый разряд устанавливается в состояние логического нуля или логической единицы, например, ассемблером, в зависимости от номера регистра. Например, в регистрах с номерами от 0 до 15 разряд устанавливается в состояние логического нуля, в регистрах с номерами от 16 до 31 разряд устанавливается в состояние логической единицы и т.д.

Согласно варианту осуществления, каждый разряд поля RXB является разрядом расширения определенного поля в составе команды, указывающего на один или более векторных регистров. Например, в одной или более векторных командах разряд с номером 0 поля RXB служит разрядом-расширением части команды с номерами позиций от 8 до 11, эта часть команды обозначается, например, как V1; разряд с номером 1 поля RXB служит разрядом-расширением части команды с номерами позиций от 12 до 15, эта часть команды обозначается, например, как V2, и т.д.

Согласно другому варианту осуществления, поле RXB содержит дополнительные разряды, и для указания на каждый вектор или регистр в качестве разрядов-расширений используются по два и более разрядов.

Согласно аспекту настоящего изобретения, одной из команд, содержащих поле RXB, является команда векторного типа для поиска равнозначного элемента, структура (схема формата) которой показана на фиг. 3. В одном из примеров команда 300 векторного типа для поиска равнозначного элемента содержит: поля кода операции 302а (например, разряды с номерами 0-7) и 302b (например, разряды 40-47), идентифицирующие операцию векторного типа для поиска равнозначного элемента; поле 304 первого векторного регистра (например, разряды 8-11), используемое для обозначения первого векторного регистра (V1); поле 306 второго векторного регистра (например, разряды 12-15), используемое для обозначения второго векторного регистра (V2); поле 308 третьего второго векторного регистра (например, разряды 16-19), используемое для обозначения третьего векторного регистра (V3); поле 310 первой маски (М5) (например, разряды 24-27); поле 312 второй маски (М4) (например, разряды 32-35); поле 314 RXB (например, разряды 36-39). В одном из вариантов осуществления каждое из полей 304-314 является отдельным и независимым от поля (полей) кода оптации. Кроме того, согласно другому варианту осуществления, указанные поля являются отдельными и независимыми между собой; однако, согласно другим вариантам осуществления, два и более полей могут быть объединенными. Далее приводятся сведения об использовании перечисленных полей.

Согласно варианту осуществления, определенные разряды (например, первые два разряда) кода операции из состава поля 302а кода операции определяют длину и формат команды. В рассматриваемом примере двоичное число в указанных разрядах означает, что длина составляет три полуслова и что формат - операция типа векторный регистр и регистр, с расширенным кодом операции. Каждое из векторных (V) полей совместно с соответствующим разрядом расширения регистра, содержащимся в поле RXB, обозначает некоторый векторный регистр. В частности, векторный регистр, содержащий операнд, обозначается (адресуется) с использованием, например, четырехразрядного поля обозначения регистра и разряда RXB как наиболее значимого. Например, если четырехразрядное поле содержит двоичное число 0110, и в разряде расширения содержится двоичное число 0, то пятиразрядное число 00110 указывает на регистр с номером 6 в десятичной системе счисления.

Нижний индекс в обозначении поля команды соответствует номеру операнда, к которому это поле относится. Например, нижний индекс "1" в обозначении "V1" векторного регистра указывает на соответствие регистра первому операнду и т.д. Операнд регистра имеет ту же длину, что и сам регистр, например 128 бит.

Поле М4, состоящее, например, из четырех разрядов с номерами от 0 до 3, описывает спецификатор длины элемента, например, с помощью разрядов с 1-го по 3-й. Спецификатор длины элемента задает длину элементов операндов векторного регистра. Например, спецификатор длины элемента задает длину элемента равной одному байту, полуслову (например, два байта) или слову (например, четыре байта). Например, значение 0 обозначает длину в один байт, 1 обозначает полуслово, 2 - слово, называемое также полным словом. Если в поле использовано зарезервированное значение, то возникает программное исключение (ошибка) спецификации.

Поле М5 является, например, четырехразрядным, и его разряды с номерами от 0 до 3 имеют, например, следующие значения:

разряд 2 - поле флага ZS (от английского zero search - поиск нуля) поиска нуля: значение 1 указывает, что каждый элемент второго операнда дополнительно сравнивается с нулем (в следующем примере каждый элемент третьего операнда или иного операнда сравниваемого с нулем);

разряд 3 - поле флага СС (от английского condition code - код условия) установки кода условия: значение 0 указывает, что установка кода условия не требуется, значение кода условия остается неизмененным; значение 1 указывает, что код условия устанавливается, например, по следующему правилу:

значение 0: если флаг ZS поиска нуля установлен, то сравнение выявило во втором операнде элемент с нулевым значением, и индекс этого элемента меньше, чем индекс любого из элементов второго операнда, совпадающих с каким-либо элементом третьего операнда;

значение 1: сравнение выявило совпадение некоторого элемента второго операнда с элементом третьего операнда. Если установлен флаг ZS поиска нуля, то указанное совпадение выявлено в элементе, индекс которого меньше или равен индексу равного нулю элемента второго операнда; значение 2: не определено;

значение 3: элементов с совпадающими значениями не выявлено. Согласно одному из вариантов осуществления, при выполнении команды векторного типа для поиска равнозначного элемента в направлении, по одному из вариантов осуществления, слева направо, беззнаковые целые двоичные элементы второго операнда (содержащиеся в регистре, определяемом значением поля V2 и соответствующим ризрядом RXB) сравниваются с соответствующими им беззнаковыми целыми двоичными элементами третьего операнда (содержащимися в регистре, определяемом значением поля V3 и соответствующим разрядом RXB). Если два элемента равны (т.е. их значения совпадают), то индекс первого байта крайнего левого равного элемента помещается в специально предназначенный байт (например, в байт 7) первого операнда (содержащегося в регистре, определяемом значением поля V1 и соответствующим разрядом RXB). В оставшиеся байты первого операнда записываются нули.

Например, если длина элемента составляет один байт, то возвращается индекс байта крайнего левого равного элемента (например, если имеется 16 элементов с номерами от 0 до 15, совпадает элемент с номером 6, то возвращается значение 6 индекса байта). Аналогично, если длина элемента составляет полуслово, имеется восемь элементов с номерами от 0 до 7, и совпадают два байта третьего элемента с номерами 6 и 7, то возвращается значение 6 индекса байта. Если же длина элемента составляет полное слово, имеется четыре элемента с номерами от 0 до 3, и байты с 4-го по 7-й первого элемента совпадают, то возвращается значение 4 индекса байта.

Если совпадающих или равных нулю (если был задан поиск нуля) байтов не выявлено, то в определенном байте (например, в байте 7) первого операнда сохраняется значение индекса, равное длине вектора (например, число байтов; например, 16).

Если в поле М5 установлен флаг поиска нуля, то каждый элемент второго операнда (либо, согласно другому варианту осуществления, другого операнда, в частности, третьего операнда) дополнительно проверяется на предмет равенства нулю (пустому элементу; символу конца строки). Если во втором операнде нулевой элемент обнаружен прежде, чем выявлено равенство каких-либо иных элементов второго и третьего операндов, то в специально предназначенном байте (например, в байте 7) первого операнда сохраняется индекс первого байта равного нулю элемента, а во все прочие элементы первого операнда записываются. Если значение флага установки кода условия равно единице, то значение кода условия устанавливается равным нулю.

Согласно варианту осуществления, сравнение элементов ведется в параллельном режиме. Например, если сравниваемые векторные регистры имеют длину 16 байтов, то одновременно сравниваются 16 байтов. Согласно другому варианту осуществления, кроме того, во время исполнения задается направление векторов: слева направо или справа налево. Например, команда обращается к регистру, флагу состояния или другому объекту, который указывает направление обработки: либо слева направо, либо справа налево. Согласно варианту осуществления, флаг направления не встроен жестко в саму команду, он сообщается команде во время выполнения.

Согласно другому варианту осуществления, команда не содержит поле RXB: расширение не используется вовсе или расширение организовано иным способом, например, по внешнему по отношению к команде указанию, или же расширение содержится в другом поле той же команды.

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

Вначале на шаге 400 принимается решение о том, должен ли быть выполнен поиск нуля (так называемого нулевого элемента, конца строки, символа окончания и т.п.). Если поиск нуля должен быть выполнен, то на шаге 402 выполняется сравнение с нулевыми символами, т.е. поиск равных нулю элементов, результат поиска присваивается выходной переменной nullidx (от английского null index - индекс нулевого символа) 403. Например, если длина элемента - байт, и в пятом байте найден равный нулю элемент, то индекс этого байта (например, 5) помещается в nullidx. Аналогично, если длина элемента составляет полуслово, имеется восемь элементов с номерами от 0 до 7, и значение третьего элемента (т.е. байты с номерами 6 и 7) равно нулю, то в nullidx помещается значение 6 (соответствует индексу байта 6). Аналогично, если длина элемента составляет полное слово, имеется четыре элемента с номерами от 0 до 3, и значение первого элемента (т.е. байты с 4-го по 7-й) равно нулю, то в nullidx помещается значение 4 (соответствует индексу байта 4). Если равный нулю элемент не выявлен, то согласно одному из примеров в nullidx помещается значение, равное длине вектора (например, в байтах; например, 16).

Кроме того, или даже если поиск нуля не должен выполняться, то на шаге 404 в параллельном режиме выполняется множество (например, 16) операций, состоящих в сравнении А и В операцией сравнения. В одном из примеров А -содержимое второго операнда, В - содержимое третьего операнда, и операция сравнения - равенство.

Результат сравнения присваивается переменной 406, называемой либо левым индексом, cmpidxl (от английского comparison index left - индекс сравнения слева), либо правым индексом, cmpidxr (от английского comparison index right - индекс сравнения справа) в зависимости от того, в каком направлении велся поиск: слева или справа. Например, если операция сравнения - равенство, поиск велся слева направо, а сравнение выявило одно или более совпадений, то значение индекса, связанное с первым байтом младшего из совпавших элементов, помещается в cmpidxl. Например, если длина элемента - байт, вектор состоит из 16 элементов (с номерами от 0 до 15) и выявлено равенство в элементе с номером 6, то в переменной cmpidxl сохраняется значение 6. Аналогично, если длина элемента - полуслово, вектор состоит из восьми элементов (с номерами от 0 до 7) и выявлено равенство в элементе с номером 3 (например, в байтах 6 и 7), то возвращается индекс первого байта данного элемента (т.е. значение 6). Аналогично, если длина элемента - полное слово, вектор состоит из четырех элементов (с номерами от 0 до 3) и выявлено равенство в элементе 1 (т.е. в байтах с 4-го по 7-й), то возвращается индекс первого байта данного элемента (т.е. значение 4). Если совпадений не выявлено, то согласно варианту осуществления переменной cmpidxl или cmpidxr (в зависимости от направления поиска) присваивается значение, равное длине вектора (например, в байтах; например, значение 16).

Затем на шаге 408 принимается решение, велся ли поиск слева или справа. Если поиск велся слева, то на шаге 410 переменной cmpidx присваивается значение cmpidxl, в противном случае на шаге 412 переменной cmpidx присваивается значение переменной cmpidxr.

После присвоения значения переменной cmpidx принимается решение, велся ли поиск нуля - шаг 414. Если поиск нуля не велся, то на шаге 416 переменной idx (от английского index - индекс) присваивается значение cmpidx. Если поиск нуля велся, то на шаге 418 переменной idx присваивается минимальное из значений индекса сравнения и индекса нуля (т.е. nullidx). Этим шагом работа алгоритма заканчивается.

На фиг. 5 показана схема, поясняющая выполнение операций по алгоритму, показанному на фиг. 4. В данном примере имеется два входных блока данных, вектор В 500 и вектор А 502. Оба этих вектора поступают на операцию 504 сравнения, которая выполняет сравнение (например, поиск равенства) в параллельном режиме. Кроме того, один из входных векторов, а именно вектор А, поступает также на операцию 506 поиска нулевых символов.

Результаты работы операций сравнения - значение 508 переменных id×L или id×R, а также результат операции поиска нуля - значение 510 переменной nullidx поступают в процедуру 512 определения результата. Процедура 512 также принимает значения следующих управляющих переменных (флагов): справа/слева 514, указывающей направление поиска; поиск нуля 516, показывающей, велся ли поиск нуля; длина элемента 518, указывающей длину каждого элемента векторов (например, байт, полуслово, полное слово). Процедура 512 формирует результат обработки - значение переменной resultidx (от англ.: индекс-результат) 520, которое сохраняется в выходном векторе 522 (например, в его седьмом байте).

Процедура 512 определения результата также содержит операцию 523 обработки кода условия, которая опционально формирует код 524 условия.

Пример псевдокода операции 504 сравнения:

id×L=16; id×R=16

For i=0 to vector_length

If A[i]=to B[i] THEN

id×L=i

Done

For i=vector_length downto 0

If Ai=to B[i] THEN

id×R=i

done

Из данного примера видно, что переменные id×L или id×R (их имена соответствуют направлению поиска) инициализируются значением длины вектора (выраженным, например, в байтах; например, инициализируются значением 16). Затем каждый элемент вектора А сравнивается с соответствующим элементом вектора В. В одном из примеров сравнение ведется побайтно, так что сравнение выполняется для каждого i-го из шестнадцати байтов. В данном примере операция сравнения - равенство, и если выявлено совпадение байтов, то при поиске в направлении слева направо значение индекса совпавшего байта присваивается переменной id×L, а при поиске в направлении справа налево значение индекса совпавшего байта присваивается переменной id×R.

Пример псевдокода операции 506 поиска нуля:

nullidx=16

FOR j=0 to vector_length

IF A[j]==0 THEN

nullidx=j×element_size

Done

Из приведенного примера видно, что каждый j-й элемент вектора проверяется на предмет равенства его значения нулю. Если элемент равен нулю, то переменной nullidx присваивается значение индекса этого элемента, умноженное на длину элемента. Например, если длина элемента составляет полуслово (т.е. два байта) и в элементе 3 выявлен нулевой символ, то 3 умножается на 2, и переменной nullidx присваивается значение 6, что соответствует номеру байта 6. Аналогично, если длина элемента составляет полное слово (т.е. четыре байта), и в элементе 3 выявлен нулевой символ, то 3 умножается на 4, и переменной nullidx присваивается значение 12.

Пример псевдокода процедуры 512 определения результата:

IF Left/Right=Left THEN

cmpidx=id×L

ELSE

cmpidx=id×R

IF zero_detect=ON THEN

resultidx=min(cmpidx, nullidx)

IF Set_CC=ON && nulldix<=cmpidx THEN

CC=0

ELSE

resultidx=cmpidx

IF element_size=byte THEN element_size_mask=′11111′b

IF element_size=2byte THEN element_size_mask=′11110′b

IF element_size=4byte THEN element_size_mask=′1100′b

resultidx=resultidx & element_size_mask

IF SetCC=ON THEN

IF nullidx<cmpidx THEN

CC=0

ELSE IF cmpidx<16 THEN

CC=1

ELSE

CC=3

Из данного примера видно, что если переменная-флаг Left/Right направления поиска указывает направление поиска слева направо, то переменной cmpidx присваивается значение переменной id×L, в противном случае переменной cmpidx присваивается значение id×R.

Далее, если переменная-флаг поиска нуля zerodetect находится в активном состоянии, то переменной resultidx присваивается минимальное из значений переменных cmpidx и nullidx. Затем, если переменная SetCC, т.е. флаг СС установки кода условия находится в активном состоянии и значение переменной cmpidx превышает значение переменной nullidx, то переменной СС значения кода условия присваивается значение ноль. В противном случае (т.е. если поиск нуля не выполнялся) переменной resultidx присваивается значение cmpidx.

Затем: если длина элемента составляет байт, то маска element_size_mask длины элемента устанавливается в состояние 11111; если длина элемента составляет два байта, то маска длины элемента устанавливается в состояние 11110; если длина элемента составляет четыре байта, то маска длины элемента устанавливается в состояние 11100.

Далее переменной resultidx присваивается ее же значение (resultidx), логически умноженное на маску длины элемента. Например, если длина элемента составляет полуслово, и переменная resultidx содержит значение 7 индекса байта, то операция resultidx=00111 AND 11110 (AND - обозначение операции поразрядное логическое И) выдает значение 00110. В результате переменной resultidx присваивается значение 6 (т.е. 00110 в двоичной системе счисления), что совпадает с номером первого байта элемента.

Кроме того, опционально может устанавливаться код условия. Код условия устанавливается, если флаг установки кода условия в команде имеет активное значение, в противном случае код условия не устанавливается. Например, если флаг установлен, то: при nullidx<cmpidx коду условия присваивается значение 0; в противном случае при cmpidx<16 коду условия присваивается значение 1, иначе коду условия присваивается значение 3.

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

Согласно варианту осуществления, имеется 32 векторных регистра, а регистры других типов могут отображаться на область-квадрант векторных регистров. Как показано в примере на фиг. 6, если имеется файл 600 регистров, содержащий 32 векторных регистра 602 длиной 128 разрядов каждый, то шестнадцать регистров 604 с плавающей запятой длиной 64 разряда каждый могут перекрываться с векторными регистрами. Таким образом, например, если изменится содержимое регистра 2 с плавающей запятой, то содержимое векторного регистра 2 также изменится. Для регистров других типов возможны и другие типы отображений.

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

Структура команды векторного типа для поиска элемента, равнозначного любому показана на фиг. 7, на которой, согласно одному из вариантов осуществления, команда 700 векторного типа для поиска элемента, равнозначного любому содержит, например: поля кода операции 702а (например, разряды с 0-го по 7-й) и 702b (например, разряды с 40-го по 47-й), идентифицирующие команду векторного типа для поиска элемента, равнозначного любому; поле 704 первого векторного регистра (например, разряды с 8-го по 11-й), используемое для обозначения первого векторного регистра (V1); поле 706 второго векторного регистра (например, разряды с 12-го по 15-й), используемое для обозначения второго векторного регистра (V2); поле 708 третьего векторного регистра 708 (например, разряды с 16-го по 19-й), используемое для обозначения третьего векторного регистра (V3); поле 710 первой маски (М5) (например, разряды с 24-го по 27-й); поле 712 второй маски (М4) (например, разряды с 32-го по 35-й); поле 714 RXB (например, разряды с 36-го по 39-й). В одном из примеров каждое из полей 704-714 является отдельным и независимым от поля или полей кода операции. Кроме того, согласно одному из вариантов осуществления, поля являются отдельными и независимыми друг от друга; однако согласно другим вариантам осуществления, два и более полей могут объединяться. Сведения по использованию перечисленных полей приводятся далее.

Аналогично описанному выше, в данном примере выбранные разряды (например, первые два разряда) кода операции, располагающиеся в поле 702а кода операции, описывают длину и формат команды. В данном примере выбранные разряды указывают, что длина составляет три полуслова, а формат -векторный регистр и регистровая операция имеет расширенное поле кода операции. Каждое из полей обозначения векторов (V) совместно с соответствующим разрядом расширения, определенным полем RXB, обозначает векторный регистр. В частности, векторный регистр, содержащий операнд, описывается с использованием, например, четырехразрядного числа в поле обозначения регистра и разряда поля RXB, который является наиболее значимым. Например, если в четырехразрядном поле содержится число 0110, и бит расширения - 0, то соответствующее пятиразрядное число 00110 обозначает шестой регистр.

Числовой нижний индекс в обозначении поля, соответствующий номеру операнда, обозначает регистр, к которому относится данное поле. Например, нижний индекс "1" в обозначении "V1" поля векторного регистра обозначает регистр первого операнда и т.д. Длина регистрового операнда совпадает с длиной одного регистра, которая составляет, например, 128 разрядов.

Поле М4, состоящее, например, из четырех разрядов с номерами от 0 до 3, в разрядах, например, с 1-го по 3-й содержит спецификатор длины элемента. Спецификатор длины элемента определяет длину элемента операнда векторного регистра. В одном из примеров спецификатор длины элемента определяет длину в один байт, полуслово (например, два байта) или слово (например, четыре байта). Например, значение 0 соответствует длине в один байт, 1 - полуслово, 2 - полное слово. Если указывается зарезервированное значение, то возникает программное исключение (ошибка) спецификации.

Длина поля М5 составляет, например, четыре разряда, с номерами с 0-го по 3-й, которые, например, содержат:

флаг RT типа результата (1-й разряд): значение 0 указывает, что каждый элемент результата является маской сравнения в длину данного элемента; значение 1 указывает, что в соответствующем байте (например, в байте 7) первого операнда сохраняется индекс байта, а во все прочие элементы первого операнда записываются нули;

флаг ZS поиска нуля (2-й разряд): значение 1 указывает, что каждый элемент второго операнда (или другого операнда) сравнивается с нулем;

флаг СС установки кода условия (3-й разряд): значение 0 указывает, что код условия не устанавливается, его значение не изменяется; значение 1 указывает, что код условия устанавливается, например, по следующему правилу:

значение 0: если флаг ZS поиска нуля установлен, то сравнение не выявило во втором операнде совпадающих элементов, индекс которых был бы меньше индекса равного нулю элемента;

значение 1: некоторые элементы второго операнда совпадают по меньшей мере с одним элементом третьего операнда;

значение 2: все элементы второго операнда совпадают по меньшей мере с одним элементом третьего операнда;

значение 3: ни один из элементов второго операнда не совпадает ни с одним из элементов третьего операнда.

В одном из вариантов осуществления при выполнении команды векторного типа для поиска элемента, равнозначного любому в направлении, согласно одному из вариантов осуществления, слева направо, каждый беззнаковый целый двоичный элемент второго операнда (содержащийся в регистре, определяемом значением поля V2 и соответствующим ему разрядом RXB) сравнивается на предмет равенства с каждым беззнаковым целым двоичным элементом третьего операнда (содержащимся в регистре, определяемом значением поля V3 и соответствующим ему разрядом RXB) и, опционально, если в поле М5 установлен флаг поиска нуля, с нулем.

Если флаг типа результата в поле М5 имеет значение ноль, то в разрядах всех элементов первого операнда (содержащегося в регистре, определяемом значением поля V1 и соответствующим ему разрядом RXB), соответствующих элементам второго операнда, совпавшим с какими-либо элементами третьего операнда, или, опционально, с нулем, устанавливаются единицы; в противном случае устанавливаются нули.

Если флаг типа результата в поле М5 имеет значение единица, то в определенный байт (например, байт 7) первого операнда записывается индекс байта крайнего левого элемента второго операнда, который совпадает с каким-либо элементом третьего операнда или с нулем (например, записывается индекс байта первого байта элемента).

Если флаг типа результата в поле М5 имеет значение единица, и совпадений байтов операндов не выявлено, и (если был установлен флаг поиска нуля) не выявлено равных нулю значений, то в выбранный байт (например, в байт 7) первого операнда записывается значение, равное длине вектора (например, число байтов; например, 16).

Согласно варианту осуществления, направление векторов, слева направо или справа налево, задается на этапе выполнения. Например, команда обращается к регистру, индикатору состояния или другому объекту, который указывает ей направление обработки: слева направо либо справа налево. Согласно варианту осуществления, направление не закодировано в составе команды, оно сообщается команде во время выполнения.

Согласно другому варианту осуществления, команда не содержит поле RXB: расширение не используется вовсе или расширение происходит иным способом, например, по внешнему по отношению к команде указанию, или же расширение содержится в другом поле той де команды.

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

Вначале на шаге 800 инициализируются переменные zeroidx 802, resultidx 804 и resultmask 806. Например, переменной zeroidx присваивается значение, равное длине второго операнда (например, 16); переменной resultidx присваивается значение, равное длине второго операнда (например, 16); разряды переменной resultmask устанавливаются в состояние ноль. Согласно варианту осуществления, длина переменной resultmask составляет 128 разрядов, ее разряды соответствуют 128 разрядам второго операнда.

Далее на шаге 808 из операнда, обозначенного здесь как орА, который является, например, вторым операндом команды, загружается символ (т.е. элемент). Затем на шаге 810 принимается решение, предписывает ли значение флага поиска нуля вести поиск нуля; при любом исходе переменной zeroidx присваивается значение 16. Если поиск нуля предписан, то на шаге 812 выполняется поиск элемента с нулевым значением, и результат этого поиска присваивается выходным переменным zeroidx 802 и resultmask 806. Например, переменной zeroidx присваивается индекс байта крайнего левого байта выявленного элемента, равного нулю, а разряды переменной resultmask, соответствующие этому элементу, устанавливаются в состояние логической единицы. Например, если длина элемента - байт, и равный нулю элемент выявлен в байте с номером 5, то переменной zeroidx присваивается индекс байта, в котором выявлен равный нулю элемент (т.е. присваивается значение 5). Аналогично, если длина элемента - полуслово, имеется восемь элементов, пронумерованных от 0 до 7, и значение третьего элемента (6-й и 7-й байты) равно нулю, то переменной zeroidx присваивается значение 6 (соответствует байту с индексом 6). Аналогично, если длина элемента - полное слово, имеется четыре элемента, пронумерованных от 0 до 3, и значение элемента с первым номером (байты с 4-го по 7-й) равно нулю, то переменной zeroidx присваивается значение 4 (соответствует номеру байта 4). Если равный нулю элемент не выявлен, то, согласно варианту осуществления, переменной zeroidx присваивается значение, равное длине вектора (например, в байтах; например, 16).

Если поиск нуля проводиться не должен, то на шаге 818 загруженный символ сравнивается с каждым из символов операнда, обозначенного здесь как орВ, которым является, например, третий операнд команды. Если выявлено совпадение, то это совпадение отражается в переменных resultidx 804 и resultmask 806. Например, значение переменной resultidx устанавливается равным номеру первого байта совпадающего элемента, а разряды переменной resultmask, соответствующие тому же совпадающему элементу, устанавливаются равными единице. Например, если длина элементов - байт, вектор состоит из 16 элементов, пронумерованных от 0 до 15, и равенство выявлено для элемента с номером 6, то переменной resultidx присваивается значение 6. Аналогично, если длина элемента - полуслово, вектор состоит из восьми элементов (пронумерованы от 0 до 7), и равенство выявлено для элемента с номером 3 (т.е. в байтах 6 и 7), то присваивается индекс первого байта элемента (т.е. значение 6). Аналогично, если длина элемента составляет полное слово, вектор состоит из четырех элементов (пронумерованы от 0 до 3), и равенство выявлено для элемента с номером 1 (т.е. в байтах с 4-го по 7-й), то присваивается индекс первого байта указанного элемента (т.е. значение 4). Если совпадений не выявлено, то, согласно варианту осуществления, переменной resultidx присваивается значение, равное длине вектора (например, в байтах, т.е. в данном примере - значение 16).

Затем на шаге 830 принимается решение, был ли достигнут конец операнда ОрА. Если конец не достигнут, то на шаге 832 значение переменной i увеличивается, например, на единицу, процедура возвращается к шагу 808 и продолжает выполняться. В противном случае выполнение продолжается с шага 834, на котором проверяется значение флага RT типа результата на предмет равенства нулю. Если флаг RT типа результата равен нулю, то на шаге 836 операнду, обозначенному здесь как орС, которым является, например, первый операнд команды, присваивается значение переменной resultmask. В противном случае на шаге 838 определенному байту операнда ОрС (например, байту 7) присваивается минимальное из значений переменных resultidx и zeroidx, а всем прочим байтам ОрС присваивается значение ноль.

После помещения результата в ОрС на шаге 840 принимается решение, указывает ли флаг установки кода условия на необходимость установки кода условия. Если значение флага установки кода условия равно единице, то на шаге 842 устанавливается код условия. Например, значение кода условия устанавливается равным: нулю, если установлен флаг ZS, и сравнение не выявило во втором операнде совпадающих элементов, индекс которых был бы меньше индекса равного нулю элемента; единице, если некоторые элементы второго операнда совпадают по меньшей мере с одним элементом третьего операнда; двум, если все элементы второго операнда совпадают по меньшей мере с одним из элементов третьего операнда; трем, если ни один из элементов второго операнда не совпадает с каким-либо из элементов третьего операнда. В противном случае (если значение флага установки кода условия равно нулю) код условия не устанавливается.

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

Выше были приведены примеры векторных команд, повышающих эффективность обработки символьных данных. Как было изложено, по команде Find Vector Element Equal со 128-разрядными векторами процедура сравнения выполняет только 16 сравнений байтов, а не, например, 256 сравнений. Это позволяет выполнять масштабирование в случае более длинных векторов. Кроме того, команды векторного типа для поиска равнозначного элемента и векторного типа для поиска элемента, равнозначного любому могут получать указание о направлении поиска, слева направо или справа налево, в виде значения переменной на этапе исполнения, т.е. направление поиска не закодировано жестко в самой команде. Кроме того, переменная, возвращаемая как результат, является местоположением байта, а не индексом элемента. Кроме того, поддерживаются однобайтные, двухбайтные и четырехбайтные сравнения.

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

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

В настоящей заявке термины "запоминающее устройство", "главное запоминающее устройство", "пространство памяти", "главная память" (первичная память, т.е. ближайший к ЦПУ уровень иерархии запоминающих устройств, быстродействующие запоминающие устройства, напрямую адресуемые ЦПУ: регистры и кэш-память процессора, а также ОЗУ и системное ПЗУ) используются взаимозаменяемо, если иное не указывается явно или не следует из контекста.

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

Специалисту в данной области должно быть понятно, что один или более аспектов настоящего изобретения могут быть воплощены в форме системы, способа или компьютерного программного продукта. Соответственно, один или более аспектов настоящего изобретения могут быть осуществлены в виде чисто аппаратного обеспечения, чисто программного обеспечения (в том числе, в виде программы, записанной в ПЗУ, резидентного программного обеспечения, микрокода и т.п.) или в виде комбинации аппаратного и программного обеспечения; для обозначения всех этих вариантов в настоящей заявке могут в общем использоваться термины "схема", "модуль" или "система". Кроме того, один или более аспектов настоящего изобретения могут принимать форму компьютерного программного продукта, осуществленного на одной или более машиночитаемых средах, содержащих машиночитаемый программный код.

Может использоваться любая комбинация одной или более машиночитаемых сред. Машиночитаемой средой может являться машиночитаемая среда хранения данных. Машиночитаемой средой хранения данных может быть, в том числе (но не ограничиваясь): электронная, магнитная, оптическая, электромагнитная, инфракрасная или проводная система, средство или устройство или любая работоспособная комбинация перечисленных сред. Более специфическими примерами машиночитаемых сред хранения данных могут быть, в том числе (но не ограничиваясь): электрическое соединение, содержащее один или более проводников; портативная компьютерная дискета (накопитель на гибких дисках); накопитель на жестких дисках; оперативное запоминающее устройство (ОЗУ); ПЗУ; стираемое программируемое постоянное запоминающее устройство (СППЗУ) или флеш-память; оптоволокно; CD-ROM (от английского Compact Disc Read Only Memory - постоянное запоминающее устройство на компакт-диске); оптическое запоминающее устройство; магнитное запоминающее устройство; любая работоспособная комбинация перечисленных сред. Применительно к настоящей заявке машиночитаемой средой хранения данных может являться любая материальная среда, которая может содержать или хранить программу для использования или коммуникационное соединение с системой, средством или устройством, способным выполнять команды.

На фиг. 9 в одном из примеров компьютерный программный продукт 900 содержит, например, одну или более нестираемых машиночитаемых сред 902 хранения данных. Эта среда (среды) 902 предназначены для хранения средств или логики 904 машиночитаемого программного кода для предоставления и облегчения использования одним или более аспектами настоящего изобретения.

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

Компьютерный программный код для выполнения операций одного или более аспектов настоящего изобретения может быть написан на одном или любой комбинации нескольких языков программирования, в том числе, на языках объектно-ориентированного программирования, таких как Java, Smalltalk, С++ или подобных, и на обычных языках процедурного программирования, таких как язык "С", ассемблера или подобных им языках программирования. Программный код может выполняться: полностью на компьютере пользователя; частично на компьютере пользователя как автономный программный пакет; частично на компьютере пользователя и частично на удаленном компьютере; полностью на удаленном компьютере или сервере. В приведенном далее сценарии удаленный компьютер может быть соединен с компьютером пользователя через коммуникационную сеть любого типа, в том числе, локальную вычислительную сеть (ЛВС) или глобальную сеть связи, либо может быть реализовано соединение с внешним компьютером (например, через сеть Интернет при посредничестве поставщика услуг Интернет).

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

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

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

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

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

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

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

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

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

Кроме того, преимущества от одного или более аспектов настоящего изобретения могут получить другие типы вычислительных сред. Пример подобной среды - система обработки данных, предназначенная для хранения и/или выполнения программного кода, которая содержит по меньшей мере два процессора, соединенных непосредственно или опосредованно с элементами запоминающего устройства через системную шину. Элементы запоминающего устройства содержат, например: локальное запоминающее устройство, используемое при фактическом выполнении программного кода; устройство массовой памяти (запоминающее устройство большого объема); кэш-память (быстродействующее буферное запоминающее устройство для временного хранения информации с целью повышения быстродействия вычислительной системы), обеспечивающую временное хранение по меньшей мере фрагмента программного кода для сокращения числа обращений к устройству массовой памяти для извлечения кода за интервал времени исполнения.

К системе либо непосредственно, либо через промежуточные контроллеры ввода-вывода могут быть подключены устройства ввода-вывода, в том числе (но не ограничиваясь) клавиатура, дисплеи, указательные устройства, запоминающее устройство с прямым доступом, ленточные накопители, CD-ROM, DVD-ROM (от английского Digital Video Disc Read-Only Memory -постоянное запоминающее устройство на цифровом видеодиске), внешние отключаемые запоминающие устройства и прочие запоминающие устройства. Для соединения системы обработки данных с другими системами обработки данных или удаленными принтерами или запоминающими устройствами через промежуточные приватные или публичные сетевые подключения к системе могут подключаться сетевые адаптеры. Примерами сетевых адаптеров могут служить, в том числе, телефонные модемы, кабельные модемы, платы адаптеров сети Ethernet.

На фиг. 10 представлены характерные компоненты хост-компьютерной системы 5000 для осуществления одного или более аспектов настоящего изобретения. Характерный хост-компьютер 5000 содержит одно или более ЦПУ 5001, соединенных линиями передачи данных с запоминающим устройством компьютера (т.е. с центральным запоминающим устройством) 5002, а также с интерфейсами ввода-вывода запоминающих устройств 5011 и сетей 5010 для связи с другими компьютерами или сетями хранения данных (специализированными высокоскоростными сетями, объединяющими устройства хранения данных и серверы) и т.п. ЦПУ 5001 совместимо с архитектурой, обладающей собственным набором команд и функциональными возможностями. ЦПУ 5001 может обладать средством 5003 динамического преобразования адресов для преобразования адресов, использующихся в программах (виртуальных адресов) в реальные адреса запоминающего устройства. Динамическое преобразование адресов обычно содержит буфер 5007 ассоциативной трансляции для кэширования (временного хранения) результатов трансляции, благодаря чему последующие обращения к блоку памяти центрального запоминающего устройства 5002 не приведут к задержке трансляции адресов. Как правило, кэш-память 5009 может быть организована иерархически, т.е. содержать большую по объему часть, доступную более чем одному ЦПУ, и меньшую по объему, более быстродействующую (более низкого уровня) часть, служащую буфером между большей частью кэш-памяти и каждым ЦПУ. В некоторых вариантах осуществления кэш-память более низкого уровня разделяется для организации нескольких низкоуровневых пространств кэш-памяти для выборки команд и доступа к данным. Согласно варианту осуществления, команда выбирается из запоминающего устройства 5002 устройством 5004 выборки команд через кэш-память 5009. Указанная команда декодируется в устройстве 5006 декодирования команд и направляется (в некоторых вариантах осуществления - совместно с другими командами) в устройство или устройства 5008 выполнения команд. Как правило, используются несколько устройств 5008 выполнения команд, например, арифметическое устройство, устройство выполнения операций с плавающей запятой, устройство ветвления команд. Команда, выполняемая исполнительным устройством, по мере необходимости обращается к операндам команды, указанным регистрам или запоминающему устройству. Если требуется доступ (загрузка или хранение) к операндам из запоминающего устройства 5002, то доступ контролируется устройством 5005 хранения-загрузки под управлением выполняемой команды. Команды могут выполняться в аппаратных схемах или с помощью внутреннего микрокода (хранящегося в ПЗУ) или комбинацией этих двух способов.

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

Главное запоминающее устройство может содержать одно или более буферных запоминающих устройств меньшего объема с более быстрым доступом, которые иногда называются устройствами кэш-памяти. Устройство кэш-памяти обычно физически связано с ЦПУ или процессором ввода-вывода. Различия в физическом устройстве и использовании различных типов запоминающих устройств обычно незаметны для программы (за исключением различия в быстродействии).

Для операций с командами и данными могут использоваться отдельные устройства кэш-памяти. Информация в кэш-памяти содержится в виде непрерывной последовательности байтов в пределах целостного пространства памяти, называемого блоком данных кэш-памяти или строкой данных кэш-памяти (коротко - строкой). Модель может сформировать команду EXTRACT CACHE ATTRIBUTE (от англ.: получить атрибут кэш-памяти), которая возвращает длину строки кэш-памяти в байтах. Также модель может сформировать команды PREFETCH DATA и PREFETCH DATA RELATIVE LONG, которые влияют на выборку данных из запоминающего устройства в кэш-память данных или команд или на удаление данных из кэш-памяти.

Пространство памяти запоминающего устройства представляется в виде протяженных горизонтально ориентированных строк двоичных символов. Для большинства операций доступ к запоминающему устройству выполняется в последовательности слева направо. Строки двоичных символов подразделяются на группы по восемь бит. Группа из восьми бит называется байтом, байт является основным образующим элементом всех форматов представления информации. Каждое местоположение байта в запоминающем устройстве обозначается уникальным неотрицательным целым числом, называемым адресом местоположения данного байта или коротко - адресом. Адресация ячеек памяти - последовательная, т.е. адреса соседних ячеек хранения байтов отличаются на единицу. Адреса начинаются с нуля для крайней левой ячейки и возрастают слева направо. Адреса - беззнаковые двоичные целые числа длиной 24, 31 или 64 разряда.

Информация передается между запоминающим устройством и ЦПУ или подсистемой канала передачи данных по одному байту или по группе байтов в один момент времени. Если иное не оговорено, то, например, в архитектуре z/Architecture группа байтов в запоминающем устройстве адресуется по крайнему левому байту группы. Число байтов в группе либо определено заранее, либо однозначно указывается выполняемой операцией. В операциях с ЦПУ группа байтов называется полем. Внутри каждой группы байтов, например, в архитектуре z/Architecture, биты нумеруются в направлении слева направо. В архитектуре z/Architecture крайние левые биты иногда называют старшими, крайние правые биты - младшими. Следует учитывать, что номера битов не являются адресами запоминающего устройства, адресуются только байты. Для обращения к отдельным битам из состава байта осуществляется доступ к целому байту запоминающего устройства. Биты в байте нумеруются слева направо от нуля до семи (например, в архитектуре z/Architecture). Примеры нумерации битов в пределах адреса: 8-31 или 40-63 для 24-разрядного адреса; 1-31 или 33-63 для 31-разрядного адреса; 0-63 для 64-разрядного адреса. В любом другом формате групп байтов фиксированной длины разряды, образующие формат, нумеруются последовательно начиная с нуля. В целях обнаружения шибок и, предпочтительно, их коррекции с каждым байтом или с каждой группой байтов может передаваться один или более дополнительных проверочных битов. Такие проверочные биты формируются внутри вычислительной системы автоматически, они не могут непосредственно контролироваться программой. Емкость запоминающего устройства выражается числом байтов. Если длина поля запоминающего устройства определяется кодом операции, входящим в состав команды, то считается, что поле имеет фиксированную длину, которая может составлять один, два, четыре, восемь или 16 байтов. В некоторых командах могут использоваться поля большей длины. Если длина поля запоминающего устройства не определена заранее, а явно указывается, то говорят, что поле имеет переменную длину. Длина операндов с переменной длиной может изменяться с инкрементом в один байт (или, для некоторых команд, с инкрементом, кратным двум байтам или кратным другому числу байтов). Когда информация помещается в запоминающее устройство, то заменяется содержимое только тех ячеек хранения байтов запоминающего устройства, которые входят в состав поля-получателя, причем это справедливо даже в том случае, когда ширина физического канала передачи данных к запоминающему устройству превышает длину сохраняемого поля.

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

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

Согласно варианту осуществления, изобретение может быть осуществлено программным обеспечением, называемым также лицензионным внутренним кодом, содержимым ПЗУ, микрокодом, милликодом, пикокодом и т.п., причем каждый из терминов может относиться к одному или более аспектам настоящего изобретения. На фиг. 10 процессор 5001 хост-компьютерной системы 5000 может обращаться к коду программного обеспечения, содержащему один или более аспектов настоящего изобретения и хранящемуся в долговременных запоминающих устройствах 5011, таких как привод CD-ROM, привод ленточного накопителя, накопитель на жестких дисках. Программный код может располагаться на любой из множества известных машиночитаемых сред, предназначенных для использования в системе обработки данных, таких как гибкий диск, накопитель на жестких дисках или CD-ROM. Код может распространяться на подобной машиночитаемой среде или поставляться пользователям из запоминающего устройства 5002 компьютера или из запоминающего устройства одного компьютера через сеть 5010 другим компьютерным системам для их пользователей.

Код программного обеспечения содержит операционную систему, которая управляет функционированием и взаимодействием различных компонентов компьютера и одной или более прикладных программ. Программный код обычно передается из долговременного запоминающего устройства 5011 в относительно более быстродействующее запоминающее устройство 5002 компьютера, из которого код доступен процессору 5001 для обработки. Приемы и способы размещения кода программного обеспечения в пространстве памяти запоминающего устройства, на физической машиночитаемой среде и/или передача кода программного обеспечения через сети передачи данных достаточно хорошо известны и в настоящей заявке далее обсуждатся не будут. Программный код, созданный и размещенный на материальном носителе, в том числе (но не ограничиваясь) на электронных модулях памяти (ОЗУ), запоминающих устройствах флеш-памяти, CD-ROM, DVD-ROM, магнитной ленте и т.п. часто называют компьютерным программным продуктом. Информация со среды-носителя компьютерного программного продукта обычно считывается схемой обработки предпочтительно в компьютерной системе с целью выполнения программного кода схемой обработки.

На фиг. 11 показана схема примера рабочей станции или аппаратной части сервера, в которых могут быть осуществлены один или более аспектов настоящего изобретения. На фиг. 9 система 5020 содержит типичную основную компьютерную систему 5021, например, персональный компьютер, рабочую станцию или сервер, в состав которой, в свою очередь, могут входить периферийные устройства. Основная компьютерная система 5021 содержит один или более процессоров 5026 и шину передачи данных, используемую для подключения и осуществления соединения между процессором или процессорами 5026 и другими компонентами системы 5021 по хорошо известной методике. Шина соединяет процессор 5026 с запоминающим устройством 5025 и запоминающим устройством 5027 длительного хранения, которое может содержать, например, дисковый накопитель (в свою очередь содержащий, например, любые магнитные среды хранения данных, CD-ROM, DVD-ROM или устройства флеш-памяти) или ленточный накопитель. Система 5021 может также содержать адаптер интерфейса пользователя, который соединяет микропроцессор 5026 через шину с одним или более интерфейсными устройствами, такими как клавиатура 5024, мышь 5023, принтер или сканер 5030 и/или с устройствами интерфейса пользователя других типов, такими как сенсорный экран, устройство цифрового координатного ввода планшетного типа и т.п. Шина также обеспечивает подключение устройства 5022 отображения, такого как жидкокристаллический экран или монитор, к микропроцессору 5026 через адаптер дисплея.

Система 5021 может обмениваться данными с другими компьютерами или сетями компьютеров с помощью сетевого адаптера, способного осуществлять соединение 5028 с сетью 5029 передачи данных. Примерами сетевых адаптеров являются адаптеры сетей типа Token ring (от англ.: маркерное кольцо) и Ethernet, а также модемы. Система 5021 может обмениваться данными с использованием беспроводного интерфейса, такого как адаптер CDPD (от английского Cellular Digital Packet Data - цифровая пакетная передача данных по сети сотовой связи). Система 5021 может быть соединена с другими компьютерами в ЛВС или глобальную вычислительную сеть, либо система 5021 может выступать в качестве клиента в системе клиент-сервер вместе с другим компьютером и т.д. Все подобные конфигурации наряду с соответствующим коммуникационным аппаратным и программным обеспечением известны достаточно хорошо.

На фиг. 12 показана схема сети 5040 обработки данных, с помощью которой могут быть осуществлены один ли более аспектов настоящего изобретения. Сеть 5040 обработки данных может содержать набор индивидуальных сетей, таких как беспроводные и проводные сети, в состав каждой из которых может входить множество индивидуальных рабочих станций 5041, 5042, 5043, 5044. Кроме того, специалисты в данной области техники должны понимать, что может быть задействована одна или более ЛВС, причем ЛВС могут содержать набор рабочих станций, соединенных с хост-процессором.

На фиг. 12 сети могут также содержать компьютеры-мэйнфреймы или серверы, такие как компьютер-шлюз (клиентский сервер 5046) или сервер приложений (удаленный сервер 5048, который может обращаться к хранилищу данных и к которому может также осуществляться доступ непосредственно с рабочей станции 5045). Компьютер-шлюз 5046 служит точкой доступа в каждую индивидуальную сеть. Шлюз требуется при переходе от одного сетевого протокола на другой. Компьютер-шлюз 5046 предпочтительно может быть подключен к другой сети, например, к сети 5047 Интернет с помощью канала передачи данных. Компьютер-шлюз 5046 также может быть непосредственно соединен с одной или более рабочих станций 5041, 5042, 5043, 5044 с использованием канала передачи данных. Компьютер-шлюз может быть реализован на основе сервера IBM eServer™ System z, предлагаемого корпорацией International Business Machines Corporation.

На фиг. 11 и 12 процессор 5026 системы 5020 может обращаться к коду программного обеспечения, в котором могут быть осуществлены один или более вариантов настоящего изобретения и который располагается на запоминающем устройстве 5027 долговременного хранения, таком как привод CD-ROM или накопитель на жестких дисках. Код программного обеспечения для его использования системой обработки данных может располагаться на любой из множества известных машиночитаемых сред, таких как гибкий диск, накопитель на магнитных дисках или CD-ROM. Код может предоставляться на такой машиночитаемой среде или может предоставляться пользователям 5050, 5051 компьютерным системам по сети передачи данных из запоминающих устройств другой компьютерной системы.

В другом варианте код программного обеспечения может располагаться в запоминающем устройстве 5025, и процессор 5026 может обращаться к этому коду по шине процессора. Такой код программного обеспечения содержит операционную систему, которая управляет функционированием и взаимодействием различных компонентов компьютера и одной или более прикладных программ 5032. Программный код обычно передается из запоминающего устройства 5027 в относительно более быстродействующее запоминающее устройство 5025 компьютера, из которого код доступен процессору 5026 для обработки. Приемы и способы размещения кода программного обеспечения в пространстве памяти запоминающего устройства, на физической машиночитаемой среде и/или передача кода программного обеспечения через сети передачи данных достаточно хорошо известны и в настоящей заявке далее обсуждатся не будут. Программный код, созданный и размещенный на материальном носителе, в том числе (но не ограничиваясь) на электронных модулях памяти (ОЗУ), запоминающих устройствах флеш-памяти, CD-ROM, DVD-ROM, магнитной ленте и т.п. часто называют компьютерным программным продуктом. Информация со среды-носителя компьютерного программного продукта обычно считывается схемой обработки, предпочтительно, в компьютерной системе с целью выполнения схемой обработки.

Процессору наиболее доступна кэш-память низшего уровня (первого уровня; обозначение первого уровня - L1), которая обычно обладает наибольшим быстродействием и меньшим объемом по сравнению с процессорной кэш-памятью других уровней. Уровень основного запоминающего устройства считается наивысшим (уровень 3, обозначение L3, если всего предусмотрено три уровня). Кэш-память низшего уровня часто разделяется на кэш-память команд Ι-кэш (от английского Instructions cache - кэш-память команд) для хранения предназначенных для исполнения команд и кэш-память данных D-кэш (от английского Data cache - кэш-память данных), предназначенную для хранения операндов.

На фиг. 13 показан пример осуществления процессора 5026. Как правило, для буферизации блоков информации запоминающего устройства используется одноуровневая или многоуровневая кэш-память 5053, что позволяет увеличить производительность процессора. Кэш-память 5053 представляет собой быстродействующий буфер, хранящий строки данных основного запоминающего устройства, которые, вероятно, должны использоваться в будущем. Как правило, длина строк данных в кэш-памяти составляет 64, 128 или 256 байтов. Часто применяются отдельные функциональные узлы кэш-памяти для буферизации команд и данных. Для поддержания когерентности содержимого кэш-памяти, т.е. для синхронизации копий строк данных в основном запоминающем устройстве и в кэш-памяти часто применяются различные хорошо известные снуп-алгоритмы (от английского Snoop algorithm, специальный алгоритм поиска необходимых данных в кэш-памяти). Основное запоминающее устройство 5025 вычислительной системы часто также рассматривается как кэш-память. В вычислительной системе с четырьмя уровнями кэш-памяти 5053 основное запоминающее устройство 5025 иногда рассматривается как кэш-память пятого уровня (L5), поскольку оно обычно обладает большим быстродействием по сравнению с быстродействием большинства доступных вычислительной системе энергонезависимых запоминающих устройств - запоминающих устройств с прямым доступом, ленточных запоминающих устройств с последовательным доступом и т.п. и хранит только часть данных указанных устройств. Основное запоминающее устройство 5025 "кэширует" (буферизирует) страницы данных, которые загружаются и выгружаются из него операционной системой.

Программный счетчик (счетчик команд) 5061 содержит адрес следующей команды, которая должна исполняться. Программный счетчик в процессоре, построенном по архитектуре z/Architecture, является 64-разрядным, его длина может быть сокращена до 31 или до 24 разрядов для поддержки предыдущих схем адресации. Как правило, программный счетчик входит в состав слова состояния процессора (ССП) компьютера, поскольку его содержимое требуется сохранять при переключении задач. Так, выполнение программы при определенном значении программного счетчика может быть прервано, например, операционной системой (задание переключается от окружения программы к окружению операционной системы). В то время, пока программа неактивна, значение счетчика программ сохраняется в ССП программы, и при выполнении задачи операционной системы используется счетчик программ ССП операционной системы.

Программный счетчик (счетчик команд) 5061 содержит адрес следующей подлежащей исполнению команды. Программный счетчик в процессоре, построенном по архитектуре z/Architecture, является 64-разрядным, его длина может быть сокращена до 31 или до 24 разрядов для поддержки предыдущих ограничений на длину адреса. Как правило, программный счетчик входит в состав слова состояния процессора (ССП) компьютера, поскольку его содержимое требуется сохранять при переключении задач. Так, выполнение программы при некотором значении программного счетчика может быть прервано, например, операционной системой (выполнение переключается от окружения программы к окружению операционной системы). В то время, пока программа неактивна, значение счетчика программ сохраняется в ССП программы, и при выполнении задачи операционной системы используется счетчик программ ССП операционной системы. Как правило, программный счетчик увеличивается на величину, равную длине в байтах исполняемой в данный момент команды. Команды типа RISC (от английского Reduced Instruction Set Computing - вычисления с сокращенным набором команд), как правило, имеют фиксированную длину, в то время как команды типа CISC (от английского Complex Instruction Set Computing - вычисления со сложным набором команд), как правило, имеют переменную длину. Команды в архитектуре IBM z/Architecture относятся к типу CISC, их длина составляет 2, 4 или 6 байтов. Значение в программном счетчике 5061 изменяется либо операцией переключения задач, либо при выполнении алгоритмической операции ветвления, например, по команде ветвления. При операции переключения задачи текущее значение программного счетчика сохраняется в ССП вместе с другой информацией о состоянии выполнявшейся программы (в частности, коды состояния), после чего загружается новое значение программного счетчика, указывающее на команду нового программного модуля, подлежащего исполнению. Операция ветвления, используемая в программе при принятии решений или выполнении цикла, выполняется путем загрузки в программный счетчик 5061 результата команды ветвления.

Как правило, для выборки команд по указанию процессора 5026 применяется устройство 5055 выборки команд. Устройство выборки команд выбирает команду в порядке следования либо команду, на которую указывает команда ветвления, либо по указанию о переключении задачи - очередную команду программы. В современных устройствах выборки команд часто применяются упреждающие методы для спекулятивной выборки команд, основанные на гипотезе о том, что заблаговременно выбранные команды могут потребоваться в будущем. Например, устройство выборки может загрузить 16 байтов команд, в число которых входят следующая по очереди команда и, кроме того, байты команд, следующих за ней.

Затем выбранные команды выполняются процессором 5026. Согласно варианту осуществления, выбранная команда (команды) передаются на устройство 5056 диспетчеризации. Устройство диспетчеризации декодирует команду (команды) и передает информацию о декодированной команде (командах) далее на устройства 5057, 5058, 5060. Исполнительный блок 5057, как правило, принимает информацию о декодированных арифметических операциях от устройства 5055 выборки команд и выполняет арифметические операции над операндами согласно коду операции команды. Операнды передаются в исполнительное устройство 5057 предпочтительно либо из запоминающего устройства 5025, либо из регистров 5059, либо извлекаются из внутреннего поля выполняемой команды. Результат выполнения команды сохраняется либо в запоминающем устройстве 5025, либо в регистрах 5059, либо в ином аппаратном обеспечении вычислительной системы (в управляющих регистрах, регистрах ССП и т.п.).

Как правило, процессор 5026 снабжен одним или более устройствами 5057, 5058, 5060, предназначенными для выполнения указанной командой операции. На схеме, показанной на фиг. 14А, исполнительное устройство 5057 может обмениваться информацией с регистрами общего назначения 5059, устройством 5056 декодирования и диспетчеризации, устройством 5060 загрузки-хранения и другими устройствами 5065 процессора с помощью интерфейсной логики 5071. В исполнительном устройстве 5057 могут применяться различные схемы регистров 5067, 5068, 5069 для временного хранения информации, предназначенной для обработки арифметическо-логическим устройством (АЛУ) 5066. АЛУ выполняет арифметические операции, такие, как сложение, вычитание, умножение и деление, а также логические операции, такие как конъюнкция, сложение по модулю 2, сдвиг и циклический сдвиг. АЛУ предпочтительно поддерживает специализированные операции, зависящие от особенностей архитектуры. Прочие схемы 5072 могут обеспечивать другие функции, в том числе, например, коды условий и логику поддержки восстановления. Как правило, результат операции, выполненной АЛУ, сохраняется в схеме 5070 регистра вывода, которая может передавать указанный результат набору других функций обработки. Существует множество схем построения процессорных устройств, и настоящее описание предназначено исключительно для пояснения одного из вариантов осуществления.

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

Исполнительное устройство 5057 выполняет арифметическое сложение двух операндов и сохраняет результат операции в третьем операнде, причем указанный третий операнд может располагаться в третьем регистре или в одном из регистров, в которых располагались исходные операнды. Исполнительное устройство предпочтительно использует АЛУ 5066, которое способно выполнять различные логические функции, такие как сдвиг, циклический сдвиг, конъюнкцию, дизъюнкцию, сложение по модулю 2, а также различные арифметические операции, в том числе сложение, вычитание, умножение, деление. Некоторые разновидности АЛУ 5066 проектируются для скалярных операций, а некоторые - для операций с плавающей запятой. В зависимости от архитектуры данные могут представляться в обратном порядке следования битов (т.е. наименее значимому биту соответствует наибольший адрес) или в прямом порядке следования битов (т.е. наименее значимому биту соответствует наименьший адрес). В архитектуре IBM z/Architecture для представления данных используется обратный порядок следования битов. Числа со знаком зависимости от архитектуры могут храниться в виде знака и значения числа, в виде дополнения числа до единицы или дополнения до двух. Представление чисел в виде дополнения до двух обладает преимуществом, поскольку в этом случае в АЛУ не требуется предусматривать отдельную функцию вычитания: для положительных и отрицательных чисел, представленных в форме дополнения до двух, требуется только операция сложения. Числа обычно описываются в сокращенной форме, как блоки длиной, например, 4 килобайта: 12-разрядное поле определяет адрес блока длиной 4096 байтов.

Как показано на фиг. 14Б, информация о команде ветвления при выполнении такой команды обычно передается в устройство 5058 ветвления, которое часто использует алгоритм предсказания ветвления, такой как таблица 5082 истории ветвления, для предсказания результата ветвления еще до того, как будут завершены другие условные операции. В этом случае ветвь алгоритма - возможный исход текущей команды ветвления будет загружена и спекулятивно выполнена до того, как будет завершено выполнение условных операций. Когда выполнение условных операций завершится, то спекулятивно выполненные команды ветви алгоритма либо будут использованы, либо будут отброшены в зависимости от условий операции принятия решения и результатов спекулятивно выполненных операций. Типичная команда ветвления может проверять коды условий, и если коды условий удовлетворяют требованию ветви команды ветвления, то переходить по адресу соответствующей ветви. Адрес перехода может быть рассчитан на основе различных чисел, в том числе, например, содержащихся в полях регистров или во внутренних полях команды. Устройство 5058 ветвления может использовать АЛУ 5074, содержащее набор схем 5075, 5076, 5077 входных регистров и схему 5080 выходного регистра. Устройство 5058 ветвления может обмениваться информацией с регистрами 5059 общего назначения, устройством 5056 декодирования и диспетчеризации или, например, другими схемами 5073.

Выполнение группы команд может быть прервано по ряду причин, в том числе, например: по команде смены задачи от операционной системы; при возникновении программного исключения (события, возникшего в процессе выполнения программы) или ошибки, вызывающих переключение задач; сигнала прерывания ввода-вывода, приводящего к переключению задач; многопоточной активности многих программ (в многопоточных вычислительных системах). Операция переключения задач предпочтительно сохраняет информацию состояния о программе, выполнявшейся до настоящего момента времени, после чего загружает информацию о состоянии другой запускаемой программы. Информация о состоянии может храниться, например, в регистрах аппаратного обеспечения либо в запоминающем устройстве. Информация о состоянии предпочтительно содержит: значение программного счетчика, указывающее на следующую подлежащую выполнению команду; коды условий; информацию о трансляции пространства памяти; содержимое собственных регистров вычислительной системы. Переключение задач может выполняться аппаратными схемами, прикладными программами, программами операционной системы или кодом в ПЗУ (микрокодом, пикокодом или лицензированным внутренним кодом) по отдельности или совместно.

Процессор обращается к операндам в соответствии с методами, определенными командой. Команда может предоставить в качестве операнда значение, содержащееся в части команды, может предоставить одно или более полей регистров, явно указывающих либо на регистры общего назначения или на специальные регистры (например, на регистры с плавающей запятой). Команда может косвенно указывать на регистры, идентифицируемые в соответствии с кодом операции как операнды. Команда может использовать в качестве операндов ячейки памяти. На местоположение операнда в пространстве памяти может указывать содержимое регистра, поля из состава команды или комбинация данных в регистрах и в поле команды, как, например, это реализовано в функционале длинного размещения в архитектуре z/Architecture, в котором команда определяет, например, базовый регистр, регистр индекса и поле внутри команды (поле смещения), объединенное содержимое которых даст адрес операнда в запоминающем устройстве. Здесь подразумевается местоположение в главном запоминающем устройстве, если явно не оговорено иное.

На фиг. 14В процессор обращается к запоминающему устройству, используя устройство 5060 загрузки-хранения. Устройство 5060 загрузки-хранения может выполнять операцию ввода путем получения адреса требуемого операнда в запоминающем устройстве 5053 и загрузки операнда в регистр 5059 или другую ячейку запоминающего устройства 5053 либо может выполнять операцию сохранения путем получения адреса требуемого операнда в запоминающем устройстве 5053 и записи данных, полученных из регистра 5059 или другой ячейки запоминающего устройства 5053, в соответствующую ячейку запоминающего устройства 5053. Устройство 5060 загрузки-хранения может действовать спекулятивно и может обращаться к запоминающему устройству в последовательности, не соответствующей той, которая определяется порядком следования команд. Однако устройство 5060 загрузки-хранения должно предоставлять данные таким образом, чтобы команды выполнялись в установленном программой порядке. Устройство 5060 загрузки-хранения может обмениваться данными с регистрами 5059 общего назначения, устройством декодирования и диспетчеризации 5056, интерфейсом 5053 кэш-память -запоминающее устройство или другими функциональными узлами 5083 и содержать в своем составе различные схемы регистров, АЛУ 5085 и управляющую логику 5090 для вычисления адресов хранения и формирования конвейерной последовательности данных для обеспечения правильной очередности выполнения команд. В данной области техники хорошо известно, что некоторые операции могут выполняться в порядке, отличном от установленного, однако при этом устройство выборки и хранения должно действовать таким образом, чтобы выполненные в ином порядке операции представлялись программе будто бы выполненными в правильном порядке.

Адреса, которыми оперирует прикладная программа, являются предпочтительно виртуальными. Для обозначения виртуальных адресов иногда используются термины "логические адреса" и "эффективные адреса". Указанные виртуальные адреса виртуальны в том смысле, что они преобразуются в адресное пространство физической памяти с использованием одной из множества технологий трансляции динамических адресов, в том числе (но не ограничиваясь) простым добавлением значения смещения как префикса к виртуальному адресу, преобразованием виртуальных адресов в соответствии с одной или более таблиц трансляции, причем таблицы трансляции предпочтительно состоят по меньшей мере из отдельной таблицы сегментов и отдельной таблицы страниц или из комбинации этих таблиц, предпочтительно такой, что таблица сегментов содержит запись, указывающую на таблицу страниц. В архитектуре z/Architecture предусмотрена иерархия трансляции, в том числе, таблица первой области, таблица второй области, таблица третьей области, таблица сегментов и, опционально, таблица страниц. Производительность трансляции адресов часто повышается при использовании буфера быстрого преобразования адреса, который содержит записи, отображающие виртуальные адреса на адреса ячеек физической памяти. Записи создаются, когда процедура динамической трансляции адресов транслирует виртуальный адрес с использованием таблиц трансляции. При последующем обращении по виртуальному адресу вместо последовательных обращений к медленной таблице преобразования адреса может использоваться запись в буфере быстрого преобразования адреса. Содержимое буфера быстрого преобразования адреса может поддерживаться различными алгоритмами замены, в том числе, алгоритмом удаления дольше всех неиспользовавшихся элементов.

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

Устройства 5054 ввода-вывода (см. фиг. 13) дают процессору возможность обмениваться данными с периферийными устройствами, например, с такими как ленточный накопитель, дисковый накопитель, принтеры, дисплеи, сетевое окружение. Устройства ввода-вывода часто представляются компьютерной программе программами-драйверами. В компьютерах-мейнфреймах, таких как System z® корпорации IBM®, адаптеры каналов и адаптеры открытой системы являются устройствами ввода-вывода, которые обеспечивают связь операционной системы с периферийными устройствами.

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

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

В частности, команды, присущие архитектуре компьютеров-мейнфреймов, часто используются программистами (в настоящее время, как правило, пользующимися языком программирования "С") через приложения-компиляторы. Указанные команды, хранящиеся в машиночитаемой среде, могут выполняться в собственной вычислительной среде на сервере, построенном по архитектуре корпорации IBM® z/Architecture, или же на вычислительных машинах, построенных по другим архитектурам. Эти команды могут эмулироваться на существующих и на будущих серверах-мейнфреймах корпорации IBM и на других вычислительных машинах IBM (например, на серверах типа Power Systems и System x®). Указанные команды могут выполняться на вычислительных машинах, работающих под управлением операционной системы Linux и использующих аппаратное обеспечение производства предприятий IBM®, Intel®, AMD™ и др. Помимо указанного аппаратного обеспечения в рамках архитектуры z/Architecture и операционной системы Linux, могут применяться вычислительные машины с эмуляторами Hercules (программный эмулятор мейнфреймов IBM и совместимых), UMX или FSI (от англ.: Fundamental Software, Inc.), при этом выполнение обычно осуществляется в режиме эмуляции. В режиме эмуляции программа-эмулятор выполняется собственным (физическим) процессором вычислительной системы и имитирует архитектуру эмулируемого процессора.

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

Конкретная эмулируемая команда декодируется, и для выполнения команды вызывается соответствующая подпрограмма. Для имитации эмулируемого процессора применяется функция программного обеспечения-эмулятора, например, в виде подпрограммы, написанной на языке "С", либо программа-драйвер, либо используется иной способ осуществления драйвера конкретного аппаратного обеспечения, о чем специалистам в данной области станет ясно после изучения описания предпочтительного варианта осуществления. Различные способы программного и аппаратного осуществления эмуляции команд, формат которых предназначен для вычислительных систем, отличных от хост-вычислительной системы, раскрыты специалистам в данной области в многочисленных патентах, в том числе (но не ограничиваясь): в патенте US 5551013 "Multiprocessor for Hardware Emulation" (Микропроцессор для эмуляции аппаратного обеспечения), авторы Beausoleil и др.; в патенте US 6009261 "Preprocessing of Stored Target Routines for Emulating Incompatible Instruction on a Target Processor" (Предобработка хранящихся целевых процедур для эмулируемых встроенных команд на целевом процессоре), авторы Scalzi и др.; в патенте US 5574873 "Decoding Guest Instruction to Directly Access Emulation Routines that Emulate the Guest Instructions" (Декодирование гостевой команды для эмуляционных процедур прямого доступа, которыми эмулируются гостевые команды), авторы Davidian и др.; в патенте US 6308255 "Symmetrical Multiprocessing Bus and Chipset Used for Coprocessor Support Allowing Non-Native Code to Run in a System" (Симметричная микропроцессорная шина и набор микросхем, используемые для поддержки сопроцессора, позволяющие выполнять инородный код в системе), авторы Gorishek и др.; в патенте US 6463582 "Dynamic Optimizing Object Code Translator for Architecture Emulation and Dynamic Optimizing Object Code Translation Method" (Динамический оптимизирующий транслятор объектного кода для эмуляции архитектуры и способ динамической оптимизирующей трансляции объектного кода), авторы Lethin и др.; в патенте US 5790825 "Method for Emulating Guest Instructions on a Host Computer Through Dynamic Recompilation of Host Instructions" (Способ эмуляции гостевых команд на хост-компьютере, основанный на динамической рекомпиляции хост-команд), автор Eric Traut. Содержание перечисленных патентов приведено в настоящей заявке для сведения во всей своей полноте.

На фиг. 15 показан пример схемы эмулируемой хост-компьютерной системы 5092, которая имитирует хост-компьютерную систему 5000′, выполненную по хост-архитектуре. В эмулируемой хост-компьютерной системе 5092 хост-процессор (т.е. ЦПУ) 5091 является эмулируемым хост-процессором (или виртуальным хост-процессором) и содержит эмулирующий (реальный) процессор 5093, собственный набор команд которого отличается от набора команд процессора 5091 хост-компьютера 5000′. Эмулируемая хост-компьютерная система 5092 в своем составе содержит запоминающее устройство 5094, доступное для эмулирующего процессора 5093. Согласно примеру осуществления, запоминающее устройство 5094 разделяется: часть его служит запоминающим устройством 5096 хост-компьютера, другая часть 5097 используется процедурами эмуляции. Запоминающее устройство 5096 хост-компьютера доступно программам эмулируемого хост-компьютера 5092 согласно эмулируемой архитектуре хост-компьютера. Эмулирующий процессор 5093 выполняет собственные команды из характерного для него набора команд в рамках архитектуры, отличающейся от архитектуры эмулируемого процессора 5091. Указанные собственные команды поступают из запоминающего устройства 5097 процедур эмуляции. Эмулирующий процессор 5093 может обращаться к хост-команде из состава программы, расположенной в запоминающем устройстве 5096 хост-компьютера для ее выполнения путем использования одной или более команд, полученными процедурой определения порядка следования, доступа и декодирования, которая в свою очередь может декодировать полученную хост-команду (команды) для определения порядка выполнения собственных команд для эмуляции функции хост-команды, к которой произошло обращение. Могут эмулироваться прочие функциональные возможности, предусмотренные в архитектуре хост-компьютерной системы 5000′, например, такие как регистры общего назначения, управляющие регистры, динамическая трансляция адресов, поддержка подсистемы ввода-вывода, кэш-память процессора. Эмулирующие процедуры для повышения производительности могут также пользоваться преимуществом функций, доступных в архитектуре эмулирующего процессора 5093, такими как регистры общего назначения и динамическая трансляция виртуальных адресов. Могут также предоставляться специальное аппаратное обеспечение и снижающие нагрузку на процессор программные механизмы, помогающие процессору 5093 эмулировать действия хост-компьютера 5000′.

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

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

Команды обработки векторов-строк

Возможности обработки векторов-строк

Команды

Все операнды являются операндами векторных регистров, если не указано иное. Символ "V" в синтаксисе языка программирования ассемблера используется для обозначения векторных операндов.

Команда векторного типа для поиска элемента, равнозначного любому

(от англ.: Vector Find Any Equal)

В порядке слева направо каждый беззнаковый двоичный целый элемент второго операнда сравнивается на предмет равенства значений с каждым беззнаковым двоичным целым элементом третьего операнда и, опционально, если в поле М5 установлен флаг ZS поиска нуля, с нулем.

Если флаг RT типа результата в поле М5 имеет нулевое значение, то для каждого элемента второго операнда, значение которого совпадает со значением какого-либо элемента третьего операнда или, опционально, с нулем, то значения разрядов соответствующего элемента первого операнда устанавливаются равными единице, в противном случае устанавливаются равными нулю.

Если флаг RT типа результата в поле М5 имеет единичное значение, то в седьмой байт первого операнда записывается индекс (т.е. порядковый номер) байта крайнего левого элемента второго операнда, значение которого совпадает со значением какого-либо элемента третьего операнда или с нулем.

Каждая команда имеет секцию расширенной мнемоники, эта секция описывает рекомендуемый расширенный мнемонический код (мнемокод) и соответствующий синтаксис ассемблера.

Замечание по программированию: скорость выполнения всех команд, которые опционально устанавливают код условия, может снижаться, если в ходе их выполнения код условия устанавливается.

Если флаг RT типа результата в поле М5 имеет единичное значение, и совпадений байтов операндов не выявлено, или (если был установлен флаг ZS поиска нуля) не выявлено совпадений с нулем, то в седьмой байт первого операнда записывается значение, равное длине вектора, выраженное в байтах.

Поле М4 содержит спецификатор ES (от английского element size - длина элемента) длины элемента. Спецификатор ES определяет длину элементов операндов векторных регистров. Если в этом поле указано зарезервированное значение, то возникает программное исключение (ошибка) спецификации.

Значения спецификатора ES:

0 - байт;

1 - полуслово;

2 - полное слово;

3-15 - зарезервированные значения.

Поле М5 имеет следующий формат:

Назначение разрядов поля М5:

- Флаг типа результата (RT): если ноль, то каждый элемент первого операнда является маской сравнения соответствующего элемента. Если единица, то в седьмой байт первого операнда записывается индекс байта, а в остальные байты первого операнда записываются нули.

- Флаг поиска нуля (ZS): если единица, то каждый элемент второго операнда также сравнивается с нулем.

- Флаг установки кода условия (СС): если ноль, то код условия не устанавливается, его значение остается без изменений. Если единица, то устанавливается код условия по правилу (см. далее).

Особые условия

Если происходит любое из следующих событий, то возникает программное исключение (ошибка) спецификации, и выполнение команды прекращается:

1. Поле М4 содержит значения от 3 до 15.

2. Значение разряда 0 поля М5 отлично от нуля.

Правило установки кода условия:

Если флаг СС имеет значение 0, то значение кода условия не изменяется.

Если флаг СС имеет значение 1, то значение кода условия устанавливается следующим образом:

значение 0: если флаг ZS поиска нуля установлен, то сравнение не выявило во втором операнде совпадающих элементов, индекс которых был бы меньше индекса равного нулю элемента;

значение 1: некоторые элементы второго операнда совпадают по меньшей мере с одним элементом третьего операнда;

значение 2: все элементы второго операнда совпадают по меньшей мере с одним элементом третьего операнда;

значение 3: ни один из элементов второго операнда не совпадает ни с одним из элементов третьего операнда.

Программные исключения:

- данные с DXC FE [от английского Data Exception+FEh - программное исключение (ошибка) данных, FE - номер ошибки в шестнадцатеричной (h) системе счисления], векторный регистр;

- попытка выполнения при неинсталлированной поддержке векторного функционала;

- спецификация (в поле спецификатора ES длины элемента указано зарезервированное значение);

- ограничение транзакции.

Расширенная мнемоника:

Команда векторного типа для поиска равнозначного элемента

(от англ.: Vector Find Element Equal)

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

Если в поле М5 установлен флаг ZS поиска нуля, то значение каждого элемента второго операнда также сравнивается с нулем. Если во втором операнде выявлен равный нулю элемент до того, как выявлены другие элементы второго и третьего операндов с равными значениями, то в седьмой байт первого операнда записывается значение индекса первого байта выявленного равного нулю элемента, а во все остальные байты первого операнда записываются нули. Если флаг СС установки кода условия имеет значение 1, то код условия устанавливается равным 0.

Поле М4 содержит спецификатор ES длины элемента. Спецификатор ES определяет длину элементов операндов векторных регистров. Если в этом поле указано зарезервированное значение, то возникает программное исключение (ошибка) спецификации. Значения спецификатора ES:

0 - байт;

1 - полуслово;

2 - полное слово;

3-15 - зарезервированные значения.

Поле M5 имеет следующий формат:

Назначение разрядов поля M5:

- Зарезервированы: разряды 0 и 1 являются зарезервированными, их значения должны быть равны нулю, в противном случае возникает программное исключение (ошибка) спецификации.

- Флаг поиска нуля (ZS): если единица, то каждый элемент второго операнда также сравнивается с нулем.

- Флаг установки кода условия (СС): если ноль, то код условия не устанавливается, его значение остается без изменений. Если единица, то устанавливается код условия по правилу (см. далее).

Особые условия

Если происходит любое из следующих событий, то возникает программное исключение (ошибка) спецификации, и выполнение команды прекращается:

1. Поле М4 содержит значения от 3 до 15.

2. Значения разрядов 0 или 1 поля M5 отличны от нуля.

Правило установки кода условия:

Если значение разряда 3 поля М5 (флаг СС) равно единице, то значение кода условия устанавливается следующим образом:

значение 0: если флаг ZS поиска нуля установлен, то сравнение выявило во втором операнде равный нулю элемент, и индекс этого элемента меньше, чем индекс любого из совпавших элементов;

значение 1: сравнение выявило совпадение значений некоторого элемента во втором и третьем операндах. Если флаг ZS поиска нуля установлен, то совпадение выявлено в элементе, индекс которого меньше, либо равен индексу равного нулю элемента;

значение 2: не определено;

значение 3: совпадающих элементов не выявлено.

Если значение третьего разряда поля M5 (флаг СС) равно нулю, то код не изменяется.

Программные исключения:

- данные с DXC FE, векторный регистр;

- попытка выполнения при неинсталлированной поддержке векторного функционала;

- спецификация (в поле спецификатора ES длины элемента указано зарезервированное значение);

- ограничение транзакции.

Расширенная мнемоника:

Замечание по программированию:

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

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

Команда векторного типа для поиска неравнозначного элемента

(от англ.: Vector Find Element Not Equal)

В порядке слева направо беззнаковые двоичные целые элементы второго операнда сравнивается с соответствующими беззнаковыми двоичными целыми элементами третьего операнда. Если значения двух элементов неравны, то в седьмой байт первого операнда записывается индекс первого байта крайнего левого элемента второго операнда с несовпавшим значением. В остальные байты первого операнда записываются нули. Если флаг СС установки кода условия в поле М5 установлен (т.е. имеет значение 1), то устанавливается код условия, показывающий, выявленный элемент какого из операндов имеет большее значение. Если значения элементов во всех парах равны, то в седьмой байт первого операнда записывается значение, равное длине вектора в байтах, а значения остальных байтов первого операнда устанавливаются равными нулю. Если значение флага СС установки кода равно единице, то значение кода условия устанавливается равным трем.

Если в поле М5 установлен флаг ZS поиска нуля, то значение каждого элемента второго операнда также сравнивается с нулем. Если во втором операнде выявлен равный нулю элемент до того, как выявлены элементы второго и третьего операндов с различающимися значениями, то в седьмой байт первого операнда записывается значение индекса первого байта выявленного равного нулю элемента, а во все остальные байты первого операнда записываются нули. Значение кода условия устанавливается равным нулю.

Поле М4 содержит спецификатор ES длины элемента. Спецификатор ES определяет длину элементов операндов векторных регистров. Если в этом поле указано зарезервированное значение, то возникает программное исключение (ошибка) спецификации. Значения спецификатора ES:

0 - байт;

1 - полуслово;

2 - полное слово;

3-15 - зарезервированные значения.

Поле М5 имеет следующий формат:

Назначение разрядов поля М5:

- Флаг поиска нуля (ZS): если единица, то каждый элемент второго операнда также сравнивается с нулем.

- Флаг установки кода условия (СС): если ноль, то код условия не устанавливается, его значение остается без изменений. Если единица, то устанавливается код условия по правилу (см. далее).

Особые условия

Если происходит любое из следующих событий, то возникает программное исключение (ошибка) спецификации, и выполнение команды прекращается:

1. Поле М4 содержит значения от 3 до 15.

2. Значения разрядов 0 или 1 поля М5 отличны от нуля.

Правило установки кода условия:

Если значение разряда 3 поля М5 (флаг СС) равно единице, то значение кода условия устанавливается следующим образом:

значение 0: если установлен флаг ZS поиска нуля, то сравнение выявило в обоих операндах равный нулю элемент, и индекс этого элемента меньше, чем индекс любой пары различающихся элементов;

значение 1: сравнение выявило различие значений, причем значение элемента второго операнда меньше, чем значение элемента третьего операнда;

значение 2: сравнение выявило различие значений, причем значение элемента второго операнда больше, чем значение элемента третьего операнда;

значение 3: значения всех элементов равны, и если флаг ZS поиска нуля установлен, то во втором операнде равных нулю элементов не выявлено.

Если значение третьего разряда поля М5 (флаг СС) равно нулю, то код не изменяется.

Программные исключения:

- данные с DXC FE, векторный регистр;

- попытка выполнения при неинсталлированной поддержке векторного функционала;

- спецификация (в поле спецификатора ES длины элемента указано зарезервированное значение);

- ограничение транзакции.

Расширенная мнемоника:

Команда VECTOR STRING RANGE COMPARE

(от англ.: тип векторный, сравнение со строкой диапазонов)

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

Если флаг RT типа результата в поле М6 имеет нулевое значение, и если значение элемента второго операнда удовлетворяет любому из диапазонов, то значения разрядов соответствующего элемента первого операнда устанавливаются равными единице, в противном случае устанавливаются равными нулю.

Если флаг RT типа результата в поле М6 имеет единичное значение, то в седьмой байт первого операнда записывается индекс байта первого элемента второго операнда, удовлетворяющего условию для любого из диапазонов, определяемых третьим и четвертым операндами, или равного нулю элемента (если установлен флаг ZS поиска нуля), а во все остальные байты первого операнда записываются нули. Если ни один из элементов не удовлетворяет условию, то в седьмой байт первого операнда записывается значение, равное длине вектора в байтах, а во все остальные байты записываются нули.

Если в поле М6 установлен флаг ZS поиска нуля, то в дополнение к проверке элементов второго операнда на соответствие диапазонам, задаваемой третьим и четвертым операндами, выполняется сравнение значений элементов второго операнда с нулем. Если значение индекса выявленного равного нулю элемента меньше, чем значение индекса элемента, выявленного в результате проверки на соответствие диапазонам, то коду условия присваивается значение ноль.

Поле М5 содержит спецификатор ES длины элемента, который определяет длину элементов операндов.

Элементы четвертого операнда имеют следующий формат.

При ES=0:

При ES=1:

При ES=2:

Разряды элементов четвертого операнда имеют следующее назначение:

- Равенство (EQ): если единица, то выполняется проверка равенства (проверка попадания в диапазон).

- Больше, чем (GT): если единица, то выполняется проверка условия "больше, чем".

- Меньше, чем (LT): если единица, то выполняется проверка условия "меньше, чем".

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

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

Поле М5 содержит спецификатор ES длины элемента. Спецификатор ES определяет длину элементов операндов векторных регистров. Если в этом поле указано зарезервированное значение, то возникает программное исключение (ошибка) спецификации. Значения спецификатора ES:

0 - байт;

1 - полуслово;

2 - полное слово;

3-15 - зарезервированные значения.

Поле М6 имеет следующий формат:

Назначение разрядов поля М6:

- Инвертировать результат (IN): если ноль, то выполняется сравнение с диапазонами, заданными парами элементов третьего операнда. Если единица, то результаты выполненных сравнений инвертируются.

- Флаг типа результата (RT): если ноль, то элемент первого операнда является маской сравнения соответствующего элемента второго операнда. Если единица, то в седьмой байт первого операнда записывается значение индекса. Во все остальные байты записываются нули.

- Флаг поиска нуля (ZS): если единица, то каждый элемент второго операнда также сравнивается с нулем.

- Флаг установки кода условия (СС): если ноль, то код условия не устанавливается, его значение остается без изменений. Если единица, то устанавливается код условия по правилу (см. далее).

Особые условия

Если происходит любое их следующих событий, то возникает программное исключение (ошибка) спецификации, и выполнение команды прекращается:

1. Поле М4 содержит значения от 3 до 15.

Правило установки кода условия:

значение 0: если флаг ZS=1 и найден равный нулю элемент, индекс которого меньше, чем индекс элемента-результата любого другого сравнения;

значение 1: выявлен удовлетворяющий условию элемент;

значение 2: не определено;

значение 3: удовлетворяющих условию элементов нет.

Программные исключения:

- данные с DXC FE, векторный регистр;

- попытка выполнения при неинсталлированной поддержке векторного функционала;

- спецификация (в поле спецификатора ES длины элемента указано зарезервированное значение);

- ограничение транзакции.

Расширенная мнемоника:

ES=1, ZS=0

флагу RT=0 соответствует результат VR1(a)

флагу RT=1 соответствует результат VR1(b)

Команда расчета загрузки до границы блока

(от англ.: Load Count to Block Boundary)

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

Смещение для данной команды обрабатывается как 12-разрядное беззнаковое целое число.

Адрес второго операнда для адресации данных не используется.

Поле М3 задает код, который используется для информирования ЦПУ о границе (размере) блока для определения числа байтов, которые можно загрузить. Если указано зарезервированное значение, то возникает программное исключение (ошибка) спецификации.

Код Граница блока 0 64 байта 1 128 байтов 2 256 байтов 3 512 байтов 4 1 килобайт 5 2 килобайта 6 4 килобайта

7-15: зарезервированные значения.

Правило установки кода условия:

0: значение первого операнда равно 16;

1: не определено;

2: не определено;

3: значение первого операнда меньше 16.

Программные исключения:

- попытка выполнения при неинсталлированной поддержке векторного функционала;

- спецификация.

Указание по программированию: подразумевается, что команда расчета загрузки до границы блока будет использоваться совместно с командой векторного типа для загрузки до границы блока (от англ.: Vector Load to Block Boundary) для определения числа загруженных байтов.

Команда VECTOR LOAD GR FROM VR ELEMENT

(от англ.: тип векторный, загрузить в регистр общего назначения элемент векторного регистра)

Первому операнду присваивается значение элемента третьего операнда. Индекс элемента третьего операнда определяется значением второго операнда, длина элемента определяется значением спецификатора ES из поля М4. Третий операнд является векторным регистром. Первый операнд является регистром общего назначения. Если значение второго операнда больше максимального индекса элементов третьего операнда при заданной длине элементов, то результат в первом операнде будет непредсказуем.

Если длина элемента векторного регистра меньше, чем двойное слово, то в 64-разрядном регистре общего назначения элемент выравнивается по правому краю, а все остальные разряды регистра общего назначения заполняются нулями.

Второй операнд не используется для адресации данных; вместо этого используются его крайние правые 12 разрядов для указания индекса элемента третьего операнда.

Поле М4 содержит спецификатор ES длины элемента. Спецификатор ES определяет длину элементов операндов векторных регистров. Если в этом поле указано зарезервированное значение, то возникает программное исключение (ошибка) спецификации. Значения спецификатора ES:

0 - байт;

1 - полуслово;

2 - полное слово;

3 - двойное слово;

4-15 - зарезервированные значения.

Правило установки кода условия: значение кода условия не изменяется.

Программные исключения:

- данные с DXC FE, векторный регистр;

- попытка выполнения при неинсталлированной поддержке векторного функционала;

- спецификация (в поле спецификатора ES длины элемента указано зарезервированное значение);

- ограничение транзакции.

Расширенная мнемоника:

Команда VECTOR LOAD ТО BLOCK BOUNDARY

(от англ.: тип векторный, загрузить до границы блока)

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

Смещение для данной команды обрабатывается как 12-разрядное беззнаковое целое число.

Поле М3 задает код, который используется для информирования ЦПУ о границе (размере) блока, который следует загрузить. Если указано зарезервированное значение, то возникает программное исключение (ошибка) спецификации.

Код Граница блока 0 64 байта 1 128 байтов 2 256 байтов 3 512 байтов 4 1 килобайт 5 2 килобайта 6 4 килобайта

7-15: зарезервированные значения.

Правило установки кода условия: код условия не изменяется.

Программные исключения:

- доступ (выборка, операнд 2);

- данные с DXC FE, векторный регистр;

- попытка выполнения при неинсталлированной поддержке векторного функционала;

- спецификация (в поле кода границы блока указано зарезервированное значение);

- ограничение транзакции.

Указания по программированию:

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

Команда VECTOR STORE

(от англ.: тип векторный, сохранить)

Значение из первого операнда длиной 128 разрядов записывается в запоминающее устройство по адресу, определяемому вторым операндом. Смещение для данной команды обрабатывается как 12-разрядное беззнаковое целое число.

Правило установки кода условия: значение кода условия не изменяется.

Программные исключения:

- доступ (запись в запоминающее устройство, операнд 2);

- данные с DXC FE, векторный регистр;

- попытка выполнения при неинсталлированной поддержке векторного функционала;

- ограничение транзакции.

Команда VECTOR STORE WITH LENGTH

(от англ.: тип векторный, сохранить с указанной длиной)

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

Программные исключения (ошибки) доступа могут возникать только при записи байтов.

Смещение для данной команды обрабатывается как 12-разрядное беззнаковое целое число.

Правило установки кода условия: значение кода условия не изменяется.

Программные исключения:

- доступ (запись, операнд 2);

- данные с DXC FE, векторный регистр;

- попытка выполнения при неинсталлированной поддержке векторного функционала;

- ограничение транзакции.

Описание поля RXB

Поле RXB занимает разряды с 36-го по 40-й всех команд векторного типа. Это поле содержит наиболее значимые разряды всех адресов векторных регистров. Те разряды адресов регистров, которые не определены командой, являются зарезервированными, их значения должны быть равны нулю, в противном случае в будущем не гарантируется совместимость с программным обеспечением. Наиболее значимый разряд операцией конкатенации добавляется слева к четырехразрядному адресу регистра, в результате чего формируется пятиразрядный адрес векторного регистра.

Разряды имеют следующее значение:

0 - наиболее значимый разряд адреса векторного регистра, объединяется с разрядами 8-11 команды;

1 - наиболее значимый разряд адреса векторного регистра, объединяется с разрядами 12-15 команды;

2 - наиболее значимый разряд адреса векторного регистра, объединяется с разрядами 16-19 команды;

3 - наиболее значимый разряд адреса векторного регистра, объединяется с разрядами 32-35 команды.

Управление разрешением выполнять команды векторного типа

Векторные регистры и команды могут использоваться только в том случае, если одновременно и разряд 46 (управление разрешением векторных операций), и разряд 45 (управление регистром AFP) управляющего регистра 0 имеют значение единица. Если в нарушение указанного условия совершается попытка выполнить команду векторного типа при инсталлированной поддержке векторного функционала, то возникает программное исключение (ошибка) данных DXC FE. Если поддержка векторного функционала не была инсталлирована, то возникает программное исключение (ошибка) выполнения.

Похожие патенты RU2585975C2

название год авторы номер документа
КОМАНДА ВЕКТОРНОГО ТИПА ДЛЯ ПОИСКА НЕРАВНОЗНАЧНОГО ЭЛЕМЕНТА 2013
  • Брадбери Джонатан Дейвид
  • Шварц Эрик Марк
  • Следжел Тимоти
  • Гшвинд Майкл Карл
RU2598814C2
ОПРЕДЕЛЕНИЕ ДЛИНЫ ГРУППЫ СИМВОЛЬНЫХ ДАННЫХ, СОДЕРЖАЩЕЙ СИМВОЛ ОКОНЧАНИЯ 2013
  • Брадбери Джонатан Дейвид
  • Гшвинд Майкл Карл
  • Следжел Тимоти
RU2621000C2
ТРАНСФОРМАЦИЯ ПРЕРЫВИСТЫХ СПЕЦИФИКАТОРОВ КОМАНД В НЕПРЕРЫВНЫЕ СПЕЦИФИКАТОРЫ КОМАНД 2012
  • Майкл Карл Гшвинд
RU2568241C2
СПОСОБ ВЫПОЛНЕНИЯ МАШИННОЙ КОМАНДЫ, КОМПЬЮТЕРНАЯ СИСТЕМА И МАШИНОЧИТАЕМЫЙ НОСИТЕЛЬ, ОБЕСПЕЧИВАЮЩИЕ РАСЧЕТ РАССТОЯНИЯ ОТ ПОЛОЖЕНИЯ В ОСНОВНОЙ ПАМЯТИ ДО ГРАНИЦЫ БЛОКА ОСНОВНОЙ ПАМЯТИ 2012
  • Джонатан Дейвид Бредбери
  • Майкл Карл Гшвинд
  • Эрик Марк Шварц
  • Тимоти Дж. Слиджл
  • Кристиан Якоби
RU2568920C2
КОМАНДА ДЛЯ ЗАГРУЗКИ ДАННЫХ ДО ЗАДАННОЙ ГРАНИЦЫ ПАМЯТИ, УКАЗАННОЙ КОМАНДОЙ 2012
  • Джонатан Дейвид Бредбери
  • Майкл Карл Гшвинд
  • Тимоти Дж. Слиджл
  • Эрик Марк Шварц
  • Кристиан Якоби
RU2565496C2
КОМАНДА ВЕКТОРНОГО ТИПА КОНТРОЛЬНОЙ СУММЫ 2013
  • Брэдбери Джонатан Дейвид
  • Шварц Эрик Марк
RU2608663C1
КОМАНДА ВЕКТОРНОГО ТИПА НА ПОЛЕ ГАЛУА ПЕРЕМНОЖЕНИЯ, СУММИРОВАНИЯ И НАКОПЛЕНИЯ 2014
  • Брэдбери Джонатан Дейвид
RU2613726C2
ПРОЦЕССОРЫ, СПОСОБЫ, СИСТЕМЫ И КОМАНДЫ ДЛЯ СЛОЖЕНИЯ ТРЕХ ОПЕРАНДОВ-ИСТОЧНИКОВ С ПЛАВАЮЩЕЙ ЗАПЯТОЙ 2014
  • Эспаса Рохер
  • Соле Гильем
  • Фернандес Манель
RU2656730C2
НЕЧУВСТВИТЕЛЬНЫЙ К ЗАДЕРЖКЕ БУФЕР ТРАНЗАКЦИИ ДЛЯ СВЯЗИ С КВИТИРОВАНИЕМ 2014
  • Доси Хем
  • Раджу Ананд
RU2598594C2
УВЕЛИЧЕНИЕ ЧИСЛА ДОСТУПНЫХ ДЛЯ КОМАНД РЕГИСТРОВ ОБЩЕГО НАЗНАЧЕНИЯ 2010
  • Дан Грейнер
  • Марсель Митран
  • Тимоти Слиджл
RU2562430C2

Иллюстрации к изобретению RU 2 585 975 C2

Реферат патента 2016 года КОМАНДА ВЕКТОРНОГО ТИПА ДЛЯ ПОИСКА РАВНОЗНАЧНОГО ЭЛЕМЕНТА

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

Формула изобретения RU 2 585 975 C2

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

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

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

4. Способ по п. 1, в котором поле маски содержит флаг установки кода условия, причем способ также включает:
определение того, установлен ли флаг установки кода условия,
установку кода условия для выполнения указанной машинной команды, если флаг установки кода условия установлен.

5. Способ по п. 1, в котором указанное выполнение включает производимое во время выполнения определение направления сравнения, представляющее собой направление слева направо или справа налево, и включает обращение машинной команды к спецификатору направления для определения направления.

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

7. Способ по п. 1, в котором указанный индекс равного нулю элемента содержит индекс байта, являющийся индексом первого байта равного нулю элемента.

8. Способ по п. 1, в котором указанный индекс равнозначного элемента содержит индекс байта, являющийся индексом байта равнозначного элемента.

9. Способ по п. 1, в котором указание на то, что равный нулю элемент не найден, и/или указание на то, что равнозначных элементов не найдено, содержит включение в состав индекса равного нулю элемента и/или индекса сравнения числа, представляющего длину второго операнда.

10. Система, содержащая средства, приспособленные для выполнения всех шагов способа по любому из пп. 1-9.

11. Машиночитаемый носитель данных, в котором хранится компьютерная программа, содержащая команды для выполнения всех шагов способа по любому из пп. 1-9 при ее выполнении в компьютерной системе.

RU 2 585 975 C2

Авторы

Брадбери Джонатан Дейвид

Следжел Тимоти

Шварц Эрик Марк

Гшвинд Майкл Карл

Даты

2016-06-10Публикация

2013-03-07Подача