Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JP6664105B2 - Method, system, and computer program for accessing data in memory - Google Patents
[go: Go Back, main page]

JP6664105B2 - Method, system, and computer program for accessing data in memory - Google Patents

Method, system, and computer program for accessing data in memory Download PDF

Info

Publication number
JP6664105B2
JP6664105B2 JP2017526876A JP2017526876A JP6664105B2 JP 6664105 B2 JP6664105 B2 JP 6664105B2 JP 2017526876 A JP2017526876 A JP 2017526876A JP 2017526876 A JP2017526876 A JP 2017526876A JP 6664105 B2 JP6664105 B2 JP 6664105B2
Authority
JP
Japan
Prior art keywords
size
data
memory
address
block
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2017526876A
Other languages
Japanese (ja)
Other versions
JP2018501554A (en
Inventor
ブラッドベリー、ジョナサン、デイヴィッド
ジャコビ、クリスチャン
スリゲル、ティモシー
グシュヴィント、マイケル、カール
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of JP2018501554A publication Critical patent/JP2018501554A/en
Application granted granted Critical
Publication of JP6664105B2 publication Critical patent/JP6664105B2/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1605Handling requests for interconnection or transfer for access to memory bus based on arbitration
    • G06F13/1652Handling requests for interconnection or transfer for access to memory bus based on arbitration in a multiprocessor architecture
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/04Addressing variable-length words or parts of words
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0646Configuration or reconfiguration
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30192Instruction operation extension or modification according to data descriptor, e.g. dynamic data typing
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1008Correctness of operation, e.g. memory ordering
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1041Resource optimization
    • G06F2212/1044Space efficiency improvement
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/25Using a specific main memory architecture
    • G06F2212/251Local memory within processor subsystem
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/656Address space sharing
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Executing Machine-Instructions (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Multi Processors (AREA)

Description

本発明は、一般に、プロセッサによるメモリへのアクセスに関し、さらに詳しくは、メモリにおけるデータのブロックに、プロセッサによって、原子的に(atomically)すなわちブロック同時的(block concurrently)に、アクセスすることに関する。   The present invention relates generally to accessing memory by a processor, and more particularly, to accessing blocks of data in memory atomically, or block concurrently, by a processor.

スカラ・コードは、そのコードを実行する中央処理装置(CPU)が、ソフトウェア変数の全バイトに、全体としてアクセスすることを期待する。CPUのための典型的なアーキテクチャでは、アクセスされるデータのサイズの整数倍であるメモリの境界に対してアクセスが実行される場合に限り、スカラ・コードのためのそのような期待が満たされる。スカラ・コードがコンパイラによってベクトル化されるときには、ロードおよびストア命令は、ベクトルのロードおよびストア命令に変換されることが多い。しかし、ベクトルのロード命令とベクトルのストア命令とは、一貫性の保証を有しないことが多く、すなわち、ベクトルのロードまたはストア命令がCPUにおけるベクトル・レジスタのサイズである境界の上にある場合にだけ、一貫性が保証される。原子的でもブロック同時的でもないアクセスについては、あるCPUがデータを書き込み、それと同時に別のCPUがデータを読み出す場合に、データを読み出しつつあるCPUは、後者のCPUの変数を含むメモリ位置への部分的更新を見ることがあり得る。これは、ほとんどのプログラミング言語のセマンティクスとの、または、ロックフリーなデータ構造などのプログラミング技術との一貫性を有しない。   Scalar code expects the central processing unit (CPU) executing the code to access all bytes of the software variable as a whole. In a typical architecture for a CPU, such expectations for scalar code are met only if the access is performed to a memory boundary that is an integer multiple of the size of the data being accessed. When scalar code is vectorized by a compiler, load and store instructions are often translated into vector load and store instructions. However, vector load and vector store instructions often have no guarantee of consistency, i.e., if the vector load or store instruction is on a boundary that is the size of a vector register in the CPU. Only consistency is guaranteed. For non-atomic or block-simultaneous accesses, if one CPU writes data and another reads data at the same time, the CPU that is reading the data will access the memory location containing the variables of the latter CPU. It is possible to see partial updates. It is not consistent with the semantics of most programming languages or with programming techniques such as lock-free data structures.

z/Architecture Principles ofOperation, SA22-7832-09 (10th ed. Sept. 2012)z / Architecture Principles of Operation, SA22-7832-09 (10th ed. Sept. 2012) Power ISA (Version 2.06 RevisionB, Jul. 2010)Power ISA (Version 2.06 RevisionB, Jul. 2010)

メモリにおけるデータにアクセスするための方法、システム、およびコンピュータ・プログラムを提供する。   Methods, systems, and computer programs for accessing data in a memory are provided.

実施形態は、メモリにおけるデータにアクセスするための方法、システム、およびコンピュータ・プログラム製品を含む。本発明のある実施形態によると、プロセッサに結合されたメモリにおけるデータにアクセスするための方法が提供される。この方法は、メモリ中のあるアドレスにおける第1のサイズのデータにアクセスするためのメモリ参照命令を受け取る。この方法は、上記アドレスのアライメント・サイズを決定する。この方法は、ブロック同時的にデータの各グループにアクセスすることにより、データの11以上のグループ単位で上記第1のサイズのデータにアクセスする。上記データのグループは、アライメント・サイズの倍数であるサイズを有する。   Embodiments include methods, systems, and computer program products for accessing data in a memory. According to one embodiment of the invention, there is provided a method for accessing data in a memory coupled to a processor. The method receives a memory reference instruction for accessing data of a first size at an address in memory. The method determines the alignment size of the address. This method accesses data of the first size in units of 11 or more groups of data by accessing each group of data simultaneously in blocks. The group of data has a size that is a multiple of the alignment size.

本発明の別の実施形態によると、データにアクセスするためのシステムが提供される。このシステムは、メモリと、ある方法を実行するように構成されたプロセッサとを備える。この方法は、メモリ中のあるアドレスにおける第1のサイズのデータにアクセスするためのメモリ参照命令を受け取る。この方法は、上記アドレスのアライメント・サイズを決定する。この方法は、ブロック同時的に、データの各グループにアクセスすることにより、データの1以上のグループ単位で第1のサイズのデータにアクセスする。上記データのグループは、上記アライメント・サイズの倍数であるサイズを有する。   According to another embodiment of the present invention, there is provided a system for accessing data. The system includes a memory and a processor configured to perform a method. The method receives a memory reference instruction for accessing data of a first size at an address in memory. The method determines the alignment size of the address. The method accesses data of a first size in units of one or more groups of data by accessing each group of data simultaneously in blocks. The group of data has a size that is a multiple of the alignment size.

本発明のさらなる実施形態によると、メモリにおけるデータにアクセスするためのコンピュータ・プログラム製品が提供される。このコンピュータ・プログラム製品は、マシン命令が具現化されているコンピュータ可読記憶媒体を備える。プロセッサによって読み出し可能であるこのマシン命令は、プロセッサに、ある方法を実行させる。この方法は、メモリ中のあるアドレスにおける第1のサイズのデータにアクセスするためのメモリ参照命令を受け取る。この方法は、上記アドレスのアライメント・サイズを決定する。この方法は、ブロック同時的に、データの各グループにアクセスすることにより、データの1以上のグループ単位で第1のサイズのデータにアクセスする。上記データのグループは、上記アライメント・サイズの倍数であるサイズを有する。   According to a further embodiment of the present invention, there is provided a computer program product for accessing data in a memory. The computer program product comprises a computer-readable storage medium having embodied machine instructions. The machine instructions, which are readable by the processor, cause the processor to perform a method. The method receives a memory reference instruction for accessing data of a first size at an address in memory. The method determines the alignment size of the address. The method accesses data of a first size in units of one or more groups of data by accessing each group of data simultaneously in blocks. The group of data has a size that is a multiple of the alignment size.

本発明のさらなる実施形態によると、データにアクセスするためのシステムが提供される。このシステムは、メモリと、ある方法を実行するように構成されたプロセッサとを備える。この方法は、メモリ中のあるアドレスにおける第1のサイズのデータにアクセスするためのメモリ参照命令を受け取る。このメモリ参照命令は、第1のサイズを特定する。この方法は、上記アドレスのアライメント・サイズを決定する。この方法は、第1のサイズと決定された上記アライメント・サイズとの最大公約数を決定する。この方法は、データの1以上のグループ単位で上記第1のサイズのデータにアクセスする。データのグループは、最大公約数のサイズの倍数であるサイズを有する。   According to a further embodiment of the present invention, there is provided a system for accessing data. The system includes a memory and a processor configured to perform a method. The method receives a memory reference instruction for accessing data of a first size at an address in memory. This memory reference instruction specifies a first size. The method determines the alignment size of the address. The method determines a greatest common divisor of the first size and the determined alignment size. The method accesses data of the first size in units of one or more groups of data. The group of data has a size that is a multiple of the size of the greatest common divisor.

本発明のさらなる実施形態によると、メモリにおけるデータにアクセスするためのコンピュータ・プログラム製品が提供される。このコンピュータ・プログラム製品は、マシン命令が具現化されているコンピュータ可読記憶媒体を備える。プロセッサによって読み出し可能であるこのマシン命令は、プロセッサに、ある方法を実行させる。この方法は、メモリ中のあるアドレスにおける第1のサイズのデータにアクセスするためのメモリ参照命令を受け取る。このメモリ参照命令は、上記第1のサイズを特定する。この方法は、上記アドレスのアライメント・サイズを決定する。この方法は、上記第1のサイズと決定された上記アライメント・サイズとの最大公約数を決定する。この方法は、データの1以上のグループ単位で上記第1のサイズのデータにアクセスする。データの上記グループは、最大公約数のサイズの倍数であるサイズを有する。   According to a further embodiment of the present invention, there is provided a computer program product for accessing data in a memory. The computer program product comprises a computer-readable storage medium having embodied machine instructions. The machine instructions, which are readable by the processor, cause the processor to perform a method. The method receives a memory reference instruction for accessing data of a first size at an address in memory. This memory reference instruction specifies the first size. The method determines the alignment size of the address. The method determines a greatest common divisor of the first size and the determined alignment size. The method accesses data of the first size in units of one or more groups of data. The group of data has a size that is a multiple of the size of the greatest common divisor.

実施形態として見なされる主題は、本明細書の結論部分に置かれている特許請求の範囲において、特に指摘され、明確に特許請求されている。実施形態の以上のおよびそれ以外の特徴と効果とは、次の添付の図面と共に読まれるべき以下の詳細な説明から、明らかである。   The subject matter that is regarded as an embodiment is particularly pointed out and distinctly claimed in the claims at the conclusion of this specification. These and other features and advantages of the embodiments will be apparent from the following detailed description, which should be read in conjunction with the accompanying drawings.

本発明のいくつかの実施形態に従って自然にアラインされたブロックを有するメモリの一部の図解である。4 is an illustration of a portion of a memory having naturally aligned blocks according to some embodiments of the present invention. 本発明のいくつかの実施形態に従ってアクセスされたメモリの一部の図である。FIG. 4 is a diagram of a portion of a memory accessed in accordance with some embodiments of the present invention. 本発明のいくつかの実施形態に従ってメモリにアクセスするためのプロセス・フロー図である。FIG. 4 is a process flow diagram for accessing a memory according to some embodiments of the present invention. 本発明のいくつかの実施形態に従ってメモリにアクセスするためのプロセス・フロー図である。FIG. 4 is a process flow diagram for accessing a memory according to some embodiments of the present invention. 本発明のいくつかの実施形態に従ってメモリにおけるデータにアクセスするシステムの図解である。1 is an illustration of a system for accessing data in a memory according to some embodiments of the invention.

いくつかのプログラミング言語の規約は、メモリにおけるデータのブロック(たとえば、整数、フロート、ロング、ダブルなど、ネイティブな型の変数)の全バイトが、プロセッサ(たとえば、中央処理装置(CPU))によって、同時にアクセスされることを要求する。あるブロックのバイトが同時にアクセスされるとは、元の値または更新された値のいずれか一方がアクセスされ、2つの値の混合物はアクセスされない、ということを意味する。たとえば、データのブロックが値「1234」を有しており、この値が「5678」に更新されつつあるときには、これらの2つの値の一方だけがフェッチすべき正しい値である。非同時的にデータのブロックにアクセスすることの結果として生じ得る、部分的に更新されたどのような値(たとえば、「1278」または「5634」)も、フェッチすべき正しい値ではない。この同時的アクセス要求は、本開示において「ブロック同時性」と称される。また、「ブロック同時的に」メモリにアクセスする、または、「ブロック同時的な」メモリへのアクセスとは、メモリにおけるデータがアクセスされる態様がブロック同時性を満たすことを意味する。従来型のプログラミング言語およびプロセッサでは、データのブロックへのブロック同時的なアクセスは、そのブロックが「自然にアラインされている」ときにだけ、すなわち、ブロックのアドレスがブロックのデータ型サイズの倍数に対応するときにだけ、保証される。   Some programming language conventions state that every byte of a block of data in memory (eg, a variable of a native type, such as an integer, float, long, double, etc.) is stored by a processor (eg, a central processing unit (CPU)). Require that they be accessed at the same time. Accessing bytes of a block at the same time means that either the original value or the updated value is accessed and the mixture of the two values is not accessed. For example, when a block of data has the value "1234" and this value is being updated to "5678", only one of these two values is the correct value to fetch. Any partially updated value (e.g., "1278" or "5634") that may result from accessing a block of data asynchronously is not the correct value to fetch. This simultaneous access request is referred to as "block concurrency" in the present disclosure. Accessing a memory “block-simultaneously” or accessing a memory “block-simultaneously” means that the mode in which data in the memory is accessed satisfies the block concurrency. In conventional programming languages and processors, simultaneous block access to a block of data only occurs when the block is "naturally aligned", i.e., the address of the block is a multiple of the block's data type size. Guaranteed only when responding.

2、4、8、16、および32バイトのフィールドには、特別な名称が与えられる。ハーフワードとは、連続する2バイトのグループである。ワードとは、連続する4バイトのグループである。ダブルワードとは、連続する8バイトのグループである。クワドワードとは、連続する16バイトのグループである。オクトワードとは、連続する32バイトのグループである。メモリ・アドレスが「自然にアラインされた」ハーフワード、ワード、ダブルワード、クワドワード、およびオクトワードを指定するときには、そのアドレスのバイナリ表現は、1、2、3、4、および5個の右端ゼロ・ビットをそれぞれ含む。ハーフワード、ワード、ダブルワード、またはクワドワードは、本開示では、ブロックと称される。   2, 4, 8, 16 and 32 byte fields are given special names. A halfword is a group of two consecutive bytes. A word is a group of four consecutive bytes. A doubleword is a group of consecutive 8 bytes. A quadword is a continuous 16-byte group. An octoword is a continuous 32-byte group. When a memory address specifies "naturally aligned" halfwords, words, doublewords, quadwords, and octowords, the binary representation of that address is 1, 2, 3, 4, and 5 right-most zeros Include each bit. Halfwords, words, doublewords, or quadwords are referred to as blocks in the present disclosure.

メモリにおけるデータを参照するいくつかの命令については、他のプロセッサとチャネル・プログラムとによる観察として、ブロック同時的であると見えるようにするために、ハーフワード、ワード、ダブルワード、またはクワドワードにおける全バイトへのアクセスが、特定される。あるブロック内部で同時的であると見えるようにするためにフェッチ・タイプの参照が特定されると、あるプロセッサによってそのブロックに含まれるバイトがフェッチされている間は、別のプロセッサまたはチャネル・プログラムによるそのブロックへのストア・アクセスは許されない。あるブロック内部で同時的であると見えるようにするためにストア・タイプの参照が特定されると、あるプロセッサによってそのブロック内部のバイトが記憶されている間は、別のプロセッサまたはチャネル・プログラムによるそのブロックへのアクセスは、フェッチ・タイプまたはストア・タイプのいずれも、許されない。従来型の命令セット・アーキテクチャによると、単一オペランドの参照(たとえば、単一の値が単一のレジスタにロードされる、または、単一のオペランドが1つの命令によって用いられる)は、オペランドにおいて特定されたアドレスが整数境界(integral boundary)にある場合には、そのオペランド・サイズ(すなわち、アクセスされているデータのサイズ)に対応するブロック同時性を有する。オペランドにおいて特定されたアドレスが整数境界にない場合には、そのオペランドは、1バイトのサイズだけと対応する、ブロック同時的である。   For some instructions that refer to data in memory, all the words in halfwords, words, doublewords, or quadwords will appear to be seen by other processors and the channel program as being block-simultaneous. Access to the byte is specified. When a fetch-type reference is specified to make it appear to be concurrent within a block, another processor or channel program can use the bytes contained in that block while one processor is fetching it. No store access to the block by is allowed. When a store type reference is specified to make it appear concurrent within a block, while a byte inside that block is being stored by one processor, it may be stored by another processor or channel program. Access to the block, either fetch type or store type, is not allowed. According to the traditional instruction set architecture, a single operand reference (eg, a single value is loaded into a single register, or a single operand is used by one instruction) If the specified address is on an integral boundary, it has a block concurrency corresponding to its operand size (ie, the size of the data being accessed). If the address specified in the operand is not on an integer boundary, the operand is block-simultaneous, corresponding to a size of only one byte.

従来型のプロセッサでは、1バイトのうちの8ビット全部が常に全体として参照されるが、これは、バイト同時性と称される。したがって、ブロック同時性は、異なるレベルのバイト同時性を表す。たとえば、4バイトのデータ・ブロックに対するブロック同時性は、4バイト同時性と称され得る。さらに、メモリが4バイト同時性をもってアクセスされるときには、4バイトのデータ・ブロックの4バイト全部が1つの単位として同時にアクセスされるから、2つの2バイト・データ・ブロックと4つの1バイト・データ・ブロックとは、それぞれ、2バイト同時的および1バイト同時的である。   In conventional processors, all eight bits of a byte are always referred to as a whole, which is referred to as byte concurrency. Thus, block concurrency represents different levels of byte concurrency. For example, block concurrency for a 4-byte data block may be referred to as 4-byte concurrency. Further, when the memory is accessed with 4-byte concurrency, all four bytes of the 4-byte data block are accessed simultaneously as one unit, so that two 2-byte data blocks and four 1-byte data A block is a 2-byte simultaneous and a 1-byte simultaneous, respectively.

ブロック同時的なメモリ動作は、メモリ参照に関する原子動作とも称される。メモリ参照は、他のプロセッサから見て、整数ブロック内部のすべてのバイトが一単位としてアクセスされる場合に、ブロック同時的と考えられる。整数ブロックとは、そのアドレスがブロックの長さの整数倍であるようなデータのブロックである。整数ブロックは、整数境界上にあり、そのブロックの第1のバイトのアドレスは、整数境界にある。   Block-simultaneous memory operations are also called atomic operations related to memory references. A memory reference is considered block-simultaneous when all bytes within an integer block are accessed as a unit, as seen by other processors. An integer block is a block of data whose address is an integer multiple of the block length. An integer block is on an integer boundary, and the address of the first byte of the block is on an integer boundary.

図1は、「自然にアラインされた」ブロックを指定するアドレスを有するメモリの部分を図解している。特に、この図は、「自然にアラインされた」ハーフワード、ワード、ダブルワード、クワドワード、およびオクトワードをそれぞれ表すバー102〜112を示している。図解されているように、メモリは、ビットの長い水平方向のストリングとして見られる。ビットのストリングは、バイトの単位(すなわち、8ビット)に、さらに分割される。メモリにおける各バイト位置は、一意的な非負整数によって識別されるのであるが、この一意的な非負整数が、そのバイト位置のアドレスである。   FIG. 1 illustrates a portion of memory having addresses that specify "naturally aligned" blocks. In particular, the figure shows bars 102-112 representing "naturally aligned" halfwords, words, doublewords, quadwords, and octowords, respectively. As illustrated, the memory is viewed as a long horizontal string of bits. The string of bits is further divided into units of bytes (ie, 8 bits). Each byte position in memory is identified by a unique non-negative integer, which is the address of that byte position.

バー102は、1バイト・データのブロックを有するメモリを表す。バー102における各矩形は、1バイト・データのブロックを表す。各矩形に含まれる数字は、(オフセット0というラベル付けされた第1の要素のアドレスに対応する)ベース・アドレスからのバイト・ブロックのオフセットである。各バイトは、アドレスとそれからのオフセットとを用いて、アクセスされ得る(すなわち、メモリからフェッチされる、または、メモリにストアされる)。いくつかの実施形態では、メモリは、少なくともバイト・レベルではブロック同時的にアクセスされる(すなわち、バイト同時的)。さらに、アクセスされているデータの第1のバイトのアドレスが、より大きいブロック・サイズのための整数境界である場合には、より大きいブロックへのアクセスは、そのブロック・サイズに関して同様にブロック同時的であり得る。   Bar 102 represents a memory having a block of one byte data. Each rectangle in bar 102 represents a block of one-byte data. The number included in each rectangle is the offset of the byte block from the base address (corresponding to the address of the first element labeled offset 0). Each byte can be accessed (ie, fetched from or stored in memory) using the address and an offset therefrom. In some embodiments, the memory is accessed block-concurrently (ie, byte-concurrent), at least at the byte level. Further, if the address of the first byte of data being accessed is an integer boundary for a larger block size, then access to the larger block will also be block synchronous with respect to that block size. Can be

バー104は、自然にアラインされている2バイト・データのブロックを有するメモリを表す。2バイト・ブロックのそれぞれは、2の倍数を用いてアドレス指定されており、2バイト・データ・ブロックのすべてが整数ブロックであり、2バイトのブロック・サイズを用いて、ブロック同時的にアクセスされ得る。同様に、バー106における4バイト・データ・ブロック、バー108における8バイト・データ・ブロック、バー110における16バイト・データ・ブロック、バー112における32バイト・データ・ブロックは、すべてが整数ブロックであり、これらのデータ・ブロックへのアクセスは、4バイト、8バイト、16バイト、および32バイトのブロックに関して、ブロック同時的に実行され得る。   Bar 104 represents a memory having a naturally aligned block of 2-byte data. Each of the two-byte blocks is addressed using a multiple of two, all of the two-byte data blocks are integer blocks, and are accessed concurrently using a two-byte block size. obtain. Similarly, the 4-byte data block at bar 106, the 8-byte data block at bar 108, the 16-byte data block at bar 110, and the 32-byte data block at bar 112 are all integer blocks. , Access to these data blocks can be performed block-simultaneously for 4-byte, 8-byte, 16-byte, and 32-byte blocks.

この開示では、メモリ・アドレスのアドレス・アライメント・サイズは、そのアドレスによってアドレス指定可能な最大の整数ブロックのサイズ、すなわち、2の累乗であるそのアドレスの最大の約数である。たとえば、アドレス96のアドレス・アライメント・サイズは32(すなわち、2)であり、アドレス64のアドレス・アライメント・サイズは、64(すなわち、2)である。いくつかの実施形態では、アドレスに対するアドレス・アライメント・サイズは、バイナリ表現でのアドレスの後置ゼロを数え、次に、バイナリ表現で2の後置ゼロ乗を作成することによって、得られるのであって、すなわち、alignment_size(address)=2trailing_zeros(address)であり、ここで、alignment_size()は、アドレスを入力すると、入力アドレスのアドレス・アライメント・サイズを出力する関数であり、trailing_zeros()は、アドレスを入力すると、そのアドレスにおける後置ゼロの個数をバイナリ表現で出力する関数である。たとえば、アドレス96は、1100000であり、これは、5つの後置ゼロを有する。したがって、アドレス96のアドレス・アライメント・サイズは、2すなわち32である。アドレス64は、1000000であり、これは、6つの後置ゼロを有する。したがって、アドレス64のアドレス・アライメント・サイズは、2すなわち64である。 In this disclosure, the address alignment size of a memory address is the size of the largest integer block addressable by that address, ie, the largest divisor of that address that is a power of two. For example, the address alignment size of address 96 is 32 (ie, 2 5 ), and the address alignment size of address 64 is 64 (ie, 2 6 ). In some embodiments, the address alignment size for an address is obtained by counting the trailing zeros of the address in the binary representation, and then creating a trailing zero power of 2 in the binary representation. That is, alignment_size (address) = 2 trailing_zeros (address) , where alignment_size () is a function that outputs an address alignment size of an input address when an address is input, and trailing_zeros () is When an address is input, this function outputs the number of trailing zeros at that address in binary representation. For example, the address 96 is 1100000 2, which has five postfix zero. Therefore, the address alignment size of address 96 is 25, or 32. Address 64 is 1000000 2, which has six postfix zero. Therefore, the address alignment size of address 64 is 26, or 64.

従来型のメモリ参照命令については、ブロック同時性は、参照されているデータのブロックの第1のバイトのアドレスが、メモリ参照サイズに対して整数的であるかどうか(すなわち、第1のバイトのアドレスがメモリ参照サイズの倍数であるかどうか、または、アドレス・アライメント・サイズがメモリ参照サイズ以上であるかどうか)に依存する。すなわち、従来型のメモリ参照命令の場合のブロック同時性は、命令によって参照されているデータのブロックがメモリ参照サイズと同じアドレス・アライメント・サイズを有するかどうかに依存する。たとえば、従来型のメモリ参照命令が8バイトの整数境界上の8バイトのデータを参照する場合には(たとえば、バー108によって表されているメモリの一部に示されているアドレス0、8、16、24など)、それは、8バイト同時的である。しかし、従来型のメモリ参照命令が4バイトの整数境界上の8バイトのデータを参照する場合には(たとえば、バー106によって表されているメモリの一部に示されているアドレス4、12、20など)、8バイトの同時性は保証されない。この理由は、従来型のメモリ参照命令が4バイトの境界でアラインされているメモリにおいて、8バイトのデータ・ブロックを参照するときには、あるプロセッサがその8バイトを参照している間に、2つの4バイト・ブロックまたは4つの2バイト・ブロックが別のプロセッサによって更新されることはない、ということが保証されないからである。   For conventional memory reference instructions, block concurrency is based on whether the address of the first byte of the block of data being referenced is integer with respect to the memory reference size (ie, the first byte Whether the address is a multiple of the memory reference size, or whether the address alignment size is greater than or equal to the memory reference size). That is, block concurrency for conventional memory reference instructions depends on whether the block of data referenced by the instruction has the same address alignment size as the memory reference size. For example, if a conventional memory reference instruction references eight bytes of data on an eight-byte integer boundary (eg, addresses 0,8, shown in the portion of memory represented by bar 108). 16, 24, etc.), which are 8 bytes simultaneous. However, if a conventional memory reference instruction references 8 bytes of data on a 4 byte integer boundary (eg, addresses 4, 12,..., Shown in the portion of memory represented by bar 106). 20), 8 byte concurrency is not guaranteed. The reason for this is that when a conventional memory reference instruction refers to an 8-byte block of data in a memory that is aligned on a 4-byte boundary, two bytes are read while a processor refers to the 8-byte data block. This is because there is no guarantee that a 4-byte block or four 2-byte blocks will not be updated by another processor.

