[go: up one dir, main page]

JP2018501554A - メモリにおけるデータにアクセスするための方法、システム、およびコンピュータ・プログラム製品 - Google Patents

メモリにおけるデータにアクセスするための方法、システム、およびコンピュータ・プログラム製品 Download PDF

Info

Publication number
JP2018501554A
JP2018501554A JP2017526876A JP2017526876A JP2018501554A JP 2018501554 A JP2018501554 A JP 2018501554A JP 2017526876 A JP2017526876 A JP 2017526876A JP 2017526876 A JP2017526876 A JP 2017526876A JP 2018501554 A JP2018501554 A JP 2018501554A
Authority
JP
Japan
Prior art keywords
size
data
memory
address
processor
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.)
Granted
Application number
JP2017526876A
Other languages
English (en)
Other versions
JP6664105B2 (ja
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/ja
Application granted granted Critical
Publication of JP6664105B2 publication Critical patent/JP6664105B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • 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
    • 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
    • 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)

Abstract

【課題】メモリにおけるデータにアクセスするための方法、システム、およびコンピュータ・プログラムを提供する。【解決手段】プロセッサに結合されたメモリにおけるデータにアクセスするための方法であって、上記メモリ中のあるアドレスにおける第1のサイズのデータにアクセスするためのメモリ参照命令を受け取るステップと、上記メモリの上記アドレスのアライメント・サイズを決定するステップと、ブロック同時的にデータの各グループにアクセスすることにより、データの1以上のグループ単位で上記第1のサイズのデータにアクセスするステップとを含む方法である。上記データのグループは、アライメント・サイズの倍数であるサイズを有する。【選択図】図2

Description

