ОПРЕДЕЛЕНИЕ ДЛИНЫ ГРУППЫ СИМВОЛЬНЫХ ДАННЫХ, СОДЕРЖАЩЕЙ СИМВОЛ ОКОНЧАНИЯ
DETERMINATION OF SYMBOL DATA GROUP LENGTH CONTAINING ENDING SYMBOL

Область техники, к которой относится изобретение
Настоящее изобретение относится к сфере обработки текста. Более точно, изобретение относится к сфере обработке символьных данных.
Предпосылки создания изобретения
При работе с текстовой информацией часто требуется выполнять различные виды обработки символьных данных, в том числе обработку символьных строк. Некоторые виды обработки содержат поиск места окончания (например, конца строки), определение длины символьных данных, поиск определенного символа и т.д. Команды и/или приемы, применяемые в настоящее время для выполнения указанных видов обработки, становятся все менее эффективными.
Сущность изобретения
Для устранения недостатков уровня техники предлагается способ определения длины группы данных, включающий: загрузку в регистр из памяти данных, содержащихся в определенном блоке пространства памяти, причем загружаемые данные являются по меньшей мере частью указанной группы данных, длину которой требуется определить, а сама указанная группа данных, длину которой требуется определить, содержит символ окончания, указывающий конец этой группы данных и представляющий собой известное заранее определенное значение, выбранное в качестве значения, определяющего окончание группы данных, причем данные загружают от начального адреса до конечного адреса в памяти, конечный адрес вычисляют с использованием размера границы блока пространства памяти и маски границы, определяемой на основе размера границы и используемой для определения близости к определенной границе, из памяти загружают переменное число байтов данных без пересечения заданной границы блока пространства памяти, из которого данные загружают в регистр, а переменное число байтов основано на начальном адресе и конечном адресе; определение значения переменной-счетчика, отражающего количество загруженных в регистр данных; определение процессором для данных, загруженных в регистр, значения переменной окончания, используемой при определении длины группы данных, включающее проверку загруженных в регистр данных для определения того, содержат ли загруженные в регистр данные символ окончания в некотором местоположении в регистре, причем если загруженные в регистр данные содержат символ окончания, то переменной окончания присваивают значение, указывающее местоположение символа окончания в регистре, а если загруженные в регистр данные не содержат символа окончания, то переменной окончания присваивают заранее определенное значение, используемое при определении длины группы данных; проверку наличия дополнительных данных, которые должны быть учтены, выполняемую по значению переменной-счетчика и/или по значению переменной окончания, причем если проверка выявила наличие подлежащих учету дополнительных данных, то значение переменной-счетчика увеличивают в соответствии с количеством указанных дополнительных данных, и по значению переменной-счетчика определяют длину группы данных, а если проверка выявила отсутствие подлежащих учету дополнительных данных, то значение переменной-счетчика используют в качестве указанной длины группы данных.
Объектом изобретения является также компьютерная система для определения длины группы данных, содержащая запоминающее устройство и процессор, обменивающийся информацией с запоминающим устройством, и сконфигурированная для осуществления описанного выше способа.
С помощью способов, составляющих сущность настоящего изобретения, реализуются дополнительные особенности и преимущества. В данной заявке подробно описываются прочие варианты осуществления и аспекты настоящего изобретения, они рассматриваются как часть настоящего изобретения.
Таким образом, изобретение относится к способу определения длины группы данных, представляющему собой универсальную и производительную альтернативу известным методам.
Краткое описание чертежей
Далее описывается вариант (варианты) осуществления изобретения с использованием в качестве примера ссылок на прилагающиеся чертежи. На чертежах показано:
на фиг. 1 - схема примера вычислительной среды, в состав которой могут входить и в которой могут использоваться один или более аспектов настоящего изобретения,
на фиг. 2А - схема другого примера вычислительной среды, в состав которой могут входить и в которой могут использоваться один или более аспектов настоящего изобретения,
на фиг. 2Б - более детальная схема запоминающего устройства из состава вычислительной среды, показанной на фиг. 2А, согласно варианту осуществления настоящего изобретения,
на фиг. 3 - схема варианта процедуры определения длины группы символьных данных согласно варианту осуществления настоящего изобретения,
на фиг. 4А - схема примера главного запоминающего устройства, из которого данные, длина которых подлежит определению, загружаются в векторный регистр, согласно варианту осуществления настоящего изобретения,
на фиг. 4Б - схема примера векторного регистра, в который загружены данные из главного запоминающего устройства, схема которого показана на фиг. 4А, согласно варианту осуществления настоящего изобретения,
на фиг. 4В - схема другого примера главного запоминающего устройства, из которого данные, длина которых подлежит определению, загружаются в векторный регистр, согласно варианту осуществления настоящего изобретения,
на фиг. 4Г и 4Д - схемы примеров векторных регистров, в которые загружены данные из главного запоминающего устройства, схема которого показана на фиг. 4В, согласно варианту осуществления настоящего изобретения,
на фиг. 5 - схема варианта формата команды векторного типа для загрузки до границы блока (от англ.: Vector Load to Block Boundary) согласно варианту осуществления настоящего изобретения,
на фиг. 6А - схема варианта процедуры, связанной с командой векторного типа для загрузки до границы блока, согласно варианту осуществления настоящего изобретения,
на фиг. 6Б - схема другого варианта процедуры, связанной с командой векторного типа для загрузки до границы блока, согласно варианту осуществления настоящего изобретения,
на фиг. 7 - схема варианта формата команды векторного типа для поиска неравнозначного элемента (от англ.: Vector Find Element Not Equal) согласно варианту осуществления настоящего изобретения,
на фиг. 8 - схема варианта процедуры, связанной с командой векторного типа для поиска неравнозначного элемента, согласно варианту осуществления настоящего изобретения,
на фиг. 9 - схема взаимодействия узлов обработки, реализующая процедуру, показанную на фиг. 8, согласно варианту осуществления настоящего изобретения,
на фиг. 10 - схема варианта формата команды расчета загрузки до границы блока (от англ.: Load Count to Block Boundary) согласно варианту осуществления настоящего изобретения,
на фиг. 11 - схема варианта процедуры, связанной с командой расчета загрузки до границы блока, согласно варианту осуществления настоящего изобретения,
на фиг. 12 - схема примера файла регистра согласно варианту осуществления настоящего изобретения,
на фиг. 13 - графическое представление варианта осуществления компьютерного программного продукта, содержащего один или более аспектов настоящего изобретения,
на фиг. 14 - схема варианта осуществления хост-компьютерной системы для внедрения и использования одного или более аспектов настоящего изобретения,
на фиг. 15 - схема другого варианта осуществления компьютерной системы для внедрения и использования одного или более аспектов настоящего изобретения,
на фиг. 16 - схема другого варианта осуществления компьютерной системы, содержащей вычислительную сеть, для внедрения и использования одного или более аспектов настоящего изобретения,
на фиг. 17 - схема варианта осуществления различных узлов компьютерной системы для внедрения и использования одного или более аспектов настоящего изобретения,
на фиг. 18А - схема варианта осуществления исполнительного устройства из состава компьютерной системы, показанной на фиг. 17, для внедрения и использования одного или более аспектов настоящего изобретения,
на фиг. 18Б - схема варианта осуществления устройства ветвления из состава компьютерной системы, показанной на фиг. 17, для внедрения и использования одного или более аспектов настоящего изобретения,
на фиг. 18В - схема варианта осуществления устройства загрузки-хранения из состава компьютерной системы, показанной на фиг. 17, для внедрения и использования одного или более аспектов настоящего изобретения,
на фиг. 19 - схема варианта осуществления эмулируемой хост-компьютерной системы для внедрения и использования одного или более аспектов настоящего изобретения.
Подробное описание
Согласно варианту осуществления настоящего изобретения, предоставляется возможность эффективной обработки символьных данных, в том числе (но не ограничиваясь) буквенных символов на любом языке, чисел, образованных из цифр, знаков пунктуации и/или прочих символов. Указанные символьные данные могут являться строками данных или не являться строками данных. С символьными данными связаны стандарты, примерами которых, в том числе, являются: ASCII (от английского American Standard Code for Information Interchange - Американский стандартный код обмена информацией); Юникод (стандарт Международной организации по стандартизации представления символов всех национальных алфавитов), в том числе (но не ограничиваясь) UTF 8 (от английского Unicode Transformation Format - формат преобразования Юникода); UTF16 и т.д.
Согласно одному из вариантов осуществления, предоставляется способ определения длины группы символьных данных, содержащей в своем составе символ окончания (например, строки символьных данных, оканчивающейся нулевым символом), с использованием параллельной обработки, не приводящий к возникновению необоснованных программных исключений (ошибок). Группа символьных данных (в настоящей заявке также используется термин "символьные данные" или "символьные данные с символом окончания"), длина которой подлежит определению, в одном из вариантов осуществления загружается в один или более векторных регистров. В частности, согласно варианту осуществления применяется команда [например, команда векторного типа для загрузки до границы блока (от англ.: Vector Load to Block Boundary)], которая в параллельном режиме загружает данные в векторный регистр до выбранной границы (такой как граница кэш-памяти или граница страницы) и позволяет определить число загруженных символов (значение переменной-счетчика). Например, для того, чтобы определить число загруженных символов, используется другая команда [например, команда расчета загрузки до границы блока (от англ.: Load Count to Block Boundary)]. Затем применяется команда [например, команда векторного типа для поиска неравнозначного элемента (от англ.: Vector Find Element Not Equal)] для поиска в загруженных данных символа-разделителя в пределах группы символьных данных, т.е. первого символа окончания, такого как равный нулю или пустой символ (символ конца строки). Эта команда проверяет совокупность байтов в параллельном режиме.
Если символ-разделитель не выявлен командой векторного типа для поиска неравнозначного элемента, то загружаются дополнительные данные из группы символьных данных, и повторяется расчет значения переменной-счетчика и поиск символа-разделителя. Переменная-счетчик содержит аккумулируемое значение, отслеживающее число загруженных байтов (могут использоваться другие единицы измерения) группы символьных данных. Загрузка, расчет и поиск символа-разделителя производятся до тех пор, пока не будет выявлен символ-разделитель. С помощью указанных команд длина символьных данных определяется с использованием только одной команды ветвления. Кроме того, проверка символьных данных производится быстро, в параллельном режиме, что предотвращает возникновение ложных программных исключений (ошибок).
Согласно настоящей заявке, длина элемента векторного регистра (также используется термин "вектор") составляет, например, один, два или четыре байта; векторным операндом является, например, операнд типа SIMD (от английского Single Instruction, Multiple Data - одиночный поток команд, множественный поток данных), состоящий из множества элементов. Согласно другим вариантам осуществления, длина элементов может быть иной, и векторный операнд необязательно имеет тип SIMD и/или может содержать один элемент.
Схема одного из вариантов осуществления вычислительной среды для внедрения и использования одного или более вариантов настоящего изобретения показана на фиг. 1. Вычислительная среда 100 содержит, например, процессор 102 [например, центральное процессорное устройство (ЦПУ)], запоминающее устройство 104 (например, главное запоминающее устройство) и одно или более устройств ввода-вывода и/или один или более интерфейсов 106, соединенных с другой вычислительной средой, например, через одну или более шин 108 и/или с помощью иных соединений.

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

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