参照されているデータのブロックのアドレスが、そのブロックを参照する命令のメモリ参照サイズに対して整数的でないときには、従来型の命令セット・アーキテクチャは、単一のレジスタにロードするまたは単一のレジスタからストアするなどの場合に、メモリ・オペランドを期待する命令にメモリからの1つのオペランドを提供するようなメモリ参照のために、ただ1バイトの同時性を保証するなどを行う。このように、ソフトウェアは、メモリ参照サイズのブロック同時性または単なる1バイトの同時性を提供する従来型のメモリ参照に依存することだけが可能である。従来型の命令セット・アーキテクチャによるメモリ参照命令による場合には、中間的なレベルのブロック同時性は保障されない。すなわち、たとえば、メモリ参照サイズが8バイトであり、参照されているデータのブロックが4バイトの境界または2バイトの境界においてアラインされているときには、1バイトの同時性(すなわち、1バイトのブロック・サイズを有するブロック同時性)だけしか提供されないのであるが、その理由は、8バイトの同時性は、整数的な8バイトのメモリ・アドレスにおける8バイト(ダブルワード)の参照に対して(すなわち、アドレスが、8バイトのデータ・サイズの倍数であるとき)だけ提供され、それ以外の場合には、1バイトの同時性が保障されるからである。   If the address of the block of data being referenced is not integral with respect to the memory reference size of the instruction referencing that block, the conventional instruction set architecture loads into a single register or a single register. For example, in order to provide one operand from the memory to an instruction that expects a memory operand in the case of storing from a memory, a synchronization of only one byte is guaranteed. Thus, software can only rely on conventional memory references that provide block concurrency of memory reference size or just one byte of concurrency. Intermediate levels of block concurrency are not guaranteed with memory reference instructions using conventional instruction set architecture. That is, for example, if the memory reference size is 8 bytes and the block of data being referenced is aligned on a 4-byte or 2-byte boundary, then 1-byte concurrency (ie, 1-byte block Only block concurrency with size) is provided, because 8-byte concurrency is relative to an 8-byte (doubleword) reference at an integral 8-byte memory address (ie, Since the address is only provided when it is a multiple of the data size of 8 bytes), otherwise 1 byte concurrency is guaranteed.

現代のプロセッサでは、幅の広いデータ参照(たとえば、ダブルワード、クワドワード、またはオクトワード)のためのアクセスが、より小さいデータ・サイズへの参照と同じ速度で実行され得るのが一般的である。よって、より大きいメモリ領域がアクセスされ、処理され、またはコピーされるときには、より大きいメモリ参照サイズを用いてメモリに対するアクセス、処理またはコピーあるいはこれらの組合せを行うように適応させたメモリ命令を用いて、大きい領域にアクセスし、これを処理し、またはコピーすることが望まれる。よって、たとえば、2つの連続するワードがコピーされるときには、2ワードのロードと2ワードのストアとを、単一のダブルワードのロードと単一のダブルワードのストアとによって置き換えられ得るようにすることにより、コピー動作の速度が2倍になる。2バイトの境界上における32個の2バイトの変数のアレイがコピーされる場合には、コピーを完了するのに、32個のハーフワードのロードと32個のハーフワードのストアとが必要になり得る。ダブルワードのアクセスを実装するプロセッサにおいては、4つのハーフワードのアクセスのグループが、それぞれ、単一のダブルワードのアクセスによって置き換えられ得る。   In modern processors, access for wide data references (eg, doublewords, quadwords, or octowords) can generally be performed at the same speed as references to smaller data sizes. Thus, when a larger memory area is accessed, processed, or copied, using memory instructions adapted to access, process or copy the memory using the larger memory reference size, or a combination thereof. It is desired to access, process, or copy large areas. Thus, for example, when two consecutive words are copied, a two-word load and a two-word store can be replaced by a single double-word load and a single double-word store. This doubles the speed of the copy operation. If an array of 32 2-byte variables is copied on a 2-byte boundary, then 32 halfword loads and 32 halfword stores are required to complete the copy. obtain. In processors that implement double word accesses, groups of four halfword accesses can each be replaced by a single doubleword access.

本発明の実施形態は、そのそれぞれの(データ要素の)整数境界における各個別的なデータ要素(たとえば、4バイトであるワード・サイズ)のサイズよりも大きいデータ・サイズ(たとえば、8バイトであるダブルワード・サイズ)に対するメモリ参照を用いてそのようなデータをコピーするとき、そして、そのそれぞれの(データ要素の)整数境界(たとえば、アドレス100)における最初の個別的なデータ要素が、その整数境界においてアラインされている一連のデータ要素をコピーするのに用いられているアクセス・サイズに対応する、より大きいデータ・サイズの整数境界(たとえば、アドレス1000)においてアラインされていないときに、それらの整数アドレス(たとえば、アドレス100)における一連のアラインされたデータ(たとえば、ワード)を、それぞれの個別的なデータ要素におけるブロック同時性をもってコピーするための機構を提供する。 Embodiments of the present invention provide data sizes (e.g., 8 bytes) that are larger than the size of each individual data element (e.g., a word size that is 4 bytes) at its respective integer boundary. When copying such data using a memory reference to a (doubleword size), and the first individual data element at its respective integer boundary (eg, address 100 2 ) is When unaligned at an integer boundary of a larger data size (eg, address 1000 2 ) corresponding to the access size used to copy the series of data elements aligned at the integer boundary, a series of a in their integer address (e.g., address 100 2) Data in (e.g., word), and provides a mechanism for copying with a block simultaneity in each separate data element.

本発明の実施形態は、参照されているデータのブロックのアドレスがメモリ参照サイズに対して整数的でない場合でも、異なるレベルのブロック同時性を提供するシステムおよび方法を提供する。いくつかの実施形態では、命令のオペランドは、複数のブロック同時アクセスで構成されており、各ブロックは、その対応する整数境界におけるブロックに対応する。たとえば、いくつかの実施形態のメモリ参照命令が、4バイトの境界の上の8バイトのデータを参照する場合(たとえば、バー106によって表されたメモリの一部において示されているアドレス100または1100)には、整数的な4バイトの境界においてアラインされているそれぞれの4バイトのブロックについて、4バイトの同時性が保証される。さらに、2バイトの同時性も保証されるのであるが、その理由は、2バイトの同時性は、保証されている4バイトの同時性によって含意されるからである(すなわち、4は2の倍数であるから、整数的な4バイトの境界でアラインされているどのブロックも、整数的な2バイトの境界でもアラインされている)。同様に、メモリ参照命令が8バイトの境界を有するメモリのアドレスにおいて16バイトのメモリ参照サイズを有する場合(たとえば、バー106によって表されたメモリの一部において示されているアドレス1000または11000)には、8バイトのブロック同時性、4バイトのブロック同時性、2バイトのブロック同時性および1バイトのブロック同時性が、16バイトのブロックを備えたそれらの整数的な8バイト、4バイト、2バイトおよび1バイトのブロックの境界においてアラインされた8バイト、4バイト、2バイトおよび1バイトのブロックに対して保証される。すなわち、アクセスされた16バイトの参照サイズを備えたその整数境界における8バイト、4バイト、2バイト、または1バイトのブロックは、部分的に更新された値を含まないことが保証される。 Embodiments of the present invention provide systems and methods that provide different levels of block concurrency, even when the address of the block of data being referenced is not integral to the memory reference size. In some embodiments, the operands of the instruction are made up of multiple simultaneous block accesses, each block corresponding to a block at its corresponding integer boundary. For example, some memory reference instructions embodiments, when referring to 8 bytes of data on the 4-byte boundaries (e.g., 100 2 or addresses listed in the part of the memory represented by a bar 106 1100 2 ) guarantees 4-byte concurrency for each 4-byte block aligned on an integer 4-byte boundary. Furthermore, two-byte concurrency is also guaranteed, because two-byte concurrency is implied by the guaranteed four-byte concurrency (ie, 4 is a multiple of two). Thus, any block that is aligned on an integer 4 byte boundary is also aligned on an integer 2 byte boundary). Similarly, if a memory reference instruction has a memory reference size of 16 bytes at an address of a memory having an 8-byte boundary (eg, an address 1000 2 or 11000 2 indicated in the portion of the memory represented by bar 106) ) Includes 8 byte block concurrency, 4 byte block concurrency, 2 byte block concurrency and 1 byte block concurrency, those integral 8 bytes with 16 byte blocks, 4 byte Guaranteed for 8-byte, 4-byte, 2-byte and 1-byte blocks aligned at the boundaries of a 2-byte and 1-byte block. That is, an 8-byte, 4-byte, 2-byte, or 1-byte block at that integer boundary with a reference size of 16 bytes accessed is guaranteed not to include a partially updated value.