本発明は、一般に、プロセッサによるメモリへのアクセスに関し、さらに詳しくは、メモリにおけるデータのブロックに、プロセッサによって、原子的に(atomically)すなわちブロック同時的(block concurrently)に、アクセスすることに関する。
スカラ・コードは、そのコードを実行する中央処理装置(CPU)が、ソフトウェア変数の全バイトに、全体としてアクセスすることを期待する。CPUのための典型的なアーキテクチャでは、アクセスされるデータのサイズの整数倍であるメモリの境界に対してアクセスが実行される場合に限り、スカラ・コードのためのそのような期待が満たされる。スカラ・コードがコンパイラによってベクトル化されるときには、ロードおよびストア命令は、ベクトルのロードおよびストア命令に変換されることが多い。しかし、ベクトルのロード命令とベクトルのストア命令とは、一貫性の保証を有しないことが多く、すなわち、ベクトルのロードまたはストア命令がCPUにおけるベクトル・レジスタのサイズである境界の上にある場合にだけ、一貫性が保証される。原子的でもブロック同時的でもないアクセスについては、あるCPUがデータを書き込み、それと同時に別のCPUがデータを読み出す場合に、データを読み出しつつあるCPUは、後者のCPUの変数を含むメモリ位置への部分的更新を見ることがあり得る。これは、ほとんどのプログラミング言語のセマンティクスとの、または、ロックフリーなデータ構造などのプログラミング技術との一貫性を有しない。
z/Architecture Principles ofOperation, SA22-7832-09 (10th ed. Sept. 2012) Power ISA (Version 2.06 RevisionB, Jul. 2010)
メモリにおけるデータにアクセスするための方法、システム、およびコンピュータ・プログラムを提供する。
実施形態は、メモリにおけるデータにアクセスするための方法、システム、およびコンピュータ・プログラム製品を含む。本発明のある実施形態によると、プロセッサに結合されたメモリにおけるデータにアクセスするための方法が提供される。この方法は、メモリ中のあるアドレスにおける第1のサイズのデータにアクセスするためのメモリ参照命令を受け取る。この方法は、上記アドレスのアライメント・サイズを決定する。この方法は、ブロック同時的にデータの各グループにアクセスすることにより、データの11以上のグループ単位で上記第1のサイズのデータにアクセスする。上記データのグループは、アライメント・サイズの倍数であるサイズを有する。
本発明の別の実施形態によると、データにアクセスするためのシステムが提供される。このシステムは、メモリと、ある方法を実行するように構成されたプロセッサとを備える。この方法は、メモリ中のあるアドレスにおける第1のサイズのデータにアクセスするためのメモリ参照命令を受け取る。この方法は、上記アドレスのアライメント・サイズを決定する。この方法は、ブロック同時的に、データの各グループにアクセスすることにより、データの1以上のグループ単位で第1のサイズのデータにアクセスする。上記データのグループは、上記アライメント・サイズの倍数であるサイズを有する。
本発明のさらなる実施形態によると、メモリにおけるデータにアクセスするためのコンピュータ・プログラム製品が提供される。このコンピュータ・プログラム製品は、マシン命令が具現化されているコンピュータ可読記憶媒体を備える。プロセッサによって読み出し可能であるこのマシン命令は、プロセッサに、ある方法を実行させる。この方法は、メモリ中のあるアドレスにおける第1のサイズのデータにアクセスするためのメモリ参照命令を受け取る。この方法は、上記アドレスのアライメント・サイズを決定する。この方法は、ブロック同時的に、データの各グループにアクセスすることにより、データの1以上のグループ単位で第1のサイズのデータにアクセスする。上記データのグループは、上記アライメント・サイズの倍数であるサイズを有する。
本発明のさらなる実施形態によると、データにアクセスするためのシステムが提供される。このシステムは、メモリと、ある方法を実行するように構成されたプロセッサとを備える。この方法は、メモリ中のあるアドレスにおける第1のサイズのデータにアクセスするためのメモリ参照命令を受け取る。このメモリ参照命令は、第1のサイズを特定する。この方法は、上記アドレスのアライメント・サイズを決定する。この方法は、第1のサイズと決定された上記アライメント・サイズとの最大公約数を決定する。この方法は、データの1以上のグループ単位で上記第1のサイズのデータにアクセスする。データのグループは、最大公約数のサイズの倍数であるサイズを有する。
本発明のさらなる実施形態によると、メモリにおけるデータにアクセスするためのコンピュータ・プログラム製品が提供される。このコンピュータ・プログラム製品は、マシン命令が具現化されているコンピュータ可読記憶媒体を備える。プロセッサによって読み出し可能であるこのマシン命令は、プロセッサに、ある方法を実行させる。この方法は、メモリ中のあるアドレスにおける第1のサイズのデータにアクセスするためのメモリ参照命令を受け取る。このメモリ参照命令は、上記第1のサイズを特定する。この方法は、上記アドレスのアライメント・サイズを決定する。この方法は、上記第1のサイズと決定された上記アライメント・サイズとの最大公約数を決定する。この方法は、データの1以上のグループ単位で上記第1のサイズのデータにアクセスする。データの上記グループは、最大公約数のサイズの倍数であるサイズを有する。
実施形態として見なされる主題は、本明細書の結論部分に置かれている特許請求の範囲において、特に指摘され、明確に特許請求されている。実施形態の以上のおよびそれ以外の特徴と効果とは、次の添付の図面と共に読まれるべき以下の詳細な説明から、明らかである。
本発明のいくつかの実施形態に従って自然にアラインされたブロックを有するメモリの一部の図解である。 本発明のいくつかの実施形態に従ってアクセスされたメモリの一部の図である。 本発明のいくつかの実施形態に従ってメモリにアクセスするためのプロセス・フロー図である。 本発明のいくつかの実施形態に従ってメモリにアクセスするためのプロセス・フロー図である。 本発明のいくつかの実施形態に従ってメモリにおけるデータにアクセスするシステムの図解である。
いくつかのプログラミング言語の規約は、メモリにおけるデータのブロック(たとえば、整数、フロート、ロング、ダブルなど、ネイティブな型の変数)の全バイトが、プロセッサ(たとえば、中央処理装置(CPU))によって、同時にアクセスされることを要求する。あるブロックのバイトが同時にアクセスされるとは、元の値または更新された値のいずれか一方がアクセスされ、2つの値の混合物はアクセスされない、ということを意味する。たとえば、データのブロックが値「1234」を有しており、この値が「5678」に更新されつつあるときには、これらの2つの値の一方だけがフェッチすべき正しい値である。非同時的にデータのブロックにアクセスすることの結果として生じ得る、部分的に更新されたどのような値(たとえば、「1278」または「5634」)も、フェッチすべき正しい値ではない。この同時的アクセス要求は、本開示において「ブロック同時性」と称される。また、「ブロック同時的に」メモリにアクセスする、または、「ブロック同時的な」メモリへのアクセスとは、メモリにおけるデータがアクセスされる態様がブロック同時性を満たすことを意味する。従来型のプログラミング言語およびプロセッサでは、データのブロックへのブロック同時的なアクセスは、そのブロックが「自然にアラインされている」ときにだけ、すなわち、ブロックのアドレスがブロックのデータ型サイズの倍数に対応するときにだけ、保証される。
2、4、8、16、および32バイトのフィールドには、特別な名称が与えられる。ハーフワードとは、連続する2バイトのグループである。ワードとは、連続する4バイトのグループである。ダブルワードとは、連続する8バイトのグループである。クワドワードとは、連続する16バイトのグループである。オクトワードとは、連続する32バイトのグループである。メモリ・アドレスが「自然にアラインされた」ハーフワード、ワード、ダブルワード、クワドワード、およびオクトワードを指定するときには、そのアドレスのバイナリ表現は、1、2、3、4、および5個の右端ゼロ・ビットをそれぞれ含む。ハーフワード、ワード、ダブルワード、またはクワドワードは、本開示では、ブロックと称される。
メモリにおけるデータを参照するいくつかの命令については、他のプロセッサとチャネル・プログラムとによる観察として、ブロック同時的であると見えるようにするために、ハーフワード、ワード、ダブルワード、またはクワドワードにおける全バイトへのアクセスが、特定される。あるブロック内部で同時的であると見えるようにするためにフェッチ・タイプの参照が特定されると、あるプロセッサによってそのブロックに含まれるバイトがフェッチされている間は、別のプロセッサまたはチャネル・プログラムによるそのブロックへのストア・アクセスは許されない。あるブロック内部で同時的であると見えるようにするためにストア・タイプの参照が特定されると、あるプロセッサによってそのブロック内部のバイトが記憶されている間は、別のプロセッサまたはチャネル・プログラムによるそのブロックへのアクセスは、フェッチ・タイプまたはストア・タイプのいずれも、許されない。従来型の命令セット・アーキテクチャによると、単一オペランドの参照(たとえば、単一の値が単一のレジスタにロードされる、または、単一のオペランドが1つの命令によって用いられる)は、オペランドにおいて特定されたアドレスが整数境界(integral boundary)にある場合には、そのオペランド・サイズ(すなわち、アクセスされているデータのサイズ)に対応するブロック同時性を有する。オペランドにおいて特定されたアドレスが整数境界にない場合には、そのオペランドは、1バイトのサイズだけと対応する、ブロック同時的である。
従来型のプロセッサでは、1バイトのうちの8ビット全部が常に全体として参照されるが、これは、バイト同時性と称される。したがって、ブロック同時性は、異なるレベルのバイト同時性を表す。たとえば、4バイトのデータ・ブロックに対するブロック同時性は、4バイト同時性と称され得る。さらに、メモリが4バイト同時性をもってアクセスされるときには、4バイトのデータ・ブロックの4バイト全部が1つの単位として同時にアクセスされるから、2つの2バイト・データ・ブロックと4つの1バイト・データ・ブロックとは、それぞれ、2バイト同時的および1バイト同時的である。
ブロック同時的なメモリ動作は、メモリ参照に関する原子動作とも称される。メモリ参照は、他のプロセッサから見て、整数ブロック内部のすべてのバイトが一単位としてアクセスされる場合に、ブロック同時的と考えられる。整数ブロックとは、そのアドレスがブロックの長さの整数倍であるようなデータのブロックである。整数ブロックは、整数境界上にあり、そのブロックの第1のバイトのアドレスは、整数境界にある。
図1は、「自然にアラインされた」ブロックを指定するアドレスを有するメモリの部分を図解している。特に、この図は、「自然にアラインされた」ハーフワード、ワード、ダブルワード、クワドワード、およびオクトワードをそれぞれ表すバー102〜112を示している。図解されているように、メモリは、ビットの長い水平方向のストリングとして見られる。ビットのストリングは、バイトの単位(すなわち、8ビット)に、さらに分割される。メモリにおける各バイト位置は、一意的な非負整数によって識別されるのであるが、この一意的な非負整数が、そのバイト位置のアドレスである。
バー102は、1バイト・データのブロックを有するメモリを表す。バー102における各矩形は、1バイト・データのブロックを表す。各矩形に含まれる数字は、(オフセット0というラベル付けされた第1の要素のアドレスに対応する)ベース・アドレスからのバイト・ブロックのオフセットである。各バイトは、アドレスとそれからのオフセットとを用いて、アクセスされ得る(すなわち、メモリからフェッチされる、または、メモリにストアされる)。いくつかの実施形態では、メモリは、少なくともバイト・レベルではブロック同時的にアクセスされる(すなわち、バイト同時的)。さらに、アクセスされているデータの第1のバイトのアドレスが、より大きいブロック・サイズのための整数境界である場合には、より大きいブロックへのアクセスは、そのブロック・サイズに関して同様にブロック同時的であり得る。
バー104は、自然にアラインされている2バイト・データのブロックを有するメモリを表す。2バイト・ブロックのそれぞれは、2の倍数を用いてアドレス指定されており、2バイト・データ・ブロックのすべてが整数ブロックであり、2バイトのブロック・サイズを用いて、ブロック同時的にアクセスされ得る。同様に、バー106における4バイト・データ・ブロック、バー108における8バイト・データ・ブロック、バー110における16バイト・データ・ブロック、バー112における32バイト・データ・ブロックは、すべてが整数ブロックであり、これらのデータ・ブロックへのアクセスは、4バイト、8バイト、16バイト、および32バイトのブロックに関して、ブロック同時的に実行され得る。
この開示では、メモリ・アドレスのアドレス・アライメント・サイズは、そのアドレスによってアドレス指定可能な最大の整数ブロックのサイズ、すなわち、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である。
従来型のメモリ参照命令については、ブロック同時性は、参照されているデータのブロックの第1のバイトのアドレスが、メモリ参照サイズに対して整数的であるかどうか(すなわち、第1のバイトのアドレスがメモリ参照サイズの倍数であるかどうか、または、アドレス・アライメント・サイズがメモリ参照サイズ以上であるかどうか)に依存する。すなわち、従来型のメモリ参照命令の場合のブロック同時性は、命令によって参照されているデータのブロックがメモリ参照サイズと同じアドレス・アライメント・サイズを有するかどうかに依存する。たとえば、従来型のメモリ参照命令が8バイトの整数境界上の8バイトのデータを参照する場合には(たとえば、バー108によって表されているメモリの一部に示されているアドレス0、8、16、24など)、それは、8バイト同時的である。しかし、従来型のメモリ参照命令が4バイトの整数境界上の8バイトのデータを参照する場合には(たとえば、バー106によって表されているメモリの一部に示されているアドレス4、12、20など)、8バイトの同時性は保証されない。この理由は、従来型のメモリ参照命令が4バイトの境界でアラインされているメモリにおいて、8バイトのデータ・ブロックを参照するときには、あるプロセッサがその8バイトを参照している間に、2つの4バイト・ブロックまたは4つの2バイト・ブロックが別のプロセッサによって更新されることはない、ということが保証されないからである。
参照されているデータのブロックのアドレスが、そのブロックを参照する命令のメモリ参照サイズに対して整数的でないときには、従来型の命令セット・アーキテクチャは、単一のレジスタにロードするまたは単一のレジスタからストアするなどの場合に、メモリ・オペランドを期待する命令にメモリからの1つのオペランドを提供するようなメモリ参照のために、ただ1バイトの同時性を保証するなどを行う。このように、ソフトウェアは、メモリ参照サイズのブロック同時性または単なる1バイトの同時性を提供する従来型のメモリ参照に依存することだけが可能である。従来型の命令セット・アーキテクチャによるメモリ参照命令による場合には、中間的なレベルのブロック同時性は保障されない。すなわち、たとえば、メモリ参照サイズが8バイトであり、参照されているデータのブロックが4バイトの境界または2バイトの境界においてアラインされているときには、1バイトの同時性(すなわち、1バイトのブロック・サイズを有するブロック同時性)だけしか提供されないのであるが、その理由は、8バイトの同時性は、整数的な8バイトのメモリ・アドレスにおける8バイト(ダブルワード)の参照に対して(すなわち、アドレスが、8バイトのデータ・サイズの倍数であるとき)だけ提供され、それ以外の場合には、1バイトの同時性が保障されるからである。
現代のプロセッサでは、幅の広いデータ参照(たとえば、ダブルワード、クワドワード、またはオクトワード)のためのアクセスが、より小さいデータ・サイズへの参照と同じ速度で実行され得るのが一般的である。よって、より大きいメモリ領域がアクセスされ、処理され、またはコピーされるときには、より大きいメモリ参照サイズを用いてメモリに対するアクセス、処理またはコピーあるいはこれらの組合せを行うように適応させたメモリ命令を用いて、大きい領域にアクセスし、これを処理し、またはコピーすることが望まれる。よって、たとえば、2つの連続するワードがコピーされるときには、2ワードのロードと2ワードのストアとを、単一のダブルワードのロードと単一のダブルワードのストアとによって置き換えられ得るようにすることにより、コピー動作の速度が2倍になる。2バイトの境界上における32個の2バイトの変数のアレイがコピーされる場合には、コピーを完了するのに、32個のハーフワードのロードと32個のハーフワードのストアとが必要になり得る。ダブルワードのアクセスを実装するプロセッサにおいては、4つのハーフワードのアクセスのグループが、それぞれ、単一のダブルワードのアクセスによって置き換えられ得る。
本発明の実施形態は、そのそれぞれの(データ要素の)整数境界における各個別的なデータ要素(たとえば、4バイトであるワード・サイズ)のサイズよりも大きいデータ・サイズ(たとえば、8バイトであるダブルワード・サイズ)に対するメモリ参照を用いてそのようなデータをコピーするとき、そして、そのそれぞれの(データ要素の)整数境界(たとえば、アドレス100)における最初の個別的なデータ要素が、その整数境界においてアラインされている一連のデータ要素をコピーするのに用いられているアクセス・サイズに対応する、より大きいデータ・サイズの整数境界(たとえば、アドレス1000)においてアラインされていないときに、それらの整数アドレス(たとえば、アドレス100)における一連のアラインされたデータ(たとえば、ワード)を、それぞれの個別的なデータ要素におけるブロック同時性をもってコピーするための機構を提供する。
本発明の実施形態は、参照されているデータのブロックのアドレスがメモリ参照サイズに対して整数的でない場合でも、異なるレベルのブロック同時性を提供するシステムおよび方法を提供する。いくつかの実施形態では、命令のオペランドは、複数のブロック同時アクセスで構成されており、各ブロックは、その対応する整数境界におけるブロックに対応する。たとえば、いくつかの実施形態のメモリ参照命令が、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バイトのブロックは、部分的に更新された値を含まないことが保証される。
参照されているデータのブロックのアドレスのアライメント・サイズは、単に、本発明のいくつかの実施形態のメモリ参照命令を実行しているプロセッサが提供する最小のバイト同時性レベルである。すなわち、いくつかの実施形態では、単一ブロック同時アクセスは、複数のアクセスとして、複数のそのようなアクセスがブロック同時的な振る舞いを示すことを保証するロジックと共に、実装され得る。いくつかの実施形態では、複数のブロック同時的なアクセスは、ある整数境界においてアラインされている前記複数のアクセスの各ブロックに対して、少なくともブロック同時的な振る舞いを提供する単一のアクセスとして実装される。
図2は、本発明のいくつかの実施形態に従いプロセッサによってアクセスされるメモリ200の一部を図示している。特に、この図は、32から55のアドレスを有するメモリの一部を図解している。メモリ200は、8バイトの境界(たとえば、キャッシュ・インターフェース・サイズ)を有する。すなわち、アドレス32、40、および48が境界を備えている。
一例であるが、本発明のいくつかの実施形態によるメモリ参照命令は、16バイト(すなわち、クワドワードのサイズ)のメモリ参照サイズを有しており、この16バイトのブロックは、34のアドレスを有する(すなわち、このブロックの最初のバイトは、メモリ200のアドレス34にある)。これらの16バイトは、図2において、グレイのボックスとして図示されている。このメモリ参照命令を実行するプロセッサは、2バイトの同時性を保証しながら、16バイトのデータにアクセスし得る。この理由は、バイナリ形式(すなわち、100010)でのアドレス34は、後置ゼロを1つ有するため、そのアドレスが、2バイトのアライメント・サイズを有するからである。
いくつかの実施形態では、プロセッサは、それらのグループのどれもがメモリの境界を超えて拡がらない限り、アライメント・サイズの倍数である任意のサイズを有するグループ単位で、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バイトにアクセスするように、いずれかの順序で実行され得る。
本発明の実施形態によりメモリ参照命令を実行するプロセッサとは対照的に、メモリ200のアドレス34における16バイトのデータを参照する従来型のメモリ参照命令は、16回に至る1バイトのアクセスを用いて、この16バイトのデータにアクセスすることになる。この理由は、従来型のメモリ参照命令の場合には、16バイトのデータのアドレスが、メモリ参照サイズ(すなわち、16バイト)に対して整数的ではなく、したがって、バイト同時性だけが保証されるからである。いくつかの場合には、従来型のメモリ参照命令を実行するプロセッサは、アライメント・フォールトを生じさせることなくアドレス34〜49を有する16バイトにアクセスするためには、バイト・アドレス32、33および50〜55に、意味のないバイトを詰めなくてはならないことがあり得る。これらの余分なステップは、パフォーマンスに影響し得る。
以下のコードの例は、そうではないと断らない限り、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)において与えられている。
以下の例示的な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に記述がある。
例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
しかし、16個のハーフワードをコピーすることに基づく例1は、レジスタR4およびR5に保持されるアドレスが少なくとも2のアドレス・アライメント・サイズに対応する場合の2バイトのブロック同時性と、1バイトの同時性(すなわち、ブロック・サイズが1バイトに対応するブロック同時性)とを与える。他方で、例2に示されている命令は、一般的に、レジスタR4およびR5が少なくともクワドワードのアドレス・アライメント・サイズを有する場合のクワドワードのブロック同時性と、そうでない場合のバイト同時性とを保証し得る。このように、例1から例2に命令を変換するプログラマまたはコンパイラは、例1のブロック同時性の保証を、ハーフワードのブロック同時性から、クワドワード未満であるが少なくともハーフワード・サイズのアドレス・アライメント・サイズを有するアドレスに対しては、単なるバイト同時性にまで低下させ得る。したがって、プログラマまたはコンパイラは、それ以外には有益なこの変更により、プログラミング言語またはプログラミング規約の違反を導いてしまうことになり得る。
別の例であるが、2バイトの境界上の32個の2バイトの変数のアレイがコピーされる場合には、そのコピーを完了するのに、32個のハーフワードのロードと、32個のハーフワードのストアとが必要になり得る。本発明のいくつかの実施形態に従って一度に16バイトをロードする、単一命令多重データ(SIMD)のロードが用いられる場合には、わずかに、2つのロードと2つのストアとが要求されるだけであり、コピーの実行時間を著しく短縮する。SIMDのロードがz/アーキテクチャのプロセッサ上で実装されるときには、下記の例3におけるコードは、下記の例4に示されているように、2つのベクトル・ロード(VECTOR LOAD)命令とそれに続く2つのベクトル・ストア(VECTOR STORE)命令とによって置き換えられ得る。
例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はベクトル・データ・タイプである。
しかし、従来型の命令アーキテクチャによると、16個のハーフワードをコピーすることに基づく例3は、レジスタR4およびR5に保持されているアドレスが少なくとも2のアドレス・アライメント・サイズに対応する場合の2バイトのブロック同時性と、1バイトの同時性とを与える。他方で、例4は、一般的に、レジスタR4およびR5が少なくともクワドワードのアドレス・アライメント・サイズを有する場合のクワドワードのブロック同時性と、そうでない場合のバイト同時性とを保証し得る。このようにして、例3から例4に命令を変換するプログラマまたはコンパイラは、例3のブロック同時性保証を、ハーフワードのブロック同時性から、クワドワード未満であるが少なくともハーフワード・サイズのアドレス・アライメント・サイズを有するアドレスに対しては、単なるバイト同時性にまで低下させ得る。したがって、プログラマまたはコンパイラは、それ以外には有益なこの変更により、プログラミング言語またはプログラミング規約の違反を導いてしまうことになり得る。
あるアレイの複数の値が、ある定数だけインクリメントされるときには、同様の変換が行われ得る。特に、下記の例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はベクトルである。
例5は、アドレスR4およびR5が、少なくとも2のアドレス・アライメント・サイズを有する場合には、そのようにインクリメントされる各ハーフワードに対して、ブロック同時性を提供し、他方で、例6は、アドレスR4およびR5が、少なくとも16のアドレス・アライメント・サイズを有する場合には、そのようにインクリメントされる8のハーフワードのグループに対して、ブロック同時性を与え、それ以外の場合には、1バイトの同時性を与える。このように、例5から例6への変換は、例5のブロック同時性の振る舞いを保存しない。
例4および6に示されたベクトル命令は、従来型のメモリ参照命令ではなく、新たな命令である、ということが注意されるべきである。しかし、これらの新たなベクトル命令は、本明細書で説明される本発明のいくつかの実施形態によるブロック同時性の振る舞いを有しない。
本発明の実施形態は、特定されたメモリ・アドレスに対するアドレス・アライメント・サイズに基づき、メモリ参照命令の新たな定義を提供することにより、そのような命令は、そのアドレス・アライメント・サイズにおいてアラインされたアドレス・アライメント・サイズに対応するブロック・サイズのサブブロックに対して、ブロック同時性を提供する。よって、上記の3つのコード変換(例1から例2、例3から例4、および例5から例6)は、ロードおよびストア命令に対する新たな変更された命令定義に基づき、実行され得る。この変更は、本明細書で説明されているブロック同時性の振る舞いに対応し、他方で、命令実行の他の態様の振る舞いは、変更されないままに維持する。明確にするために、以下の例示的な変更された命令のオペコードは、以下で述べる命令の例では、演算コードの最初に「m」を付して表される。
ハーフワードのブロック同時性を伴うハーフワードのコピー・ループは、下記の例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バイトのブロック同時性を与える。
同様に、例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はレジスタである。
さらに、例4の最適化された命令は、下記の例8の命令に変換され得る。最適化されたコードは、下記のように、変更された命令を用いて、実行され得る。
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バイトのブロック同時性を与える。
同様に、例7のコードは、下記の例8のように、変更されたパワーISAの定義を用いて、表され得る。
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)
いくつかの実施形態では、例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バイトのブロック同時性を与える。
いくつかの実施形態では、既存の命令およびオペコードが変更され、命令のために新たなニーモニックが導入されることはない。他の実施形態では、本明細書で説明されるアドレス・アライメント・サイズに基づくブロック同時性に関する教示を用いて、新たな命令およびオペコードが導入される。
図3は、本発明のいくつかの実施形態に従ってメモリにアクセスするためのプロセス・フローを図示している。いくつかの実施形態では、プロセッサ(たとえば、CPU)は、図3に示されたプロセス・フローを実行する。ボックス305では、プロセッサが、メモリの、あるアドレスにおけるデータのブロックを参照するメモリ参照命令を受け取る。メモリ参照命令は、メモリにおけるあるデータのブロックを参照するいずれかの命令(たとえば、メモリにおけるあるアドレスをオペランドとして含む命令)を含む。このような命令は、算術演算(たとえば、加算命令、減算命令、比較命令など)だけでなく、ロード命令とストア命令とを含む。
判断ボックス310では、プロセッサが、オプションであるが、そこからのデータをプロセッサが参照するメモリが、ボックス305で受け取られたメモリ参照命令によってサポートされる最大ブロック同時メモリ参照サイズ(または、最大ブロック同時性サイズ)以上のメモリ・アドレス境界(すなわち、メモリ参照命令で特定されたアドレスのアドレス・アライメント・サイズ)を有するかどうかを判断する。ある命令に対する最大メモリ参照サイズは、命令セット・アーキテクチャのすべての命令に対して、定義される。最大ブロック同時メモリ参照サイズは、命令のメモリ参照のサイズであり得るか、または、命令セット・アーキテクチャのすべての命令に対して定義された最大ブロック同時参照サイズに対応することもあり得る。いくつかの実施形態では、最大ブロック同時メモリ参照サイズは、命令のメモリ参照のサイズであり得るか、または、命令セット・アーキテクチャのそれぞれの命令に対して独立に定義された最大ブロック同時メモリ参照サイズに対応することもあり得る。
判断ボックス310において、メモリ・アドレス境界が最大ブロック同時メモリ参照サイズ未満であると判断されると、プロセッサは、判断ボックス320に進むのであるが、判断ボックス320については、さらに後述する。判断ボックス310において、メモリ・アドレス境界が最大ブロック同時メモリ参照サイズ以上であると判断されると、プロセッサは、ボックス315に進み、最大ブロック同時メモリ参照サイズのブロックずつ同時に、メモリにアクセスする。たとえば、メモリ参照サイズが32バイトであり、メモリ・アドレス境界が16バイトであるが、最大ブロック同時メモリ参照サイズが8バイトであるときには、プロセッサは、同時に8バイトずつ、メモリにアクセスする。
判断ボックス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に設定される。
判断ボックス330では、プロセッサが、要求されたメモリ・アドレス・アライメント・サイズが2の(N−1)乗(すなわち、2(N−1))であるかどうかを判断する。たとえば、メモリ参照サイズが32バイト(2バイト)であるときには、プロセッサは、ボックス330において、要求されたメモリ・アドレス・アライメント・サイズが16バイト(2バイト)であるかどうかを判断する。要求されたメモリ・アドレス・アライメント・サイズが2の(N−1)乗であると判断すると、プロセッサは、ボックス335に進み、同時に2(N−1)バイトずつ、メモリにアクセスする。たとえば、メモリ参照サイズが32バイト(2バイト)である場合には、プロセッサは、すべての32バイトにアクセスするために、一度に16バイト(2バイト)ずつ、ブロック同時的にアクセスする。
要求されたメモリ・アドレス・アライメント・サイズが2の(N−1)乗ではないと判断すると、プロセッサは、要求されたメモリ・アドレス・アライメント・サイズが2の1乗(すなわち、2バイト)であると判断ボックス340で判断されるまで、同様に、判断ボックス340まで進む。要求されたメモリ・アドレス・アライメント・サイズが2であると判断すると、プロセッサは、ボックス345に進み、同時に2バイトずつ、メモリにアクセスする。たとえば、メモリ参照サイズが32バイトである場合には、プロセッサは、すべての32バイトにアクセスするために、一度に2バイトずつ、ブロック同時的にアクセスする。判断ボックス340において、要求されたメモリ・アドレス・アライメント・サイズが2ではないと判断すると、プロセッサは、ボックス350に進み、一度に1バイトずつ、メモリにアクセスする。すなわち、プロセッサは、メモリ参照命令によって特定されたすべてのバイトにアクセスするために、一度に1バイトずつアクセスする。
ボックス320から350までにおいて、プロセッサは、要求されたメモリ・アドレス・アライメント・サイズがメモリ参照命令のメモリ参照サイズよりも小さいときには、要求されたメモリ・アドレス・アライメント・サイズにおけるブロック同時性をもってメモリにアクセスする、ということが認識されるべきである。すなわち、いくつかの実施形態では、メモリ参照命令を実行するプロセッサは、要求されたデータのブロックのアドレスがアラインされているどのような境界にもアクセスがブロック同時的である(すなわち、アクセスは、任意のアライメント・サイズにブロック同時的である)かのように、機能する。
いくつかの実施形態では、メモリ参照命令のメモリ参照サイズは、たとえば、命令のオペコード(演算コード)によって示唆される。この理由は、命令のオペコードが、実行すべき演算だけでなく、参照されているデータのデータ型も指示するからである。あるいは、または、上述したことと関連して(Alternatively or conjunctively)、いくつかの実施形態では、メモリ参照命令は、たとえば命令のオペランドにおけるメモリ参照サイズを明示的に特定するように、定義され得る。たとえば、命令のオペランドは、フェッチまたはストアすべき最高のインデックスが付されたバイトを特定する。これにより、プログラマが、メモリ参照サイズを特定することが可能になる。いくつかの場合に、特定されたメモリ参照サイズが、2の累乗ではない(たとえば、10バイト)ことがあり得るし、オペコードによって示唆されたメモリ参照サイズと一致しないこともあり得る。
本発明の実施形態は、特定されたメモリ参照サイズと要求されたメモリのアドレス境界とが同じでないときに、ブロック同時性を提供するシステムおよび方法を提供する。いくつかの実施形態では、メモリ参照サイズが、メモリ参照命令において特定されているときには、その命令を実行するプロセッサは、要求されたメモリのアドレスのアドレス境界と特定されたメモリ参照サイズとの最大公約数を、ブロック同時データ・アクセス・サイズとして用いる。たとえば、命令のオペランド・アドレスが4バイトの境界上にあり、特定されたメモリ参照サイズが10バイトである場合には、10と4との最大公約数は2であるから、データ・アクセスは、少なくとも2バイトについては、他のプロセッサと同時的であるように見える。これにより、スカラ・コードと同じように振る舞い、いかなるプログラミング言語のセマンティクスや規約にも違反しないデータ並列コードが許容される。
いくつかの実施形態では、ブロック同時性のブロック・サイズ(すなわち、たとえば2バイトの同時性、4バイトの同時性、16バイトの同時性、32バイトの同時性などの、ブロック同時性のレベル)が、アドレス・アライメント・サイズから直接導かれる。別の実施形態では、ブロック同時アクセスのブロック同時性サイズは、アドレス・アライメント・サイズと命令のメモリ参照サイズとの両方に基づく。いくつかのそのような実施形態では、ブロック同時アクセスのためのブロック・サイズは、アドレス・アライメントとメモリ参照のサイズとから直接導かれるブロック同時性のブロック・サイズの最小値である。さらに別の実施形態では、ブロック同時アクセスのためのブロック・サイズは、さらに図4に示されているように、アドレス・アライメント・サイズとメモリ参照サイズとの間で共通の2つのブロック・サイズの最大の累乗によって、決定される。
図4は、ブロック同時アクセスのブロック・サイズがアドレス・アライメント・サイズとメモリ参照命令のメモリ参照サイズとの両方に基づくときに、メモリにアクセスするためのプロセス・フローを図示している。いくつかの実施形態では、ブロック同時アクセスの最大ブロック・サイズが、命令セット・アーキテクチャによってすべての命令に課せられるか、または、最大ブロック同時性サイズを有する特定の命令に課せられることがあり得る。いくつかのメモリ参照命令は、メモリ参照サイズを明示的に特定するのであるが、そのサイズが2の累乗ではない場合もある。しかし、いくつかの実装例では、2の累乗のブロック同時サイズだけが許容されることがあり得る。そのようないくつかの実施形態では、プロセッサ(たとえば、CPU)は、図4に示されたプロセス・フローを実行する。
ボックス405では、プロセッサが、メモリの、あるアドレスにおけるデータのブロックを参照するメモリ参照命令を受け取る。このメモリ参照命令は、また、たとえば命令のオペランドにおいて、参照するデータのサイズを特定する。
判断ボックス410では、プロセッサが、オプションであるが、そこからのデータをプロセッサが参照するメモリが、ボックス405で受け取られたメモリ参照命令の最大ブロック同時メモリ参照サイズ以上のメモリ・アドレス・アライメント・サイズを有するかどうかを判断する。メモリ・アドレス・アライメント・サイズが最大ブロック同時メモリ参照サイズ未満であると判断されると、プロセッサは、判断ボックス420に進むのであるが、判断ボックス420については、さらに後述する。メモリ・アドレス・アライメント・サイズが上記特定されたメモリ参照サイズ以上であると判断されると、プロセッサは、ボックス415に進み、最大ブロック同時メモリ参照サイズのブロックずつ同時に、メモリにアクセスする。たとえば、特定されたメモリ参照サイズが8バイトであり、メモリ・アドレス・アライメント・サイズが8バイトであるが、最大ブロック同時アクセス・サイズが4バイトであるときには、プロセッサは、同時に4バイトずつ、メモリにアクセスする。
判断ボックス420では、プロセッサが、要求されたメモリ・アドレス・アライメント・サイズが2のN乗(すなわち、2)であるかどうかを判断するのであるが、ここで、Nとは、2が特定されたメモリ参照サイズ以下になるような、最大の非負整数である。たとえば、特定されたメモリ参照サイズが10バイトであるときには、プロセッサは、ボックス420において、要求されたメモリ・アドレスが8バイト(2バイト)にアラインされているかどうかを判断する。判断ボックス420において、要求されたメモリ・アドレス・アライメント・サイズが2のN乗ではないと判断すると、プロセッサは、判断ボックス435に進むが、判断ボックス435については、さらに後述する。
判断ボックス420において、要求されたメモリ・アドレス・アライメント・サイズが2のN乗であると判断すると、プロセッサは、判断ボックス425に進み、特定されたメモリ参照サイズが2のN乗の倍数であるかどうかを判断する。たとえば、特定されたメモリ参照サイズが10バイトであるときには、プロセッサは、判断ボックス425において、特定されたメモリ参照サイズである10バイトが8バイトの倍数であるかどうかを判断する。特定されたメモリ参照サイズが2のN乗の倍数でない場合には、プロセッサは、判断ボックス440に進むが、判断ボックス440については、さらに後述する。特定されたメモリ参照サイズが2のN乗の倍数である場合には、プロセッサは、ボックス430に進み、同時に2バイトずつメモリにアクセスする。
判断ボックス435では、プロセッサが、要求されたメモリ・アドレス・アライメント・サイズが2の(N−1)乗(すなわち、2(N−1))であるかどうかを判断する。たとえば、メモリ参照サイズが10バイトであるときには、プロセッサは、判断ボックス435において、要求されたメモリ・アドレス・アライメント・サイズが4バイト(2バイト)であるかどうかを判断する。要求されたメモリ・アドレス・アライメント・サイズが2の(N−1)乗ではないと判断すると、プロセッサは、判断ボックス450に向かって進むが、判断ボックス450についてはさらに後述する。
判断ボックス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)バイトずつ、メモリにアクセスする。
判断ボックス435において、要求されたメモリ・アドレス・アライメント・サイズが2の(N−1)乗の倍数ではないと判断すると、プロセッサは、要求されたメモリ・アドレスアライメント・サイズが2の1乗(2)であると判断ボックス450で判断されるまで、同様に、判断ボックス450まで進む。判断ボックス450において、要求されたメモリ・アドレス・アライメント・サイズが2ではないと判断すると、プロセッサは、ボックス465において、一度に1バイトずつ、メモリにアクセスする。すなわち、プロセッサは、メモリ参照命令によって特定されたすべてのバイトにアクセスするために、一度に1バイトずつ、アクセスする。
判断ボックス450において、要求されたメモリ・アドレス・アライメント・サイズが2であると判断すると、プロセッサは、判断ボックス455に進み、特定されたメモリ参照サイズが2バイトの倍数であるかどうかを判断する。特定されたメモリ参照サイズが2の倍数ではない場合には、プロセッサは、ボックス465に進み、一度に1バイトずつメモリにアクセスする。特定されたメモリ参照サイズが2の倍数である場合には、プロセッサはボックス460に進み、同時に2バイトずつ、メモリにアクセスする。たとえば、プロセッサは、メモリ参照サイズが10バイトである場合には、すべての10バイトにアクセスするために、一度に2バイトずつ、メモリにアクセスする。
ボックス420から465までにおいて、プロセッサは、要求されたメモリ・アドレス・アライメント・サイズと特定されたメモリ参照サイズとの最大公約数をバイト数として識別し、その最大公約数のブロック同時性をもって、メモリにアクセスする、ということが認識されるべきである。たとえば、特定されたメモリ参照サイズが10バイトであり、要求されたメモリ・アドレス・アライメント・サイズが4バイトであるときには、プロセッサは、最大公約数である2バイトを識別し、同時に2バイトずつメモリにアクセスする(すなわち、ブロック同時的に一度に2バイトずつアクセスすることによって、すべての10バイトにアクセスする)。
いくつかの実施形態では、最大ブロック同時性サイズは、1つまたは複数の命令に対して設定され得る。たとえば、ある命令が、8バイトの最大ブロック同時性サイズを提供することがあり得る。そのときには、特定されたメモリ参照サイズが2より大きい場合であっても、判断ボックス420において、Nは3に設定される。いくつかの実施形態では、最大ブロック同時性サイズは、すべての命令に適用される。他の実施形態では、それぞれの命令が、別個の最大ブロック同時性サイズを有することも可能である。
図5は、本発明のいくつかの実施形態による、メモリにおけるデータにアクセスするためのシステム500を図解している。特に、この図は、それ以外のコンポーネントは図解および記述の単純化のために図示されていないのであるが、システム500がメモリ505と複数のプロセッサ510および515とを含むことを図解している。メモリ505と、プロセッサ510および515とは、1つまたは複数のバス520を経由して、相互に結合されている。プロセッサ510および515は、それぞれ、レジスタ525および530を有するように示されているが、プロセッサの内部の他のコンポーネント(たとえば、算術論理装置、制御装置、クロック、内部バスなど)は、図解および記述の単純化のために図示されていない。
いくつかの実施形態では、システム500は、様々な並列処理環境を表す。たとえば、プロセッサ510および515のうちの1つが、ベクトル化された命令を実行するベクトル・プロセッサである場合がある。それ以外のプロセッサのうちの1つが、スカラ命令を実行するスカラ・プロセッサである場合がある。ベクトル・プロセッサとスカラ・プロセッサとは、メモリ505を共用し得る。別の例として、システム500が、マルチコア・プロセッサを表し得るが、その場合、プロセッサ510および515は、メモリ505を共用する異なるコアである。さらに別の例としては、システム500が、並列処理を行うプロセッサ510および515を有するメインフレーム・コンピュータ・システムを表す場合もある。
当技術分野で知られているように、プロセッサまたは(8086およびx86ファミリ、もしくはIBMのシステムzサーバ・ファミリなどの)プロセッサ・ファミリは、それ自体のマシン命令のセットを有する。たとえば、IBMのシステムzサーバ・ファミリの命令セットは、z/アーキテクチャ命令セットとして知られているが、上記に組み入れられたz/Architecture Principles of Operationで定められており、パワー・サーバの命令セットは、パワーISA(命令セットアーキテクチャ)として知られているが、上記に組み入れられたPower ISAで定められている。マシン命令は、マシンへの異なるコマンドに対応するように設計されたビットのパターンである。ほとんどの場合、命令セットは、同じアーキテクチャを用いるプロセッサのクラスに特有である。ほとんどの命令は、基本的な命令タイプ(算術、メモリ参照、分岐など)と実際の動作(ロード、ストア、加算、または比較など)とを特定する1つまたは複数のオペコードと、オペランドのタイプ、アドレス指定モード、アドレス指定オフセットもしくはインデックス、または実際の値自体を与え得る他のフィールドと、を有する。すなわち、各マシン命令は、レジスタまたはメモリにおけるデータ・ユニットに対し、ロード、分岐、または算術論理装置(ALU)演算など、非常に特定的なタスクを実行するためのものである。これらのマシン命令のうちのいくつかは、メモリ参照命令であって、このメモリ参照命令は、メモリ505の特定のアドレスにおけるデータを参照し、そのデータを、メモリ505からレジスタにフェッチし、もしくは、レジスタからメモリ505に記憶する。
プロセッサ510および515は、メモリ505内部のデータのブロックのアドレスがそのメモリ参照命令のためのメモリ参照サイズと整数的でない場合であってもブロックの同時性を提供するメモリ参照命令を実行するように、構成され得る。すなわち、いくつかの実施形態では、プロセッサ510および515に対するメモリ参照命令は、参照されているデータのブロックがアラインされているどの境界に対しても命令がブロック同時的であるかのように、機能する。いくつかの実施形態では、8バイトの同時性の最大値が存在する。いくつかの実施形態では、プロセッサは、メモリ・アドレス・アライメント・サイズと特定されたメモリ参照サイズとの最大公約数を、バイト数として識別し、その最大公約数におけるブロック同時性でメモリ505にアクセスする。このようにして、プロセッサ510および515を含むコンピュータの機能が改善され得る。
異なる実施形態では、プロセッサ510および515は、異なるように構成される。たとえば、いくつかの実施形態では、プロセッサ510および515は、命令を実行しているときには本発明の様々な実施形態に従ってメモリ505にアクセスするように、既存の従来型のメモリ参照命令に新たな定義を提供することによって、構成され得る。あるいは、または、上述したことと関連して、プロセッサ510および515は、本発明の様々な実施形態に従ってメモリ505にアクセスする新たなメモリ参照命令を定義することにより、構成され得る。
たとえば、メモリ参照命令は、ベクトル・ロード命令を含み、このベクトル・ロード命令は、多くの場合、16バイトのアライメント要求を有する。すなわち、16バイトのアライメント要求を有するベクトル・ロード命令は、16バイトのデータのブロックのうちの16ブロック全部を、メモリから、1単位としてロードすると期待される。マルチスレッド化コードがコンパイラによって、たとえばデータ並列実行を可能にするためにベクトル化される場合、ある変数が第1のCPUによって更新され、第2のCPUによって読み出される場合には、第2のCPUは、混合された結果ではなく、その変数への変化全体を見ると想定される。従来型のベクトル・ロード命令の定義では、ブロック同時性を保証することは不可能である。したがって、スレッド並列性を用いるときも、より高い程度のデータ並列性を用いることが困難であることが多い。これが、潜在的なソフトウェアの性能を制限し、ハードウェアが十分に利用されない状態を生じさせる。
本発明の様々な実施形態に従ってメモリにアクセスするようにプロセッサを構成することにより、プロセッサは、スレッド並列性を用いるときに、外部的なシリアライズ(たとえば、ロック)を要求することなく、より程度の高いデータ並列性を用いることができる。本発明の実施形態に従って構成されたプロセッサは、また、ソフトウェア性能も改善させ、ハードウェアの利用を容易にする。本発明の実施形態によると、より小さいデータ型がベクトルの中にパックされることが可能になり、他のプロセッサには、スカラ命令が用いられているかのように、同じセマンティクスで動作しているように見える。さらに、ブロック同時性により、余分なアライメント制限が回避され、アラインされ得ないデータの部分を処理するための余分なコードの必要性が回避されるために、コンパイラによる、コードの、より容易な自動並列化が可能になる。
本発明のいくつかの実施形態では、プロセッサに結合されたメモリにおけるデータにアクセスするための方法が提供される。この方法は、メモリ中のあるアドレスにおける第1のサイズのデータにアクセスするためのメモリ参照命令を受け取る。この方法は、上記アドレスのアライメント・サイズを決定する。この方法は、ブロック同時的にデータの各グループにアクセスすることにより、データの1以上のグループ単位で第1のサイズのデータにアクセスする。データの上記グループは、アライメント・サイズの倍数であるサイズを有する。この方法は、バイナリ表現でのアドレスにおける後置ゼロの個数を数えることにより、アライメント・サイズを決定する。データの各グループは、バイト数において、予め定義された最大ブロック同時性サイズよりも大きくない。いくつかの実施形態では、第1のサイズは、決定されたアライメント・サイズよりも大きい。いくつかの実施形態では、第1のサイズと決定されたアライメント・サイズとはバイト数としてのサイズであり、第1のサイズは2であり、決定されたアライメント・サイズは2であり、Aは、非負整数であるBよりも大きい整数である。いくつかの実施形態では、この方法は、メモリ参照命令のオペコードに基づき、第1のサイズを決定する。いくつかの実施形態では、プロセッサはベクトル・プロセッサを含み、メモリ参照命令はベクトル命令を含む。
本発明のいくつかの実施形態では、プロセッサに結合されたメモリにおけるデータにアクセスするための方法が提供される。この方法は、メモリ中のあるアドレスにおける第1のサイズのデータにアクセスするためのメモリ参照命令を受け取る。メモリ参照命令が、第1のサイズを特定する。この方法は、上記アドレスのアライメント・サイズを決定する。この方法は、上記第1のサイズと決定された上記アライメント・サイズとの最大公約数を決定する。この方法は、データの1以上のグループ単位で上記第1のサイズのデータにアクセスする。データの上記グループは、最大公約数のサイズの倍数であるサイズを有する。いくつかの実施形態では、第1のサイズは決定されたアライメント・サイズよりも大きい。いくつかの実施形態では、第1のサイズと決定されたアライメント・サイズとはバイト数としてのサイズであり、第1のサイズは2の累乗のサイズではなく、決定されたアライメント・サイズは2の累乗のサイズである。いくつかの実施形態では、この方法は、メモリ参照命令のオペランドに基づき、第1のサイズを決定する。いくつかの実施形態では、プロセッサはベクトル・プロセッサを含み、メモリ参照命令はベクトル命令を含む。
本発明は、システム、方法、またはコンピュータ・プログラム製品あるいはこれらの組合せであり得る。コンピュータ・プログラム製品は、プロセッサに本発明の諸態様を実行させるためのコンピュータ可読プログラム命令を有する(1つまたは複数の)コンピュータ可読ストレージ媒体を含み得る。
コンピュータ可読ストレージ媒体とは、有体物であって命令実行デバイスによって用いられる命令を保持および記憶することが可能なデバイスであり得る。コンピュータ可読ストレージ媒体は、たとえば、これらに限定されることはないが、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁気ストレージ・デバイス、半導体ストレージ・デバイス、または以上のいずれかの適切な組合せであり得る。コンピュータ可読ストレージ媒体の、より特定的な例の非網羅的なリストは、ポータブルなコンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ(RAM)、リード・オンリ・メモリ(ROM)、消去可能でプログラム可能なリード・オンリ・メモリ(EPROMまたはフラッシュ・メモリ)、静的なランダム・アクセス・メモリ(SRAM)、ポータブルなコンパクト・ディスク・リード・オンリ・メモリ(CD−ROM)、デジタル・バーサタイル・ディスク(DVD)、メモリ・スティック、フロッピー(R)・ディスク(R)、パンチ・カードまたは命令が記録されている溝を有する隆起構造などの機械的に符号化されたデバイス、および以上のいずれかの適切な組合せを含む。本明細書で用いられているコンピュータ可読ストレージ媒体とは、無線波もしくはそれ以外の自由に伝搬する電磁波、導波管もしくはそれ以外の伝送媒体を通過して伝搬する電磁波(たとえば、光ファイバ・ケーブルを通過する光パルス)、またはワイヤを通過して伝送される電気信号などのような一時的な信号自体としては、解釈されるべきでない。
本明細書で説明されているコンピュータ可読プログラム命令は、それぞれのコンピューティング/処理デバイスに、コンピュータ可読ストレージ媒体からダウンロードされ得るし、または、外部コンピュータもしくは外部ストレージ媒体に、たとえば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、またはワイヤレス・ネットワークあるいはこれらの組合せなどのネットワークを介して、ダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバあるいはこれらの組合せを備え得る。各コンピューティング/処理デバイスにおけるネットワーク・アダプタ・カードまたはネットワーク・インターフェースが、ネットワークからコンピュータ可読プログラム命令を受け取り、それぞれのコンピューティング/処理デバイスにおけるコンピュータ可読ストレージ媒体に記憶するために、そのコンピュータ可読プログラム命令を転送する。
本発明の動作を実行させるためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ(ISA)命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、または1つもしくは複数のプログラミング言語のいずれかの組合せで書かれたソース・コードもしくはオブジェクト・コードのいずれかであり得るが、ここでプログラミング言語とは、Smalltalk(R)、C++などのオブジェクト指向プログラミング言語、または、「C」プログラミング言語もしくは類似のプログラミング言語などの従来型の手続き型プログラミング言語を含む。コンピュータ可読プログラム命令は、全体的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンド・アロンのソフトウェア・パッケージとして、部分的にはユーザのコンピュータ上であり部分的にはリモート・コンピュータ上で、または全体的にリモート・コンピュータもしくはサーバ上で、実行され得る。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク(LAN)もしくはワイド・エリア・ネットワーク(WAN)を含むいずれかのタイプのネットワークを介してユーザのコンピュータに接続され得るし、または、この接続が、(たとえば、インターネット・サービス・プロバイダを用い、インターネットを通じて)外部コンピュータに対してなされることがあり得る。いくつかの実施形態では、たとえば、プログラム可能なロジック回路、フィールド・プログラム可能なゲート・アレイ(FPGA)、またはプログラム可能なロジック・アレイ(PLA)を含む電子回路が、本発明の諸態様を実行するために、コンピュータ可読プログラム命令の状態情報を用いて電子回路をカスタマイズすることによって、コンピュータ可読プログラム命令を実行し得る。
本明細書では、本発明の諸態様が、本発明の実施形態による方法、装置(システム)、およびコンピュータ・プログラム製品の流れ図またはブロック図あるいはその両方を参照して、説明されている。流れ図またはブロック図あるいはその両方の各ブロックと、流れ図またはブロック図あるいはその両方におけるブロックの組合せとが、コンピュータ可読プログラム命令によって実装され得る、ということが理解されるであろう。
これらのコンピュータ可読プログラム命令は、コンピュータまたはそれ以外のプログラム可能なデータ処理装置のプロセッサ経由で実行される命令が、流れ図またはブロック図あるいはその両方の1つまたは複数のブロックにおいて特定されている機能/作用を実装するための手段を生じさせるように、汎用コンピュータ、専用コンピュータ、またはそれ以外のプログラム可能なデータ処理装置のプロセッサに提供されて、マシンを作り出すものであってよい。また、これらのコンピュータ可読プログラム命令は、命令が記憶されているコンピュータ可読ストレージ媒体が、流れ図またはブロック図あるいはその両方の1つまたは複数のブロックにおいて特定されている機能/作用の諸態様を実装する命令を含む製品を構成するように、コンピュータ可読ストレージ媒体に記憶され、コンピュータ、プログラム可能なデータ処理装置、またはそれ以外のデバイスあるいはこれらの組合せに、特定の態様で機能するように指示するものであってもよい。
コンピュータ可読プログラム命令は、また、コンピュータ、他のプログラム可能な装置または他のデバイス上で実行する命令が、流れ図またはブロック図あるいはその両方の1つまたは複数のブロックにおいて特定されている機能/作用を実現させるように、コンピュータ実装プロセスを生じさせるために、コンピュータ、他のプログラム可能なデータ処理装置、または他のデバイスの上にロードされ、コンピュータ、他のプログラム可能な装置または他のデバイスの上で一連の動作ステップを実行させるものであってもよい。
図面における流れ図およびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を図解している。この点で、流れ図またはブロック図における各ブロックは、特定された(1つまたは複数の)論理機能を実装するための1つまたは複数の実行可能な命令を備えたモジュール、セグメント、または命令の一部を表し得る。いくつかの別の実施では、ブロックに記されている機能が、図面に記されている順序とは異なる順序で生じることがあり得る。たとえば、連続するように示されている2つのブロックが、関係する機能に応じて、実際には、実質的に同時に実行されることがあり得るし、または、それらのブロックが、逆の順序で実行されることもあり得る。ブロック図または流れ図あるいはその両方の各ブロックと、ブロック図または流れ図あるいはその両方におけるブロックの組合せとは、特定された機能もしくは作用を実行する、または、専用のハードウェアおよびコンピュータ命令の組合せを実行する専用のハードウェア・ベースのシステムによって、実装され得る。
本発明の様々な実施形態に関する説明が、例証する目的のために提示されてきたが、以上の説明は、網羅的であることや、開示されている実施形態に限定されることが、意図されたものではない。当業者にとっては、説明された実施形態の範囲および主旨から逸脱することなく、多くの変更および変形が明らかであろう。本明細書で用いられている用語は、実施形態の原理、実際的な応用、もしくは市場において見出される技術に対する技術的改善を最もよく説明するために、または、本明細書に開示されている実施形態を他の当業者が理解することを可能にするために、選択されたものである。

