КОМАНДА ВЕКТОРНОГО ТИПА НА ПОЛЕ ГАЛУА ПЕРЕМНОЖЕНИЯ, СУММИРОВАНИЯ И НАКОПЛЕНИЯ
VECTOR TYPE COMMAND AT FIELD OF GALOIS MULTIPLICATION, ADDITION AND ACCUMULATION

Предпосылки создания изобретения
[0001] Один или несколько аспектов изобретения относятся в общем к обработке в вычислительной среде, в частности, к векторной обработке в такой среде.
[0002] Обработка в вычислительной среде включает управление работой одного или нескольких центральных процессорных устройств (ЦПУ). Обычно действие ЦПУ управляется командами, хранящимися запоминающем устройстве Команды могут иметь различный формат и часто указывают регистры, используемые при выполнении различных операций.
[0003] В зависимости от архитектуры ЦПУ могут использоваться различные типы регистров, в том числе, например, регистры общего назначения, регистры специального назначения, регистры с плавающей запятой и/или векторные регистры. С различными типами команд могут использоваться различные типы регистров. Например, регистры с плавающей запятой хранят числа с плавающей запятой, используемые командами с плавающей запятой, векторные регистры содержат данные для векторной обработки, выполняемой командами типа "одиночный поток команд, множественный поток данных" (англ.: Single Instruction, Multiple Data, сокращенно SIMD), в том числе командами векторного типа.
Раскрытие изобретения
[0004] Для устранения недостатков уровня техники предложен машиночитаемый носитель данных (машиночитаемая среда хранения данных), в котором хранятся машинные команды, исполняемые схемой обработки для осуществления способа. Указанный способ включает, например: получение процессором для исполнения машинной команды, которая определена для исполнения компьютером в соответствии с архитектурой компьютера и содержит: по меньшей мере одно поле кода операции для предоставления кода операции, идентифицирующего операцию векторного типа на поле Галуа перемножения, суммирования и накопления; поле первого регистра, используемое для обозначения первого регистра, содержащего первый операнд; поле второго регистра, используемое для обозначения векторного регистра, содержащего второй операнд; поле третьего регистра, используемое для обозначения третьего регистра, содержащего третий операнд; поле четвертого регистра, используемое для обозначения четвертого регистра, содержащего четвертый операнд; и исполнение машинной команды, включающее: перемножение одного или нескольких элементов второго операнда с одним или несколькими элементами третьего операнда с использованием умножения без переноса для получения набора произведений; выполнение первой математической операции над указанным набором произведений для получения первого результата; выполнение второй математической операции над первым результатом и одним или несколькими выбранными элементами четвертого операнда для получения второго результата; и помещение второго результата в первый операнд.
[0005] В настоящей заявке также описываются и заявляются способы и системы, относящиеся к одному или нескольким аспектам изобретения. Кроме того, в настоящей заявке также описываются и могут быть заявлены сервисы (т.е. дополнительные функции), относящиеся к одному или нескольким аспектам изобретения.
[0006] С помощью способов одного или нескольких аспектов изобретения реализуются дополнительные особенности и преимущества. В данной заявке подробно описываются прочие варианты осуществления и аспекты изобретения, они рассматриваются как часть формулы изобретения. Достигаемый при осуществлении изобретения технический результат заключается в повышении эффективности вычислений на поле Галуа, а также в расширении арсенала средств и методов проведения таких вычислений.
[0007] В первом аспекте настоящего изобретения предлагается машиночитаемый носитель данных, в котором хранятся машинные команды, исполняемые схемой обработки для осуществления способа, включающего: получение процессором для исполнения машинной команды, которая определена для исполнения компьютером в соответствии с архитектурой компьютера и содержит: по меньшей мере одно поле кода операции для предоставления кода операции, идентифицирующего операцию векторного типа на поле Галуа перемножения, суммирования и накопления; поле первого регистра, используемое для обозначения первого регистра, содержащего первый операнд; поле второго регистра, используемое для обозначения второго регистра, содержащего второй операнд; поле третьего регистра, используемое для обозначения третьего регистра, содержащего третий операнд; поле четвертого регистра, используемое для обозначения четвертого регистра, содержащего четвертый операнд; и исполнение машинной команды, включающее: перемножение одного или нескольких элементов второго операнда с одним или несколькими элементами третьего операнда с использованием умножения без переноса для получения набора произведений; выполнение первой математической операции над указанным набором произведений для получения первого результата; выполнение второй математической операции над первым результатом и одним или несколькими выбранными элементами четвертого операнда для получения второго результата; и помещение второго результата в первый операнд.
[0008] В настоящем изобретении предпочтительно предлагается машиночитаемый носитель данных, в котором указанное перемножение включает умножение каждого элемента второго операнда на соответствующий элемент третьего операнда с использованием умножения без переноса с получением в результате четной-нечетной пар произведений, длина которых равна удвоенной длине элементов.
[0009] В настоящем изобретении предпочтительно предлагается машиночитаемый носитель данных, в котором умножение без переноса имеет порядок два.
[0010] В настоящем изобретении предпочтительно предлагается машиночитаемый носитель данных, в котором указанная первая математическая операция содержит операцию "исключающее ИЛИ", причем для получения указанного первого результата указанные четная-нечетная пары произведений с длиной, равной удвоенной длине элементов, добавляются друг к другу операцией "исключающее ИЛИ".
[0011] В настоящем изобретении предпочтительно предлагается машиночитаемый носитель данных, в котором указанная вторая математическая операция содержит операцию "исключающее ИЛИ", причем для получения второго результата указанный первый результат добавляется операцией "исключающее ИЛИ" к соответствующему элементу двойной длины четвертого операнда.
[0012] В настоящем изобретении предпочтительно предлагается машиночитаемый носитель данных, в котором указанное помещение включает помещение второго результата в элемент двойной длины первого операнда.
[0013] В настоящем изобретении предпочтительно предлагается машиночитаемый носитель данных, в котором машинная команда также содержит поле маски для указания длины элементов одного или нескольких из первого операнда, второго операнда, третьего операнда, четвертого операнда машинной команды.
[0014] В настоящем изобретении предпочтительно предлагается машиночитаемый носитель данных, в котором поле маски определяет длину элементов второго операнда и третьего операнда указанной машинной команды.
[0015] В настоящем изобретении предпочтительно предлагается машиночитаемый носитель данных, в котором длина элементов указанных первого операнда и четвертого операнда равна удвоенной длине элементов указанных второго операнда и третьего операнда.
[0016] В настоящем изобретении предпочтительно предлагается машиночитаемый носитель данных, в котором машинная команда также содержит поле расширения, используемое для указания одного или нескольких регистров, причем поле первого регистра объединено с первой частью поля расширения для указания первого регистра, поле второго регистра объединено со второй частью поля расширения для указания второго регистра, поле третьего регистра объединено с третьей частью поля расширения для указания третьего регистра, и поле четвертого регистра объединено с четвертой частью поля расширения для указания четвертого регистра.
[0017] В другом аспекте настоящего изобретения предлагается компьютерная система для исполнения машинной команды в центральном процессорном устройстве, содержащая запоминающее устройство и процессор, связанный с запоминающим устройством, причем компьютерная система сконфигурирована для осуществления способа, включающего: получение процессором для исполнения машинной команды, которая определена для исполнения компьютером в соответствии с архитектурой компьютера и содержит: по меньшей мере одно поле кода операции для предоставления кода операции, идентифицирующего операцию векторного типа на поле Галуа перемножения, суммирования и накопления; поле первого регистра, используемое для обозначения первого регистра, содержащего первый операнд; поле второго регистра, используемое для обозначения второго регистра, содержащего второй операнд; поле третьего регистра, используемое для обозначения третьего регистра, содержащего третий операнд; поле четвертого регистра, используемое для обозначения четвертого регистра, содержащего четвертый операнд; и исполнение машинной команды, включающее: перемножение одного или нескольких элементов второго операнда с одним или несколькими элементами третьего операнда с использованием умножения без переноса для получения набора произведений; выполнение первой математической операции над указанным набором произведений для получения первого результата; выполнение второй математической операции над первым результатом и одним или несколькими выбранными элементами четвертого операнда для получения второго результата; и помещение второго результата в первый операнд.
[0018] В настоящем изобретении предпочтительно предлагается компьютерная система, в которой указанное перемножение включает умножение каждого элемента второго операнда на соответствующий элемент третьего операнда с использованием умножения без переноса с получением в результате четной-нечетной пар произведений, длина которых равна удвоенной длине элементов.
[0019] В настоящем изобретении предпочтительно предлагается компьютерная система, в которой указанная первая математическая операция содержит операцию "исключающее ИЛИ", причем для получения указанного первого результата указанные четная-нечетная пары произведений с длиной, равной удвоенной длине элементов, добавляются друг к другу операцией "исключающее ИЛИ".
[0020] В настоящем изобретении предпочтительно предлагается компьютерная система, в которой указанная вторая математическая операция содержит операцию "исключающее ИЛИ" и в котором указанный первый результат добавляется операцией "исключающее ИЛИ" к соответствующему элементу двойной длины четвертого операнда для получения указанного второго результата.
[0021] В настоящем изобретении предпочтительно предлагается компьютерная система, в которой машинная команда также содержит поле маски для указания длины элементов одного или нескольких из первого операнда, второго операнда, третьего операнда, четвертого операнда машинной команды.
[0022] В настоящем изобретении предпочтительно предлагается компьютерная система, в которой поле маски определяет длину элементов второго операнда и третьего операнда указанной машинной команды и в которой длина элементов указанных первого операнда и четвертого операнда равна удвоенной длине элементов указанных второго операнда и третьего операнда.
[0023] В настоящем изобретении предпочтительно предлагается компьютерная система, в которой машинная команда также содержит поле расширения, используемое для указания одного или нескольких регистров, причем поле первого регистра объединено с первой частью поля расширения для указания первого регистра, поле второго регистра объединено со второй частью поля расширения для указания второго регистра, поле третьего регистра объединено с третьей частью поля расширения для указания третьего регистра, и поле четвертого регистра объединено с четвертой частью поля расширения для указания четвертого регистра.
[0024] В другом аспекте настоящего изобретения предлагается способ исполнения машинной команды в центральном процессорном устройстве, включающий: получение процессором для исполнения машинной команды, которая определена для исполнения компьютером в соответствии с архитектурой компьютера и содержит: по меньшей мере одно поле кода операции для предоставления кода операции, идентифицирующего операцию векторного типа на поле Галуа перемножения, суммирования и накопления; поле первого регистра, используемое для обозначения первого регистра, содержащего первый операнд; поле второго регистра, используемое для обозначения второго регистра, содержащего второй операнд; поле третьего регистра, используемое для обозначения третьего регистра, содержащего третий операнд; поле четвертого регистра, используемое для обозначения четвертого регистра, содержащего четвертый операнд; и исполнение машинной команды, включающее: перемножение одного или нескольких элементов второго операнда с одним или несколькими элементами третьего операнда с использованием умножения без переноса для получения набора произведений; выполнение первой математической операции над указанным набором произведений для получения первого результата; выполнение второй математической операции над первым результатом и одним или несколькими выбранными элементами четвертого операнда для получения второго результата; и помещение второго результата в первый операнд.
[0025] В настоящем изобретении предпочтительно предлагается способ, согласно которому машинная команда также содержит поле маски для указания длины элементов одного или нескольких из первого операнда, второго операнда, третьего операнда, четвертого операнда машинной команды.
[0026] В настоящем изобретении предпочтительно предлагается способ, согласно которому машинная команда также содержит поле расширения, используемое для указания одного или нескольких регистров, причем поле первого регистра объединено с первой частью поля расширения для указания первого регистра, поле второго регистра объединено со второй частью поля расширения для указания второго регистра, поле третьего регистра объединено с третьей частью поля расширения для указания третьего регистра, и поле четвертого регистра объединено с четвертой частью поля расширения для указания четвертого регистра.
Краткое описание чертежей
[0027] Настоящее изобретение может быть осуществлено множеством способов, и далее исключительно в качестве примера будут описаны варианты осуществления с использованием прилагающихся чертежей. На чертежах показано:
на фиг. 1 - схема примера вычислительной среды, в состав которой могут входить и в которой могут использоваться один или несколько аспектов изобретения,
на фиг. 2А - схема другого примера вычислительной среды, в состав которой могут входить и в которой могут использоваться один или несколько аспектов изобретения,
на фиг. 2Б - более детальная схема запоминающего устройства по схеме фиг. 2А,
на фиг. 3 - схема примера файла регистров,
на фиг. 4А - схема примера формата команды векторного типа
непосредственной проверки класса данных с плавающей запятой (англ.: Vector Floating Point Test Data Class Immediate),
на фиг. 4Б - пример значений двоичных разрядов третьего операнда команды векторного типа непосредственной проверки класса данных с плавающей запятой согласно фиг. 4А,
на фиг. 4В - схема варианта осуществления процедуры, связанной с командой векторного типа непосредственной проверки класса данных с плавающей запятой согласно фиг. 4А,
на фиг. 4Г - схема примера алгоритма исполнения команды векторного типа непосредственной проверки класса данных с плавающей запятой согласно фиг. 4А,
на фиг. 4Д - пример определения различных классов данных с плавающей запятой в двоичной форме представления,
на фиг. 5А - схема примера формата команды векторного типа контрольной суммы (англ.: Vector Checksum),
на фиг. 5Б - схема варианта осуществления процедуры, связанной с командой векторного типа контрольной суммы согласно фиг. 5А,
на фиг. 5В - схема примера алгоритма исполнения команды векторного типа контрольной суммы согласно фиг. 5А,
на фиг. 6А - схема примера формата команды векторного типа на поле Галуа перемножения, суммирования и накопления (англ.: Vector Galois Field Multiply Sum and Accumulate),
на фиг. 6Б - схема варианта осуществления процедуры, связанной с командой векторного типа на поле Галуа перемножения, суммирования и накопления согласно фиг. 6А,
на фиг. 6В - схема примера алгоритма исполнения команды векторного типа на поле Галуа перемножения, суммирования и накопления согласно фиг. 6А,
на фиг. 7А - схема примера формата команды векторного типа формирования маски (англ.: Vector Generate Mask),
на фиг. 7Б - схема варианта осуществления процедуры, связанной с командой векторного типа формирования маски согласно фиг. 7А,
на фиг. 7В - схема примера алгоритма исполнения команды векторного типа формирования маски согласно фиг. 7А,
на фиг. 8А - схема примера формата команды векторного типа циклического сдвига элемента и вставки по маске (англ.: Vector Element Rotate and Insert Under Mask),
на фиг. 8Б - схема варианта осуществления процедуры, связанной с командой векторного типа циклического сдвига элемента и вставки по маске согласно фиг. 8А,
на фиг. 8В - схема примера алгоритма исполнения команды векторного типа циклического сдвига элемента и вставки по маске согласно фиг. 8А,
на фиг. 9А - схема примера кода векторного исключения,
на фиг. 9Б - схема варианта осуществления процедуры, связанной с установкой кода векторного исключения согласно фиг. 9А,
на фиг. 10 - графическое представление варианта осуществления компьютерного программного продукта, содержащего один или несколько аспектов изобретения,
на фиг. 11 - схема варианта выполнения хост-компьютерной системы,
на фиг. 12 - схема еще одного примера компьютерной системы,
на фиг. 13 - схема другого примера компьютерной системы, содержащей вычислительную сеть,
на фиг. 14 - схема варианта выполнения различных узлов компьютерной системы,
на фиг. 15А - схема варианта выполнения исполнительного устройства из состава компьютерной системы, показанной на фиг. 14,
на фиг. 15Б - схема варианта выполнения устройства ветвления из состава компьютерной системы, показанной на фиг. 14,
на фиг. 15В - схема варианта выполнения устройства загрузки-хранения из состава компьютерной системы, показанной на фиг. 14,
на фиг. 16 - схема варианта выполнения эмулируемой (виртуальной) хост-компьютерной системы.
Осуществление изобретения
[0028] Согласно одному или нескольким аспектам изобретения предлагается векторное средство, которое содержит различные команды векторного типа, а также обработку векторных исключений. Каждая из указанных команд, описанных в настоящей заявке, является командой типа "одиночный поток команд, множественный поток данных", использующей один или несколько векторных регистров (в настоящей заявке векторные регистры также называются векторами). Векторным регистром является, например, регистр процессора (называемый также аппаратным регистром), который представляет собой небольшое по объему пространство памяти (например, не являющееся пространством памяти главного запоминающего устройства), доступное как часть ЦПУ или другого процессора. Каждый векторный регистр содержит векторный операнд, содержащий один или несколько элементов, и длина элемента составляет, например, один, два, четыре или восемь байтов. В других вариантах осуществления изобретения элементы могут иметь другие длины, а команда векторного типа не обязательно должна быть командой типа "одиночный поток команд, множественный поток данных".
[0029] Схема одного варианта осуществления вычислительной среды для внедрения и использования одного или нескольких аспектов изобретения показана на фиг. 1. Вычислительная среда 100 содержит, например, процессор 102 (например, ЦПУ), запоминающее устройство 104 (например, главное запоминающее устройство) и одно или несколько устройств ввода-вывода и/или интерфейсов 106, соединенных с другой вычислительной средой, например, через одну или несколько шин 108 и/или иных соединений.

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