参照されているデータのブロックのアドレスのアライメント・サイズは、単に、本発明のいくつかの実施形態のメモリ参照命令を実行しているプロセッサが提供する最小のバイト同時性レベルである。すなわち、いくつかの実施形態では、単一ブロック同時アクセスは、複数のアクセスとして、複数のそのようなアクセスがブロック同時的な振る舞いを示すことを保証するロジックと共に、実装され得る。いくつかの実施形態では、複数のブロック同時的なアクセスは、ある整数境界においてアラインされている前記複数のアクセスの各ブロックに対して、少なくともブロック同時的な振る舞いを提供する単一のアクセスとして実装される。   The address alignment size of the block of data being referenced is simply the minimum level of byte concurrency provided by the processor executing the memory reference instruction of some embodiments of the present invention. That is, in some embodiments, a single block concurrent access may be implemented as multiple accesses, with logic ensuring that multiple such accesses exhibit block concurrent behavior. In some embodiments, the concurrent block access is implemented as a single access providing at least block concurrent behavior for each block of the plurality of accesses aligned at some integer boundary. Is done.

図2は、本発明のいくつかの実施形態に従いプロセッサによってアクセスされるメモリ200の一部を図示している。特に、この図は、32から55のアドレスを有するメモリの一部を図解している。メモリ200は、8バイトの境界(たとえば、キャッシュ・インターフェース・サイズ)を有する。すなわち、アドレス32、40、および48が境界を備えている。   FIG. 2 illustrates a portion of a memory 200 accessed by a processor according to some embodiments of the present invention. In particular, this figure illustrates a portion of a memory having 32 to 55 addresses. Memory 200 has an 8-byte boundary (eg, cache interface size). That is, addresses 32, 40, and 48 have boundaries.

一例であるが、本発明のいくつかの実施形態によるメモリ参照命令は、16バイト(すなわち、クワドワードのサイズ)のメモリ参照サイズを有しており、この16バイトのブロックは、34のアドレスを有する(すなわち、このブロックの最初のバイトは、メモリ200のアドレス34にある)。これらの16バイトは、図2において、グレイのボックスとして図示されている。このメモリ参照命令を実行するプロセッサは、2バイトの同時性を保証しながら、16バイトのデータにアクセスし得る。この理由は、バイナリ形式(すなわち、100010)でのアドレス34は、後置ゼロを1つ有するため、そのアドレスが、2バイトのアライメント・サイズを有するからである。 By way of example, a memory reference instruction according to some embodiments of the present invention has a memory reference size of 16 bytes (ie, the size of a quadword), and this 16 byte block has 34 addresses. (Ie, the first byte of this block is at address 34 of memory 200). These 16 bytes are shown in FIG. 2 as gray boxes. The processor executing this memory reference instruction can access 16 bytes of data while guaranteeing 2 bytes of concurrency. This is because address 34 in binary form (ie, 100010 2 ) has one trailing zero, so that the address has an alignment size of 2 bytes.

いくつかの実施形態では、プロセッサは、それらのグループのどれもがメモリの境界を超えて拡がらない限り、アライメント・サイズの倍数である任意のサイズを有するグループ単位で、16バイトのデータにアクセスし得る。たとえば、命令を実行しているプロセッサは、アドレス34〜37を有する4バイト、アドレス38および39を有する2バイト、アドレス40〜43を有する4バイト、アドレス44〜47を有する4バイト、ならびにアドレス48および49を有する2バイトにアクセスし得る。しかし、各グループへのアクセスは、時間を要し、パフォーマンスに影響するために、命令を実行しているプロセッサは、キャッシュ・ラインの交差を回避しながら、可能な限り少数のアクセスで、この16バイトのデータにアクセスすることになる。特に、プロセッサは、キャッシュ・ライン・アドレス40までのアドレス34〜39を有する最初の6バイトと、次のキャッシュ・ライン・アドレス48までのアドレス40〜47を有する次の8バイトと、アドレス48および49を有する次の2バイトに、アクセスし得る。これら3回のアクセス(すなわち、6バイトのアクセス、8バイトのアクセス、および2バイトのアクセス)は、すべての16バイトにアクセスするように、いずれかの順序で実行され得る。   In some embodiments, the processor accesses 16 bytes of data in groups of any size that is a multiple of the alignment size, as long as none of those groups extend across memory boundaries. I can do it. For example, the processor executing the instruction may have four bytes with addresses 34-37, two bytes with addresses 38 and 39, four bytes with addresses 40-43, four bytes with addresses 44-47, and address 48. And 2 bytes with the address 49 can be accessed. However, because access to each group is time consuming and impacts performance, the processor executing the instruction requires only a minimum number of accesses while avoiding cache line crossings. It will access byte data. In particular, the processor determines the first six bytes with addresses 34-39 up to cache line address 40, the next eight bytes with addresses 40-47 up to the next cache line address 48, address 48 and The next two bytes with 49 can be accessed. These three accesses (ie, a 6-byte access, an 8-byte access, and a 2-byte access) may be performed in any order to access all 16 bytes.

本発明の実施形態によりメモリ参照命令を実行するプロセッサとは対照的に、メモリ200のアドレス34における16バイトのデータを参照する従来型のメモリ参照命令は、16回に至る1バイトのアクセスを用いて、この16バイトのデータにアクセスすることになる。この理由は、従来型のメモリ参照命令の場合には、16バイトのデータのアドレスが、メモリ参照サイズ(すなわち、16バイト)に対して整数的ではなく、したがって、バイト同時性だけが保証されるからである。いくつかの場合には、従来型のメモリ参照命令を実行するプロセッサは、アライメント・フォールトを生じさせることなくアドレス34〜49を有する16バイトにアクセスするためには、バイト・アドレス32、33および50〜55に、意味のないバイトを詰めなくてはならないことがあり得る。これらの余分なステップは、パフォーマンスに影響し得る。   In contrast to processors that execute memory reference instructions according to embodiments of the present invention, conventional memory reference instructions that reference 16 bytes of data at address 34 of memory 200 use up to 16 1-byte accesses. Thus, this 16-byte data is accessed. The reason is that in the case of a conventional memory reference instruction, the address of 16-byte data is not integral with respect to the memory reference size (ie, 16 bytes), and therefore only byte concurrency is guaranteed. Because. In some cases, a processor executing a conventional memory reference instruction may require byte addresses 32, 33, and 50 to access 16 bytes having addresses 34-49 without causing an alignment fault. ~ 55 may have to be padded with meaningless bytes. These extra steps can affect performance.

以下のコードの例は、そうではないと断らない限り、IBM(商標)のz/アーキテクチャによる例示的な命令に基づいて特定されている。しかし、当業者であれば、本明細書における例を、パワーISAアーキテクチャなど、他のアーキテクチャにどのように適合させるべきかを理解するであろう。IBMシステムのzサーバ・ファミリの命令セットは、z/アーキテクチャ命令セットとして知られるが、IBMの刊行物であるz/Architecture Principles of Operation, SA22-7832-09 (10th ed. Sept.2012)において、与えられている。パワー・サーバの命令セットは、パワーISA(命令セット・アーキテクチャ)として知られるが、Power ISA (Version 2.06 Revision B, Jul. 2010)において与えられている。   The following code examples are specified based on exemplary instructions according to the IBM ™ z / architecture, unless otherwise stated. However, one of ordinary skill in the art will understand how to adapt the examples herein to other architectures, such as a power ISA architecture. The instruction set of the z server family of IBM systems, known as the z / architecture instruction set, is described in the IBM publication z / Architecture Principles of Operation, SA22-7832-09 (10th ed. Sept. 2012). Has been given. The power server instruction set, known as the Power ISA (Instruction Set Architecture), is provided in the Power ISA (Version 2.06 Revision B, Jul. 2010).

以下の例示的なz/アーキテクチャの命令(例1)では、16個のハーフワードのロードおよびストアのコピー・ループが示されている。
LHI R1, 16
XGR R3, R3
LOOP: LLH R2,0(R3,R4)
STH R2,0(R3,R5)
AGHI R3,2
BCT R1,LOOP
ここで、LHIはロード・ハーフワード・イミディエット(LOAD HALFWORD IMMEDIATE)命令であり、XGRは排他的OR(EXCLUSIVE OR)命令であり、LLHはロード論理ハーフワード(LOAD LOGICAL HALFWORD)命令であり、STHはストア・ハーフワード(STORE HALFWORD)命令であり、AGHIは加算ハーフワード・イミディエット(ADD HALFWORD IMMEDIATE)命令であり、BCTは分岐オン・カウント(BRANCH ON COUNT)命令であり、R1〜R5はレジスタである。これらの命令に関するより詳細な説明は、z/Architecture Principles of Operationに記述がある。
In the following exemplary z / architecture instruction (Example 1), a 16 halfword load and store copy loop is shown.
LHI R1, 16
XGR R3, R3
LOOP: LLH R2,0 (R3, R4)
STH R2,0 (R3, R5)
AGHI R3,2
BCT R1, LOOP
Here, LHI is a load halfword immediate (LOAD HALFWORD IMMEDIATE) instruction, XGR is an exclusive OR (EXCLUSIVE OR) instruction, LLH is a load logical halfword (LOAD LOGICAL HALFWORD) instruction, and STH is Is a store halfword (STORE HALFWORD) instruction, AGHI is an add halfword immediate (ADD HALFWORD IMMEDIATE) instruction, BCT is a branch on count (BRANCH ON COUNT) instruction, and R1 to R5 are registers. It is. A more detailed description of these instructions can be found in the z / Architecture Principles of Operation.

例1に示されている16個のハーフワードのロードおよびストアは、ダブルワードの4つのロードと4つのストアとで置き換えられ得るのであって、そのように置き換えると、次の例2に示されるように、実行時間が、66個の命令の実行に対応する時間から、18個の命令の実行に対応する時間に短縮される。
LHI R1, 4
XGR R3, R3
LOOP: LG R2,0(R3,R4)
STG R2,0(R3,R5)
AGHI R3,8
BCT R1,LOOP
The 16 halfword loads and stores shown in Example 1 can be replaced by four doubleword loads and four stores, and such replacements are shown in Example 2 below. Thus, the execution time is reduced from the time corresponding to the execution of 66 instructions to the time corresponding to the execution of 18 instructions.
LHI R1, 4
XGR R3, R3
LOOP: LG R2,0 (R3, R4)
STG R2,0 (R3, R5)
AGHI R3,8
BCT R1, LOOP

しかし、16個のハーフワードをコピーすることに基づく例1は、レジスタR4およびR5に保持されるアドレスが少なくとも2のアドレス・アライメント・サイズに対応する場合の2バイトのブロック同時性と、1バイトの同時性(すなわち、ブロック・サイズが1バイトに対応するブロック同時性)とを与える。他方で、例2に示されている命令は、一般的に、レジスタR4およびR5が少なくともクワドワードのアドレス・アライメント・サイズを有する場合のクワドワードのブロック同時性と、そうでない場合のバイト同時性とを保証し得る。このように、例1から例2に命令を変換するプログラマまたはコンパイラは、例1のブロック同時性の保証を、ハーフワードのブロック同時性から、クワドワード未満であるが少なくともハーフワード・サイズのアドレス・アライメント・サイズを有するアドレスに対しては、単なるバイト同時性にまで低下させ得る。したがって、プログラマまたはコンパイラは、それ以外には有益なこの変更により、プログラミング言語またはプログラミング規約の違反を導いてしまうことになり得る。   However, Example 1, based on copying 16 halfwords, has two byte block concurrencies where the addresses held in registers R4 and R5 correspond to at least two address alignment sizes, and one byte. (Ie, block concurrency corresponding to a block size of 1 byte). On the other hand, the instructions shown in Example 2 generally provide for quadword block concurrency if registers R4 and R5 have at least a quadword address alignment size, and byte concurrency otherwise. Can guarantee. Thus, the programmer or compiler translating the instructions from Example 1 to Example 2 would guarantee the block concurrency of Example 1 because of the block concurrency of halfwords, because the address concurrency less than quadword but at least halfword size. For addresses with an alignment size, it can be reduced to just byte concurrency. Thus, the programmer or compiler may cause a violation of the programming language or programming conventions with this otherwise beneficial change.

別の例であるが、2バイトの境界上の32個の2バイトの変数のアレイがコピーされる場合には、そのコピーを完了するのに、32個のハーフワードのロードと、32個のハーフワードのストアとが必要になり得る。本発明のいくつかの実施形態に従って一度に16バイトをロードする、単一命令多重データ(SIMD)のロードが用いられる場合には、わずかに、2つのロードと2つのストアとが要求されるだけであり、コピーの実行時間を著しく短縮する。SIMDのロードがz/アーキテクチャのプロセッサ上で実装されるときには、下記の例3におけるコードは、下記の例4に示されているように、2つのベクトル・ロード(VECTOR LOAD)命令とそれに続く2つのベクトル・ストア(VECTOR STORE)命令とによって置き換えられ得る。   As another example, if an array of 32 2-byte variables on a 2-byte boundary is copied, a load of 32 halfwords and 32 A halfword store may be required. If a single instruction multiple data (SIMD) load is used, which loads 16 bytes at a time according to some embodiments of the present invention, only two loads and two stores are required. This significantly reduces the copy execution time. When the SIMD load is implemented on az / architecture processor, the code in Example 3 below, as shown in Example 4 below, contains two vector load (VECTOR LOAD) instructions followed by 2 VECTOR STORE instructions.

例3は、16個のハーフワードのロードおよびストアのコピー・ループを示している。
LHI R1, 16
XGR R3, R3
LOOP: LLH R2,0(R3,R4)
STH R2,0(R3,R5)
AGHI R3,2
BCT R1,LOOP
このコピー・ループは、ベクトル・レジスタの2つのロードおよび2つのストアだけによって置き換えることが可能であり、66個の命令を実行することに対応する時間から、次の例4に示されているように、4つの命令を実行することに対応する時間に、実行時間を短縮する。
VL V1, 0(R4)
VST V1, 0(R5)
VL V1, 16(R4)
VST V1, 16(R5)
ここで、VLはベクトル・ロード(VECTOR LOAD)命令であり、VSTはベクトル・ストア(VECTOR STORE)命令であり、V1はベクトル・データ・タイプである。
Example 3 shows a 16 halfword load and store copy loop.
LHI R1, 16
XGR R3, R3
LOOP: LLH R2,0 (R3, R4)
STH R2,0 (R3, R5)
AGHI R3,2
BCT R1, LOOP
This copy loop can be replaced by only two loads and two stores of vector registers, and from the time corresponding to executing 66 instructions, as shown in Example 4 below. In addition, the execution time is reduced to a time corresponding to executing the four instructions.
VL V1, 0 (R4)
VST V1, 0 (R5)
VL V1, 16 (R4)
VST V1, 16 (R5)
Here, VL is a vector load (VECTOR LOAD) instruction, VST is a vector store (VECTOR STORE) instruction, and V1 is a vector data type.

しかし、従来型の命令アーキテクチャによると、16個のハーフワードをコピーすることに基づく例3は、レジスタR4およびR5に保持されているアドレスが少なくとも2のアドレス・アライメント・サイズに対応する場合の2バイトのブロック同時性と、1バイトの同時性とを与える。他方で、例4は、一般的に、レジスタR4およびR5が少なくともクワドワードのアドレス・アライメント・サイズを有する場合のクワドワードのブロック同時性と、そうでない場合のバイト同時性とを保証し得る。このようにして、例3から例4に命令を変換するプログラマまたはコンパイラは、例3のブロック同時性保証を、ハーフワードのブロック同時性から、クワドワード未満であるが少なくともハーフワード・サイズのアドレス・アライメント・サイズを有するアドレスに対しては、単なるバイト同時性にまで低下させ得る。したがって、プログラマまたはコンパイラは、それ以外には有益なこの変更により、プログラミング言語またはプログラミング規約の違反を導いてしまうことになり得る。   However, according to the conventional instruction architecture, Example 3, based on copying 16 halfwords, requires 2 addresses when the addresses held in registers R4 and R5 correspond to at least an address alignment size of 2. It gives byte block concurrency and one byte concurrency. On the other hand, Example 4 may generally guarantee quadword block concurrency if registers R4 and R5 have at least a quadword address alignment size, and byte concurrency otherwise. In this manner, the programmer or compiler translating the instructions from Example 3 to Example 4 may use the block concurrency guarantee of Example 3 because of the halfword block concurrency, the address of less than a quadword but at least halfword size. For addresses with an alignment size, it can be reduced to just byte concurrency. Thus, the programmer or compiler may cause a violation of the programming language or programming conventions with this otherwise beneficial change.

あるアレイの複数の値が、ある定数だけインクリメントされるときには、同様の変換が行われ得る。特に、下記の例5は、16個のハーフワードの加算ループを示している。
LHI R1, 16
LH R7, R6
XGR R3, R3
LOOP: LLH R2,0(R3,R4)
AH R2, R6
STH R2,0(R3,R5)
AGHI R3,2
BCT R1,LOOP
ここで、LHはロード・ハーフワード(LOAD HALFWORD)命令であり、AHは加算ハーフワード(ADD HALFWORD)命令であり、R6およびR7はレジスタである。16個のハーフワードのこの加算ループは、ただ2つのベクトル加算で置き換えることが可能であり、その場合には、次の例6に示されるように、83個の命令を実行することに対応する時間から、7つの命令を実行することに対応する時間まで、実行時間が短縮される。
VLREPH V3, 0(R6)
VL V1, 0(R4)
VAH V1, V1, V3
VST V1, 0(R5)
VL V1, 16(R4)
VAH V1, V1, V3
VST V2, 16(R5)
ここで、VLREPHはベクトル・ロードおよび複製(VECTOR LOAD AND REPLICATE)命令、VAHはベクトル加算ハーフワード(VECTOR ADD HALFWORD)命令、V1〜V3はベクトルである。
A similar conversion can be performed when the values of an array are incremented by a constant. In particular, Example 5 below shows a 16 halfword addition loop.
LHI R1, 16
LH R7, R6
XGR R3, R3
LOOP: LLH R2,0 (R3, R4)
AH R2, R6
STH R2,0 (R3, R5)
AGHI R3,2
BCT R1, LOOP
Here, LH is a load halfword (LOAD HALFWORD) instruction, AH is an addition halfword (ADD HALFWORD) instruction, and R6 and R7 are registers. This addition loop of 16 halfwords can be replaced by just two vector additions, in which case it corresponds to executing 83 instructions, as shown in Example 6 below. Execution time is reduced from time to the time corresponding to executing the seven instructions.
VLREPH V3, 0 (R6)
VL V1, 0 (R4)
VAH V1, V1, V3
VST V1, 0 (R5)
VL V1, 16 (R4)
VAH V1, V1, V3
VST V2, 16 (R5)
Here, VLREPH is a vector load and replica (VECTOR LOAD AND REPLICATE) instruction, VAH is a vector addition halfword (VECTOR ADD HALFWORD) instruction, and V1 to V3 are vectors.