Claims (26)

  1. プロセッサに結合されたメモリにおけるデータにアクセスするための方法であって、
    前記メモリ中のあるアドレスにおける第1のサイズのデータにアクセスするためのメモリ参照命令を受け取るステップと、
    前記プロセッサによって、前記アドレスのアライメント・サイズを決定するステップと、
    ブロック同時的にデータの各グループにアクセスすることにより、データの1以上のグループ単位で前記第1のサイズの前記データにアクセスするステップであって、データの前記グループは、前記アライメント・サイズの倍数であるサイズを有する、前記ステップと、
    を含む方法。
  2. 前記第1のサイズは前記決定されたアライメント・サイズよりも大きい、請求項1に記載の方法。
  3. 前記アライメント・サイズを決定する前記ステップは、バイナリ表現での前記アドレスにおける後置ゼロの個数を数えるステップを含む、請求項1に記載の方法。
  4. データの各グループは、予め定義された最大ブロック同時性サイズよりも大きくない、請求項1に記載の方法。
  5. 前記メモリ参照命令のオペコードに基づき前記第1のサイズを決定するステップをさらに含む、請求項1に記載の方法。
  6. データにアクセスするためのシステムであって、
    メモリと、
    プロセッサと、を備え、前記プロセッサは、
    前記メモリ中のあるアドレスにおける第1のサイズのデータにアクセスするためのメモリ参照命令を受け取るステップと、
    前記アドレスのアライメント・サイズを決定するステップと、
    ブロック同時的にデータの各グループにアクセスすることにより、データの1以上のグループ単位で前記第1のサイズの前記データにアクセスするステップであって、データの前記グループは、前記アライメント・サイズの倍数であるサイズを有する、前記ステップと、
    を含む方法を実行するように構成された、システム。
  7. 前記第1のサイズと前記決定されたアライメント・サイズとはバイト数としてのサイズであり、前記第1のサイズは2であり、前記決定されたアライメント・サイズは2であり、Aは、非負整数であるBよりも大きい整数である、請求項6に記載のシステム。
  8. 前記アライメント・サイズを決定する前記ステップは、バイナリ表現での前記アドレスにおける後置ゼロの個数を数えるステップを含む、請求項6に記載のシステム。
  9. データの各グループは、予め定義された最大ブロック同時性サイズよりも大きくない、請求項6に記載のシステム。
  10. 前記プロセッサはベクトル・プロセッサを含み、前記メモリ参照命令はベクトル命令を含む、請求項6に記載のシステム。
  11. データにアクセスするためのコンピュータ・プログラム製品であって、
    マシン命令が具現化されているコンピュータ可読記憶媒体を備え、前記マシン命令は、プロセッサによって読み出し可能であり、前記プロセッサに、
    メモリ中のあるアドレスにおける第1のサイズのデータにアクセスするためのメモリ参照命令を受け取るステップと、
    前記アドレスのアライメント・サイズを決定するステップと、
    ブロック同時的にデータの各グループにアクセスすることにより、データの1以上のグループ単位で前記第1のサイズの前記データにアクセスするステップであって、データの前記グループは、前記アライメント・サイズの倍数であるサイズを有する、前記ステップと、
    を含む方法を実行させる、コンピュータ・プログラム製品。
  12. 前記第1のサイズは前記決定されたアライメント・サイズよりも大きい、請求項11に記載のコンピュータ・プログラム製品。
  13. 前記アライメント・サイズを決定する前記ステップは、バイナリ表現での前記アドレスにおける後置ゼロの個数を数えるステップを含む、請求項11に記載のコンピュータ・プログラム製品。
  14. データの各グループは、予め定義された最大ブロック同時性サイズよりも大きくない、請求項11に記載のコンピュータ・プログラム製品。
  15. 前記方法が、前記メモリ参照命令のオペコードに基づき前記第1のサイズを決定するステップをさらに含む、請求項11に記載のコンピュータ・プログラム製品。
  16. プロセッサに結合されたメモリにおけるデータにアクセスするための方法であって、
    前記メモリ中のあるアドレスにおける第1のサイズのデータにアクセスするためのメモリ参照命令を受け取るステップであって、前記メモリ参照命令が前記第1のサイズを特定する、前記ステップと、
    前記プロセッサによって、前記アドレスのアライメント・サイズを決定するステップと、
    前記第1のサイズと前記決定されたアライメント・サイズとの最大公約数を決定するステップと、
    データの1以上のグループ単位で前記第1のサイズの前記データにアクセスするステップであって、データの前記グループは、前記最大公約数のサイズの倍数であるサイズを有する、前記ステップと、
    を含む方法。
  17. 前記第1のサイズは前記決定されたアライメント・サイズよりも大きい、請求項16に記載の方法。
  18. 前記第1のサイズと前記決定されたアライメント・サイズとはバイト数としてのサイズであり、前記第1のサイズは2の累乗のサイズではなく、前記決定されたアライメント・サイズは2の累乗のサイズである、請求項16に記載の方法。
  19. 前記メモリ参照命令のオペランドに基づき前記第1のサイズを決定するステップをさらに含む、請求項16に記載の方法。
  20. 前記第1のサイズの前記データにアクセスする前記ステップは、前記最大公約数が予め定義された最大ブロック同時性サイズよりも大きくないときに実行される、請求項16に記載の方法。
  21. データにアクセスするためのシステムであって、
    メモリと、
    プロセッサと、を備え、前記プロセッサは、
    前記メモリ中のあるアドレスにおいて第1のサイズを有するデータ空間にアクセスするためのメモリ参照命令を受け取るステップであって、前記メモリ参照命令が、前記第1のサイズを特定する、前記ステップと、
    前記アドレスのアライメント・サイズを決定するステップと、
    前記第1のサイズと前記決定されたアライメント・サイズとの最大公約数を決定するステップと、
    データの1以上のグループ単位で前記第1のサイズの前記データにアクセスするステップであって、データの前記グループは、前記最大公約数のサイズの倍数であるサイズを有する、前記ステップと、
    を含む方法を実行するように構成された、システム。
  22. 前記第1のサイズは前記決定されたアライメント・サイズよりも大きい、請求項21に記載のシステム。
  23. 前記第1のサイズと前記決定されたアライメント・サイズとはバイト数としてのサイズであり、前記第1のサイズは2の累乗のサイズではなく、前記決定されたアライメント・サイズは2の累乗のサイズである、請求項21に記載のシステム。
  24. 前記方法が、前記メモリ参照命令のオペランドに基づき前記第1のサイズを決定するステップをさらに含む、請求項21に記載のシステム。
  25. 前記プロセッサはベクトル・プロセッサを含み、前記メモリ参照命令はベクトル命令を含む、請求項21に記載のシステム。
  26. データにアクセスするためのコンピュータ・プログラム製品であって、
    マシン命令が具現化されているコンピュータ可読記憶媒体を備え、前記マシン命令は、プロセッサによって読み出し可能であり、前記プロセッサに、
    メモリ中のあるアドレスにおいて第1のサイズを有するデータ空間にアクセスするためのメモリ参照命令を受け取るステップであって、前記メモリ参照命令が、前記第1のサイズを特定する、前記ステップと、
    前記アドレスのアライメント・サイズを決定するステップと、
    前記第1のサイズと前記決定されたアライメント・サイズとの最大公約数を決定するステップと、
    データの1以上のグループ単位で前記第1のサイズの前記データにアクセスするステップであって、データの前記グループは、前記最大公約数のサイズの倍数であるサイズを有する、前記ステップと、
    を含む方法を実行させる、コンピュータ・プログラム製品。
