RU2781355C1 - Scalar-vector processor - Google Patents
Scalar-vector processor Download PDFInfo
- Publication number
- RU2781355C1 RU2781355C1 RU2021132215A RU2021132215A RU2781355C1 RU 2781355 C1 RU2781355 C1 RU 2781355C1 RU 2021132215 A RU2021132215 A RU 2021132215A RU 2021132215 A RU2021132215 A RU 2021132215A RU 2781355 C1 RU2781355 C1 RU 2781355C1
- Authority
- RU
- Russia
- Prior art keywords
- vector
- scalar
- processor according
- data
- operations
- Prior art date
Links
- 239000013598 vector Substances 0.000 title claims abstract description 273
- 230000009467 reduction Effects 0.000 claims abstract description 59
- 238000004364 calculation method Methods 0.000 claims abstract description 22
- 230000006870 function Effects 0.000 claims abstract description 14
- 230000003993 interaction Effects 0.000 claims abstract description 11
- 238000000844 transformation Methods 0.000 claims abstract description 9
- 230000009466 transformation Effects 0.000 claims abstract description 8
- 238000012545 processing Methods 0.000 claims description 41
- 239000006144 Dulbecco’s modified Eagle's medium Substances 0.000 claims description 33
- 238000006243 chemical reaction Methods 0.000 claims description 24
- 238000009825 accumulation Methods 0.000 claims description 16
- 238000012546 transfer Methods 0.000 claims description 11
- 238000007620 mathematical function Methods 0.000 claims description 6
- 101000864076 Caenorhabditis elegans Smu-1 suppressor of mec-8 and unc-52 protein Proteins 0.000 claims description 5
- 101000864104 Homo sapiens WD40 repeat-containing protein SMU1 Proteins 0.000 claims description 5
- 102100029872 WD40 repeat-containing protein SMU1 Human genes 0.000 claims description 5
- 230000003068 static effect Effects 0.000 claims description 5
- 239000003795 chemical substances by application Substances 0.000 claims description 4
- 125000004122 cyclic group Chemical group 0.000 claims description 3
- 239000000126 substance Substances 0.000 abstract 1
- 230000001343 mnemonic effect Effects 0.000 description 20
- 238000007792 addition Methods 0.000 description 19
- 238000010586 diagram Methods 0.000 description 7
- 102100034004 Gamma-adducin Human genes 0.000 description 6
- 101000799011 Homo sapiens Gamma-adducin Proteins 0.000 description 6
- 238000000034 method Methods 0.000 description 6
- 238000013459 approach Methods 0.000 description 4
- 238000013528 artificial neural network Methods 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 201000007694 Athabaskan brainstem dysgenesis syndrome Diseases 0.000 description 2
- 238000003491 array Methods 0.000 description 2
- 238000013473 artificial intelligence Methods 0.000 description 2
- 230000006399 behavior Effects 0.000 description 2
- 239000003638 chemical reducing agent Substances 0.000 description 2
- 230000001934 delay Effects 0.000 description 2
- 230000006866 deterioration Effects 0.000 description 2
- 208000020006 human HOXA1 syndromes Diseases 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- GZPBVLUEICLBOA-UHFFFAOYSA-N 4-(dimethylamino)-3,5-dimethylphenol Chemical compound CN(C)C1=C(C)C=C(O)C=C1C GZPBVLUEICLBOA-UHFFFAOYSA-N 0.000 description 1
- 201000003874 Common Variable Immunodeficiency Diseases 0.000 description 1
- 102100026693 FAS-associated death domain protein Human genes 0.000 description 1
- 101000911074 Homo sapiens FAS-associated death domain protein Proteins 0.000 description 1
- 230000001133 acceleration Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000008569 process Effects 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
Images
Abstract
Description
Изобретение относится к области микропроцессоров, а именно к скалярно-векторным процессорам, и может быть использовано при построении архитектуры процессорных IP-ядер, ориентированных на решение задач цифровой обработки сигналов, включая приложения искусственного интеллекта и нейронных сетей.The invention relates to the field of microprocessors, namely to scalar-vector processors, and can be used to build the architecture of IP processor cores focused on solving digital signal processing tasks, including applications of artificial intelligence and neural networks.
Постоянное повышение сложности решаемых задач в области цифровой обработки сигналов и увеличение объемов обрабатываемых данных приводят к непрерывному росту требований к вычислительной производительности выполняющих эти задачи микропроцессорных систем. Основным методом повышения производительности вычислений является их распараллеливание. Возможность распараллеливания обеспечивают тем, что во многих задачах обработки сигналов требуется, как правило, выполнение большого объема одинаковых вычислительных процедур по отношению к большим массивам обрабатываемых данных. Массивы однотипных данных векторизуют, и дальнейшую высокопроизводительную обработку проводитят уже не над отдельными элементами, а над векторами. Архитектуры микропроцессоров, выполняющих подобную обработку, известны под названием SIMD-архитектур (SIMD - Single Instruction, Multiple Data).The constant increase in the complexity of the tasks being solved in the field of digital signal processing and the increase in the volume of processed data lead to a continuous increase in the requirements for the computing performance of the microprocessor systems performing these tasks. The main method for improving the performance of computations is their parallelization. The possibility of parallelization is ensured by the fact that in many signal processing tasks, as a rule, the execution of a large amount of identical computational procedures is required in relation to large arrays of processed data. Arrays of the same type of data are vectorized, and further high-performance processing is no longer carried out on individual elements, but on vectors. Microprocessor architectures that perform such processing are known as SIMD architectures (SIMD - Single Instruction, Multiple Data).
Сложность, однако, заключается в том, что ни в одном реальном приложении не удается достичь стопроцентной векторизации. Известен закон Амдала, согласно которому общее ускорение, полученное в результате векторизации на векторном процессоре с Р элементами обработки, в зависимости от доли кода f, которая может быть векторизована, равно 1/(1-f+f/P). Таким образом, в реальных прикладных задачах, наряду с векторной обработкой, всегда присутствует и скалярная часть вычислений.The difficulty, however, lies in the fact that no real application can achieve 100% vectorization. Amdahl's law is known, according to which the total acceleration obtained as a result of vectorization on a vector processor with P processing elements, depending on the fraction of the code f that can be vectorized, is equal to 1/(1-f+f/P). Thus, in real applied problems, along with vector processing, there is always a scalar part of calculations.
На практике применяют различные подходы к организации такого рода смешанных вычислений. Например, для реализации нейронных сетей широко используют гетерогенные вычислительные системы, содержащие в своем составе центральный процессор (CPU), выполняющий верхний уровень задачи и связанные с этим скалярные вычисления, и графический процессор (GPU), функцией которого является выполнение массивно-параллельной обработки данных. Недостатком такого подхода является то, что передача данных от одного процессора другому связана со значительными временными задержками, что сказывается отрицательным образом на реально достигаемой производительности.In practice, various approaches are used to organize this kind of mixed computing. For example, to implement neural networks, heterogeneous computing systems are widely used, which include a central processing unit (CPU), which performs the upper level of tasks and related scalar calculations, and a graphic processor (GPU), whose function is to perform massively parallel data processing. The disadvantage of this approach is that the transfer of data from one processor to another is associated with significant time delays, which negatively affects the actual performance achieved.
Это привело к появлению архитектур, в которых некоторое количество скалярных и векторных вычислительных секций (ядер) объединяют в составе одного микропроцессора. Одной из главных проблем таких архитектур является организация эффективного взаимодействия между скалярным и векторным каналами микропроцессора. Дело в том, что во многих прикладных задачах, связанных с обработкой векторных данных, возникает потребность в выполнении операций, в которых скалярный канал формирует и/или потребляет скаляр, требуемый и/или формируемый векторным каналом микропроцессора. Таким образом, скалярный канал процессора может подготовить или дополнительно обработать скаляры, необходимые для векторного канала или созданные векторным каналом, гарантируя, что векторный канал может продолжать потоковую обработку векторов без лишних торможений.This led to the emergence of architectures in which a number of scalar and vector computing sections (cores) are combined in one microprocessor. One of the main problems of such architectures is the organization of effective interaction between the scalar and vector channels of the microprocessor. The fact is that in many applied tasks related to the processing of vector data, there is a need to perform operations in which a scalar channel generates and/or consumes a scalar required and/or generated by the vector channel of the microprocessor. In this way, the processor's scalar channel can prepare or further process the scalars needed for the vector channel or created by the vector channel, ensuring that the vector channel can continue to stream vectors without undue lag.
Примером операций, в которые вовлечены и скалярный и векторный каналы процессора, являются операции редукции - к ним относятся, в частности, определение и вывод минимального или максимального значения вектора, сумма или произведение элементов вектора и т.п.An example of operations involving both scalar and vector channels of the processor are reduction operations - these include, in particular, the determination and output of the minimum or maximum value of a vector, the sum or product of vector elements, etc.
В задачах обработки изображений широко применяют и другие операции, выполняемые над вектором в целом - операции перестановок (shuffle), вычисление гистограмм, табличные преобразования (LUT, Look-Up Table). Известные способы реализации таких процедур имеют свои достоинства и недостатки. Программная реализация на основе стандартного набора команд не позволяет достичь высокой производительности, а аппаратная реализация в виде ускорителей требует дополнительных аппаратурных затрат и обладает ограниченной гибкостью. По указанным причинам поиск эффективных способов выполнения такого рода вычислительных процедур остается по-прежнему актуальным.In image processing tasks, other operations performed on the vector as a whole are also widely used - operations of permutations (shuffle), calculation of histograms, table transformations (LUT, Look-Up Table). Known methods for implementing such procedures have their advantages and disadvantages. A software implementation based on a standard set of instructions does not allow achieving high performance, while a hardware implementation in the form of accelerators requires additional hardware costs and has limited flexibility. For these reasons, the search for efficient ways to perform such computational procedures remains relevant.
Известно решение (патент US 5659706), в котором описывается скалярно-векторный процессор с отдельной скалярным и векторным каналами. Каждый из каналов процессора разделен на функциональные блоки. Недостатком этого решения является то, что между функциональными блоками скалярного и векторного канала процессора нет тесного взаимодействия. Оба канала работают полностью независимо, и это приводит к дополнительным временным потерям при передаче данных от одной части процессора к другой, соответственно, к ухудшению быстродействия процессора.Known solution (patent US 5659706), which describes a scalar-vector processor with a separate scalar and vector channels. Each of the processor channels is divided into functional blocks. The disadvantage of this solution is that there is no close interaction between the functional blocks of the scalar and vector channel of the processor. Both channels work completely independently, and this leads to additional time losses when transferring data from one part of the processor to another, and, accordingly, to a deterioration in processor performance.
Известно другое решение (патент US 5822606 А), в котором описана одна из первых архитектур сигнальных процессоров, содержащая одновременно функционирующие скалярное и векторные вычислительные ядра. Недостатком этой архитектуры является то, что, как и в предыдущем случае, скалярное и векторные вычислительные ядра непосредственно между собой не взаимодействуют, обмены данными между ними выполняются через внешнюю память, что связано со значительными задержками, соответственно, к ухудшению быстродействия процессора.Another solution is known (patent US 5822606 A), which describes one of the first signal processor architectures containing simultaneously functioning scalar and vector computing cores. The disadvantage of this architecture is that, as in the previous case, the scalar and vector computing cores do not interact directly with each other, data exchanges between them are performed through external memory, which is associated with significant delays, respectively, to the deterioration of the processor speed.
В патенте US 2004015677 А1 описана архитектура скалярно-векторного процессора цифровой обработки сигналов, в которой предусматривается выполнение некоторых операций редукции в последовательном стиле, путем передачи данных от одной SIMD-секции к другой. Недостатком данной архитектуры является невысокая производительность, достигаемая при последовательной организации вычислений.US 2004015677 A1 describes a scalar vector digital signal processor architecture that performs some serial style reduction operations by passing data from one SIMD section to another. The disadvantage of this architecture is the low performance achieved with sequential organization of calculations.
Известна архитектура (патент US 2005/0240644 А1) скалярно-векторного процессора, который включает в себя набор функциональных (вычислительных) блоков, содержащих взаимодействующие между собой векторный и скалярный каналы. Недостатком этой архитектуры является то, что взаимодействие между векторным и скалярным каналами процессора ограничено рамками конкретного функционального блока. Кроме того, данное решение не предусматривает поддержку операций редукции.Known architecture (patent US 2005/0240644 A1) scalar-vector processor, which includes a set of functional (computing) blocks containing interacting vector and scalar channels. The disadvantage of this architecture is that the interaction between the vector and scalar channels of the processor is limited to a particular function block. In addition, this solution does not provide support for reduction operations.
В патенте US 2020/142704 А1 описана архитектура скалярно-векторного процессора, в которой наряду с SIMD-распараллеливанием, используется также параллелизм на уровне команд по принципу VLIW (Very Long Instruction Word) как в скалярном, так и в векторном канале процессора, что повышает общую производительность. Однако никаких механизмов взаимодействия между скалярным и векторным каналами процессора не предусмотрено.US 2020/142704 A1 describes the architecture of a scalar-vector processor, which, along with SIMD parallelization, also uses instruction-level parallelism according to the VLIW (Very Long Instruction Word) principle both in the scalar and in the vector channel of the processor, which increases overall performance. However, there are no mechanisms for interaction between the scalar and vector channels of the processor.
Наиболее близким к заявленному изобретению является архитектурный подход, описанный в патенте US 2021/0216318 А1. В данном патенте предложено целое семейство вариантов архитектур скалярно-векторного процессора, в том числе такие, в которых поддерживается взаимодействие скалярного и векторного каналов процессора и предусмотрено выполнение операций редукции. Данные архитектуры скалярно-векторного процессора выбраны в качестве прототипов заявленного изобретения. Однако операции редукции в данном патенте реализуют на базе векторных вычислительных секций за счет дополнительных связей между секциями. Это ухудшает масштабируемость архитектуры и делает невозможным одновременное выполнение операций редукции и других векторных вычислений. Кроме того, предложенный подход не предусматривает поддержку выполнения других операций над вектором в целом - перестановки, вычисление гистограмм, табличные преобразования (LUT).Closest to the claimed invention is the architectural approach described in US 2021/0216318 A1. This patent proposes a whole family of scalar-vector processor architectures, including those that support the interaction of scalar and vector processor channels and provide for reduction operations. These architectures of the scalar vector processor are selected as prototypes of the claimed invention. However, the reduction operations in this patent are implemented on the basis of vector computing sections due to additional links between sections. This worsens the scalability of the architecture and makes it impossible to simultaneously perform reduction operations and other vector calculations. In addition, the proposed approach does not provide support for performing other operations on the vector as a whole - permutations, calculation of histograms, table transformations (LUT).
Техническим результатом изобретения является создание скалярно-векторного процессора, который обладает повышенной эффективностью, скоростью работы, функциональностью и универсальностью за счет того, что: в его составе содержится блок редукции, соединенный со скалярным и векторным каналами процессора и реализующий функции их взаимодействия в разнообразных операциях, в которых скалярный канал формирует и/или потребляет скаляр, требуемый и/или формируемый векторным каналом процессора; блок редукции выполняет, кроме того, различные операции над вектором в целом - операции перестановок (shuffle), LUT-преобразования, вычисления гистограмм; скалярный и векторный каналы процессора объединены дополнительно кольцеобразной шиной, позволяющей производить по ней обмен данными одновременно с выполнением вычислительных операций в скалярном и векторном каналах процессора и в блоке редукции.The technical result of the invention is the creation of a scalar-vector processor, which has increased efficiency, speed, functionality and versatility due to the fact that: it contains a reduction unit connected to the scalar and vector channels of the processor and realizing the functions of their interaction in various operations, in which the scalar channel generates and/or consumes a scalar required and/or generated by the vector channel of the processor; the reduction block performs, in addition, various operations on the vector as a whole - operations of permutations (shuffle), LUT-transformations, calculation of histograms; The scalar and vector channels of the processor are additionally united by a ring-shaped bus, which makes it possible to exchange data over it simultaneously with the execution of computational operations in the scalar and vector channels of the processor and in the reduction unit.
Поставленный технический результат достигнут путем создания скалярно-векторного процессора 100, содержащего соединенные кольцевой шиной CDB 112 скалярный и векторный каналы 105 и 107 обработки данных, которые соединены с блоком редукции VRED 104, а также с памятью данных первого уровня DMEM/L1D$ 103, которая соединена с кэш-памятью второго уровня L2$ 101, которая соединена с внешним интерфейсом процессора, который имеет доступ к внешней памяти вычислительной системы, а также соединена с памятью программ первого уровня РМЕМ/L1I$ 102, выход которой соединен с входом блока выборки команд FETCH 109, выход которого соединен с входом блока декодирования команд DECODE 110, первый выход которого соединен с входами скалярного и векторного каналов, а второй выход соединен с блоком программного управления PCTRL 111, выход которого соединен с входом памяти программ первого уровня РМЕМ/L1I$ 102, причемThe set technical result is achieved by creating a scalar-
- память программ первого уровня РМЕМ/L1I$ 102 и память данных первого уровня DMEM/L1D$ 103 выполнены с возможностью формирования обращений и передачи их в- the program memory of the first level RMEM/L1I$ 102 and the data memory of the first level DMEM/L1D$ 103 are made with the possibility of generating calls and transferring them to
- кэш-память второго уровня L2$ 101, которая выполнена с возможностью обслуживания обращений из памяти программ первого уровня PMEM/L1I$ 102 и памяти данных первого уровня DMEM/L1D$ 103, а также загрузки данных через внешний интерфейс из внешней памяти вычислительной системы и передачи данных в память данных первого уровня DMEM/L1D$ 103 и память программ первого уровня РМЕМ/L1I$ 102;- cache memory of the second level L2$ 101, which is configured to serve calls from the program memory of the first level PMEM/L1I$ 102 and data memory of the first level DMEM/L1D$ 103, as well as to load data via an external interface from the external memory of the computer system and transferring data to the first level data memory DMEM/L1D$ 103 and the first level program memory PMEM/L1I$ 102;
- блок выборки команд FETCH 109 выполнен с возможностью выборки команд из памяти программ РМЕМ/L1I$ 102 и передачи их в- the FETCH 109 command fetch unit is configured to fetch commands from the PMEM/L1I$ 102 program memory and transfer them to
- блок декодирования команд DECODE ПО, выполненный с возможностью декодирования команд и формирования команд программного управления для исполнительных устройств процессора и передачи их в- a block for decoding commands DECODE software, configured to decode commands and generate software control commands for the executive devices of the processor and transfer them to
- блок PCTRL, который выполнен с возможностью выполнения команд программного управления.- a PCTRL block, which is configured to execute program control instructions.
В предпочтительном варианте осуществления процессора память данных первого уровня DMEM/L1D$ 103 выполнена в виде кэш-памяти первого уровня L1D$ или в виде тесно связанной ТСМ (Tightly-Coupled Memory) статической памяти DMEM.In the preferred embodiment of the processor, the DMEM/L1D$
В предпочтительном варианте осуществления процессора память программ первого уровня PMEM/L1I$ 102 выполнена в виде кэш-памяти первого уровня L1I$ или в виде тесно связанной ТСМ (Tightly-Coupled Memory) статической памяти РМЕМ.In the preferred embodiment of the processor, the first level program memory PMEM/L1I$ 102 is implemented as an L1I$ first cache memory or as a tightly coupled TCM (Tightly-Coupled Memory) PMEM static memory.
В предпочтительном варианте осуществления процессора на уровне вычислительного ядра имеет гарвардскую архитектуру с возможностью одновременного доступа к памяти программ первого уровня PMEM/L1I$ 102 и памяти данных первого уровня DMEM/L1D$ 103 по отдельным шинам.In the preferred embodiment, the processor at the level of the computing core has a Harvard architecture with the ability to simultaneously access the first level program memory PMEM/L1I$ 102 and the first level data memory DMEM/L1D$ 103 on separate buses.
В предпочтительном варианте осуществления процессора кэш-память второго уровня L2$ 101 имеет фон-неймановскую архитектуру.In the preferred embodiment of the processor, the second level L2$
В предпочтительном варианте осуществления процессора команды программного управления выбраны из набора команд, содержащего команды программных переходов и команды программных циклов.In the preferred embodiment of the processor, the program control instructions are selected from an instruction set containing program jump instructions and program loop instructions.
В предпочтительном варианте осуществления процессора команды объединены в инструкции, которые организованы в виде VLIW-пакета 201 (VLIW - Very Long Instruction Word).In the preferred embodiment of the processor, the instructions are combined into instructions that are organized as a VLIW package 201 (VLIW - Very Long Instruction Word).
В предпочтительном варианте осуществления процессора VLIW-пакет 201 содержит до восьми команд, из которых до четырех команд предназначены для исполнительных устройств скалярного канала обработки данных и до четырех команд предназначены для исполнительных устройств векторного канала обработки данных.In the preferred embodiment of the processor, the VLIW
В предпочтительном варианте осуществления процессора VLIW-пакет 201 содержит до двух команд скалярных обменов данными и до двух векторных команд обмена данными с памятью данных DMEM/L1D$ 103.In the preferred embodiment of the processor, VLIW
В предпочтительном варианте осуществления процессор имеет систему команд, состоящую из команд программного управления, команд исполнительных устройств скалярного канала обработки данных и векторного канала обработки данных, а также команд блока редукции VRED 104.In the preferred embodiment, the processor has an instruction set consisting of software control instructions, instructions for the execution units of the scalar data processing channel and the vector data processing channel, as well as commands for the reduction unit VRED 104.
В предпочтительном варианте осуществления процессора скалярный канал 105 содержит одну скалярную вычислительную секцию 106.In the preferred embodiment of the processor,
В предпочтительном варианте осуществления процессора скалярная вычислительная секция 106 содержит скалярный регистровый файл RF 301, который является многопортовым и в котором хранятся обрабатываемые скалярные данные.In the preferred embodiment of the processor, the
В предпочтительном варианте осуществления процессора скалярный регистровый файл RF 301 содержит порты, связанные со скалярным каналом 105 обработки данных и выполненные с возможностью обмена данными с памятью данных DMEM/L1D$ 103.In the preferred embodiment of the processor, the RF
В предпочтительном варианте осуществления процессора скалярный регистровый файл RF 301 содержит порты, связанные с исполнительными устройствами скалярной вычислительной секции 106 скалярного канала 105 обработки данных, выполненные с возможностью передачи исходных данных для выполнения вычислительных операций и записи результатов операций обратно в скалярный регистровый файл RF 301.In the preferred embodiment of the processor, the RF
В предпочтительном варианте осуществления процессора скалярная вычислительная секция 106 содержит блоки обработки данных SLSE0 310, SLSE1 311, которые выполнены с возможностью обеспечения обмена данными между памятью данных DMEM/L1D$ 103 и скалярным регистровым файлом RF 301, в том числе выполнения команд пересылок данных между памятью данных DMEM/L1D$ 103 и скалярным регистровым файлом RF 301.In the preferred embodiment of the processor, the
В предпочтительном варианте осуществления процессора скалярная вычислительная секция 106 содержит блоки обработки данных ALU0 302, ALU1 303, ALU2 304, ALU3 305, выполняющие арифметические и логические операции над числами с фиксированной запятой.In the preferred embodiment of the processor, the
В предпочтительном варианте осуществления процессора скалярная вычислительная секция 106 содержит блоки обработки данных FALU0 306, FALU1 307, выполняющие арифметические и логические операции над числами с плавающей запятой.In the preferred embodiment of the processor, the
В предпочтительном варианте осуществления процессора скалярная вычислительная секция 106 содержит блоки обработки данных SMU0 308, SMU1 309, выполняющие операции умножения над числами с фиксированной и плавающей запятой.In the preferred embodiment of the processor, the
В предпочтительном варианте осуществления процессора скалярная вычислительная секция 106 содержит блок обработки данных SH 312, выполняющий операции логического и арифметического сдвига.In the preferred embodiment of the processor, the
В предпочтительном варианте осуществления процессора скалярная вычислительная секция 106 содержит блок обработки данных CONV 315, выполняющий операции преобразования типов данных.In the preferred embodiment of the processor, the
В предпочтительном варианте осуществления процессора скалярная вычислительная секция 106 содержит блок обработки данных DIV 313, выполняющий операции деления.In the preferred embodiment of the processor, the
В предпочтительном варианте осуществления процессора скалярная вычислительная секция 106 содержит блок обработки данных MF 314, выполняющий операции вычисления трансцендентных математических функций. Базовый набор операций, выполняемых блоком MF 314, приведен в таблице 9.In the preferred embodiment of the processor, the
В предпочтительном варианте осуществления процессора векторный канал 107 состоит из нескольких векторных вычислительных секций 108, количество которых соответствует разрядности обрабатываемого вектора.In the preferred embodiment of the processor, the
В предпочтительном варианте осуществления процессора векторная вычислительная секция 108 содержит векторный регистровый файл VRF 401, который является многопортовым и мультиформатным, и в котором хранятся обрабатываемые векторные данные.In the preferred embodiment of the processor,
В предпочтительном варианте осуществления процессора векторный регистровый файл VRF 401 является мультиформатным, так что каждый 64-разрядный регистр 500 векторного регистрового файла VRF 401 может хранить либо одно 64-разрядное значение 501, либо два 32-разрядных значения 502, либо четыре 16-разрядных значения 503, либо восемь 8-разрядных значений 504.In the preferred embodiment of the processor, the vector
В предпочтительном варианте осуществления процессора векторный регистровый файл VRF 401 содержит порты, связанные с внешним интерфейсом векторного канала 107 и выполненные с возможностью обмена данными с памятью данных DMEM/L1D$ 103.In the preferred embodiment of the processor, the vector
В предпочтительном варианте осуществления процессора векторный регистровый файл VRF 401 содержит порты, связанные с исполнительными устройствами векторной вычислительной секции 108, выполненные с возможностью передачи исходных данных для выполнения вычислительных операций и записи результатов обратно.In the preferred embodiment of the processor, the vector
В предпочтительном варианте осуществления процессора векторный регистровый файл VRF 401 выполнен с возможностью работы с различными форматами данных.In the preferred embodiment of the processor, the vector
В предпочтительном варианте осуществления процессора векторная вычислительная секция 108 содержит блоки VLSE0 412, VLSE1 413, которые выполнены с возможностью обеспечения обмена данными между памятью данных DMEM/L1D$ 103 и векторным регистровым файлом VRF 401, в том числе и выполнения команд пересылок данных между памятью данных DMEM/L1D$ 103 и векторным регистровым файлом VRF 401.In the preferred embodiment of the processor, the
В предпочтительном варианте осуществления процессора векторная вычислительная секция 108 содержит блоки VALU0 403, VALU1 404, VALU2 405, VALU3 406, выполненные с возможностью осуществления арифметических и логических операции над числами с фиксированной запятой.In the preferred embodiment of the processor,
В предпочтительном варианте осуществления процессора векторная вычислительная секция 108 содержит блоки VFALU0 407, VFALU1 408, выполненные с возможностью осуществления арифметических и логических операции над числами с плавающей запятой.In the preferred embodiment of the processor,
В предпочтительном варианте осуществления процессора векторная вычислительная секция 108 содержит блоки VMU0 409, VMU1 410, выполненные с возможностью осуществления операций умножения и умножения с накоплением над числами с фиксированной и плавающей запятой.In the preferred embodiment of the processor,
В предпочтительном варианте осуществления процессора векторная вычислительная секция 108 содержит векторный регистровый файл регистров-аккумуляторов VAC 402, выполненный с возможностью хранения данных, получаемых и используемых в результате выполнения операций умножения с накоплением, выполняемых блоками векторных умножителей VMU0 409, VMU1 410.In the preferred embodiment of the processor,
В предпочтительном варианте осуществления процессора векторная вычислительная секция 108 содержит блок VSH 411, выполненный с возможностью осуществления операции логического и арифметического сдвига над векторными операндами.In the preferred embodiment of the processor,
В предпочтительном варианте осуществления процессора векторная вычислительная секция 108 содержит блок VCONV 414, выполненный с возможностью осуществления операции преобразования типов данных над векторными операндами.In the preferred embodiment of the processor,
В предпочтительном варианте осуществления процессора блок редукции VRED 104 выполнен с возможностью вычисления функций редукции, и при этом обеспечения повышенной эффективности, скорости работы, функциональности и универсальности процессора.In the preferred embodiment of the processor, the
В предпочтительном варианте осуществления процессора блок редукции VRED 104 выполнен с возможностью вычисления функций редукции, и при этом реализации функций взаимодействия скалярной и векторной частей процессора в разнообразных операциях, в которых скалярный канал 105 формирует и/или потребляет скаляр, требуемый и/или формируемый векторным каналом 107.In the preferred embodiment of the processor, the
В предпочтительном варианте осуществления процессора блок редукции VRED 104 содержит блок RALU 601, выполненный с возможностью осуществления арифметико-логических межсекционных операций редукции.In the preferred embodiment of the processor, the
В предпочтительном варианте осуществления процессора блок редукции VRED 104 содержит блок SHUFFLE 602, выполненный с возможностью осуществления операций межсекционных перестановок.In the preferred embodiment of the processor, the
В предпочтительном варианте осуществления процессора блок редукции VRED 104 содержит блок LUT 603, выполненный с возможностью осуществления операций межсекционньгх табличных преобразований.In the preferred embodiment of the processor, the
В предпочтительном варианте осуществления процессора блок редукции VRED 104 содержит блок HIST 604, выполненный с возможностью осуществления операций вычисления гистограмм.In the preferred embodiment of the processor, the
В предпочтительном варианте осуществления процессора кольцевая шина CDB (Circular Data Bus) 112, выполнена с возможностью осуществления обмена данными одновременно с осуществлением вычислительных операций в скалярном и векторном каналах 105, 107 и в блоке редукции VRED 104.In the preferred embodiment of the processor, the CDB (Circular Data Bus) 112 is configured to exchange data simultaneously with computational operations in the scalar and
В предпочтительном варианте осуществления процессора кольцевая шина CDB 112, выполнена с возможностью осуществления команд циклического сдвига, в результате выполнения которых регистр Ri скалярного регистрового файла RF 301 смещается в регистр Vj векторного регистрового файла VRF 401 нулевой векторной вычислительной секции 108: Vj.0=Ri; регистр Vj векторного регистрового файла VRF 401 старшей (N-1) векторной вычислительной секции 108 смещается в регистр Ri скалярного регистрового файла RF 301: Ri=Vj.N-1; регистры Vj векторных регистровых файлов VRF 401 остальных векторных вычислительных секций 108 смещаются на одну секцию в сторону старших секций: Vj.k=Vj.k-1, k=1,2,…,N-1.In the preferred embodiment of the processor, the
В предпочтительном варианте осуществления процессора кольцевая шина CDB 112, выполнена с возможностью последовательного перемещения данных из векторного канала 107 в скалярный канал 105 с целью выполнения операций, имеющихся только в скалярном канале 105, с последующим возвращением преобразованных данных в векторный канал 107.In the preferred embodiment of the processor, the
Для лучшего понимания заявленного изобретения далее приводится его подробное описание с соответствующими графическими материалами.For a better understanding of the claimed invention, the following is a detailed description with the corresponding drawings.
Фиг. 1. Структурная схема скалярно-векторного процессора, выполненная согласно изобретению.Fig. 1. Structural diagram of a scalar-vector processor, made according to the invention.
Фиг. 2. Структурная схема VLIW-инструкции скалярно-векторного процессора, выполненная согласно изобретению.Fig. 2. Block diagram of the VLIW instruction of the scalar vector processor, made according to the invention.
Фиг. 3. Структурная схема скалярной вычислительной секции скалярного канала скалярно-векторного процессора, выполненная согласно изобретению.Fig. 3. Structural diagram of the scalar computing section of the scalar channel of the scalar vector processor, made according to the invention.
Фиг. 4. Структурная схема векторной вычислительной секции векторного канала скалярно-векторного процессора, выполненная согласно изобретению.Fig. 4. Structural diagram of the vector computing section of the vector channel of the scalar vector processor, made according to the invention.
Фиг. 5. Структурная схема мультиформатного векторного регистрового файла в составе вычислительной секции векторного канала, выполненная согласно изобретению.Fig. 5. Structural diagram of a multi-format vector register file as part of the computational section of a vector channel, made according to the invention.
Фиг. 6. Структурная схема блока редукции, выполненная согласно изобретению.Fig. 6. Structural diagram of the reduction block, made according to the invention.
Фиг. 7. Кольцевая шина для межсекционных скалярно-векторных обменов данными, выполненная согласно изобретению.Fig. 7. Ring bus for intersectional scalar-vector data exchange, made according to the invention.
Табл. 1. Базовый набор команд устройства программного управления, выполненный согласно изобретению.Tab. 1. The basic set of commands of the program control device, made according to the invention.
Табл. 2. Базовый набор команд блока обменов с памятью скалярного канала, выполненный согласно изобретению.Tab. 2. The basic set of commands of the block of exchanges with the memory of the scalar channel, made according to the invention.
Табл. 3. Базовый набор команд блока арифметико-логических операций с фиксированной запятой скалярного канала, выполненный согласно изобретению.Tab. 3. The basic set of commands of the block of arithmetic-logical operations with a fixed point of the scalar channel, made according to the invention.
Табл. 4. Базовый набор команд блока арифметико-логических операций с плавающей запятой скалярного канала, выполненный согласно изобретению.Tab. 4. The basic set of commands of the block of floating-point arithmetic-logical operations of the scalar channel, made according to the invention.
Табл. 5. Базовый набор команд блока умножения с фиксированной и плавающей запятой скалярного канала, выполненный согласно изобретению.Tab. 5. The basic set of commands of the multiplication unit with fixed and floating point of the scalar channel, made according to the invention.
Табл. 6. Базовый набор команд блока сдвига скалярного канала, выполненный согласно изобретению.Tab. 6. The basic set of commands of the scalar channel shift block, made according to the invention.
Табл. 7. Базовый набор команд блока преобразования типов скалярного канала, выполненный согласно изобретению.Tab. 7. The basic set of commands of the scalar channel type conversion block, made according to the invention.
Табл. 8. Базовый набор команд блока деления скалярного канала, выполненный согласно изобретению.Tab. 8. The basic set of commands for the division block of the scalar channel, made according to the invention.
Табл. 9. Базовый набор команд блока вычисления трансцендентных функций скалярного канала, выполненный согласно изобретению.Tab. 9. The basic set of commands for the block for calculating the transcendental functions of the scalar channel, made according to the invention.
Табл. 10. Базовый набор команд блока обменов с памятью векторного канала, выполненный согласно изобретению.Tab. 10. The basic set of commands of the block of exchanges with the memory of the vector channel, made according to the invention.
Табл. 11. Базовый набор команд блока арифметико-логических операций с фиксированной запятой векторного канала, выполненный согласно изобретению.Tab. 11. The basic set of commands of the block of arithmetic-logical operations with a fixed point of the vector channel, made according to the invention.
Табл. 12. Базовый набор команд блока арифметико-логических операций с плавающей запятой векторного канала, выполненный согласно изобретению.Tab. 12. The basic set of instructions for the block of floating-point arithmetic-logical operations of the vector channel, made according to the invention.
Табл. 13. Базовый набор команд блока умножения с фиксированной и плавающей запятой векторного канала.Tab. 13. The basic set of instructions for the multiplication block with fixed and floating point of the vector channel.
Табл. 14. Базовый набор команд блока сдвига векторного канала, выполненный согласно изобретению.Tab. 14. Basic vector channel shift block instruction set according to the invention.
Табл. 15. Базовый набор команд блока преобразования типов векторного канала, выполненный согласно изобретению.Tab. 15. The basic set of commands of the vector channel type conversion block, made according to the invention.
Табл. 16. Базовый набор команд арифметико-логического устройства межсекционной редукции.Tab. 16. Basic set of commands for the arithmetic logic unit of intersectional reduction.
Табл. 17. Базовый набор команд блока межсекционных перестановок, выполненный согласно изобретению.Tab. 17. The basic set of commands of the block of intersectional permutations, made according to the invention.
Табл. 18. Базовый набор команд блока межсекционных табличных преобразований (LUT-преобразований), выполненный согласно изобретению.Tab. 18. The basic set of commands block intersectional table transformations (LUT-transformations), made according to the invention.
Табл. 19. Базовый набор команд блока вычисления гистограмм, выполненный согласно изобретению.Tab. 19. The basic set of commands for the histogram calculation block, made according to the invention.
Табл. 20. Базовый набор команд межсекционного скалярно-векторного сдвига, выполненный согласно изобретению.Tab. 20. Basic set of instructions for intersectional scalar-vector shift, made according to the invention.
Архитектура заявленного скалярно-векторного процессора ориентирована прежде всего на решение задач цифровой обработки сигналов, связанных с массивно-параллельными вычислениями, включая приложения искусственного интеллекта и нейронных сетей.The architecture of the claimed scalar vector processor is focused primarily on solving digital signal processing problems associated with massively parallel computing, including applications of artificial intelligence and neural networks.
В состав процессора 100 (Фиг. 1) входит скалярный канал 105 (Scalar Channel) и векторный канал 107 (Vector Channel) обработки данных. Скалярный канал 105 включает в себя одну скалярную вычислительную секцию 106 (Scalar Unit), в то время как векторный канал включает несколько векторных вычислительных секций 108 (Vector Lane).The processor 100 (FIG. 1) includes a scalar channel 105 (Scalar Channel) and a vector channel 107 (Vector Channel) of data processing. The
Взаимодействие процессора с памятью организовано традиционным способом. На уровне вычислительного ядра процессора реализуется гарвардская архитектура с возможностью одновременного доступа к памяти программ и данных по отдельным шинам. При этом память программ и данных может быть реализована как в виде кэш-памяти первого уровня (соответственно L1I$ 102 и L1D$ 103), так и в виде тесно связанной (Tightly-Coupled Memory, ТСМ) статической памяти (соответственно РМЕМ 102 и DMEM 103). На верхнем уровне реализуется фон-неймановская архитектура, в которой кэш-память второго уровня L2$ 101 обслуживает обращения кэш-памяти программ и данных первого уровня, и через внешний интерфейс имеет доступ к внешней памяти системы.The interaction of the processor with memory is organized in the traditional way. At the level of the processor core, the Harvard architecture is implemented with the possibility of simultaneous access to program memory and data via separate buses. At the same time, program and data memory can be implemented both in the form of a first-level cache memory (L1I$ 102 and L1D$ 103, respectively), and in the form of tightly coupled (Tightly-Coupled Memory, TCM) static memory (
Инструкции, считываемые из программной памяти PMEM/L1I$ 102 при помощи устройства выборки FETCH 109, поступают в блок DECODE 110, который декодирует их и формирует сигналы управления для исполнительных устройств процессора.Instructions read from the program memory PMEM/L1I$ 102 using the fetch device FETCH 109 are sent to the
Инструкции организованы в виде VLIW-пакетов (VLIW - Very Long Instruction Word), содержащих несколько одновременно исполняемых команд как для скалярного, так и для векторного каналов 105, 107 процессора. На Фиг. 2 показана структура VLIW-пакета 201. Для каждой команды в VLIW-пакете 201 предусмотрено место, называемое слотом. Всего в VLIW-пакете имеется четыре слота 202-205 для команд скалярного канала 105 и четыре слота 206-209 для команд векторного канала 107. Таким образом, одновременно может выполняться до восьми команд. Каждый из восьми слотов 202-209 VLIW-пакета 201 может содержать команды определенного типа, предназначенные для соответствующего набора исполнительных устройств 210-217. Состав и общее количество команд для каждого VLIW-пакета могут быть различны.Instructions are organized in the form of VLIW-packages (VLIW - Very Long Instruction Word), containing several simultaneously executable commands for both scalar and
Команды программного управления, в число которых входят команды программных переходов и команды программных циклов, выполняются с помощью блока программного управления PCTRL 111.Program control instructions, which include program jump instructions and program loop instructions, are executed using the
В таблице 1 приведен базовый набор команд программного управления, выполняемых с помощью блока PCTRL 111.Table 1 shows the basic set of program control commands executed using the
К командам скалярного канала 105 процессора относятся команды скалярных обращений к памяти данных (SLSE0 310, SLSE1 311) и команды на выполнение скалярных вычислительных операций - арифметико-логических операций с фиксированной запятой (ALU0 302, ALU1 303, ALU2 304, ALU3 305), арифметико-логических операций с плавающей запятой (FALU0 306, FALU1 307), умножения с фиксированной и плавающей запятой (SMU0 308, SMU1 309), сдвига (SH 312), преобразования типов (CONV 315), деления (DIV 313), вычисления трансцендентных математических функций (MF 314).The commands of the
К командам векторного канала 107 процессора относятся команды векторных обращений к памяти данных (VLSE0 412, VLSE 413) и команды на выполнение векторных вычислительных операций - арифметико-логических операций с фиксированной запятой (VALU0 403, VALU1 404, VALU2 405, VALU3 406), арифметико-логических операций с плавающей запятой (VFALU0 407, VFALU1 408), умножения с фиксированной и плавающей запятой (VMU0 409, VMU1 410), сдвига (VSH 411), преобразования типов (VCONV 414), а также операций редукции (VRED 104).The instructions of the
В совокупности команды программного управления, команды исполнительных устройств скалярного и векторного каналов 105, 107 процессора, а также команды блока редукции 104 формируют полную систему команд процессора.Together, the program control commands, the commands of the actuators of the scalar and
Структура скалярной вычислительной секции 106 скалярного канала 105 процессора приведена на Фиг. 3. Центральным элементом скалярной вычислительной секции 106 является многопортовый скалярный регистровый файл RF 301, в котором хранятся обрабатываемые скалярные данные. Через порты RF 301, связанные с внешним интерфейсом скалярного канала 105 процессора с помощью контроллеров скалярных обращений к памяти данных SLSE1 311, SLSE2 происходят обмены данными между памятью данных DMEM/L1D$ 103 и скалярным каналом 105 процессора. Через порты RF 301, связанные с исполнительными устройствами скалярной вычислительной секции 106 процессора, передают исходные данные для выполняемых вычислительных операций и записываются их результаты. К числу исполнительных устройств скалярной вычислительной секции 106 процессора относятся: четыре блока арифметико-логических устройств с фиксированной запятой ALU0 302, ALU1 303, ALU2 304, ALU3 305; два блока арифметико-логических устройств с плавающей запятой FALU0 306, FALU1 307; два блока умножителей с фиксированной и плавающей запятой SMU0 308, SMU1 309; блок сдвига SH 312; блок преобразователя типов CONV 315; блок делителя DIV 313; блок вычисления трансцендентных математических функций MF 314. Каждый из указанных блоков выполняет соответствующий набор скалярных вычислительных операций. Одновременно при указанной структуре VLIW-пакета может выполняться до четырех скалярных вычислительных операций, включая две операции скалярных обменов данными с памятью данных первого уровня DMEM/L1D$ 103.The structure of the
В таблице 2 приведен базовый набор команд скалярных обращений к памяти данных 103, выполняемых блоками SLSE0 310, SLSE1 311.Table 2 shows the basic set of instructions for scalar accesses to
В таблице 3 приведен базовый набор команд скалярных арифметико-логических операций с фиксированной запятой, выполняемых блоками ALU0 302, ALU1 303, ALU2 304, ALU3 305.Table 3 shows the basic set of instructions for fixed-point scalar arithmetic-logical operations performed by
В таблице 4 приведен базовый набор команд скалярных арифметико-логических операций с плавающей запятой, выполняемых блоками FALU0 306, FALU1 307.Table 4 shows the basic set of instructions for floating-point scalar arithmetic-logical operations performed by
В таблице 5 приведен базовый набор скалярных команд умножения с фиксированной и плавающей запятой, выполняемых блоками SMU0 308, SMU1 309.Table 5 shows the basic set of fixed and floating point scalar multiply instructions executed by
В таблице 6 приведен базовый набор скалярных команд сдвига, выполняемых с помощью блока SH 312.Table 6 lists the basic set of scalar shift commands executed by the
В таблице 7 приведен базовый набор скалярных команд преобразования типов, выполняемых с помощью блока CONV 315.Table 7 lists the basic set of scalar type conversion instructions performed by the
В таблице 8 приведен базовый набор скалярных команд деления, выполняемых с помощью блока DIV 313.Table 8 shows the basic set of scalar division instructions executed with the
В таблице 9 приведен базовый набор скалярных команд вычисления трансцендентных математических функций, выполняемых с помощью блока MF 314.Table 9 shows the basic set of scalar commands for calculating transcendental mathematical functions performed using the
В таблицах 1-20 используются следующие обозначения:Tables 1-20 use the following designations:
R, Ri, Ra, Rt, Rs, Rd - скалярные регистры данных;R, Ri, Ra, Rt, Rs, Rd - scalar data registers;
V, Vi, Va, Vt, Vs, Vd - векторные регистры данных;V, Vi, Va, Vt, Vs, Vd - vector data registers;
VAi - векторные регистры-аккумуляторы;VAi - vector accumulator registers;
.b, .h, .l, .d - спецификаторы формата данных:.b, .h, .l, .d - data format specifiers:
.b - byte (8 разрядов);.b - byte (8 bits);
.h - halfword (16 разрядов);.h - halfword (16 bits);
.l - long (32 разряда);.l - long (32 bits);
.d - double (64 разряда);.d - double (64 bits);
i8, i16, i32, i64 - целочисленные знаковые 8/16/32/64-разрядные форматы;i8, i16, i32, i64 - signed
u8, u16, u32, u64 - целочисленные беззнаковые 8/16/32/64-разрядные форматы;u8, u16, u32, u64 - integer unsigned 8/16/32/64-bit formats;
#imm - непосредственное значение;#imm - immediate value;
#N - непосредственное N-разрядное значение;#N - immediate N-bit value;
trunkN - отсечение до N разрядов;trunk N - clipping up to N bits;
zextN→M - расширение числа с N до М разрядов путем заполнения недостающих старших разрядов нулями;zext N→M - extension of the number from N to M digits by filling in the missing high digits with zeros;
sextN→M - расширение числа с N до М разрядов путем заполнения недостающих старших разрядов знаковым разрядом;sext N→M - extension of the number from N to M bits by filling in the missing high bits with a sign bit;
{,} - конкатенация (объединение) нескольких операндов;{,} - concatenation (union) of several operands;
T[i], S[i], D[i], V[i] - элементы векторов.T[i], S[i], D[i], V[i] - elements of vectors.
Векторный канал 107 процессора включает в себя несколько векторных вычислительных секций 108, общее количество которых определяется разрядностью обрабатываемого вектора. Структура векторной вычислительной секции 108 векторного канала 107 представлена на Фиг. 4. В ее состав входит многопортовый мультиформатный векторный регистровый файл VRF 401, предназначенный для хранения обрабатываемых векторных данных. Через порты VRF 401, связанные с внешним интерфейсом векторного канала 107 процессора с помощью контроллеров векторных обращений к памяти данных VLSE0 412, VLSE1 413 производится загрузка/выгрузка данных из/в память данных DMEM/L1D$ 103. Через порты VRF 401, связанные с исполнительными устройствами векторной вычислительной секции 108 процессора, векторные данные передают исполнительным устройствам, и полученные результаты снова записывают в векторный регистровый файл VRF 401.The
Особенностью векторного регистрового файла VRF 401 является возможность работы с различными форматами данных, как это показано на Фиг. 5. Каждый 64-разрядный регистр 500 из векторного регистрового файла VRF 401 может хранить либо одно 64-разрядное значение 501, либо два 32-разрядных значения 502, либо четыре 16-разрядных значения 503, либо восемь 8-разрядных значений 504.A feature of the
В состав векторной вычислительной секции 108 векторного канала 107 входит также векторный регистровый файл регистров-аккумуляторов VAC 402, предназначенный для хранения данных, получаемых и используемых в результате выполнения операций умножения с накоплением, выполняемых двумя блоками векторных умножителей VMU0 409, VMU1 410.The composition of the
К числу исполнительных устройств вычислительной секции 108 векторного канала 107 процессора относятся также: четыре блока векторных арифметико-логических устройств с фиксированной запятой VALU0 403, VALU1 404, VALU2 405, VALU3 406; два блока векторных арифметико-логических устройств с плавающей запятой VFALU0 407, VFALU1 408; блок векторного сдвига VSH 411; блок преобразователя типов VCONV 414; блок вычисления функций редукции VRED 104. Каждый из указанных блоков выполняет соответствующий набор векторных вычислительных операций. Одновременно при указанной структуре VLIW-пакета выполняют до четырех векторных вычислительных операций, включая две операции векторных обменов данными с памятью DMEM/L1D$ 103.The execution units of the
В таблице 10 приведен базовый набор команд векторных обращений к памяти данных, выполняемых блоками VLSE0 412, VLSE1 413.Table 10 shows the basic set of instructions for vector data memory accesses performed by the
В таблице 11 приведен базовый набор команд векторных арифметико-логических операций с фиксированной запятой, выполняемых блоками VALU0 403, VALU1 404, VALU2 405, VALU3 406.Table 11 shows the basic set of instructions for fixed-point vector arithmetic-logical operations performed by
В таблице 12 приведен базовый набор команд векторных арифметико-логических операций с плавающей запятой, выполняемых блоками VFALU0 407, VFALU1 408.Table 12 shows the basic set of floating-point vector arithmetic-logical operations performed by
В таблице 13 приведен базовый набор векторных команд умножения с фиксированной и плавающей запятой, выполняемых блоками VMU0 409, VMU1 410.Table 13 shows the basic set of fixed and floating point vector multiplication instructions executed by
В таблице 14 приведен базовый набор векторных команд сдвига, выполняемых с помощью блока VSH 411.Table 14 lists the basic set of vector shift commands that can be executed using the
В таблице 15 приведен базовый набор векторных команд преобразования типов, выполняемых с помощью блока VCONV 414.Table 15 lists the basic set of vector type conversion instructions performed by the
Важнейшей особенностью рассматриваемой архитектуры скалярно-векторного процессора является наличие в ее составе блока редукции VRED 104, связывающего между собой скалярный и векторный каналы 105, 107 процессора, и предназначенную как для организации обменов между ними, так и для выполнения операций, использующих и/или формирующих одновременно и скалярные, и векторные данные. Структурная схема блока редукции VRED 104 представлена на Фиг. 6. В его состав входят следующие исполнительные устройства: блок арифметико-логических межсекционных операций редукции RALU 601, блок межсекционных перестановок SHUFFLE 602, блок межсекционных табличных преобразований LUT 603, блок вычисления гистограмм HIST 604.The most important feature of the considered architecture of the scalar-vector processor is the presence in its composition of the
В таблице 16 приведен базовый набор команд арифметико-логического устройства межсекционной редукции RALU 601, входящего в состав блока редукции VRED 104.Table 16 shows the basic set of commands for the arithmetic logic unit of the
В таблице 17 приведен базовый набор команд блока межсекционных перестановок SHUFFLE 602, входящего в состав блока редукции VRED 104.Table 17 shows the basic set of commands for the
В таблице 18 приведен базовый набор команд блока межсекционных табличных преобразований LUT 603, входящего в состав блока редукции VRED 104.Table 18 shows the basic set of commands of the
В таблице 19 приведен базовый набор команд блока вычисления гистограмм HIST 604, входящего в состав блока редукции VRED 104.Table 19 shows the basic set of commands for the histogram
Еще одним механизмом, объединяющим скалярный и векторный каналы процессора, является кольцевая шина CDB (Circular Data Bus) 112, изображенная на Фиг. 7.Another mechanism that combines the scalar and vector channels of the processor is the CDB (Circular Data Bus) 112 shown in FIG. 7.
Одной из команд, выполняемой с помощью кольцевой шины CDB 112, является команда циклического сдвига VPUSHRD Ri, Vj, в результате выполнения которой скалярный регистр Ri перемещается в векторный регистр Vj нулевой векторной вычислительной секции 108: Vj.0=Ri; векторный регистр Vj старшей векторной вычислительной секции 108 перемещается в скалярный регистр Ri: Ri=Vj.N; в остальных векторных вычислительных секциях 108 данные векторных регистров смещаются на одну секцию в сторону старших секций: Vj.k=Vj.k-1, k=1,2,…,N. Этот механизм может быть использован, например, для последовательного перемещения данных из векторного канала 107 процессора в скалярный канал 105 с целью выполнения специфических операций, имеющихся только в скалярном канале 105 (например, для вычисления трансцендентных математических функций), с последующим возвращением преобразованных данных в векторный канал 107 процессора.One of the instructions executed by the
В таблице 20 приведен базовый набор команд межсекционного скалярно-векторного сдвига, выполняемых с помощью кольцевой шины данных CDB 112.Table 20 shows the basic set of cross-sectional scalar-vector shift commands performed using the
Таким образом, рассматриваемая архитектура, по сравнению с ранее известными архитектурами скалярно-векторных процессоров, обладает значительно более широкими возможностями для организации эффективного взаимодействия между скалярным и векторным каналами 105, 107 процессора, тем самым обеспечивая более высокую производительность выполняемых скалярно-векторных вычислений.Thus, the architecture under consideration, in comparison with the previously known architectures of scalar-vector processors, has much more opportunities for organizing effective interaction between the scalar and
Состав и функциональность исполнительных устройств скалярного и векторного каналов 105, 107 процессора могут быть дополнены или сокращены в зависимости от области применения процессора.The composition and functionality of the actuators of the scalar and
Хотя описанный выше вариант выполнения заявленного изобретения был изложен с целью иллюстрации заявленного изобретения, специалистам ясно, что возможны различные модификации, добавления и замены, не выходящие из объема и смысла заявленного изобретения, раскрытого в прилагаемой формуле изобретения.Although the embodiment of the claimed invention described above has been set forth for the purpose of illustrating the claimed invention, it will be clear to those skilled in the art that various modifications, additions and substitutions are possible without departing from the scope and spirit of the claimed invention as disclosed in the appended claims.
B #32
B Ra.LB#16
B Ra.L
J #32
J Ra.LJ#16
J Ra.L
BS #32, Ri.L
BS Ra.L, Ri.LBS #16 Ri.L
BS Ra.L, Ri.L
JS #32, Ri.L
JS Ra.L, Ri.L
JS Ra.L, Ri.L
DO #16, #32DO #4, #16
DO #16, #32
DO R.L, #32D.O.R.L., #16
D.O.R.L., #32
Табл. 1.Tab. one.
Табл. 2.Tab. 2.
ADDD #imm, Rs, Rd
ADDD.SAT Rt, Rs, RdADDD Rt, Rs, Rd
ADDD #imm, Rs, Rd
ADDD.SAT Rt, Rs, Rd
Rd.d = sat64(Rt.d + Rs.d)Rd.d = (Rt.d(#imm) + Rs.d)
Rd.d = sat64(Rt.d + Rs.d)
ADDL #imm, Rs, Rd
ADDL.SAT Rt, Rs, RdADDL Rt, Rs, Rd
ADDL #imm, Rs, Rd
ADDL.SAT Rt, Rs, Rd
Rd = sat32(Rt + Rd)Rd = (Rt(#imm) + Rs)
Rd = sat32(Rt + Rd)
ADDL.SCL.RND Rt,Rs,RdADDL.SCL Rt, Rs, Rd
ADDL.SCL.RND Rt,Rs,Rd
Rd = (Rt + Rs + 1) >>1Rd = (Rt + Rs)>>1
Rd = (Rt + Rs + 1) >>1
Округляются младшие 16 бит.Addition with rounding i32+i32→i32
The lower 16 bits are rounded off.
SUBD #imm, Rs, Rd
SUBD.SAT Rt, Rs, RdSubd Rt, Rs, Rd
Subd #imm, Rs, Rd
SUBD.SAT Rt, Rs, Rd
Rd.d = sat64(Rs.d - Rt.d)Rd.d = (Rs.d - Rt.d(#imm))
Rd.d = sat64(Rs.d - Rt.d)
SUBL.SCL.RND Rt,Rs,RdSUBL.SCL Rt, Rs, Rd
SUBL.SCL.RND Rt,Rs,Rd
Rd = (Rs - Rt - 1) >>1Rd = (Rs - Rt)>>1
Rd = (Rs - Rt - 1) >>1
Округляются младшие 16 бит.Subtraction with rounding i32+i32→i32
The lower 16 bits are rounded off.
NEGD.SAT Rs, RdNEGD Rs, Rd
NEGD.SAT Rs, Rd
Rd = sat32(-Rs)Rd = -Rs
Rd = sat32(-Rs)
NEGL.SAT Rs, RdNEGL Rs, Rd
NEGL.SAT Rs, Rd
Rd = sat32(-Rs)Rd = -Rs
Rd = sat32(-Rs)
ABSD.SAT Rs, RdABSD Rs, Rd
ABSD.SAT Rs, Rd
Rd = sat64(|Rs|)Rd = |Rs|
Rd = sat64(|Rs|)
ABSL.SAT Rs, RdABSL Rs, Rd
ABSL.SAT Rs, Rd
Rd = sat32(|Rs|)Rd = |Rs|
Rd = sat32(|Rs|)
Табл. 3.Tab. 3.
Табл. 4.Tab. four.
MPYLLO #imm, Rs, RdMPYLLO Rt, Rs, Rd
MPYLLO #imm, Rs, Rd
Rd = trunk32(Rs * #imm)Rd = trunk 32 (Rs * Rt)
Rd = trunk 32 (Rs * #imm)
MPYLULO #imm, Rs, RdMPYLULO Rt, Rs, Rd
MPYLULO #imm, Rs, Rd
Rd = trunk32(Rs * #imm)Rd = trunk 32 (Rs * Rt)
Rd = trunk 32 (Rs * #imm)
MPYLHI #imm, Rs, Rd
MPYLHI.RND Rt, Rs, RdMPYLHI Rt, Rs, Rd
MPYLHI #imm, Rs, Rd
MPYLHI.RND Rt, Rs, Rd
Rd = (Rs * #imm)>>32
Rd = (Rs * #imm + 0x8000_0000)>>32Rd = (Rs * Rt)>>32
Rd = (Rs * #imm)>>32
Rd = (Rs * #imm + 0x8000_0000)>>32
MPYLUHI #imm, Rs, RdMPYLUHI Rt, Rs, Rd
MPYLUHI #imm, Rs, Rd
Rd = (Rs * #imm)>>32Rd = (Rs * Rt)>>32
Rd = (Rs * #imm)>>32
MPYL #imm, Rs, RddMPYL Rt, Rs, Rdd
MPYL #imm, Rs, Rdd
Rdd = Rs * #immRdd = Rs * Rt
Rdd = Rs * #imm
MPYLU #imm, Rs, RddMPYLU Rt, Rs, Rdd
MPYLU #imm, Rs, Rdd
Rdd = Rs * #immRdd = Rs * Rt
Rdd = Rs * #imm
FMADD Rt, Rs, Rr, RdFMADD Rt, Rs, Rd
FMADD Rt, Rs, Rr, Rd
Rd = Rr + Rt*RsRd = Rd + Rt*Rs
Rd = Rr + Rt*Rs
Табл. 5.Tab. 5.
ASRD #5u, Rs, Rd
ASRD1 #5u, Rs, RdASRD Rt,Rs, Rd
ASRD #5u, Rs, Rd
ASRD1 #5u, Rs, Rd
Rd.d = Rs.d >> #5u
Rd.d = Rs.d >> (#5u+32)Rd.d = Rs.d >> Rt
Rd.d = Rs.d >>#5u
Rd.d = Rs.d >>(#5u+32)
LSLD #5u,Rs, Rd
LSLD1 #5u,Rs, RdLSLD Rt,Rs, Rd
LSLD #5u,Rs, Rd
LSLD1 #5u,Rs, Rd
Rd.d = Rs.d <<< #5u
Rd.d = Rs.d <<< (#5u+32)Rd.d = Rs.d <<< Rt
Rd.d = Rs.d <<<#5u
Rd.d = Rs.d <<<(#5u+32)
LSRD #u5,Rs, Rd
LSRD1 #u5,Rs, RdLSRD Rt,Rs, Rd
LSRD #u5,Rs, Rd
LSRD1 #u5,Rs, Rd
Rd.d = Rs.d >>> #5u
Rd.d = Rs.d >>> (#5u+32)Rd.d = Rs.d >>> Rt
Rd.d = Rs.d >>>#5u
Rd.d = Rs.d >>>(#5u+32)
LSLD1.SAT #u5,Rs, RdLSLD.SAT Rt(#u5),Rs, Rd
LSLD1.SAT #u5,Rs, Rd
Rd = sat64(Rs <<< (#5u+32))Rd = sat64(Rs <<<(#5u))
Rd = sat64(Rs <<<(#5u+32))
Обычное поведение при #5 = 0: результат Rd = Rs.Rotate left, 64-bit grid
Normal behavior when #5 = 0: result Rd = Rs.
Особое поведение при #5 = 0: результат Rd = {Rs.L[0], Rs.L[1]} (два слова 32-бит меняются местами).Rotate right, 64-bit grid
Special behavior when #5 = 0: result Rd = {Rs.L[0], Rs.L[1]} (two 32-bit words are swapped).
ROLL #5u, Rs, RdROLL Rt, Rs, Rd
ROLL #5u, Rs, Rd
RORL #5u, Rs, RdRORL Rt, Rs, Rd
RORL #5u, Rs, Rd
Табл. 6.Tab. 6.
CVBL Rt, RdCVBLU Rt, Rd
CVBL Rt, Rd
Rd.l = sext8→32(Rt.b)Rd.l = zext 8→32 (Rt.b)
Rd.l = sext 8→32 (Rt.b)
CVHL Rt, RdCVHLU Rt, Rd
CVHL Rt, Rd
Rd.l = sext16→32(Rt.h)Rd.l = zext 16→32 (Rt.h)
Rd.l = sext 16→32 (Rt.h)
CVBD Rt, RdCVBDU Rt, Rs
CVBD Rt, Rd
Rd.d = sext8→64(Rt.b)Rd.d= zext 8→64 (Rt.b)
Rd.d = sext 8→64 (Rt.b)
CVHD Rt, RdCVHDU Rt, Rs
CVHD Rt, Rd
Rd.d = sext16→64(Rt.h)Rd.d= zext 16→64 (Rt.h)
Rd.d = sext 16→64 (Rt.h)
CVLD Rt, RdCVLDU Rt, Rs
CVLD Rt, Rd
Rd.d = sext32→64(Rt.l)Rd.d= zext 32→64 (Rt.l)
Rd.d = sext 32→64 (Rt.l)
CVLB.sat Rt, Rd
CVLBU.sat Rt, Rd
CVLH Rt, Rd
CVLH.sat Rt, Rd
CVLHU.sat Rt, Rd
CVDB Rt, Rd
CVDB.sat Rt, Rd
CVDBU.sat Rt, Rd
CVDH Rt, Rd
CVDH.sat Rt, Rd
CVDHU.sat Rt, Rd
CVDL Rt, Rd
CVDL.sat Rt, Rd
CVDLU.sat Rt, RdCVLB Rt, Rd
CVLB.sat Rt, Rd
CVLBU.sat Rt, Rd
CVLH Rt, Rd
CVLH.sat Rt, Rd
CVLHU.sat Rt, Rd
CVDB Rt, Rd
CVDB.sat Rt, Rd
CVDBU.sat Rt, Rd
CVDH Rt, Rd
CVDH.sat Rt, Rd
CVDHU.sat Rt, Rd
CVDL Rt, Rd
CVDL.sat Rt, Rd
CVDLU.sat Rt, Rd
CVLB Rt, Rd Rd=sext8→32(trunk8(Rt))
CVLB.sat Rt, Rd
Rd=sext8→32 (sat8(Rt))
CVLBU.sat Rt, Rd
Rd=zext8→32 (usat8(Rt))(on the example of CVLB)
CVLB Rt, Rd Rd=sext 8→32 (trunk8(Rt))
CVLB.sat Rt, Rd
Rd=sext 8→32 (sat8(Rt))
CVLBU.sat Rt, Rd
Rd=zext 8→32 (usat8(Rt))
Усечение исходных данных (L) до запрашиваемой величины (B), с опциональной сатурацией. Полученное число (B) расширяется своим знаком (для знаковых расширений) или нулем (для беззнаковых расширений - с суффиксом U) до исходной величины (L)(on the example of CVLB)
Truncation of raw data (L) to the requested value (B), with optional saturation. The resulting number (B) is expanded by its sign (for signed extensions) or zero (for unsigned extensions - with the U suffix) to the original value (L)
Rd[1].h = 0Rd[0].h = float_to_halffloat(Rt)
Rd[1].h = 0
Старшие 16 бит регистра Rd заполняются нулем.Convert float32 to float16
The upper 16 bits of register Rd are filled with zero.
Rd[1].h = 0Rd[0].h = double_to_halffloat(Rt)
Rd[1].h = 0
Старшие 16 бит регистра Rd заполняются нулем.Convert float64 to float16
The upper 16 bits of register Rd are filled with zero.
FCVI.floor Rt, Rd
FCVI.round Rt, Rd
FCVI.ceil Rt, Rd
FCVI.trunc Rt, RdFCVI Rt, Rd
FCVI.floor Rt, Rd
FCVI.round Rt, Rd
FCVI.ceil Rt, Rd
FCVI.trunc Rt, Rd
Опциональное округлениеConvert from float32 to int32
Optional rounding
FCVIU.floor Rt, Rd
FCVIU.round Rt, Rd
FCVIU.ceil Rt, Rd
FCVIU.trunc Rt, RdFCVIU Rt, Rd
FCVIU.floor Rt, Rd
FCVIU.round Rt, Rd
FCVIU.ceil Rt, Rd
FCVIU.trunc Rt, Rd
Опциональное округлениеConvert from float32 to uint32
Optional rounding
DCVD.floor Rt, Rd
DCVD.round Rt, Rd
DCVD.ceil Rt, Rd
DCVD.trunc Rt, RdDCVD Rt, Rd
DCVD.floor Rt, Rd
DCVD.round Rt, Rd
DCVD.ceil Rt, Rd
DCVD.trunc Rt, Rd
Опциональное округлениеConvert from float64 to int64
Optional rounding
DCVDU.floor Rt, Rd
DCVDU.round Rt, Rd
DCVDU.ceil Rt, Rd
DCVDU.trunc Rt, RdDCVDU Rt, Rd
DCVDU.floor Rt, Rd
DCVDU.round Rt, Rd
DCVDU.ceil Rt, Rd
DCVDU.trunc Rt, Rd
Опциональное округлениеConvert from float64 to uint64
Optional rounding
Табл. 7.Tab. 7.
if (Rs == 0)
REM = 0
DIV = (Rt >= 0)? 0x7FFFFFFF: 0x80000000
else
DIV = Rt / Rs
REM = Rt % Rs
Rd = DIVDivision i32:
if (Rs == 0)
REM = 0
DIV = (Rt >= 0)? 0x7FFFFFFF: 0x80000000
else
DIV = Rt / Rs
REM = Rt % Rs
Rd=DIV
if (Rs == 0)
REM = 0
DIV = (Rt >= 0)? 0x7FFFFFFF: 0x80000000
else
DIV = Rt / Rs
REM = Rt % Rs
Rd = REMRemainder from dividing i32:
if (Rs == 0)
REM = 0
DIV = (Rt >= 0)? 0x7FFFFFFF: 0x80000000
else
DIV = Rt / Rs
REM = Rt % Rs
Rd=REM
if (Rs == 0)
REM = 0
DIV = (Rt >= 0)? 0x7FFFFFFF: 0x80000000
else
DIV = Rt / Rs
REM = Rt % Rs
Rd = {REM, DIV}Remainder of i32 division, i32 division:
if (Rs == 0)
REM = 0
DIV = (Rt >= 0)? 0x7FFFFFFF: 0x80000000
else
DIV = Rt / Rs
REM = Rt % Rs
Rd = {REM, DIV}
if (Rs == 0)
DIV = 0xFFFFFFFF
REM = 0
else
DIV = Rt / Rs
REM = Rt % Rs
Rd = DIVDivision u32:
if (Rs == 0)
DIV = 0xFFFFFFFF
REM = 0
else
DIV = Rt / Rs
REM = Rt % Rs
Rd=DIV
if (Rs == 0)
DIV = 0xFFFFFFFF
REM = 0
else
DIV = Rt / Rs
REM = Rt % Rs
Rd = REMRemainder from dividing u32:
if (Rs == 0)
DIV = 0xFFFFFFFF
REM = 0
else
DIV = Rt / Rs
REM = Rt % Rs
Rd=REM
if (Rs == 0)
DIV = 0xFFFFFFFF
REM = 0
else
DIV = Rt / Rs
REM = Rt % Rs
Rd = {REM, DIV}Remainder from division u32, division u32:
if (Rs == 0)
DIV = 0xFFFFFFFF
REM = 0
else
DIV = Rt / Rs
REM = Rt % Rs
Rd = {REM, DIV}
Табл. 8.Tab. eight.
Вход (X) и выход (Z) имеют 32-разрядный формат плавающей точки: (float32)X, (float32)ZCalculation of the value of the exponential function with base 2: Z=2 X .
Input (X) and output (Z) are 32-bit floating point format: (float32)X, (float32)Z
Z=Ln X.
Вход (X) и выход (Z) имеют 32-разрядный формат плавающей точки: (float32)X, (float32)ZCalculating the value of the natural logarithm:
Z=LnX.
Input (X) and output (Z) are 32-bit floating point format: (float32)X, (float32)Z
Z=√X.
Вход (X) и выход (Z) имеют 32-разрядный формат плавающей точки:
(float32)X, (float32)Z.
Ограничения и особые случаи:
FSQRT(0) = 0
FSQRT(-0) = -0
FSQRT(A) = NaN, A < 0 Extracting the square root:
Z=√X.
The input (X) and output (Z) are in 32-bit floating point format:
(float32)X, (float32)Z.
Restrictions and special cases:
FSQRT(0) = 0
FSQRT(-0) = -0
FSQRT(A) = NaN, A < 0
Z=1./√X.
Вход (X) и выход (Z) имеют 32-разрядный формат плавающей точки: (float32)X, (float32)ZCalculating the reciprocal of the square root:
Z=1./√X.
Input (X) and output (Z) are 32-bit floating point format: (float32)X, (float32)Z
Z=1./X.
Вход (X) и выход (Z) имеют 32-разрядный формат плавающей точки: (float32)X, (float32)ZCalculating the reciprocal:
Z=1./X.
Input (X) and output (Z) are 32-bit floating point format: (float32)X, (float32)Z
Табл. 9.Tab. 9.
VLDBHUVLDBH
VLDBHU
VLDBLUVLDBL
VLDBL
VLDHLUVLDHL
VLDHLU
VLDLDUVLDLD
VLDLDU
Табл. 10.Tab. ten.
VADDD.SAT Vt, Vs, Vd
VADDDU.SAT Vt, Vs, VdVADDD Vt, Vs, Vd
VADDD.SAT Vt, Vs, Vd
VADDDU.SAT Vt, Vs, Vd
D[i] = sat32(T[i] + S[i]),i=0
D[i] = usat32(T[i] + S[i]), i = 0, unsignedD[i] = T[i] + S[i], i = 0
D[i] = sat32(T[i] + S[i]),i=0
D[i] = usat32(T[i] + S[i]), i = 0, unsigned
Опциональная сатурацияAddition i64 = i64 + i64 signed (unsigned u64+u64→u64),
Optional saturation
VADDD.SCL.RND Vt, Vs, Vd
VADDDU.SCL Vt, Vs, Vd
VADDDU.SCL.RND Vt, Vs, VdVADDD.SCL Vt, Vs, Vd
VADDD.SCL.RND Vt, Vs, Vd
VADDDU.SCL Vt, Vs, Vd
VADDDU.SCL.RND Vt, Vs, Vd
D[i] = rnd(T[i] + S[i]) >> 1, i = 0
D[i] = (T[i] + S[i]) >> 1, i = 0, unsigned
D[i] = rnd(T[i] + S[i]) >> 1, i = 0, unsignedD[i] = (T[i] + S[i]) >> 1, i=0
D[i] = rnd(T[i] + S[i]) >> 1, i = 0
D[i] = (T[i] + S[i]) >> 1, i = 0, unsigned
D[i] = rnd(T[i] + S[i]) >> 1, i = 0, unsigned
Опциональное округлениеAddition i64 = i64 + i64 signed (unsigned u64+u64→u64),
Optional rounding
VADDL #32, Vs, Vd
VADDL.SAT Vt, Vs, Vd
VADDLU.SAT Vt, Vs, VdVADDL Vt, Vs, Vd
VADDL.SAT Vt, Vs, Vd
VADDLU.SAT Vt, Vs, Vd
D[i] = #I2 + S[i], i = 0:1
D[i] = sat32(T[i] + S[i]), i = 0:1
D[i] = usat32(T[i] + S[i]), i = 0:1, unsignedD[i] = T[i] + S[i], i = 0:1
D[i] = #I2 + S[i], i = 0:1
D[i] = sat32(T[i] + S[i]), i = 0:1
D[i] = usat32(T[i] + S[i]), i = 0:1, unsigned
Опциональная сатурацияAdd i32 = i32 + i32 signed (unsigned u32+u32→u32),
Optional saturation
VADDL.SCL.RND Vt, Vs, Vd
VADDLU.SCL Vt, Vs, Vd
VADDLU.SCL.RND Vt, Vs, VdVADDL.SCL Vt, Vs, Vd
VADDL.SCL.RND Vt, Vs, Vd
VADDLU.SCL Vt, Vs, Vd
VADDLU.SCL.RND Vt, Vs, Vd
D[i] = rnd(T[i] + S[i]) >> 1, i = 0:1
D[i] = (T[i] + S[i]) >> 1, i = 0:1, unsigned
D[i] = rnd(T[i] + S[i]) >> 1, i = 0:1, unsignedD[i] = (T[i] + S[i]) >> 1, i = 0:1
D[i] = rnd(T[i] + S[i]) >> 1, i = 0:1
D[i] = (T[i] + S[i]) >> 1, i = 0:1, unsigned
D[i] = rnd(T[i] + S[i]) >> 1, i = 0:1, unsigned
Опциональное округлениеAdd i32 = i32 + i32 signed (unsigned u32+u32→u32),
Optional rounding
VADDH #IMM16, Vs, Vd
VADDH.SAT Vt, Vs, Vd
VADDHU.SAT Vt, Vs, VdVADDH Vt, Vs, Vd
VADDH #IMM16, Vs, Vd
VADDH.SAT Vt, Vs, Vd
VADDHU.SAT Vt, Vs, Vd
D[i] = #IMM16 + S[i], i = 0:3
D[i] = sat16(T[i] + S[i]), i = 0:3
D[i] = usat16(T[i] + S[i]), i = 0:3, unsignedD[i] = T[i] + S[i], i = 0:3
D[i] = #IMM16 + S[i], i = 0:3
D[i] = sat16(T[i] + S[i]), i = 0:3
D[i] = usat16(T[i] + S[i]), i = 0:3, unsigned
Опциональная сатурацияAddition i16 = i16 + i16 signed (unsigned u32+u32→u32),
Optional saturation
VADDH.SCL.RND Vt, Vs, Vd
VADDHU.SCL Vt, Vs, Vd
VADDHU.SCL.RND Vt, Vs, VdVADDH.SCL Vt, Vs, Vd
VADDH.SCL.RND Vt, Vs, Vd
VADDHU.SCL Vt, Vs, Vd
VADDHU.SCL.RND Vt, Vs, Vd
D[i] = rnd(T[i] + S[i]) >> 1, i = 0:3
D[i] = (T[i] + S[i]) >> 1, i = 0:3, unsigned
D[i] = rnd(T[i] + S[i]) >> 1, i = 0:3, unsignedD[i] = (T[i] + S[i]) >> 1, i = 0:3
D[i] = rnd(T[i] + S[i]) >> 1, i = 0:3
D[i] = (T[i] + S[i]) >> 1, i = 0:3, unsigned
D[i] = rnd(T[i] + S[i]) >> 1, i = 0:3, unsigned
Опциональное округлениеAddition i16 = i16 + i16 signed (unsigned u32+u32→u32),
Optional rounding
VADDB #IMM8, Vs, Vd
VADDB.SAT Vt, Vs, Vd
VADDBU.SAT Vt, Vs, VdVADDB Vt, Vs, Vd
VADDB #IMM8, Vs, Vd
VADDB.SAT Vt, Vs, Vd
VADDBU.SAT Vt, Vs, Vd
D[i] = #IMM8 + S[i], i = 0:7
D[i] = sat8(T[i] + S[i]), i = 0:7
D[i] = usat8(T[i] + S[i]), i = 0:7, unsignedD[i] = T[i] + S[i], i = 0:7
D[i] = #IMM8 + S[i], i = 0:7
D[i] = sat8(T[i] + S[i]), i = 0:7
D[i] = usat8(T[i] + S[i]), i = 0:7, unsigned
Опциональная сатурацияAddition i8 = i8 + i8 signed (unsigned u8+u8→u8),
Optional saturation
VADDB.SCL.RND Vt, Vs, Vd
VADDBU.SCL Vt, Vs, Vd
VADDBU.SCL.RND Vt, Vs, VdVADDB.SCL Vt, Vs, Vd
VADDB.SCL.RND Vt, Vs, Vd
VADDBU.SCL Vt, Vs, Vd
VADDBU.SCL.RND Vt, Vs, Vd
D[i] = rnd(T[i] + S[i]) >> 1, i = 0:7
D[i] = (T[i] + S[i]) >> 1, i = 0:7, unsigned
D[i] = rnd(T[i] + S[i]) >> 1, i = 0:7, unsignedD[i] = (T[i] + S[i]) >> 1, i = 0:7
D[i] = rnd(T[i] + S[i]) >> 1, i = 0:7
D[i] = (T[i] + S[i]) >> 1, i = 0:7, unsigned
D[i] = rnd(T[i] + S[i]) >> 1, i = 0:7, unsigned
Опциональное округлениеAddition i8 = i8 + i8 signed (unsigned u8+u8→u8),
Optional rounding
VSUBD.SAT Vt, Vs, Vd
VSUBDU.SAT Vt, Vs, VdVSUBD Vt, Vs, Vd
VSUBD.SAT Vt, Vs, Vd
VSUBDU.SAT Vt, Vs, Vd
D[i] = sat64(S[i] - T[i]), i = 0
D[i] = usat64(S[i] - T[i]), i = 0, unsigned
Vt: = {T1, T0}, i64/u64, Vs = {S0, S0}, i64/u64
Vd = {D1, D0}, i64/u64 D[i] = S[i] - S[i], i = 0
D[i] = sat64(S[i] - T[i]), i = 0
D[i] = usat64(S[i] - T[i]), i = 0, unsigned
Vt: = {T1, T0}, i64/u64, Vs = {S0, S0}, i64/u64
Vd = {D1, D0}, i64/u64
Опциональная сатурацияSubtraction i64 = i64 - i64 signed (unsigned u64-u64→u64),
Optional saturation
VSUBL #32, Vs, Vd
VSUBL.SAT Vt, Vs, Vd
VSUBLU.SAT Vt, Vs, VdVSUBL Vt, Vs, Vd
VSUBL.SAT Vt, Vs, Vd
VSUBLU.SAT Vt, Vs, Vd
D[i] = S[i] - #32, i = 0:1
D[i] = sat32(S[i] - T[i]), i = 0:1
D[i] = usat32(S[i] - T[i]), i = 0:1, unsignedD[i] = S[i] - T[i], i = 0:1
D[i] = S[i] - #32, i = 0:1
D[i] = sat32(S[i] - T[i]), i = 0:1
D[i] = usat32(S[i] - T[i]), i = 0:1, unsigned
Опциональная сатурацияSubtraction i32 = i32 - i32 signed (unsigned u32-u32→u32),
Optional saturation
VSUBL.SCL.RND Vt, Vs, Vd
VSUBL.SCL.RND.SAT Vt, Vs, VdVSUBL.SCL Vt, Vs, Vd
VSUBL.SCL.RND Vt, Vs, Vd
VSUBL.SCL.RND.SAT Vt, Vs, Vd
D[i] = rnd(S[i] - T[i] + 1) >> 1, i = 0:1
D[i] = sat32(rnd(S[i] - T[i]) >> 1), i = 0:1D[i] = (S[i] - T[i]) >> 1, i = 0:1
D[i] = rnd(S[i] - T[i] + 1) >> 1, i = 0:1
D[i] = sat32(rnd(S[i] - T[i]) >> 1), i = 0:1
Опциональное округление и сатурацияSubtraction i32 = i32 - i32 signed,
Optional rounding and saturation
VSUBH #IMM16, Vs, Vd
VSUBH.SAT Vt, Vs, Vd
VSUBHU.SAT Vt, Vs, VdVSUBH Vt, Vs, Vd
VSUBH #IMM16, Vs, Vd
VSUBH.SAT Vt, Vs, Vd
VSUBHU.SAT Vt, Vs, Vd
D[i] = S[i] - #IMM16, i = 0:1
D[i] = sat16(S[i] - T[i]), i = 0:1
D[i] = usat16(S[i] - T[i]), i = 0:3, unsigned D[i] = S[i] - S[i], i = 0:3
D[i] = S[i] - #IMM16, i = 0:1
D[i] = sat16(S[i] - T[i]), i = 0:1
D[i] = usat16(S[i] - T[i]), i = 0:3, unsigned
Опциональная сатурацияSubtraction i16 = i16 - i16 signed (unsigned u16-u16→u16),
Optional saturation
VSUBH.SCL.RND Vt, Vs, Vd
VSUBH.SCL.RND.SAT Vt, Vs, VdVSUBH.SCL Vt, Vs, Vd
VSUBH.SCL.RND Vt, Vs, Vd
VSUBH.SCL.RND.SAT Vt, Vs, Vd
D[i] = rnd(S[i] - T[i]) >> 1, i = 0:1
D[i] = sat16(rnd(S[i] - T[i]) >> 1), i = 0:1D[i] = (S[i] - T[i]) >> 1, i = 0:1
D[i] = rnd(S[i] - T[i]) >> 1, i = 0:1
D[i] = sat16(rnd(S[i] - T[i]) >> 1), i = 0:1
Опциональное округление и сатурацияSubtraction i16 = i16 - i16 signed,
Optional rounding and saturation
VSUBB #IMM8, Vs, Vd
VSUBB.SAT Vt, Vs, Vd
VSUBBU.SAT Vt, Vs, VdVSUBB Vt, Vs, Vd
VSUBB #IMM8, Vs, Vd
VSUBB.SAT Vt, Vs, Vd
VSUBBU.SAT Vt, Vs, Vd
D[i] = S[i] - #IMM8, i = 0:7
D[i] = sat8(S[i] - T[i]), i = 0:7
D[i] = usat8(S[i] - T[i]), i = 0:7, unsigned D[i] = S[i] - S[i], i = 0:7
D[i] = S[i] - #IMM8, i = 0:7
D[i] = sat8(S[i] - T[i]), i = 0:7
D[i] = usat8(S[i] - T[i]), i = 0:7, unsigned
Опциональная сатурацияSubtraction i8 = i8 - i8 signed (unsigned u8-u8→u8),
Optional saturation
VSUBB.SCL.RND Vt, Vs, Vd
VSUBB.SCL.RND.SAT Vt, Vs, VdVSUBB.SCL Vt, Vs, Vd
VSUBB.SCL.RND Vt, Vs, Vd
VSUBB.SCL.RND.SAT Vt, Vs, Vd
D[i] = rnd(S[i] - T[i]) >> 1, i = 0:7
D[i] = sat8(rnd(S[i] - T[i]) >> 1), i = 0:7D[i] = (S[i] - T[i]) >> 1, i = 0:7
D[i] = rnd(S[i] - T[i]) >> 1, i = 0:7
D[i] = sat8(rnd(S[i] - T[i]) >> 1), i = 0:7
Опциональное округление и сатурацияSubtraction i8 = i8 - i8 signed,
Optional rounding and saturation
VABSD.SAT Vs, VdVABSD Vs, Vd
VABSD.SAT Vs, Vd
D[i] = sat64(abs(S[i])), i=0D[i] = abs(S[i]), i=0
D[i] = sat64(abs(S[i])), i=0
VABSL.SAT Vs, VdVABSL Vs, Vd
VABSL.SAT Vs, Vd
D[i] = sat32(abs(S[i])), i=0:1D[i] = abs(S[i]), i=0:1
D[i] = sat32(abs(S[i])), i=0:1
VABSH.SAT Vs, VdVABSH Vs, Vd
VABSH.SAT Vs, Vd
D[i] = sat16(abs(S[i])), i=0:3D[i] = abs(S[i]), i=0:3
D[i] = sat16(abs(S[i])), i=0:3
VABSB.SAT Vs, VdVABSB Vs, Vd
VABSB.SAT Vs, Vd
D[i] = sat8(abs(S[i])), i=0:7D[i] = abs(S[i]), i=0:7
D[i] = sat8(abs(S[i])), i=0:7
VMAXDU Vt, Vs, VdVMAXD Vt, Vs, Vd
VMAXDU Vt, Vs, Vd
D[i] = umax(T[i], S[i]), i=0D[i] = max(T[i], S[i]), i=0
D[i] = umax(T[i], S[i]), i=0
VMAXLU Vt, Vs, VdVMAXL Vt, Vs, Vd
VMAXLU Vt, Vs, Vd
D[i] = umax(T[i], S[i]), i=0:1D[i] = max(T[i], S[i]), i=0:1
D[i] = umax(T[i], S[i]), i=0:1
VMAXHU Vt, Vs, VdVMAXH Vt, Vs, Vd
VMAXHU Vt, Vs, Vd
D[i] = umax(T[i], S[i]), i=0:3D[i] = max(T[i], S[i]), i=0:3
D[i] = umax(T[i], S[i]), i=0:3
VMAXBU Vt, Vs, VdVMAXB Vt, Vs, Vd
VMAXBU Vt, Vs, Vd
D[i] = umax(T[i], S[i]), i=0:7D[i] = max(T[i], S[i]), i=0:7
D[i] = umax(T[i], S[i]), i=0:7
VMINDU Vt, Vs, VdVMIND Vt, Vs, Vd
VMINDU Vt, Vs, Vd
D[i] = umin(T[i], S[i]), i=0D[i] = min(T[i], S[i]), i=0
D[i] = umin(T[i], S[i]), i=0
VMINLU Vt, Vs, VdVMINL Vt, Vs, Vd
Vminlu Vt, Vs, Vd
D[i] = umin(T[i], S[i]), i=0:1D[i] = min(T[i], S[i]), i=0:1
D[i] = umin(T[i], S[i]), i=0:1
VMINHU Vt, Vs, VdVMINH Vt, Vs, Vd
VMINHU Vt, Vs, Vd
D[i] = umin(T[i], S[i]), i=0:3D[i] = min(T[i], S[i]), i=0:3
D[i] = umin(T[i], S[i]), i=0:3
VMINBU Vt, Vs, VdVMINB Vt, Vs, Vd
VMINBU Vt, Vs, Vd
D[i] = umin(T[i], S[i]), i=0:7D[i] = min(T[i], S[i]), i=0:7
D[i] = umin(T[i], S[i]), i=0:7
VMAX2LU Vt, Vs, VdVMAX2L Vt, Vs, Vd
VMAX2LU Vt, Vs, Vd
D[0] = T[0]; then D[i] = maxu(D[0], S[i]), i=0, …, n-1D[0] = T[0]; then D[i] = max(D[0], S[i]), i=0, …, n-1
D[0] = T[0]; then D[i] = maxu(D[0], S[i]), i=0, …, n-1
VMAX4HU Vt, Vs, VdVMAX4H Vt, Vs, Vd
VMAX4HU Vt, Vs, Vd
D[0] = T[0]; then D[i] = maxu(D[0], S[i]), i=0, …, n-1D[0] = T[0]; then D[i] = max(D[0], S[i]), i=0, …, n-1
D[0] = T[0]; then D[i] = maxu(D[0], S[i]), i=0, …, n-1
VMAX8BU Vt, Vs, VdVMAX8B Vt, Vs, Vd
VMAX8BU Vt, Vs, Vd
D[0] = T[0]; then D[i] = maxu(D[0], S[i]), i=0, …, n-1D[0] = T[0]; then D[i] = max(D[0], S[i]), i=0, …, n-1
D[0] = T[0]; then D[i] = maxu(D[0], S[i]), i=0, …, n-1
VMIN2LU Vt, Vs, VdVMIN2L Vt, Vs, Vd
VMIN2LU Vt, Vs, Vd
D[0] = T[0]; then D[i] = minu(D[0], S[i]), i=0, …, n-1D[0] = T[0]; then D[i] = min(D[0], S[i]), i=0, …, n-1
D[0] = T[0]; then D[i] = minu(D[0], S[i]), i=0, …, n-1
VMIN4HU Vt, Vs, VdVMIN4H Vt, Vs, Vd
VMIN4HU Vt, Vs, Vd
D[0] = T[0]; then D[i] = minu(D[0], S[i]), i=0, …, n-1D[0] = T[0]; then D[i] = min(D[0], S[i]), i=0, …, n-1
D[0] = T[0]; then D[i] = minu(D[0], S[i]), i=0, …, n-1
VMIN8BU Vt, Vs, VdVMIN8B Vt, Vs, Vd
VMIN8BU Vt, Vs, Vd
D[0] = T[0]; then D[i] = minu(D[0], S[i]), i=0, …, n-1D[0] = T[0]; then D[i] = min(D[0], S[i]), i=0, …, n-1
D[0] = T[0]; then D[i] = minu(D[0], S[i]), i=0, …, n-1
VANDI Vt, Vs, VdVANDC Vt, Vs, Vd
Vandi Vt, Vs, Vd
D = ~ (T & S)D = ~T&S
D=~(T&S)
одного из операндов или результата, i8Element-by-element logical "AND" with inversion
one of the operands or the result, i8
VORI Vt, Vs, VdVORC Vt, Vs, Vd
VORI Vt, Vs, Vd
D = ~ (T | S)D = ~T | S
D=~(T|S)
одного из операндов или результата, i8Element-by-element logical "OR" with inversion
one of the operands or the result, i8
Табл. 11.Tab. eleven.
VS = {S3, S2, S1, S0}
VD = {S3 + T2, S2 + T3, S1 + T0, S0 + T1}VT = {T3, T2, T1, T0}
VS = {S3, S2, S1, S0}
VD = {S3 + T2, S2 + T3, S1 + T0, S0 + T1}
VS = {S1, S0}
Vd={S1 + T1, S0 + T0}VT = {T1, T0}
VS = {S1, S0}
Vd={S1 + T1, S0 + T0}
VS = {S0}
Vd = {S0 + T0}VT = {T0}
VS = {S0}
Vd = {S0 + T0}
VS = {S3, S2, S1, S0}
VD = {S3 - T2, S2 - T3, S1 - T0, S0 - T1}VT = {T3, T2, T1, T0}
VS = {S3, S2, S1, S0}
VD = {S3 - T2, S2 - T3, S1 - T0, S0 - T1}
VS = {S1, S0}
Vd = {S1 - T1, S0 - T0}VT = {T1, T0}
VS = {S1, S0}
Vd = {S1 - T1, S0 - T0}
VS = {S0}
Vd = {S0 - T0}VT = {T0}
VS = {S0}
Vd = {S0 - T0}
D[i] = max(T[i], S[i])Vt={T[i]}, Vs={S[i]}, Vd={D[i]}, i=0…3
D[i] = max(T[i], S[i])
D[i] = max(T[i], S[i])Vt={T[i]}, Vs={S[i]}, Vd={D[i]}, i=0…1
D[i] = max(T[i], S[i])
D[i] = max(T[i], S[i])Vt={T[i]}, Vs={S[i]}, Vd={D[i]}, i=0
D[i] = max(T[i], S[i])
D[i] = min(T[i], S[i])Vt={T[i]}, Vs={S[i]}, Vd={D[i]}, f16, i=0…3
D[i] = min(T[i], S[i])
D[i] = min(T[i], S[i])Vt={T[i]}, Vs={S[i]}, Vd={D[i]}, i=0…1
D[i] = min(T[i], S[i])
D[i] = min(T[i], S[i])Vt={T[i]}, Vs={S[i]}, Vd={D[i]}, i=0
D[i] = min(T[i], S[i])
Табл. 12.Tab. 12.
S = {8{i8}} = {S7,…,S0};
D = {8{i16}} = {D7,…,D0} = {D1,D0};
Di = Ti ⋅ Si; i = 0:7;T = {8{i8}} = {T7,…,T0};
S = {8{i8}} = {S7,…,S0};
D = {8{i16}} = {D7,…,D0} = {D1,D0};
Di = Ti ⋅ Si; i = 0:7;
[i16 = i8 ⋅ i8]Multiplication, integer, signed.
[i16 = i8 ⋅ i8]
S = {8{u8}} = {S7,…,S0};
D = {8{u16}} = {D7,…,D0} = {D1,D0};
Di = Ti ⋅ Si; i = 0:7;T = {8{u8}} = {T7,…,T0};
S = {8{u8}} = {S7,…,S0};
D = {8{u16}} = {D7,…,D0} = {D1,D0};
Di = Ti ⋅ Si; i = 0:7;
[u16 = u8 ⋅ u8]Multiplication, integer, unsigned.
[u16 = u8 ⋅ u8]
S = {4{i16}} = {S3,…,S0};
D = {4{i32}} = {D3,…,D0} = {D1,D0};
Di = Ti ⋅ Si; i = 0:3;T = {4{i16}} = {T3,…,T0};
S = {4{i16}} = {S3,…,S0};
D = {4{i32}} = {D3,…,D0} = {D1,D0};
Di = Ti ⋅ Si; i = 0:3;
[i32 = i16 ⋅ i16]Multiplication, integer, signed.
[i32 = i16 ⋅ i16]
S = {4{u16}} = {S3,…,S0};
D = {4{u32}} = {D3,…,D0} = {D1,D0};
Di = Ti ⋅ Si; i = 0:3;T = {4{u16}} = {T3,…,T0};
S = {4{u16}} = {S3,…,S0};
D = {4{u32}} = {D3,…,D0} = {D1,D0};
Di = Ti ⋅ Si; i = 0:3;
[u32 = u16 ⋅ u16]Multiplication, integer, unsigned.
[u32 = u16 ⋅ u16]
S = {2{i32}} = {S1,S0};
D = {2{i64}} = {D1,D0} = {D1,D0};
Di = Ti ⋅ Si; i = 0,1;T = {2{i32}} = {T1,T0};
S = {2{i32}} = {S1,S0};
D = {2{i64}} = {D1,D0} = {D1,D0};
Di = Ti ⋅ Si; i = 0.1;
[i64 = i32 ⋅ i32]Multiplication, integer, signed.
[i64 = i32 ⋅ i32]
S = {2{u32}} = {S1,S0};
D = {2{u64}} = {D1,D0} = {D1,D0};
Di = Ti ⋅ Si; i = 0,1;T = {2{u32}} = {T1,T0};
S = {2{u32}} = {S1,S0};
D = {2{u64}} = {D1,D0} = {D1,D0};
Di = Ti ⋅ Si; i = 0.1;
[u64 = u32 ⋅ u32]Multiplication, integer, unsigned.
[u64 = u32 ⋅ u32]
S = {i64};
D = {i128} = {D1,D0};
D = T ⋅ S;T = {i64};
S = {i64};
D = {i128} = {D1,D0};
D = T ⋅ S;
[i128 = i64 ⋅ i64]Multiplication, integer, signed.
[i128 = i64 ⋅ i64]
S = {u64};
D = {u128} = {D1,D0};
D = T ⋅ S;T = {u64};
S = {u64};
D = {u128} = {D1,D0};
D = T ⋅ S;
[u128 = u64 ⋅ u64]Multiplication, integer, unsigned.
[u128 = u64 ⋅ u64]
VMPACBB T, S, VAdVMPACBB T, S
VMPACBB T, S, VAd
S = {8{i8}} = {S7,…,S0};
AC = {8{i32}} = {AC7,…,AC0};
ACi += Ti ⋅ Si; i = 0:7;T = {8{i8}} = {T7,…,T0};
S = {8{i8}} = {S7,…,S0};
AC = {8{i32}} = {AC7,…,AC0};
ACi += Ti ⋅ Si; i = 0:7;
В двухадресной форме неявно используется VA0.
[i32 += i8 ⋅ i8]Multiplication with accumulation in the accumulator, integer, signed.
The two-address form implicitly uses VA0.
[i32 += i8 ⋅ i8]
VMPACBB T, S, VAdVMPACBB T, S
VMPACBB T, S, VAd
S = {8{i8}} = {S7,…,S0};
AC = {8{i32}} = {AC7,…,AC0};
ACi += Ti ⋅ Si; i = 0:7;T = {8{u8}} = {T7,…,T0};
S = {8{i8}} = {S7,…,S0};
AC = {8{i32}} = {AC7,…,AC0};
ACi += Ti ⋅ Si; i = 0:7;
В двухадресной форме неявно используется VA0.
[i32 += u8 ⋅ i8]Multiplication with accumulation in the accumulator, integer, signed.
The two-address form implicitly uses VA0.
[i32 += u8 ⋅ i8]
VMPACBH T, S, VAdVMPACBH T, S
VMPACBH T, S, VAd
S = {4{i16}} = {S3,…,S0};
AC = {4{i64}} = {AC3,…,AC0};
ACi += Ti ⋅ Si; i = 0:3;T = {4{0, i8}} = {0,T3,…,0,T0};
S = {4{i16}} = {S3,…,S0};
AC = {4{i64}} = {AC3,…,AC0};
ACi += Ti ⋅ Si; i = 0:3;
В двухадресной форме неявно используется VA0.
[i64 += i8 ⋅ i16]Multiplication with accumulation in the accumulator, integer, signed.
The two-address form implicitly uses VA0.
[i64 += i8 ⋅ i16]
VMPACBUH T, S, VAdVMPACBUH T, S
VMPACBUH T, S, VAd
S = {4{i16}} = {S3,…,S0};
AC = {4{i64}} = {AC3,…,AC0};
ACi += Ti ⋅ Si; i = 0:3;T = {4{0,u8}} = {0,T3,…,0,T0};
S = {4{i16}} = {S3,…,S0};
AC = {4{i64}} = {AC3,…,AC0};
ACi += Ti ⋅ Si; i = 0:3;
В двухадресной форме неявно используется VA0.
[i64 += u8 ⋅ i16]Multiplication with accumulation in the accumulator, integer, signed.
The two-address form implicitly uses VA0.
[i64 += u8 ⋅ i16]
VMPACHH T, S, VAdVMPACHH T, S
VMPACHH T, S, VAd
S = {4{i16}} = {S3,…,S0};
AC = {4{i64}} = {AC3,…,AC0};
ACi += Ti ⋅ Si; i = 0:3;T = {4{i16}} = {T3,…,T0};
S = {4{i16}} = {S3,…,S0};
AC = {4{i64}} = {AC3,…,AC0};
ACi += Ti ⋅ Si; i = 0:3;
В двухадресной форме неявно используется VA0.
[i64 += i16 ⋅ i16]Multiplication with accumulation in the accumulator, integer, signed.
The two-address form implicitly uses VA0.
[i64 += i16 ⋅ i16]
VMPACHUH T, S, VAdVMPACHUH T, S
VMPACHUH T, S, VAd
S = {4{i16}} = {S3,…,S0};
AC = {4{i64}} = {AC3,…,AC0};
ACi += Ti ⋅ Si; i = 0:3;T = {4{u16}} = {T3,…,T0};
S = {4{i16}} = {S3,…,S0};
AC = {4{i64}} = {AC3,…,AC0};
ACi += Ti ⋅ Si; i = 0:3;
В двухадресной форме неявно используется VA0.
[i64 += u16 ⋅ i16]Multiplication with accumulation in the accumulator, integer, signed.
The two-address form implicitly uses VA0.
[i64 += u16 ⋅ i16]
VMPACLL T, S, VAdVMPACLL T, S
VMPACLL T, S, VAd
S = {2{i32}} = {S1,S0};
AC = {4{i64}} = {AC3,…,AC0};
ACi += Ti ⋅ Si; i = 0,2;T = {2{i32}} = {T1,T0};
S = {2{i32}} = {S1,S0};
AC = {4{i64}} = {AC3,…,AC0};
ACi += Ti ⋅ Si; i = 0.2;
В двухадресной форме неявно используется VA0.
[i64 += i32 ⋅ i32]Multiplication with accumulation in the accumulator, integer, signed.
The two-address form implicitly uses VA0.
[i64 += i32 ⋅ i32]
S = {4{f16}} = {S3,…,S0};
D = {4{f16}} = {D3,…,D0};
Di = Ti ⋅ Si; i = 0:3;T = {4{f16}} = {T3,…,T0};
S = {4{f16}} = {S3,…,S0};
D = {4{f16}} = {D3,…,D0};
Di = Ti ⋅ Si; i = 0:3;
[f16 = f16 ⋅ f16]Multiplication, half precision floating point numbers.
[f16 = f16 ⋅ f16]
S = {2{f32}} = {S1,S0};
D = {2{f32}} = {D1,D0};
Di = Ti ⋅ Si; i = 0,1;T = {2{f32}} = {T1,T0};
S = {2{f32}} = {S1,S0};
D = {2{f32}} = {D1,D0};
Di = Ti ⋅ Si; i = 0.1;
[f32 = f32 ⋅ f32]Multiplication, single precision floating point numbers.
[f32 = f32 ⋅ f32]
S = {f64};
D = {f64};
D = T ⋅ S;T = {f64};
S = {f64};
D = {f64};
D = T ⋅ S;
[f64 = f64 ⋅ f64]Multiplication, double precision floating point numbers.
[f64 = f64 ⋅ f64]
VHMPAC T, S, VAdVHMPAC T, S
VHMPAC T, S, VAd
S = {4{f16}} = {S3,…,S0};
AC = {4{f32}} = {AC3,…,AC0};
ACi += Ti ⋅ Si; i = 0:3;
[f32 += f32(f16 ⋅ f16)]T = {4{f16}} = {T3,…,T0};
S = {4{f16}} = {S3,…,S0};
AC = {4{f32}} = {AC3,…,AC0};
ACi += Ti ⋅ Si; i = 0:3;
[f32 += f32(f16 ⋅ f16)]
В двухадресной форме неявно используется VA0.Multiplication with accumulation, half-precision floating point numbers. Multiplication and addition of products is performed in the f16 bit grid, then the result is expanded to f32 and accumulated in the f32 accumulator.
The two-address form implicitly uses VA0.
VFMPAC T, S, VAdVFMPAC T, S
VFMPAC T, S, VAd
S = {2{f32}} = {S1,S0};
AC = {2{f32}} = {AC1,AC0};
ACi += Ti ⋅ Si; i = 0,1;T = {2{f32}} = {T1,T0};
S = {2{f32}} = {S1,S0};
AC = {2{f32}} = {AC1,AC0};
ACi += Ti ⋅ Si; i = 0.1;
В двухадресной форме неявно используется VA0.
[f32 += f32 ⋅ f32]Multiplication with accumulation, single precision floating point numbers.
The two-address form implicitly uses VA0.
[f32 += f32 ⋅ f32]
VFMPAC4 T, S, VAdVFMPAC4 T, S
VFMPAC4 T, S, VAd
S = {S', S} = {4{f32}} = {S3,S2,S1,S0};
AC = {4{f32}} = {AC3,…,AC0};
ACi += Ti ⋅ Si; i = 0,3;T = {T', T} = {4{f32}} = {T3,T2,T1,T0};
S = {S', S} = {4{f32}} = {S3,S2,S1,S0};
AC = {4{f32}} = {AC3,…,AC0};
ACi += Ti ⋅ Si; i = 0.3;
В двухадресной форме неявно используется VA0.
[f32 += f32 ⋅ f32]
Используются смежные входные регистры: R'[i] = R[i^1].Multiplication with accumulation, single precision floating point numbers.
The two-address form implicitly uses VA0.
[f32 += f32 ⋅ f32]
Adjacent input registers are used: R'[i] = R[i^1].
VDMPAC T, S, VAdVDMPAC T, S
VDMPAC T, S, VAd
S = {1{f64}} = {S0};
AC = {1{f64}} = {AC0};
ACi += Ti ⋅ Si; i = 0;T = {1{f64}} = {T0};
S = {1{f64}} = {S0};
AC = {1{f64}} = {AC0};
ACi += Ti ⋅ Si; i = 0;
В двухадресной форме неявно используется VA0.
[f64 += f64 ⋅ f64]Multiplication with accumulation, double precision floating point numbers.
The two-address form implicitly uses VA0.
[f64 += f64 ⋅ f64]
VDMPAC2 T, S, VAdVDMPAC2 T, S
VDMPAC2 T, S, VAd
S = {S', S} = {2{f64}} = {S1, S0};
AC = {2{f64}} = {AC1,AC0};
ACi += Ti ⋅ Si; i = 0…1;T = {T', T} = {2{f64}} = {T1, T0};
S = {S', S} = {2{f64}} = {S1, S0};
AC = {2{f64}} = {AC1,AC0};
ACi += Ti ⋅ Si; i = 0…1;
В двухадресной форме неявно используется VA0.
[f64 += f64 ⋅ f64]
Используются смежные входные регистры: R'[i] = R[i^1].Multiplication with accumulation, double precision floating point numbers.
The two-address form implicitly uses VA0.
[f64 += f64 ⋅ f64]
Adjacent input registers are used: R'[i] = R[i^1].
Табл. 13.Tab. 13.
D[i] = S[i] >> #IMM5, i=0D[i] = S[i] >> T[i], i=0
D[i] = S[i] >>#IMM5, i=0
D[i] = S[i] << #IMM5, i=0D[i] = S[i] << T[i], i=0
D[i] = S[i] <<#IMM5, i=0
D[i] = S[i] >>> #IMM5, i=0D[i] = S[i] >>> T[i], i=0
D[i] = S[i] >>>#IMM5, i=0
Else D[i] = RND(S[i] >> T[i])If(T[i] == 0) D[i]= S[i]
Else D[i] = RND(S[i] >> T[i])
Else D[i] = RND(S[i] >>> T[i])If(T[i] == 0) D[i]= S[i]
Else D[i] = RND(S[i] >>> T[i])
D[i] = S[i] >> #IMM5, i=0:1D[i] = S[i] >> T[i], i=0:1
D[i] = S[i] >>#IMM5, i=0:1
D[i] = S[i] << #IMM5, i=0:1D[i] = S[i] << T[i], i=0:1
D[i] = S[i] <<#IMM5, i=0:1
D[i] = S[i] >>> #IMM5, i=0:1D[i] = S[i] >>> T[i], i=0:1
D[i] = S[i] >>>#IMM5, i=0:1
Else D[i] = RND(S[i] >> T[i]), i=0…1If(T[i] == 0) D[i]= S[i]
Else D[i] = RND(S[i] >> T[i]), i=0…1
Else D[i] = RND(S[i] >>> T[i]), i=0…1If(T[i] == 0) D[i]= S[i]
Else D[i] = RND(S[i] >>> T[i]), i=0…1
D[i] = S[i] >> #IMM5, i=0:3D[i] = S[i] >> T[i], i=0:3
D[i] = S[i] >>#IMM5, i=0:3
D[i] = S[i] << #IMM5, i=0:3D[i] = S[i] << T[i], i=0:3
D[i] = S[i] <<#IMM5, i=0:3
D[i] = S[i] >>> #IMM5, i=0:3D[i] = S[i] >>> T[i], i=0:3
D[i] = S[i] >>>#IMM5, i=0:3
Else D[i] = RND(S[i] >> T[i]), i=0:3If(T[i] == 0) D[i]= S[i]
Else D[i] = RND(S[i] >> T[i]), i=0:3
Else D[i] = RND(S[i] >>> T[i]), i=0:3If(T[i] == 0) D[i]= S[i]
Else D[i] = RND(S[i] >>> T[i]), i=0:3
D[i] = S[i] >> #IMM5, i=0:7D[i] = S[i] >> T[i], i=0:7
D[i] = S[i] >>#IMM5, i=0:7
D[i] = S[i] << #IMM5, i=0:7D[i] = S[i] << T[i], i=0:7
D[i] = S[i] <<#IMM5, i=0:7
D[i] = S[i] >>> #IMM5, i=0:7D[i] = S[i] >>> T[i], i=0:7
D[i] = S[i] >>>#IMM5, i=0:7
Else D[i] = RND(D[i] >> T[i]), i=0:7If(T[i] == 0) D[i]= S[i]
Else D[i] = RND(D[i] >> T[i]), i=0:7
Else D[i] = RND(D[i] >>> T[i]), i=0:7If(T[i] == 0) D[i]= S[i]
Else D[i] = RND(D[i] >>> T[i]), i=0:7
Табл. 14.Tab. fourteen.
VCVBHOU Vs, Vd
VCVBHE Vs, Vd
VCVBHO Vs, VdVCVBHEU Vs, Vd
VCVBHOU Vs, Vd
VCVBHE Vs, Vd
VCVBHO Vs, Vd
Vd = {D3…D0}, i16
D[i]=zext8→16(S[2i+0]), i=0…3
D[i]=zext8→16(S[2i+1]), i=0…3
D[i] = sext8→16(S[2i+0]), i=0…3
D[i] = sext8→16(S[2i+1]), i=0…3Vs = {S7…S0}, i8
Vd = {D3…D0}, i16
D[i]=zext 8→16 (S[2i+0]), i=0…3
D[i]=zext 8→16 (S[2i+1]), i=0…3
D[i] = sext 8→16 (S[2i+0]), i=0…3
D[i] = sext 8→16 (S[2i+1]), i=0…3
VCVHLOU Vs, Vd
VCVHLE Vs, Vd
VCVHLO Vs, VdVCVHLEU Vs, Vd
VCVHLOU Vs, Vd
VCVHLE Vs, Vd
VCVHLO Vs, Vd
Vd = {D1…D0}, i32
D[i]=zext16→32(S[2i+0]), i=0…1
D[i]=zext16→32(S[2i+1]), i=0…1
D[i]=sext16→32(S[2i+0]), i=0…1
D[i]=sext16→32(S[2i+1]), i=0…1Vs = {S3…S0}, i16
Vd = {D1…D0}, i32
D[i]=zext 16→32 (S[2i+0]), i=0…1
D[i]=zext 16→32 (S[2i+1]), i=0…1
D[i]=sext 16→32 (S[2i+0]), i=0…1
D[i]=sext 16→32 (S[2i+1]), i=0…1
VCVLDOU Vs, Vd
VCVLDE Vs, Vd
VCVLDO Vs, VdVCVLDEU Vs, Vd
VCVLDOU Vs, Vd
VCVLDE Vs, Vd
VCVLDO Vs, Vd
Vd = {D0}, i64
D[i]=zext32→64(S[2i+0]), i=0…1
D[i]=zext32→64(S[2i+1]), i=0…1
D[i]=sext32→64(S[2i+0]), i=0…1
D[i]=sext32→64(S[2i+1]), i=0…1Vs = {S1…S0}, i32
Vd = {D0}, i64
D[i]=zext 32→64 (S[2i+0]), i=0…1
D[i]=zext 32→64 (S[2i+1]), i=0…1
D[i]=sext 32→64 (S[2i+0]), i=0…1
D[i]=sext 32→64 (S[2i+1]), i=0…1
Vs = {S0}, i64
Vd = {sat32(S0), sat32(T0)}, i32Vt = {T0}, i64
Vs = {S0}, i64
Vd = {sat32(S0), sat32(T0)}, i32
Vs = {S0}, i64
Vd = {usat32(S0), usat32(T0)}, u32Vt = {T0}, i64
Vs = {S0}, i64
Vd = {usat32(S0), usat32(T0)}, u32
Vs = {S1, S0}, i32
Vd = {sat16(S1), sat16(T1), sat16(S0), sat16(T0)}, i16Vt = {T1, T0}, i32
Vs = {S1, S0}, i32
Vd = {sat16(S1), sat16(T1), sat16(S0), sat16(T0)}, i16
Vs = {S1, S0}, i32
Vd = {usat16(S1), usat16(T1), usat16(S0), usat16(T0)}, u16Vt = {T1, T0}, i32
Vs = {S1, S0}, i32
Vd = {usat16(S1), usat16(T1), usat16(S0), usat16(T0)}, u16
Vs = {S3, S2, S1, S0}, i16
Vd = {sat8(S3), sat8(T3), …, sat8(S0), sat8(T0)}, i8Vt = {T3, T2, T1, T0}, i16
Vs = {S3, S2, S1, S0}, i16
Vd = {sat8(S3), sat8(T3), …, sat8(S0), sat8(T0)}, i8
Vs = {S3, S2, S1, S0}, i16
Vd = {usat8(S3), usat8(T3), …,u sat8(S0), usat8(T0)},u8Vt = {T3, T2, T1, T0}, i16
Vs = {S3, S2, S1, S0}, i16
Vd = {usat8(S3), usat8(T3), …,u sat8(S0), usat8(T0)},u8
VVd = {Vd’, Vd} = {{D1}, {D0}}, f64
Di = Ti, i = 0…1Vt = {T1, T0}, f32
VVd = {Vd', Vd} = {{D1}, {D0}}, f64
Di = Ti, i = 0…1
Vs = {S0}, f64
Vd = {D1, D0}, f32
D1 = S0, D0 = T0Vt = {T0}, f64
Vs = {S0}, f64
Vd = {D1, D0}, f32
D1 = S0, D0 = T0
VVd = {Vd’, Vd} = {{D3, D1}, {D2, D0}}, f32
Di = Ti, i = 0…1Vt = {T3, T2, T1, T0}, f16
VVd = {Vd', Vd} = {{D3, D1}, {D2, D0}}, f32
Di = Ti, i = 0…1
Vs = {S1, S0}, f64
Vd = {D3, D2, D1, D0}, f32
D3 = S1, D2 = T1, D1 = S0, D0 = T0Vt = {T1, T0}, f64
Vs = {S1, S0}, f64
Vd = {D3, D2, D1, D0}, f32
D3=S1, D2=T1, D1=S0, D0=T0
Vs = {S0}, i64
Vd = {D1, D0}, f32
D1 = S0, D0 = T0Vt = {T0}, i64
Vs = {S0}, i64
Vd = {D1, D0}, f32
D1 = S0, D0 = T0
Vs = {S0}, u64
Vd = {D1, D0}, f32
D1 = S0, D0 = T0Vt = {T0}, u64
Vs = {S0}, u64
Vd = {D1, D0}, f32
D1 = S0, D0 = T0
Vd = {D0}, f64
D0 = T0Vt = {T0}, i64
Vd = {D0}, f64
D0 = T0
Vd = {D0}, f64
D0 = T0Vt = {T0}, u64
Vd = {D0}, f64
D0 = T0
Vd = {D1, D0}, f32
D1 = T1, D0 = T0Vt = {T1, T0}, i32
Vd = {D1, D0}, f32
D1=T1, D0=T0
Vd = {D1, D0}, f32
D1 = T1, D0 = T0Vt = {T1, T0}, u32
Vd = {D1, D0}, f32
D1=T1, D0=T0
Vd = {Vd’, Vd] = {{D1}, {D0}}, f64
D1 = T1, D0 = T0Vt = {T1, T0}, i32
Vd = {Vd', Vd] = {{D1}, {D0}}, f64
D1=T1, D0=T0
Vd = {Vd’, Vd] = {{D1}, {D0}}, f64
D1 = T1, D0 = T0Vt = {T1, T0}, u32
Vd = {Vd', Vd] = {{D1}, {D0}}, f64
D1=T1, D0=T0
Vd = {Vd’, Vd] = {{D3, D1}, {D2, D0}}, f64
D3 = T3, D2 = T2, D1 = T1, D0 = T0Vt = {T3, T2, T1, T0}, i16
Vd = {Vd', Vd] = {{D3, D1}, {D2, D0}}, f64
D3=T3, D2=T2, D1=T1, D0=T0
Vd = {Vd’, Vd} = {{D3, D1}, {D2, D0}}, f64
D3 = T3, D2 = T2, D1 = T1, D0 = T0Vt = {T3, T2, T1, T0}, u16
Vd = {Vd', Vd} = {{D3, D1}, {D2, D0}}, f64
D3=T3, D2=T2, D1=T1, D0=T0
Vs = {S1, S0}, i32
Vd = {D3, D2, D1, D0}, f16
D3 = S1, D2 = T1, D1 = S0, D0 = T0Vt = {T1, T0}, i32
Vs = {S1, S0}, i32
Vd = {D3, D2, D1, D0}, f16
D3=S1, D2=T1, D1=S0, D0=T0
Vs = {S1, S0}, u32
Vd = {D3, D2, D1, D0}, f16
D3 = S1, D2 = T1, D1 = S0, D0 = T0Vt = {T1, T0}, u32
Vs = {S1, S0}, u32
Vd = {D3, D2, D1, D0}, f16
D3=S1, D2=T1, D1=S0, D0=T0
Vd = {Vd’, Vd] = {{D3, D2}, {D1, D0}}, f64
D3 = T3, D2 = T2, D1 = T1, D0 = T0Vt = {T3, T2, T1, T0}, i16
Vd = {Vd', Vd] = {{D3, D2}, {D1, D0}}, f64
D3=T3, D2=T2, D1=T1, D0=T0
Vd = {Vd’, Vd} = {{D3, D2}, {D1, D0}}, f64
D3 = T3, D2 = T2, D1 = T1, D0 = T0Vt = {T3, T2, T1, T0}, u16
Vd = {Vd', Vd} = {{D3, D2}, {D1, D0}}, f64
D3=T3, D2=T2, D1=T1, D0=T0
Vd = {D3, D2, D1, D0}, f16
D3 = T3, D2 = T2, D1 = T1, D0 = T0Vt = {T3, T2, T1, T0}, i16
Vd = {D3, D2, D1, D0}, f16
D3=T3, D2=T2, D1=T1, D0=T0
Vd = {D3, D2, D1, D0}, f16
D3 = T3, D2 = T2, D1 = T1, D0 = T0Vt = {T3, T2, T1, T0}, u16
Vd = {D3, D2, D1, D0}, f16
D3=T3, D2=T2, D1=T1, D0=T0
VHCVH.floor Vt, Vd
VHCVH.round Vt, Vd
VHCVH.ceil Vt, Vd
VHCVH.trunc Vt, VdVHCVH Vt, Vd
VHCVH.floor Vt, Vd
VHCVH.round Vt, Vd
VHCVH.ceil Vt, Vd
VHCVH.trunc Vt, Vd
Vd = {D3, D2, D1, D0}, i16
D3 = T3, D2 = T2, D1 = T1, D0 = T0Vt = {T3, T2, T1, T0}, f16
Vd = {D3, D2, D1, D0}, i16
D3=T3, D2=T2, D1=T1, D0=T0
Опциональное округление, принудительная сатурацияConvert from float16 to i16
Optional rounding, forced saturation
VHCVHU.floor Vt, Vd
VHCVHU.round Vt, Vd
VHCVHU.ceil Vt, Vd
VHCVHU.trunc Vt, VdVHCVHU Vt, Vd
VHCVHU.floor Vt, Vd
VHCVHU.round Vt, Vd
VHCVHU.ceil Vt, Vd
VHCVHU.trunc Vt, Vd
Vd = {D3, D2, D1, D0}, u16
D3 = T3, D2 = T2, D1 = T1, D0 = T0Vt = {T3, T2, T1, T0}, f16
Vd = {D3, D2, D1, D0}, u16
D3=T3, D2=T2, D1=T1, D0=T0
Опциональное округление, принудительная сатурацияConvert from float16 to u16
Optional rounding, forced saturation
VVd = {Vd’, Vd} = {{D3, D1}, {D2, D0}}, i32
D3 = T3, D2 = T2, D1 = T1, D0 = T0Vt = {T3, T2, T1, T0}, f16
VVd = {Vd', Vd} = {{D3, D1}, {D2, D0}}, i32
D3=T3, D2=T2, D1=T1, D0=T0
VVd = {Vd’, Vd} = {{D3, D1}, {D2, D0}}, u32
D3 = T3, D2 = T2, D1 = T1, D0 = T0Vt = {T3, T2, T1, T0}, f16
VVd = {Vd', Vd} = {{D3, D1}, {D2, D0}}, u32
D3=T3, D2=T2, D1=T1, D0=T0
VVd = {Vd’, Vd} = {{D1}, {D0}}, i64
D1 = T1, D0 = T0 Vt = {T1, T0}, f32
VVd = {Vd', Vd} = {{D1}, {D0}}, i64
D1=T1, D0=T0
VVd = {Vd’, Vd} = {{D1}, {D0}}, u64
D1 = T1, D0 = T0Vt = {T1, T0}, f32
VVd = {Vd', Vd} = {{D1}, {D0}}, u64
D1=T1, D0=T0
VFCVI.floor Vt, Vd
VFCVI.round Vt, Vd
VFCVI.ceil Vt, Vd
VFCVI.trunc Vt, VdVFCVI Vt, Vd
VFCVI.floor Vt, Vd
VFCVI.round Vt, Vd
VFCVI.ceil Vt, Vd
VFCVI.trunc Vt, Vd
VVd = {D1, D0}, i32
D1 = T1, D0 = T0Vt = {T1, T0}, f32
VVd = {D1, D0}, i32
D1=T1, D0=T0
Опциональное округление, принудительная сатурацияConvert from float32 to i32
Optional rounding, forced saturation
VFCVIU.floor Vt, Vd
VFCVIU.round Vt, Vd
VFCVIU.ceil Vt, Vd
VFCVIU.trunc Vt, VdVFCVIU Vt, Vd
VFCVIU.floor Vt, Vd
VFCVIU.round Vt, Vd
VFCVIU.ceil Vt, Vd
VFCVIU.trunc Vt, Vd
VVd = {D1, D0}, u32
D1 = T1, D0 = T0Vt = {T1, T0}, f32
VVd = {D1, D0}, u32
D1=T1, D0=T0
Опциональное округление, принудительная сатурацияConvert from float32 to u32
Optional rounding, forced saturation
VDCVD.floor Vt, Vd
VDCVD.round Vt, Vd
VDCVD.ceil Vt, Vd
VDCVD.trunc Vt, VdVDCVD Vt, Vd
VDCVD.floor Vt, Vd
VDCVD.round Vt, Vd
VDCVD.ceil Vt, Vd
VDCVD.trunc Vt, Vd
VVd = {D0}, i64
D0 = T0Vt = {T0}, f64
VVd = {D0}, i64
D0 = T0
Опциональное округление, принудительная сатурацияConvert from float64 to i64
Optional rounding, forced saturation
VDCVDU.floor Vt, Vd
VDCVDU.round Vt, Vd
VDCVDU.ceil Vt, Vd
VDCVDU.trunc Vt, VdVDCVDU Vt, Vd
VDCVDU.floor Vt, Vd
VDCVDU.round Vt, Vd
VDCVDU.ceil Vt, Vd
VDCVDU.trunc Vt, Vd
VVd = {D0}, u64
D0 = T0Vt = {T0}, f64
VVd = {D0}, u64
D0 = T0
Опциональное округление, принудительная сатурацияConvert from float64 to u64
Optional rounding, forced saturation
Vs = {S0}, f64
VVd = {D1, D0}, i32
D1 = S0, D0 = T0Vt = {T0}, f64
Vs = {S0}, f64
VVd = {D1, D0}, i32
D1 = S0, D0 = T0
Vs = {S0}, f64
VVd = {D1, D0}, u32
D1 = S0, D0 = T0Vt = {T0}, f64
Vs = {S0}, f64
VVd = {D1, D0}, u32
D1 = S0, D0 = T0
VFCVH.round Vt,Vs, Vd
VFCVH.trunc Vt, Vs, Vd
VFCVH.ceil Vt, Vs, Vd
VFCVH.floor Vt, Vs, VdVFCVH Vt, Vs, Vd
VFCVH.round Vt, Vs, Vd
VFCVH.trunc Vt, Vs, Vd
VFCVH.ceil Vt, Vs, Vd
VFCVH.floor Vt, Vs, Vd
Vs = {S1, S0}, f32
Vd = {D3, D2, D1, D0}, i16
D3 = S1, D2 = T1, D1 = S0, D0 = T0Vt = {T1, T0}, f32
Vs = {S1, S0}, f32
Vd = {D3, D2, D1, D0}, i16
D3=S1, D2=T1, D1=S0, D0=T0
Опциональное округление, принудительная сатурацияConvert from float32 to i16
Optional rounding, forced saturation
Табл. 15.Tab. fifteen.
Vt = {T[i].D}, Vd = {D[i].D}
D[i].D = sum(T[0].D, …, T[i].D), i=0…7Moving cross-section integer sum. In conditional execution, only the elements of the destination register highlighted by the predicate are written, while the summation proceeds sequentially over all elements.
Vt = {T[i].D}, Vd = {D[i].D}
D[i].D = sum(T[0].D, …, T[i].D), i=0…7
Vt = {T[i].D}, i=0…7
Rd.D = SUM(T[i])The operation of intersectional reduction by integer addition with the placement of the result in a scalar register. In conditional execution, only the elements selected by the predicate should be added, the rest should be ignored. If the condition is zero, the command is executed, zero is written to the result.
Vt = {T[i].D}, i=0…7
Rd.D = SUM(T[i])
VANDREDRD Vt, Rd.DVANDREDD Vt, Vd.D
VANDREDRD Vt, Rd.D
Vt = {T[i].D}, i=0…7
R = AND(T[i])
Векторный вариант:
Vd = {D[i]}, D[i].D = R, i64, i=0…7
Скалярный вариант:
Rd.D = RThe operation of cross-sectional reduction by logical "AND" with the reproduction of the result by the vector register or by placing the result in a scalar register. In conditional execution, only the elements selected by the predicate should be added, the rest should be ignored. If the condition is zero, the scalar instruction is executed and zero is written to the result.
Vt = {T[i].D}, i=0…7
R = AND(T[i])
Vector option:
Vd = {D[i]}, D[i].D = R, i64, i=0…7
Scalar option:
Rd.D = R
VORREDRD Vt, Rd.DVORREDD Vt, Vd.D
VORREDRD Vt, Rd.D
Vt = {T[i].D}, i=0…7
R = OR(T[i])
Векторный вариант:
Vd = {D[i]}, D[i].D = R, i64, i=0…7
Скалярный вариант:
Rd.D = RThe operation of cross-sectional reduction by logical "OR" with the reproduction of the result in a vector register or placing the result in a scalar register. In conditional execution, only the elements selected by the predicate should be added, the rest should be ignored. If the condition is zero, the scalar instruction is executed and zero is written to the result.
Vt = {T[i].D}, i=0…7
R = OR(T[i])
Vector option:
Vd = {D[i]}, D[i].D = R, i64, i=0…7
Scalar option:
Rd.D = R
VEORREDRD Vt, Rd.DVEORREDD Vt, Vd.D
VEORREDRD Vt, Rd.D
Vt = {T[i].D}, i=0…7
R = EOR(T[i])
Векторный вариант:
Vd = {D[i]}, D[i].D = R, i64, i=0…7
Скалярный вариант:
Rd.D = RThe operation of cross-sectional reduction by logical exclusive "OR" with the reproduction of the result in a vector register or placing the result in a scalar register. In conditional execution, only the elements selected by the predicate should be added, the rest should be ignored. If the condition is zero, the scalar instruction is executed and zero is written to the result.
Vt = {T[i].D}, i=0…7
R = EOR(T[i])
Vector option:
Vd = {D[i]}, D[i].D = R, i64, i=0…7
Scalar option:
Rd.D = R
VADDREDRD Vt, Rd.DVADDREDD Vt, Vd.D
VADDREDRD Vt, Rd.D
Vt = {T[i].D}, i=0…7
R = SUM(T[i])
Векторный вариант:
Vd = {D[i]}, D[i].D = R, i64, i=0…7
Скалярный вариант:
Rd.D = RThe operation of intersectional reduction by integer addition with multiplication of the result in a vector register or placing the result in a scalar register. In conditional execution, only the elements selected by the predicate should be added, the rest should be ignored. If the condition is zero, the scalar instruction is executed and zero is written to the result.
Vt = {T[i].D}, i=0…7
R = SUM(T[i])
Vector option:
Vd = {D[i]}, D[i].D = R, i64, i=0…7
Scalar option:
Rd.D = R
VMAXREDRD Vt, Rd.DVMAXREDD Vt, Vd.D
VMAXREDRD Vt, Rd.D
Vt = {T[i].D}, i=0…7
R = MAX(T[i])
Векторный вариант:
Vd = {D[i]}, D[i].D = R, i64, i=0…7
Скалярный вариант:
Rd.D = RThe operation of intersectional reduction by an integer signed maximum with the result multiplied by a vector register or by placing the result in a scalar register. In conditional execution, only the elements selected by the predicate should be added, the rest should be ignored. If the condition is zero, the scalar instruction is executed and zero is written to the result.
Vt = {T[i].D}, i=0…7
R = MAX(T[i])
Vector option:
Vd = {D[i]}, D[i].D = R, i64, i=0…7
Scalar option:
Rd.D = R
VMINREDRD Vt, Rd.DVMINREDD Vt, Vd.D
VMINREDRD Vt, Rd.D
Vt = {T[i].D}, i=0…7
R = MIN(T[i])
Векторный вариант:
Vd = {D[i]}, D[i].D = R, i64, i=0…7
Скалярный вариант:
Rd.D = RThe operation of intersectional reduction by an integer signed minimum with the result multiplied by a vector register or by placing the result in a scalar register. In conditional execution, only the elements selected by the predicate should be added, the rest should be ignored. If the condition is zero, the scalar instruction is executed and zero is written to the result.
Vt = {T[i].D}, i=0…7
R = MIN(T[i])
Vector option:
Vd = {D[i]}, D[i].D = R, i64, i=0…7
Scalar option:
Rd.D = R
VMAXREDRDU Vt, Rd.DVMAXREDDU Vt, Vd.D
VMAXREDRDU Vt, Rd.D
Vt = {T[i].D}, i=0…7
R = MAX(T[i])
Векторный вариант:
Vd = {D[i]}, D[i].D = R, i64, i=0…7
Скалярный вариант:
Rd.D = RThe operation of intersectional reduction by an integer unsigned maximum with the result multiplied by a vector register or by placing the result in a scalar register. In conditional execution, only the elements selected by the predicate should be added, the rest should be ignored. If the condition is zero, the scalar instruction is executed and zero is written to the result.
Vt = {T[i].D}, i=0…7
R = MAX(T[i])
Vector option:
Vd = {D[i]}, D[i].D = R, i64, i=0…7
Scalar option:
Rd.D = R
VMINREDRDU Vt, Rd.DVMINREDDU Vt, Vd.D
VMINREDRDU Vt, Rd.D
Vt = {T[i].D}, i=0…7
R = MINU(T[i])
Векторный вариант:
Vd = {D[i]}, D[i].D = R, i64, i=0…7
Скалярный вариант:
Rd.D = RThe operation of intersectional reduction by an integer unsigned minimum with the result multiplied by a vector register or by placing the result in a scalar register. In conditional execution, only the elements selected by the predicate should be added, the rest should be ignored. If the condition is zero, the scalar instruction is executed and zero is written to the result.
Vt = {T[i].D}, i=0…7
R = MINU(T[i])
Vector option:
Vd = {D[i]}, D[i].D = R, i64, i=0…7
Scalar option:
Rd.D = R
VFADDREDR Vt, Rd.LVFADDRED Vt, Vd.L
VFADDREDR Vt, Rd.L
При условном исполнении на вход подаются только выделенные предикатом младшие элементы каждой векторной секции, записываются все подсвеченые выходные элемнеты (не только младшие). При нулевом условии скалярная команда исполняется, в результат записывается ноль.
Vt = {T[i].L}, i=0…15
R = FSUM(T[j*2]), j=0…7
Векторный вариант:
Vd = {D[i]}, D[i].L = R, f32, i=0…15
Скалярный вариант:
Rd.L = RIntersectional reduction operation on floating-point addition with multiplication of the result in a vector register or placing the result in a scalar register. From each vector section, only the least significant element is used.
In conditional execution, only the lower elements of each vector section selected by the predicate are fed to the input, all the highlighted output elements are written (not only the lower ones). If the condition is zero, the scalar instruction is executed and zero is written to the result.
Vt = {T[i].L}, i=0…15
R = FSUM(T[j*2]), j=0…7
Vector option:
Vd = {D[i]}, D[i].L = R, f32, i=0…15
Scalar option:
Rd.L = R
VFMAXREDR Vt, Rd.LVFMAXRED Vt, Vd.L
VFMAXREDR Vt, Rd.L
При условном исполнении на вход подаются только выделенные предикатом младшие элементы каждой векторной секции, записываются все подсвеченые выходные элемнеты (не только младшие). При нулевом условии скалярная команда исполняется, в результат записывается ноль.
Vt = {T[i].L}, i=0…15
R = FMAX(T[j*2]), j=0…7
Векторный вариант:
Vd = {D[i]}, D[i].L = R, f32, i=0…15
Скалярный вариант:
Rd.L = RThe operation of intersectional reduction by the maximum floating point with the result multiplied by a vector register or by placing the result in a scalar register. From each vector section, only the least significant element is used.
In conditional execution, only the lower elements of each vector section selected by the predicate are fed to the input, all the highlighted output elements are written (not only the lower ones). If the condition is zero, the scalar instruction is executed and zero is written to the result.
Vt = {T[i].L}, i=0…15
R = FMAX(T[j*2]), j=0…7
Vector option:
Vd = {D[i]}, D[i].L = R, f32, i=0…15
Scalar option:
Rd.L = R
VFMINREDR Vt, Rd.LVFMINRED Vt, Vd.L
VFMINREDR Vt, Rd.L
При условном исполнении на вход подаются только выделенные предикатом младшие элементы каждой векторной секции, записываются все подсвеченые выходные элемнеты (не только младшие). При нулевом условии скалярная команда исполняется, в результат записывается ноль.
Vt = {T[i].L}, i=0…15
R = FMIN(T[j*2]), j=0…7
Векторный вариант:
Vd = {D[i]}, D[i].L = R, f32, i=0…15
Скалярный вариант:
Rd.L = RThe operation of cross-sectional reduction by the minimum of the floating point with the result multiplied by the vector register or by placing the result in a scalar register. From each vector section, only the least significant element is used.
In conditional execution, only the lower elements of each vector section selected by the predicate are fed to the input, all the highlighted output elements are written (not only the lower ones). If the condition is zero, the scalar instruction is executed and zero is written to the result.
Vt = {T[i].L}, i=0…15
R = FMIN(T[j*2]), j=0…7
Vector option:
Vd = {D[i]}, D[i].L = R, f32, i=0…15
Scalar option:
Rd.L = R
Табл. 16.Tab. 16.
Vs = {S63,…, S2, S1, S0}, i8
Vdi: = {R31,…, R2, R1, R0}, u16
Vdo: = {D31,…, D2, D1, D0}, i16
VV = {S63, …, S0, T63, …, T0}
Di = sext8→16(VV[R[i] & 0x7F]), i=0,1,…,31
Операция универсальной межсекционной выборки с расширением типа данныхVt: = {T63,…, T2, T1, T0}, i8
Vs = {S63,…, S2, S1, S0}, i8
Vdi:={R31,…, R2, R1, R0}, u16
Vdo:={D31,…, D2, D1, D0}, i16
VV = {S63, …, S0, T63, …, T0}
Di = sext 8→16 (VV[R[i] & 0x7F]), i=0,1,…,31
Generic Intersectional Fetch Operation with Data Type Extension
Vs = {S63,…, S2, S1, S0}, i8
Vdi: = {R15,…, R2, R1, R0}, u32
Vdo: = {D15,…, D2, D1, D0}, i32
VV = {S63, …, S0, T63, …, T0}
Di = sext8→32(VV[R[i] & 0x7F]), i=0,1,…,31
Операция универсальной межсекционной выборки с расширением типа данных.
В качестве индексов берутся прежние значения регистра Vd, результат записывается в него же.Vt: = {T63,…, T2, T1, T0}, i8
Vs = {S63,…, S2, S1, S0}, i8
Vdi:={R15,…, R2, R1, R0}, u32
Vdo:={D15,…, D2, D1, D0}, i32
VV = {S63, …, S0, T63, …, T0}
Di = sext 8→32 (VV[R[i] & 0x7F]), i=0,1,…,31
Generic intersectional fetch operation with data type extension.
The previous values of the Vd register are taken as indices, the result is written to it.
Vs = {S31,…, S2, S1, S0}, i16
Vdi: = {R15,…, R2, R1, R0}, u32
Vdo: = {D15,…, D2, D1, D0}, i32
VV = {S31, …, S0, T31, …, T0}
Di = sext16→32(VV[R[i] & 0x3F]), i=0,1,…,15
Операция универсальной межсекционной выборки с расширением типа данных.
В качестве индексов берутся прежние значения регистра Vd, результат записывается в него же.Vt = {T31,…, T2, T1, T0}, i16
Vs = {S31,…, S2, S1, S0}, i16
Vdi:={R15,…, R2, R1, R0}, u32
Vdo:={D15,…, D2, D1, D0}, i32
VV = {S31, …, S0, T31, …, T0}
Di = sext 16→32 (VV[R[i] & 0x3F]), i=0,1,…,15
Generic intersectional fetch operation with data type extension.
The previous values of the Vd register are taken as indices, the result is written to it.
Vs = {S63,…, S2, S1, S0}, u8
Vdi: = {R31,…, R2, R1, R0}, u16
Vdo: = {D31,…, D2, D1, D0}, u16
VV = {S63, …, S0, T63, …, T0}
Di = zext8→16(VV[R[i] & 0x7F]), i=0,1,…,31
Операция универсальной межсекционной выборки с расширением типа данных.
В качестве индексов берутся прежние значения регистра Vd, результат записывается в него же.Vt: = {T63,…, T2, T1, T0}, u8
Vs = {S63,…, S2, S1, S0}, u8
Vdi:={R31,…, R2, R1, R0}, u16
Vdo:={D31,…, D2, D1, D0}, u16
VV = {S63, …, S0, T63, …, T0}
Di = zext 8→16 (VV[R[i] & 0x7F]), i=0,1,…,31
Generic intersectional fetch operation with data type extension.
The previous values of the Vd register are taken as indices, the result is written to it.
Vs = {S63,…, S2, S1, S0}, u8
Vdi: = {R15,…, R2, R1, R0}, u32
Vdo: = {D15,…, D2, D1, D0}, u32
VV = {S63, …, S0, T63, …, T0}
Di = zext8→32(VV[R[i] & 0x7F]), i=0,1,…,31
Операция универсальной межсекционной выборки с расширением типа данных.
В качестве индексов берутся прежние значения регистра Vd, результат записывается в него же.Vt: = {T63,…, T2, T1, T0}, u8
Vs = {S63,…, S2, S1, S0}, u8
Vdi:={R15,…, R2, R1, R0}, u32
Vdo:={D15,…, D2, D1, D0}, u32
VV = {S63, …, S0, T63, …, T0}
Di = zext 8→32 (VV[R[i] & 0x7F]), i=0,1,…,31
Generic intersectional fetch operation with data type extension.
The previous values of the Vd register are taken as indices, the result is written to it.
Vs = {S31,…, S2, S1, S0}, u16
Vdi: = {R15,…, R2, R1, R0}, u32
Vdo: = {D15,…, D2, D1, D0}, u32
VV = {S31, …, S0, T31, …, T0}
Di = zext16→32(VV[R[i] & 0x3F]), i=0,1,…,15
Операция универсальной межсекционной выборки с расширением типа данных.
В качестве индексов берутся прежние значения регистра Vd, результат записывается в него же.Vt = {T31,…, T2, T1, T0}, u16
Vs = {S31,…, S2, S1, S0}, u16
Vdi:={R15,…, R2, R1, R0}, u32
Vdo:={D15,…, D2, D1, D0}, u32
VV = {S31, …, S0, T31, …, T0}
Di = zext 16→32 (VV[R[i] & 0x3F]), i=0,1,…,15
Generic intersectional fetch operation with data type extension.
The previous values of the Vd register are taken as indices, the result is written to it.
Vs = {S31…, S2, S1, S0}, i16
Vdi: = {R63…, R2, R1, R0}, u8
Vdo: = {D63…, D2, D1, D0}, i8
VV = {S31, …, S0, T31, …, T0}
Di = sati16→i8 (VV[R[i] & 0x3F]), i=0,1,…,63
Операция универсальной межсекционной выборки с принудительной сатурацией signed → signed в меньший тип данных.
В качестве индексов берутся прежние значения регистра Vd, результат записывается в него же.Vt: = {T31…, T2, T1, T0}, i16
Vs = {S31…, S2, S1, S0}, i16
Vdi: = {R63…, R2, R1, R0}, u8
Vdo: = {D63…, D2, D1, D0}, i8
VV = {S31, …, S0, T31, …, T0}
Di = sat i16→i8 (VV[R[i] & 0x3F]), i=0,1,…,63
A universal intersectional fetch operation with forced saturation signed → signed to a smaller data type.
The previous values of the Vd register are taken as indices, the result is written to it.
Vs = {S15…, S2, S1, S0}, i31
Vdi: = {R63…, R2, R1, R0}, u8
Vdo: = {D63…, D2, D1, D0}, i8
VV = {S15, …, S0, T15, …, T0}
Di = sati32→u8 (VV[R[i] & 0x1F]), i=0,1,…,63
Операция универсальной межсекционной выборки с принудительной сатурацией signed → signed в меньший тип данных.
В качестве индексов берутся прежние значения регистра Vd, результат записывается в него же.Vt = {T15…, T2, T1, T0}, i31
Vs = {S15…, S2, S1, S0}, i31
Vdi: = {R63…, R2, R1, R0}, u8
Vdo: = {D63…, D2, D1, D0}, i8
VV = {S15, …, S0, T15, …, T0}
Di = sat i32→u8 (VV[R[i] & 0x1F]), i=0,1,…,63
A universal intersectional fetch operation with forced saturation signed → signed to a smaller data type.
The previous values of the Vd register are taken as indices, the result is written to it.
Vs = {S15…, S2, S1, S0}, i32
Vdi: = {R31…, R2, R1, R0}, u16
Vdo: = {D31…, D2, D1, D0}, i16
VV = {S15, …, S0, T15, …, T0}
Di = sati32→i16 (VV[R[i] & 0x1F]), i=0,1,…,31
Операция универсальной межсекционной выборки с принудительной сатурацией signed → signed в меньший тип данных.
В качестве индексов берутся прежние значения регистра Vd, результат записывается в него же.Vt: = {T15…, T2, T1, T0}, i32
Vs = {S15…, S2, S1, S0}, i32
Vdi: = {R31…, R2, R1, R0}, u16
Vdo: = {D31…, D2, D1, D0}, i16
VV = {S15, …, S0, T15, …, T0}
Di = sat i32→i16 (VV[R[i] & 0x1F]), i=0,1,…,31
A universal intersectional fetch operation with forced saturation signed → signed to a smaller data type.
The previous values of the Vd register are taken as indices, the result is written to it.
Vs = {S31…, S2, S1, S0}, u16
Vdi: = {R63…, R2, R1, R0}, u8
Vdo: = {D63…, D2, D1, D0}, u8
VV = {S31, …, S0, T31, …, T0}
Di = sati16→u8 (VV[R[i] & 0x3F]), i=0,1,…,63
Операция универсальной межсекционной выборки с принудительной сатурацией signed → unsigned в меньший тип данных.
В качестве индексов берутся прежние значения регистра Vd, результат записывается в него же.Vt: = {T31…, T2, T1, T0}, u16
Vs = {S31…, S2, S1, S0}, u16
Vdi: = {R63…, R2, R1, R0}, u8
Vdo: = {D63…, D2, D1, D0}, u8
VV = {S31, …, S0, T31, …, T0}
Di = sat i16→u8 (VV[R[i] & 0x3F]), i=0,1,…,63
A generic cross-sectional fetch operation with forced saturation signed → unsigned to a smaller data type.
The former values of the Vd register are taken as indexes, the result is written to it.
Vs = {S15…, S2, S1, S0}, u31
Vdi: = {R63…, R2, R1, R0}, u8
Vdo: = {D63…, D2, D1, D0}, u8
VV = {S15, …, S0, T15, …, T0}
Di = sati32→u8 (VV[R[i] & 0x1F]), i=0,1,…,63
Операция универсальной межсекционной выборки с принудительной сатурацией signed → unsigned в меньший тип данных.
В качестве индексов берутся прежние значения регистра Vd, результат записывается в него же.Vt = {T15…, T2, T1, T0}, u31
Vs = {S15…, S2, S1, S0}, u31
Vdi: = {R63…, R2, R1, R0}, u8
Vdo: = {D63…, D2, D1, D0}, u8
VV = {S15, …, S0, T15, …, T0}
Di = sat i32→u8 (VV[R[i] & 0x1F]), i=0,1,…,63
A generic cross-sectional fetch operation with forced saturation signed → unsigned to a smaller data type.
The previous values of the Vd register are taken as indices, the result is written to it.
Vs = {S15…, S2, S1, S0}, u32
Vdi: = {R31…, R2, R1, R0}, u16
Vdo: = {D31…, D2, D1, D0}, u16
VV = {S15, …, S0, T15, …, T0}
Di = sati32→u16 (VV[R[i] & 0x1F]), i=0,1,…,31
Операция универсальной межсекционной выборки с принудительной сатурацией signed → unsigned в меньший тип данных.
В качестве индексов берутся прежние значения регистра Vd, результат записывается в него же.Vt: = {T15…, T2, T1, T0}, u32
Vs = {S15…, S2, S1, S0}, u32
Vdi: = {R31…, R2, R1, R0}, u16
Vdo: = {D31…, D2, D1, D0}, u16
VV = {S15, …, S0, T15, …, T0}
Di = sat i32→u16 (VV[R[i] & 0x1F]), i=0,1,…,31
A generic cross-sectional fetch operation with forced saturation signed → unsigned to a smaller data type.
The previous values of the Vd register are taken as indices, the result is written to it.
Табл. 17.Tab. 17.
VLUT1 Vt, Vs, Vr, VdVLUT0 Vt, Vs, Vr, Vd
VLUT1 Vt, Vs, Vr, Vd
Vt = {T63…, T2, T1, T0}, u8
Vs = {S63…, S2, S1, S0}, u8
Vr = {R63…, R2, R1, R0}, u8
Vd = {D63…, D2, D1, D0}, u8
VV = {R63, …, R0, S63, …, S0}, u8
if (T[7] == a) then Di = VV[T[i] & 0x7F], i=0,1,…,63
a - целочисленный 1-битный параметр, который может принимать значения: 0, 1;
T, S, R - входные 512-разрядные вектора;
D - выходной 512-разрядный вектор.
Входные и выходные вектора разделены на 64 байта. Вектор VV: = {Vr, Vs} содержит таблицу преобразования, точнее - половину этой таблицы, полная таблица преобразования содержится в двух векторах VV, соответствующих двум значениям параметра a. Вектор S T содержит преобразуемые данные.
Выбор данных из таблицы для каждого байта ti вектора T (i = 0,1,…,63) определяется его младшими семью битами согласно формуле: di = SVV[ti[6:0]].
Особенностью команды VLUT является то, что кроме собственно выходного вектора она формирует также побайтовую маску записи для этого вектора согласно формуле: mi = (ti[7]== a). Таким образом, в выходной регистр D записываются данные только из нужной таблицы.VLUTa T, S, R, D
Vt = {T63…, T2, T1, T0}, u8
Vs = {S63…, S2, S1, S0}, u8
Vr = {R63…, R2, R1, R0}, u8
Vd = {D63…, D2, D1, D0}, u8
VV = {R63, …, R0, S63, …, S0}, u8
if (T[7] == a) then Di = VV[T[i] & 0x7F], i=0,1,…,63
a - integer 1-bit parameter that can take values: 0, 1;
T, S, R - input 512-bit vectors;
D is an output 512-bit vector.
The input and output vectors are divided into 64 bytes. The vector VV: = {Vr, Vs} contains a lookup table, more precisely, half of this lookup table, the complete lookup table is contained in two vectors VV corresponding to two values of the parameter a. The ST vector contains the data to be converted.
The choice of data from the table for each byte ti of the vector T (i = 0,1,…,63) is determined by its least significant seven bits according to the formula: di = SVV[ti[6:0]].
A feature of the VLUT command is that, in addition to the output vector itself, it also forms a byte-by-byte recording mask for this vector according to the formula: mi = (ti[7]== a). Thus, only data from the desired table is written to the output register D.
Табл. 18.Tab. eighteen.
VHIST1 Vs, Vd
VHIST2 Vs, Vd
VHIST3 Vs, VdVHIST0 Vs, Vd
VHIST1 Vs, Vd
VHIST2 Vs, Vd
VHIST3 Vs, Vd
a - целочисленный 2-битный параметр, который может принимать значения: 0, 1, 2, 3;
S - входной 512-разрядный вектор;
D - выходной 512-разрядный вектор.
Входной и выходной вектор разделены на 64 байта. Для каждого i (i = 0,1,…,63) вычисляется количество байт, значение которых равно (64*a + i), и это количество записывается в i-й байт выходного вектора.
Для вычисления 256-уровневой гистограммы необходимо выполнить эту команду для всех четырех значений параметра a, затем преобразовать полученные 64-компонентные байтовые вектора с расширением до 16-разрядных или 32-разрядных беззнаковых целых, в зависимости от того, в каком формате будет производиться накопление бинов гистограммы, и произвести накопление.
Таким образом, для вычисления гистограмм потребуются также векторные команды расширения типа и целочисленного сложения. При компактном коде возможно вычисление 256-уровневой гистограммы для 64 пикселей примерно за 6 тактов.
Четыре значения параметра a могут быть реализованы в виде четырех различных команд.VHISTa S, D
a - integer 2-bit parameter that can take values: 0, 1, 2, 3;
S - input 512-bit vector;
D is an output 512-bit vector.
The input and output vector are divided into 64 bytes. For each i (i = 0,1,…,63) the number of bytes is calculated, the value of which is equal to (64*a + i), and this number is written to the i-th byte of the output vector.
To calculate a 256-level histogram, you must execute this command for all four values of the a parameter, then convert the resulting 64-component byte vectors with an extension to 16-bit or 32-bit unsigned integers, depending on the format in which the bins will be accumulated histograms, and accumulate.
Thus, to calculate histograms, vector type extension and integer addition instructions are also required. With compact code, it is possible to calculate a 256-level histogram for 64 pixels in about 6 cycles.
The four values of the a parameter can be implemented as four different commands.
VHISTC1 Vs, VAd
VHISTC2 Vs, VAd
VHISTC3 Vs, VAdVHISTC0 Vs, VAd
VHISTC1 Vs, VAd
VHISTC2 Vs, VAd
VHISTC3 Vs, VAd
Табл. 19.Tab. 19.
Vs = {S7…, S2, S1, S0}, u64
Vd = { S6, S5, S4, S3, S2, S1, S0, T7}
Операция кольцевого межсекционного сдвига на 8 байт. Извлекаемый элемент S7 теряется.
При условном исполнении команда исполняется в обычном режиме, но записываются только активные элементы согласно условию-предикату.Vt: = {T7…, T2, T1, T0}, u64
Vs = {S7…, S2, S1, S0}, u64
Vd = {S6, S5, S4, S3, S2, S1, S0, T7}
The operation of the circular intersectional shift by 8 bytes. The retrieved element S7 is lost.
With conditional execution, the command is executed in the normal mode, but only active elements are written according to the predicate condition.
Vd = { S6, S5, S4, S3, S2, S1, S0, Rt}
Rt.D = S7.
Операция кольцевого межсекционного сдвига на 8 байт с пересылкой скалярного регистра в нулевую секцию. Извлекаемый элемент возвращается в Rt.D.Vs = {S7…, S2, S1, S0}, u64
Vd = {S6, S5, S4, S3, S2, S1, S0, Rt}
Rt.D = S7.
8-byte ring intersection shift operation with transfer of the scalar register to the zero section. The retrieved element is returned to Rt.D.
Табл. 20.Tab. twenty.
Claims (49)
Publications (1)
| Publication Number | Publication Date |
|---|---|
| RU2781355C1 true RU2781355C1 (en) | 2022-10-11 |
Family
ID=
Cited By (1)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| RU2819403C1 (en) * | 2023-12-25 | 2024-05-20 | Федеральное государственное унитарное предприятие "Научно-исследовательский институт "Квант" | Vector computing core |
Citations (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| RU2032215C1 (en) * | 1992-01-27 | 1995-03-27 | Институт точной механики и вычислительной техники им.С.А.Лебедева РАН | Pipeline processor unit |
| US5430884A (en) * | 1989-12-29 | 1995-07-04 | Cray Research, Inc. | Scalar/vector processor |
| CN1666174A (en) * | 2002-05-24 | 2005-09-07 | 皇家飞利浦电子股份有限公司 | A scalar/vector processor |
| US7334110B1 (en) * | 2003-08-18 | 2008-02-19 | Cray Inc. | Decoupled scalar/vector computer architecture system and method |
| US8698817B2 (en) * | 2004-11-15 | 2014-04-15 | Nvidia Corporation | Video processor having scalar and vector components |
| JP5680697B2 (en) * | 2006-08-18 | 2015-03-04 | クゥアルコム・インコーポレイテッドQualcomm Incorporated | Data processing system and method using scalar / vector instructions |
Patent Citations (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US5430884A (en) * | 1989-12-29 | 1995-07-04 | Cray Research, Inc. | Scalar/vector processor |
| RU2032215C1 (en) * | 1992-01-27 | 1995-03-27 | Институт точной механики и вычислительной техники им.С.А.Лебедева РАН | Pipeline processor unit |
| CN1666174A (en) * | 2002-05-24 | 2005-09-07 | 皇家飞利浦电子股份有限公司 | A scalar/vector processor |
| US7334110B1 (en) * | 2003-08-18 | 2008-02-19 | Cray Inc. | Decoupled scalar/vector computer architecture system and method |
| US8698817B2 (en) * | 2004-11-15 | 2014-04-15 | Nvidia Corporation | Video processor having scalar and vector components |
| JP5680697B2 (en) * | 2006-08-18 | 2015-03-04 | クゥアルコム・インコーポレイテッドQualcomm Incorporated | Data processing system and method using scalar / vector instructions |
Cited By (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| RU2819403C1 (en) * | 2023-12-25 | 2024-05-20 | Федеральное государственное унитарное предприятие "Научно-исследовательский институт "Квант" | Vector computing core |
| RU2828600C1 (en) * | 2024-04-12 | 2024-10-14 | Акционерное общество "МЦСТ" | Processor with instruction loading in cache line and branch prediction |
| RU2830044C1 (en) * | 2024-08-27 | 2024-11-11 | Акционерное Общество "Софит" | Vector computing device |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP7335231B2 (en) | Efficient Direct Folding Using SIMD Instructions | |
| CN107408101B (en) | Vector processor configured to operate on variable length vectors using instructions to combine and separate vectors | |
| US8122078B2 (en) | Processor with enhanced combined-arithmetic capability | |
| RU2263947C2 (en) | Integer-valued high order multiplication with truncation and shift in architecture with one commands flow and multiple data flows | |
| US5778241A (en) | Space vector data path | |
| RU2421796C2 (en) | Instruction and logical circuit to carry out dot product operation | |
| USRE38679E1 (en) | Data processor and method of processing data | |
| CN112069459A (en) | Accelerator for sparse-dense matrix multiplication | |
| US20200226201A1 (en) | Methods and Apparatus for Constructing Digital Circuits for Performing Matrix Operations | |
| KR20050010800A (en) | Method and apparatus for adding advanced instructions in an extensible processor architecture | |
| CN104603745A (en) | Vectorized read and write mask update instructions for recursive computation on independent data | |
| CN112434256B (en) | Matrix multiplier and processor | |
| Cococcioni et al. | Fast deep neural networks for image processing using posits and ARM scalable vector extension | |
| Cococcioni et al. | Vectorizing posit operations on RISC-V for faster deep neural networks: experiments and comparison with ARM SVE | |
| US20060112159A1 (en) | Processor | |
| EP4073632B1 (en) | Rotating accumulator for vector operations | |
| US7558816B2 (en) | Methods and apparatus for performing pixel average operations | |
| RU2781355C1 (en) | Scalar-vector processor | |
| Risikesh et al. | Variable bit-precision vector extension for RISC-V based Processors | |
| CN112230993A (en) | Data processing method and device and electronic equipment | |
| Jean et al. | A parallel algorithm for dot product over word-size finite field using floating-point arithmetic | |
| HK40047526A (en) | Matrix multiplier and processor | |
| HK40047526B (en) | Matrix multiplier and processor | |
| Nia et al. | Multimedia extensions for DLX processor | |
| Hendrickson | The cray-1 computer |