例5は、アドレスR4およびR5が、少なくとも2のアドレス・アライメント・サイズを有する場合には、そのようにインクリメントされる各ハーフワードに対して、ブロック同時性を提供し、他方で、例6は、アドレスR4およびR5が、少なくとも16のアドレス・アライメント・サイズを有する場合には、そのようにインクリメントされる8のハーフワードのグループに対して、ブロック同時性を与え、それ以外の場合には、1バイトの同時性を与える。このように、例5から例6への変換は、例5のブロック同時性の振る舞いを保存しない。   Example 5 provides block concurrency for each halfword so incremented if addresses R4 and R5 have an address alignment size of at least 2, while Example 6 provides , If addresses R4 and R5 have an address alignment size of at least 16, provide block concurrency for the group of eight halfwords so incremented, otherwise, Gives one byte of concurrency. Thus, the conversion from Example 5 to Example 6 does not preserve the block concurrency behavior of Example 5.

例4および6に示されたベクトル命令は、従来型のメモリ参照命令ではなく、新たな命令である、ということが注意されるべきである。しかし、これらの新たなベクトル命令は、本明細書で説明される本発明のいくつかの実施形態によるブロック同時性の振る舞いを有しない。   It should be noted that the vector instructions shown in Examples 4 and 6 are new instructions, not conventional memory reference instructions. However, these new vector instructions do not have the block concurrency behavior according to some embodiments of the invention described herein.

本発明の実施形態は、特定されたメモリ・アドレスに対するアドレス・アライメント・サイズに基づき、メモリ参照命令の新たな定義を提供することにより、そのような命令は、そのアドレス・アライメント・サイズにおいてアラインされたアドレス・アライメント・サイズに対応するブロック・サイズのサブブロックに対して、ブロック同時性を提供する。よって、上記の3つのコード変換(例1から例2、例3から例4、および例5から例6)は、ロードおよびストア命令に対する新たな変更された命令定義に基づき、実行され得る。この変更は、本明細書で説明されているブロック同時性の振る舞いに対応し、他方で、命令実行の他の態様の振る舞いは、変更されないままに維持する。明確にするために、以下の例示的な変更された命令のオペコードは、以下で述べる命令の例では、演算コードの最初に「m」を付して表される。   Embodiments of the present invention provide for a new definition of a memory reference instruction based on an address alignment size for a specified memory address, such instructions being aligned at that address alignment size. Block synchronism is provided for sub-blocks of a block size corresponding to the address alignment size. Thus, the three code conversions described above (Examples 1 to 2, Example 3 to 4, and Example 5 to 6) can be performed based on the new and changed instruction definition for the load and store instructions. This change corresponds to the block concurrency behavior described herein, while the behavior of other aspects of instruction execution remains unchanged. For clarity, the following exemplary modified instruction opcodes are denoted by an "m" prefix to the opcode in the instruction examples described below.

ハーフワードのブロック同時性を伴うハーフワードのコピー・ループは、下記の例7に示されているように、変更されたダブルワードのアクセス命令を用いて、実行され得る。
LHI R1, 4
XGR R3, R3
LOOP: mLG R2,0(R3,R4)
mSTG R2,0(R3,R5)
AGHI R3,8
BCT R1,LOOP
いくつかの実施形態では、例7のこのコードは、レジスタR4およびR5に保持されているアドレスが少なくとも2のアドレス・アライメント・サイズに対応する場合の2バイトのブロック同時性と、1バイトの同時性とを与える。さらに、いくつかの実施形態では、このコードは、レジスタR4およびR5に保持されているアドレスが少なくとも4のアドレス・アライメント・サイズに対応する場合には、4バイトのブロック同時性を与える。さらに、いくつかの実施形態では、このコードは、レジスタR4およびR5に保持されているアドレスが少なくとも8のアドレス・アライメント・サイズに対応する場合には、8バイトのブロック同時性を与える。
A halfword copy loop with halfword block concurrency may be performed using a modified doubleword access instruction, as shown in Example 7 below.
LHI R1, 4
XGR R3, R3
LOOP: mLG R2,0 (R3, R4)
mSTG R2,0 (R3, R5)
AGHI R3,8
BCT R1, LOOP
In some embodiments, this code of Example 7 provides two-byte block concurrency and one-byte concurrency when the addresses held in registers R4 and R5 correspond to at least two address alignment sizes. Give sex and. Further, in some embodiments, this code provides 4 bytes of block concurrency if the addresses held in registers R4 and R5 correspond to an address alignment size of at least 4. Further, in some embodiments, this code provides 8 bytes of block concurrency if the addresses held in registers R4 and R5 correspond to an address alignment size of at least 8.