JP2017526876A 2014-12-04 2015-10-30 メモリにおけるデータにアクセスするための方法、システム、およびコンピュータ・プログラム Active JP6664105B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/560,486 2014-12-04
US14/560,486 US9582413B2 (en) 2014-12-04 2014-12-04 Alignment based block concurrency for accessing memory
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 true JP2018501554A (ja) 2018-01-18
JP6664105B2 JP6664105B2 (ja) 2020-03-13

Family

ID=54366218

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017526876A Active JP6664105B2 (ja) 2014-12-04 2015-10-30 メモリにおけるデータにアクセスするための方法、システム、およびコンピュータ・プログラム

Country Status (14)

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

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
WO2019055738A1 (en) * 2017-09-15 2019-03-21 MIPS Tech, LLC MEMORY ACCESS NOT ALIGNED
WO2020037542A1 (zh) * 2018-08-22 2020-02-27 深圳市大疆创新科技有限公司 数据指令处理方法、存储芯片、存储系统和可移动平台
FR3093571B1 (fr) * 2019-03-08 2021-03-19 Commissariat Energie Atomique Procédé et dispositif de représentation en virgule flottante avec précision variable
US11036506B1 (en) * 2019-12-11 2021-06-15 Motorola Solutions, Inc. Memory systems and methods for handling vector data
CN111338997B (zh) * 2020-03-05 2021-07-20 苏州浪潮智能科技有限公司 一种arm服务器bios支持tcm通信的方法、装置、设备和介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060010304A1 (en) * 2003-08-19 2006-01-12 Stmicroelectronics Limited Systems for loading unaligned words and methods of operating the same
JP2010529545A (ja) * 2007-06-05 2010-08-26 インターナショナル・ビジネス・マシーンズ・コーポレーション メモリ割り当ての機構
JP2011150712A (ja) * 2005-02-17 2011-08-04 Qualcomm Inc 非アラインドメモリアクセス予測