[0031] Согласно другому варианту осуществления изобретения процессор 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.

[0032] Согласно еще одному варианту осуществления, процессор 102 основан на архитектуре Intel, предложенной корпорацией Intel. Один вариант осуществления архитектуры Intel описан в публикациях "Intel 64 and IA-32 Architectures Developer's Manual: Vol. 2B, Instructions Set Reference, A-L", номер заказа 253666-045US, январь 2013 г., и "Intel 64 and IA-32 Architectures Developer's Manual: Vol. 2B, Instructions Set Reference, M-Z", номер заказа 253667-045US, январь 2013 г., которые включены в настоящую заявку путем ссылки во всей своей полноте. Intel является зарегистрированной торговой маркой корпорации Intel Corporation, г. Санта-Клара, штат Калифорния, США.
[0033] Схема другого варианта осуществления вычислительной среды для внедрения и использования одного или нескольких аспектов изобретения показана на фиг. 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 или другими компаниями и корпорациями.
[0034] Собственное ЦПУ 202 содержит один или несколько собственных регистров 210, таких как один или несколько регистров общего назначения и/или один или несколько регистров специального назначения, используемых при обработке в вычислительной среде. Эти регистры содержат информацию, которая представляет состояние вычислительной среды в каждый отдельно взятый момент времени.
[0035] Кроме того, собственное ЦПУ 202 исполняет команды и программный код, которые хранятся в запоминающем устройстве 204. Согласно одному конкретному примеру, ЦПУ выполняет код 212 эмулятора, хранящийся в запоминающем устройстве 204. Этот код позволяет среде обработки, сконфигурированной по одной архитектуре, эмулировать (т.е. имитировать) другую архитектуру. Например, код 212 эмулятора позволяет электронным вычислительным машинам, основанным на архитектурах, отличных от z/Architecture, таким как процессоры PowerPC, серверы pSeries, серверы xSeries, серверы HP Superdome или другим, имитировать архитектуру z/Architecture и выполнять программное обеспечение и команды, разработанные для архитектуры z/Architecture.
[0036] Дальнейшие сведения о коде 212 эмулятора приводятся с использованием фиг. 2Б. Гостевые команды 250, хранящиеся в запоминающем устройстве 204, содержат команды программного обеспечения (например, взаимосвязанные с машинными командами), которые были разработаны для исполнения на архитектуре, отличной от архитектуры собственного ЦПУ 202. Например, гостевые команды 250 могли были быть разработаны для исполнения на процессоре 102, построенном по архитектуре z/Architecture, однако вместо этого эмулируются на собственном ЦПУ 202, которое может быть, например, процессором типа Intel Itanium II. В одном из примеров код 212 эмулятора содержит процедуру 252 выборки команд, предназначенную для получения одной или нескольких гостевых команд 250 из запоминающего устройства 204 и, возможно, для выполнения локальной буферизации (временного хранения) полученных команд. Этот код 212 эмулятора также содержит процедуру 254 трансляции команд, предназначенную для определения типа поступившей гостевой команды и трансляции указанной гостевой команды в одну или несколько соответствующих собственных команд 256 (т.е. команд, предназначенных для исполнения собственным ЦПУ, построенным по собственной архитектуре). В состав процедуры трансляции входят, например, идентификация функции, которая должна выполняться гостевой командой, и выбор собственной команды или набора команд для выполнения этой функции.
[0037] Далее, эмулятор 212 содержит процедуру 260 управления эмуляцией, обеспечивающую исполнение собственных команд. Процедура 260 управления эмуляцией может заставить собственное ЦПУ 202 выполнять программу из собственных команд, которая имитирует одну или несколько раннее поступивших гостевых команд, и по окончании этого вычислительного процесса возвращать управление упомянутой процедуре выборки команд для имитации получения следующей гостевой команды или группы гостевых команд. Процесс исполнения собственных команд 256 может содержать загрузку данных в регистр из запоминающего устройства 204, передачу данных из регистра обратно в запоминающее устройство для хранения или выполнение некоторой арифметической или логической операции в соответствии с определенной процедурой трансляции.
[0038] Каждая процедура реализована, например, в программном обеспечении, которое хранится в запоминающем устройстве и выполняется собственным ЦПУ 202. В других примерах одна или несколько процедур или операций реализованы в постоянном запоминающем устройстве (ПЗУ), в аппаратном или программном обеспечении или в их комбинации. Упомянутые регистры эмулируемого процессора могут имитироваться с использованием регистров 210 собственного ЦПУ или с использованием ячеек памяти запоминающего устройства 204. В вариантах осуществления гостевые команды 250, собственные команды 256 и код 212 эмулятора могут располагаться в одном и том же запоминающем устройстве или могут храниться распределенно в различных запоминающих устройствах.
[0039] В рассматриваемом примере ПЗУ хранит, например, микрокод, милликод и/или макрокод процессора. Код содержит, например, команды аппаратного уровня и/или структуры данных, используемые при реализации машинных кодов более высокого уровня. В одном варианте осуществления код содержит, например, проприетарный код, который обычно поставляется как микрокод, содержащий выверенное программное обеспечение, или микрокод, специфический для окружающего аппаратного обеспечения и контролирующий доступ операционной системы к аппаратному обеспечению вычислительной системы.
[0040] В одном примере загружаемая, транслируемая и исполняемая гостевая команда 250 является одной из команд, описанных в настоящей заявке. Эта команда, предназначенная для одной архитектуры (например, для архитектуры z/Architecture), извлекается из запоминающего устройства, транслируется и представляется последовательным набором собственных команд 256 другой архитектуры (например, архитектуры PowerPC, pSeries, xSeries, Intel и т.д.). Затем указанные собственные команды исполняются.
[0041] В одном варианте осуществления изобретения описанные в настоящей заявке команды являются командами векторного типа и являются частью векторного функционала (т.е. векторной среды, набора команд векторного типа и средств их обработки). Векторный функционал позволяет работать, например, с векторами фиксированной длины в пределах от одного до шестнадцати элементов. Каждый вектор содержит данные, которые обрабатываются командами векторного типа, определенными в векторном функционале. Согласно варианту осуществления, если вектор образован из набора элементов, то каждый элемент обрабатывается параллельно с другими элементами. Исполнение команды не завершено, пока не завершена обработка всех элементов вектора. В других вариантах осуществления изобретения элементы обрабатываются частично параллельно и/или последовательно.
[0042] Команды векторного типа могут использоваться как часть различных архитектур, включая (но не ограничиваясь) архитектуры z/Architecture, Power, х86, IA-32, IA-64 и т.д. Хотя варианты осуществления изобретения, описанные в настоящей заявке, описываются применительно к архитектуре z/Architecture, однако команды векторного типа, описанные в настоящей заявке, а также один или несколько других аспектов изобретения могут основываться на многих других архитектурах. Архитектура z/Architecture используется исключительно в качестве одного из примеров.
[0043] Согласно варианту осуществления изобретения, в котором векторный функционал применяется как часть архитектуры z/Architecture, для того, чтобы использовать указанные векторные регистры и команды векторного типа, в специализированном управляющем регистре (например, в управляющем регистре 0) флаги разрешения векторного функционала и векторных регистров должны быть установлены в состояние, например, логической единицы. Если векторный функционал инсталлирован и команда векторного типа исполняется без разрешающих флагов, то возбуждается исключение данных. Если векторный функционал не инсталлирован и делается попытка исполнить команду векторного типа, то возбуждается исключение исполнения.
[0044] В одном варианте осуществления имеется 32 векторных регистра, причем регистры других типов могут отображаться на область-квадрант векторных регистров. Например, как показано на фиг. 3, файл 300 регистров содержит 32 векторных регистра 302, и длина каждого регистра составляет 128 двоичных разрядов. Шестнадцать регистров 304 с плавающей запятой длиной 64 двоичных разряда каждый могут перекрываться с векторными регистрами. Таким образом, например, если изменится содержимое регистра 2 с плавающей запятой, то содержимое векторного регистра 2 также изменится. Для регистров других типов также возможны и другие отображения.
[0045] Векторные данные располагаются в запоминающем устройстве, например, в той же самой последовательности, слева направо, как и прочие форматы данных. Двоичные разряды 0-7 формата данных образуют байт в крайней левой (с наименьшим номером) ячейке хранения байтов запоминающего устройства; двоичные разряды 8-15 образуют байт в следующей за предыдущей ячейке запоминающего устройства и т.д. В другом примере векторные данные могут располагаться в запоминающем устройстве в иной последовательности, например, справа налево.
1
1
[0046] Каждая команда векторного типа, описанная в настоящей заявке, содержит набор полей, и одно или несколько указанных полей снабжены нижним числовым индексом, связанным с данным полем. Нижний индекс, связанный с полем команды, обозначает операнд, к которому это поле применяется. Например, нижний индекс "1" в обозначении "V" векторного регистра указывает на то, что регистр V содержит первый операнд и т.д. Операнд регистра имеет ту же длину, что и сам регистр, например, 128 двоичных разрядов.
[0047] Далее, многие команды векторного типа, поддерживаемые векторным функционалом, снабжены полем, состоящим из специальных двоичных разрядов. Такое поле, называемое полем RXB (от англ. register extension bit - бит расширения регистра), содержит наиболее значимый двоичный разряд для каждого из операндов, указываемых векторным регистром. Двоичные разряды для обозначений регистров, не указанные командой, должны быть зарезервированы и должны быть установлены в состояние логического нуля. Наиболее значимый двоичный разряд объединяется операцией конкатенации, например, слева с четырехразрядным обозначением регистра для формирования пятиразрядного обозначения векторного регистра.
[0048] В одном примере указанное поле RXB содержит четыре двоичных разряда (например, 0-3), и эти разряды имеют следующее назначение:
разряд 0 - наиболее значимый разряд обозначения первого векторного регистра указанной команды (например, в разрядах 8-11);
разряд 1 - наиболее значимый разряд обозначения второго векторного регистра (например, в разрядах 12-15) указанной команды, если таковой предусмотрен;
разряд 2 - наиболее значимый разряд обозначения третьего векторного регистра (например, в разрядах 16-19) указанной команды, если таковой предусмотрен;
разряд 3 - наиболее значимый разряд обозначения четвертого векторного регистра (например, в разрядах 32-35) указанной команды, если таковой предусмотрен.
[0049] Каждый двоичный разряд устанавливается в состояние логического нуля или логической единицы, например, ассемблером, в зависимости от номера регистра. Например, для регистров 0-15 этот разряд устанавливается в состояние логического нуля, для регистров 16-31 этот разряд устанавливается в состояние логической единицы и т.д.
1
2
[0050] В одном варианте осуществления каждый двоичный разряд поля RXB является разрядом расширения определенного поля команды, которое содержит один или несколько векторных регистров. Например, в одной или нескольких командах векторного типа разряд 0 поля RXB является разрядом-расширением поля команды с позициями 8-11, это поле обозначается, например, как V; разряд 1 поля RXB является разрядом-расширением поля команды с позициями 12-15, это поле команды обозначается, например, как V, и т.д. В другом варианте осуществления поле RXB содержит дополнительные двоичные разряды, и для каждого вектора или поля в качестве разрядов-расширений используются по два и более разрядов.
1
2
3
5
4
[0051] Согласно аспекту изобретения, одной из предоставляемых команд, содержащих поле RXB, является команда векторного типа непосредственной проверки класса данных с плавающей запятой, пример формата которой показан на фиг. 4А (мнемонический код команды - VFTCI). В одном примере команда 400 векторного типа непосредственной проверки класса данных с плавающей запятой содержит: поля 402а (например, двоичные разряды 0-7) и 402b (например, разряды 40-47) кода операции, идентифицирующие операцию векторного типа непосредственной проверки класса данных с плавающей запятой; поле 404 первого векторного регистра (например, разряды 8-11), используемое для обозначения первого векторного регистра (V); поле 406 второго векторного регистра (например, разряды 12-15), используемое для обозначения второго векторного регистра (V); примыкающее поле I 408 (например, разряды 16-27) для размещения двоичной маски; поле 410 первой маски (М) (например, разряды 28-31); поле 412 второй маски (М) (например, разряды 32-35); поле 414 RXB (например, разряды 36-39). В одном примере каждое из полей 404-414 является отдельным и независимым от поля (полей) кода операции. Далее, в одном варианте осуществления указанные поля являются отдельными и независимыми друг от друга; однако в других вариантах осуществления два и более полей могут быть объединенными. Ниже приводятся дальнейшие сведения об использовании перечисленных полей.
[0052] В одном примере выбранные двоичные разряды (например, первые два разряда) кода операции, обозначенного полем 402а кода операции, указывают длину команды. В этом конкретном примере значение выбранных разрядов указывает, что длина составляет три полуслова. Далее, формат данной команды - операция типа векторный регистр-и-примыкающее поле, с расширенным полем кода операции. Каждое из векторных (V) полей совместно с соответствующим ему разрядом расширения регистра, содержащимся в поле RXB, обозначает некоторый векторный регистр. В частности, для векторных регистров, регистр, содержащий операнд, обозначается (адресуется) с использованием, например, четырехразрядного поля из состава поля регистра с добавлением соответствующего ему разряда расширения регистра (RXB) как наиболее значимого разряда. Например, если четырехразрядное поле содержит двоичное число 0110 и в разряде расширения содержится двоичное число 0, то пятиразрядное двоичное число 00110 указывает регистр 6 (в десятичной системе счисления).
1
2
3
[0053] Далее, в одном варианте осуществления команды векторного типа непосредственной проверки класса данных с плавающей запятой поля 404 V и 406 V указывают векторные регистры, которые содержат соответственно первый операнд и второй операнд данной команды. Кроме того, поле 408 I содержит двоичную маску, состоящую из набора двоичных разрядов, каждый из этих разрядов используется для представления класса и знака (положительного или отрицательного) элемента с плавающей запятой в двоичной форме в соответствии с дальнейшим подробным описанием.
[0054] Согласно другому варианту осуществления изобретения двоичная маска может предоставляться, например, в регистре общего назначения, в запоминающем устройстве, в элементе векторного регистра (отличаясь от элемента к элементу) или по результатам вычисления адреса. Она может включаться как явный операнд данной команды или как подразумеваемый операнд или входной параметр.
5
[0055] Поле 410 М содержит, например, четыре двоичных разряда 0-3 и определяет управляющий параметр S одиночного элемента, например, в двоичном разряде 0. Если значение двоичного разряда 0 равно единице, то операция применяется только к имеющему нулевой индекс элементу вектора. При этом значения двоичных разрядов всех прочих элементов в векторе первого операнда непредсказуемы. Если значение разряда 0 установлено равным нулю, то операция применяется ко всем элементам вектора.
4
[0056] Поле 412 М используется, например, для указания длины чисел с плавающей запятой во втором операнде команды. В одном примере значение 3 поля указывает число с плавающей запятой с двойной точностью в двоичной форме представления. Также возможны другие примеры.
[0057] При исполнении варианта осуществления команды векторного типа непосредственной проверки класса данных с плавающей запятой проверяется класс и знак элемента или элементов с плавающей запятой второго операнда для выбора одного или нескольких двоичных разрядов третьего операнда. Если выбранный разряд установлен, то значения всех двоичных разрядов соответствующего элемента первого операнда устанавливаются равными единице; в противном случае указанные значения устанавливаются равными нулю. То есть если класс/знак числа с плавающей запятой, содержащегося в элементе второго операнда, соответствует установленному двоичному разряду (т.е. значение двоичного разряда установлено, например, равным единице) третьего операнда, то значение элемента первого операнда, соответствующего элементу второго операнда, устанавливается равным единицам. В одном примере все элементы операнда содержат числа с плавающей запятой в длинном формате в двоичной форме представления.
3
3
[0058] В соответствии с изложенным выше, 12 двоичных разрядов третьего операнда, а именно разряды 16-27 текста команды, используются для указания 12 комбинаций класса и знака данных с плавающей запятой в двоичной форме. В одном примере, показанном на фиг. 4Б, элементы операнда с плавающей запятой в двоичной форме подразделяются на шесть классов 430: ноль; нормальное число; субнормальное число; бесконечность; тихое нечисло (англ.: Not-a-Number, NaN); сигнализирующее нечисло; с каждым классом ассоциирован знак 432 (положительный или отрицательный). Так, например, нулевой разряд поля I указывает класс ноль с положительным знаком, первый разряд поля I указывает класс ноль с отрицательным знаком и т.д.
[0059] Один или несколько двоичных разрядов третьего операнда могут быть установлены в единичное значение. Далее, в одном варианте осуществления команда может действовать на один или несколько элементов одновременно.
[0060] Элементы операнда, в том числе сигнализирующее нечисло и тихое нечисло, проверяются без инициирования исключения, предусмотренного стандартами IEEE (от англ. Institute of Electrical and Electronics Engineers - Институт инженеров по электротехнике и электронике).
Значения формируемого в результате итогового кода условия для всех элементов:
0 значение выбранного разряда для всех элементов - 1 (совпадение);
1 значение выбранного разряда по меньшей мере для одного, но не для всех элементов - 1 (если значение разряда S - ноль);
2 -
3 значение выбранного разряда для всех элементов - 0 (антисовпадение).
Исключения IEEE: нет.
Исключения программные:
- данные, со значением FE (шестнадцатеричное число) кода исключения данных, команда векторного типа, означает, что средство векторной обработки не активировано;
- операция (если средство векторной обработки для архитектуры z/Architecture не инсталлировано);
- спецификация;
- транзакционное ограничение.
Замечания по программированию:
1. Данная команда предоставляет возможность проверить элементы операнда без риска возбуждения исключения или активации флагов по стандартам IEEE.
2. Если двоичный разряд S установлен, то код условия 1 не используется.
[0061] Дальнейшие сведения о варианте осуществления команды векторного типа непосредственной проверки класса данных с плавающей запятой приводятся с использованием схем на фиг. 4В и 4Г. В частности, на фиг. 4В показан один вариант процедуры, связанной с командой векторного типа непосредственной проверки класса данных с плавающей запятой, исполняемой процессором (например, ЦПУ), а на фиг. 4Г показан схема примера алгоритма, поясняющая исполнение команды векторного типа непосредственной проверки класса данных с плавающей запятой.
2
[0062] Согласно фиг. 4В, вначале на шаге 450 выполняется инициализация значением ноль переменной Ei, называемой индексом элемента. Затем на шаге 452 выполняется извлечение значения элемента Ei, в данном случае - нулевого элемента, из второго операнда команды (например, из операнда, хранящегося в регистре, обозначенном V). Это значение, являющееся величиной с плавающей запятой в длинном формате в двоичной форме представления, на шаге 454 преобразуется в номер типа для получения класса и знака элемента второго операнда с плавающей запятой как описано далее. В одном примере входным параметром для процедуры преобразования является длина 453 числа с плавающей запятой. Полученный класс и знак ассоциируются с конкретным двоичным разрядом класса/знака в соответствии с фиг. 4Б и его описанием. Например, если преобразование показывает, что число с плавающей запятой - положительное нормальное число, то с числом с плавающей запятой ассоциируется двоичный разряд 2.
[0063] После преобразования выполняется проверка (шаг 456) двоичного разряда третьего операнда (называемого также выбранным разрядом), соответствующего конкретному разряду, который был определен на основе преобразования. Если выбранный разряд установлен (блок 458), то на шаге 460 значения всех разрядов элемента первого операнда, соответствующего элементу (Ei), устанавливаются равными единице; в противном случае на шаге 462 данный элемент первого операнда устанавливается равным нулю. Например, если преобразование числа с плавающей запятой в элементе 0 выявило положительное нормальное число, то с этим числом ассоциируется разряд 2. Следовательно, проверяется разряд 2 третьего операнда, и если его значение равно единице, то значения всех разрядов элемента 0 первого операнда устанавливаются равными единице.
[0064] Затем на шаге 464 принимается решение, равно ли значение Ei максимальному номеру элемента второго операнда. Если не равно, то на шаге 466 значение Ei увеличивается, например, на единицу, и выполнение продолжается с шага 452. В противном случае, если значение Ei равно максимальному номеру элементов, то на шаге 468 формируется итоговый код условия. Указанный итоговый код условия объединяет результаты обработки всех элементов указанного второго операнда. Например, если значение второго разряда установлено равным единице для всех элементов (совпадение), то итоговый код условия равен нулю. С другой стороны, если значение выбранного разряда равно единице по меньшей мере для одного, но не для всех элементов (если разряд S не равен нулю), то указанный итоговый код условия равен единице, и если значение выбранного разряда равно нулю для всех элементов (антисовпадение), то значение указанного кода условия равно трем.
[0065] Изложенная выше процедура обработки наглядно показана на схеме на фиг. 4Г. В соответствии с изображенным, векторный регистр 480 содержит набор элементов 482а-482n, каждый из которых содержит число с плавающей запятой. Каждое число с плавающей запятой и длина 483а-483n числа с плавающей запятой подаются на вход процедуры 484а-484n преобразования в номер типа, ее выходом является конкретный двоичный разряд, представляющий класс/знак числа с плавающей запятой. Затем проверяется выбранный разряд в каждой маске 486а-486b, соответствующий каждому конкретному двоичному разряду. Значение первого операнда векторного регистра 488 устанавливается в зависимости от того, установлен ли выбранный разряд. Например, если для элемента 0 второго операнда выбранный разряд установлен, то значения всех двоичных разрядов элемента 490а первого операнда устанавливаются равными единице. Аналогично, если выбранный разряд элемента 1 второго операнда не установлен (например, установлено значение ноль), то элемент 490b первого операнда устанавливается равным нулю и т.д.
[0066] Далее приводятся подробные сведения об одном варианте осуществления процедуры преобразования в номер типа. Вначале число с плавающей запятой, являющееся числом с плавающей запятой в двоичной форме представления по стандарту IEEE, преобразуется, как это хорошо известно, в три части: знак, порядок (8 двоичных разрядов) + 127, мантиссу (23 двоичных разряда). Затем значения всех трех частей проверяются с целью определения класса и знака как показано на фиг. 4Д. Например, знак является значением знаковой части, а класс (являющийся входным для фиг. 4Д) основывается на значениях порядка и мантиссы (разряд единиц на фиг. 4Д - подразумеваемый двоичный разряд мантиссы). Например, если значения порядка и мантиссы (в том числе разряда единиц) равны нулю, то класс - нулевой, и если знаковая часть положительная, то знак положительный. Следовательно, класс/знак данного числа с плавающей запятой представляет разряд 0 (см. фиг. 4Б).
[0067] Выше изложен один вариант осуществления команды проверки класса элементов с плавающей запятой из состава вектора и установки результирующей двоичной маски. Команда векторного типа непосредственной проверки класса данных с плавающей запятой имеет примыкающее поле, каждый двоичный разряд которого представляет класс чисел с плавающей запятой, подлежащий выявлению. Каждый элемент с плавающей запятой входного вектора проверяется на предмет того, принадлежит ли его значение какому-либо классу, определенному командой. Если элемент с плавающей запятой принадлежит одному из этих классов, то в двоичных разрядах соответствующего элемента выходного вектора устанавливаются единицы. В результате этого предоставляется средство определения некоторых свойств (например, класса и знака) числа с плавающей запятой в двоичной форме представления без инициирования каких-либо исключений или прерываний.
[0068] Согласно другому варианту осуществления изобретения проверка может выполняться путем выявления того, какие двоичные разряды третьего операнда установлены (например, их значение равно единице), и сравнения класса/знака одного или нескольких элементов второго операнда со значением одного из указанных установленных двоичных разрядов. Затем на основе данного сравнения устанавливается значение первого операнда.
1
2
3
[0069] Согласно другому аспекту изобретения, предоставляется команда векторного типа контрольной суммы, схема формата этой команды показана на фиг. 5А (мнемонический код команды - VCKSM). В одном примере команда 500 векторного типа контрольной суммы содержит: поля 502а (например, двоичные разряды 0-7) и 502b (например, разряды 40-47) кода операции, идентифицирующие операцию векторного типа контрольной суммы; поле 504 первого векторного регистра (например, разряды 8-11), используемое для обозначения первого векторного регистра (V); поле 506 второго векторного регистра (например, разряды 12-15), используемое для обозначения второго векторного регистра (V); поле 508 третьего векторного регистра (например, разряды 16-19), используемое для обозначения третьего векторного регистра (V); поле 510 RXB (например, разряды 36-39). В одном примере каждое из перечисленных полей 504-510 является отдельным и независимым от поля (полей) кода операции. Далее, в одном варианте осуществления указанные поля являются отдельными и независимыми друг от друга; однако в других вариантах осуществления два и более поля могут быть объединенными.
[0070] Согласно другому варианту осуществления изобретения поле третьего регистра не включается как явный операнд команды, вместо этого оно является подразумеваемым операндом или входной величиной. Далее, значение, предоставляемое в операнде, может предоставляться другими путями, например, в регистре общего назначения, в запоминающем устройстве, как результат вычисления адреса и т.д.
[0071] Согласно еще одному варианту осуществления, указанный третий операнд, явный или неявный, вообще не предоставляется.
[0072] В одном примере выбранные двоичные разряды (например, первые два разряда) кода операции, обозначенного полем 502а кода операции, указывают длину команды. В этом конкретном примере значение выбранных двоичных разрядов указывает, что длина составляет три полуслова. Далее, формат данной команды - операция типа векторный регистр-и-регистр, с расширенным полем кода операции. Каждое из векторных (V) полей совместно с соответствующим ему разрядом расширения регистра, содержащимся в поле RXB, обозначает векторный регистр. В частности, для векторных регистров, регистр, содержащий операнд, обозначается (адресуется) с использованием, например, четырехразрядного поля из состава поля регистра с добавлением соответствующего ему разряда расширения регистра (RXB) как наиболее значимого разряда.
[0073] При исполнении варианта осуществления команды векторного типа контрольной суммы элементы второго операнда, которые, например, имеют длину в одно слово, последовательно суммируются друг с другом и с выбранным элементом третьего операнда, например, с элементом первого слова третьего операнда. (В другом варианте осуществления суммирование с выбранным элементом третьего операнда является опциональным.) Сумма помещается в выбранную ячейку первого операнда, например, в его первое слово. В другие элементы длиной в слово первого операнда, например, в элементы 0, 2-3 длиной в слово, помещаются нули. Все указанные элементы длиной в слово воспринимаются как беззнаковые целые числа в двоичной форме представления длиной по 32 двоичных разряда. После каждого сложения элемента перенос, например, из двоичного разряда 0 указанной суммы, добавляется, например, к двоичному разряду 31 результата в элементе 1 длиной в слово в составе первого операнда.
[0074] Код условия: код условия не изменяется.
Исключения программные:
- данные, со значением FE кода исключения данных, команда векторного типа, означает, что средство векторной обработки не активировано;
- операция (если средство векторной обработки для архитектуры z/Architecture не инсталлировано);
- транзакционное ограничение.
Замечания по программированию:
1. Третий операнд на момент начала выполнения алгоритма вычисления контрольной суммы должен содержать ноль.
2. Шестнадцатиразрядная контрольная сумма используется, например, в приложениях, использующих протокол TCP/IP (от англ. Transmission Control Protocol/Internet Protocol - протокол управления передачей/межсетевой протокол). По завершении вычисления 32-разрядной контрольной суммы может быть выполнена следующая программа:
VERLLF V2, V1, 16(0) (VERLLF - от англ. Vector Element Rotate Left Logical - команда векторного типа логического циклического сдвига влево -четырехбайтное значение)
VAF V2, V1, V2 (VAF - от англ. Vector Add - команда векторного типа сложения - четырехбайтное значение) Полуслово в элементе 2 содержит шестнадцатиразрядную контрольную сумму.
[0075] Дальнейшие сведения о команде векторного типа контрольной суммы приводятся с использованием фиг. 5Б и 5В. Например, на фиг. 5Б показана схема варианта осуществления процедуры, выполняемой процессором при исполнении команды векторного типа контрольной суммы, на фиг. 5В - схема примера алгоритма исполнения указанной команды векторного типа контрольной суммы.
[0076] Согласно фиг. 5Б, вначале на шаге 530 значение индекса Еу элемента первого операнда (обозначение Оп1) устанавливается равным, например, единице, что указывает первый элемент первого операнда. Аналогично, на шаге 532 значение индекса Ех элемента третьего операнда (обозначение Оп3) устанавливается равным, например, единице, что указывает первый элемент третьего операнда. Затем на шаге 534 значение индекса Ei элемента устанавливается равным нулю, и элемент, соответствующий индексу Ey, т.е. в данном примере - первый элемент, инициализируется значением ноль. Согласно другому варианту осуществления изобретения значения Ех и Ey могут устанавливаться равными любому корректному значению индекса элемента.
[0077] На шаге 536 выполняется сложение с циклическим переносом, при котором On1(Ey)=On1(Ey)+On2(Ei)+On2(Ei+1). В результате значение первого элемента выходного вектора (Оп1) устанавливается равным содержимому этого же элемента плюс значение нулевого элемента второго операнда (Оп2) и значение первого элемента второго операнда. При сложении с циклическим переносом выполняется сложение, и любой возникающий перенос добавляется к сумме с конца, в результате чего образуется новая сумма.
[0078] Согласно другому варианту осуществления изобретения вместо изложенного выше сложения выполняется следующее: вводится и инициализируется значением ноль временная величина-аккумулятор, после чего в один момент времени суммируется один элемент. Согласно другому варианту осуществления изобретения все слова суммируются параллельно, и временный аккумулятор не используется. Также возможны и другие отличия.
[0079] Затем на шаге 538 принимается решение о том, должны ли суммироваться дополнительные элементы второго операнда. Например, проверяется условие
Ei - 2 < (число элементов второго операнда). Если должны еще быть просуммированы элементы второго операнда, то на шаге 540 значение Ei увеличивается, например, на два, и выполнение продолжается шагом 536.
[0080] После суммирования элементов второго операнда результат суммируется с величиной в третьем операнде. Например, на шаге 542 выполняется сложение с циклическим переносом элемента Ey первого операнда (который, в свою очередь, является результатом сложения с циклическим переносом всех элементов второго операнда) со значением элемента Ех третьего операнда (Оп3) [т.е. сложение Оп1(Ey)+Оп3(Ех) с циклическим переносом]. Графическое представление этих операций показано на фиг. 5В.
[0081] Как показано на фиг. 5В, второй операнд 550 содержит набор элементов 552а-552n, и эти элементы последовательно суммируются друг с другом и с элементом 562 в слове 1 третьего операнда 560. Результат суммирования помещается в элемент 1 (572) первого операнда 570. Это показано математически в виде выражения Еу=Ех + сумма Ei, где i принимает значения от 0 до n, а суммирование является сложением с циклическим переносом.
[0082] Выше описан один вариант осуществления команды векторного типа контрольной суммы, которая вычисляет контрольную сумму по элементам векторного регистра вместо выполнения попарной арифметики (англ.: lane arithmetic). В одном варианте осуществления команда векторного типа контрольной суммы вычисляет контрольную сумму путем выполнения сложений с циклическим переносом. В одном примере команда векторного типа контрольной суммы принимает четырехбайтные целочисленные элементы из векторного регистра и складывает их вместе. Любые переносы, вызванные сложением, добавляются обратно к результату. Четырехбайтная сумма добавляется к четырехбайтному элементу из другого операнда и затем сохраняется еще в одном векторном регистре (например, в младшем четырехбайтном элементе векторного регистра с нулями, сохраняемыми в более старших элементах этого векторного регистра).
[0083] Согласно другому варианту осуществления изобретения еще один векторный регистр или другой регистр не используются для хранения значения, вместо них в качестве аккумулятора используется один из оставшихся регистров (т.е. операндов).
[0084] Предоставляемая контрольная сумма может использоваться для обеспечения целостности данных. Контрольная сумма часто применяется к данным и передается по каналу, в котором действует шум, в целях верификации корректности переданных данных. В соответствии с изложенным в настоящей заявке, в данном примере контрольная сумма вычисляется путем суммирования последовательно расположенных четырехбайтных целочисленных значений. Если возникает перенос целочисленной арифметической операции, то перенос и дополнительная единица добавляется к текущему значению суммы.
[0085] Хотя в настоящей заявке описываются контрольные суммы, однако подобный подход может использоваться и для других случаев сложения с циклическим переносом.
1
2
3
5
4
[0086] Следующей командой, предоставляемой согласно одному аспекту изобретения, является команда векторного типа на поле Галуа перемножения, суммирования и накопления, схема примера формата этой команды показана на фиг. 6А (мнемонический код команды - VGFMA). В одном примере команда 600 векторного типа на поле Галуа перемножения, суммирования и накопления содержит: поля 602а (например, двоичные разряды 0-7) и 602b (например, разряды 40-47), идентифицирующие операцию векторного типа на поле Галуа перемножения, суммирования и накопления; поле 604 первого векторного регистра (например, разряды 8-11), используемое для обозначения первого векторного регистра (V); поле 606 второго векторного регистра (например, разряды 12-15), используемое для обозначения второго регистра (V); поле 608 третьего векторного регистра (например, разряды 16-19), используемое для обозначения третьего векторного регистра (V); поле 610 маски (М) (например, разряды 20-23); поле 612 четвертого векторного регистра (например, разряды 32-35), используемое для обозначения четвертого векторного регистра (V); поле 614 RXB (например, разряды 36-39). В одном примере каждое из указанных полей 604-614 является отдельным и независимым от поля (полей) кода операции. Далее, в одном варианте осуществления указанные поля являются отдельными и независимыми друг от друга; однако в других вариантах осуществления два и более полей могут быть объединенными.
[0087] В одном примере выбранные двоичные разряды (например, первые два разряда) кода операции, обозначенного полем 602а кода операции, указывают длину команды. В этом конкретном примере значение выбранных разрядов указывает, что длина составляет три полуслова. Далее, формат данной команды - операция типа векторный регистр-и-регистр, с расширенным полем кода операции. Каждое из векторных (V) полей совместно с соответствующим ему разрядом расширения регистра, содержащимся в поле RXB, обозначает векторный регистр. В частности, для векторных регистров, регистр, содержащий операнд, обозначается (адресуется) с использованием, например, четырехразрядного поля из состава поля регистра с добавлением соответствующего ему разряда расширения регистра (RXB) как наиболее значимого разряда.
5
5
[0088] Поле 610 М содержит, например, четыре двоичных разряда 0-3 и определяет управляющий параметр ES (от англ. Element Size - длина элемента) длины элемента. Управляющий параметр длины элемента определяет длину элементов в операндах два и три векторных регистров; длина элементов первого и четвертого операнда вдвое превышает длину, определенную управляющим параметром ES. Например, значение 0 поля М указывает элементы длиной в байт; 1 указывает полуслово; 2 указывает слово; 3 указывает двойное слово.
[0089] При исполнении одного варианта осуществления команды векторного типа на поле Галуа перемножения, суммирования и накопления каждый элемент второго операнда умножается на поле Галуа (т.е. на конечном поле, обладающем конечным числом элементов) на соответствующий элемент третьего операнда. То есть каждый элемент второго операнда перемножается с соответствующим элементом третьего операнда с использованием умножения без переноса. В одном примере поле Галуа имеет мощность (т.е. число элементов), равную двум. Такое умножение подобно стандартному двоичному умножению, однако вместо суммирования сдвинутого сомножителя используется операция "исключающее ИЛИ". Получившиеся в результате четная-нечетная пары, например, из произведений, длина которых равна удвоенной длине элементов, добавляются операцией "исключающее ИЛИ" друг к другу и добавляются операцией "исключающее ИЛИ" к соответствующему элементу четвертого операнда, например, элементу двойной длины. Результаты помещаются, например, в элемент двойной длины первого операнда.
Код условия: код условия не изменяется.
Исключения программные:
- данные, со значением FE кода исключения данных, команда векторного типа, означает, что средство векторной обработки не активировано;
- операция (если средство векторной обработки для архитектуры z/Architecture не инсталлировано);
- спецификация;
- транзакционное ограничение.
[0090] Согласно другому варианту осуществления изобретения указанная команда может содержать меньшее число операндов или один операнд. Например, вместо четвертого операнда указанное значение, подлежащее добавлению операцией "исключающее ИЛИ", находится в первом операнде, который также будет содержать результаты. Также возможны и другие отличия.
[0091] Дальнейшие сведения о команде векторного типа на поле Галуа перемножения, суммирования и накопления приводятся с использованием фиг. 6Б и 6В. В примере на фиг. 6Б показана схема варианта осуществления процедуры, выполняемой процессором при исполнении команды векторного типа на поле Галуа перемножения, суммирования и накопления, на фиг. 6В - схема примера алгоритма выполнения указанной процедуры.
[0092] Согласно фиг. 6Б, вначале на шаге 630 из второго операнда (обозначение Оп2), третьего операнда (Оп3) и четвертого операнда (Оп4) извлекаются четная-нечетная пары, и на шаге 632 выполняется функция умножения без переноса, суммирования и накопления (англ.: carryless multiply sum accumulate). Например, при вычислениях на поле Галуа, мощность которого равна двум, умножение без переноса представляет собой сдвиг и исключающее ИЛИ, в результате чего любые переносы игнорируются. На шаге 634 результат помещается в первый операнд (Оп1), на шаге 636 принимается решение, имеются ли еще пары, которые нужно извлечь. Если такие пары имеются, то выполнение продолжается с шага 630; в противном случае шагом 638 выполнение завершается. В одном примере на шагах 630-634 входным параметром является длина 631 элемента.
[0093] Дальнейшие сведения о функции 632 умножения без переноса, суммирования и накопления приводятся с использованием фиг. 6В. Как показано, из второго операнда 650 извлекается пара операндов 652а (обозначение Оп2С - старшие разряды операнда 2) и 652b (обозначение Оп2М - младшие разряды операнда 2). Затем из третьего операнда 660 извлекается пара операндов 652а (Оп3С) и 662b (Оп3М), а из четвертого операнда 670 извлекается пара операндов 672а (Оп4С) и 672b (Оп4М). Операнд 652а Оп2С перемножается операцией умножения без переноса с операндом 662а Оп3С, формируется результат 680а С.Аналогично операнд 652b Оп2М перемножается операцией умножения без переноса с операндом 662b Оп3М, формируется результат 680b М. Затем результат 680а С операцией "исключающее ИЛИ" добавляется к результату 680b М, полученный результат добавляется операцией "исключающее ИЛИ" к операнду 672а Оп4С и операнду 672b Оп4М, результаты помещаются в Оп1С 690а и On1M 690b.
[0094] В данной заявке описывается команда векторного типа, которая выполняет операцию умножения без переноса и затем выполняет завершающую операцию "исключающее ИЛИ" для формирования накопленной суммы. Эта методика может использоваться с различными аспектами кодов с обнаружением ошибок и криптографии, при которых выполняются операции на конечном множестве с мощностью, равной двум.
[0095] В одном примере указанная команда для вычисления суммы выполняет операцию умножения без переноса над набором элементов векторного регистра. Затем указанная команда выполняет завершающую операцию "исключающее ИЛИ" над суммой для формирования накопленной суммы. При исполнении указанная команда перемножает на поле Галуа соответствующие элементы второго вектора и третьего вектора, и сдвинутый сомножитель подвергается операции "исключающее ИЛИ". Произведения двойной длины добавляются друг у другу операцией "исключающее ИЛИ", и результат добавляется операцией "исключающее ИЛИ" к соответствующему элементу двойной длины первого вектора. Результат сохраняется в первом векторном регистре. Хотя в приведенном выше описании используются элементы двойной длины, тем не менее могут использоваться элементы длиной в слово с другими длинами элемента. Указанная команда может исполняться с многими различными длинами элементов.
1
2
3
4
[0096] Следующей командой, предоставляемой согласно одному аспекту изобретения, является команда векторного типа формирования маски, схема примера формата этой команды показана на фиг. 7А (мнемонический код команды - VGM). В одном примере команда 700 векторного типа формирования маски содержит: поля 702а (например, двоичные разряды 0-7) и 702b (например, разряды 40-47) кода операции, идентифицирующие операцию векторного типа формирования маски; поле 704 первого векторного регистра (например, разряды 8-11), используемое для обозначения первого векторного регистра (V); первое примыкающее поле 706 (I) (например, разряды 16-24), использующееся для указания первой величины; второе примыкающее поле 708 (I) (например, разряды 24-32), использующееся для указания второй величины; поле 710 маски (М) (например, разряды 32-35); поле 712 RXB (например, разряды 36-39). В одном примере каждое из полей 704-712 является отдельным и независимым от поля (полей) кода операции. Далее, в одном варианте осуществления указанные поля являются отдельными и независимыми друг от друга; однако в других вариантах осуществления два и более полей могут быть объединенными.
[0097] Согласно другому варианту осуществления изобретения первая величина и/или вторая величина могут предоставляться, например, в регистре общего назначения, запоминающем устройстве, элементе векторного регистра (различаясь от элемента к элементу) или по результатам вычисления адреса. Они могут включаться как явный операнд данной команды или как подразумеваемый операнд или входной параметр.
[0098] В одном примере выбранные двоичные разряды (например, первые два разряда) кода операции, обозначенного полем 702а кода операции, указывают длину команды. В этом конкретном примере значение выбранных разрядов указывает, что длина составляет три полуслова. Далее, формат данной команды - операция типа векторный регистр-и-примыкающее поле, с расширенным полем кода операции. Каждое из векторных (V) полей совместно с соответствующим ему разрядом расширения, содержащимся в поле RXB, обозначает векторный регистр. В частности, для векторных регистров, регистр, содержащий операнд, определяется с использованием, например, четырехразрядного поля из состава поля регистра с добавлением соответствующего ему разряда расширения регистра (RXB) как наиболее значимого разряда.
4
4
[0099] Поле М определяет, например, управляющий параметр ES длины элемента. Управляющий параметр длины элемента определяет длину элементов в операндах векторных регистров. В одном примере двоичный разряд 0 поля М определяет байт; двоичный разряд 1 определяет полуслово (например, два байта); двоичный разряд 2 определяет слово (например, четыре байта; используется также термин полное слово); двоичный разряд 3 определяет двойное слово.
2
3
2
3
2
3
2
3
2
3
[00100] При исполнении варианта осуществления команды векторного типа формирования маски для каждого элемента первого операнда формируется двоичная маска. Эта маска содержит двоичные разряды, значения которых установлены равными единице начиная с разряда, определенного, например, беззнаковым целым значением в поле I, и заканчивая разрядом, определенным, например, беззнаковым целым значением в поле I. Значения всех прочих двоичных разрядов устанавливаются равными нулю. В одном примере из полей I и I используется только часть двоичных разрядов, необходимая для представления всех разрядов для заданной длины элемента; прочие разряды игнорируются. Если позиция двоичного разряда в поле I больше, чем позиция двоичного разряда в поле I, то указанная последовательность (набор) двоичных разрядов после разряда с максимальным номером позиции для заданной длины элемента продолжается с начала элемента. Например, полагая, что длина элементов составляет байт: если I=1 и I=6, то в результате формируется маска 7Eh (число в шестнадцатеричной системе счисления) или 01111110b (число в двоичной системе счисления). Однако если I=6 и I=1, то в результате формируется маска 81h или 10000001b.
Код условия: код условия не изменяется.
Исключения программные:
- данные, со значением FE кода исключения данных, команда векторного типа, означает, что средство векторной обработки не активировано;
- операция (если средство векторной обработки для архитектуры z/Architecture не инсталлировано);
- спецификация;
- транзакционное ограничение.
[00101] Дальнейшие сведения об одном варианте осуществления команды векторного типа формирования маски приводятся с использованием фиг. 7Б и 7В. В частности, на фиг. 7Б показана схема варианта осуществления процедуры, связанной с командой векторного типа формирования маски, исполняемой процессором, на фиг. 7В показана схема примера алгоритма, иллюстрирующая один вариант осуществления исполнения команды векторного типа формирования маски.
4
2
3
[00102] Согласно фиг. 7Б, вначале на шаге 720 формируется маска для каждого элемента первого операнда. Этот шаг использует набор входных параметров, в том числе: в качестве начальной позиции 722 - значение, определенное в поле второго операнда; в качестве конечной позиции 724 - значение, определенное в поле третьего операнда; длину 726 элементов, определенную в поле М. Эти входные параметры используются для формирования маски и заполнения позиций выбранного элемента первого операнда (Оп1), например, элемента 0 (шаг 730). Например, элемент 0 первого операнда (Оп1) содержит набор позиций (например, позиций двоичных разрядов), и, начиная с позиции, определенной беззнаковым целым значением в поле I, и заканчивая позицией, определенной беззнаковым целым значением в поле I позициям (например, двоичным разрядам) элемента 0 первого операнда присваивается значение 1. Всем прочим двоичным разрядам присваивается значение 0. Затем на шаге 734 принимается решение, имеются ли еще элементы в первом операнде. Если элементы имеются, то процедура продолжается с шага 720. В противном случае на шаге 736 процедура завершается.
[00103] Формирование маски и заполнение первого операнда графически представлено на фиг. 7В. В соответствии с изображенным, маски для каждого элемента первого операнда формируются (блок 720) с использованием входных параметров (например, 722-726), и результаты формирования этих масок сохраняются в элементах первого операнда 740.
[00104] Выше подробно описана команда для формирования двоичных масок для каждого элемента вектора. В одном варианте осуществления команда принимает начальную позицию двоичного разряда и конечную позицию двоичного разряда и формирует двоичную маску, которая копируется каждому элементу. Команда определяет диапазон двоичных разрядов, и для каждого элемента векторного регистра каждому двоичному разряду в этом диапазоне присваивается значение единица, в то время как всем прочим двоичным разрядам присваивается значение ноль.
[00105] В одном варианте осуществления использование команды для формирования двоичных масок дает преимущества, например, по сравнению с загрузкой двоичных масок из запоминающего устройства, при которой увеличивается нагрузка на кэш-память потоком команд и, в зависимости от числа требуемых масок, может увеличиться задержка в критическом цикле.
1
2
3
4
5
[00106] Следующей командой, предоставляемой согласно одному аспекту изобретения, является команда векторного типа циклического сдвига элемента и вставки по маске, схема примера формата этой команды показана на фиг. 8А (мнемонический код команды - VERIM). В одном примере команда 800 векторного типа циклического сдвига элемента и вставки по маске содержит: поля 802а (например, двоичные разряды 0-7) и 802b (например, разряды 40-47), идентифицирующие операцию векторного типа циклического сдвига элемента и вставки по маске; поле 804 первого векторного регистра (например, разряды 8-11), используемое для обозначения первого векторного регистра (V); поле 806 второго векторного регистра (например, разряды 12-15), используемое для обозначения второго векторного регистра (V); поле 808 третьего векторного регистра (например, разряды 16-19), используемое для обозначения третьего векторного регистра (V); примыкающее поле 812 (I) (например, разряды 24-31), которое содержит, например, беззнаковое целое число в двоичной форме представления, определяющее число двоичных разрядов для циклического сдвига каждого элемента; поле маски 814 (М) (например, разряды 32-35); поле 816 RXB (например, разряды 36-39). В одном примере каждое из указанных полей 804-816 является отдельным и независимым от поля (полей) кода операции. Далее, в одном варианте осуществления указанные поля являются отдельными и независимыми друг от друга; однако в других вариантах осуществления два и более полей могут быть объединенными.
[00107] В одном примере выбранные двоичные разряды (например, первые два разряда) кода операции, обозначенного полем 802а кода операции, указывают длину команды. В этом конкретном примере значение выбранных разрядов указывает, что длина составляет три полуслова. Далее, формат данной команды - операция типа векторный регистр-и-примыкающее поле, с расширенным полем кода операции. Каждое из векторных (V) полей совместно с соответствующим ему разрядом расширения регистра, содержащимся в поле RXB, обозначает векторный регистр. В частности, для векторных регистров, регистр, содержащий операнд, определяется с использованием, например, четырехразрядного поля из состава поля регистра с добавлением соответствующего ему разряда расширения регистра (RXB) как наиболее значимого разряда.
5
5
[00108] Поле М определяет управляющий параметр ES длины элемента. Управляющий параметр длины элемента определяет длину элементов в операндах векторных регистров. В одном примере двоичный разряд 0 поля М определяет байт; двоичный разряд 1 определяет полуслово (например, два байта); двоичный разряд 2 определяет слово (например, четыре байта; используется также термин полное слово); двоичный разряд 3 определяет двойное слово.
[00109] При исполнении варианта осуществления команды векторного типа циклического сдвига элемента и вставки по маске каждый элемент второго операнда циклически сдвигается влево на число двоичных разрядов, определенное четвертым операндом. Каждое двоичное число, оказавшееся при сдвиге за пределами крайнего левого разряда элемента, перемещается в крайний правый двоичный разряд этого элемента. Третий операнд в каждом своем элементе содержит маску. Для каждого двоичного разряда третьего операнда, значение которого равно единице, значение соответствующего двоичного разряда циклически сдвинутых элементов второго операнда замещает значение соответствующего двоичного разряда первого операнда. То есть значение соответствующего двоичного разряда циклически сдвинутых элементов заменяет значение соответствующего двоичного разряда в первом операнде. Для каждого двоичного разряда третьего операнда, значение которого равно нулю, значение соответствующего двоичного разряда первого операнда остается без изменений, За исключением случая, когда первый операнд совпадает со вторым или с третьим операндом, второй и третий операнды остаются без изменений.
[00110] Четвертый операнд представляет собой, например, беззнаковое целое число в двоичной форме представления, определяющее число двоичных разрядов, на которое должен циклически сдвигаться каждый элемент второго операнда. Если значение четвертого операнда превышает число двоичных разрядов в определенной длине элемента, то значение уменьшается по модулю числа двоичных разрядов в элементе.
[00111] В одном примере указанная маска, содержащаяся в третьем операнде, формируется с использованием команды векторного типа формирования маски, описанной в настоящей заявке.
Код условия: код условия не изменяется.
Исключения программные:
- данные, со значением FE кода исключения данных, команда векторного типа, означает, что средство векторной обработки не активировано;
- операция (если средство векторной обработки для архитектуры z/Architecture не инсталлировано);
- спецификация;
- транзакционное ограничение.
Указания по программированию:
1. Для обеспечения полной функциональности команды циклического сдвига и вставки выбранных разрядов может использоваться комбинация команды векторного типа циклического сдвига элемента и вставки по маске с командой векторного типа формирования маски.
4
2. Несмотря на то, что двоичные разряды поля I определены таким образом, чтобы содержать беззнаковое целое число в двоичной форме представления, определяющее число двоичных разрядов, на которое должен циклически сдвигаться влево каждый элемент, может быть закодировано отрицательное число, которое эффективно определяет величину циклического сдвига вправо.
[00112] Дальнейшие сведения об исполнении команды векторного типа циклического сдвига элемента и вставки по маске приводятся с использованием фиг. 8Б и 8В. В частности, на фиг. 8Б показана схема варианта осуществления процедуры, связанной с командой векторного типа циклического сдвига элемента и вставки по маске, исполняемой процессором, на фиг. 8В показана схема примера алгоритма, иллюстрирующая один пример исполнения команды векторного типа циклического сдвига элемента и вставки по маске.
[00113] Согласно фиг. 8Б, вначале на шаге 830 выполняется циклический сдвиг выбранного элемента второго операнда на величину, определенную в четвертом операнде (820). Если значение величины, определенной четвертым операндом, превышает число двоичных разрядов, определенное длиной элемента (822), то значение уменьшается по модулю числа двоичных разрядов в элементе.
[00114] После выполнения циклического сдвига значений двоичных разрядов данного элемента выполняется (шаг 832) объединение по маске. Например, для каждого двоичного разряда третьего операнда 824, значение которого равно 1, значение соответствующего двоичного разряда элемента второго операнда, подвергнутого циклическому сдвигу, замещает соответствующее значение двоичного разряда первого операнда.
[00115] Затем на шаге 834 принимается решение, имеются ли еще элементы, подлежащие циклическому сдвигу. Если элементы, подлежащие циклическому сдвигу, имеются, то обработка продолжается с шага 830. В противном случае на шаге 836 процедура завершается.
[00116] Согласно фиг. 8В, как показано, элементы второго операнда циклически сдвигаются (шаг 830) на основе входных параметров 820 и 822. Затем выполняется объединение по маске (шаг 832) с использованием входного параметра 824. Результат формируется в первом операнде 850.
[00117] Выше подробно описан один пример команды векторного типа циклического сдвига элемента и вставки по маске. Данная команда используется для циклического сдвига элементов в выбранном операнде на определенное число двоичных разрядов. Несмотря на то, что указаны именно двоичные разряды, в другом варианте осуществления элементы могут подвергаться циклическому сдвигу на некоторое число позиций, причем позиции могут быть иными, чем двоичные разряды. Далее, данная команда может использоваться с различными длинами элементов.
[00118] В качестве одного примера такая команда используется для выбора определенных диапазонов двоичных разрядов из чисел для обращений к таблицам.
[00119] В ходе исполнения определенных команд векторного типа или других операций типа "одиночный поток команд, множественный поток данных" могут возникать исключения. Если исключение возникает при выполнении операции типа "одиночный поток команд, множественный поток данных", то обычно неизвестно, какой элемент векторного регистра привел к возникновению исключения. Чтобы выявить, какой элемент или элементы привели к возникновению исключения, обработчик прерываний программного обеспечения должен извлечь каждый элемент и повторно выполнить вычисление в скалярном режиме. Однако, согласно одному аспекту изобретения, когда машина (например, процессор) обрабатывает программное прерывание из-за операции векторного типа, то выдается индекс элемента, указывающий в векторном регистре элемент с наименьшим индексом, приведший к возникновению исключения. Обработчик прерываний программного обеспечения может затем мгновенно перейти к элементу, вызывающему сомнения, и выполнить любые требуемые или желательные действия.
[00120] Например, в одном варианте осуществления, если исключение векторных данных приводит к программному прерыванию, то, например, в реальной ячейке памяти запоминающего устройства (например, в ячейке 147, т.е. 93h) сохраняется код векторного исключения и, например, в реальных ячейках памяти запоминающего устройства (например, в ячейках 144-146, т.е. 90h-92h) сохраняются нулевые значения. Согласно другому варианту осуществления изобретения код векторного исключения также помещается в поле кода исключения данных управляющего регистра операций с плавающей запятой при условии, что значение определенного двоичного разряда (например, разряда 45) обозначенного управляющего регистра (например, управляющего регистра 0) равно единице. Если значение двоичного разряда 45 управляющего регистра 0 равно нулю и значение двоичного разряда 46 управляющего регистра 0 равно единице, то значение кода исключения данных управляющего регистра операций с плавающей запятой и содержимое ячейки памяти 147 (93h) запоминающего устройства непредсказуемы.
[00121] В одном варианте осуществления изобретения код векторного исключения различается для различных типов исключений операций векторного типа с плавающей запятой и указывает, какой именно элемент привел к возникновению исключения. В одном примере, как показано на фиг. 9А, код 900 векторного исключения указывает векторный индекс 902 и код 904 векторного прерывания. В одном примере векторный индекс содержит двоичные разряды 0-3 кода векторного исключения, и значение этого векторного индекса является индексом крайнего левого элемента выбранного векторного регистра, возбудившего исключение. Далее, код векторного прерывания содержится в двоичных разрядах 4-7 кода векторного исключения и имеет следующие значения, например:
0001 Недопустимая операция (по стандарту IEEE)
0010 Деление на ноль (по стандарту IEEE)
0011 Переполнение (по стандарту IEEE)
0100 Нехватка разряда, или потеря значимости, (по стандарту IEEE)
0101 Неточность (по стандарту IEEE)
[00122] Согласно другому варианту осуществления изобретения код векторного исключения содержит только векторный индекс или другой индикатор позиции элемента, который привел к возникновению исключения.
[00123] В одном варианте осуществления изобретения код векторного исключения может устанавливаться набором команд, содержащим, например, следующие команды: команду векторного типа с плавающей запятой сложения (англ.: Vector Floating Point Add); команду векторного типа с плавающей запятой сравнения скалярного (англ.: Vector FP Compare Scalar); команду векторного типа с плавающей запятой сравнения равенство (англ.: Vector Floating Point Compare Equal); команду векторного типа с плавающей запятой сравнения превышение или равенство (англ.: Vector Floating Point Compare High or Equal); команду векторного типа с плавающей запятой преобразования из типа 64-разрядный с фиксированной запятой (англ.: Vector Floating Point Convert From Fixed 64-Bit); команду векторного типа с плавающей запятой преобразования из типа 64-разрядный логический (англ.: Vector Floating Point Convert From Logical 64-Bit); команду векторного типа с плавающей запятой преобразования в тип 64-разрядный с фиксированной запятой (англ.: Vector Floating Point Convert to Fixed 64-Bit); команду векторного типа с плавающей запятой преобразования в тип 64-разрядный логический (англ.: Vector Floating Point Convert to Logical 64-BIt); команду векторного типа с плавающей запятой деления (англ.: Vector Floating Point Divide); команду векторного типа загрузки с плавающей запятой целый (англ.: Vector Load Floating Point Integer); команду векторного типа с плавающей запятой загрузки удлиненный (англ.: Vector Floating Point Load Lengthened); команду векторного типа с плавающей запятой загрузки округленный (англ.: Vector Floating Point Load Rounded); команду векторного типа с плавающей запятой умножения (англ.: Vector Floating Point Multiply); команду векторного типа с плавающей запятой умножения и сложения (англ.: Vector Floating Point Multiply and Add); команду векторного типа с плавающей запятой умножения и вычитания (англ.: Vector Floating Point Multiple and Subtract); команду векторного типа с плавающей запятой квадратный корень (англ.: Vector Floating Point Square Root); команду векторного типа с плавающей запятой вычитания (англ.: Vector Floating Point Subtract), а также другие команды векторного типа с плавающей запятой и/или другие команды.
[00124] Дальнейшие сведения об установке кода векторного исключения приводятся с использованием фиг. 9Б. Согласно варианту осуществления, процессор в вычислительной среде выполняет следующую последовательность действий.
[00125] Согласно фиг. 9Б, вначале на шаге 920 исполняется команда, которая обрабатывает векторный регистр, такая как одна из перечисленных выше или иная команда. Во время исполнения указанной команды возбуждается (шаг 922) условие исключения. В одном примере это условие исключения приводит к прерыванию. На шаге 924 принимается решение, какой элемент векторного регистра привел к возникновению исключения. Например, один или несколько аппаратных узлов указанного процессора, выполняющего вычисления над одним или несколькими элементами векторного регистра, определяют указанное исключение и формируют сигнал. Например, если набор аппаратных узлов в параллельном режиме выполняет вычисление над набором элементов векторного регистра и в ходе обработки одного или нескольких из этих элементов возбуждается исключение, то указанные аппаратный узел или узлы, которые выполняют обработку, при которой было возбуждено исключение, сигнализируют об условии исключения и указывают элемент, который они обрабатывали. В другом варианте осуществления в случае, если элементы вектора обрабатываются последовательно и во время обработки элемента возбуждается исключение, то аппаратное обеспечение будет указывать, с каким элементом в последовательности оно работало в то время, когда возникло исключение.
[00126] На шаге 926 на основе сигнала об исключении устанавливается код векторного исключения. Этот код содержит, например, указание позиции в векторном регистре элемента, который привел к возникновению исключения, а также код прерывания.
[00127] Выше подробно описан код векторного исключения, который обеспечивает эффективную обработку векторных исключений. В одном примере при обработке машиной программного прерывания, вызванного операцией векторного типа, выдается индекс элемента, указывающий в векторном регистре элемент с наименьшим индексом, который привел к возникновению исключения. В качестве характерного примера, если выполняется векторное сложение и имеются по два элемента в векторных регистрах, участвующие в операциях А0 + В0 и A1 + В1, и для А0 + В0, но не для A1 + В1, формируется неточный результат, то значение векторного индекса устанавливается равным нулю и значение кода векторного прерывания устанавливается равным 0101. В другом примере если операция А0 + В0 не возбуждает исключение, a A1 + В1 возбуждает исключение, то значение векторного индекса устанавливается равным единице (значение кода векторного прерывания устанавливается равным 0101). Если обе операции возбуждают исключение, то значение векторного индекса устанавливается равным нулю, поскольку это крайняя левая проиндексированная позиция, и значение кода векторного прерывания устанавливается равным 0101.
[00128] Выше подробно описаны различные команды векторного типа, а также код векторного исключения, который указывает позицию исключения в пределах векторного регистра. В приведенных схемах часть обработки может происходить последовательно; однако в одном или нескольких вариантах осуществления элементы обрабатываются в параллельном режиме, в связи с чем может отсутствовать необходимость в проверке, например, того, имеются ли еще элементы, подлежащие обработке. Также возможны многие другие отличия.
[00129] В других вариантах осуществления дополнительно, например, в регистре общего назначения, в запоминающем устройстве, в элементе векторного регистра (отличном для каждого элемента) или по результатам вычисления адреса может предоставляться содержимое одного или нескольких полей команды. Они могут быть включены как явный операнд команды или как подразумеваемый операнд или как входной параметр. Далее, одна или несколько команд могут использовать меньшее число операндов или входных параметров, и наоборот, один или несколько операндов могут использоваться для нескольких операций или шагов.
[00130] Более того, вместо включения управляющего параметра длины элемента в поле команды этот управляющий параметр длины элемента может предоставляться другими способами, как изложено в настоящей заявке. Дополнительно, длина элемента может обозначаться кодом операции. Например, специфический код операции команды обозначает операцию и длину элементов и т.д.
[00131] В настоящей заявке термины "запоминающее устройство", "главное запоминающее устройство", "пространство памяти", "главная память" используются взаимозаменяемо, если иное не указывается явно или не следует из контекста.
[00132] Специалисту в данной области должно быть понятно, что аспекты изобретения могут быть воплощены в форме системы, способа или компьютерного программного продукта. Соответственно, аспекты изобретения могут быть осуществлены в виде полностью аппаратного обеспечения, полностью программного обеспечения (в том числе, в виде программы, записанной в ПЗУ, резидентного программного обеспечения, микрокода и т.п.) или в виде комбинации аппаратного и программного обеспечения; для обозначения всех этих вариантов осуществления в настоящей заявке могут в общем использоваться термины "схема", "модуль" или "система". Кроме того, аспекты изобретения могут принимать форму компьютерного программного продукта, осуществленного на одной или нескольких машиночитаемых средах, содержащих машиночитаемый программный код.
[00133] Может использоваться любая комбинация одной или нескольких машиночитаемых сред. Машиночитаемой средой может являться машиночитаемая среда хранения данных. Машиночитаемой средой хранения данных может быть, в том числе (но не ограничиваясь): электронная, магнитная, оптическая, электромагнитная, инфракрасная или проводная система, средство или устройство или любая работоспособная комбинация перечисленных сред. Более специфическими примерами машиночитаемых сред хранения данных могут быть, в том числе (но не ограничиваясь): электрическое соединение, содержащее один или несколько проводников; портативная компьютерная дискета (накопитель на гибких дисках); накопитель на жестких дисках; оперативное запоминающее устройство (ОЗУ); ПЗУ; стираемое программируемое постоянное запоминающее устройство (СППЗУ) или флеш-память; оптоволокно; CD-ROM (от англ. Compact Disc Read Only Memory - постоянное запоминающее устройство на компакт-диске); оптическое запоминающее устройство; магнитное запоминающее устройство; любая работоспособная комбинация перечисленных сред. Применительно к настоящей заявке машиночитаемой средой хранения данных может являться любая материальная среда, которая может содержать или хранить программу для использования или коммуникационное соединение с системой, средством или устройством, способным исполнять команды.
[00134] На фиг. 10 в одном примере компьютерный программный продукт 1000 содержит, например, одну или несколько нестираемых машиночитаемых сред 1002 хранения данных. Эта среда (среды) 1002 предназначены для хранения средств или логики 1004 машиночитаемого программного кода для предоставления и улучшения использования одного или нескольких аспектов настоящего изобретения.
[00135] Программный код, хранящийся в машиночитаемой среде, может быть передан с использованием соответствующей среды, содержащей, в том числе (но не ограничиваясь), беспроводную, проводную, кабельную оптоволоконную, радиочастотную и т.п.среду или любую работоспособную комбинацию перечисленных сред.
[00136] Компьютерный программный код для выполнения операций аспектов изобретения может быть написан на одном или любой комбинации нескольких языков программирования, в том числе, на языках объектно-ориентированного программирования, таких как Java, Smalltalk, С++ или подобных, и на обычных языках процедурного программирования, таких как язык "С", ассемблера или подобных им языках программирования. Программный код может выполняться: полностью на компьютере пользователя; частично на компьютере пользователя как автономный программный пакет; частично на компьютере пользователя и частично на удаленном компьютере; полностью на удаленном компьютере или сервере. В приведенном далее сценарии удаленный компьютер может быть соединен с компьютером пользователя через коммуникационную сеть любого типа, в том числе, через локальную вычислительную сеть (ЛВС) или глобальную сеть связи, либо может быть реализовано соединение с внешним компьютером (например, через сеть Интернет при посредничестве поставщика услуг Интернет).
[00137] В настоящей заявке аспекты изобретения описываются с использованием изображений схем алгоритмов и/или структурных схем способов, средств (систем) и компьютерных программных продуктов согласно одному или нескольким вариантам осуществления. Должно быть понятно, что каждая операция на чертежах схем алгоритмов и/или структурных схем, а также комбинации операций на чертежах схем алгоритмов и/или структурных схем могут быть реализованы командами компьютерной программы. Эти команды компьютерной программы могут выполняться процессором универсального компьютера, специализированного компьютера или иными средствами обработки данных с программным управлением, образующими машину (вычислительное устройство), таким образом, что команды, исполняемые процессором компьютера или иными средствами обработки данных с программным управлением, формируют среду для осуществления функций (действий), описанных схемой алгоритма и/или операцией или операциями структурной схемы.
[00138] Указанные команды компьютерной программы могут также храниться в машиночитаемой среде и могут заставлять компьютер, иное средство обработки данных с программным управлением или иные устройства действовать определенным образом, чтобы команды, хранящиеся в машиночитаемой среде, образовывали программное изделие, в том числе, реализующее команды, которые осуществляют функцию или действуют в соответствии со схемой алгоритма, и/или операцию или операции, показанные на структурных схемах.
[00139] Команды компьютерной программы могут также быть загружены в компьютер, иное средство обработки данных с программным управлением или иные устройства для выполнения последовательности операций компьютером, иным средством обработки данных с программным управлением или другими устройствами для организации вычислительного процесса, в результате которого команды, исполняемые на компьютере или ином средстве обработки данных с программным управлением, реализуют процессы для осуществления функции или действия в соответствии со схемой алгоритма и/или операцию или операции, показанные на структурных схемах.
[00140] Схемы алгоритмов и структурные схемы, показанные на рисунках, иллюстрируют архитектуру, функциональность и действие возможных вариантов осуществления систем, методов и компьютерных программных продуктов согласно различным вариантам осуществления. С учетом этого каждая операция (блок) на схемах алгоритмов или структурных схемах может представлять модуль, сегмент или фрагмент кода, содержащий одну или несколько исполнимых команд для осуществления определенной логической функции или функций. Следует также заметить, что в некоторых альтернативных вариантах осуществления функции, указанные в блоках, могут выполняться в иной последовательности, чем показано на прилагаемых чертежах. Например, две операции, показанные следующими одна за другой, могут фактически выполняться по существу одновременно, либо иногда операции могут выполняться в обратном порядке в зависимости от имеющихся функциональных возможностей. Также далее будет показано, что каждая операция на изображениях структурных схем и/или схем алгоритмов и каждая комбинация операций на изображениях структурных схем и/или схем алгоритмов может быть реализована специализированными аппаратными системами, которые выполняют определенные функции или действия, или комбинациями специализированного аппаратного обеспечения и компьютерных команд.
[00141] В дополнение к вышеизложенному, один или несколько аспектов изобретения могут предоставляться, предлагаться, размещаться, администрироваться, обслуживаться и т.п.поставщиком услуг, который предлагает администрирование пользовательских сред. Например, поставщик услуг может создать, поддерживать, обслуживать и т.п. компьютерный код и/или компьютерную инфраструктуру, которая воплощает один или несколько аспектов изобретения для одного или нескольких пользователей. За это поставщик услуг может получать от потребителя плату, например, в соответствии с подпиской на услуги и/или договором об оплате. Кроме того или вместо того, поставщик услуг может получать плату от продажи или рекламы от третьих лиц.
[00142] Согласно одному аспекту, для реализации одного или нескольких аспектов изобретения может использоваться приложение (программное обеспечение). Как один из примеров, реализация приложения содержит, в том числе, создание компьютерной инфраструктуры, позволяющей осуществить один или несколько аспектов изобретения.
[00143] Согласно другому аспекту, вычислительная инфраструктура может быть организована встраиванием объединяющего машиночитаемого кода в вычислительную систему, и их комбинация позволяет осуществить один или несколько аспектов изобретения.
[00144] Согласно еще одному аспекту, может быть предусмотрен порядок объединения вычислительной инфраструктуры, содержащий встраивание машиночитаемого кода в компьютерную систему. Компьютерная система имеет в своем составе машиночитаемую среду, которая содержит один или несколько аспектов изобретения. Указанный код совместно с компьютерной системой позволяют осуществить один или несколько аспектов изобретения.
[00145] Несмотря на то, что выше описаны различные варианты осуществления, они всего лишь являются примерами. Например, содержать в себе и использовать один или несколько аспектов изобретения могут вычислительные среды других архитектур. Далее, могут использоваться векторы других длин, и в команды могут вноситься изменения без отклонения от одного или нескольких аспектов изобретения. Более того, могут использоваться регистры, тип которых отличается от векторного. Дополнительно, в других вариантах осуществления векторный операнд вместо векторного регистра может быть ячейкой памяти. Также возможны и другие отличия.
[00146] Далее, преимущества от одного или нескольких аспектов изобретения могут получить другие типы вычислительных сред. Пример подобной среды - система обработки данных, предназначенная для хранения и/или выполнения программного кода, которая содержит по меньшей мере два процессора, соединенных непосредственно или опосредованно с элементами запоминающего устройства через системную шину. Элементы запоминающего устройства содержат, например: локальное запоминающее устройство, используемое при фактическом выполнении программного кода; устройство массовой памяти (запоминающее устройство большого объема); кэш-память (быстродействующее буферное запоминающее устройство для временного хранения информации с целью повышения быстродействия вычислительной системы), обеспечивающую временное хранение по меньшей мере фрагмента программного кода для сокращения числа обращений к устройству массовой памяти для извлечения кода за интервал времени исполнения.
[00147] К системе либо непосредственно или через промежуточные контроллеры ввода-вывода могут быть подключены устройства ввода-вывода, в том числе (но не ограничиваясь) клавиатура, дисплеи, указательные устройства, запоминающее устройство с прямым доступом, ленточные накопители, CD-ROM, DVD-ROM (от англ. Digital Video Disc Read-Only Memory - постоянное запоминающее устройство на цифровом видеодиске), внешние отключаемые запоминающие устройства и прочие запоминающие устройства. Для соединения системы обработки данных с другими системами обработки данных или удаленными принтерами или запоминающими устройствами через промежуточные приватные или публичные сетевые подключения к системе могут подключаться сетевые адаптеры. Примерами сетевых адаптеров могут служить, в том числе, телефонные модемы, кабельные модемы, платы адаптеров сети Ethernet.
[00148] На фиг. 11 представлены характерные компоненты хост-компьютерной системы 5000 для осуществления одного или нескольких аспектов изобретения. Характерный хост-компьютер 5000 содержит одно или несколько ЦПУ 5001, соединенных линиями передачи данных с запоминающим устройством компьютера (т.е. с центральным запоминающим устройством) 5002, а также с интерфейсами ввода-вывода запоминающих устройств 5011 и сетей 5010 для связи с другими компьютерами или сетями хранения данных (специализированными высокоскоростными сетями, объединяющими устройства хранения данных и серверы) и т.п. ЦПУ 5001 совместимо с архитектурой, обладающей собственным набором команд и функциональными возможностями. ЦПУ 5001 может обладать средством 5003 динамической трансляции адреса для преобразования адресов, использующихся в программах (виртуальных адресов) в реальные адреса запоминающего устройства. Динамическое преобразование адреса обычно содержит буфер 5007 ассоциативной трансляции для кэширования (временного хранения) результатов трансляции, благодаря чему последующие обращения к блоку памяти центрального запоминающего устройства 5002 не приведут к задержке трансляции адреса. Как правило, кэш-память 5009 может быть организована иерархически, т.е. содержать большую по объему часть, доступную двум и более ЦПУ, и меньшую по объему, более быстродействующую (более низкого уровня) часть, служащую буфером между большей частью кэш-памяти и каждым ЦПУ. В некоторых вариантах осуществления кэш-память более низкого уровня разделяется для организации нескольких низкоуровневых пространств кэш-памяти для выборки команд и доступа к данным. Согласно варианту осуществления, команда выбирается из запоминающего устройства 5002 устройством 5004 выборки команд через кэш-память 5009. Указанная команда декодируется в устройстве 5006 декодирования команд и направляется (в некоторых вариантах осуществления - совместно с другими командами) в устройство или устройства 5008 выполнения команд. Как правило, используются несколько устройств 5008 выполнения команд, например, арифметическое устройство, устройство выполнения операций с плавающей запятой, устройство ветвления команд. Команда, исполняемая исполнительным устройством, по мере необходимости обращается к операндам команды, указанным регистрам или запоминающему устройству. Если требуется доступ (загрузка или хранение) к операндам из запоминающего устройства 5002, то доступ контролируется устройством 5005 хранения-загрузки под управлением исполняемой команды. Команды могут исполняться в аппаратных схемах или с помощью внутреннего микрокода (хранящегося в ПЗУ) или комбинацией этих двух способов.
[00149] Как было указано, в состав компьютерной системы входит информация, хранящаяся в локальном (или главном) запоминающем устройстве, а также средства адресации, защиты, ссылок и учета изменений. Некоторые варианты осуществления правил адресации содержат формат адресов, концепцию адресных пространств, различные типы адресов, а также способ, по которому адреса одного типа преобразуются в адреса другого типа. Часть главного запоминающего устройства содержит постоянно выделенные области памяти. Главное запоминающее устройство обеспечивает системе быстродействующее хранение данных с прямой адресацией. И данные, и программы должны быть загружены из устройств ввода в главное запоминающее устройство перед тем, как смогут быть обработаны.
[00150] Главное запоминающее устройство может содержать одно или несколько буферных запоминающих устройств меньшего объема с более быстрым доступом, которые иногда называются устройствами кэш-памяти. Устройство кэш-памяти обычно физически связано с ЦПУ или процессором ввода-вывода. Различия в физическом устройстве и использовании различных типов запоминающих устройств обычно незаметны для программы (за исключением различия в быстродействии).
[00151] Для операций с командами и данными могут использоваться отдельные устройства кэш-памяти. Информация в кэш-памяти содержится в виде непрерывной последовательности байтов в пределах целостного пространства памяти, называемого блоком данных кэш-памяти или строкой данных кэш-памяти (коротко - строкой). Модель может сформировать команду EXTRACT CACHE ATTRIBUTE (получить атрибут кэш-памяти), которая возвращает длину строки кэш-памяти в байтах. Также модель может сформировать команды PREFETCH DATA и PREFETCH DATA RELATIVE LONG, которые влияют на выборку данных из запоминающего устройства в кэш-память данных или команд или на удаление данных из кэш-памяти.
[00152] Пространство памяти запоминающего устройства представляется в виде протяженных горизонтально ориентированных строк двоичных разрядов. Для большинства операций доступ к запоминающему устройству выполняется в последовательности слева направо. Строки двоичных разрядов подразделяются на группы по восемь бит. Группа из восьми бит называется байтом, байт является основным образующим элементом всех форматов представления информации. Каждое местоположение байта в запоминающем устройстве обозначается уникальным неотрицательным целым числом, называемым адресом местоположения данного байта или коротко - адресом. Адресация ячеек памяти - последовательная, т.е. адреса соседних ячеек хранения байтов отличаются на единицу. Адреса начинаются с нуля для крайней левой ячейки и возрастают слева направо. Адреса - беззнаковые целые числа в двоичной форме представления длиной 24, 31 или 64 двоичных разряда.
[00153] Информация передается между запоминающим устройством и ЦПУ или подсистемой канала передачи данных по одному байту или по группе байтов в один момент времени. Если иное не оговорено, то, например, в архитектуре z/Architecture группа байтов в запоминающем устройстве адресуется по крайнему левому байту группы. Число байтов в группе либо определено заранее, либо однозначно указывается выполняемой операцией. В операциях с ЦПУ группа байтов называется полем. Внутри каждой группы байтов, например, в архитектуре z/Architecture, биты нумеруются в направлении слева направо. В архитектуре z/Architecture крайние левые биты иногда называют старшими, крайние правые биты - младшими. Следует учитывать, что номера битов не являются адресами запоминающего устройства, адресуются только байты. Для обращения к отдельным битам из состава байта осуществляется доступ к целому байту запоминающего устройства. Биты в байте нумеруются слева направо от нуля до семи (например, в архитектуре z/Architecture). Примеры нумерации битов в пределах адреса: 8-31 или 40-63 для 24-разрядного адреса; 1-31 или 33-63 для 31-разрядного адреса; 0-63 для 64-разрядного адреса. В любом другом формате групп байтов фиксированной длины разряды, образующие формат, нумеруются последовательно, начиная с нуля. В целях обнаружения шибок и, предпочтительно, их коррекции, с каждым байтом или с каждой группой байтов может передаваться один или несколько дополнительных проверочных битов. Такие проверочные биты формируются внутри вычислительной системы автоматически, они не могут непосредственно контролироваться программой. Емкость запоминающего устройства выражается числом байтов. Если длина поля запоминающего устройства определяется кодом операции, входящим в состав команды, то считается, что поле имеет фиксированную длину, которая может составлять один, два, четыре, восемь или 16 байтов. В некоторых командах могут использоваться поля большей длины. Если длина поля запоминающего устройства не определена заранее, а явно указывается, то говорят, что поле имеет переменную длину. Длина операндов с переменной длиной может изменяться с инкрементом в один байт (или, для некоторых команд, с инкрементом, кратным двум байтам или кратным другому числу байтов). Когда информация помещается в запоминающее устройство, то заменяется содержимое только тех ячеек хранения байтов запоминающего устройства, которые входят в состав поля-получателя, причем это справедливо даже в том случае, когда ширина физического канала передачи данных к запоминающему устройству превышает длину сохраняемого поля.
[00154] Определенные элементы информации должны храниться в целостном пространстве памяти запоминающего устройства. Пространство памяти считается целостным применительно к элементу информации, если его адрес кратен длине элемента информации в байтах. Предусмотрены специальные названия для полей из двух, четырех, восьми и шестнадцати байтов. Полусловом называется элемент памяти из двух следующих друг за другом байтов, полуслово является основным составляющим элементом команд. Словом называется элемент памяти из четырех следующих друг за другом байтов. Двойным словом называется элемент памяти из восьми следующих друг за другом байтов. Четверным словом называется элемент памяти из шестнадцати следующих друг за другом байтов. Если адрес запоминающего устройства указывает на полуслово, слово, двойное слово или четверное слово, то в двоичном представлении адрес содержит справа соответственно один, два, три или четыре бита, равных нулю. Команды занимают двухбайтные целостные элементы памяти. Операнды большинства команд не имеют ограничений по размещению в памяти.
[00155] В устройствах, в которых используется раздельное кэширование команд и данных (операндов), может возникать значительная задержка, если программа выполняет запись в строку кэш-памяти, из которой производится последовательная выборка команд, причем вне зависимости от того, изменяются ли эти команды в результате записи.
[00156] Согласно варианту осуществления, настоящее изобретение может быть осуществлено программным обеспечением, называемым также лицензионным внутренним кодом, содержимым ПЗУ, микрокодом, милликодом, пикокодом и т.п., причем каждый из терминов может относиться к одному или нескольким аспектам изобретения. На фиг. 11 процессор 5001 хост-компьютерной системы 5000 может обращаться к коду программного обеспечения, содержащему один или несколько аспектов изобретения и хранящемуся в долговременных запоминающих устройствах 5011, таких как привод CD-ROM, привод ленточного накопителя, накопитель на жестких дисках. Программный код может располагаться на любой из множества известных машиночитаемых сред, предназначенных для использования в системе обработки данных, таких как гибкий диск, накопитель на жестких дисках или CD-ROM. Код может распространяться на подобной машиночитаемой среде или поставляться пользователям из запоминающего устройства 5002 компьютера или из запоминающего устройства одного компьютера через сеть 5010 другим компьютерным системам для их пользователей.
[00157] Код программного обеспечения содержит операционную систему, которая управляет функционированием и взаимодействием различных компонентов компьютера и одной или нескольких прикладных программ. Программный код обычно передается из долговременного запоминающего устройства 5011 в относительно более быстродействующее запоминающее устройство 5002 компьютера, из которого код доступен процессору 5001 для обработки. Приемы и способы размещения кода программного обеспечения в пространстве памяти запоминающего устройства, на физической машиночитаемой среде и/или передача кода программного обеспечения через сети передачи данных достаточно хорошо известны и в настоящей заявке далее обсуждаться не будут. Программный код, созданный и размещенный на материальном носителе, в том числе (но не ограничиваясь) на электронных модулях памяти (ОЗУ), запоминающих устройствах флеш-памяти, CD-ROM, DVD-ROM, магнитной ленте и т.п., часто называют компьютерным программным продуктом. Информация со среды-носителя компьютерного программного продукта обычно считывается схемой обработки предпочтительно в компьютерной системе с целью выполнения программного кода схемой обработки.
[00158] На фиг. 12 показана схема примера рабочей станции или аппаратной части сервера, в которых могут быть осуществлены один или несколько аспектов изобретения. На фиг. 12 система 5020 содержит типичную основную компьютерную систему 5021, например, персональный компьютер, рабочую станцию или сервер, в состав которой, в свою очередь, могут входить периферийные устройства. Основная компьютерная система 5021 содержит один или несколько процессоров 5026 и шину передачи данных, используемую для подключения и осуществления соединения между процессором или процессорами 5026 и другими компонентами системы 5021 по хорошо известной методике. Шина соединяет процессор 5026 с запоминающим устройством 5025 и запоминающим устройством 5027 длительного хранения, которое может содержать, например, дисковый накопитель (в свою очередь содержащий, например, любые магнитные среды хранения данных, CD-ROM, DVD-ROM или устройства флеш-памяти) или ленточный накопитель. Система 5021 может также содержать адаптер интерфейса пользователя, который соединяет микропроцессор 5026 через шину с одним или несколькими интерфейсными устройствами, такими как клавиатура 5024, мышь 5023, принтер или сканер 5030 и/или с устройствами интерфейса пользователя других типов, такими как сенсорный экран, устройство цифрового координатного ввода планшетного типа и т.п. Шина также обеспечивает подключение устройства 5022 отображения, такого как жидкокристаллический экран или монитор, к микропроцессору 5026 через адаптер дисплея.
[00159] Система 5021 может обмениваться данными с другими компьютерами или сетями компьютеров с помощью сетевого адаптера, способного осуществлять соединение 5028 с сетью 5029 передачи данных. Примерами сетевых адаптеров являются адаптеры сетей типа Token ring (маркерное кольцо) и Ethernet, а также модемы. Система 5021 может обмениваться данными с использованием беспроводного интерфейса, такого как адаптер CDPD (от англ. Cellular Digital Packet Data - цифровая пакетная передача данных по сети сотовой связи). Система 5021 может быть соединена с другими компьютерами в ЛВС или глобальную вычислительную сеть, либо система 5021 может выступать в качестве клиента в системе клиент-сервер вместе с другим компьютером и т.д. Все подобные конфигурации наряду с соответствующим коммуникационным аппаратным и программным обеспечением достаточно хорошо известны.
[00160] На фиг. 13 показана схема сети 5040 обработки данных, с помощью которой могут быть осуществлены один или несколько аспектов изобретения. Сеть 5040 обработки данных может содержать набор индивидуальных сетей, таких как беспроводные и проводные сети, в состав каждой из которых может входить множество индивидуальных рабочих станций 5041, 5042, 5043, 5044. Кроме того, специалисты в данной области техники должны понимать, что может быть задействована одна или несколько ЛВС, причем ЛВС могут содержать набор рабочих станций, соединенных с хост-процессором.
[00161] На фиг. 13 сети могут также содержать компьютеры-мэйнфреймы или серверы, такие как компьютер-шлюз (клиентский сервер 5046) или сервер приложений (удаленный сервер 5048, который может обращаться к хранилищу данных и к которому может также осуществляться доступ непосредственно с рабочей станции 5045). Компьютер-шлюз 5046 служит точной доступа в каждую индивидуальную сеть. Шлюз требуется при переходе от одного сетевого протокола на другой. Компьютер-шлюз 5046 предпочтительно может быть подключен к другой сети, например, к сети 5047 Интернет с помощью канала передачи данных. Компьютер-шлюз 5046 также может быть непосредственно соединен с одной или несколькими рабочими станциями 5041, 5042, 5043, 5044 с использованием канала передачи данных. Компьютер-шлюз может быть реализован на основе сервера IBM eServer™ System z, предлагаемого корпорацией International Business Machines Corporation.
[00162] На фиг. 12 и 13 процессор 5026 системы 5020 может обращаться к коду программного обеспечения, в котором могут быть осуществлены один или несколько аспектов настоящего изобретения и который располагается на запоминающем устройстве 5027 долговременного хранения, таком как привод CD-ROM или накопитель на жестких дисках. Код программного обеспечения для его использования системой обработки данных может располагаться на любой из множества известных машиночитаемых сред, таких как гибкий диск, накопитель на магнитных дисках или CD-ROM. Код может предоставляться на такой машиночитаемой среде, или машиночитаемом носителе данных, или может предоставляться пользователям 5050, 5051 компьютерным системам по сети передачи данных из запоминающих устройств другой компьютерной системы.
[00163] В другом варианте осуществления код программного обеспечения может располагаться в запоминающем устройстве 5025, и процессор 5026 может обращаться к этому коду по шине процессора. Такой код программного обеспечения содержит операционную систему, которая управляет функционированием и взаимодействием различных компонентов компьютера и одной или нескольких прикладных программ 5032. Программный код обычно передается из запоминающего устройства 5027 в относительно более быстродействующее запоминающее устройство 5025 компьютера, из которого код доступен процессору 5026 для обработки. Приемы и способы размещения кода программного обеспечения в пространстве памяти запоминающего устройства, на физической машиночитаемой среде и/или передача кода программного обеспечения через сети передачи данных достаточно хорошо известны и в настоящей заявке далее обсуждаться не будут. Программный код, созданный и размещенный на материальном носителе, в том числе (но не ограничиваясь) на электронных модулях памяти (ОЗУ), запоминающих устройствах флеш-памяти, CD-ROM, DVD-ROM, магнитной ленте и т.п. часто называют компьютерным программным продуктом. Информация со среды-носителя компьютерного программного продукта обычно считывается схемой обработки, предпочтительно, в компьютерной системе с целью выполнения схемой обработки.
[00164] Процессору наиболее доступна кэш-память низшего уровня (первого уровня; обозначение первого уровня - L1), которая обычно обладает наибольшим быстродействием и меньшим объемом по сравнению с процессорной кэш-памятью других уровней. Уровень основного запоминающего устройства считается наивысшим (уровень 3, обозначение L3, если всего предусмотрено три уровня). Кэш-память низшего уровня часто разделяется на кэш-память команд I-кэш (от англ. Instructions cache - кэш-память команд) для хранения команд, предназначенных для исполнения, и кэш-память данных D-кэш (от англ. Data cache - кэш-память данных), предназначенную для хранения операндов.
[00165] На фиг. 14 показан пример осуществления процессора 5026. Как правило, для буферизации блоков информации запоминающего устройства используется одноуровневая или многоуровневая кэш-память 5053, что позволяет увеличить производительность процессора. Кэш-память 5053 представляет собой быстродействующий буфер, хранящий строки данных основного запоминающего устройства, которые, вероятно, должны использоваться в будущем. Как правило, длина строк данных в кэш-памяти составляет 64, 128 или 256 байтов. Часто применяются отдельные функциональные узлы кэш-памяти для буферизации команд и данных. Для поддержания когерентности содержимого кэш-памяти, т.е. для синхронизации копий строк данных в основном запоминающем устройстве и в кэш-памяти, часто применяются различные хорошо известные снуп-алгоритмы (от англ. Snoop algorithm, специальный алгоритм поиска необходимых данных в кэш-памяти). Основное запоминающее устройство 5025 вычислительной системы часто также рассматривается как кэш-память. В вычислительной системе с четырьмя уровнями кэш-памяти 5053 основное запоминающее устройство 5025 иногда рассматривается как кэш-память пятого уровня (L5), поскольку оно обычно обладает большим быстродействием по сравнению с быстродействием большинства доступных вычислительной системе энергонезависимых запоминающих устройств - запоминающих устройств с прямым доступом, ленточных запоминающих устройств с последовательным доступом и т.п. и хранит только часть данных указанных устройств. Основное запоминающее устройство 5025 "кэширует" (буферизирует) страницы данных, которые загружаются и выгружаются из него операционной системой.
[00166] Программный счетчик (счетчик команд) 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 результата команды ветвления.
[00167] Как правило, для выборки команд по указанию процессора 5026 применяется устройство 5055 выборки команд. Устройство выборки команд выбирает команду в порядке следования либо команду, на которую указывает команда ветвления, либо по указанию о переключении задачи - очередную команду программы. В современных устройствах выборки команд часто применяются упреждающие методы для спекулятивной выборки команд, основанные на гипотезе о том, что заблаговременно выбранные команды могут потребоваться в будущем. Например, устройство выборки может загрузить 16 байтов команд, в число которых входят следующая по очереди команда и, кроме того, байты команд, следующих за ней.
[00168] Затем выбранные команды исполняются процессором 5026. Согласно варианту осуществления, выбранная команда (команды) передаются на устройство 5056 диспетчеризации. Устройство диспетчеризации декодирует команду (команды) и передает информацию о декодированной команде (командах) далее на устройства 5057, 5058, 5060. Исполнительный блок 5057, как правило, принимает информацию о декодированных арифметических операциях от устройства 5055 выборки команд и выполняет арифметические операции над операндами согласно коду операции команды. Операнды передаются в исполнительное устройство 5057 предпочтительно либо из запоминающего устройства 5025, либо из регистров 5059, либо извлекаются из внутреннего поля исполняемой команды. Результат исполнения команды сохраняется либо в запоминающем устройстве 5025, либо в регистрах 5059, либо в ином аппаратном обеспечении вычислительной системы (в управляющих регистрах, регистрах ССП и т.п.).
[00169] Как правило, процессор 5026 снабжен одним или несколькими устройствами 5057, 5058, 5060, предназначенными для выполнения указанной командой операции. На схеме, показанной на фиг. 15А, исполнительное устройство 5057 может обмениваться информацией с регистрами общего назначения 5059, устройством 5056 декодирования и диспетчеризации, устройством 5060 загрузки-хранения и другими устройствами 5065 процессора с помощью интерфейсной логики 5071. В исполнительном устройстве 5057 могут применяться различные схемы регистров 5067, 5068, 5069 для временного хранения информации, предназначенной для обработки арифметическо-логическим устройством (АЛУ) 5066. АЛУ выполняет арифметические операции, такие как сложение, вычитание, умножение и деление, а также логические операции, такие как конъюнкция, сложение по модулю 2, сдвиг и циклический сдвиг. АЛУ предпочтительно поддерживает специализированные операции, зависящие от особенностей архитектуры. Прочие схемы 5072 могут обеспечивать другие функции, в том числе, например, коды условий и логику поддержки восстановления. Как правило, результат операции, выполненной АЛУ, сохраняется в схеме 5070 регистра вывода, которая может передавать указанный результат набору других функций обработки. Существует множество схем построения процессорных устройств, и настоящее описание предназначено исключительно для пояснения одного из вариантов осуществления.
[00170] Например, команда арифметического сложения (команда ADD) может исполняться в исполнительном устройстве 5057, позволяющем выполнять арифметические и логические операции, в то время как, например, команды с плавающей запятой могут исполняться в исполнительном устройстве команд с плавающей запятой, обладающем соответствующими возможностями. Исполнительное устройство предпочтительно работает с операндами, идентифицируемыми по команде, т.е. по выполняемой функции над операндами, определяемой кодом операции. Например, команда ADD может исполняться исполняющим устройством 5057 над операндами, располагающимися в двух регистрах 5059, идентифицируемых по входящим в состав команды полям регистров.
[00171] Исполнительное устройство 5057 выполняет арифметическое сложение двух операндов и сохраняет результат операции в третьем операнде, причем указанный третий операнд может располагаться в третьем регистре или в одном из регистров, в которых располагались исходные операнды. Исполнительное устройство предпочтительно использует АЛУ 5066, которое способно выполнять различные логические функции, такие как сдвиг, циклический сдвиг, конъюнкцию, дизъюнкцию, сложение по модулю 2, а также различные арифметические операции, в том числе сложение, вычитание, умножение, деление. Некоторые разновидности АЛУ 5066 проектируются для скалярных операций, а некоторые - для операций с плавающей запятой. В зависимости от архитектуры данные могут представляться в обратном порядке следования байтов (т.е. наименее значимому байту соответствует наибольший адрес) или в прямом порядке следования байтов (т.е. наименее значимому байту соответствует наименьший адрес). В архитектуре IBM z/Architecture для представления данных используется обратный порядок следования байтов. Числа со знаком зависимости от архитектуры могут храниться в виде знака и значения числа, в виде дополнения числа до единицы или дополнения до двух. Представление чисел в виде дополнения до двух обладает преимуществом, поскольку в этом случае в АЛУ не требуется предусматривать отдельную функцию вычитания: для положительных и отрицательных чисел, представленных в форме дополнения до двух, требуется только операция сложения. Числа обычно описываются в сокращенной форме, как блоки длиной, например, 4 килобайта: 12-разрядное поле определяет адрес блока длиной 4096 байтов.
[00172] Как показано на фиг. 15Б, информация о команде ветвления при исполнении такой команды обычно передается в устройство 5058 ветвления, которое часто использует алгоритм предсказания ветвления, такой как таблица 5082 истории ветвления, для предсказания результата ветвления еще до того, как будут завершены другие условные операции. В этом случае ветвь алгоритма - возможный исход текущей команды ветвления будет загружена и спекулятивно выполнена до того, как будет завершено выполнение условных операций. Когда выполнение условных операций завершится, то спекулятивно исполненные команды ветви алгоритма либо будут использованы, либо будут отброшены в зависимости от условий операции принятия решения и результатов спекулятивно выполненных операций. Типичная команда ветвления может проверять коды условий, и если коды условий удовлетворяют требованию ветви команды ветвления, то переходить по адресу соответствующей ветви. Адрес перехода может быть рассчитан на основе различных чисел, в том числе, например, содержащихся в полях регистров или во внутренних полях команды. Устройство 5058 ветвления может использовать АЛУ 5074, содержащее набор схем 5075, 5076, 5077 входных регистров и схему 5080 выходного регистра. Устройство 5058 ветвления может обмениваться информацией с регистрами 5059 общего назначения, устройством 5056 декодирования и диспетчеризации или, например, другими схемами 5073.
[00173] Исполнение группы команд может быть прервано по ряду причин, в том числе, например: по команде смены задачи от операционной системы; при возникновении программного исключения или ошибки, вызывающих переключение задач; по сигналу прерывания ввода-вывода, приводящему к переключению задач; при многопоточной активности многих программ (в многопоточной среде). Операция переключения задач предпочтительно сохраняет информацию состояния о программе, выполнявшейся до настоящего момента времени, после чего загружает информацию о состоянии другой запускаемой программы. Информация о состоянии может храниться, например, в регистрах аппаратного обеспечения либо в запоминающем устройстве. Информация о состоянии предпочтительно содержит: значение программного счетчика, указывающее на следующую подлежащую исполнению команду; коды условий; информацию о трансляции пространства памяти; содержимое собственных регистров вычислительной системы. Переключение задач может выполняться аппаратными схемами, прикладными программами, программами операционной системы или кодом в ПЗУ (микрокодом, пикокодом или лицензированным внутренним кодом) по отдельности или совместно.
[00174] Процессор обращается к операндам в соответствии с методами, определенными командой. Команда может предоставить в качестве операнда значение, содержащееся в части команды, может предоставить одно или несколько полей регистров, явно указывающих на регистры общего назначения или на специальные регистры (например, на регистры с плавающей запятой). Команда может косвенно указывать на регистры, идентифицируемые в соответствии с кодом операции как операнды. Команда может использовать в качестве операндов ячейки памяти. На местоположение операнда в пространстве памяти может указывать содержимое регистра, поля из состава команды или комбинация данных в регистрах и в поле команды, как, например, это реализовано в функционале длинного размещения в архитектуре z/Architecture, в котором команда определяет, например, базовый регистр, регистр индекса и поле внутри команды (поле смещения), объединенное содержимое которых даст адрес операнда в запоминающем устройстве. Здесь подразумевается местоположение в главном запоминающем устройстве, если явно не оговорено иное.
[00175] Как показано на фиг. 15В, процессор обращается к запоминающему устройству, используя устройство 5060 загрузки-хранения. Устройство 5060 загрузки-хранения может выполнять операцию ввода путем получения адреса требуемого операнда в запоминающем устройстве 5053 и загрузки операнда в регистр 5059 или другую ячейку запоминающего устройства 5053 либо может выполнять операцию сохранения путем получения адреса требуемого операнда в запоминающем устройстве 5053 и записи данных, полученных из регистра 5059 или другой ячейки запоминающего устройства 5053, в соответствующую ячейку запоминающего устройства 5053. Устройство 5060 загрузки-хранения может действовать спекулятивно и может обращаться к запоминающему устройству в последовательности, не соответствующей той, которая определяется порядком следования команд. Однако устройство 5060 загрузки-хранения должно предоставлять данные таким образом, чтобы команды исполнялись в установленном программой порядке. Устройство 5060 загрузки-хранения может обмениваться данными с регистрами 5059 общего назначения, устройством декодирования и диспетчеризации 5056, интерфейсом 5053 кэш-память -запоминающее устройство или другими функциональными узлами 5083 и содержать в своем составе различные схемы регистров, АЛУ 5085 и управляющую логику 5090 для вычисления адресов хранения и формирования конвейерной последовательности данных для обеспечения правильной очередности исполнения команд. Некоторые операции могут выполняться в порядке, отличном от установленного, однако при этом устройство выборки-хранения предоставляет функционал, обеспечивающий представление программе указанных операций, выполненных в порядке, отличном от установленного, будто бы выполненными в установленном порядке, что хорошо известно в данной области техники.
[00176] Для обозначения адресов, которые "видит" прикладная программа, предпочтительно используется термин "виртуальные адреса". Для обозначения виртуальных адресов иногда используются термины "логические адреса" и "эффективные адреса". Указанные виртуальные адреса виртуальны в том смысле, что они преобразуются в адресное пространство физической памяти с использованием одной из множества технологий трансляции динамических адресов, в том числе (но не ограничиваясь) простым добавлением значения смещения как префикса к виртуальному адресу, преобразованием виртуальных адресов в соответствии с одной или несколькими таблицами трансляции, причем таблицы трансляции предпочтительно состоят по меньшей мере из отдельной таблицы сегментов и отдельной таблицы страниц или из комбинации этих таблиц, предпочтительно такой, что таблица сегментов содержит запись, указывающую на таблицу страниц. В архитектуре z/Architecture предусмотрена иерархия трансляции, в том числе, таблица первой области, таблица второй области, таблица третьей области, таблица сегментов и, опционально, таблица страниц. Производительность трансляции адресов часто повышается при использовании буфера быстрого преобразования адреса, который содержит записи, отображающие виртуальные адреса на адреса ячеек физической памяти. Записи создаются, когда процедура динамической трансляции адреса транслирует виртуальный адрес с использованием таблиц трансляции. При последующем обращении по виртуальному адресу вместо последовательных обращений к медленной таблице преобразования адреса может использоваться запись в буфере быстрого преобразования адреса. Содержимое буфера быстрого преобразования адреса может поддерживаться различными алгоритмами замены, в том числе, алгоритмом удаления дольше всех неиспользовавшихся элементов.
[00177] В многопроцессорной системе каждый процессор отвечает за взаимное блокирование совместно используемых ресурсов, таких как устройства ввода-вывода, кэш-память, буфер быстрого преобразования адреса, запоминающее устройство, что необходимо для обеспечения когерентности информации. Как правило, для поддержания когерентности содержимого кэш-памяти используются снуп-технологии. В снуп-среде для упрощения использования каждая строка кэш-памяти может быть помечена как находящаяся в одном из состояний совместного использования, в состоянии эксклюзивного использования, в измененном состоянии, в недостоверном состоянии и т.п.