同様に、例7の命令は、ロードおよびストア命令に対する変更されたパワーISA命令の定義に基づき、パワーISAを用いて、表され得る。変更は、本明細書で説明されているブロック同時性の振る舞いに対応し、他方で、パワーISAの定義によって特定されるように、命令実行の他の態様の振る舞いは、修正されないままに維持される。やはり、明確にするために、以下で述べる例7においては、これらの変更された命令のオペコードは、演算コードの最初に「m」を付して表される。
LI R1, 4
MTCTR R1
XOR R3, R3, R3
LOOP: mLDX R2, R3,R4
mSTDX R2, R3,R5
ADDI R3, R3, 8
BDNZ LOOP
ここで、LIはロード・イミディエット(Load Immediate)命令であり、MTCTRはムーブ・ツー・カウント・レジスタ(Move To Count Register)命令であり、XORは排他的OR(Exclusive OR)命令であり、LDXはロード・ダブル・ワード(Load Double Word)命令であり、STDXはストア・ダブルワード・インデックスト(Store Doubleword Indexed)命令であり、ADDIは加算イミディエット(Add Immediate)命令であり、BDNZは分岐(Branch)命令であり、R1〜R5はレジスタである。
Similarly, the instruction of Example 7 may be represented using a power ISA based on the modified power ISA instruction definition for load and store instructions. The changes correspond to the block concurrency behavior described herein, while the behavior of other aspects of instruction execution, as specified by the Power ISA definition, is left unmodified. You. Again, for clarity, in Example 7 described below, the opcodes of these modified instructions are denoted with an "m" at the beginning of the opcode.
LI R1, 4
MTCTR R1
XOR R3, R3, R3
LOOP: mLDX R2, R3, R4
mSTDX R2, R3, R5
ADDI R3, R3, 8
BDNZ LOOP
Here, LI is a Load Immediate instruction, MTCTR is a Move To Count Register instruction, XOR is an Exclusive OR instruction, and LDX is an exclusive OR (Exclusive OR) instruction. Is a load double word (Load Double Word) instruction, STDX is a store double word indexed instruction, ADDI is an Add Immediate instruction, and BDNZ is a branch ( (Branch) instruction, and R1 to R5 are registers.

さらに、例4の最適化された命令は、下記の例8の命令に変換され得る。最適化されたコードは、下記のように、変更された命令を用いて、実行され得る。
mVL V1, 0(R4)
mVST V1, 0(R5)
mVL V1, 16(R4)
mVST V1, 16(R5)
Further, the optimized instructions of Example 4 can be converted to the instructions of Example 8 below. The optimized code may be executed with modified instructions as described below.
mVL V1, 0 (R4)
mVST V1, 0 (R5)
mVL V1, 16 (R4)
mVST V1, 16 (R5)

いくつかの実施形態では、例8のこのコードは、レジスタR4およびR5に保持されているアドレスが少なくとも2のアドレス・アライメント・サイズに対応する場合の2バイトのブロック同時性と、1バイトの同時性(すなわち、1バイトに対応するブロック・サイズを備えたブロック同時性)とを与える。さらに、いくつかの実施形態では、このコードは、レジスタR4およびR5に保持されているアドレスが少なくとも4のアドレス・アライメント・サイズに対応する場合には、4バイトのブロック同時性を与える。さらに、いくつかの実施形態では、このコードは、レジスタR4およびR5に保持されているアドレスが少なくとも8のアドレス・アライメント・サイズに対応する場合には、8バイトのブロック同時性を与える。さらに、いくつかの実施形態では、このコードは、レジスタR4およびR5に保持されているアドレスが少なくとも16のアドレス・アライメント・サイズに対応し、mVLおよびmVSTのための最大ブロック同時性サイズが少なくとも16バイトとして定義されている場合には、16バイトのブロック同時性を与える。いくつかの実施形態では、このコードは、レジスタR4およびR5に保持されているアドレスが少なくとも16のアドレス・アライメント・サイズに対応し、mVLおよびmVSTのための最大ブロック同時性サイズが少なくとも8バイトとして定義されている場合には、8バイトのブロック同時性を与える。   In some embodiments, this code of Example 8 provides two-byte block concurrency and one-byte concurrency when the addresses held in registers R4 and R5 correspond to at least two address alignment sizes. (Ie, block concurrency with a block size corresponding to one byte). Further, in some embodiments, this code provides 4 bytes of block concurrency if the addresses held in registers R4 and R5 correspond to an address alignment size of at least 4. Further, in some embodiments, this code provides 8 bytes of block concurrency if the addresses held in registers R4 and R5 correspond to an address alignment size of at least 8. Further, in some embodiments, this code indicates that the addresses held in registers R4 and R5 correspond to an address alignment size of at least 16, and that the maximum block concurrency size for mVL and mVST is at least 16 If defined as bytes, it provides 16 byte block concurrency. In some embodiments, the code is such that the addresses held in registers R4 and R5 correspond to an address alignment size of at least 16 and the maximum block concurrency size for mVL and mVST is at least 8 bytes. If defined, gives 8 byte block concurrency.

同様に、例7のコードは、下記の例8のように、変更されたパワーISAの定義を用いて、表され得る。
LI R1, 16
mLXVX V1, R0, R4
mSTXVX V1, R0, R5
mLXVX V1, R1, R4
mSTXVX V1, R1, R5
Similarly, the code of Example 7 can be expressed using a modified power ISA definition, as in Example 8 below.
LI R1, 16
mLXVX V1, R0, R4
mSTXVX V1, R0, R5
mLXVX V1, R1, R4
mSTXVX V1, R1, R5

同様に、例6のコードは、下記の例9のように、表され得る。
VLREPH V3, 0(R6)
mVL V1, 0(R4)
VAH V1, V1, V3
mVST V1, 0(R5)
mVL V1, 16(R4)
VAH V1, V1, V3
mVST V2, 16(R5)
Similarly, the code of Example 6 can be represented as in Example 9 below.
VLREPH V3, 0 (R6)
mVL V1, 0 (R4)
VAH V1, V1, V3
mVST V1, 0 (R5)
mVL V1, 16 (R4)
VAH V1, V1, V3
mVST V2, 16 (R5)

いくつかの実施形態では、例9のコードは、レジスタR4およびR5に保持されているアドレスが少なくとも2のアドレス・アライメント・サイズに対応する場合の2バイトのブロック同時性と、1バイトの同時性(すなわち、1バイトに対応するブロック・サイズを用いたブロック同時性)とを与える。さらに、いくつかの実施形態では、このコードは、レジスタR4およびR5に保持されているアドレスが少なくとも4のアドレス・アライメント・サイズに対応する場合には、4バイトのブロック同時性を与える。さらに、いくつかの実施形態では、このコードは、レジスタR4およびR5に保持されているアドレスが少なくとも8のアドレス・アライメント・サイズに対応する場合には、8バイトのブロック同時性を与える。さらに、いくつかの実施形態では、このコードは、レジスタR4およびR5に保持されているアドレスが少なくとも16のアドレス・アライメント・サイズに対応する場合であって、mVLおよびmVSTに対する最大のブロック同時性サイズが少なくとも16バイトとして定義されている場合には、16バイトのブロック同時性を与える。さらに、いくつかの実施形態では、このコードは、レジスタR4およびR5に保持されているアドレスが少なくとも16のアドレス・アライメント・サイズに対応する場合であって、mVLおよびmVSTに対する最大のブロック同時性サイズが少なくとも8バイトとして定義されている場合には、8バイトのブロック同時性を与える。   In some embodiments, the code of Example 9 has two byte block concurrency and one byte concurrency where the addresses held in registers R4 and R5 correspond to at least two address alignment sizes. (Ie, block concurrency using a block size corresponding to one byte). Further, in some embodiments, this code provides 4 bytes of block concurrency if the addresses held in registers R4 and R5 correspond to an address alignment size of at least 4. Further, in some embodiments, this code provides 8 bytes of block concurrency if the addresses held in registers R4 and R5 correspond to an address alignment size of at least 8. Further, in some embodiments, this code is used when the addresses held in registers R4 and R5 correspond to an address alignment size of at least 16 and the maximum block concurrency size for mVL and mVST. Is defined as at least 16 bytes, which provides 16 bytes of block concurrency. Further, in some embodiments, this code is used when the addresses held in registers R4 and R5 correspond to an address alignment size of at least 16 and the maximum block concurrency size for mVL and mVST. Is defined as at least 8 bytes, giving 8 bytes of block concurrency.

いくつかの実施形態では、既存の命令およびオペコードが変更され、命令のために新たなニーモニックが導入されることはない。他の実施形態では、本明細書で説明されるアドレス・アライメント・サイズに基づくブロック同時性に関する教示を用いて、新たな命令およびオペコードが導入される。   In some embodiments, existing instructions and opcodes are modified, and no new mnemonics are introduced for the instructions. In other embodiments, new instructions and opcodes are introduced using the teachings on block concurrency based on address alignment sizes described herein.

図3は、本発明のいくつかの実施形態に従ってメモリにアクセスするためのプロセス・フローを図示している。いくつかの実施形態では、プロセッサ(たとえば、CPU)は、図3に示されたプロセス・フローを実行する。ボックス305では、プロセッサが、メモリの、あるアドレスにおけるデータのブロックを参照するメモリ参照命令を受け取る。メモリ参照命令は、メモリにおけるあるデータのブロックを参照するいずれかの命令(たとえば、メモリにおけるあるアドレスをオペランドとして含む命令)を含む。このような命令は、算術演算(たとえば、加算命令、減算命令、比較命令など)だけでなく、ロード命令とストア命令とを含む。   FIG. 3 illustrates a process flow for accessing memory according to some embodiments of the present invention. In some embodiments, a processor (eg, a CPU) performs the process flow illustrated in FIG. At box 305, the processor receives a memory reference instruction that references a block of data at an address in memory. The memory reference instruction includes any instruction that refers to a certain block of data in the memory (for example, an instruction that includes a certain address in the memory as an operand). Such instructions include load and store instructions, as well as arithmetic operations (eg, add, subtract, compare, etc.).

判断ボックス310では、プロセッサが、オプションであるが、そこからのデータをプロセッサが参照するメモリが、ボックス305で受け取られたメモリ参照命令によってサポートされる最大ブロック同時メモリ参照サイズ(または、最大ブロック同時性サイズ)以上のメモリ・アドレス境界(すなわち、メモリ参照命令で特定されたアドレスのアドレス・アライメント・サイズ)を有するかどうかを判断する。ある命令に対する最大メモリ参照サイズは、命令セット・アーキテクチャのすべての命令に対して、定義される。最大ブロック同時メモリ参照サイズは、命令のメモリ参照のサイズであり得るか、または、命令セット・アーキテクチャのすべての命令に対して定義された最大ブロック同時参照サイズに対応することもあり得る。いくつかの実施形態では、最大ブロック同時メモリ参照サイズは、命令のメモリ参照のサイズであり得るか、または、命令セット・アーキテクチャのそれぞれの命令に対して独立に定義された最大ブロック同時メモリ参照サイズに対応することもあり得る。   At decision box 310, the memory at which the processor optionally references data from it is the maximum block concurrent memory reference size (or maximum block concurrent memory size) supported by the memory reference instruction received at box 305. It is determined whether or not a memory address boundary (ie, the address alignment size of the address specified by the memory reference instruction) is equal to or larger than the memory address boundary. The maximum memory reference size for an instruction is defined for all instructions in the instruction set architecture. The maximum block concurrent memory reference size may be the size of the memory reference of the instruction, or may correspond to the maximum block concurrent reference size defined for all instructions in the instruction set architecture. In some embodiments, the maximum block concurrent memory reference size can be the size of the memory reference of the instruction, or the maximum block concurrent memory reference size defined independently for each instruction in the instruction set architecture May correspond to

判断ボックス310において、メモリ・アドレス境界が最大ブロック同時メモリ参照サイズ未満であると判断されると、プロセッサは、判断ボックス320に進むのであるが、判断ボックス320については、さらに後述する。判断ボックス310において、メモリ・アドレス境界が最大ブロック同時メモリ参照サイズ以上であると判断されると、プロセッサは、ボックス315に進み、最大ブロック同時メモリ参照サイズのブロックずつ同時に、メモリにアクセスする。たとえば、メモリ参照サイズが32バイトであり、メモリ・アドレス境界が16バイトであるが、最大ブロック同時メモリ参照サイズが8バイトであるときには、プロセッサは、同時に8バイトずつ、メモリにアクセスする。   If it is determined in decision box 310 that the memory address boundary is less than the maximum block concurrent memory reference size, the processor proceeds to decision box 320, which will be further described below. If it is determined in decision box 310 that the memory address boundary is greater than or equal to the maximum block concurrent memory reference size, the processor proceeds to box 315 and simultaneously accesses the memory by blocks of the maximum block concurrent memory reference size. For example, if the memory reference size is 32 bytes and the memory address boundary is 16 bytes, but the maximum block simultaneous memory reference size is 8 bytes, the processor accesses the memory 8 bytes at a time.

判断ボックス320では、プロセッサが、要求されたメモリ・アドレスのアライメント・サイズが2のN乗(すなわち、2)であるかどうかを判断するのであるが、ここで、Nとは、2がメモリ参照サイズ以下になるような、最大の非負整数である。たとえば、メモリ参照サイズが36バイトであるときには、プロセッサは、判断ボックス320において、要求されたメモリ・アドレスが32バイト(2バイト)のアライメント・サイズを有するかどうかを判断する。要求されたメモリ・アドレス・アライメント・サイズが2のN乗であると判断すると、プロセッサは、ボックス325に進み、同時に2バイトずつ、メモリにアクセスする。たとえば、メモリ・アドレス・アライメント・サイズが32バイトであり、メモリ参照サイズが32バイトである場合には、プロセッサは、すべての32バイトにアクセスするために、同時に32バイトずつ、ブロック同時的にメモリにアクセスする。要求されたメモリ・アドレス・アライメント・サイズが2のN乗ではないと判断すると、プロセッサは、ボックス330に進む。上述のように、最大ブロック同時メモリ参照サイズは、1つまたは複数の命令に対して設定され得る。いくつかの実施形態では、Nは、メモリ参照サイズとは無関係に、2が最大ブロック同時メモリ参照サイズ以下になるような、最大の非負整数に設定される。たとえば、命令が、8バイトの最大ブロック同時メモリ参照サイズを提供することがあり得る。そのときには、メモリ参照サイズが2よりも大きい場合でも、Nは3に設定される。 At decision box 320, the processor determines whether the alignment size of the requested memory address is 2 N (ie, 2 N ), where N is 2 N. The largest non-negative integer that is less than or equal to the memory reference size. For example, when the memory reference size is 36 bytes, the processor determines at decision box 320 whether the requested memory address has an alignment size of 32 bytes ( 25 bytes). Upon determining that the requested memory address alignment size is 2 N, the processor proceeds to box 325 and simultaneously accesses the memory 2 N bytes. For example, if the memory address alignment size is 32 bytes and the memory reference size is 32 bytes, the processor may access the 32 bytes at a time to access all 32 bytes at a time. To access. Upon determining that the requested memory address alignment size is not 2 N, the processor proceeds to box 330. As described above, the maximum block concurrent memory reference size may be set for one or more instructions. In some embodiments, N is set to the largest non-negative integer such that 2 N is less than or equal to the maximum block concurrent memory reference size, independent of the memory reference size. For example, an instruction may provide a maximum block concurrent memory reference size of 8 bytes. At that time, even if the memory reference size is larger than 2 3, N is set to 3.

判断ボックス330では、プロセッサが、要求されたメモリ・アドレス・アライメント・サイズが2の(N−1)乗(すなわち、2(N−1))であるかどうかを判断する。たとえば、メモリ参照サイズが32バイト(2バイト)であるときには、プロセッサは、ボックス330において、要求されたメモリ・アドレス・アライメント・サイズが16バイト(2バイト)であるかどうかを判断する。要求されたメモリ・アドレス・アライメント・サイズが2の(N−1)乗であると判断すると、プロセッサは、ボックス335に進み、同時に2(N−1)バイトずつ、メモリにアクセスする。たとえば、メモリ参照サイズが32バイト(2バイト)である場合には、プロセッサは、すべての32バイトにアクセスするために、一度に16バイト(2バイト)ずつ、ブロック同時的にアクセスする。 At decision box 330, the processor determines whether the requested memory address alignment size is 2 to the power of (N-1) (i.e., 2 (N-1) ). For example, when the memory reference size is 32 bytes (2 5 bytes), the processor, in box 330, the requested memory address alignment size to determine whether 16 bytes (2 4 bytes). If the processor determines that the requested memory address alignment size is 2 to the power of (N-1), the processor proceeds to box 335 and simultaneously accesses the memory by 2 (N-1) bytes. For example, if the memory reference size is 32 bytes (2 5 bytes), the processor, in order to access all 32 bytes, 16 bytes each (2 4 bytes) at a time, to simultaneously access block.

要求されたメモリ・アドレス・アライメント・サイズが2の(N−1)乗ではないと判断すると、プロセッサは、要求されたメモリ・アドレス・アライメント・サイズが2の1乗(すなわち、2バイト)であると判断ボックス340で判断されるまで、同様に、判断ボックス340まで進む。要求されたメモリ・アドレス・アライメント・サイズが2であると判断すると、プロセッサは、ボックス345に進み、同時に2バイトずつ、メモリにアクセスする。たとえば、メモリ参照サイズが32バイトである場合には、プロセッサは、すべての32バイトにアクセスするために、一度に2バイトずつ、ブロック同時的にアクセスする。判断ボックス340において、要求されたメモリ・アドレス・アライメント・サイズが2ではないと判断すると、プロセッサは、ボックス350に進み、一度に1バイトずつ、メモリにアクセスする。すなわち、プロセッサは、メモリ参照命令によって特定されたすべてのバイトにアクセスするために、一度に1バイトずつアクセスする。 If the requested memory address alignment size is 2 (N-1) squared is determined not to be the processor, the requested memory address alignment size first power of 2 (i.e., 2 byte) Similarly, the process proceeds to the determination box 340 until the determination is made in the determination box 340. Upon determining that the requested memory address alignment size is two, the processor proceeds to box 345 and accesses the memory two bytes at a time. For example, if the memory reference size is 32 bytes, the processor accesses blocks simultaneously, 2 bytes at a time, to access all 32 bytes. If, in decision box 340, the processor determines that the requested memory address alignment size is not two, the processor proceeds to box 350 and accesses the memory one byte at a time. That is, the processor accesses one byte at a time to access all bytes specified by the memory reference instruction.

ボックス320から350までにおいて、プロセッサは、要求されたメモリ・アドレス・アライメント・サイズがメモリ参照命令のメモリ参照サイズよりも小さいときには、要求されたメモリ・アドレス・アライメント・サイズにおけるブロック同時性をもってメモリにアクセスする、ということが認識されるべきである。すなわち、いくつかの実施形態では、メモリ参照命令を実行するプロセッサは、要求されたデータのブロックのアドレスがアラインされているどのような境界にもアクセスがブロック同時的である(すなわち、アクセスは、任意のアライメント・サイズにブロック同時的である)かのように、機能する。   In boxes 320 through 350, the processor enters the memory with block concurrency at the requested memory address alignment size when the requested memory address alignment size is smaller than the memory reference size of the memory reference instruction. Access should be recognized. That is, in some embodiments, the processor executing the memory reference instruction has block-concurrent access to any boundary where the address of the requested block of data is aligned (ie, the access is It works as if the block is simultaneous to any alignment size).

いくつかの実施形態では、メモリ参照命令のメモリ参照サイズは、たとえば、命令のオペコード(演算コード)によって示唆される。この理由は、命令のオペコードが、実行すべき演算だけでなく、参照されているデータのデータ型も指示するからである。あるいは、または、上述したことと関連して(Alternatively or conjunctively)、いくつかの実施形態では、メモリ参照命令は、たとえば命令のオペランドにおけるメモリ参照サイズを明示的に特定するように、定義され得る。たとえば、命令のオペランドは、フェッチまたはストアすべき最高のインデックスが付されたバイトを特定する。これにより、プログラマが、メモリ参照サイズを特定することが可能になる。いくつかの場合に、特定されたメモリ参照サイズが、2の累乗ではない(たとえば、10バイト)ことがあり得るし、オペコードによって示唆されたメモリ参照サイズと一致しないこともあり得る。   In some embodiments, the memory reference size of a memory reference instruction is indicated, for example, by the opcode (operation code) of the instruction. The reason for this is that the instruction opcode indicates not only the operation to be performed, but also the data type of the data being referenced. Alternatively, or in conjunction with the above (Alternatively or conjunctively), in some embodiments, a memory reference instruction may be defined, for example, to explicitly specify a memory reference size in an operand of the instruction. For example, the operand of the instruction specifies the highest indexed byte to fetch or store. This allows the programmer to specify the memory reference size. In some cases, the specified memory reference size may not be a power of two (eg, 10 bytes) or may not match the memory reference size suggested by the opcode.

本発明の実施形態は、特定されたメモリ参照サイズと要求されたメモリのアドレス境界とが同じでないときに、ブロック同時性を提供するシステムおよび方法を提供する。いくつかの実施形態では、メモリ参照サイズが、メモリ参照命令において特定されているときには、その命令を実行するプロセッサは、要求されたメモリのアドレスのアドレス境界と特定されたメモリ参照サイズとの最大公約数を、ブロック同時データ・アクセス・サイズとして用いる。たとえば、命令のオペランド・アドレスが4バイトの境界上にあり、特定されたメモリ参照サイズが10バイトである場合には、10と4との最大公約数は2であるから、データ・アクセスは、少なくとも2バイトについては、他のプロセッサと同時的であるように見える。これにより、スカラ・コードと同じように振る舞い、いかなるプログラミング言語のセマンティクスや規約にも違反しないデータ並列コードが許容される。   Embodiments of the present invention provide systems and methods that provide block concurrency when the specified memory reference size and the requested memory address boundary are not the same. In some embodiments, when the memory reference size is specified in a memory reference instruction, the processor executing the instruction may use the greatest common denominator between the address boundary of the address of the requested memory and the specified memory reference size. The number is used as the block concurrent data access size. For example, if the operand address of an instruction is on a 4-byte boundary and the specified memory reference size is 10 bytes, then the greatest common divisor between 10 and 4 is 2, so data access is: At least two bytes appear to be concurrent with other processors. This allows data parallel code that behaves like scalar code and does not violate any programming language semantics or conventions.

いくつかの実施形態では、ブロック同時性のブロック・サイズ(すなわち、たとえば2バイトの同時性、4バイトの同時性、16バイトの同時性、32バイトの同時性などの、ブロック同時性のレベル)が、アドレス・アライメント・サイズから直接導かれる。別の実施形態では、ブロック同時アクセスのブロック同時性サイズは、アドレス・アライメント・サイズと命令のメモリ参照サイズとの両方に基づく。いくつかのそのような実施形態では、ブロック同時アクセスのためのブロック・サイズは、アドレス・アライメントとメモリ参照のサイズとから直接導かれるブロック同時性のブロック・サイズの最小値である。さらに別の実施形態では、ブロック同時アクセスのためのブロック・サイズは、さらに図4に示されているように、アドレス・アライメント・サイズとメモリ参照サイズとの間で共通の2つのブロック・サイズの最大の累乗によって、決定される。   In some embodiments, the block size of block concurrency (ie, the level of block concurrency, eg, 2 byte concurrency, 4 byte concurrency, 16 byte concurrency, 32 byte concurrency, etc.) Is directly derived from the address alignment size. In another embodiment, the block concurrency size of the block simultaneous access is based on both the address alignment size and the memory reference size of the instruction. In some such embodiments, the block size for block concurrent access is the minimum block size of block concurrency directly derived from the address alignment and the size of the memory reference. In yet another embodiment, the block size for simultaneous block access is the two block sizes common between the address alignment size and the memory reference size, as further shown in FIG. Determined by the largest power.

図4は、ブロック同時アクセスのブロック・サイズがアドレス・アライメント・サイズとメモリ参照命令のメモリ参照サイズとの両方に基づくときに、メモリにアクセスするためのプロセス・フローを図示している。いくつかの実施形態では、ブロック同時アクセスの最大ブロック・サイズが、命令セット・アーキテクチャによってすべての命令に課せられるか、または、最大ブロック同時性サイズを有する特定の命令に課せられることがあり得る。いくつかのメモリ参照命令は、メモリ参照サイズを明示的に特定するのであるが、そのサイズが2の累乗ではない場合もある。しかし、いくつかの実装例では、2の累乗のブロック同時サイズだけが許容されることがあり得る。そのようないくつかの実施形態では、プロセッサ(たとえば、CPU)は、図4に示されたプロセス・フローを実行する。   FIG. 4 illustrates a process flow for accessing memory when the block size for simultaneous block access is based on both the address alignment size and the memory reference size of the memory reference instruction. In some embodiments, the maximum block size for concurrent block access may be imposed on all instructions by the instruction set architecture, or on a particular instruction having the maximum block concurrency size. Some memory reference instructions explicitly specify a memory reference size, which may not be a power of two. However, in some implementations, only a power-of-2 block concurrent size may be allowed. In some such embodiments, a processor (eg, a CPU) executes the process flows illustrated in FIG.

ボックス405では、プロセッサが、メモリの、あるアドレスにおけるデータのブロックを参照するメモリ参照命令を受け取る。このメモリ参照命令は、また、たとえば命令のオペランドにおいて、参照するデータのサイズを特定する。   At box 405, the processor receives a memory reference instruction that references a block of data at an address in memory. The memory reference instruction also specifies the size of the data to be referenced, for example, in the operand of the instruction.

判断ボックス410では、プロセッサが、オプションであるが、そこからのデータをプロセッサが参照するメモリが、ボックス405で受け取られたメモリ参照命令の最大ブロック同時メモリ参照サイズ以上のメモリ・アドレス・アライメント・サイズを有するかどうかを判断する。メモリ・アドレス・アライメント・サイズが最大ブロック同時メモリ参照サイズ未満であると判断されると、プロセッサは、判断ボックス420に進むのであるが、判断ボックス420については、さらに後述する。メモリ・アドレス・アライメント・サイズが上記特定されたメモリ参照サイズ以上であると判断されると、プロセッサは、ボックス415に進み、最大ブロック同時メモリ参照サイズのブロックずつ同時に、メモリにアクセスする。たとえば、特定されたメモリ参照サイズが8バイトであり、メモリ・アドレス・アライメント・サイズが8バイトであるが、最大ブロック同時アクセス・サイズが4バイトであるときには、プロセッサは、同時に4バイトずつ、メモリにアクセスする。   At decision box 410, the memory that the processor optionally refers to, but that the processor references data from, has a memory address alignment size greater than or equal to the maximum block concurrent memory reference size of the memory reference instruction received at box 405. Is determined. If it is determined that the memory address alignment size is less than the maximum block concurrent memory reference size, the processor proceeds to decision box 420, which is described further below. If it is determined that the memory address alignment size is greater than or equal to the specified memory reference size, the processor proceeds to box 415 and simultaneously accesses the memory by blocks of the maximum block concurrent memory reference size. For example, if the specified memory reference size is 8 bytes and the memory address alignment size is 8 bytes, but the maximum block simultaneous access size is 4 bytes, then the processor will allocate 4 bytes of memory at a time. To access.

判断ボックス420では、プロセッサが、要求されたメモリ・アドレス・アライメント・サイズが2のN乗(すなわち、2)であるかどうかを判断するのであるが、ここで、Nとは、2が特定されたメモリ参照サイズ以下になるような、最大の非負整数である。たとえば、特定されたメモリ参照サイズが10バイトであるときには、プロセッサは、ボックス420において、要求されたメモリ・アドレスが8バイト(2バイト)にアラインされているかどうかを判断する。判断ボックス420において、要求されたメモリ・アドレス・アライメント・サイズが2のN乗ではないと判断すると、プロセッサは、判断ボックス435に進むが、判断ボックス435については、さらに後述する。 At decision box 420, the processor determines whether the requested memory address alignment size is 2 N (ie, 2 N ), where N is 2 N. The largest non-negative integer that is less than or equal to the specified memory reference size. For example, when the memory reference size specified is 10 bytes, the processor in box 420, the requested memory address to determine whether it is aligned to 8 bytes (23 bytes). If, at decision box 420, the processor determines that the requested memory address alignment size is not a power of 2 N, the processor proceeds to decision box 435, which is described further below.

判断ボックス420において、要求されたメモリ・アドレス・アライメント・サイズが2のN乗であると判断すると、プロセッサは、判断ボックス425に進み、特定されたメモリ参照サイズが2のN乗の倍数であるかどうかを判断する。たとえば、特定されたメモリ参照サイズが10バイトであるときには、プロセッサは、判断ボックス425において、特定されたメモリ参照サイズである10バイトが8バイトの倍数であるかどうかを判断する。特定されたメモリ参照サイズが2のN乗の倍数でない場合には、プロセッサは、判断ボックス440に進むが、判断ボックス440については、さらに後述する。特定されたメモリ参照サイズが2のN乗の倍数である場合には、プロセッサは、ボックス430に進み、同時に2バイトずつメモリにアクセスする。 If, at decision box 420, the processor determines that the requested memory address alignment size is 2 N, the processor proceeds to decision box 425 and the identified memory reference size is a multiple of 2 N. Determine whether or not. For example, when the specified memory reference size is 10 bytes, the processor determines at decision box 425 whether the specified memory reference size of 10 bytes is a multiple of 8 bytes. If the specified memory reference size is not a multiple of 2 N, the processor proceeds to decision box 440, which is described further below. If the specified memory reference size is a multiple of 2 N, the processor proceeds to box 430 and simultaneously accesses the memory 2 N bytes.

判断ボックス435では、プロセッサが、要求されたメモリ・アドレス・アライメント・サイズが2の(N−1)乗(すなわち、2(N−1))であるかどうかを判断する。たとえば、メモリ参照サイズが10バイトであるときには、プロセッサは、判断ボックス435において、要求されたメモリ・アドレス・アライメント・サイズが4バイト(2バイト)であるかどうかを判断する。要求されたメモリ・アドレス・アライメント・サイズが2の(N−1)乗ではないと判断すると、プロセッサは、判断ボックス450に向かって進むが、判断ボックス450についてはさらに後述する。 At decision box 435, the processor determines whether the requested memory address alignment size is 2 to the power of (N-1) (i.e., 2 (N-1) ). For example, when the memory reference size is 10 bytes, the processor, at decision box 435, the requested memory address alignment size to determine whether the 4 bytes (2 2 bytes). If the processor determines that the requested memory address alignment size is not a power of two (N-1), the processor proceeds to decision box 450, which is described further below.

判断ボックス435において、要求されたメモリ・アドレス・アライメント・サイズが2の(N−1)乗であると判断すると、プロセッサは、判断ボックス440に進み、特定されたメモリ参照サイズが2の(N−1)乗の倍数であるかどうかを判断する。たとえば、特定されたメモリ参照サイズが10バイトであるときには、プロセッサは、判断ボックス440において、特定されたメモリ参照サイズである10バイトが4バイト(2バイト)の倍数であるかどうかを判断する。特定されたメモリ参照サイズが2の(N−1)乗の倍数でない場合には、プロセッサは、判断ボックス455に向かって進むのであるが、判断ボックス455については、さらに後述する。特定されたメモリ参照サイズが2の(N−1)乗の倍数である場合には、プロセッサはボックス445に進み、同時に2(N−1)バイトずつ、メモリにアクセスする。 If, at decision box 435, the processor determines that the requested memory address alignment size is a power of two (N-1), the processor proceeds to decision box 440 and determines that the specified memory reference size is two (N). -1) It is determined whether or not it is a multiple of the power. For example, when the memory reference size specified is 10 bytes, the processor, at decision box 440, the 10 bytes is a memory reference size specified to determine whether a multiple of 4 bytes (2 2 bytes) . If the specified memory reference size is not a multiple of 2 (N-1), the processor proceeds to decision box 455, which is described further below. If the determined memory reference size is a multiple of 2 (N-1) , the processor proceeds to box 445 and simultaneously accesses the memory 2 (N-1) bytes.