Согласно другому варианту осуществления, процессор 102 основан на архитектуре Intel, предложенной корпорацией Intel. Одна из реализаций архитектуры Intel описана в публикациях "Intel 64 and IA-32 Architectures Developerʹs Manual: Vol. 2B, Команды Set Reference, A-L", номер заказа 253666-041US, декабрь 2011 г., и "Intel 64 and IA-32 Architectures Developerʹs Manual: Vol. 2B, Команды Set Reference, M-Z", номер заказа 253667-041US, декабрь 2011 г.. Intel является зарегистрированной торговой маркой корпорации Intel Corporation, г. Санта-Клара, штат Калифорния, США.
Согласно другому варианту осуществления, схема компьютерного окружения для внедрения и использования одного или более аспектов настоящего изобретения показана на фиг. 2А. В данном примере компьютерное окружение 200 содержит, например, собственное ЦПУ 202, запоминающее устройство 204 и одно или более устройств ввода-вывода и/или интерфейсов 206, соединенных между собой, например, через одну или более шин 208 и/или соединений другого типа. Например, компьютерное окружение 200 может содержать: процессор PowerPC, сервер pSeries или сервер xSeries, предложенные корпорацией International Business Machines Corporation, Армонк, штат Нью-Йорк, США; сервер HP Superdome с процессорами Intel Itanium II, предложенный корпорацией Hewlett Packard Corporation, г. Пало-Альто, штат Калифорния, США; и/или другие электронно-вычислительные машины, основанные на архитектурах, предложенных корпорациями International Business Machines Corporation, Hewlett Packard, Intel, Oracle или другими компаниями и корпорациями.
Собственное ЦПУ 202 содержит один или более собственных регистров 210, таких как один или более регистров общего назначения и/или один или более регистров специального назначения, используемых при выполнении вычислений в компьютерном окружении. Перечисленные регистры содержат информацию, которая отражает состояние компьютерного окружения в каждый отдельно взятый момент времени.
Кроме того, собственное ЦПУ 202 выполняет команды и программный код, которые хранятся в запоминающем устройстве 204. Согласно одному из примеров, ЦПУ выполняет код 212 эмулятора, хранящийся в запоминающем устройстве 204. Этот код позволяет компьютерному окружению, сконфигурированному по одной архитектуре, эмулировать (т.е. имитировать) другую архитектуру. Например, код 212 эмулятора позволяет электронным вычислительным машинам, основанным на архитектурах, отличных от z/Architecture, таким как процессоры PowerPC, серверы pSeries, серверы xSeries, серверы HP Superdome или другим, имитировать архитектуру z/Architecture и выполнять программное обеспечение и команды, разработанные для архитектуры z/Architecture.
Использование кода 212 эмулятора показано более подробно на схеме фиг. 2Б. Гостевые команды 250 содержат команды программного обеспечения (например, машинные команды), которые были разработаны для выполнения на архитектуре, отличной от архитектуры собственного ЦПУ 202. Например, гостевые команды 250 могли были быть разработаны для исполнения на процессоре 102, построенном по архитектуре z/Architecture, однако вместо этого эмулируются на собственном ЦПУ 202, которое может быть, например, процессором типа Intel Itanium II. В одном из примеров код 212 эмулятора содержит устройство 252 выборки команд, предназначенное для получения одной или более гостевых команд 250 из запоминающего устройства 204 и, возможно, для выполнения локальной буферизации (временного хранения) полученных команд. Этот код 212 эмулятора также содержит процедуру 254 трансляции команд, предназначенную для определения типа поступившей гостевой команды и трансляции указанной гостевой команды в одну или более соответствующих собственных команд 256 (т.е. команд, предназначенных для исполнения собственным ЦПУ, построенным по собственной архитектуре). В состав процедуры трансляции входят, например, идентификация функции, которая должна выполняться гостевой командой, и выбор собственной команды или набора команд для выполнения этой функции.
Кроме того, эмулятор 212 содержит процедуру 260 управления эмуляцией, обеспечивающую исполнение собственных команд. Процедура 260 управления эмуляцией может заставить собственное ЦПУ 202 выполнять программу из собственных команд, которая имитирует одну или более раннее поступивших гостевых команд, и по окончании этого вычислительного процесса возвращать управление упомянутой процедуре выборки команд для имитации получения следующей гостевой команды или группы гостевых команд. Процесс выполнения собственных команд 256 может содержать загрузку данных в регистр из запоминающего устройства 204, передачу данных из регистра обратно в запоминающее устройство для хранения или выполнение некоторой арифметической или логической операции в соответствии с указаниями процедуры трансляции.
Каждая процедура реализована, например, в программном обеспечении, которое хранится в запоминающем устройстве и выполняется собственным ЦПУ 202. В других примерах одна или более процедур или операций реализованы в постоянном запоминающем устройстве (ПЗУ), в аппаратном или программном обеспечении или в их комбинации. Упомянутые регистры эмулируемого процессора могут имитироваться с использованием регистров 210 собственного ЦПУ или с использованием пространства памяти запоминающего устройства 204. Согласно вариантам осуществления, гостевые команды 250, собственные команды 256 и код 212 эмулятора могут располагаться в одном и том же запоминающем устройстве или могут храниться распределенно (т.е. в различных запоминающих устройствах).
В рассматриваемом примере ПЗУ хранит, например, микрокод, милликод и/или макрокод процессора. Код содержит, например, команды аппаратного уровня и/или структуры данных, используемые при реализации машинных кодов более высокого уровня. В одном из вариантов осуществления код содержит, например, проприетарный код, который обычно является микрокодом и содержит выверенное программное обеспечение или микрокод, специфический для окружающего аппаратного обеспечения и контролирующий доступ операционной системы к аппаратному обеспечению вычислительной системы.
В одном из примеров загружаемая, транслируемая и исполняемая гостевая команда 250 является одной из описанных в настоящей заявке команд. Такая команда, предназначенная для одной архитектуры (например, для архитектуры z/Architecture), извлекается из запоминающего устройства, транслируется и представляется набором собственных команд 256 другой архитектуры (например, архитектуры PowerPC, pSeries, xSeries, Intel и т.д.). Затем указанные собственные команды исполняются.
Согласно варианту осуществления описанные команды являются командами векторного типа и являются частью векторного функционала (т.е. векторной среды, набора команд векторного типа и средств их обработки), предоставляемого согласно аспекту настоящего изобретения. Векторный функционал позволяет работать, например, с векторами фиксированной длины в пределах от одного до шестнадцати элементов. Каждый вектор содержит данные, которые обрабатываются векторными командами, определенными в векторном функционале. Согласно варианту осуществления, если вектор образован из набора элементов, то каждый элемент обрабатывается параллельно с другими элементами. Выполнение команды не завершено, пока не завершена обработка всех элементов.
Согласно настоящей заявке, векторные команды могут применяться в составе различных архитектур, в том числе (но не ограничиваясь) z/Architecture, Power, Intel и т.д. Несмотря на то, что описываемый в настоящей заявке вариант осуществления ориентирован на архитектуру z/Architecture, векторные команды и один или более аспектов настоящего изобретения могут базироваться и предназначаться для многих других типов архитектур. Архитектура z/Architecture используется исключительно в качестве одного из примеров.
Согласно варианту осуществления, по которому векторный функционал реализован как часть архитектуры z/Architecture, для того, чтобы использовать векторные регистры и команды, в специализированном управляющем регистре (например, управляющем регистре 0) флаги разрешения векторного функционала и векторных регистров должны быть установлены в состояние, например, логической единицы. Если векторный функционал инсталлирован, и векторная команда выполняется без разрешающих флагов, то возникает программное исключение (ошибка) данных. Если же векторный функционал не инсталлирован, и делается попытка выполнить векторную команду, то возникает программное исключение (ошибка) исполнения.
Векторные данные располагаются в запоминающем устройстве, например, в той же самой последовательности, слева направо, как и прочие форматы данных. Разряды формата данных с номерами от 0 до 7 образуют байт в крайней левой (с наименьшим номером) ячейке хранения байтов пространства памяти; разряды с номерами от 8 до 15 образуют байт в следующей за предыдущей ячейке памяти и т.д. В другом примере векторные данные могут располагаться в пространстве памяти запоминающего устройства в иной последовательности, например, справа налево.
Многие векторные команды, поддерживаемые векторным функционалом, снабжены полем, состоящим из специальных разрядов. Такое поле, называемое полем RXB (от английского register extension bit - бит расширения регистра), содержит наиболее значимый разряд для обозначений (т.е. для адресов) векторных регистров операндов. Разряды обозначений векторных регистров операндов, не оговоренные спецификацией команды, являются зарезервированными и должны быть установлены в состояние логического нуля.
Согласно варианту осуществления поле RXB состоит из четырех разрядов (например, с номерами от 0 до 3), и значения этих разрядов имеют следующее назначение:
разряд 0 - наиболее значимый разряд обозначения векторного регистра первого операнда;
разряд 1 - наиболее значимый разряд обозначения векторного регистра второго операнда, если такой операнд и соответствующий регистр предусмотрены командой;
разряд 2 - наиболее значимый разряд обозначения векторного регистра третьего операнда, если такой операнд и соответствующий регистр предусмотрены командой;
разряд 3 - наиболее значимый разряд обозначения векторного регистра четвертого операнда, если такой операнд и соответствующий регистр предусмотрены командой.
Каждый разряд устанавливается в состояние логического нуля или логической единицы, например, ассемблером, в зависимости от номера регистра. Например, в регистрах с номерами от 0 до 15 разряд устанавливается в состояние логического нуля, в регистрах с номерами от 16 до 31 разряд устанавливается в состояние логической единицы и т.д.
1
2
Согласно варианту осуществления каждый разряд поля RXB является разрядом расширения определенного поля в составе команды, указывающего на один или более векторных регистров. Например, в одной или более векторных командах разряд с номером 0 поля RXB служит разрядом-расширением части команды с номерами позиций от 8 до 11, эта часть команды обозначается, например, как V; разряд с номером 1 поля RXB служит разрядом-расширением части команды с номерами позиций от 12 до 15, эта часть команды обозначается, например, как V, и т.д.
Согласно другому варианту осуществления, поле RXB содержит дополнительные разряды, и для указания на каждый вектор или регистр в качестве разрядов-расширений используются по два и более разрядов.
В настоящей заявке изложено, что согласно аспекту настоящего изобретения для определения длины группы символьных данных, содержащей символ окончания, например строки данных, оканчивающейся пустым символом, используют различные команды. Далее подробно изложена процедура обработки, связанная с определением длины, а также применяемые для этого различные команды.
Согласно варианту осуществления, как показано на фиг. 3, для определения длины символьных данных, таких как символьная строка, оканчивающаяся пустым символом, символьные данные на шаге 300 загружаются в векторный регистр. Для этого используется, например, команда векторного типа для загрузки до границы блока. Указанная команда загружает до 16 байтов данных в параллельном режиме из главного запоминающего устройства без пересечения определенной границы пространства памяти главного запоминающего устройства. Подробные сведения об этой команде приводятся далее.
Затем на шаге 302 с использованием, например, команды расчета загрузки до границы блока, описанной далее, определяется число загруженных байтов.
Затем на шаге 304 в регистре с загруженными символьными данными выполняется поиск окончания (например, равного нулю символа или пустого символа или иного символа окончания). В одном из примеров для поиска символа окончания (например, равного нулю символа или пустого символа или иного символа, который обозначает окончание) используется команда векторного типа для поиска неравнозначного элемента, описанная далее. В одном из примеров эта команда выполняет поиск в содержимом регистра равных нулю элементов, которые также называют пустыми элементами (например, все разряды элемента имеют значение ноль). Равный нулю или пустой элемент обозначает окончание символьных данных, например, окончание определенной строки данных. Результатом поиска является значение индекса (порядкового номера, позиции), например, индекса байта первого по счету равного нулю элемента, называемого в настоящей заявке символом окончания, или же (если символ окончания не выявлен) заранее определенное значение, например, длина вектора, в котором велся поиск.
Затем на шаге 306 принимается решение, не превышает ли число загруженных символов (например, определенное командой расчета загрузки до границы блока) значение индекса символа окончания (например, определенного командой векторного типа для поиска неравнозначного элемента). Если не превышает, то на шаге 308 переменной Length (от англ.: длина) присваивается текущее значение Length, увеличенное на число загруженных символов, и выполнение процедуры продолжается с шага 300. В противном случае на шаге 310 значение переменной Length устанавливается равным текущему значению Length, увеличенному на значение индекса символа окончания, и процедура определения длины завершается.
Ниже приведен пример псевдокода, используемого для определения длины строки с символом-окончанием, например, символьной строки, оканчивающейся равным нулю символом. Через RB обозначена строка символов (@), значение ее длины будет помещено в регистр RX
Согласно приведенному примеру псевдокода, вначале инициализируется регистр RX, который используется для хранения значения длины строки данных. Инициализация осуществляется, например, выполнением операции сложения по модулю 2 (XOR), операнды которой - RX и RX, причем результат возвращается в RX. В результате инициализации содержимое регистра RX обнуляется. Затем начинается цикл, в вектор VSTR загружаются 16 байтов данных. Далее определяется число байтов данных, загруженных в вектор VSTR, это число помещается в регистр GLEN общего назначения. Затем содержимое RX увеличивается на число загруженных байтов.
Затем выполняется поиск равного нулю символа (символа окончания), результат помещается в вектор VPOS. Этот результат либо является индексом равного нулю символа, либо (если равного нулю символа не выявлено) длиной вектора, например, равной шестнадцати. Затем результат из вектора VPOS извлекается и помещается в регистр GPOS общего назначения. Значение в регистре GPOS сравнивается со значением GLEN. Если значение GLEN меньше или равно значению GPOS, то процедура возвращается назад к операции VLBB, после чего загружаются дополнительные данные. В противном случае выполняются завершающие операции SGR и AGR.
На фиг. 4А показана схема примера главного запоминающего устройства 400. Из этого устройства данные загружаются в векторный регистр, длина этих данных подлежит определению. Видно, что главное запоминающее устройство 400 содержит строку данных "Hello World!", которая начинается с ячейки памяти с адресом 0×6FF3. В ходе загрузки данных не должна пересекаться граница пространства памяти главного запоминающего устройства, показанная вертикальной штриховой линией 402. Указанные данные загружаются в векторный регистр 420, пример которого показан на фиг. 4Б.
Один из примеров псевдокода для загрузки данных из главного запоминающего устройства, показанного на фиг. 4А (обозначенного в псевдокоде как STR@):
Другой пример главного запоминающего устройства 450 показан на фиг. 4В. Из этого устройства данные также загружаются в векторный регистр, длина этих данных также подлежит определению. Видно, что главное запоминающее устройство 450 содержит символьные данные "Hello World!", начало которых располагается в ячейке памяти с адресом 0×6FF6. Граница пространства памяти запоминающего устройства, которая не должна быть пересечена в ходе загрузки данных, показана вертикальной штриховой линией 452. Граница располагается до окончания символьных данных. Таким образом, в векторный регистр 470, пример которого показан на фиг. 4Г, сперва загружаются символьные данные вплоть до границы, а затем оставшаяся часть символьных данных загружается в векторный регистр 490, как показано на фиг. 4Д.
Один из примеров псевдокода для загрузки данных из главного запоминающего устройства, показанного на фиг. 4В (обозначенного в псевдокоде как STR@):
В соответствии с вышеизложенным, в одном из вариантов осуществления используются различные команды для определения длины символьных данных с символом окончания, таких как символьная строка, завершающаяся нулевым символом. Примеры указанных команд подробно описываются далее.
1
2
2
2
3
Одна из команд, используемая для загрузки в регистр - команда векторного типа для загрузки до границы блока (мнемонический код команды - VLBB), пример этой команды описывается с помощью схемы на фиг. 5. В одном из примеров команда 500 векторного типа для загрузки до границы блока содержит: поля 502а (например, разряды 0-7) и 502b (например, разряды 40-47) кода операции, идентифицирующие команду векторного типа для загрузки до границы блока; поле 504 векторного регистра (например, разряды 8-11) служащее для указания векторного регистра (V); поле 506 индекса (Х) (например, разряды 12-15); поле 508 базы (В) (например, разряды 16-19); поле 510 смещения (D) (например, разряды 20-31); поле 512 маски (М) (например, разряды 32-35); поле 514 RXB (например, разряды 36-39). В одном из примеров каждое из полей 504-514 является отдельным и независимым от поля (полей) кода операции. Кроме того, в одном из вариантов осуществления указанные поля являются отдельными и независимыми одно от другого, однако согласно другим вариантам осуществления, два и более полей могут объединяться. Дальнейшие сведения об использовании перечисленных полей приводятся ниже.
В одном из примеров выбранные разряды (например, первые два разряда) кода операции, входящие в состав поля 502а кода операции, указывают длину и формат команды. В данном конкретном примере длина составляет три полуслова, и формат команды - векторный регистр-и-индекс-сохранение, с расширенным полем кода операции. Поле вектора (обозначение V) совместно с соответствующим разрядом поля RXB указывает на векторный регистр. В частности, для векторных регистров, регистр, содержащий операнд, указывается с использованием, например, четырехразрядного поля регистра и дополнительного разряда из поля расширения (RXB), этот разряд является наиболее значимым разрядом. Например, если значение в четырехразрядном поле - 0110, а значение разряда-расширения - 0, то их пятиразрядная комбинация дает число 00110, указывающее на регистр с номером 6 в десятичной системе счисления.
1
Нижний индекс в обозначении поля команды соответствует номеру операнда, к которому это поле относится. Например, нижний индекс 1 в обозначении V поля означает, что это поле относится к первому операнду и т.д. Длина операнда регистра совпадает с длиной самого регистра, которая составляет, например, 128 разрядов.
2
2
2
2
В одном из примеров в команде типа векторный регистр-и-индекс-сохранение для образования адреса второго операнда содержимое регистров общего назначения, указываемых полями Х и В, объединяется с содержимым поля D. В одном из примеров смещение D для команды векторного типа для загрузки до границы блока обрабатывается как 12-разрядное беззнаковое целое число.
3
В одном из вариантов осуществления поле М содержит код, который используется для информирования ЦПУ о границе (т.е. размере) загружаемого блока. Если указано зарезервированное значение, то возникает программное исключение (ошибка) спецификации. Примеры кодов и соответствующие значения границы:
1
При выполнении одного из вариантов осуществления команды векторного типа для загрузки до границы блока в направлении слева направо байты из второго операнда загружаются в первый операнд (он располагается в регистре, на который указывает поле V совместно с разрядом поля расширения). Загрузка ведется начиная с элемента, содержащего байт с индексом ноль. Второй операнд располагается в области запоминающего устройства, определяемой адресом второго операнда (также используется термин начальный адрес). Загрузка начинается с этой ячейки памяти и продолжается до конечного адреса, вычисляемого командой (либо процессором), как будет описано далее. Если при загрузке возникает граничное условие, то дальнейшие действия с оставшейся частью первого операнда зависят от используемой модели. Если часть байтов не загружена, то программное исключение (ошибка) доступа не возникает. В одном из примеров значения байтов, в которые загрузка не была выполнена, являются непредсказуемым.
2
2
В рассмотренном выше примере команды начальный адрес определялся как значение в индексном регистре (Х) + значение в базовом регистре (В) + смещение (D2); однако в других вариантах осуществления начальный адрес формируется, например, следующим образом: просто как значение в регистре; как адрес команды + смещение, определяемое текстом команды; как значение в регистре + смещение; как значение в регистре + значение в индексном регистре. В одном из вариантов осуществления команда не содержит поле RXB. Расширение не используется вовсе или расширение предоставляется другим образом, например, по внешнему по отношению к команде указанию, или предоставляется как часть другого поля этой же команды.
На фиг. 6А приводятся дальнейшие сведения об одном из вариантов осуществления обработки, связанной с командой векторного типа для загрузки до границы блока. В данном примере местоположение границы задано в команде. В одном из примеров соответствующий алгоритм реализуется процессором вычислительного окружения.
3
Согласно варианту осуществления вначале на шаге 600 формируется маска границы (переменная 604 BdyMask), эта маска используется для определения близости к заданной границе. В одном из примеров для формирования маски границы рассчитывается отрицание дополнения до двух размера границы (переменная 602 BdySize), например, BdyMask=0-BdySize. В одном из примеров значение переменной 602 размера границы задается командой (например, полем М); либо, в другом примере оно определяется вычислительной машиной, как описано в настоящей заявке.
2
2
2
2
2
2
Затем на шаге 610 вычисляется начальный адрес 612, который указывает то местоположение в пространстве памяти, начиная с которого должна начаться загрузка данных. Например, начальный адрес 612 может задаваться: как значение в регистре; как адрес команды плюс смещение, определяемое текстом команды; как значение в регистре плюс смещение; как значение в регистре плюс значение в индексном регистре; как значение в регистре плюс значение в индексном регистре плюс смещение. В рассматриваемой в данном случае команде начальный адрес формируется по значениям в полях X, B и D. То есть для формирования начального адреса содержимое регистров, указанных в полях X и B, добавляется к смещению, указанному в поле D. Перечисленные выше способы вычисления начального адреса являются исключительно примерами; наряду с приведенными также возможны иные примеры.
Затем на шаге 620 вычисляется конечный адрес, по которому загрузка прекращается. Входными данными для этого расчета являются, например, размер границы 602, начальный адрес 612, длина вектора 614 (например, в байтах; например, 16) и маска 604 границы. В одном из примеров конечный адрес 622 вычисляется следующим образом:
Затем на шаге 630 из запоминающего устройства начиная с начального адреса и заканчивая конечным адресом загружается первый операнд (т.е. векторный регистр-получатель) начиная с его байта с индексом 0. Это дает возможность загрузить из запоминающего устройства в вектор переменное число байтов без пересечения заданной границы пространства памяти. Например, если граница пространства памяти установлена равной 64 байтам, и начальный адрес - байт 58, то в векторный регистр загружаются байты с 58-го по 64-й. В одном из вариантов осуществления байты загружаются в параллельном режиме.
На фиг. 6Б показан другой вариант осуществления обработки, связанной с командой векторного типа для загрузки до границы блока. В данном варианте осуществления местоположение границы не задано в команде, а определяется динамически процессором, выполняющим команду.
2
2
2
2
2
2
В одном из вариантов осуществления на шаге 650 вычисляется начальный адрес, он указывает на местоположение в пространстве памяти запоминающего устройства, из которого должна начинаться загрузка. Например, начальный адрес 652 может задаваться: как значение в регистре; как адрес команды плюс смещение, определяемое текстом команды; как значение в регистре плюс смещение; как значение в регистре плюс значение в индексном регистре; как значение в регистре плюс значение в индексном регистре плюс смещение. В рассматриваемой в данном случае команде начальный адрес формируется по значениям в полях Х, В и D. То есть для формирования начального адреса содержимое регистров, указанных в полях Х и В, добавляется к смещению, указанному в поле D. Перечисленные выше способы вычисления начального адреса являются исключительно примерами; наряду с приведенными также возможны иные примеры.
3
3
Затем на шаге 654 принимается решение, должна ли граница устанавливаться динамически. Если нет, то в качестве размера границы (переменная BdySize) используется значение, задаваемое полем М. В противном случае на шаге 656 размер границы определяется динамически процессором. Например, поле М задает тип границы (например, строка или страница кэш-памяти и т.д.), и процессор определяет границу с учетом типа и одной или более характеристик процессора (например, длины строки кэш-памяти процессора, размера страницы для процессора и т.д.). Например, в зависимости от типа процессор либо использует фиксированный размер границы (например, заранее определенный фиксированный для процессора размер строки или страницы кэш-памяти), либо в зависимости от типа процессор определяет границу. Например, если тип границы - граница страницы, то процессор обращается к буферу быстрого преобразования адреса, с помощью которого по начальному адресу определяет границу страницы. Существуют также другие примеры осуществления.
После определения размера границы, динамически или по указанию в команде, на шаге 660 формируется маска границы (маска BdyMask), которая используется для определения близости к установленной границе. В одном из примеров для формирования маски границы (переменная 662 BdyMask) рассчитывается как отрицание дополнения до двух размера границы (переменная 658 BdySize), например, BdyMask=0-BdySize.
Затем на шаге 670 вычисляется конечный адрес, по которому загрузка прекращается. Входными данными для этого расчета являются, например, размер границы 658, начальный адрес 652, длина вектора 664 (например, в байтах; например, 16) и маска границы 622. В одном из примеров конечный адрес 672 вычисляется следующим образом:
EndAddr=min(StartAddr+(BdySize-(StartAddr&BdyMask)),StartAddr+vec_size).
Затем на шаге 680 из запоминающего устройства начиная с начального адреса и заканчивая конечным адресом загружается первый операнд (т.е. векторный регистр-получатель) начиная с его байта с индексом 0. Это дает возможность загрузить из запоминающего устройства в вектор переменное число байтов без пересечения заданной границы пространства памяти. В соответствии с вышеизложенным, например, если граница пространства памяти установлена равной 64 байтам, и начальный адрес - байт 58, то в векторный регистр загружаются байты с 58-го по 64-й. В одном из вариантов осуществления байты загружаются в параллельном режиме.
На фиг. 4Б показан пример векторного регистра, в который была выполнена загрузка согласно одному из вариантов осуществления команды векторного типа для загрузки до границы блока. Видно, что данные не были загружены за границу, отмеченную вертикальной штриховой линией на фиг. 4А. Ячейки за границей недоступны, и программное исключение (ошибка) не возникает. В некотором конкретном варианте осуществления направление загрузки в вектор - слева направо. Однако в другом варианте осуществления направление загрузки может быть справа налево. В одном из вариантов осуществления направление векторов, слева направо или справа налево, определяется во время выполнения. Например, для этого команда обращается к регистру, управляющей переменой (флагу) или другому объекту, который указывает направление обработки, слева направо или справа налево. В одном из вариантов указатель направления не встроен в команду как ее часть, а направление сообщается команде на этапе выполнения.
В одном из примеров команда векторного типа для загрузки до границы блока только загружает байты векторного регистра (первый операнд) соответствующими байтами второго операнда, которые располагаются в блоке пространства памяти главного запоминающего устройства (также используется термин главная память). Блок пространства памяти главного запоминающего устройства либо указывается командой (например, в команде указывается его длина, а также адрес внутри блока, начиная с которого следует начинать загрузку), либо определяется динамически по типу границы блока (например, строка или страница кэш-памяти) и одной или более характеристикам процессора, выполняющего команду, таким как размер строки или страницы кэш-памяти. В настоящей заявке блоком пространства памяти запоминающего устройства является любой блок пространства памяти установленного размера. Этот определенный размер блока также называется границей блока, которая является окончанием блока.
Одной из команд, которая используется для выявления символа окончания, такого как нулевой символ, является команда векторного типа для поиска неравнозначного элемента, схема примера которой показана на фиг. 7. В одном из вариантов осуществления эта команда позволяет сравнивать многоэлементные векторы на предмет различия, а также вести в выбранном векторе поиск символа окончания, такого как равный нулю элемент (например, все двоичные разряды которого содержат значение ноль).
1
2
3
5
4
В одном из примеров команда векторного типа для поиска неравнозначного элемента 700 (мнемонический код команды - VFBNEZ) содержит: поля кода операции 702а (например, разряды с номерами 0-7) и 702b (например, разряды 40-47), идентифицирующие операцию векторного типа для поиска неравнозначного элемента; поле 704 первого векторного регистра (например, разряды 8-11), используемое для обозначения первого векторного регистра (V); поле 706 второго векторного регистра (например, разряды 12-15), используемое для обозначения второго векторного регистра (V); поле 708 третьего второго векторного регистра (например, разряды 16-19), используемое для обозначения третьего векторного регистра (V); поле 710 первой маски (M) (например, разряды 24-27); поле 712 второй маски (М) (например, разряды 32-35); поле 714 RXB (например, разряды 36-39). В одном вариантов осуществления каждое из полей 304-314 является отдельным и независимым от поля (полей) кода оптации. Кроме того, согласно другому варианту осуществления, указанные поля являются отдельными и независимыми между собой; однако согласно другим вариантам осуществления, два и более полей могут быть объединенными. Далее приводятся сведения об использовании перечисленных полей.
В одном из примеров определенные разряды (например, первые два разряда) кода операции из состава поля 702а кода операции определяют длину и формат команды. В рассматриваемом примере двоичное число в указанных разрядах означает, что длина составляет три полуслова и что формат - операция типа векторный регистр-и-регистр, с расширенным кодом операции. Каждое из векторных (V) полей совместно с соответствующим разрядом расширения регистра, содержащимся в поле RXB, обозначает некоторый векторный регистр. В частности, векторный регистр, содержащий операнд, обозначается (адресуется) с использованием, например, четырехразрядного поля обозначения регистра и разряда RXB как наиболее значимого. Например, если четырехразрядное поле содержит двоичное число 0110, и в разряде расширения содержится двоичное число 0, то пятиразрядное число 00110 указывает на регистр с номером 6 в десятичной системе счисления.
1
Нижний индекс в обозначении поля команды соответствует номеру операнда, к которому это поле относится. Например, нижний индекс 1 в обозначении V поля означает, что это поле относится к первому операнду и т.д. Длина операнда регистра совпадает с длиной самого регистра, которая составляет, например, 128 разрядов.
4
Поле М, состоящее, например, из четырех разрядов с номерами от 0 до 3, описывает спецификатор длины элемента, например, с помощью разрядов с 1-го по 3-й. Спецификатор длины элемента задает длину элементов операндов векторного регистра. Например, спецификатор длины элемента задает длину элемента равной одному байту, полуслову (например, два байта) или слову (например, четыре байта). Например, значение 0 обозначает длину в один байт, 1 обозначает полуслово, 2 - слово, называемое также полным словом. Если в поле использовано зарезервированное значение, то возникает программное исключение (ошибка) спецификации.
5
Поле M является, например, четырехразрядным, и его разряды с номерами от 0 до 3 имеют, например, следующие значения:
разряд 2 - поле флага ZS (от английского zero search - поиск нуля) поиска нуля: значение 1 указывает, что каждый элемент второго операнда дополнительно сравнивается с нулем (в следующем далее примере каждый элемент третьего операнда или иного операнда сравниваемого с нулем);
разряд 3 - поле флага СС (от английского condition code - код условия) установки кода условия: значение 0 указывает, что установка кода условия не требуется, значение кода условия остается неизмененным; значение 1 указывает, что код условия устанавливается, например, по следующему правилу:
значение 0: если флаг ZS поиска нуля установлен, то сравнение выявило в обоих операндах элемент с нулевым значением, и индекс этого элемента меньше, чем индекс элементов с несовпадающими значениями (неравнозначных элементов);
2
3
значение 1: сравнение выявило несовпадение некоторого элемента второго операнда с элементом третьего операнда, причем значение элемента V меньше значения элемента V;
2
3
значение 2: сравнение выявило несовпадение некоторого элемента второго операнда с элементом третьего операнда, причем значение элемента V больше значения элемента V;
значение 3: значения всех элементов совпадают. Если флаг ZS поиска нуля установлен, то во втором операнде (либо, согласно другому варианту осуществления, в других операндах) не выявлено элементов с нулевыми значениями.
2
3
1
Согласно одному из вариантов осуществления, при выполнении команды векторного типа для поиска неравнозначного элемента в направлении, по одному из вариантов осуществления, слева направо, беззнаковые целые двоичные элементы второго операнда (содержащиеся в регистре, определяемом значением поля V и соответствующим разрядом RXB) сравниваются с соответствующими им беззнаковыми целыми двоичными элементами третьего операнда (содержащимися в регистре, определяемом значением поля V и соответствующим разрядом RXB). Если два элемента в паре неравны (т.е. их значения различаются), то индекс первого байта крайнего левого неравного элемента помещается в специально предназначенный байт (например, в байт 7) первого операнда (содержащегося в регистре, определяемом значением поля V и соответствующим разрядом RXB). В оставшиеся байты первого операнда записываются нули.
В одном из вариантов возвращаемый (т.е. сохраняемый в определенном байте) индекс байта элемента является индексом первого байта крайнего левого неравнозначного элемента. Например, если длина элемента составляет один байт, то возвращается индекс байта крайнего левого неравнозначного элемента (например, если имеется 16 элементов с номерами от 0 до 15, и не совпадает элемент с номером 6, то возвращается значение 6 индекса байта). Аналогично, если длина элемента составляет полуслово, имеется восемь элементов с номерами от 0 до 7, и не совпадает один из байтов третьего элемента с номерами 6 и 7, то возвращается значение 6 индекса байта. Если же длина элемента составляет полное слово, имеется четыре элемента с номерами от 0 до 3, и один из байтов, с 4-го по 7-й, первого элемента не совпадает, то возвращается значение 4 индекса байта.
5
Если в поле M значение флага установки кода условия установлено равным, например, единице, то устанавливается код условия для указания, элемент какого из операндов имеет большее значение (если были выявлены неравнозначные элементы). Т.е. двоичный целый эквивалент, например, буквенного символа второго операнда сравнивается с двоичным целым эквивалентом неравнозначного буквенного символа третьего операнда, в результате чего устанавливается значение кода условия. Если все элементы совпали, то в специально предназначенный байт (например, в байт 7) первого операнда записывается значение индекса байта, равное длине вектора (в байтах, например, 16). В оставшиеся байты первого операнда записываются нули. При этом если значение флага установки кода условия равно единице, то устанавливается соответствующий код условия (например, значение 3).
В данном варианте осуществления, в котором команда векторного типа для поиска неравнозначного элемента используется исключительно для поиска символа окончания, второй и третий операнды содержат одни и те же данные, и поэтому сравнение не выявляет неравных символов.
5
Если в поле M установлен флаг поиска нуля, то каждый элемент второго операнда (либо, согласно другому варианту осуществления, третьего операнда или иного операнда) дополнительно проверяется на предмет равенства нулю (т.е. пустому элементу, символу окончания, символу конца строки). Если во втором операнде равный нулю элемент обнаружен прежде, чем выявлено несовпадение какого-либо иного элемента операнда, то в специально предназначенный байт (например, в байт 7) первого операнда записывается индекс первого байта равного нулю элемента. Во все прочие элементы первого операнда записываются нули, и устанавливается соответствующее значение кода условия (например, значение ноль).
Согласно варианту осуществления сравнение элементов ведется в параллельном режиме. Например, если сравниваемые векторные регистры имеют длину 16 байтов, то одновременно сравниваются 16 пар байтов. В других вариантах осуществления длина элементов данных может отличаться от одного байта, и число выполняемых в параллельном режиме сравнений соответствует длине элемента. В другом варианте осуществления во время исполнения задается направление векторов, слева направо или справа налево. Например, команда обращается к регистру, флагу состояния или другому объекту, который указывает направление обработки, например, либо слева направо, либо справа налево. Согласно варианту осуществления указатель направления не встроен жестко в саму команду, направление сообщается команде во время выполнения.
Согласно другому варианту осуществления, команда не содержит поле RXB: расширение не используется вовсе или расширение организовано иным способом, например, по внешнему по отношению к команде указанию, или же расширение содержится в другом поле той же команды.
Дальнейшие сведения об одном из вариантов осуществления команды векторного типа для поиска неравнозначного элемента поясняются схемой на фиг. 8. В одном из примеров процессор компьютерного окружения выполняет следующий алгоритм.
Вначале на шаге 800 принимается решение о том, должен ли быть выполнен поиск нуля (так называемого нулевого элемента, символа конца строки, символа окончания и т.п.). Если поиск нуля должен быть выполнен, то на шаге 802 выполняется сравнение с нулевыми символами, т.е. поиск равных нулю элементов, результат поиска присваивается выходной переменной nullidx (от английского null index - индекс нулевого символа) 803. Например, если длина элемента - байт, и в пятом байте найден равный нулю элемент, то в nullidx помещается индекс этого байта (например, 5). Аналогично, если длина элемента составляет полуслово, имеется восемь элементов с номерами от 0 до 7, и значение третьего элемента (т.е. байты с номерами 6 и 7) равно нулю, то в nullidx помещается значение 6 (соответствует индексу байта 6). Аналогично, если длина элемента составляет полное слово, имеется четыре элемента с номерами от 0 до 3, и значение первого элемента (т.е. байты с 4-го по 7-й) равно нулю, то в nullidx помещается значение 4 (соответствует индексу байта 4). Если равный нулю элемент не выявлен, то согласно одному из примеров, в nullidx помещается значение, равное длине вектора (например, в байтах; например, 16).
Кроме того, или даже если поиск нуля не должен выполняться, то на шаге 804 в параллельном режиме выполняется множество (например, 16) операций, состоящих в сравнении А и В операцией сравнения. В одном из примеров А - содержимое второго операнда, В - содержимое третьего операнда, и операция сравнения - неравенство.
Результат сравнения присваивается переменной 806, называемой либо левым индексом, cmpidxl (от английского comparison index left - индекс сравнения слева), либо правым индексом, cmpidxr (от английского comparison index right - индекс сравнения справа) в зависимости от того, в каком направлении велся поиск: слева или справа. Например, если операция сравнения - неравенство, поиск велся слева направо, а сравнение выявило одно или более несовпадений, то значение индекса, связанное с первым байтом младшего из различающихся элементов, помещается в cmpidxl. Например, если длина элемента - байт, вектор состоит из 16 элементов (с номерами от 0 до 15) и выявлено неравенство в элементе с номером 6, то в переменной cmpidxl сохраняется значение 6. Аналогично, если длина элемента - полуслово, вектор состоит из восьми элементов (с номерами от 0 до 7) и выявлено равенство в элементе с номером 3 (например, в байтах 6 и 7), то возвращается индекс первого байта данного элемента (т.е. значение 6). Аналогично, если длина элемента - полное слово, вектор состоит из четырех элементов (с номерами от 0 до 3) и выявлено равенство в элементе 1 (т.е. в байтах с 4-го по 7-й), то возвращается индекс первого байта данного элемента (т.е. значение 4). Если различий не выявлено, то согласно варианту осуществления переменной cmpidxl или cmpidxr (в зависимости от направления поиска) присваивается значение, равное длине вектора (например, в байтах; например, значение 16).
Затем на шаге 808 принимается решение, велся ли поиск слева или справа. Если поиск велся слева, то на шаге 810 переменной cmpidx присваивается значение cmpidxl, в противном случае на шаге 812 переменной cmpidx присваивается значение переменной cmpidxr.
После присвоения значения переменной cmpidx принимается решение, велся ли поиск нуля - шаг 814. Если поиск нуля не велся, то на шаге 816 переменной idx (от английского index - индекс) присваивается значение cmpidx. Если поиск нуля велся, то на шаге 818 переменной idx присваивается минимальное из значений индекса сравнения и индекса нуля (т.е. nullidx). Этим шагом работа алгоритма заканчивается.
На фиг. 9 показана схема, поясняющая выполнение операций по алгоритму, показанному на фиг. 8. В данном примере имеется два входных блока данных, вектор В 900 и вектор А 902, причем в этом примере содержимое входных блоков данных совпадает. Оба этих вектора поступают на операцию 904 сравнения, которая выполняет сравнение (например, поиск неравенства) в параллельном режиме. Кроме того, один из входных векторов, а именно вектор А, поступает также на операцию 906 поиска нулевых символов.
Результаты работы операции сравнения - значение 908 переменных idxL или idxR, а также результат операции поиска нуля - значение 910 переменной nullidx поступают в процедуру 912 определения результата. Процедура 912 также принимает значения следующих управляющих переменных (флагов): справа/слева 914, указывающей направление поиска; поиск нуля 916, показывающей, велся ли поиск нуля; длина элемента 918, указывающей длину каждого элемента векторов (например, байт, полуслово, полное слово). Процедура 912 формирует результат обработки - значение переменной resultidx (от англ.: индекс-результат) 920, которое сохраняется в выходном векторе 922 (например, в его седьмом байте).
Процедура 912 определения результата также содержит операцию 923 обработки кода условия, которая опционально формирует код 924 условия.
Пример псевдокода операции 904 сравнения:
Из данного примера видно, что переменные idxL или idxR (их имена соответствуют направлению поиска) инициализируются значением длины вектора (выраженным, например, в байтах; например, инициализируются значением 16). Затем каждый элемент вектора А сравнивается с соответствующим элементом вектора В. В одном из примеров сравнение ведется побайтно, так что сравнение выполняется для каждого i-го из шестнадцати байтов. В данном примере операция сравнения - неравенство, и если выявлено различие байтов, то при поиске в направлении слева направо значение индекса отличающегося байта присваивается переменной idxL, а при поиске в направлении справа налево значение индекса отличающегося байта присваивается переменной idxR.
Пример псевдокода операции 906 поиска нуля:
Из приведенного примера видно, что каждый j-й элемент вектора проверяется на предмет равенства его значения нулю. Если элемент равен нулю, то переменной nullidx присваивается значение индекса этого элемента, умноженное на длину элемента. Например, если длина элемента составляет полуслово (т.е. два байта), и в элементе 3 выявлен нулевой символ, то 3 умножается на 2, и переменной nullidx присваивается значение 6, что соответствует номеру байта 6. Аналогично, если длина элемента составляет полное слово (т.е. четыре байта), и в элементе 3 выявлен нулевой символ, то 3 умножается на 4, и переменной nullidx присваивается значение 12.
Пример псевдокода процедуры 912 определения результата:
Из данного примера видно, что если переменная-флаг Left/Right направления поиска указывает направление поиска слева направо, то переменной cmpidx присваивается значение переменной idxL, в противном случае переменной cmpidx присваивается значение idxR. Далее, если переменная-флаг поиска нуля zero detect находится в активном состоянии, то переменной resultidx присваивается минимальное из значений переменных cmpidx и nullidx. Затем, если переменная SetCC, т.е. флаг СС установки кода условия, находится в активном состоянии, и значение переменной cmpidx превышает значение переменной nullidx, то переменной СС значения кода условия присваивается значение ноль. В противном случае (т.е. если поиск нуля не выполнялся) переменной resultidx присваивается значение cmpidx.
Затем: если длина элемента составляет байт, то маска element_size_mask длины элемента устанавливается в состояние 11111; если длина элемента составляет два байта, то маска длины элемента устанавливается в состояние 11110; если длина элемента составляет четыре байта, то маска длины элемента устанавливается в состояние 11100.
Далее переменной resultidx присваивается ее же значение (resultidx), логически умноженное на маску длины элемента. Например, если длина элемента составляет полуслово, и переменная resultidx содержит значение 7 индекса байта, то операция resultidx = 00111 AND 11110 (AND - обозначение операции поразрядное логическое И) выдает значение 00110. В результате переменной resultidx присваивается значение 6 (т.е. 00110 в двоичной системе счисления), что совпадает с номером первого байта элемента.
Кроме того, опционально может устанавливаться код условия. Код условия устанавливается, если флаг установки кода условия в команде имеет активное значение, в противном случае код условия не устанавливается. Например, если флаг установлен, то при resultidx=16 коду условия присваивается значение 3; в противном случае если значение элемента вектора А с индексом resultidx меньше значения элемента вектора В с индексом resultidx, то коду условия присваивается значение 1, иначе коду условия присваивается значение 2.
Для 128-разрядного вектора процедура сравнения выполняет, например, только 16 сравнений байтов вместо, например, 256 сравнений. Это дает возможность масштабировать более длинные векторы. Кроме того, направление сравнения (слева/справа) может задаваться во время исполнения, а не кодироваться внутри команды. Кроме того, возвращаемая в результате переменная содержит позицию байта, а не индекс элемента. Кроме того, поддерживаются однобайтные, двухбайтные и четырехбайтные сравнения.
Согласно другому варианту осуществления, поиск нуля производится не в результате проверки условия, а каждый раз при выполнении команды векторного типа для поиска неравнозначного элемента. Процедура поиска нуля, выполняемая в зависимости от проверки условия или всякий раз при исполнении команды, возвращает позицию (например, индекс байта) равного нулю элемента и/или позицию (например, индекс байта) первого различающегося элемента. Согласно одному из вариантов осуществления, число выполняемых сравнений для команды векторного типа для поиска неравнозначного элемента независимо от осуществления соответствует числу байтов в векторе. Например, если длина вектора, в котором ведется поиск или сравнение, составляет шестнадцать байтов, то выполняется не более шестнадцати сравнений, например, в параллельном режиме. В другом варианте осуществления при обнаружении несовпадающего или равного нулю элемента процедура сравнения прекращается.
На фиг. 10 показана схема формата одного из вариантов осуществления команды расчета загрузки до границы блока (мнемонический код команды - LCBB). Эта команда выполняет, например, подсчет числа байтов данных, располагающихся в пространстве памяти между заданным адресом и заданной границей (например, команда подсчитывает число байтов, загруженных в векторный регистр без пересечения заданной границы пространства памяти).
1
2
2
2
3
В одном из примеров команда 1000 расчета загрузки до границы блока содержит: поля 1002а (например, разряды с номерами от 0 до 7) и 1002b (например, разряды 40-47), идентифицирующие команду расчета загрузки до границы блока; поле 1004 регистра (например, разряды 8-11), используемое для указания регистра общего назначения (R); поле 1006 индекса (Х) (например, разряды 12-15); базовое поле 1008 (В) (например, разряды 16-19); поле 1010 смещения (D) (например, разряды 20-31); поле 1012 маски (М) 1012 (например, разряды 32-35). В одном из примеров каждое из полей 1004-1012 является отдельным и независимым от поля (полей) кода операции. Кроме того, в одном из вариантов осуществления указанные поля являются отдельными и независимыми одно от другого; однако согласно другим вариантам осуществления, два и более полей могут объединяться. Дальнейшие сведения об использовании перечисленных полей приводятся ниже.
В одном из примеров выбранные разряды (например, первые два разряда) кода операции, задаваемого полем 1002а кода операции, определяют длину и формат команды. В данном конкретном примере длина составляет три полуслова, и формат команды - регистр-и-индекс-сохранение, с расширенным полем кода операции.
1
Нижний индекс в обозначении поля команды соответствует номеру операнда, к которому это поле относится. Например, нижний индекс 1 в обозначении R поля означает, что это поле относится к первому операнду и т.д. Длина операнда регистра совпадает с длиной самого регистра, которая составляет, например, 128 разрядов.
2
2
2
2
В одном из примеров в команде типа векторный регистр-и-индекс-сохранение для образования адреса второго операнда содержимое регистров общего назначения, указываемых полями Х и В, объединяется с содержимым поля D. В одном из примеров смещение D для команды расчета загрузки до границы блока обрабатывается как 12-разрядное беззнаковое целое число. Адрес второго операнда используется для указания местоположения в пространстве памяти главного запоминающего устройства; однако в данном варианте осуществления он не используется для адресации данных.
3
В одном из вариантов осуществления поле М содержит код, который используется для информирования ЦПУ о границе (размере) блока для вычисления числа байтов, которые возможно загрузить без пересечения границы пространства памяти. Если указано зарезервированное значение, то возникает программное исключение (ошибка) спецификации. Примеры кодов и соответствующие значения границы:
3
В другом примере размер границы не задан в команде, а динамически вычисляется процессором, исполняющим команду. Например, поле М определяет тип границы (например, строка или струнца кэш-памяти и т.д.), и процессор определяет границу в зависимости от этого типа границы и одной или более характеристик процессора (например, длины строки кэш-памяти для процессора, длины страницы для процессора и т.д.). Например, в зависимости от типа границы процессор использует фиксированный размер границы (например, заранее определенный фиксированный для процессора размер строки кэш-памяти или страницы), или, в зависимости от типа границы, сам процессор определяет границу. Например, если тип границы - граница страницы, то процессор обращается к буферу быстрого преобразования адреса, с помощью которого по начальному адресу определяет границу страницы. Существуют также другие примеры осуществления. Например, тип границы может задаваться в другом поле команды или поступать извне по отношению к команде.
При выполнении одного из вариантов осуществления команды расчета загрузки до границы блока в регистр общего назначения, определяемый первым операндом, помещается беззнаковое целое двоичное число (например, 64-разрядное), содержащее число байтов, которые можно загрузить из места расположения второго операнда без пересечения установленной границы блока, ограниченного сверху, например, длиной векторного регистра-получателя (например, 16).
В зависимости от результата выполнения команды опционально устанавливается код условия, например, по правилу:
значение 0 - длина операнда 1 - шестнадцать;
значение 1 - не определено;
значение 2 - не определено;
значение 3 - длина операнда 1 - менее шестнадцати.
2
2
2
В рассмотренном выше примере начальный адрес, с которого начинается счет, определялся как значение в индексном регистре (Х) + значение в базовом регистре (В) + смещение (D); однако в других вариантах осуществления начальный адрес формируется следующим образом: просто как значение в регистре; как адрес команды + смещение, определяемое текстом команды; как значение в регистре + смещение; как значение в регистре + значение в индексном регистре. Здесь приведены только некоторые из возможных примеров.
На фиг. 11 приводятся дальнейшие сведения об одном из вариантов осуществления обработки, связанной с командой расчета загрузки до границы блока. В одном из примеров соответствующий алгоритм реализуется процессором вычислительного окружения.
3
Согласно варианту осуществления вначале на шаге 1100 формируется маска границы (переменная 1104 BdyMask), эта маска используется для определения близости к заданной границе. В одном из примеров для формирования маски границы рассчитывается отрицание дополнения до двух размера границы (переменная 1102 BdySize), например, BdyMask=0-BdySize. Значение переменной 1102 размера границы в одном из примеров задается командой (например, полем М); либо, в другом примере оно определяется вычислительной машиной, как описано в настоящей заявке.
2
2
2
2
2
2
Затем на шаге 1110 вычисляется начальный адрес 1112, который указывает то местоположение в пространстве памяти, начиная с которого должна начаться загрузка данных. Например, начальный адрес 1112 может задаваться: как значение в регистре; как адрес команды плюс смещение, определяемое текстом команды; как значение в регистре плюс смещение; как значение в регистре плюс значение в индексном регистре; как значение в регистре плюс значение в индексном регистре плюс смещение. В рассматриваемой в данном случае команде начальный адрес формируется по значениям в полях Х, В и D. То есть для формирования начального адреса содержимое регистров, указанных в полях Х и В, добавляется к смещению, указанному в поле D. Перечисленные выше способы вычисления начального адреса являются исключительно примерами; наряду с приведенными также возможны иные примеры.
Затем на шаге 1120 вычисляется конечный адрес, по которому загрузка прекращается. Входными данными для этого расчета являются, например, размер границы 1102, начальный адрес 1112, длина вектора 1114 (например, в байтах; например, 16) и маска 1104 границы. Упомянутая длина вектора является длиной соответствующего векторного регистра или иного регистра (например, в байтах; например, 16). В одном из примеров конечный адрес 1122 вычисляется следующим образом:
EndAddr=min(StartAddr+(BdySize-(StartAddr&BdyMask)),StartAddr+vec_size).
Затем на шаге 1130 вычисляется значение переменной-счетчика count, например, как разность значений переменных EndAddr 1122 и StartAddr 1112. В другом примере значение переменной-счетчика count может быть рассчитано по начальному адресу, без использования конечного адреса. В этом примере значение count=min(16, BdySize-(StartAddr AND BdyMask), где число 16 - длина векторного регистра (или иного регистра). В других примерах могут использоваться другие длины векторов.
В одном из вариантов осуществления команда Load to Count Block Boundary используется для определения того, сколько байтов данных было загружено в регистр, например, в векторный регистр. Это значение затем используется для определения длины группы символьных данных, такой как символьная строка с символом окончания.
Согласно варианту осуществления в соответствии с изложенным, тип регистра, в который происходит загрузка данных и для которого вычисляется значение переменной-счетчика count - векторный. В одном из примеров векторного функционала имеется 32 векторных регистра, а регистры других типов могут отображаться на область-квадрант векторных регистров. Например, как показано на фиг. 12, если имеется файл 1200 регистров, содержащий 32 векторных регистра 1202 длиной 128 разрядов каждый, то шестнадцать регистров 1204 с плавающей запятой длиной 64 разряда каждый могут перекрываться с векторными регистрами. Таким образом, например, если изменится содержимое регистра 2 с плавающей запятой, то содержимое векторного регистра 2 также изменится. Для регистров других типов возможны и другие типы отображений.
Выше был подробно описан способ определения длины группы символьных данных, содержащей символ окончания, заключающийся в параллельном анализе символов и не вызывающий ложных программных исключений (ошибок). Как правило, выполнение в параллельном режиме поиска конца строки, заканчивающейся пустым символом, аналогичной строке языка программирования "С", вызывает определенные сложности, как раз и обусловленные тем, что местоположение конца строки неизвестно. Достаточно просто выполнить операцию чтения и оказаться за фактической границей, вызывая тем самым программное исключение (ошибку) доступо к странице памяти. По предыдущим способам в один момент времени загружался только один символ, или использовалась преамбула для выравнивания запросов данных по строке для предотвращения выхода за границы страницы. Обработка одного символа в один момент времени по существу очень медленна. Добавление преамбулы для выравнивания может снизить производительность при обработке коротких строк и добавить операции ветвления, результат которых трудно предсказывать, что также увеличивает задержку.
Использование команды, которая загружает данные в параллельном режиме до заданной границы и дает возможность определить число загруженных символов, а также команды (которая проверяет данные в параллельном режиме) для определения индекса первого символа окончания дает возможность осуществить способ определения длины группы данных с символом окончания (например, с пустым символом) с использованием единственной операции ветвления. Кроме того, обеспечивается быстрая проверка символов в строке в параллельном режиме, а также предотвращение возникновения ложных программных исключений.
Использование одного или более аспектов описанного выше способа обеспечивает повышение производительности, в том числе, сокращение времени выполнения.
В настоящей заявке термины "запоминающее устройство", "главное запоминающее устройство", "пространство памяти", "главная память" (первичная память, т.е. ближайший к ЦПУ уровень иерархии запоминающих устройств, быстродействующие запоминающие устройства, напрямую адресуемые ЦПУ: регистры и кэш-память процессора, а также ОЗУ и системное ПЗУ) используются взаимозаменяемо, если иное не указывается явно или не следует из контекста.
Далее как часть настоящего подробного описания осуществления изобретения приводятся дополнительные сведения, относящиеся к векторному функционалу, в том числе примеры иных команд.
Специалисту в данной области должно быть понятно, что один или более аспектов настоящего изобретения могут быть воплощены в форме системы, способа или компьютерного программного продукта. Соответственно, один или более аспектов настоящего изобретения могут быть осуществлены в виде чисто аппаратного обеспечения, чисто программного обеспечения (в том числе, в виде программы, записанной в ПЗУ, резидентною программного обеспечения, микрокода и т.п.) или в виде комбинации аппаратного и программного обеспечения; для обозначения всех этих вариантов в настоящей заявке могут в общем использоваться термины "схема", "модуль" или "система". Кроме того, один или более аспектов настоящего изобретения могут принимать форму компьютерного программного продукта, осуществленного на одной или более машиночитаемых средах, содержащих машиночитаемый программный код.
Может использоваться любая комбинация одной или более машиночитаемых сред. Машиночитаемой средой может являться машиночитаемая среда хранения данных. Машиночитаемой средой хранения данных может быть, в том числе (но не ограничиваясь): электронная, магнитная, оптическая, электромагнитная, инфракрасная или проводная система, средство или устройство или любая работоспособная комбинация перечисленных сред. Более специфическими примерами машиночитаемых сред хранения данных могут быть, в том числе (но не ограничиваясь): электрическое соединение, содержащее один или более проводников; портативная компьютерная дискета (накопитель на гибких дисках); накопитель на жестких дисках; оперативное запоминающее устройство (ОЗУ); ПЗУ; стираемое программируемое постоянное запоминающее устройство (СППЗУ) или флеш-память; оптоволокно; CD-ROM (от английского Compact Disc Read Only Memory - постоянное запоминающее устройство на компакт-диске); оптическое запоминающее устройство; магнитное запоминающее устройство; любая работоспособная комбинация перечисленных сред. Применительно к настоящей заявке машиночитаемой средой хранения данных может являться любая материальная среда, которая может содержать или хранить программу для использования или коммуникационное соединение с системой, средством или устройством, способным выполнять команды.
На фиг. 13 в одном из примеров компьютерный программный продукт 1300 содержит, например, одну или более нестираемых машиночитаемых сред 1302 хранения данных. Эта среда (среды) 1302 предназначены для хранения средств или логики 1304 машиночитаемого программного кода для предоставления и облегчения использования одним или более аспектами настоящего изобретения.
Программный код, хранящийся на машиночитаемой среде, может быть передан с использованием соответствующей среды, содержащей в том числе (но не ограничиваясь) беспроводную, проводную, кабельную оптоволоконную, радиочастотную и т.п. среду или любую работоспособную комбинацию перечисленных сред.
Компьютерный программный код для выполнения операций одного или более аспектов настоящего изобретения может быть написан на одном или любой комбинации нескольких языков программирования, в том числе, на языках объектно-ориентированного программирования, таких как Java, Smalltalk, С++ или подобных, и на обычных языках процедурного программирования, таких как язык "С", ассемблера или подобных им языках программирования. Программный код может выполняться: полностью на компьютере пользователя; частично на компьютере пользователя как автономный программный пакет; частично на компьютере пользователя и частично на удаленном компьютере; полностью на удаленном компьютере или сервере. В приведенном далее сценарии удаленный компьютер может быть соединен с компьютером пользователя через коммуникационную сеть любого типа, в том числе, локальную вычислительную сеть (ЛВС) или глобальную сеть связи, либо может быть реализовано соединение с внешним компьютером (например, через сеть Интернет при посредничестве поставщика услуг Интернет).
Один или более аспектов настоящего изобретения описываются в настоящей заявке с использованием изображений схем алгоритмов и/или структурных схем способов, средств (систем) и компьютерных программных продуктов согласно вариантам осуществления изобретения. Должно быть понятно, что каждая операция на чертежах схем алгоритмов и/или структурных схем, а также комбинаций операций на чертежах схем алгоритмов и/или структурных схем могут быть реализованы командами компьютерной программы. Эти команды компьютерной программы могут выполняться процессором универсального компьютера, специализированного компьютера или иными средствами обработки данных с программным управлением, образующими машину (вычислительное устройство), таким образом, что команды, выполняемые процессором компьютера или иными средствами обработки данных с программным управлением, формируют среду для осуществления функций (действий), описанных схемой алгоритма и/или операцией или операциями структурной схемы.
Указанные команды компьютерной программы могут также храниться в машиночитаемой среде и могут заставлять компьютер, иное средство обработки данных с программным управлением или иные устройства действовать определенным образом, чтобы команды, хранящиеся в машиночитаемой среде, образовывали программное изделие, в том числе, реализующее команды, которые осуществляют функцию или действуют в соответствии со схемой алгоритма, и/или операцию или операции, показанные на структурных схемах.
Команды компьютерной программы могут также быть загружены в компьютер, иное средство обработки данных с программным управлением или иные устройства для выполнения последовательности операций компьютером, иным средством обработки данных с программным управлением или другими устройствами для организации вычислительного процесса, в результате которого команды, выполняемые на компьютере или ином средстве обработки данных с программным управлением, реализуют процессы для осуществления функции или действия в соответствии со схемой алгоритма и/или операцию или операции, показанные на структурных схемах.
Схемы алгоритмов и структурные схемы, показанные на рисунках, иллюстрируют архитектуру, функциональность и действие возможных вариантов осуществления систем, методов и компьютерных программных продуктов согласно различным вариантам осуществления одного или более аспектов настоящего изобретения. С учетом этого каждая операция (блок) на схемах алгоритмов или структурных схемах может представлять модуль, сегмент или фрагмент кода, содержащий одну или более исполнимых команд для осуществления определенной логической функции или функций. Следует также заметить, что в некоторых альтернативных вариантах осуществления функции, указанные в блоках, могут выполняться в иной последовательности, чем показано на прилагаемых чертежах. Например, две операции, показанные следующими одна за другой, могут фактически выполняться по существу одновременно, либо иногда операции могут выполняться в обратном порядке в зависимости от имеющихся функциональных возможностей. Также далее будет показано, что каждая операция на изображениях структурных схем и/или схем алгоритмов и каждая комбинация операций на изображениях структурных схем и/или схем алгоритмов может быть реализована специализированными аппаратными системами, которые выполняют определенные функции или действия, или комбинациями специализированного аппаратного обеспечения и компьютерных команд.
Кроме того, один или более аспектов настоящего изобретения могут предоставляться, предлагаться, размещаться, администрироваться, обслуживаться и т.п. поставщиком услуг, который предлагает администрирование пользовательских сред. Например, поставщик услуг может создать, поддерживать, обслуживать и т.п. компьютерный код и/или компьютерную инфраструктуру, которая воплощает один или более аспектов настоящего изобретения для одного или более пользователей. За это поставщик услуг может получать от потребителя плату, например, в соответствии с подпиской на услуги и/или договором об оплате. Кроме того или вместо того, поставщик услуг может получать плату от продажи или рекламы от третьих лиц.
Согласно варианту осуществления настоящего изобретения, для реализации одного или более аспектов настоящего изобретения может использоваться приложение (программное обеспечение). Как один из примеров, реализация приложения включает, в том числе, создание компьютерной инфраструктуры, позволяющей осуществить один или более аспектов настоящего изобретения.
Согласно другому варианту осуществления настоящего изобретения, вычислительная инфраструктура может быть организована встраиванием объединяющего машиночитаемого кода в вычислительную систему, и их комбинация позволяет осуществить один или более аспектов настоящего изобретения.
Согласно другому варианту осуществления настоящего изобретения, может быть предусмотрен порядок объединения вычислительной инфраструктуры, содержащий встраивание машиночитаемого кода в компьютерную систему. Компьютерная система имеет в своем составе машиночитаемую среду, которая содержит один или более аспектов настоящего изобретения. Указанный код совместно с компьютерной системой позволяют осуществить один или более аспектов настоящего изобретения.
Следует учитывать, что описанные выше различные варианты осуществления являются всего лишь примерами. Например, один или более аспектов настоящего изобретения могут содержаться в составе и использоваться вычислительными средами, построенными по иной архитектуре. Кроме того, могут использоваться векторы иных длин или другие регистры, а в команды могут вноситься изменения, что не приводит к выходу за пределы сущности настоящего изобретения. Кроме того, для определения длины символьных данных с нулевым символом окончания могут использоваться другие команды, например (но не ограничиваясь) векторного типа для поиска равнозначного элемента. Кроме того, с использованием одного или более аспектов настоящего изобретения может определяться длина данных другого типа, не только символьных данных с нулевым символом окончания.
Кроме того, преимущества от одного или более аспектов настоящего изобретения могут получить другие типы вычислительных сред. Пример подобной среды - система обработки данных, предназначенная для хранения и/или выполнения программного кода, которая содержит по меньшей мере два процессора, соединенных непосредственно или опосредованно с элементами запоминающего устройства через системную шину. Элементы запоминающего устройства содержат, например: локальное запоминающее устройство, используемое при фактическом выполнении программного кода; устройство массовой памяти (запоминающее устройство большого объема); кэш-память (быстродействующее буферное запоминающее устройство для временного хранения информации с целью повышения быстродействия вычислительной системы), обеспечивающую временное хранение по меньшей мере фрагмента программного кода для сокращения числа обращений к устройству массовой памяти для извлечения кода за интервал времени исполнения.
К системе либо непосредственно, либо через промежуточные контроллеры ввода-вывода могут быть подключены устройства ввода-вывода, в том числе (но не ограничиваясь) клавиатура, дисплеи, указательные устройства, запоминающее устройство с прямым доступом, ленточные накопители, CD-ROM, DVD-ROM (от английского Digital Video Disc Read-Only Memory - постоянное запоминающее устройство на цифровом видеодиске), внешние отключаемые запоминающие устройства и прочие запоминающие устройства. Для соединения системы обработки данных с другими системами обработки данных или удаленными принтерами или запоминающими устройствами через промежуточные приватные или публичные сетевые подключения к системе могут подключаться сетевые адаптеры. Примерами сетевых адаптеров могут служить, в том числе, телефонные модемы, кабельные модемы, платы адаптеров сети Ethernet.
На фиг. 14 представлены характерные компоненты хост-компьютерной системы 5000 для осуществления одного или более аспектов настоящего изобретения. Характерный хост-компьютер 5000 содержит одно или более ЦПУ 5001, соединенных линиями передачи данных с запоминающим устройством компьютера (т.е. с главным запоминающим устройством) 5002, а также с интерфейсами ввода-вывода запоминающих устройств 5011 и сетей 5010 для связи с другими компьютерами или сетями хранения данных (специализированными высокоскоростными сетями, объединяющими устройства хранения данных и серверы) и т.п. ЦПУ 5001 совместимо с архитектурой, обладающей собственным набором команд и функциональными возможностями. ЦПУ 5001 может обладать средством 5003 динамического преобразования адресов для преобразования адресов, использующихся в программах (виртуальных адресов) в реальные адреса запоминающего устройства. Динамическое преобразование адресов обычно содержит буфер 5007 ассоциативной трансляции для кэширования (временного хранения) результатов трансляции, благодаря чему последующие обращения к блоку памяти запоминающего устройства 5002 не приведут к задержке трансляции адресов. Как правило, кэш-память 5009 может быть организована иерархически, т.е. содержать большую по объему часть, доступную более чем одному ЦПУ, и меньшую по объему, более быстродействующую (более низкого уровня) часть, служащую буфером между большей частью кэш-памяти и каждым ЦПУ. В некоторых вариантах осуществления кэш-память более низкого уровня разделяется для организации нескольких низкоуровневых пространств кэшпамяти для выборки команд и доступа к данным. Согласно варианту осуществления команда выбирается из запоминающего устройства 5002 устройством 5004 выборки команд через кэш-память 5009. Указанная команда декодируется в устройстве 5006 декодирования команд и направляется (в некоторых вариантах осуществления - совместно с другими командами) в устройство или устройства 5008 выполнения команд. Как правило, используются несколько устройств 5008 выполнения команд, например, арифметическое устройство, устройство выполнения операций с плавающей запятой, устройство ветвления команд. Команда, выполняемая исполнительным устройством, по мере необходимости обращается к операндам команды, указанным регистрам или запоминающему устройству. Если требуется доступ (загрузка или хранение) к операндам из запоминающего устройства 5002, то доступ контролируется устройством 5005 загрузки-хранения под управлением выполняемой команды. Команды могут выполняться в аппаратных схемах или с помощью внутреннего микрокода (хранящегося в ПЗУ) или комбинацией этих двух способов.
Как было указано, в состав компьютерной системы входит информация, хранящаяся в локальном (или главном) запоминающем устройстве, а также средства адресации, защиты, ссылок и учета изменений. Некоторые варианты правил адресации содержат формат адресов, концепцию адресных пространств, различные типы адресов, а также способ, по которому адреса одного типа преобразуются в адреса другого типа. Часть главного запоминающего устройства содержит постоянно выделенные области памяти. Главное запоминающее устройство обеспечивает системе быстродействующее хранение данных с прямой адресацией. И данные, и программы должны быть загружены из устройств ввода в главное запоминающее устройство перед тем, как смогут быть обработаны.
Главное запоминающее устройство может содержать одно или более буферных запоминающих устройств меньшего объема с более быстрым доступом, которые иногда называются устройствами кэш-памяти. Устройство кэш-памяти обычно физически связано с ЦПУ или процессором ввода-вывода. Различия в физическом устройстве и использовании различных типов запоминающих устройств обычно незаметны для программы (за исключением различия в быстродействии).
Для операций с командами и данными могут использоваться отдельные устройства кэш-памяти. Информация в устройствах кэш-памяти содержится в виде непрерывной последовательности байтов в пределах целостного пространства памяти, называемого блоком данных кэш-памяти или строкой данных кэш-памяти (коротко - строкой). Модель может сформировать команду EXTRACT CACHE ATTRIBUTE (от англ.: получить атрибут кэш-памяти), которая возвращает длину строки кэш-памяти в байтах. Также модель может сформировать команды PREFETCH DATA и PREFETCH DATA RELATIVE LONG, которые влияют на выборку данных из запоминающего устройства в кэш-память данных или команд или на удаление данных из кэш-памяти.
Пространство памяти запоминающего устройства представляется в виде протяженных горизонтально ориентированных строк двоичных символов. Для большинства операций доступ к запоминающему устройству выполняется в последовательности слева направо. Строки двоичных символов подразделяются на группы по восемь бит. Группа из восьми бит называется байтом, байт является основным образующим элементом всех форматов представления информации. Каждое местоположение байта в запоминающем устройстве обозначается уникальным неотрицательным целым числом, называемым адресом местоположения данного байта или коротко - адресом. Адресация ячеек памяти - последовательная, т.е. адреса соседних ячеек хранения байтов отличаются на единицу. Адреса начинаются с нуля для крайней левой ячейки и возрастают слева направо. Адреса - беззнаковые двоичные целые числа длиной 24, 31 или 64 разряда.
Информация передается между запоминающим устройством и ЦПУ или подсистемой канала передачи данных по одному байту или по группе байтов в один момент времени. Если иное не оговорено, то, например, в архитектуре z/Architecture группа байтов в запоминающем устройстве адресуется по крайнему левому байту группы. Число байтов в группе либо определено заранее, либо однозначно указывается выполняемой операцией. В операциях с ЦПУ группа байтов называется полем. Внутри каждой группы байтов, например, в архитектуре z/Architecture, биты нумеруются в направлении слева направо. В архитектуре z/Architecture крайние левые биты иногда называют старшими, крайние правые биты - младшими. Следует учитывать, что номера битов не являются адресами запоминающего устройства, адресуются только байты. Для обращения к отдельным битам из состава байта осуществляется доступ к целому байту запоминающего устройства. Биты в байте нумеруются слева направо от нуля до семи (например, в архитектуре z/Architecture). Примеры нумерации битов в пределах адреса: 8-31 или 40-63 для 24-разрядного адреса; 1-31 или 33-63 для 31-разрядного адреса; 0-63 для 64-разрядного адреса. В любом другом формате групп байтов фиксированной длины разряды, образующие формат, нумеруются последовательно начиная с нуля. В целях обнаружения шибок и, предпочтительно, их коррекции с каждым байтом или с каждой группой байтов может передаваться один или более дополнительных проверочных битов. Такие проверочные биты формируются внутри вычислительной системы автоматически, они не могут непосредственно контролироваться программой. Емкость запоминающего устройства выражается числом байтов. Если длина поля запоминающего устройства определяется кодом операции, входящим в состав команды, то считается, что поле имеет фиксированную длину, которая может составлять один, два, четыре, восемь или 16 байтов. В некоторых командах могут использоваться поля большей длины. Если длина поля запоминающего устройства не определена заранее, а явно указывается, то говорят, что поле имеет переменную длину. Длина операндов с переменной длиной может изменяться с инкрементом в один байт (или, для некоторых команд, с инкрементом, кратным двум байтам или кратным другому числу байтов). Когда информация помещается в запоминающее устройство, то заменяется содержимое только тех ячеек хранения байтов запоминающего устройства, которые входят в состав поля-получателя, причем это справедливо даже в том случае, когда ширина физического канала передачи данных к запоминающему устройству превышает длину сохраняемого поля.
Определенные элементы информации должны храниться в целостном пространстве памяти запоминающего устройства. Пространство памяти считается целостным применительно к элементу информации, если его адрес кратен длине элемента информации в байтах. Предусмотрены специальные названия для полей из двух, четырех, восьми и шестнадцати байтов. Полусловом называется элемент памяти из двух следующих друг за другом байтов, полуслово является основным составляющим элементом команд. Словом называется элемент памяти из четырех следующих друг за другом байтов. Двойным словом называется элемент памяти из восьми следующих друг за другом байтов. Четверным словом называется элемент памяти из шестнадцати следующих друг за другом байтов. Если адрес запоминающего устройства указывает на полуслово, слово, двойное слово или четверное слово, то в двоичном представлении адрес содержит справа соответственно один, два, три или четыре бита, равных нулю. Команды занимают двухбайтные целостные элементы памяти. Операнды большинства команд не имеют ограничений по размещению в памяти.
В устройствах, в которых используется раздельное кэширование команд и данных (операндов), может возникать значительная задержка, если программа выполняет запись в строку кэш-памяти, из которой производится последовательная выборка команд, причем вне зависимости от того, изменяются ли эти команды в результате записи.
Согласно варианту осуществления изобретение может быть осуществлено программным обеспечением, называемым также лицензионным внутренним кодом, содержимым ПЗУ, микрокодом, милликодом, пикокодом и т.п., причем каждый из терминов может относиться к одному или более аспектам настоящего изобретения. На фиг. 14 процессор 5001 хост-компьютерной системы 5000 может обращаться к коду программного обеспечения, содержащему один или более аспектов настоящего изобретения и хранящемуся в долговременных запоминающих устройствах 5011, таких как привод CD-ROM, привод ленточного накопителя, накопитель на жестких дисках. Программный код может располагаться на любой из множества известных машиночитаемых сред, предназначенных для использования в системе обработки данных, таких как гибкий диск, накопитель на жестких дисках или CD-ROM. Код может распространяться на подобной машиночитаемой среде или поставляться пользователям из запоминающего устройства 5002 компьютера или из запоминающего устройства одного компьютера через сеть 5010 другим компьютерным системам для их пользователей.
Код программного обеспечения содержит операционную систему, которая управляет функционированием и взаимодействием различных компонентов компьютера и одной или более прикладных программ. Программный код обычно передается из долговременного запоминающего устройства 5011 в относительно более быстродействующее запоминающее устройство 5002 компьютера, из которого код доступен процессору 5001 для обработки. Приемы и способы размещения кода программного обеспечения в пространстве памяти запоминающего устройства, на физической машиночитаемой среде и/или передача кода программного обеспечения через сети передачи данных достаточно хорошо известны и в настоящей заявке далее обсуждаться не будут. Программный код, созданный и размещенный на материальном носителе, в том числе (но не ограничиваясь) на электронных модулях памяти (ОЗУ), запоминающих устройствах флеш-памяти, CD-ROM, DVD-ROM, магнитной ленте и т.п. часто называют компьютерным программным продуктом. Информация со среды-носителя компьютерного программного продукта обычно считывается схемой обработки предпочтительно в компьютерной системе с целью выполнения программного кода схемой обработки.
На фиг. 15 показана схема примера рабочей станции или аппаратной части сервера, в которых могут быть осуществлены один или более аспектов настоящего изобретения. На фиг. 15 система 5020 содержит типичную основную компьютерную систему 5021, например, персональный компьютер, рабочую станцию или сервер, в состав которой, в свою очередь, могут входить периферийные устройства. Основная компьютерная система 5021 содержит один или более процессоров 5026 и шину передачи данных, используемую для подключения и осуществления соединения между процессором или процессорами 5026 и другими компонентами системы 5021 по хорошо известной методике. Шина соединяет процессор 5026 с запоминающим устройством 5025 и запоминающим устройством 5027 длительного хранения, которое может содержать, например, дисковый накопитель (в свою очередь содержащий, например, любые магнитные среды хранения данных, CD-ROM, DVD-ROM или устройства флеш-памяти) или ленточный накопитель. Система 5021 может также содержать адаптер интерфейса пользователя, который соединяет микропроцессор 5026 через шину с одним или более интерфейсными устройствами, такими как клавиатура 5024, мышь 5023, принтер или сканер 5030 и/или с устройствами интерфейса пользователя других типов, такими как сенсорный экран, устройство цифрового координатного ввода планшетного типа и т.п. Шина также обеспечивает подключение к микропроцессору 5026 через адаптер дисплея устройства 5022 отображения, такого как жидкокристаллический экран или монитор.
Система 5021 может обмениваться данными с другими компьютерами или сетями компьютеров с помощью сетевого адаптера, способного осуществлять соединение 5028 с сетью 5029 передачи данных. Примерами сетевых адаптеров являются адаптеры сетей типа Token ring (от англ.: маркерное кольцо) и Ethernet, а также модемы. Система 5021 может обмениваться данными с использованием беспроводного интерфейса, такого как адаптер CDPD (от английского Cellular Digital Packet Data - цифровая пакетная передача данных по сети сотовой связи). Система 5021 может быть соединена с другими компьютерами в ЛВС или глобальную вычислительную сеть, либо система 5021 может выступать в качестве клиента в системе клиент-сервер вместе с другим компьютером и т.д. Все подобные конфигурации наряду с соответствующим коммуникационным аппаратным и программным обеспечением известны достаточно хорошо.
На фиг. 16 показана схема сети 5040 обработки данных, с помощью которой могут быть осуществлены один ли более аспектов настоящего изобретения. Сеть 5040 обработки данных может содержать набор индивидуальных сетей, таких как беспроводные и проводные сети, в состав каждой из которых может входить множество индивидуальных рабочих станций 5041, 5042, 5043, 5044. Кроме того, специалисты в данной области техники должны понимать, что может быть задействована одна или более ЛВС, причем ЛВС могут содержать набор рабочих станций, соединенных с хост-процессором.
На фиг. 16 сети могут также содержать компьютеры-мэйнфреймы или серверы, такие как компьютер-шлюз (клиентский сервер 5046) или сервер приложений (удаленный сервер 5048, который может обращаться к хранилищу данных и к которому может также осуществляться доступ непосредственно с рабочей станции 5045). Компьютер-шлюз 5046 служит точной доступа в каждую индивидуальную сеть. Шлюз требуется при переходе от одного сетевого протокола на другой. Компьютер-шлюз 5046 предпочтительно может быть подключен к другой сети, например, к сети 5047 Интернет с помощью канала передачи данных. Компьютер-шлюз 5046 также может быть непосредственно соединен с одной или более рабочих станций 5041, 5042, 5043, 5044 с использованием канала передачи данных. Компьютер-шлюз может быть реализован на основе сервера IBM eServer™ System z, предлагаемого корпорацией International Business Machines Corporation.
На фиг. 15 и 16 процессор 5026 системы 5020 может обращаться к коду программного обеспечения, в котором могут быть осуществлены один или более вариантов настоящего изобретения и который располагается на запоминающем устройстве 5027 долговременного хранения, таком как привод CD-ROM или накопитель на жестких дисках. Код программного обеспечения для его использования системой обработки данных может располагаться на любой из множества известных машиночитаемых сред, таких как гибкий диск, накопитель на магнитных дисках или CD-ROM. Код может предоставляться на такой машиночитаемой среде или может предоставляться пользователям 5050, 5051 компьютерным системам по сети передачи данных из запоминающих устройств другой компьютерной системы.
В другом варианте код программного обеспечения может располагаться в запоминающем устройстве 5025, и процессор 5026 может обращаться к этому коду по шине процессора. Такой код программного обеспечения содержит операционную систему, которая управляет функционированием и взаимодействием различных компонентов компьютера и одной или более прикладных программ 5032. Программный код обычно передается из запоминающего устройства 5027 в относительно более быстродействующее запоминающее устройство 5025 компьютера, из которого код доступен процессору 5026 для обработки. Приемы и способы размещения кода программного обеспечения в пространстве памяти запоминающего устройства, на физической машиночитаемой среде и/или передача кода программного обеспечения через сети передачи данных достаточно хорошо известны и в настоящей заявке далее обсуждаться не будут. Программный код, созданный и размещенный на материальном носителе, в том числе (но не ограничиваясь) на электронных модулях памяти (ОЗУ), запоминающих устройствах флеш-памяти, CD-ROM, DVD-ROM, магнитной ленте и т.п. часто называют компьютерным программным продуктом. Информация со среды-носителя компьютерного программного продукта обычно считывается схемой обработки, предпочтительно, в компьютерной системе с целью выполнения схемой обработки.
Процессору наиболее доступна кэш-память низшего уровня (первого уровня; обозначение первого уровня - L1), которая обычно обладает наибольшим быстродействием и меньшим объемом по сравнению с процессорной кэш-памятью других уровней. Уровень главного запоминающего устройства считается наивысшим (уровень 3, обозначение L3, если всего предусмотрено три уровня). Кэш-память низшего уровня часто разделяется на кэш-память команд I-кэш (от английского Instructions cache - кэш-память команд) для хранения предназначенных для исполнения команд и кэш-память данных D-кэш (от английского Data cache - кэш-память данных), предназначенную для хранения операндов.
На фиг. 17 показан пример осуществления процессора 5026. Как правило, для буферизации блоков информации запоминающего устройства используется одноуровневая или многоуровневая кэш-память 5053, что позволяет увеличить производительность процессора. Кэш-память 5053 представляет собой быстродействующий буфер, хранящий строки данных главного запоминающего устройства, которые, вероятно, должны использоваться в будущем. Как правило, длина строк данных в кэш-памяти составляет 64, 128 или 256 байтов. Часто применяются отдельные функциональные узлы кэш-памяти для буферизации команд и данных. Для поддержания когерентности содержимого кэш-памяти, т.е. для синхронизации копий строк данных в главном запоминающем устройстве и в кэш-памяти часто применяются различные хорошо известные снуп-алгоритмы (от английского Snoop algorithm, специальный алгоритм поиска необходимых данных в кэш-памяти). Главное запоминающее устройство 5025 вычислительной системы часто также рассматривается как кэш-память. В вычислительной системе с четырьмя уровнями кэш-памяти 5053 главное запоминающее устройство 5025 иногда рассматривается как кэш-память пятого уровня (L5), поскольку оно обычно обладает большим быстродействием по сравнению с быстродействием большинства доступных вычислительной системе энергонезависимых запоминающих устройств - запоминающих устройств с прямым доступом, ленточных запоминающих устройств с последовательным доступом и т.п. и хранит только часть данных указанных устройств. Главное запоминающее устройство 5025 "кэширует" (буферизирует) страницы данных, которые загружаются и выгружаются из него операционной системой.
Программный счетчик (счетчик команд) 5061 содержит адрес следующей подлежащей исполнению команды. Программный счетчик в процессоре, построенном по архитектуре z/Architecture, является 64-разрядным, его длина может быть сокращена до 31 или до 24 разрядов для поддержки предыдущих ограничений на длину адреса. Как правило, программный счетчик входит в состав слова состояния процессора (ССП) компьютера, поскольку его содержимое требуется сохранять при переключении задач. Так, выполнение программы при некотором значении программного счетчика может быть прервано, например, операционной системой (выполнение переключается от окружения программы к окружению операционной системы). В то время, пока программа неактивна, значение счетчика программ сохраняется в ССП программы, и при выполнении задачи операционной системы используется счетчик программ ССП операционной системы. Как правило, программный счетчик увеличивается на величину, равную длине в байтах исполняемой в данный момент команды. Команды типа RISC (от английского Reduced Instruction Set Computing - вычисления с сокращенным набором команд), как правило, имеют фиксированную длину, в то время как команды типа CISC (от английского Complex Instruction Set Computing - вычисления со сложным набором команд), как правило, имеют переменную длину. Команды в архитектуре IBM z/Architecture относятся к типу CISC, их длина составляет 2, 4 или 6 байтов. Значение в программном счетчике 5061 изменяется либо операцией переключения задач, либо при выполнении алгоритмической операции ветвления, например, по команде ветвления. При операции переключения задачи текущее значение программного счетчика сохраняется в ССП вместе с другой информацией о состоянии выполнявшейся программы (в частности, коды состояния), после чего загружается новое значение программного счетчика, указывающее на команду нового программного модуля, подлежащего исполнению. Операция ветвления, используемая в программе при принятии решений или выполнении цикла, выполняется путем загрузки в программный счетчик 5061 результата команды ветвления.
Как правило, для выборки команд по указанию процессора 5026 применяется устройство 5055 выборки команд. Устройство выборки команд выбирает команду в порядке следования либо команду, на которую указывает команда ветвления, либо по указанию о переключении задачи - очередную команду программы. В современных устройствах выборки команд часто применяются упреждающие методы для спекулятивной выборки команд, основанные на гипотезе о том, что заблаговременно выбранные команды могут потребоваться в будущем. Например, устройство выборки может загрузить 16 байтов команд, в число которых входят следующая по очереди команда и, кроме того, байты команд, следующих за ней.
Затем выбранные команды выполняются процессором 5026. Согласно варианту осуществления выбранная команда (команды) передаются на устройство 5056 диспетчеризации. Устройство диспетчеризации декодирует команду (команды) и передает информацию о декодированной команде (командах) далее на устройства 5057, 5058, 5060. Исполнительный блок 5057, как правило, принимает информацию о декодированных арифметических операциях от устройства 5055 выборки команд и выполняет арифметические операции над операндами согласно коду операции команды. Операнды передаются в исполнительное устройство 5057 предпочтительно либо из запоминающего устройства 5025, либо из регистров 5059, либо извлекаются из внутреннего поля выполняемой команды. Результат выполнения команды сохраняется либо в запоминающем устройстве 5025, либо в регистрах 5059, либо в ином аппаратном обеспечении вычислительной системы (в управляющих регистрах, регистрах ССП и т.п.).
Как правило, процессор 5026 снабжен одним или более устройствами 5057, 5058, 5060, предназначенными для выполнения указанной командой операции. На схеме, показанной на фиг. 18А, исполнительное устройство 5057 может обмениваться информацией с регистрами общего назначения 5059, устройством 5056 декодирования и диспетчеризации, устройством 5060 загрузки-хранения и другими устройствами 5065 процессора с помощью интерфейсной логики 5071. В исполнительном устройстве 5057 для временного хранения информации, предназначенной для обработки арифметическо-логическим устройством (АЛУ) 5066, могут применяться различные схемы регистров 5067, 5068, 5069. АЛУ выполняет арифметические операции, такие, как сложение, вычитание, умножение и деление, а также логические операции, такие как конъюнкция, сложение по модулю 2, сдвиг и циклический сдвиг. АЛУ предпочтительно поддерживает специализированные операции, зависящие от особенностей архитектуры. Прочие схемы 5072 могут обеспечивать другие функции, в том числе, например, коды условий и логику поддержки восстановления. Как правило, результат операции, выполненной АЛУ, сохраняется в схеме 5070 регистра вывода, которая может передавать указанный результат набору других функций обработки. Существует множество схем построения процессорных устройств, и настоящее описание предназначено исключительно для пояснения одного из вариантов осуществления.
Например, команда арифметического сложения (команда ADD) может выполняться в исполнительном устройстве 5057, позволяющем выполнять арифметические и логические операции, в то время как, например, команды с плавающей запятой могут выполняться в исполнительном устройстве команд с плавающей запятой, обладающем соответствующими возможностями. Исполнительное устройство предпочтительно работает с операндами, идентифицируемыми по команде, т.е. по выполняемой функции над операндами, определяемой кодом операции. Например, команда ADD может выполняться исполняющим устройством 5057 над операндами, располагающимися в двух регистрах 5059, идентифицируемых по входящим в состав команды полям регистров.
Исполнительное устройство 5057 выполняет арифметическое сложение двух операндов и сохраняет результат операции в третьем операнде, причем указанный третий операнд может располагаться в третьем регистре или в одном из регистров, в которых располагались исходные операнды. Исполнительное устройство предпочтительно использует АЛУ 5066, которое способно выполнять различные логические функции, такие как сдвиг, циклический сдвиг, конъюнкцию, дизъюнкцию, сложение по модулю 2, а также различные арифметические операции, в том числе сложение, вычитание, умножение, деление. Некоторые разновидности АЛУ 5066 проектируются для скалярных операций, а некоторые - для операций с плавающей запятой. В зависимости от архитектуры данные могут представляться в обратном порядке следования битов (т.е. наименее значимому биту соответствует наибольший адрес) или в прямом порядке следования битов (т.е. наименее значимому биту соответствует наименьший адрес). В архитектуре IBM z/Architecture для представления данных используется обратный порядок следования битов. Числа со знаком зависимости от архитектуры могут храниться в виде знака и значения числа, в виде дополнения числа до единицы или дополнения до двух. Представление чисел в виде дополнения до двух обладает преимуществом, поскольку в этом случае в АЛУ не требуется предусматривать отдельную функцию вычитания: для положительных и отрицательных чисел, представленных в форме дополнения до двух, требуется только операция сложения. Числа обычно описываются в сокращенной форме, как блоки длиной, например, 4 килобайта: 12-разрядное поле определяет адрес блока длиной 4096 байтов.
Как показано на фиг. 18Б, информация о команде ветвления при выполнении такой команды обычно передается в устройство 5058 ветвления, которое часто использует алгоритм предсказания ветвления, такой как таблица 5082 истории ветвления, для предсказания результата ветвления еще до того, как будут завершены другие условные операции. В этом случае ветвь алгоритма - возможный исход текущей команды ветвления будет загружена и спекулятивно выполнена до того, как будет завершено выполнение условных операций. Когда выполнение условных операций завершится, то спекулятивно выполненные команды ветви алгоритма либо будут использованы, либо будут отброшены в зависимости от условий операции принятия решения и результатов спекулятивно выполненных операций. Типичная команда ветвления может проверять коды условий, и если коды условий удовлетворяют требованию ветви команды ветвления, то переходить по адресу соответствующей ветви. Адрес перехода может быть рассчитан на основе различных чисел, в том числе, например, содержащихся в полях регистров или во внутренних полях команды. Устройство 5058 ветвления может использовать АЛУ 5074, содержащее набор схем 5075, 5076, 5077 входных регистров и схему 5080 выходного регистра. Устройство 5058 ветвления может обмениваться информацией с регистрами 5059 общего назначения, устройством 5056 декодирования и диспетчеризации или, например, другими схемами 5073.
Выполнение группы команд может быть прервано по ряду причин, в том числе, например: по команде смены задачи от операционной системы; при возникновении программного исключения (события, возникшего в процессе выполнения программы) или ошибки, вызывающих переключение задач; сигнала прерывания ввода-вывода, приводящего к переключению задач; многопоточной активности многих программ (в многопоточных вычислительных системах). Операция переключения задач предпочтительно сохраняет информацию состояния о программе, выполнявшейся до настоящего момента времени, после чего загружает информацию о состоянии другой запускаемой программы. Информация о состоянии может храниться, например, в регистрах аппаратного обеспечения либо в запоминающем устройстве. Информация о состоянии предпочтительно содержит: значение программного счетчика, указывающее на следующую подлежащую выполнению команду; коды условий; информацию о трансляции пространства памяти; содержимое собственных регистров вычислительной системы. Переключение задач может выполняться аппаратными схемами, прикладными программами, программами операционной системы или кодом в ПЗУ (микрокодом, пикокодом или лицензированным внутренним кодом) по отдельности или совместно.
Процессор обращается к операндам в соответствии с методами, определенными командой. Команда может предоставить в качестве операнда значение, содержащееся в части команды, может предоставить одно или более полей регистров, явно указывающих либо на регистры общего назначения или на специальные регистры (например, на регистры с плавающей запятой). Команда может косвенно указывать на регистры, идентифицируемые в соответствии с кодом операции как операнды. Команда может использовать в качестве операндов ячейки памяти. На местоположение операнда в пространстве памяти может указывать содержимое регистра, поля из состава команды или комбинация данных в регистрах и в поле команды, как, например, это реализовано в функционале длинного размещения в архитектуре z/Architecture, в котором команда определяет, например, базовый регистр, регистр индекса и поле внутри команды (поле смещения), объединенное содержимое которых даст адрес операнда в запоминающем устройстве. Здесь подразумевается местоположение в главном запоминающем устройстве, если явно не оговорено иное.
На фиг. 18В процессор обращается к запоминающему устройству, используя устройство 5060 загрузки-хранения. Устройство 5060 загрузки-хранения может выполнять операцию ввода путем получения адреса требуемого операнда в запоминающем устройстве 5053 и загрузки операнда в регистр 5059 или другую ячейку запоминающего устройства 5053 либо может выполнять операцию сохранения путем получения адреса требуемого операнда в запоминающем устройстве 5053 и записи данных, полученных из регистра 5059 или другой ячейки запоминающего устройства 5053, в соответствующую ячейку запоминающего устройства 5053. Устройство 5060 загрузки-хранения может действовать спекулятивно и может обращаться к запоминающему устройству в последовательности, не соответствующей той, которая определяется порядком следования команд. Однако устройство 5060 загрузки-хранения должно предоставлять данные таким образом, чтобы команды выполнялись в установленном программой порядке. Устройство 5060 загрузки-хранения может обмениваться данными с регистрами 5059 общего назначения, устройством декодирования и диспетчеризации 5056, интерфейсом 5053 кэш-память -запоминающее устройство или другими функциональными узлами 5083 и содержать в своем составе различные схемы регистров, АЛУ 5085 и управляющую логику 5090 для вычисления адресов хранения и формирования конвейерной последовательности данных для обеспечения правильной очередности выполнения команд. В данной области техники хорошо известно, что некоторые операции могут выполняться в порядке, отличном от установленного, однако при этом устройство выборки и хранения должно действовать таким образом, чтобы выполненные в ином порядке операции представлялись программе будто бы выполненными в правильном порядке.
Адреса, которыми оперирует прикладная программа, являются предпочтительно виртуальными. Для обозначения виртуальных адресов иногда используются термины "логические адреса" и "эффективные адреса". Указанные виртуальные адреса виртуальны в том смысле, что они преобразуются в адресное пространство физической памяти с использованием одной из множества технологий трансляции динамических адресов, в том числе (но не ограничиваясь) простым добавлением значения смещения как префикса к виртуальному адресу, преобразованием виртуальных адресов в соответствии с одной или более таблиц трансляции, причем таблицы трансляции предпочтительно состоят по меньшей мере из отдельной таблицы сегментов и отдельной таблицы страниц или из комбинации этих таблиц, предпочтительно такой, что таблица сегментов содержит запись, указывающую на таблицу страниц. В архитектуре z/Architecture предусмотрена иерархия трансляции, в том числе, таблица первой области, таблица второй области, таблица третьей области, таблица сегментов и, опционально, таблица страниц. Производительность трансляции адресов часто повышается при использовании буфера быстрого преобразования адреса, который содержит записи, отображающие виртуальные адреса на адреса ячеек физической памяти. Записи создаются, когда процедура динамической трансляции адресов транслирует виртуальный адрес с использованием таблиц трансляции. При последующем обращении по виртуальному адресу вместо последовательных обращений к медленной таблице преобразования адреса может использоваться запись в буфере быстрого преобразования адреса. Содержимое буфера быстрого преобразования адреса может поддерживаться различными алгоритмами замены, в том числе, алгоритмом удаления дольше всех неиспользовавшихся элементов.
В многопроцессорной системе каждый процессор отвечает за взаимное блокирование совместно используемых ресурсов, таких как устройства ввода-вывода, кэш-память, буфер быстрого преобразования адреса, запоминающее устройство, что необходимо для обеспечения когерентности информации. Как правило, для поддержания когерентности содержимого кэш-памяти используются снуп-технологии. В снуп-технологиях для упрощения использования каждая строка кэш-памяти может быть помечена как находящаяся в одном из состояний совместного использования, в состоянии эксклюзивного использования, в измененном состоянии, в недостоверном состоянии и т.п.

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

В частности, команды, присущие архитектуре компьютеров-мейнфреймов, часто используются программистами (в настоящее время, как правило, пользующимися языком программирования "С") через приложения-компиляторы. Указанные команды, хранящиеся в машиночитаемой среде, могут выполняться в собственной вычислительной среде на сервере, построенном по архитектуре корпорации IBM z/Architecture, или же на вычислительных машинах, построенных по другим архитектурам. Эти команды могут эмулироваться на существующих и на будущих серверах-мейнфреймах корпорации IBM и на других вычислительных машинах IBM (например, на серверах типа Power Systems и System x). Указанные команды могут выполняться на вычислительных машинах, работающих под управлением операционной системы Linux и использующих аппаратное обеспечение производства предприятий IBM, Intel, AMD™ и др. Помимо указанного аппаратного обеспечения в рамках архитектуры z/Architecture и операционной системы Linux, могут применяться вычислительные машины с эмуляторами Hercules (программный эмулятор мейнфреймов IBM и совместимых), UMX или FSI (от англ.: Fundamental Software, Inc.), при этом выполнение обычно осуществляется в режиме эмуляции. В режиме эмуляции программа-эмулятор выполняется собственным (физическим) процессором вычислительной системы и имитирует архитектуру эмулируемого процессора.
Как правило, собственный процессор хост-вычислительной системы выполняет программное обеспечение-эмулятор, в состав которого входят программы из ПЗУ или собственная операционная система, необходимые для имитации эмулируемого процессора. Для эмулируемой архитектуры программное обеспечение-эмулятор отвечает за выборку и выполнение команд. Программное обеспечение-эмулятор имитирует программный счетчик для отслеживания границ команд. Программное обеспечение-эмулятор может в один момент времени выбирать одну или более команд в формате эмулируемой вычислительной машины и преобразовывать указанные одну или более команд в соответствующую группу команд в собственном формате хост-вычислительной машины для выполнения собственным процессором. Команды эмулируемой процессорной архитектуры могут кэшироваться (т.е. буферизироваться с помощью устройства кэш-памяти), благодаря чему преобразование может выполняться более быстро. Тем не менее, программное обеспечение-эмулятор должно поддерживать правила архитектуры эмулируемой процессорной архитектуры, чтобы обеспечить корректность выполнения операционной системы и приложений, предназначенных для эмулируемого процессора. Более того, программное обеспечение-эмулятор должно предоставлять вычислительные ресурсы, понятные для эмулируемой процессорной архитектуры, в том числе (но не ограничиваясь) управляющие регистры, регистры общего назначения, регистры с плавающей запятой, функцию динамической трансляции адресов, включая, например, таблицы сегментов и таблицы страниц, механизмы прерываний, механизмы переключения задач, часы времени суток, интерфейсы к подсистемам ввода-вывода, благодаря чему операционная система или прикладная программа, разработанные для выполнения на эмулируемом процессоре, смогут быть выполнены на собственном (физическом) процессоре, оснащенном программным обеспечением-эмулятором.
Конкретная эмулируемая команда декодируется, и для выполнения команды вызывается соответствующая подпрограмма. Для имитации эмулируемого процессора применяется функция программного обеспечения-эмулятора, например, в виде подпрограммы, написанной на языке "С", либо программа-драйвер, либо используется иной способ осуществления драйвера конкретного аппаратного обеспечения, о чем специалистам в данной области станет ясно после изучения описания предпочтительного варианта осуществления. Различные варианты программного и аппаратного осуществления эмуляции команд, формат которых предназначен для вычислительных систем с архитектурой, отличной от архитектуры хост-вычислительной системы, раскрыты специалистам в данной области в многочисленных патентах, в том числе (но не ограничиваясь): в патенте US 5551013 "Multiprocessor for Hardware Emulation" (Микропроцессор для эмуляции аппаратного обеспечения), авторы Beausoleil и др.; в патенте US 6009261 "Preprocessing of Stored Target Routines for Emulating Incompatible Instruction on a Target Processor" (Предобработка хранящихся целевых процедур для эмулируемых встроенных команд на целевом процессоре), авторы Scalzi и др.; в патенте US 5574873 "Decoding Guest Instruction to Directly Access Emulation Routines that Emulate the Guest Instructions" (Декодирование гостевой команды для эмуляционных процедур прямого доступа, которыми эмулируются гостевые команды), авторы Davidian и др.; в патенте US 6308255 "Symmetrical Multiprocessing Bus and Chipset Used for Coprocessor Support Allowing Non-Native Code to Run in a System" (Симметричная микропроцессорная шина и набор микросхем, используемые для поддержки сопроцессора, позволяющие выполнять инородный код в системе), авторы Gorishek и др.; в патенте US 6463582 "Dynamic Optimizing Object Code Translator for Architecture Emulation and Dynamic Optimizing Object Code Translation Method" (Динамический оптимизирующий транслятор объектного кода для эмуляции архитектуры и способ динамической оптимизирующей трансляции объектного кода), авторы Lethin и др.; в патенте US 5790825 "Method for Emulating Guest Instructions on a Host Computer Through Dynamic Recompilation of Host Instructions" (Способ эмуляции гостевых команд на хост-компьютере, основанный на динамической рекомпиляции хост-команд), автор Eric Traut. Содержание перечисленных патентов приведено в настоящей заявке для сведения во всей своей полноте.
На фиг. 19 показан пример схемы эмулируемой хост-компьютерной системы 5092, которая имитирует хост-компьютерную систему 5000ʹ, выполненную по хост-архитектуре. В эмулируемой хост-компьютерной системе 5092 хост-процессор (т.е. ЦПУ) 5091 является эмулируемым хост-процессором (или виртуальным хост-процессором) и содержит эмулирующий (реальный) процессор 5093, собственный набор команд которого отличается от набора команд процессора 5091 хост-компьютера 5000ʹ. Эмулируемая хост-компьютерная система 5092 в своем составе содержит запоминающее устройство 5094, доступное для эмулирующего процессора 5093. Согласно примеру осуществления, запоминающее устройство 5094 разделяется: часть его служит запоминающим устройством 5096 хост-компьютера, другая часть 5097 используется процедурами эмуляции. Запоминающее устройство 5096 хост-компьютера доступно программам эмулируемого хост-компьютера 5092 согласно эмулируемой архитектуре хост-компьютера. Эмулирующий процессор 5093 выполняет собственные команды из характерного для него набора команд в рамках архитектуры, отличающейся от архитектуры эмулируемого процессора 5091. Указанные собственные команды поступают из запоминающего устройства 5097 процедур эмуляции. Эмулирующий процессор 5093 может обращаться к хост-команде из состава программы, расположенной в запоминающем устройстве 5096 хост-компьютера для ее выполнения путем использования одной или более команд, полученными процедурой определения порядка следования, доступа и декодирования, которая в свою очередь может декодировать полученную хост-команду (команды) для определения порядка выполнения собственных команд для эмуляции функции хост-команды, к которой произошло обращение. Могут эмулироваться прочие функциональные возможности, предусмотренные в архитектуре хост-компьютерной системы 5000ʹ, например, такие как регистры общего назначения, управляющие регистры, динамическая трансляция адресов, поддержка подсистемы ввода-вывода, кэшпамять процессора. Эмулирующие процедуры для повышения производительности могут также пользоваться преимуществом функций, доступных в архитектуре эмулирующего процессора 5093, такими как регистры общего назначения и динамическая трансляция виртуальных адресов. Могут также предоставляться специальное аппаратное обеспечение и снижающие нагрузку на процессор программные механизмы, помогающие процессору 5093 эмулировать действия хост-компьютера 5000ʹ.
Терминология, употребляемая в настоящей заявке, используется исключительно для описания конкретных вариантов осуществления и не должна рассматриваться как ограничение сущности изобретения. Используемые в настоящей заявке термины в единственном числе обозначают также и сущности во множественном числе, если иное явно не следует из контекста. Следует учитывать, что термины "содержит" и/или "содержащий" при их использовании в настоящем описании указывают на наличие заявленных особенностей, целых чисел, шагов, операций, элементов и/или компонентов, однако не исключают наличие или добавление одной или более других особенностей, целых чисел, шагов, операций, элементов, компонентов и/или их групп.
В следующей далее формуле изобретения соответствующие структуры, материалы, действия, заменители, эквиваленты всех средств или шагов и функциональных элементов, если таковые упоминаются, предназначены для включения в свой состав любой структуры, материала или действия по выполнению функции в комбинации с другими заявленными элементами, как это конкретно заявлено. Описание одного или более вариантов осуществления настоящего изобретения было дано в целях иллюстрации и раскрытия, описание не предназначено для ограничения настоящего изобретения исключительно изложенными вариантами осуществления. Специалистам в данной области будут очевидны многочисленные модификации и видоизменения в рамках сущности и идеи настоящего изобретения. Выбор и описание вариантов осуществления обусловлен стремлением наилучшим образом объяснить принципы настоящего изобретения и его практическое приложение, а также дать возможность специалистам в данной области понять сущность изобретения в ее различных вариантах осуществления с различными модификациями, пригодными для конкретного применения.
Команды обработки векторов-строк
Возможности обработки векторов-строк
→
Команды
Все операнды являются операндами векторных регистров, если не указано иное. Символ "V" в синтаксисе языка программирования ассемблера используется для обозначения векторных операндов.
Команда векторного типа для поиска элемента, равнозначного любому
(от англ.: Vector Find Any Equal)
5
В порядке слева направо каждый беззнаковый двоичный целый элемент второго операнда сравнивается на предмет равенства значений с каждым беззнаковым двоичным целым элементом третьего операнда и, опционально, если в поле M установлен флаг ZS поиска нуля, с нулем.
5
Если флаг RT типа результата в поле M имеет нулевое значение, то для каждого элемента второго операнда, значение которого совпадает со значением какого-либо элемента третьего операнда или, опционально, с нулем, то значения разрядов соответствующего элемента первого операнда устанавливаются равными единице, в противном случае устанавливаются равными нулю.
5
Если флаг RT типа результата в поле M имеет единичное значение, то в седьмой байт первого операнда записывается индекс (т.е. порядковый номер) байта крайнего левого элемента второго операнда, значение которого совпадает со значением какого-либо элемента третьего операнда или с нулем.
Каждая команда имеет секцию расширенной мнемоники, эта секция описывает рекомендуемый расширенный мнемонический код (мнемокод) и соответствующий синтаксис ассемблера.
Замечание по программированию: скорость выполнения всех команд, которые опционально устанавливают код условия, может снижаться, если в ходе их выполнения код условия устанавливается.
5
Если флаг RT типа результата в поле M имеет единичное значение, и совпадений байтов операндов не выявлено, или (если был установлен флаг ZS поиска нуля) не выявлено совпадений с нулем, то в седьмой байт первого операнда записывается значение, равное длине вектора, выраженное в байтах.
4
Поле М содержит спецификатор ES (от англ.: element size - длина элемента) длины элемента. Спецификатор ES определяет длину элементов операндов векторных регистров. Если в этом поле указано зарезервированное значение, то возникает программное исключение (ошибка) спецификации. Значения спецификатора ES:
0 - байт;
1 - полуслово;
2 - полное слово;
3-15 - зарезервированные значения.
5
Поле M имеет следующий формат:
5
Назначение разрядов поля M:
- Флаг типа результата (RT): если ноль, то каждый элемент первого операнда является маской сравнения соответствующего элемента. Если единица, то в седьмой байт первого операнда записывается индекс байта, а в остальные байты первого операнда записываются нули.
- Флаг поиска нуля (ZS): если единица, то каждый элемент второго операнда также сравнивается с нулем.
- Флаг установки кода условия (СС): если ноль, то код условия не устанавливается, его значение остается без изменений. Если единица, то устанавливается код условия по правилу (см. далее).
Особые условия
Если происходит любое из следующих событий, то возникает программное исключение (ошибка) спецификации, и выполнение команды прекращается:
4
1. Поле М содержит значения от 3 до 15.
5
2. Значение разряда 0 поля M отлично от нуля. Правило установки кода условия:
Если флаг СС имеет значение 0, то значение кода условия не изменяется.
Если флаг СС имеет значение 1, то значение кода условия устанавливается следующим образом:
значение 0: если флаг ZS поиска нуля установлен, то сравнение не выявило во втором операнде совпадающих элементов, индекс которых был бы меньше индекса равного нулю элемента;
значение 1: некоторые элементы второго операнда совпадают по меньшей мере с одним элементом третьего операнда;
значение 2: все элементы второго операнда совпадают по меньшей мере с одним элементом третьего операнда;
значение 3: ни один из элементов второго операнда не совпадает ни с одним из элементов третьего операнда.
Программные исключения:
- данные с DXC FE [от англ.: Data Exception + FEh - программное исключение (ошибка) данных, FE - номер ошибки в шестнадцатеричной (h) системе счисления], векторный регистр;
- попытка выполнения при неинсталлированной поддержке векторного функционала;
- спецификация (в поле спецификатора ES длины элемента указано зарезервированное значение);
- ограничение транзакции.
Расширенная мнемоника:
Команда векторного типа для поиска равнозначного элемента
(от англ.: Vector Find Element Equal)
В порядке слева направо беззнаковые двоичные целые элементы второго операнда сравниваются с соответствующими беззнаковыми двоичными целыми элементами третьего операнда. Если значения двух элементов равны, то в седьмой байт первого операнда записывается индекс первого байта крайнего левого элемента с совпавшим значением. В остальные байты первого операнда записываются нули. Если элементов с равными значениями не выявлено, либо (если установлен флаг ZS поиска нуля) не выявлено элемента, равного нулю, то в седьмой байт первого операнда записывается значение, равное длине вектора в байтах. В остальные байты первого операнда записываются нули.
5
Если в поле M установлен флаг ZS поиска нуля, то значение каждого элемента второго операнда также сравнивается с нулем. Если во втором операнде выявлен равный нулю элемент до того, как выявлены другие элементы второго и третьего операндов с равными значениями, то в седьмой байт первого операнда записывается значение индекса первого байта выявленного равного нулю элемента, а во все остальные байты первого операнда записываются нули. Если флаг СС установки кода условия имеет значение 1, то код условия устанавливается равным 0.
4
Поле М содержит спецификатор ES длины элемента. Спецификатор ES определяет длину элементов операндов векторных регистров. Если в этом поле указано зарезервированное значение, то возникает программное исключение (ошибка) спецификации. Значения спецификатора ES:
0 - байт;
1 - полуслово;
2 - полное слово;
3-15 - зарезервированные значения.
5
Поле M имеет следующий формат:
5
Назначение разрядов поля M:
- Зарезервированы: разряды 0 и 1 являются зарезервированными, их значения должны быть равны нулю, в противном случае возникает программное исключение (ошибка) спецификации.
- Флаг поиска нуля (ZS): если единица, то каждый элемент второго операнда также сравнивается с нулем.
- Флаг установки кода условия (СС): если ноль, то код условия не устанавливается, его значение остается без изменений. Если единица, то устанавливается код условия по правилу (см. далее).
Особые условия
Если происходит любое из следующих событий, то возникает программное исключение (ошибка) спецификации, и выполнение команды прекращается:
4
1. Поле М содержит значения от 3 до 15.
5
2. Значения разрядов 0 или 1 поля M отличны от нуля. Правило установки кода условия:
5
Если значение разряда 3 поля M (флаг СС) равно единице, то значение кода условия устанавливается следующим образом:
значение 0: если флаг ZS поиска нуля установлен, то сравнение выявило во втором операнде равный нулю элемент, и индекс этого элемента меньше, чем индекс любого из совпавших элементов;
значение 1: сравнение выявило совпадение значений некоторого элемента во втором и третьем операндах. Если флаг ZS поиска нуля установлен, то совпадение выявлено в элементе, индекс которого меньше либо равен индексу равного нулю элемента;
значение 2: не определено;
значение 3: совпадающих элементов не выявлено.
5
Если значение третьего разряда поля M (флаг СС) равно нулю, то код не изменяется.
Программные исключения:
- данные с DXC FE, векторный регистр;
- попытка выполнения при неинсталлированной поддержке векторного функционала;
- спецификация (в поле спецификатора ES длины элемента указано зарезервированное значение);
- ограничение транзакции.
Расширенная мнемоника:
Замечание по программированию:
1. При любой длине элемента всегда в первом операнде сохраняется именно индекс байта. Например, если длина элемента была установлена равной полуслову, и совпадение выявлено в полуслове с индексом 2, то сохраняется значение индекса байта, равное четырем.
2. Третий операнд не должен содержать элементов, значение которых равно нулю. Если третий операнд содержит равный нулю элемент, и этот элемент совпадает с элементом второго операнда (т.е. если оба элемента равны нулю), и это совпадение выявлено до выявления любого другого совпадения, то значение кода условия устанавливается равным единице вне зависимости от того, был ли установлен флаг ZS поиска нуля.
Команда векторного типа для поиска неравнозначного элемента
(от англ.: Vector Find Element Not Equal)
5
В порядке слева направо беззнаковые двоичные целые элементы второго операнда сравнивается с соответствующими беззнаковыми двоичными целыми элементами третьего операнда. Если значения двух элементов неравны, то в седьмой байт первого операнда записывается индекс первого байта крайнего левого элемента второго операнда с несовпавшим значением. В остальные байты первого операнда записываются нули. Если флаг СС установки кода условия в поле M установлен (т.е. имеет значение 1), то устанавливается код условия, показывающий, выявленный элемент какого из операндов имеет большее значение. Если значения элементов во всех парах равны, то в седьмой байт первого операнда записывается значение, равное длине вектора в байтах, а значения остальных байтов первого операнда устанавливаются равными нулю. Если значение флага СС установки кода равно единице, то значение кода условия устанавливается равным трем.
5
Если в поле M установлен флаг ZS поиска нуля, то значение каждого элемента второго операнда также сравнивается с нулем. Если во втором операнде выявлен равный нулю элемент до того, как выявлены элементы второго и третьего операндов с различающимися значениями, то в седьмой байт первого операнда записывается значение индекса первого байта выявленного равного нулю элемента, а во все остальные байты первого операнда записываются нули. Значение кода условия устанавливается равным нулю.
4
Поле М содержит спецификатор ES длины элемента. Спецификатор ES определяет длину элементов операндов векторных регистров. Если в этом поле указано зарезервированное значение, то возникает программное исключение (ошибка) спецификации. Значения спецификатора ES:
0 - байт;
1 - полуслово;
2 - полное слово;
3-15 - зарезервированные значения.
5
Поле M имеет следующий формат:
5
Назначение разрядов поля M:
- Флаг поиска нуля (ZS): если единица, то каждый элемент второго операнда также сравнивается с нулем.
- Флаг установки кода условия (СС): если ноль, то код условия не устанавливается, его значение остается без изменений. Если единица, то устанавливается код условия по правилу (см. далее).
Особые условия
Если происходит любое из следующих событий, то возникает программное исключение (ошибка) спецификации, и выполнение команды прекращается:
4
1. Поле М содержит значения от 3 до 15.
5
2. Значения разрядов 0 или 1 поля M отличны от нуля. Правило установки кода условия:
5
Если значение разряда 3 поля M (флаг СС) равно единице, то значение кода условия устанавливается следующим образом:
значение 0: если установлен флаг ZS поиска нуля, то сравнение выявило в обоих операндах равный нулю элемент, и индекс этого элемента меньше, чем индекс любой пары различающихся элементов;
значение 1: сравнение выявило различие значений, причем значение элемента второго операнда меньше, чем значение элемента третьего операнда;
значение 2: сравнение выявило различие значений, причем значение элемента второго операнда больше, чем значение элемента третьего операнда;
значение 3: значения всех элементов равны, и если флаг ZS поиска нуля установлен, то во втором операнде равных нулю элементов не выявлено.
5
Если значение третьего разряда поля M (флаг СС) равно нулю, то код не изменяется.
Программные исключения:
- данные с DXC FE, векторный регистр;
- попытка выполнения при неинсталлированной поддержке векторного функционала;
- спецификация (в поле спецификатора ES длины элемента указано зарезервированное значение);
- ограничение транзакции.
Расширенная мнемоника:
Команда VECTOR STRING RANGE COMPARE
(от англ.: тип векторный, сравнение со строкой диапазонов)
В порядке слева направо беззнаковые двоичные целые элементы второго операнда сравниваются с диапазонами (интервалами) значений, верхняя и нижняя границы каждого из которых определяются парами четный-нечетный элемент третьего операнда. Четвертый операнд содержит управляющие флаги, которые задают условие сравнения (например: значение элемента второго операнда должно находиться в диапазоне; должно находиться ниже диапазона; должно находиться выше диапазона). Элемент второго операнда считается удовлетворяющим условию, если значение этого элемента удовлетворяет условию сравнения для любого из диапазонов значений, определяемых парами элементов третьего операнда.
6
Если флаг RT типа результата в поле M имеет нулевое значение, и если значение элемента второго операнда удовлетворяет любому из диапазонов, то значения разрядов соответствующего элемента первого операнда устанавливаются равными единице, в противном случае устанавливаются равными нулю.
6
Если флаг RT типа результата в поле M имеет единичное значение, то в седьмой байт первого операнда записывается индекс байта первого элемента второго операнда, удовлетворяющего условию для любого из диапазонов, определяемых третьим и четвертым операндами, или равного нулю элемента (если установлен флаг ZS поиска нуля), а во все остальные байты первого операнда записываются нули. Если ни один из элементов не удовлетворяет условию, то в седьмой байт первого операнда записывается значение, равное длине вектора в байтах, а во все остальные байты записываются нули.
6
Если в поле M установлен флаг ZS поиска нуля, то в дополнение к проверке элементов второго операнда на соответствие диапазонам, задаваемой третьим и четвертым операндами, выполняется сравнение значений элементов второго операнда с нулем. Если значение индекса выявленного равного нулю элемента меньше, чем значение индекса элемента, выявленного в результате проверки на соответствие диапазонам, то коду условия присваивается значение ноль.
5
Поле M содержит спецификатор ES длины элемента, который определяет длину элементов операндов.
Элементы четвертого операнда имеют следующий формат.
При ES=0:
При ES=1:
При ES=2:
Разряды элементов четвертого операнда имеют следующее назначение:
- Равенство (EQ): если единица, то выполняется проверка равенства (проверка попадания в диапазон).
- Больше, чем (GT): если единица, то выполняется проверка условия "больше, чем".
- Меньше, чем (LT): если единица, то выполняется проверка условия "меньше, чем".
- Все остальные разряды являются зарезервированными, их значения должны быть равны нулю для обеспечения совместимости с будущими реализациями.
Значения управляющих разрядов могут использоваться в любой комбинации. Если значения всех разрядов нулевые, то результат сравнения всегда будет отрицательным. Если значения всех разрядов единичные, то результат сравнения всегда будет утвердительным.
5
Поле M содержит спецификатор ES длины элемента. Спецификатор ES определяет длину элементов операндов векторных регистров. Если в этом поле указано зарезервированное значение, то возникает программное исключение (ошибка) спецификации. Значения спецификатора ES:
0 - байт;
1 - полуслово;
2 - полное слово;
3-15 - зарезервированные значения.
6
Поле M имеет следующий формат:
6
Назначение разрядов поля M:
- Инвертировать результат (IN): если ноль, то выполняется сравнение с диапазонами, заданными парами элементов третьего операнда. Если единица, то результаты выполненных сравнений инвертируются.
- Флаг типа результата (RT): если ноль, то элемент первого операнда является маской сравнения соответствующего элемента второго операнда. Если единица, то в седьмой байт первого операнда записывается значение индекса. Во все остальные байты записываются нули.
- Флаг поиска нуля (ZS): если единица, то каждый элемент второго операнда также сравнивается с нулем.
- Флаг установки кода условия (СС): если ноль, то код условия не устанавливается, его значение остается без изменений. Если единица, то устанавливается код условия по правилу (см. далее).
Особые условия
Если происходит любое их следующих событий, то возникает программное исключение (ошибка) спецификации, и выполнение команды прекращается:
4
1. Поле М содержит значения от 3 до 15.
Правило установки кода условия:
значение 0: если флаг ZS=1 и найден равный нулю элемент, индекс которого меньше, чем индекс элемента-результата любого другого сравнения;
значение 1: выявлен удовлетворяющий условию элемент;
значение 2: не определено;
значение 3: удовлетворяющих условию элементов нет.
Программные исключения:
- данные с DXC FE, векторный регистр;
- попытка выполнения при неинсталлированной поддержке векторного функционала;
- спецификация (в поле спецификатора ES длины элемента указано зарезервированное значение);
- ограничение транзакции.
Расширенная мнемоника:
ES=1, ZS=0
флагу RT=0 соответствует результат VR1(a)
флагу RT=1 соответствует результат VR1(b)
Команда расчета загрузки до границы блока
(от англ.: Load Count to Block Boundary)
В первый операнд записывается 32-разрядное беззнаковое двоичное целое число, равное числу байтов, которые можно загрузить из места расположения второго операнда без пересечения заданной границы блока, ограниченное значением 16.
Смещение для данной команды обрабатывается как 12-разрядное беззнаковое целое число.
Адрес второго операнда для адресации данных не используется.
3
Поле М задает код, который используется для информирования ЦПУ о границе (размере) блока для определения числа байтов, которые можно загрузить. Если указано зарезервированное значение, то возникает программное исключение (ошибка) спецификации.
7-15: зарезервированные значения.
Правило установки кода условия:
0: значение первого операнда равно 16;
1: не определено;
2: не определено;
3: значение первого операнда меньше 16.
Программные исключения:
- попытка выполнения при неинсталлированной поддержке векторного функционала;
- спецификация.
Указание по программированию: подразумевается, что команда расчета загрузки до границы блока будет использоваться совместно с командой векторного типа для загрузки до границы блока (от англ.: Vector Load to Block Boundary) для определения числа загруженных байтов.
Команда VECTOR LOAD GR FROM VR ELEMENT
(от англ.: тип векторный, загрузить в регистр общего назначения элемент векторного регистра)
4
Первому операнду присваивается значение элемента третьего операнда. Индекс элемента третьего операнда определяется значением второго операнда, длина элемента определяется значением спецификатора ES из поля М. Третий операнд является векторным регистром. Первый операнд является регистром общего назначения. Если значение второго операнда больше максимального индекса элементов третьего операнда при заданной длине элементов, то результат в первом операнде будет непредсказуем.
Если длина элемента векторного регистра меньше, чем двойное слово, то в 64-разрядном регистре общего назначения элемент выравнивается по правому краю, а все остальные разряды регистра общего назначения заполняются нулями.
Второй операнд не используется для адресации данных; вместо этого используются его крайние правые 12 разрядов для указания индекса элемента третьего операнда.
4
Поле М содержит спецификатор ES длины элемента. Спецификатор ES определяет длину элементов операндов векторных регистров. Если в этом поле указано зарезервированное значение, то возникает программное исключение (ошибка) спецификации. Значения спецификатора ES:
0 - байт;
1 - полуслово;
2 - полное слово;
3 - двойное слово;
4-15 - зарезервированные значения.
Правило установки кода условия: значение кода условия не изменяется.
Программные исключения:
- данные с DXC FE, векторный регистр;
- попытка выполнения при неинсталлированной поддержке векторного функционала;
- спецификация (в поле спецификатора ES длины элемента указано зарезервированное значение);
- ограничение транзакции.
Расширенная мнемоника:
Команда VECTOR LOAD ТО BLOCK BOUNDARY
(от англ.: тип векторный, загрузить до границы блока)
В первый операнд, начиная с его элемента с байтом, индекс которого равен нулю, загружаются байты второго операнда. Если происходит выход за границу (если нарушается граничное условие), то содержимое в оставшейся части первого операнда непредсказуемо. Если байты не загрузились, то программное исключение (ошибка) доступа не возникает.
Смещение для данной команды обрабатывается как 12-разрядное беззнаковое целое число.
3
Поле М задает код, который используется для информирования ЦПУ о границе (размере) блока, который следует загрузить. Если указано зарезервированное значение, то возникает программное исключение (ошибка) спецификации.
7-15: зарезервированные значения.
Правило установки кода условия: код условия не изменяется.
Программные исключения:
- доступ (выборка, операнд 2);
- данные с DXC FE, векторный регистр;
- попытка выполнения при неинсталлированной поддержке векторного функционала;
- спецификация (в поле кода границы блока указано зарезервированное значение);
- ограничение транзакции.
Указания по программированию:
1. В некоторых случаях данные могут быть загружены из-за границы блока. Однако такое произойдет только в случае, если не возникнет программных исключений (ошибок) доступа к этим данным.
Команда VECTOR STORE
(от англ.: тип векторный, сохранить)
Значение из первого операнда длиной 128 разрядов записывается в запоминающее устройство по адресу, определяемому вторым операндом. Смещение для данной команды обрабатывается как 12-разрядное беззнаковое целое число.
Правило установки кода условия: значение кода условия не изменяется.
Программные исключения:
- доступ (запись в запоминающее устройство, операнд 2);
- данные с DXC FE, векторный регистр;
- попытка выполнения при неинсталлированной поддержке векторного функционала;
- ограничение транзакции.
Команда VECTOR STORE WITH LENGTH
(от англ.: тип векторный, сохранить с указанной длиной)
В порядке слева направо байты первого операнда записываются (сохраняются) во второй операнд. Третий операнд, определяемый регистром общего назначения, содержит 32-разрядное беззнаковое целое число, которое определяет наибольший индекс байта, подлежащего сохранению. Если число в третьем операнде больше или равно максимальному индексу байта вектора, то во второй операнд записываются все байты первого операнда.
Программные исключения (ошибки) доступа могут возникать только при записи байтов.
Смещение для данной команды обрабатывается как 12-разрядное беззнаковое целое число.
Правило установки кода условия: значение кода условия не изменяется.
Программные исключения:
- доступ (запись, операнд 2);
- данные с DXC FE, векторный регистр;
- попытка выполнения при неинсталлированной поддержке векторного функционала;
- ограничение транзакции.
Описание поля RXB
Поле RXB занимает разряды с 36-го по 40-й всех команд векторного типа. Это поле содержит наиболее значимые разряды всех адресов векторных регистров. Те разряды адресов регистров, которые не определены командой, являются зарезервированными, их значения должны быть равны нулю, в противном случае в будущем не гарантируется совместимость с программным обеспечением. Наиболее значимый разряд операцией конкатенации добавляется слева к четырехразрядному адресу регистра, в результате чего формируется пятиразрядный адрес векторного регистра.
Разряды имеют следующее значение:
0 - наиболее значимый разряд адреса векторного регистра, объединяется с разрядами 8-11 команды;
1 - наиболее значимый разряд адреса векторного регистра, объединяется с разрядами 12-15 команды;
2 - наиболее значимый разряд адреса векторного регистра, объединяется с разрядами 16-19 команды;
3 - наиболее значимый разряд адреса векторного регистра, объединяется с разрядами 32-35 команды.
Управление разрешением выполнять команды векторного типа
Векторные регистры и команды могут использоваться только в том случае, если одновременно и разряд 46 (управление разрешением векторных операций), и разряд 45 (управление регистром AFP) управляющего регистра 0 имеют значение единица. Если в нарушение указанного условия совершается попытка выполнить команду векторного типа при инсталлированной поддержке векторного функционала, то возникает программное исключение (ошибка) данных DXC FE. Если поддержка векторного функционала не была инсталлирована, то возникает программное исключение (ошибка) выполнения.