[00178] Устройства 5054 ввода-вывода (см. фиг. 14) дают возможность процессору обмениваться данными с периферийными устройствами, например, с такими как ленточный накопитель, дисковый накопитель, принтеры, дисплеи, сетевое окружение. Устройства ввода-вывода часто представляются компьютерной программе программами-драйверами. В компьютерах-мейнфреймах, таких как System z корпорации IBM, адаптеры каналов и адаптеры открытой системы являются устройствами ввода-вывода, которые обеспечивают связь операционной системы с периферийными устройствами.
[00179] Далее, преимущества от одного или нескольких аспектов изобретения могут получать вычислительные среды других типов. Например, вычислительная среда может содержать эмулятор (например, программное обеспечение или иной механизм эмуляции), с помощью которого имитируется определенная архитектура (в том числе, например, имитируется исполнение команд, базовые функции, такие как трансляция адресов, а также соответствующие регистры) или ее частная разновидность (например, компьютерная система, оснащенная процессором и запоминающим устройством). В такой среде в одной или нескольких функциях эмулятора могут использоваться один или несколько аспектов настоящего изобретения даже в случае, если компьютер, на котором осуществляется эмуляция, построен по иной архитектуре, отличной от той, функциональные возможности которой эмулируются. Например, в режиме эмуляции декодируется некоторая эмулируемая команда или операция, и формируется соответствующая функция эмуляции для реализации указанной команды или операции.
[00180] В эмуляционной среде хост-компьютер, например, содержит: запоминающее устройство для хранения команд и данных; устройство выборки команд для извлечения команд из запоминающего устройства и, опционально, для локальной буферизации извлеченной команды; устройство декодирования команд для приема извлеченных из запоминающего устройства команд и определения типа каждой такой команды; устройство исполнения команд, исполняющее команды. Исполнение может содержать: загрузку данных из запоминающего устройства в регистр; сохранение данных в обратном направлении из регистра в запоминающее устройство; выполнение арифметической или логической операции, тип которой определяется устройством декодирования команд. В одном из примеров каждое из устройств реализуется программно, с помощью программного обеспечения. Например, операции, которые должны выполняться устройствами, выполняются в виде одной или нескольких подпрограмм внутри программы-эмулятора.