判断ボックス435において、要求されたメモリ・アドレス・アライメント・サイズが2の(N−1)乗の倍数ではないと判断すると、プロセッサは、要求されたメモリ・アドレスアライメント・サイズが2の1乗(2)であると判断ボックス450で判断されるまで、同様に、判断ボックス450まで進む。判断ボックス450において、要求されたメモリ・アドレス・アライメント・サイズが2ではないと判断すると、プロセッサは、ボックス465において、一度に1バイトずつ、メモリにアクセスする。すなわち、プロセッサは、メモリ参照命令によって特定されたすべてのバイトにアクセスするために、一度に1バイトずつ、アクセスする。 If at decision box 435, the processor determines that the requested memory address alignment size is not a multiple of 2 (N-1), the processor determines that the requested memory address alignment size is 2 to the power of 2 ( until it judged by 2 1) decision box 450 to be likewise advanced to decision box 450. If, at decision box 450, the requested memory address alignment size is not two, the processor accesses the memory, one byte at a time, at box 465. That is, the processor accesses one byte at a time to access all bytes specified by the memory reference instruction.

判断ボックス450において、要求されたメモリ・アドレス・アライメント・サイズが2であると判断すると、プロセッサは、判断ボックス455に進み、特定されたメモリ参照サイズが2バイトの倍数であるかどうかを判断する。特定されたメモリ参照サイズが2の倍数ではない場合には、プロセッサは、ボックス465に進み、一度に1バイトずつメモリにアクセスする。特定されたメモリ参照サイズが2の倍数である場合には、プロセッサはボックス460に進み、同時に2バイトずつ、メモリにアクセスする。たとえば、プロセッサは、メモリ参照サイズが10バイトである場合には、すべての10バイトにアクセスするために、一度に2バイトずつ、メモリにアクセスする。   If, at decision box 450, the processor determines that the requested memory address alignment size is two, the processor proceeds to decision box 455 and determines whether the specified memory reference size is a multiple of two bytes. . If the specified memory reference size is not a multiple of two, the processor proceeds to box 465 and accesses the memory one byte at a time. If the specified memory reference size is a multiple of two, the processor proceeds to box 460 and accesses the memory two bytes at a time. For example, if the memory reference size is 10 bytes, the processor accesses the memory 2 bytes at a time to access all 10 bytes.

ボックス420から465までにおいて、プロセッサは、要求されたメモリ・アドレス・アライメント・サイズと特定されたメモリ参照サイズとの最大公約数をバイト数として識別し、その最大公約数のブロック同時性をもって、メモリにアクセスする、ということが認識されるべきである。たとえば、特定されたメモリ参照サイズが10バイトであり、要求されたメモリ・アドレス・アライメント・サイズが4バイトであるときには、プロセッサは、最大公約数である2バイトを識別し、同時に2バイトずつメモリにアクセスする(すなわち、ブロック同時的に一度に2バイトずつアクセスすることによって、すべての10バイトにアクセスする)。   In boxes 420 through 465, the processor identifies the greatest common divisor of the requested memory address alignment size and the specified memory reference size as a number of bytes, and with the greatest common divisor block concurrency, Should be recognized. For example, if the specified memory reference size is 10 bytes and the requested memory address alignment size is 4 bytes, the processor identifies the greatest common divisor, 2 bytes, and simultaneously allocates 2 bytes of memory at a time. (Ie, accessing all 10 bytes by accessing the block 2 bytes at a time at the same time).

いくつかの実施形態では、最大ブロック同時性サイズは、1つまたは複数の命令に対して設定され得る。たとえば、ある命令が、8バイトの最大ブロック同時性サイズを提供することがあり得る。そのときには、特定されたメモリ参照サイズが2より大きい場合であっても、判断ボックス420において、Nは3に設定される。いくつかの実施形態では、最大ブロック同時性サイズは、すべての命令に適用される。他の実施形態では、それぞれの命令が、別個の最大ブロック同時性サイズを有することも可能である。 In some embodiments, the maximum block concurrency size may be set for one or more instructions. For example, an instruction may provide a maximum block concurrency size of 8 bytes. At that time, even if the memory reference size specified is greater than 2 3, at decision box 420, N is set to 3. In some embodiments, the maximum block concurrency size applies to all instructions. In other embodiments, each instruction may have a distinct maximum block concurrency size.

図5は、本発明のいくつかの実施形態による、メモリにおけるデータにアクセスするためのシステム500を図解している。特に、この図は、それ以外のコンポーネントは図解および記述の単純化のために図示されていないのであるが、システム500がメモリ505と複数のプロセッサ510および515とを含むことを図解している。メモリ505と、プロセッサ510および515とは、1つまたは複数のバス520を経由して、相互に結合されている。プロセッサ510および515は、それぞれ、レジスタ525および530を有するように示されているが、プロセッサの内部の他のコンポーネント(たとえば、算術論理装置、制御装置、クロック、内部バスなど)は、図解および記述の単純化のために図示されていない。   FIG. 5 illustrates a system 500 for accessing data in a memory, according to some embodiments of the present invention. In particular, this diagram illustrates that system 500 includes memory 505 and multiple processors 510 and 515, although other components are not shown for simplicity of illustration and description. The memory 505 and the processors 510 and 515 are interconnected via one or more buses 520. Processors 510 and 515 are shown as having registers 525 and 530, respectively, but other components internal to the processor (eg, arithmetic logic units, controllers, clocks, internal buses, etc.) are illustrated and described. Not shown for simplicity.

いくつかの実施形態では、システム500は、様々な並列処理環境を表す。たとえば、プロセッサ510および515のうちの1つが、ベクトル化された命令を実行するベクトル・プロセッサである場合がある。それ以外のプロセッサのうちの1つが、スカラ命令を実行するスカラ・プロセッサである場合がある。ベクトル・プロセッサとスカラ・プロセッサとは、メモリ505を共用し得る。別の例として、システム500が、マルチコア・プロセッサを表し得るが、その場合、プロセッサ510および515は、メモリ505を共用する異なるコアである。さらに別の例としては、システム500が、並列処理を行うプロセッサ510および515を有するメインフレーム・コンピュータ・システムを表す場合もある。   In some embodiments, system 500 represents various parallel processing environments. For example, one of processors 510 and 515 may be a vector processor that executes vectorized instructions. One of the other processors may be a scalar processor executing scalar instructions. The vector processor and the scalar processor may share the memory 505. As another example, system 500 may represent a multi-core processor, where processors 510 and 515 are different cores sharing memory 505. As yet another example, system 500 may represent a mainframe computer system having processors 510 and 515 performing parallel processing.

当技術分野で知られているように、プロセッサまたは(8086およびx86ファミリ、もしくはIBMのシステムzサーバ・ファミリなどの)プロセッサ・ファミリは、それ自体のマシン命令のセットを有する。たとえば、IBMのシステムzサーバ・ファミリの命令セットは、z/アーキテクチャ命令セットとして知られているが、上記に組み入れられたz/Architecture Principles of Operationで定められており、パワー・サーバの命令セットは、パワーISA(命令セットアーキテクチャ)として知られているが、上記に組み入れられたPower ISAで定められている。マシン命令は、マシンへの異なるコマンドに対応するように設計されたビットのパターンである。ほとんどの場合、命令セットは、同じアーキテクチャを用いるプロセッサのクラスに特有である。ほとんどの命令は、基本的な命令タイプ(算術、メモリ参照、分岐など)と実際の動作(ロード、ストア、加算、または比較など)とを特定する1つまたは複数のオペコードと、オペランドのタイプ、アドレス指定モード、アドレス指定オフセットもしくはインデックス、または実際の値自体を与え得る他のフィールドと、を有する。すなわち、各マシン命令は、レジスタまたはメモリにおけるデータ・ユニットに対し、ロード、分岐、または算術論理装置(ALU)演算など、非常に特定的なタスクを実行するためのものである。これらのマシン命令のうちのいくつかは、メモリ参照命令であって、このメモリ参照命令は、メモリ505の特定のアドレスにおけるデータを参照し、そのデータを、メモリ505からレジスタにフェッチし、もしくは、レジスタからメモリ505に記憶する。   As is known in the art, processors or processor families (such as the 8086 and x86 families, or the IBM System z Server family) have their own set of machine instructions. For example, the instruction set of the IBM System z server family, known as the z / architecture instruction set, is defined by the z / Architecture Principles of Operation incorporated above, and the power server instruction set is , Known as the Power ISA (Instruction Set Architecture), defined by the Power ISA incorporated above. Machine instructions are patterns of bits designed to respond to different commands to the machine. In most cases, instruction sets are specific to a class of processors using the same architecture. Most instructions have one or more opcodes that identify the basic instruction type (arithmetic, memory reference, branch, etc.) and the actual operation (load, store, add, or compare, etc.), the type of operand, Addressing mode, addressing offset or index, or other fields that can provide the actual value itself. That is, each machine instruction is for performing a very specific task, such as a load, branch, or arithmetic and logic unit (ALU) operation, on a data unit in a register or memory. Some of these machine instructions are memory reference instructions, which reference data at a particular address in memory 505 and fetch that data from memory 505 to a register, or The data is stored in the memory 505 from the register.

プロセッサ510および515は、メモリ505内部のデータのブロックのアドレスがそのメモリ参照命令のためのメモリ参照サイズと整数的でない場合であってもブロックの同時性を提供するメモリ参照命令を実行するように、構成され得る。すなわち、いくつかの実施形態では、プロセッサ510および515に対するメモリ参照命令は、参照されているデータのブロックがアラインされているどの境界に対しても命令がブロック同時的であるかのように、機能する。いくつかの実施形態では、8バイトの同時性の最大値が存在する。いくつかの実施形態では、プロセッサは、メモリ・アドレス・アライメント・サイズと特定されたメモリ参照サイズとの最大公約数を、バイト数として識別し、その最大公約数におけるブロック同時性でメモリ505にアクセスする。このようにして、プロセッサ510および515を含むコンピュータの機能が改善され得る。   Processors 510 and 515 execute memory reference instructions that provide block concurrency even when the address of a block of data within memory 505 is not integral with the memory reference size for that memory reference instruction. , Can be configured. That is, in some embodiments, the memory reference instructions to the processors 510 and 515 function as if the instructions were block-concurrent on any boundary where the block of data being referenced is aligned. I do. In some embodiments, there is a maximum of 8 bytes of concurrency. In some embodiments, the processor identifies the greatest common divisor of the memory address alignment size and the specified memory reference size as a number of bytes and accesses memory 505 with block concurrency at the greatest common divisor. I do. In this manner, the functionality of a computer including processors 510 and 515 may be improved.

異なる実施形態では、プロセッサ510および515は、異なるように構成される。たとえば、いくつかの実施形態では、プロセッサ510および515は、命令を実行しているときには本発明の様々な実施形態に従ってメモリ505にアクセスするように、既存の従来型のメモリ参照命令に新たな定義を提供することによって、構成され得る。あるいは、または、上述したことと関連して、プロセッサ510および515は、本発明の様々な実施形態に従ってメモリ505にアクセスする新たなメモリ参照命令を定義することにより、構成され得る。   In different embodiments, processors 510 and 515 are configured differently. For example, in some embodiments, processors 510 and 515 may add new definitions to existing conventional memory reference instructions to access memory 505 in accordance with various embodiments of the present invention when executing instructions. By providing Alternatively, or in conjunction with the above, processors 510 and 515 may be configured by defining a new memory reference instruction that accesses memory 505 in accordance with various embodiments of the present invention.

たとえば、メモリ参照命令は、ベクトル・ロード命令を含み、このベクトル・ロード命令は、多くの場合、16バイトのアライメント要求を有する。すなわち、16バイトのアライメント要求を有するベクトル・ロード命令は、16バイトのデータのブロックのうちの16ブロック全部を、メモリから、1単位としてロードすると期待される。マルチスレッド化コードがコンパイラによって、たとえばデータ並列実行を可能にするためにベクトル化される場合、ある変数が第1のCPUによって更新され、第2のCPUによって読み出される場合には、第2のCPUは、混合された結果ではなく、その変数への変化全体を見ると想定される。従来型のベクトル・ロード命令の定義では、ブロック同時性を保証することは不可能である。したがって、スレッド並列性を用いるときも、より高い程度のデータ並列性を用いることが困難であることが多い。これが、潜在的なソフトウェアの性能を制限し、ハードウェアが十分に利用されない状態を生じさせる。   For example, memory reference instructions include a vector load instruction, which often has a 16 byte alignment requirement. That is, a vector load instruction having a 16-byte alignment requirement is expected to load all 16 of the 16-byte blocks of data from memory as one unit. If the multi-threaded code is vectorized by a compiler, for example, to allow data parallel execution, certain variables are updated by a first CPU and read by a second CPU. Is assumed to look at the overall change to that variable, not the mixed result. With the definition of a conventional vector load instruction, it is impossible to guarantee block concurrency. Therefore, it is often difficult to use a higher degree of data parallelism when using thread parallelism. This limits the performance of potential software and creates a condition where hardware is underutilized.

本発明の様々な実施形態に従ってメモリにアクセスするようにプロセッサを構成することにより、プロセッサは、スレッド並列性を用いるときに、外部的なシリアライズ(たとえば、ロック)を要求することなく、より程度の高いデータ並列性を用いることができる。本発明の実施形態に従って構成されたプロセッサは、また、ソフトウェア性能も改善させ、ハードウェアの利用を容易にする。本発明の実施形態によると、より小さいデータ型がベクトルの中にパックされることが可能になり、他のプロセッサには、スカラ命令が用いられているかのように、同じセマンティクスで動作しているように見える。さらに、ブロック同時性により、余分なアライメント制限が回避され、アラインされ得ないデータの部分を処理するための余分なコードの必要性が回避されるために、コンパイラによる、コードの、より容易な自動並列化が可能になる。   By configuring the processor to access memory in accordance with various embodiments of the present invention, the processor can use thread parallelism to require a lesser degree of external serialization (e.g., locks). High data parallelism can be used. Processors configured in accordance with embodiments of the present invention also improve software performance and facilitate hardware utilization. Embodiments of the present invention allow smaller data types to be packed into vectors, and other processors operate with the same semantics as if scalar instructions were used. looks like. Further, the block concurrency avoids extra alignment restrictions and allows the compiler to more easily automate the code because it avoids the need for extra code to handle portions of the data that cannot be aligned. Parallelization becomes possible.

本発明のいくつかの実施形態では、プロセッサに結合されたメモリにおけるデータにアクセスするための方法が提供される。この方法は、メモリ中のあるアドレスにおける第1のサイズのデータにアクセスするためのメモリ参照命令を受け取る。この方法は、上記アドレスのアライメント・サイズを決定する。この方法は、ブロック同時的にデータの各グループにアクセスすることにより、データの1以上のグループ単位で第1のサイズのデータにアクセスする。データの上記グループは、アライメント・サイズの倍数であるサイズを有する。この方法は、バイナリ表現でのアドレスにおける後置ゼロの個数を数えることにより、アライメント・サイズを決定する。データの各グループは、バイト数において、予め定義された最大ブロック同時性サイズよりも大きくない。いくつかの実施形態では、第1のサイズは、決定されたアライメント・サイズよりも大きい。いくつかの実施形態では、第1のサイズと決定されたアライメント・サイズとはバイト数としてのサイズであり、第1のサイズは2であり、決定されたアライメント・サイズは2であり、Aは、非負整数であるBよりも大きい整数である。いくつかの実施形態では、この方法は、メモリ参照命令のオペコードに基づき、第1のサイズを決定する。いくつかの実施形態では、プロセッサはベクトル・プロセッサを含み、メモリ参照命令はベクトル命令を含む。 In some embodiments of the present invention, a method is provided for accessing data in a memory coupled to a processor. The method receives a memory reference instruction for accessing data of a first size at an address in memory. The method determines the alignment size of the address. The method accesses data of a first size in units of one or more groups of data by accessing each group of data simultaneously in blocks. The group of data has a size that is a multiple of the alignment size. This method determines the alignment size by counting the number of trailing zeros in the address in binary representation. Each group of data is no larger in bytes than a predefined maximum block concurrency size. In some embodiments, the first size is larger than the determined alignment size. In some embodiments, the first size and the determined alignment size is the size of a number of bytes, the first size is 2 A, determined alignment size is 2 B, A is an integer greater than B, which is a non-negative integer. In some embodiments, the method determines the first size based on an opcode of the memory reference instruction. In some embodiments, the processor includes a vector processor and the memory reference instructions include vector instructions.