Family Cites Families (25)

* 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
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
RU2281546C1 (ru) * 2005-06-09 2006-08-10 Бурцева Тамара Андреевна Способ обработки информации на основе потока данных и устройство для его осуществления
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
US7725659B2 (en) * 2007-09-05 2010-05-25 International Business Machines Corporation Alignment of cache fetch return data relative to a thread
CN101290589B (zh) 2007-12-27 2010-06-16 华为技术有限公司 一种并发指令操作方法和装置
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 (ja) * 2009-11-04 2014-01-08 富士通株式会社 メモリ管理機能を有するプログラム及び装置
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 (zh) 2011-12-14 2018-05-15 英特尔公司 用于生成循环对齐计数或循环对齐掩码的系统、装置和方法
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
US9459868B2 (en) 2012-03-15 2016-10-04 International Business Machines Corporation Instruction to load data up to a dynamically determined memory boundary
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
US9582413B2 (en) 2014-12-04 2017-02-28 International Business Machines Corporation Alignment based block concurrency for accessing memory

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060010304A1 (en) * 2003-08-19 2006-01-12 Stmicroelectronics Limited Systems for loading unaligned words and methods of operating the same
JP2011150712A (ja) * 2005-02-17 2011-08-04 Qualcomm Inc 非アラインドメモリアクセス予測
JP2010529545A (ja) * 2007-06-05 2010-08-26 インターナショナル・ビジネス・マシーンズ・コーポレーション メモリ割り当ての機構