[00181] В частности, команды, присущие архитектуре компьютеров-мейнфреймов, часто используются программистами (в настоящее время, как правило, пользующимися языком программирования "С") через приложения-компиляторы. Указанные команды, хранящиеся в машиночитаемой среде, могут исполняться в собственной вычислительной среде на сервере, построенном по архитектуре корпорации IBM z/Architecture, или же на вычислительных машинах, построенных по другим архитектурам. Эти команды могут эмулироваться на существующих и на будущих серверах-мейнфреймах корпорации IBM и на других вычислительных машинах IBM (например, на серверах типа Power Systems и System х). Указанные команды могут исполняться на вычислительных машинах, работающих под управлением операционной системы Linux и использующих аппаратное обеспечение производства предприятий IBM, Intel, AMD™ и др. Помимо указанного аппаратного обеспечения в рамках архитектуры z/Architecture и операционной системы Linux, могут применяться вычислительные машины с эмуляторами Hercules (программный эмулятор мейнфреймов IBM и совместимых), UMX или FSI (Fundamental Software, Inc.), при этом выполнение обычно осуществляется в режиме эмуляции. В режиме эмуляции программа-эмулятор выполняется собственным (физическим) процессором вычислительной системы и имитирует архитектуру эмулируемого процессора.
[00182] Как правило, собственный процессор хост-вычислительной системы выполняет программное обеспечение-эмулятор, в состав которого входят программы из ПЗУ или собственная операционная система, необходимые для имитации эмулируемого процессора. Для эмулируемой архитектуры программное обеспечение-эмулятор отвечает за выборку и исполнение команд. Программное обеспечение-эмулятор имитирует программный счетчик для отслеживания границ команд. Программное обеспечение-эмулятор может в один момент времени выбирать одну или несколько команд в формате эмулируемой вычислительной машины и преобразовывать указанные одну или несколько команд в соответствующую группу команд в собственном формате хост-вычислительной машины для исполнения собственным процессором. Команды эмулируемой процессорной архитектуры могут кэшироваться (т.е. буферизироваться с помощью устройства кэш-памяти), благодаря чему преобразование может выполняться более быстро. Тем не менее, программное обеспечение-эмулятор должно поддерживать правила архитектуры эмулируемой процессорной архитектуры, чтобы обеспечить корректность выполнения операционной системы и приложений, предназначенных для эмулируемого процессора. Более того, программное обеспечение-эмулятор должно предоставлять вычислительные ресурсы, понятные для эмулируемой процессорной архитектуры, в том числе (но не ограничиваясь) управляющие регистры, регистры общего назначения, регистры с плавающей запятой, функцию динамической трансляции адреса, включая, например, таблицы сегментов и таблицы страниц, механизмы прерываний, механизмы переключения задач, часы времени суток, интерфейсы к подсистемам ввода-вывода, благодаря чему операционная система или прикладная программа, разработанные для выполнения на эмулируемом процессоре, смогут быть выполнены на собственном (физическом) процессоре, оснащенном программным обеспечением-эмулятором.
[00183] Конкретная эмулируемая команда декодируется, и для исполнения команды вызывается соответствующая подпрограмма. Для имитации эмулируемого процессора применяется функция программного обеспечения-эмулятора, например, в виде подпрограммы или драйвера, написанных на языке "С", или используется некоторый другой способ осуществления драйвера конкретного аппаратного обеспечения, о чем специалистам в данной области станет ясно после изучения описания одного или нескольких вариантов осуществления. Различные патенты программной и аппаратной эмуляции, включая (но не ограничиваясь) патентами 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, содержание которых включено в настоящую заявку для сведения во всей их полноте, а также многие другие источники иллюстрируют специалистам в данной области многообразие известных способов обеспечения эмуляции формата команд, предназначенных для вычислительных машин, отличных от используемой вычислительной машины.
[00184] На фиг. 16 показан пример схемы эмулируемой хост-компьютерной системы 5092, которая имитирует хост-компьютерную систему 5000', выполненную по хост-архитектуре. В эмулируемой хост-компьютерной системе 5092 хост-процессор (ЦПУ) 5091 является эмулируемым хост-процессором (или виртуальным хост-процессором) и содержит эмулирующий (реальный) процессор 5093, собственный набор команд которого отличается от набора команд процессора 5091 хост-компьютера 5000'. Эмулируемая хост-компьютерная система 5092 в своем составе содержит запоминающее устройство 5094, доступное для эмулирующего процессора 5093. Согласно примеру осуществления, запоминающее устройство 5094 разделяется: часть его служит запоминающим устройством 5096 хост-компьютера, другая часть 5097 используется процедурами эмуляции. Запоминающее устройство 5096 хост-компьютера доступно программам эмулируемого хост-компьютера 5092 согласно эмулируемой архитектуре хост-компьютера. Эмулирующий процессор 5093 исполняет собственные команды из характерного для него набора команд в рамках архитектуры, отличающейся от архитектуры эмулируемого процессора 5091. Указанные собственные команды поступают из запоминающего устройства 5097 процедур эмуляции. Эмулирующий процессор 5093 может обращаться к хост-команде из состава программы, расположенной в запоминающем устройстве 5096 хост-компьютера для ее исполнения путем использования одной или нескольких команд, полученных процедурой определения порядка следования, доступа и декодирования, которая, в свою очередь, может декодировать полученную хост-команду (команды) для определения порядка исполнения собственных команд для эмуляции функции хост-команды, к которой произошло обращение. Собственными процедурами могут эмулироваться прочие функциональные возможности, предусмотренные в архитектуре хост-компьютерной системы 5000', например, такие как регистры общего назначения, управляющие регистры, динамическая трансляция адреса, поддержка подсистемы ввода-вывода, кэш-память процессора. Для повышения своей производительности эмулирующие процедуры могут также пользоваться преимуществом функций, доступных в архитектуре эмулирующего процессора 5093 (такими как регистры общего назначения и динамическая трансляция виртуального адреса). Для содействия процессору 5093 в эмулировании функций хост-компьютера 5000' могут также предоставляться специальное аппаратное обеспечение и снижающие нагрузку на процессор программные механизмы.
[00185] Терминология, употребляемая в настоящей заявке, используется исключительно для описания конкретных вариантов осуществления и не должна рассматриваться как ограничение сущности изобретения. Используемые в настоящей заявке термины в единственном числе обозначают также и сущности во множественном числе, если иное явно не следует из контекста. Следует учитывать, что термины "содержит" и/или "содержащий" при их использовании в настоящем описании указывают на наличие заявленных особенностей, целых чисел, шагов, операций, элементов и/или компонентов, однако не исключают наличие или добавление одной или нескольких других особенностей, целых чисел, шагов, операций, элементов, компонентов и/или их групп.
[00186] В следующей далее формуле изобретения соответствующие структуры, материалы, действия и эквиваленты всех средств или шагов и функциональных элементов, если таковые упоминаются, предназначены для включения в свой состав любой структуры, материала или действия по выполнению функции в комбинации с другими заявленными элементами, как это конкретно заявлено. Описание одного или нескольких аспектов изобретения было дано в целях иллюстрации и раскрытия, описание не предназначено для ограничения настоящего изобретения исключительно изложенными вариантами осуществления. Специалистам в данной области будут очевидны многочисленные модификации и отличия в рамках сущности и идеи одного или нескольких аспектов изобретения. Выбор и описание варианта осуществления обусловлены стремлением наилучшим образом объяснить принципы одного или нескольких аспектов изобретения и их практическое приложение, а также дать возможность специалистам в данной области понять один или несколько аспектов изобретения для различных вариантов осуществления с различными модификациями как пригодные для практического применения.