本発明のいくつかの実施形態では、プロセッサに結合されたメモリにおけるデータにアクセスするための方法が提供される。この方法は、メモリ中のあるアドレスにおける第1のサイズのデータにアクセスするためのメモリ参照命令を受け取る。メモリ参照命令が、第1のサイズを特定する。この方法は、上記アドレスのアライメント・サイズを決定する。この方法は、上記第1のサイズと決定された上記アライメント・サイズとの最大公約数を決定する。この方法は、データの1以上のグループ単位で上記第1のサイズのデータにアクセスする。データの上記グループは、最大公約数のサイズの倍数であるサイズを有する。いくつかの実施形態では、第1のサイズは決定されたアライメント・サイズよりも大きい。いくつかの実施形態では、第1のサイズと決定されたアライメント・サイズとはバイト数としてのサイズであり、第1のサイズは2の累乗のサイズではなく、決定されたアライメント・サイズは2の累乗のサイズである。いくつかの実施形態では、この方法は、メモリ参照命令のオペランドに基づき、第1のサイズを決定する。いくつかの実施形態では、プロセッサはベクトル・プロセッサを含み、メモリ参照命令はベクトル命令を含む。   In some embodiments of the present invention, a method is provided for accessing data in a memory coupled to a processor. The method receives a memory reference instruction for accessing data of a first size at an address in memory. A memory reference instruction specifies a first size. The method determines the alignment size of the address. The method determines a greatest common divisor of the first size and the determined alignment size. The method accesses data of the first size in units of one or more groups of data. The group of data has a size that is a multiple of the size of the greatest common divisor. In some embodiments, the first size is larger than the determined alignment size. In some embodiments, the first size and the determined alignment size are sizes in bytes, and the first size is not a power of two size and the determined alignment size is two. The size of the power. In some embodiments, the method determines the first size based on an operand of the memory reference instruction. In some embodiments, the processor comprises a vector processor and the memory reference instructions comprise vector instructions.

本発明は、システム、方法、またはコンピュータ・プログラム製品あるいはこれらの組合せであり得る。コンピュータ・プログラム製品は、プロセッサに本発明の諸態様を実行させるためのコンピュータ可読プログラム命令を有する(1つまたは複数の)コンピュータ可読ストレージ媒体を含み得る。   The invention can be a system, method, or computer program product or a combination thereof. The computer program product may include computer readable storage medium (s) having computer readable program instructions for causing a processor to perform aspects of the present invention.