Also Published As

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

Similar Documents

Publication Publication Date Title
CN109213522B (zh) 远程原子操作指令
KR102449616B1 (ko) 벡터 요소 세트에 대해 축소 연산을 수행하기 위한 방법 및 장치
KR101703743B1 (ko) 가속된 레인 간 벡터 감축 명령어들
JP6711480B2 (ja) ベクトルインデックスロードおよびストアのための方法および装置
US10579514B2 (en) Alignment based block concurrency for accessing memory
KR101817459B1 (ko) 1들을 최하위 비트들이 되도록 풀링하면서 비트들을 좌측으로 시프팅하기 위한 명령어
BR102013032654A2 (pt) instruções e lógica para vetorizar laços condicionais
KR101966713B1 (ko) 마스크 레지스터에서의 비트들을 반전 및 치환하기 위한 장치 및 방법
BR102014006231A2 (pt) equipamento de processamento de instruções, método dentro de um processador, sistema para processar instruções e artigo de manufatura
JP2017538213A (ja) アウトオブオーダーハードウェアソフトウェア協調設計プロセッサにおいてスタック同期命令を用いてプレディケート値のスタックを実装し維持する方法および装置
JP2018500652A (ja) マスクをマスク値のベクトルに拡張するための方法および装置
KR101624786B1 (ko) 기입마스크 레지스터의 트레일링 최하위 마스킹 비트를 결정하는 시스템, 장치, 및 방법
BR102016012096A2 (pt) Hardware apparatus to improve performance of state dependent computers
JP2017513087A (ja) 連続ソースエレメントを複数のマスクされていない結果エレメントにストアすると共に、複数のマスクされた結果エレメントに伝搬するプロセッサ、方法、システム、及び命令
JP2017538215A (ja) 逆分離演算を実行するための命令及びロジック
KR102321941B1 (ko) 스핀-루프 점프를 수행하기 위한 장치 및 방법
HK1237091A1 (en) Method for accessing data in a memory at an unaligned address
HK1237091B (zh) 用於存取存儲器中在未對準的地址處的數據的方法

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