コンピュータ可読ストレージ媒体とは、有体物であって命令実行デバイスによって用いられる命令を保持および記憶することが可能なデバイスであり得る。コンピュータ可読ストレージ媒体は、たとえば、これらに限定されることはないが、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁気ストレージ・デバイス、半導体ストレージ・デバイス、または以上のいずれかの適切な組合せであり得る。コンピュータ可読ストレージ媒体の、より特定的な例の非網羅的なリストは、ポータブルなコンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、リード・オンリ・メモリ(ROM)、消去可能でプログラム可能なリード・オンリ・メモリ(EPROMまたはフラッシュ・メモリ)、静的なランダム・アクセス・メモリ(SRAM)、ポータブルなコンパクト・ディスク・リード・オンリ・メモリ(CD−ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリ・スティック、フロッピー(R)・ディスク(R)、パンチ・カードまたは命令が記録されている溝を有する隆起構造などの機械的に符号化されたデバイス、および以上のいずれかの適切な組合せを含む。本明細書で用いられているコンピュータ可読ストレージ媒体とは、無線波もしくはそれ以外の自由に伝搬する電磁波、導波管もしくはそれ以外の伝送媒体を通過して伝搬する電磁波(たとえば、光ファイバ・ケーブルを通過する光パルス)、またはワイヤを通過して伝送される電気信号などのような一時的な信号自体としては、解釈されるべきでない。   A computer-readable storage medium may be any tangible device capable of holding and storing instructions used by an instruction execution device. The computer-readable storage medium may be, for example, but not limited to, an electronic storage device, a magnetic storage device, an optical storage device, an electromagnetic storage device, a semiconductor storage device, or any suitable one of the foregoing. Can be any combination. A non-exhaustive list of more specific examples of computer readable storage media includes portable computer diskettes, hard disks, random access memory (RAM), read only memory (ROM), Programmable read-only memory (EPROM or flash memory), static random access memory (SRAM), portable compact disk read-only memory (CD-ROM), digital versatile disk A mechanically encoded device such as a (DVD), a memory stick, a floppy disk, a punched card or a raised structure having grooves in which instructions are recorded, and any of the above. Including appropriate combinations. As used herein, a computer readable storage medium is a radio wave or other freely propagating electromagnetic wave, an electromagnetic wave propagating through a waveguide or other transmission medium (eg, fiber optic cable It should not be interpreted as a transient signal itself, such as an optical pulse passing through a wire) or an electrical signal transmitted through a wire.

本明細書で説明されているコンピュータ可読プログラム命令は、それぞれのコンピューティング/処理デバイスに、コンピュータ可読ストレージ媒体からダウンロードされ得るし、または、外部コンピュータもしくは外部ストレージ媒体に、たとえば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、またはワイヤレス・ネットワークあるいはこれらの組合せなどのネットワークを介して、ダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバあるいはこれらの組合せを備え得る。各コンピューティング/処理デバイスにおけるネットワーク・アダプタ・カードまたはネットワーク・インターフェースが、ネットワークからコンピュータ可読プログラム命令を受け取り、それぞれのコンピューティング/処理デバイスにおけるコンピュータ可読ストレージ媒体に記憶するために、そのコンピュータ可読プログラム命令を転送する。   The computer readable program instructions described herein may be downloaded from a computer readable storage medium to a respective computing / processing device, or may be stored on an external computer or storage medium, such as the Internet, a local area. Can be downloaded over a network such as a network, wide area network, or wireless network or a combination thereof. The network may comprise copper transmission cable, optical transmission fiber, wireless transmission, router, firewall, switch, gateway computer, or edge server or a combination thereof. A network adapter card or network interface at each computing / processing device receives the computer readable program instructions from the network and stores the computer readable program instructions on a computer readable storage medium at each computing / processing device. To transfer.

本発明の動作を実行させるためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、または1つもしくは複数のプログラミング言語のいずれかの組合せで書かれたソース・コードもしくはオブジェクト・コードのいずれかであり得るが、ここでプログラミング言語とは、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語、または、「C」プログラミング言語もしくは類似のプログラミング言語などの従来型の手続き型プログラミング言語を含む。コンピュータ可読プログラム命令は、全体的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンド・アロンのソフトウェア・パッケージとして、部分的にはユーザのコンピュータ上であり部分的にはリモート・コンピュータ上で、または全体的にリモート・コンピュータもしくはサーバ上で、実行され得る。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含むいずれかのタイプのネットワークを介してユーザのコンピュータに接続され得るし、または、この接続が、(たとえば、インターネット・サービス・プロバイダを用い、インターネットを通じて)外部コンピュータに対してなされることがあり得る。いくつかの実施形態では、たとえば、プログラム可能なロジック回路、フィールド・プログラム可能なゲート・アレイ(FPGA)、またはプログラム可能なロジック・アレイ(PLA)を含む電子回路が、本発明の諸態様を実行するために、コンピュータ可読プログラム命令の状態情報を用いて電子回路をカスタマイズすることによって、コンピュータ可読プログラム命令を実行し得る。   The computer readable program instructions for performing the operations of the present invention may be assembler instructions, instruction set architecture (ISA) instructions, machine instructions, machine dependent instructions, microcode, firmware instructions, state setting data, or one or more of the following. It can be either source code or object code written in any combination of programming languages, where programming language is an object-oriented programming language such as Smalltalk®, C ++, or “C Includes conventional procedural programming languages, such as programming languages or similar programming languages. The computer readable program instructions may be entirely on the user's computer, partially on the user's computer, as a stand-alone software package, partially on the user's computer, and partially on a remote computer. On or entirely on a remote computer or server. In the latter scenario, the remote computer can be connected to the user's computer via any type of network, including a local area network (LAN) or wide area network (WAN), or A connection may be made to an external computer (e.g., through an Internet using an Internet service provider). In some embodiments, for example, an electronic circuit including a programmable logic circuit, a field programmable gate array (FPGA), or a programmable logic array (PLA) implements aspects of the present invention. The computer readable program instructions may be executed by customizing the electronic circuit with the status information of the computer readable program instructions to do so.

本明細書では、本発明の諸態様が、本発明の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品の流れ図またはブロック図あるいはその両方を参照して、説明されている。流れ図またはブロック図あるいはその両方の各ブロックと、流れ図またはブロック図あるいはその両方におけるブロックの組合せとが、コンピュータ可読プログラム命令によって実装され得る、ということが理解されるであろう。   Aspects of the invention are described herein with reference to flowcharts and / or block diagrams of methods, apparatus (systems), and computer program products according to embodiments of the invention. It will be understood that each block of the flowchart or block diagram or both, and combinations of blocks in the flowchart or block diagram or both, can be implemented by computer readable program instructions.

これらのコンピュータ可読プログラム命令は、コンピュータまたはそれ以外のプログラム可能なデータ処理装置のプロセッサ経由で実行される命令が、流れ図またはブロック図あるいはその両方の1つまたは複数のブロックにおいて特定されている機能/作用を実装するための手段を生じさせるように、汎用コンピュータ、専用コンピュータ、またはそれ以外のプログラム可能なデータ処理装置のプロセッサに提供されて、マシンを作り出すものであってよい。また、これらのコンピュータ可読プログラム命令は、命令が記憶されているコンピュータ可読ストレージ媒体が、流れ図またはブロック図あるいはその両方の1つまたは複数のブロックにおいて特定されている機能/作用の諸態様を実装する命令を含む製品を構成するように、コンピュータ可読ストレージ媒体に記憶され、コンピュータ、プログラム可能なデータ処理装置、またはそれ以外のデバイスあるいはこれらの組合せに、特定の態様で機能するように指示するものであってもよい。   These computer readable program instructions may include instructions for executing instructions via a processor of a computer or other programmable data processing device in one or more blocks of a flowchart or block diagram or both. It may be provided to a processor of a general purpose computer, special purpose computer, or other programmable data processing device to create a machine so as to provide a means for implementing the action. The computer-readable program instructions also implement aspects of the functions / acts in which the computer-readable storage medium on which the instructions are stored is specified in one or more blocks in a flowchart and / or block diagrams. Instruct a computer, a programmable data processing device, or other device, or a combination thereof, stored in a computer readable storage medium to function in a particular manner, to constitute a product containing the instructions. There may be.

コンピュータ可読プログラム命令は、また、コンピュータ、他のプログラム可能な装置または他のデバイス上で実行する命令が、流れ図またはブロック図あるいはその両方の1つまたは複数のブロックにおいて特定されている機能/作用を実現させるように、コンピュータ実装プロセスを生じさせるために、コンピュータ、他のプログラム可能なデータ処理装置、または他のデバイスの上にロードされ、コンピュータ、他のプログラム可能な装置または他のデバイスの上で一連の動作ステップを実行させるものであってもよい。   Computer-readable program instructions also refer to functions / acts in which instructions that execute on a computer, other programmable device or other device, are specified in one or more blocks in a flowchart or block diagram, or both. As implemented, loaded on a computer, other programmable data processing device, or other device to cause a computer-implemented process to be executed on the computer, other programmable device, or other device. A series of operation steps may be executed.

図面における流れ図およびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を図解している。この点で、流れ図またはブロック図における各ブロックは、特定された(1つまたは複数の)論理機能を実装するための1つまたは複数の実行可能な命令を備えたモジュール、セグメント、または命令の一部を表し得る。いくつかの別の実施では、ブロックに記されている機能が、図面に記されている順序とは異なる順序で生じることがあり得る。たとえば、連続するように示されている2つのブロックが、関係する機能に応じて、実際には、実質的に同時に実行されることがあり得るし、または、それらのブロックが、逆の順序で実行されることもあり得る。ブロック図または流れ図あるいはその両方の各ブロックと、ブロック図または流れ図あるいはその両方におけるブロックの組合せとは、特定された機能もしくは作用を実行する、または、専用のハードウェアおよびコンピュータ命令の組合せを実行する専用のハードウェア・ベースのシステムによって、実装され得る。   The flow diagrams and block diagrams in the drawings illustrate the architecture, functionality, and operation of possible implementations of systems, methods, and computer program products according to various embodiments of the invention. In this regard, each block in the flowcharts or block diagrams represents a module, segment, or instruction with one or more executable instructions for implementing the identified logical function (s). Part. In some alternative implementations, the functions noted in the block may occur out of the order noted in the figures. For example, two blocks shown as being consecutive may, in fact, be executed substantially simultaneously, depending on the functions involved, or they may be performed in the reverse order. It could be performed. Each block in the block diagram and / or flowchart, and the combination of blocks in the block diagram and / or flowchart, performs the specified function or action, or performs a combination of dedicated hardware and computer instructions. It may be implemented by a dedicated hardware-based system.

本発明の様々な実施形態に関する説明が、例証する目的のために提示されてきたが、以上の説明は、網羅的であることや、開示されている実施形態に限定されることが、意図されたものではない。当業者にとっては、説明された実施形態の範囲および主旨から逸脱することなく、多くの変更および変形が明らかであろう。本明細書で用いられている用語は、実施形態の原理、実際的な応用、もしくは市場において見出される技術に対する技術的改善を最もよく説明するために、または、本明細書に開示されている実施形態を他の当業者が理解することを可能にするために、選択されたものである。   While descriptions of various embodiments of the invention have been presented for purposes of illustration, the description is intended to be exhaustive and limited to the disclosed embodiments. Not something. Many modifications and variations will be apparent to those skilled in the art without departing from the scope and spirit of the described embodiments. The terminology used herein is to best describe the principles of embodiments, practical applications, or technical improvements to the technology found in the marketplace, or the implementations disclosed herein. The form has been chosen to enable others skilled in the art to understand the form.

Claims (26)

プロセッサに結合されたメモリにおけるデータにアクセスするための方法であって、
メモリ参照命令によって特定される第1のサイズであって、前記メモリ中のあるアドレスにおける第1のサイズのデータにアクセスするためのメモリ参照命令を受け取るステップと、
前記プロセッサによって、前記アドレスのアライメント・サイズを該アドレスに基づき決定するステップと、
データの1以上のグループ単位で前記第1のサイズの前記データにアクセスするステップであって、データの前記グループは、前記アライメント・サイズの倍数である任意のサイズを有する、前記ステップと、を含む方法。
A method for accessing data in a memory coupled to a processor, the method comprising:
Receiving a memory reference instruction of a first size specified by the memory reference instruction for accessing data of a first size at an address in the memory;
Determining, by the processor, an alignment size of the address based on the address;
Accessing the data of the first size in units of one or more groups of data, wherein the groups of data have any size that is a multiple of the alignment size. Method.
前記決定されたアライメント・サイズは前記第1のサイズよりも小さい、請求項1に記載の方法。 The method of claim 1, wherein the determined alignment size is smaller than the first size . 前記アライメント・サイズを決定する前記ステップは、バイナリ表現での前記アドレスにおける後置ゼロの個数をNとして、前記アライメント・サイズを2のN乗として決定するステップを含む、請求項1に記載の方法。   2. The method of claim 1, wherein determining the alignment size comprises determining the number of trailing zeros in the address in binary representation as N and the alignment size as 2 to the Nth power. . データの各グループは、予め定義された最大ブロック同時性サイズよりも大きくない、請求項1に記載の方法。   2. The method of claim 1, wherein each group of data is no larger than a predefined maximum block concurrency size. 前記メモリ参照命令のオペコードに基づき前記第1のサイズを決定するステップをさらに含む、請求項1に記載の方法。   The method of claim 1, further comprising determining the first size based on an opcode of the memory reference instruction. データにアクセスするためのシステムであって、
メモリと、
プロセッサと、を備え、前記プロセッサは、
メモリ参照命令によって特定される第1のサイズであって、前記メモリ中のあるアドレスにおける第1のサイズのデータにアクセスするためのメモリ参照命令を受け取るステップと、
前記アドレスのアライメント・サイズを該アドレスに基づき決定するステップと、
データの1以上のグループ単位で前記第1のサイズの前記データにアクセスするステップであって、データの前記グループは、前記アライメント・サイズの倍数である任意のサイズを有する、前記ステップと、
を含む方法を実行するように構成された、システム。
A system for accessing data,
Memory and
And a processor, wherein the processor comprises:
Receiving a memory reference instruction of a first size specified by the memory reference instruction for accessing data of a first size at an address in the memory;
Determining an alignment size of the address based on the address;
Accessing the data of the first size in units of one or more groups of data, wherein the groups of data have any size that is a multiple of the alignment size;
A system configured to perform the method comprising:
前記第1のサイズと前記決定されたアライメント・サイズとはバイト数としてのサイズであり、前記第1のサイズは2であり、前記決定されたアライメント・サイズは2であり、Bは、整数であるAよりも小さい非負整数である、請求項6に記載のシステム。 Wherein the first size and the determined alignment size is the size of a number of bytes, the first size is 2 A, alignment and size the determined is 2 B, B is 7. The system of claim 6 , wherein the non-negative integer is less than the integer A. 前記アライメント・サイズを決定する前記ステップは、バイナリ表現での前記アドレスにおける後置ゼロの個数をNとして、前記アライメント・サイズを2のN乗として決定するステップを含む、請求項6に記載のシステム。   7. The system of claim 6, wherein determining the alignment size comprises determining the number of trailing zeros in the address in binary representation as N and the alignment size as 2 to the Nth power. . データの各グループは、予め定義された最大ブロック同時性サイズよりも大きくない、請求項6に記載のシステム。   7. The system of claim 6, wherein each group of data is no larger than a predefined maximum block concurrency size. 前記プロセッサはベクトル・プロセッサを含み、前記メモリ参照命令はベクトル命令を含む、請求項6に記載のシステム。   The system of claim 6, wherein the processor comprises a vector processor and the memory reference instructions comprise vector instructions. データにアクセスするためのコンピュータ・プログラムであって、
プロセッサに、
メモリ参照命令によって特定される第1のサイズであって、メモリ中のあるアドレスにおける第1のサイズのデータにアクセスするためのメモリ参照命令を受け取るステップと、
前記アドレスのアライメント・サイズを該アドレスに基づき決定するステップと、
データの1以上のグループ単位で前記第1のサイズの前記データにアクセスするステップであって、データの前記グループは、前記アライメント・サイズの倍数である任意のサイズを有する、前記ステップと、
を含む方法を実行させる、コンピュータ・プログラム。
A computer program for accessing data,
To the processor,
Receiving a memory reference instruction of a first size specified by the memory reference instruction for accessing data of a first size at an address in memory;
Determining an alignment size of the address based on the address;
Accessing the data of the first size in units of one or more groups of data, wherein the groups of data have any size that is a multiple of the alignment size;
A computer program for performing a method comprising:
前記決定されたアライメント・サイズは前記第1のサイズよりも小さい、請求項11に記載のコンピュータ・プログラム。 The computer program according to claim 11, wherein the determined alignment size is smaller than the first size . 前記アライメント・サイズを決定する前記ステップは、バイナリ表現での前記アドレスにおける後置ゼロの個数をNとして、前記アライメント・サイズを2のN乗として決定するステップを含む、請求項11に記載のコンピュータ・プログラム。   12. The computer of claim 11, wherein determining the alignment size comprises determining the number of trailing zeros in the address in binary representation as N and the alignment size as 2 to the Nth power. ·program. データの各グループは、予め定義された最大ブロック同時性サイズよりも大きくない、請求項11に記載のコンピュータ・プログラム。   The computer program of claim 11, wherein each group of data is not greater than a predefined maximum block concurrency size. 前記方法が、前記メモリ参照命令のオペコードに基づき前記第1のサイズを決定するステップをさらに含む、請求項11に記載のコンピュータ・プログラム。   The computer program of claim 11, wherein the method further comprises determining the first size based on an opcode of the memory reference instruction. プロセッサに結合されたメモリにおけるデータにアクセスするための方法であって、
前記メモリ中のあるアドレスにおける第1のサイズのデータにアクセスするためのメモリ参照命令を受け取るステップであって、前記メモリ参照命令が前記第1のサイズを特定する、前記ステップと、
前記プロセッサによって、前記アドレスのアライメント・サイズを該アドレスに基づき決定するステップと、
前記第1のサイズと前記決定されたアライメント・サイズとの最大公約数を決定するステップと、
データの1以上のグループ単位で前記第1のサイズの前記データにアクセスするステップであって、データの前記グループは、前記最大公約数のサイズの倍数である任意のサイズを有する、前記ステップと、
を含む方法。
A method for accessing data in a memory coupled to a processor, the method comprising:
Receiving a memory reference instruction for accessing data of a first size at an address in the memory, wherein the memory reference instruction specifies the first size;
Determining, by the processor, an alignment size of the address based on the address;
Determining the greatest common divisor of the first size and the determined alignment size;
Accessing the data of the first size in units of one or more groups of data, wherein the groups of data have any size that is a multiple of the size of the greatest common divisor;
A method that includes
前記決定されたアライメント・サイズは前記第1のサイズよりも小さい、請求項16に記載の方法。 17. The method of claim 16, wherein the determined alignment size is smaller than the first size . 前記第1のサイズと前記決定されたアライメント・サイズとはバイト数としてのサイズであり、前記第1のサイズは2の累乗のサイズではなく、前記決定されたアライメント・サイズは2の累乗のサイズである、請求項16に記載の方法。   The first size and the determined alignment size are sizes in terms of number of bytes, and the first size is not a power of two size, but the determined alignment size is a power of two size. 17. The method of claim 16, wherein 前記メモリ参照命令のオペランドに基づき前記第1のサイズを決定するステップをさらに含む、請求項16に記載の方法。   17. The method of claim 16, further comprising determining the first size based on an operand of the memory reference instruction. 前記第1のサイズの前記データにアクセスする前記ステップは、前記最大公約数が予め定義された最大ブロック同時性サイズよりも大きくないときに実行される、請求項16に記載の方法。   17. The method of claim 16, wherein the step of accessing the data of the first size is performed when the greatest common divisor is not greater than a predefined maximum block concurrency size. データにアクセスするためのシステムであって、
メモリと、
プロセッサと、を備え、前記プロセッサは、
前記メモリ中のあるアドレスにおいて第1のサイズを有するデータ空間にアクセスするためのメモリ参照命令を受け取るステップであって、前記メモリ参照命令が、前記第1のサイズを特定する、前記ステップと、
前記アドレスのアライメント・サイズを該アドレスに基づき決定するステップと、
前記第1のサイズと前記決定されたアライメント・サイズとの最大公約数を決定するステップと、
データの1以上のグループ単位で前記第1のサイズの前記データにアクセスするステップであって、データの前記グループは、前記最大公約数のサイズの倍数である任意のサイズを有する、前記ステップと、
を含む方法を実行するように構成された、システム。
A system for accessing data,
Memory and
And a processor, wherein the processor comprises:
Receiving a memory reference instruction for accessing a data space having a first size at an address in the memory, wherein the memory reference instruction specifies the first size;
Determining an alignment size of the address based on the address;
Determining the greatest common divisor of the first size and the determined alignment size;
Accessing the data of the first size in units of one or more groups of data, wherein the groups of data have any size that is a multiple of the size of the greatest common divisor;
A system configured to perform the method comprising:
前記決定されたアライメント・サイズは前記第1のサイズよりも小さい、請求項21に記載のシステム。 22. The system of claim 21, wherein the determined alignment size is smaller than the first size . 前記第1のサイズと前記決定されたアライメント・サイズとはバイト数としてのサイズであり、前記第1のサイズは2の累乗のサイズではなく、前記決定されたアライメント・サイズは2の累乗のサイズである、請求項21に記載のシステム。   The first size and the determined alignment size are sizes in terms of number of bytes, and the first size is not a power of two size, but the determined alignment size is a power of two size. 22. The system of claim 21, wherein 前記方法が、前記メモリ参照命令のオペランドに基づき前記第1のサイズを決定するステップをさらに含む、請求項21に記載のシステム。   22. The system of claim 21, wherein the method further comprises determining the first size based on an operand of the memory reference instruction. 前記プロセッサはベクトル・プロセッサを含み、前記メモリ参照命令はベクトル命令を含む、請求項21に記載のシステム。   22. The system of claim 21, wherein said processor comprises a vector processor and said memory reference instructions comprise vector instructions. データにアクセスするためのコンピュータ・プログラムであって、
プロセッサに、
メモリ中のあるアドレスにおいて第1のサイズを有するデータ空間にアクセスするためのメモリ参照命令を受け取るステップであって、前記メモリ参照命令が、前記第1のサイズを特定する、前記ステップと、
前記アドレスのアライメント・サイズを該アドレスに基づき決定するステップと、
前記第1のサイズと前記決定されたアライメント・サイズとの最大公約数を決定するステップと、
データの1以上のグループ単位で前記第1のサイズの前記データにアクセスするステップであって、データの前記グループは、前記最大公約数のサイズの倍数である任意のサイズを有する、前記ステップと、
を含む方法を実行させる、コンピュータ・プログラム。
A computer program for accessing data,
To the processor,
Receiving a memory reference instruction for accessing a data space having a first size at an address in a memory, wherein the memory reference instruction specifies the first size;
Determining an alignment size of the address based on the address;
Determining the greatest common divisor of the first size and the determined alignment size;
Accessing the data of the first size in units of one or more groups of data, wherein the groups of data have any size that is a multiple of the size of the greatest common divisor;
A computer program for performing a method comprising:
JP2017526876A 2014-12-04 2015-10-30 Method, system, and computer program for accessing data in memory Active JP6664105B2 (en)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/560,486 US9582413B2 (en) 2014-12-04 2014-12-04 Alignment based block concurrency for accessing memory
US14/560,486 2014-12-04
PCT/EP2015/075231 WO2016087138A1 (en) 2014-12-04 2015-10-30 Method for accessing data in a memory at an unaligned address

Publications (2)

Publication Number Publication Date
JP2018501554A JP2018501554A (en) 2018-01-18
JP6664105B2 true JP6664105B2 (en) 2020-03-13

Family

ID=54366218

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017526876A Active JP6664105B2 (en) 2014-12-04 2015-10-30 Method, system, and computer program for accessing data in memory

Country Status (14)

Country Link
US (4) US9582413B2 (en)
EP (1) EP3227773B1 (en)
JP (1) JP6664105B2 (en)
KR (1) KR101976296B1 (en)
CN (1) CN107003957B (en)
AU (1) AU2015357677B2 (en)
BR (1) BR112017011910B1 (en)
CA (1) CA2961708C (en)
MX (1) MX391160B (en)
RU (1) RU2675509C1 (en)
SG (1) SG11201701609VA (en)
TW (1) TWI607307B (en)
WO (1) WO2016087138A1 (en)
ZA (1) ZA201704122B (en)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9582413B2 (en) 2014-12-04 2017-02-28 International Business Machines Corporation Alignment based block concurrency for accessing memory
US20190138308A1 (en) * 2017-09-15 2019-05-09 MIPS Tech, LLC Unaligned memory accesses
WO2020037542A1 (en) * 2018-08-22 2020-02-27 深圳市大疆创新科技有限公司 Data command processing method, storage chip, storage system and mobile platform
FR3093571B1 (en) * 2019-03-08 2021-03-19 Commissariat Energie Atomique METHOD AND DEVICE FOR REPRESENTATION IN A FLOATING POINT WITH VARIABLE ACCURACY
US11036506B1 (en) * 2019-12-11 2021-06-15 Motorola Solutions, Inc. Memory systems and methods for handling vector data
CN111338997B (en) * 2020-03-05 2021-07-20 苏州浪潮智能科技有限公司 A method, apparatus, device and medium for ARM server BIOS to support TCM communication

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5386531A (en) 1991-05-15 1995-01-31 International Business Machines Corporation Computer system accelerator for multi-word cross-boundary storage access
US6212601B1 (en) * 1996-08-30 2001-04-03 Texas Instruments Incorporated Microprocessor system with block move circuit disposed between cache circuits
US6425020B1 (en) * 1997-04-18 2002-07-23 Cirrus Logic, Inc. Systems and methods for passively transferring data across a selected single bus line independent of a control circuitry
US20100274988A1 (en) 2002-02-04 2010-10-28 Mimar Tibet Flexible vector modes of operation for SIMD processor
US6922658B2 (en) 2003-03-31 2005-07-26 International Business Machines Corporation Method and system for testing the validity of shared data in a multiprocessing system
US7917734B2 (en) 2003-06-30 2011-03-29 Intel Corporation Determining length of instruction with multiple byte escape code based on information from other than opcode byte
EP1508853A1 (en) * 2003-08-19 2005-02-23 STMicroelectronics Limited Computer system and method for loading non-aligned words
US7610466B2 (en) 2003-09-05 2009-10-27 Freescale Semiconductor, Inc. Data processing system using independent memory and register operand size specifiers and method thereof
TWI227440B (en) 2003-12-19 2005-02-01 Sunplus Technology Co Ltd Device and method using a processor to perform automatic alignment for data movement in memory
US7537286B2 (en) 2004-06-28 2009-05-26 Walker Brock M Seat with adjustable support system
US20060112226A1 (en) * 2004-11-19 2006-05-25 Hady Frank T Heterogeneous processors sharing a common cache
US7437537B2 (en) * 2005-02-17 2008-10-14 Qualcomm Incorporated Methods and apparatus for predicting unaligned memory access
RU2281546C1 (en) * 2005-06-09 2006-08-10 Бурцева Тамара Андреевна Method for processing information on basis of data stream and device for realization of said method
US20070106883A1 (en) 2005-11-07 2007-05-10 Choquette Jack H Efficient Streaming of Un-Aligned Load/Store Instructions that Save Unused Non-Aligned Data in a Scratch Register for the Next Instruction
US8099538B2 (en) 2006-03-29 2012-01-17 Intel Corporation Increasing functionality of a reader-writer lock
US8015385B2 (en) * 2007-06-05 2011-09-06 International Business Machines Corporation Arrangements for memory allocation
US7725659B2 (en) * 2007-09-05 2010-05-25 International Business Machines Corporation Alignment of cache fetch return data relative to a thread
CN101290589B (en) 2007-12-27 2010-06-16 华为技术有限公司 Method and device for operating concurrent instructions
US20090282198A1 (en) * 2008-05-08 2009-11-12 Texas Instruments Incorporated Systems and methods for optimizing buffer sharing between cache-incoherent cores
US8086801B2 (en) * 2009-04-08 2011-12-27 International Business Machines Corporation Loading data to vector renamed register from across multiple cache lines
JP5381624B2 (en) * 2009-11-04 2014-01-08 富士通株式会社 Program and apparatus having memory management function
US20110314263A1 (en) 2010-06-22 2011-12-22 International Business Machines Corporation Instructions for performing an operation on two operands and subsequently storing an original value of operand
CN103946795B (en) 2011-12-14 2018-05-15 英特尔公司 For generating the systems, devices and methods for circulating alignment and counting or circulating alignment mask
US9081503B2 (en) 2012-02-16 2015-07-14 Apple Inc. Methods and systems for maintaining a storage volume with holes and filling holes
US9459867B2 (en) * 2012-03-15 2016-10-04 International Business Machines Corporation Instruction to load data up to a specified memory boundary indicated by the instruction
US9454366B2 (en) 2012-03-15 2016-09-27 International Business Machines Corporation Copying character data having a termination character from one memory location to another
US9459868B2 (en) 2012-03-15 2016-10-04 International Business Machines Corporation Instruction to load data up to a dynamically determined memory boundary
US9582413B2 (en) 2014-12-04 2017-02-28 International Business Machines Corporation Alignment based block concurrency for accessing memory

Also Published As

Publication number Publication date
US9910769B2 (en) 2018-03-06
WO2016087138A1 (en) 2016-06-09
KR20170073688A (en) 2017-06-28
EP3227773B1 (en) 2020-05-20
SG11201701609VA (en) 2017-03-30
EP3227773A1 (en) 2017-10-11
AU2015357677B2 (en) 2018-11-08
CA2961708A1 (en) 2016-06-09
TW201621667A (en) 2016-06-16
CN107003957B (en) 2020-01-17
US10579514B2 (en) 2020-03-03
JP2018501554A (en) 2018-01-18
BR112017011910A2 (en) 2018-01-16
MX391160B (en) 2025-03-21
MX2017007060A (en) 2017-11-08
ZA201704122B (en) 2018-11-28
US9582413B2 (en) 2017-02-28
US20170123967A1 (en) 2017-05-04
US9904618B2 (en) 2018-02-27
US20180074950A1 (en) 2018-03-15
US20160162401A1 (en) 2016-06-09
BR112017011910B1 (en) 2023-04-04
KR101976296B1 (en) 2019-05-07
AU2015357677A1 (en) 2017-03-09
CA2961708C (en) 2023-09-26
US20160162400A1 (en) 2016-06-09
TWI607307B (en) 2017-12-01
RU2675509C1 (en) 2018-12-20
CN107003957A (en) 2017-08-01

Similar Documents

Publication Publication Date Title
CN109213522B (en) Remote atomic operation instructions
KR102449616B1 (en) Method and apparatus for performing reduction operations on a set of vector elements
JP6711480B2 (en) Method and apparatus for vector index loading and storing
JP6664105B2 (en) Method, system, and computer program for accessing data in memory
BR102014006231A2 (en) instruction processing equipment, method within a processor, instruction processing system and article of manufacture
BR102013032654A2 (en) instructions and logic for vectoring conditional loops
US10261790B2 (en) Memory copy instructions, processors, methods, and systems
JP6741006B2 (en) Method and apparatus for variably extending between mask and vector registers
BR112015030098B1 (en) Compressed data element predication processor methods, systems and instructions
JP6745021B2 (en) Method and apparatus for performing conflict detection
JP2018500652A (en) Method and apparatus for extending a mask to a vector of mask values
KR101624786B1 (en) Systems, apparatuses, and methods for determining a trailing least significant masking bit of a writemask register
BR102016012096A2 (en) HARDWARE APPARATUS TO IMPROVE PERFORMANCE OF STATE DEPENDENT COMPUTERS
EP3394725B1 (en) Adjoining data element pairwise swap processors, methods, systems, and instructions
JP2017538215A (en) Instructions and logic to perform reverse separation operation
KR101635856B1 (en) Systems, apparatuses, and methods for zeroing of bits in a data element
HK1237091A1 (en) Method for accessing data in a memory at an unaligned address
HK1237091B (en) Method for accessing data in a memory at an unaligned address

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170713

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180627

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20190226

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190305

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190603

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190806

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20191007

RD12 Notification of acceptance of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7432

Effective date: 20191016

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20191017

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20191211

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20200107

RD14 Notification of resignation of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7434

Effective date: 20200108

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20200131

R150 Certificate of patent or registration of utility model

Ref document number: 6664105

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150