(57)【特許請求の範囲】
【請求項１】
プロセッサに結合されたメモリにおけるデータにアクセスするための方法であって、
メモリ参照命令によって特定される第１のサイズであって、前記メモリ中のあるアドレスにおける第１のサイズのデータにアクセスするためのメモリ参照命令を受け取るステップと、
前記プロセッサによって、前記アドレスのアライメント・サイズを該アドレスに基づき決定するステップと、
データの１以上のグループ単位で前記第１のサイズの前記データにアクセスするステップであって、データの前記グループは、前記アライメント・サイズの倍数である任意のサイズを有する、前記ステップと、を含む方法。
【請求項２】
前記決定されたアライメント・サイズは前記第１のサイズよりも小さい、請求項１に記載の方法。
【請求項３】
前記アライメント・サイズを決定する前記ステップは、バイナリ表現での前記アドレスにおける後置ゼロの個数をＮとして、前記アライメント・サイズを２のＮ乗として決定するステップを含む、請求項１に記載の方法。
【請求項４】
データの各グループは、予め定義された最大ブロック同時性サイズよりも大きくない、請求項１に記載の方法。
【請求項５】
前記メモリ参照命令のオペコードに基づき前記第１のサイズを決定するステップをさらに含む、請求項１に記載の方法。
【請求項６】
データにアクセスするためのシステムであって、
メモリと、
プロセッサと、を備え、前記プロセッサは、
メモリ参照命令によって特定される第１のサイズであって、前記メモリ中のあるアドレスにおける第１のサイズのデータにアクセスするためのメモリ参照命令を受け取るステップと、
前記アドレスのアライメント・サイズを該アドレスに基づき決定するステップと、
データの１以上のグループ単位で前記第１のサイズの前記データにアクセスするステップであって、データの前記グループは、前記アライメント・サイズの倍数である任意のサイズを有する、前記ステップと、
を含む方法を実行するように構成された、システム。
【請求項７】
前記第１のサイズと前記決定されたアライメント・サイズとはバイト数としてのサイズであり、前記第１のサイズは２Ａであり、前記決定されたアライメント・サイズは２Ｂであり、Ｂは、整数であるＡよりも小さい非負整数である、請求項６に記載のシステム。
【請求項８】
前記アライメント・サイズを決定する前記ステップは、バイナリ表現での前記アドレスにおける後置ゼロの個数をＮとして、前記アライメント・サイズを２のＮ乗として決定するステップを含む、請求項６に記載のシステム。
【請求項９】
データの各グループは、予め定義された最大ブロック同時性サイズよりも大きくない、請求項６に記載のシステム。
【請求項１０】
前記プロセッサはベクトル・プロセッサを含み、前記メモリ参照命令はベクトル命令を含む、請求項６に記載のシステム。
【請求項１１】
データにアクセスするためのコンピュータ・プログラムであって、
プロセッサに、
メモリ参照命令によって特定される第１のサイズであって、メモリ中のあるアドレスにおける第１のサイズのデータにアクセスするためのメモリ参照命令を受け取るステップと、
前記アドレスのアライメント・サイズを該アドレスに基づき決定するステップと、
データの１以上のグループ単位で前記第１のサイズの前記データにアクセスするステップであって、データの前記グループは、前記アライメント・サイズの倍数である任意のサイズを有する、前記ステップと、
を含む方法を実行させる、コンピュータ・プログラム。
【請求項１２】
前記決定されたアライメント・サイズは前記第１のサイズよりも小さい、請求項１１に記載のコンピュータ・プログラム。
【請求項１３】
前記アライメント・サイズを決定する前記ステップは、バイナリ表現での前記アドレスにおける後置ゼロの個数をＮとして、前記アライメント・サイズを２のＮ乗として決定するステップを含む、請求項１１に記載のコンピュータ・プログラム。
【請求項１４】
データの各グループは、予め定義された最大ブロック同時性サイズよりも大きくない、請求項１１に記載のコンピュータ・プログラム。
【請求項１５】
前記方法が、前記メモリ参照命令のオペコードに基づき前記第１のサイズを決定するステップをさらに含む、請求項１１に記載のコンピュータ・プログラム。
【請求項１６】
プロセッサに結合されたメモリにおけるデータにアクセスするための方法であって、
前記メモリ中のあるアドレスにおける第１のサイズのデータにアクセスするためのメモリ参照命令を受け取るステップであって、前記メモリ参照命令が前記第１のサイズを特定する、前記ステップと、
前記プロセッサによって、前記アドレスのアライメント・サイズを該アドレスに基づき決定するステップと、
前記第１のサイズと前記決定されたアライメント・サイズとの最大公約数を決定するステップと、
データの１以上のグループ単位で前記第１のサイズの前記データにアクセスするステップであって、データの前記グループは、前記最大公約数のサイズの倍数である任意のサイズを有する、前記ステップと、
を含む方法。
【請求項１７】
前記決定されたアライメント・サイズは前記第１のサイズよりも小さい、請求項１６に記載の方法。
【請求項１８】
前記第１のサイズと前記決定されたアライメント・サイズとはバイト数としてのサイズであり、前記第１のサイズは２の累乗のサイズではなく、前記決定されたアライメント・サイズは２の累乗のサイズである、請求項１６に記載の方法。
【請求項１９】
前記メモリ参照命令のオペランドに基づき前記第１のサイズを決定するステップをさらに含む、請求項１６に記載の方法。
【請求項２０】
前記第１のサイズの前記データにアクセスする前記ステップは、前記最大公約数が予め定義された最大ブロック同時性サイズよりも大きくないときに実行される、請求項１６に記載の方法。
【請求項２１】
データにアクセスするためのシステムであって、
メモリと、
プロセッサと、を備え、前記プロセッサは、
前記メモリ中のあるアドレスにおいて第１のサイズを有するデータ空間にアクセスするためのメモリ参照命令を受け取るステップであって、前記メモリ参照命令が、前記第１のサイズを特定する、前記ステップと、
前記アドレスのアライメント・サイズを該アドレスに基づき決定するステップと、
前記第１のサイズと前記決定されたアライメント・サイズとの最大公約数を決定するステップと、
データの１以上のグループ単位で前記第１のサイズの前記データにアクセスするステップであって、データの前記グループは、前記最大公約数のサイズの倍数である任意のサイズを有する、前記ステップと、
を含む方法を実行するように構成された、システム。
【請求項２２】
前記決定されたアライメント・サイズは前記第１のサイズよりも小さい、請求項２１に記載のシステム。
【請求項２３】
前記第１のサイズと前記決定されたアライメント・サイズとはバイト数としてのサイズであり、前記第１のサイズは２の累乗のサイズではなく、前記決定されたアライメント・サイズは２の累乗のサイズである、請求項２１に記載のシステム。
【請求項２４】
前記方法が、前記メモリ参照命令のオペランドに基づき前記第１のサイズを決定するステップをさらに含む、請求項２１に記載のシステム。
【請求項２５】
前記プロセッサはベクトル・プロセッサを含み、前記メモリ参照命令はベクトル命令を含む、請求項２１に記載のシステム。
【請求項２６】
データにアクセスするためのコンピュータ・プログラムであって、
プロセッサに、
メモリ中のあるアドレスにおいて第１のサイズを有するデータ空間にアクセスするためのメモリ参照命令を受け取るステップであって、前記メモリ参照命令が、前記第１のサイズを特定する、前記ステップと、
前記アドレスのアライメント・サイズを該アドレスに基づき決定するステップと、
前記第１のサイズと前記決定されたアライメント・サイズとの最大公約数を決定するステップと、
データの１以上のグループ単位で前記第１のサイズの前記データにアクセスするステップであって、データの前記グループは、前記最大公約数のサイズの倍数である任意のサイズを有する、前記ステップと、
を含む方法を実行させる、コンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、一般に、プロセッサによるメモリへのアクセスに関し、さらに詳しくは、メモリにおけるデータのブロックに、プロセッサによって、原子的に（atomically）すなわちブロック同時的（block concurrently）に、アクセスすることに関する。
【背景技術】
【０００２】
スカラ・コードは、そのコードを実行する中央処理装置（ＣＰＵ）が、ソフトウェア変数の全バイトに、全体としてアクセスすることを期待する。ＣＰＵのための典型的なアーキテクチャでは、アクセスされるデータのサイズの整数倍であるメモリの境界に対してアクセスが実行される場合に限り、スカラ・コードのためのそのような期待が満たされる。スカラ・コードがコンパイラによってベクトル化されるときには、ロードおよびストア命令は、ベクトルのロードおよびストア命令に変換されることが多い。しかし、ベクトルのロード命令とベクトルのストア命令とは、一貫性の保証を有しないことが多く、すなわち、ベクトルのロードまたはストア命令がＣＰＵにおけるベクトル・レジスタのサイズである境界の上にある場合にだけ、一貫性が保証される。原子的でもブロック同時的でもないアクセスについては、あるＣＰＵがデータを書き込み、それと同時に別のＣＰＵがデータを読み出す場合に、データを読み出しつつあるＣＰＵは、後者のＣＰＵの変数を含むメモリ位置への部分的更新を見ることがあり得る。これは、ほとんどのプログラミング言語のセマンティクスとの、または、ロックフリーなデータ構造などのプログラミング技術との一貫性を有しない。
【先行技術文献】
【非特許文献】
【０００３】
【非特許文献１】z/Architecture Principles ofOperation, SA22-7832-09 (10th ed. Sept. 2012)
【非特許文献２】Power ISA (Version 2.06 RevisionB, Jul. 2010)
【発明の概要】
【発明が解決しようとする課題】
【０００４】
メモリにおけるデータにアクセスするための方法、システム、およびコンピュータ・プログラムを提供する。
【課題を解決するための手段】
【０００５】
実施形態は、メモリにおけるデータにアクセスするための方法、システム、およびコンピュータ・プログラム製品を含む。本発明のある実施形態によると、プロセッサに結合されたメモリにおけるデータにアクセスするための方法が提供される。この方法は、メモリ中のあるアドレスにおける第１のサイズのデータにアクセスするためのメモリ参照命令を受け取る。この方法は、上記アドレスのアライメント・サイズを決定する。この方法は、ブロック同時的にデータの各グループにアクセスすることにより、データの１１以上のグループ単位で上記第１のサイズのデータにアクセスする。上記データのグループは、アライメント・サイズの倍数であるサイズを有する。
【０００６】
本発明の別の実施形態によると、データにアクセスするためのシステムが提供される。このシステムは、メモリと、ある方法を実行するように構成されたプロセッサとを備える。この方法は、メモリ中のあるアドレスにおける第１のサイズのデータにアクセスするためのメモリ参照命令を受け取る。この方法は、上記アドレスのアライメント・サイズを決定する。この方法は、ブロック同時的に、データの各グループにアクセスすることにより、データの１以上のグループ単位で第１のサイズのデータにアクセスする。上記データのグループは、上記アライメント・サイズの倍数であるサイズを有する。
【０００７】
本発明のさらなる実施形態によると、メモリにおけるデータにアクセスするためのコンピュータ・プログラム製品が提供される。このコンピュータ・プログラム製品は、マシン命令が具現化されているコンピュータ可読記憶媒体を備える。プロセッサによって読み出し可能であるこのマシン命令は、プロセッサに、ある方法を実行させる。この方法は、メモリ中のあるアドレスにおける第１のサイズのデータにアクセスするためのメモリ参照命令を受け取る。この方法は、上記アドレスのアライメント・サイズを決定する。この方法は、ブロック同時的に、データの各グループにアクセスすることにより、データの１以上のグループ単位で第１のサイズのデータにアクセスする。上記データのグループは、上記アライメント・サイズの倍数であるサイズを有する。
【０００８】
本発明のさらなる実施形態によると、データにアクセスするためのシステムが提供される。このシステムは、メモリと、ある方法を実行するように構成されたプロセッサとを備える。この方法は、メモリ中のあるアドレスにおける第１のサイズのデータにアクセスするためのメモリ参照命令を受け取る。このメモリ参照命令は、第１のサイズを特定する。この方法は、上記アドレスのアライメント・サイズを決定する。この方法は、第１のサイズと決定された上記アライメント・サイズとの最大公約数を決定する。この方法は、データの１以上のグループ単位で上記第１のサイズのデータにアクセスする。データのグループは、最大公約数のサイズの倍数であるサイズを有する。
【０００９】
本発明のさらなる実施形態によると、メモリにおけるデータにアクセスするためのコンピュータ・プログラム製品が提供される。このコンピュータ・プログラム製品は、マシン命令が具現化されているコンピュータ可読記憶媒体を備える。プロセッサによって読み出し可能であるこのマシン命令は、プロセッサに、ある方法を実行させる。この方法は、メモリ中のあるアドレスにおける第１のサイズのデータにアクセスするためのメモリ参照命令を受け取る。このメモリ参照命令は、上記第１のサイズを特定する。この方法は、上記アドレスのアライメント・サイズを決定する。この方法は、上記第１のサイズと決定された上記アライメント・サイズとの最大公約数を決定する。この方法は、データの１以上のグループ単位で上記第１のサイズのデータにアクセスする。データの上記グループは、最大公約数のサイズの倍数であるサイズを有する。
【００１０】
実施形態として見なされる主題は、本明細書の結論部分に置かれている特許請求の範囲において、特に指摘され、明確に特許請求されている。実施形態の以上のおよびそれ以外の特徴と効果とは、次の添付の図面と共に読まれるべき以下の詳細な説明から、明らかである。
【図面の簡単な説明】
【００１１】
【図１】本発明のいくつかの実施形態に従って自然にアラインされたブロックを有するメモリの一部の図解である。
【図２】本発明のいくつかの実施形態に従ってアクセスされたメモリの一部の図である。
【図３】本発明のいくつかの実施形態に従ってメモリにアクセスするためのプロセス・フロー図である。
【図４】本発明のいくつかの実施形態に従ってメモリにアクセスするためのプロセス・フロー図である。
【図５】本発明のいくつかの実施形態に従ってメモリにおけるデータにアクセスするシステムの図解である。
【発明を実施するための形態】
【００１２】
いくつかのプログラミング言語の規約は、メモリにおけるデータのブロック（たとえば、整数、フロート、ロング、ダブルなど、ネイティブな型の変数）の全バイトが、プロセッサ（たとえば、中央処理装置（ＣＰＵ））によって、同時にアクセスされることを要求する。あるブロックのバイトが同時にアクセスされるとは、元の値または更新された値のいずれか一方がアクセスされ、２つの値の混合物はアクセスされない、ということを意味する。たとえば、データのブロックが値「１２３４」を有しており、この値が「５６７８」に更新されつつあるときには、これらの２つの値の一方だけがフェッチすべき正しい値である。非同時的にデータのブロックにアクセスすることの結果として生じ得る、部分的に更新されたどのような値（たとえば、「１２７８」または「５６３４」）も、フェッチすべき正しい値ではない。この同時的アクセス要求は、本開示において「ブロック同時性」と称される。また、「ブロック同時的に」メモリにアクセスする、または、「ブロック同時的な」メモリへのアクセスとは、メモリにおけるデータがアクセスされる態様がブロック同時性を満たすことを意味する。従来型のプログラミング言語およびプロセッサでは、データのブロックへのブロック同時的なアクセスは、そのブロックが「自然にアラインされている」ときにだけ、すなわち、ブロックのアドレスがブロックのデータ型サイズの倍数に対応するときにだけ、保証される。
【００１３】
２、４、８、１６、および３２バイトのフィールドには、特別な名称が与えられる。ハーフワードとは、連続する２バイトのグループである。ワードとは、連続する４バイトのグループである。ダブルワードとは、連続する８バイトのグループである。クワドワードとは、連続する１６バイトのグループである。オクトワードとは、連続する３２バイトのグループである。メモリ・アドレスが「自然にアラインされた」ハーフワード、ワード、ダブルワード、クワドワード、およびオクトワードを指定するときには、そのアドレスのバイナリ表現は、１、２、３、４、および５個の右端ゼロ・ビットをそれぞれ含む。ハーフワード、ワード、ダブルワード、またはクワドワードは、本開示では、ブロックと称される。
【００１４】
メモリにおけるデータを参照するいくつかの命令については、他のプロセッサとチャネル・プログラムとによる観察として、ブロック同時的であると見えるようにするために、ハーフワード、ワード、ダブルワード、またはクワドワードにおける全バイトへのアクセスが、特定される。あるブロック内部で同時的であると見えるようにするためにフェッチ・タイプの参照が特定されると、あるプロセッサによってそのブロックに含まれるバイトがフェッチされている間は、別のプロセッサまたはチャネル・プログラムによるそのブロックへのストア・アクセスは許されない。あるブロック内部で同時的であると見えるようにするためにストア・タイプの参照が特定されると、あるプロセッサによってそのブロック内部のバイトが記憶されている間は、別のプロセッサまたはチャネル・プログラムによるそのブロックへのアクセスは、フェッチ・タイプまたはストア・タイプのいずれも、許されない。従来型の命令セット・アーキテクチャによると、単一オペランドの参照（たとえば、単一の値が単一のレジスタにロードされる、または、単一のオペランドが１つの命令によって用いられる）は、オペランドにおいて特定されたアドレスが整数境界（integral boundary）にある場合には、そのオペランド・サイズ（すなわち、アクセスされているデータのサイズ）に対応するブロック同時性を有する。オペランドにおいて特定されたアドレスが整数境界にない場合には、そのオペランドは、１バイトのサイズだけと対応する、ブロック同時的である。
【００１５】
従来型のプロセッサでは、１バイトのうちの８ビット全部が常に全体として参照されるが、これは、バイト同時性と称される。したがって、ブロック同時性は、異なるレベルのバイト同時性を表す。たとえば、４バイトのデータ・ブロックに対するブロック同時性は、４バイト同時性と称され得る。さらに、メモリが４バイト同時性をもってアクセスされるときには、４バイトのデータ・ブロックの４バイト全部が１つの単位として同時にアクセスされるから、２つの２バイト・データ・ブロックと４つの１バイト・データ・ブロックとは、それぞれ、２バイト同時的および１バイト同時的である。
【００１６】
ブロック同時的なメモリ動作は、メモリ参照に関する原子動作とも称される。メモリ参照は、他のプロセッサから見て、整数ブロック内部のすべてのバイトが一単位としてアクセスされる場合に、ブロック同時的と考えられる。整数ブロックとは、そのアドレスがブロックの長さの整数倍であるようなデータのブロックである。整数ブロックは、整数境界上にあり、そのブロックの第１のバイトのアドレスは、整数境界にある。
【００１７】
図１は、「自然にアラインされた」ブロックを指定するアドレスを有するメモリの部分を図解している。特に、この図は、「自然にアラインされた」ハーフワード、ワード、ダブルワード、クワドワード、およびオクトワードをそれぞれ表すバー１０２〜１１２を示している。図解されているように、メモリは、ビットの長い水平方向のストリングとして見られる。ビットのストリングは、バイトの単位（すなわち、８ビット）に、さらに分割される。メモリにおける各バイト位置は、一意的な非負整数によって識別されるのであるが、この一意的な非負整数が、そのバイト位置のアドレスである。
【００１８】
バー１０２は、１バイト・データのブロックを有するメモリを表す。バー１０２における各矩形は、１バイト・データのブロックを表す。各矩形に含まれる数字は、（オフセット０というラベル付けされた第１の要素のアドレスに対応する）ベース・アドレスからのバイト・ブロックのオフセットである。各バイトは、アドレスとそれからのオフセットとを用いて、アクセスされ得る（すなわち、メモリからフェッチされる、または、メモリにストアされる）。いくつかの実施形態では、メモリは、少なくともバイト・レベルではブロック同時的にアクセスされる（すなわち、バイト同時的）。さらに、アクセスされているデータの第１のバイトのアドレスが、より大きいブロック・サイズのための整数境界である場合には、より大きいブロックへのアクセスは、そのブロック・サイズに関して同様にブロック同時的であり得る。
【００１９】
バー１０４は、自然にアラインされている２バイト・データのブロックを有するメモリを表す。２バイト・ブロックのそれぞれは、２の倍数を用いてアドレス指定されており、２バイト・データ・ブロックのすべてが整数ブロックであり、２バイトのブロック・サイズを用いて、ブロック同時的にアクセスされ得る。同様に、バー１０６における４バイト・データ・ブロック、バー１０８における８バイト・データ・ブロック、バー１１０における１６バイト・データ・ブロック、バー１１２における３２バイト・データ・ブロックは、すべてが整数ブロックであり、これらのデータ・ブロックへのアクセスは、４バイト、８バイト、１６バイト、および３２バイトのブロックに関して、ブロック同時的に実行され得る。
【００２０】
この開示では、メモリ・アドレスのアドレス・アライメント・サイズは、そのアドレスによってアドレス指定可能な最大の整数ブロックのサイズ、すなわち、２の累乗であるそのアドレスの最大の約数である。たとえば、アドレス９６のアドレス・アライメント・サイズは３２（すなわち、２５）であり、アドレス６４のアドレス・アライメント・サイズは、６４（すなわち、２６）である。いくつかの実施形態では、アドレスに対するアドレス・アライメント・サイズは、バイナリ表現でのアドレスの後置ゼロを数え、次に、バイナリ表現で２の後置ゼロ乗を作成することによって、得られるのであって、すなわち、ａｌｉｇｎｍｅｎｔ＿ｓｉｚｅ（ａｄｄｒｅｓｓ）＝２ｔｒａｉｌｉｎｇ＿ｚｅｒｏｓ（ａｄｄｒｅｓｓ）であり、ここで、ａｌｉｇｎｍｅｎｔ＿ｓｉｚｅ（）は、アドレスを入力すると、入力アドレスのアドレス・アライメント・サイズを出力する関数であり、ｔｒａｉｌｉｎｇ＿ｚｅｒｏｓ（）は、アドレスを入力すると、そのアドレスにおける後置ゼロの個数をバイナリ表現で出力する関数である。たとえば、アドレス９６は、１１０００００２であり、これは、５つの後置ゼロを有する。したがって、アドレス９６のアドレス・アライメント・サイズは、２５すなわち３２である。アドレス６４は、１００００００２であり、これは、６つの後置ゼロを有する。したがって、アドレス６４のアドレス・アライメント・サイズは、２６すなわち６４である。
【００２１】
従来型のメモリ参照命令については、ブロック同時性は、参照されているデータのブロックの第１のバイトのアドレスが、メモリ参照サイズに対して整数的であるかどうか（すなわち、第１のバイトのアドレスがメモリ参照サイズの倍数であるかどうか、または、アドレス・アライメント・サイズがメモリ参照サイズ以上であるかどうか）に依存する。すなわち、従来型のメモリ参照命令の場合のブロック同時性は、命令によって参照されているデータのブロックがメモリ参照サイズと同じアドレス・アライメント・サイズを有するかどうかに依存する。たとえば、従来型のメモリ参照命令が８バイトの整数境界上の８バイトのデータを参照する場合には（たとえば、バー１０８によって表されているメモリの一部に示されているアドレス０、８、１６、２４など）、それは、８バイト同時的である。しかし、従来型のメモリ参照命令が４バイトの整数境界上の８バイトのデータを参照する場合には（たとえば、バー１０６によって表されているメモリの一部に示されているアドレス４、１２、２０など）、８バイトの同時性は保証されない。この理由は、従来型のメモリ参照命令が４バイトの境界でアラインされているメモリにおいて、８バイトのデータ・ブロックを参照するときには、あるプロセッサがその８バイトを参照している間に、２つの４バイト・ブロックまたは４つの２バイト・ブロックが別のプロセッサによって更新されることはない、ということが保証されないからである。
【００２２】
参照されているデータのブロックのアドレスが、そのブロックを参照する命令のメモリ参照サイズに対して整数的でないときには、従来型の命令セット・アーキテクチャは、単一のレジスタにロードするまたは単一のレジスタからストアするなどの場合に、メモリ・オペランドを期待する命令にメモリからの１つのオペランドを提供するようなメモリ参照のために、ただ１バイトの同時性を保証するなどを行う。このように、ソフトウェアは、メモリ参照サイズのブロック同時性または単なる１バイトの同時性を提供する従来型のメモリ参照に依存することだけが可能である。従来型の命令セット・アーキテクチャによるメモリ参照命令による場合には、中間的なレベルのブロック同時性は保障されない。すなわち、たとえば、メモリ参照サイズが８バイトであり、参照されているデータのブロックが４バイトの境界または２バイトの境界においてアラインされているときには、１バイトの同時性（すなわち、１バイトのブロック・サイズを有するブロック同時性）だけしか提供されないのであるが、その理由は、８バイトの同時性は、整数的な８バイトのメモリ・アドレスにおける８バイト（ダブルワード）の参照に対して（すなわち、アドレスが、８バイトのデータ・サイズの倍数であるとき）だけ提供され、それ以外の場合には、１バイトの同時性が保障されるからである。
【００２３】
現代のプロセッサでは、幅の広いデータ参照（たとえば、ダブルワード、クワドワード、またはオクトワード）のためのアクセスが、より小さいデータ・サイズへの参照と同じ速度で実行され得るのが一般的である。よって、より大きいメモリ領域がアクセスされ、処理され、またはコピーされるときには、より大きいメモリ参照サイズを用いてメモリに対するアクセス、処理またはコピーあるいはこれらの組合せを行うように適応させたメモリ命令を用いて、大きい領域にアクセスし、これを処理し、またはコピーすることが望まれる。よって、たとえば、２つの連続するワードがコピーされるときには、２ワードのロードと２ワードのストアとを、単一のダブルワードのロードと単一のダブルワードのストアとによって置き換えられ得るようにすることにより、コピー動作の速度が２倍になる。２バイトの境界上における３２個の２バイトの変数のアレイがコピーされる場合には、コピーを完了するのに、３２個のハーフワードのロードと３２個のハーフワードのストアとが必要になり得る。ダブルワードのアクセスを実装するプロセッサにおいては、４つのハーフワードのアクセスのグループが、それぞれ、単一のダブルワードのアクセスによって置き換えられ得る。
【００２４】
本発明の実施形態は、そのそれぞれの（データ要素の）整数境界における各個別的なデータ要素（たとえば、４バイトであるワード・サイズ）のサイズよりも大きいデータ・サイズ（たとえば、８バイトであるダブルワード・サイズ）に対するメモリ参照を用いてそのようなデータをコピーするとき、そして、そのそれぞれの（データ要素の）整数境界（たとえば、アドレス１００２）における最初の個別的なデータ要素が、その整数境界においてアラインされている一連のデータ要素をコピーするのに用いられているアクセス・サイズに対応する、より大きいデータ・サイズの整数境界（たとえば、アドレス１０００２）においてアラインされていないときに、それらの整数アドレス（たとえば、アドレス１００２）における一連のアラインされたデータ（たとえば、ワード）を、それぞれの個別的なデータ要素におけるブロック同時性をもってコピーするための機構を提供する。
【００２５】
本発明の実施形態は、参照されているデータのブロックのアドレスがメモリ参照サイズに対して整数的でない場合でも、異なるレベルのブロック同時性を提供するシステムおよび方法を提供する。いくつかの実施形態では、命令のオペランドは、複数のブロック同時アクセスで構成されており、各ブロックは、その対応する整数境界におけるブロックに対応する。たとえば、いくつかの実施形態のメモリ参照命令が、４バイトの境界の上の８バイトのデータを参照する場合（たとえば、バー１０６によって表されたメモリの一部において示されているアドレス１００２または１１００２）には、整数的な４バイトの境界においてアラインされているそれぞれの４バイトのブロックについて、４バイトの同時性が保証される。さらに、２バイトの同時性も保証されるのであるが、その理由は、２バイトの同時性は、保証されている４バイトの同時性によって含意されるからである（すなわち、４は２の倍数であるから、整数的な４バイトの境界でアラインされているどのブロックも、整数的な２バイトの境界でもアラインされている）。同様に、メモリ参照命令が８バイトの境界を有するメモリのアドレスにおいて１６バイトのメモリ参照サイズを有する場合（たとえば、バー１０６によって表されたメモリの一部において示されているアドレス１０００２または１１０００２）には、８バイトのブロック同時性、４バイトのブロック同時性、２バイトのブロック同時性および１バイトのブロック同時性が、１６バイトのブロックを備えたそれらの整数的な８バイト、４バイト、２バイトおよび１バイトのブロックの境界においてアラインされた８バイト、４バイト、２バイトおよび１バイトのブロックに対して保証される。すなわち、アクセスされた１６バイトの参照サイズを備えたその整数境界における８バイト、４バイト、２バイト、または１バイトのブロックは、部分的に更新された値を含まないことが保証される。
【００２６】
参照されているデータのブロックのアドレスのアライメント・サイズは、単に、本発明のいくつかの実施形態のメモリ参照命令を実行しているプロセッサが提供する最小のバイト同時性レベルである。すなわち、いくつかの実施形態では、単一ブロック同時アクセスは、複数のアクセスとして、複数のそのようなアクセスがブロック同時的な振る舞いを示すことを保証するロジックと共に、実装され得る。いくつかの実施形態では、複数のブロック同時的なアクセスは、ある整数境界においてアラインされている前記複数のアクセスの各ブロックに対して、少なくともブロック同時的な振る舞いを提供する単一のアクセスとして実装される。
【００２７】
図２は、本発明のいくつかの実施形態に従いプロセッサによってアクセスされるメモリ２００の一部を図示している。特に、この図は、３２から５５のアドレスを有するメモリの一部を図解している。メモリ２００は、８バイトの境界（たとえば、キャッシュ・インターフェース・サイズ）を有する。すなわち、アドレス３２、４０、および４８が境界を備えている。
【００２８】
一例であるが、本発明のいくつかの実施形態によるメモリ参照命令は、１６バイト（すなわち、クワドワードのサイズ）のメモリ参照サイズを有しており、この１６バイトのブロックは、３４のアドレスを有する（すなわち、このブロックの最初のバイトは、メモリ２００のアドレス３４にある）。これらの１６バイトは、図２において、グレイのボックスとして図示されている。このメモリ参照命令を実行するプロセッサは、２バイトの同時性を保証しながら、１６バイトのデータにアクセスし得る。この理由は、バイナリ形式（すなわち、１０００１０２）でのアドレス３４は、後置ゼロを１つ有するため、そのアドレスが、２バイトのアライメント・サイズを有するからである。
【００２９】
いくつかの実施形態では、プロセッサは、それらのグループのどれもがメモリの境界を超えて拡がらない限り、アライメント・サイズの倍数である任意のサイズを有するグループ単位で、１６バイトのデータにアクセスし得る。たとえば、命令を実行しているプロセッサは、アドレス３４〜３７を有する４バイト、アドレス３８および３９を有する２バイト、アドレス４０〜４３を有する４バイト、アドレス４４〜４７を有する４バイト、ならびにアドレス４８および４９を有する２バイトにアクセスし得る。しかし、各グループへのアクセスは、時間を要し、パフォーマンスに影響するために、命令を実行しているプロセッサは、キャッシュ・ラインの交差を回避しながら、可能な限り少数のアクセスで、この１６バイトのデータにアクセスすることになる。特に、プロセッサは、キャッシュ・ライン・アドレス４０までのアドレス３４〜３９を有する最初の６バイトと、次のキャッシュ・ライン・アドレス４８までのアドレス４０〜４７を有する次の８バイトと、アドレス４８および４９を有する次の２バイトに、アクセスし得る。これら３回のアクセス（すなわち、６バイトのアクセス、８バイトのアクセス、および２バイトのアクセス）は、すべての１６バイトにアクセスするように、いずれかの順序で実行され得る。
【００３０】
本発明の実施形態によりメモリ参照命令を実行するプロセッサとは対照的に、メモリ２００のアドレス３４における１６バイトのデータを参照する従来型のメモリ参照命令は、１６回に至る１バイトのアクセスを用いて、この１６バイトのデータにアクセスすることになる。この理由は、従来型のメモリ参照命令の場合には、１６バイトのデータのアドレスが、メモリ参照サイズ（すなわち、１６バイト）に対して整数的ではなく、したがって、バイト同時性だけが保証されるからである。いくつかの場合には、従来型のメモリ参照命令を実行するプロセッサは、アライメント・フォールトを生じさせることなくアドレス３４〜４９を有する１６バイトにアクセスするためには、バイト・アドレス３２、３３および５０〜５５に、意味のないバイトを詰めなくてはならないことがあり得る。これらの余分なステップは、パフォーマンスに影響し得る。
【００３１】
以下のコードの例は、そうではないと断らない限り、ＩＢＭ（商標）のｚ／アーキテクチャによる例示的な命令に基づいて特定されている。しかし、当業者であれば、本明細書における例を、パワーＩＳＡアーキテクチャなど、他のアーキテクチャにどのように適合させるべきかを理解するであろう。ＩＢＭシステムのｚサーバ・ファミリの命令セットは、ｚ／アーキテクチャ命令セットとして知られるが、ＩＢＭの刊行物であるz/Architecture Principles of Operation, SA22-7832-09 (10th ed. Sept.2012)において、与えられている。パワー・サーバの命令セットは、パワーＩＳＡ（命令セット・アーキテクチャ）として知られるが、Power ISA (Version 2.06 Revision B, Jul. 2010)において与えられている。
【００３２】
以下の例示的なｚ／アーキテクチャの命令（例１）では、１６個のハーフワードのロードおよびストアのコピー・ループが示されている。
ＬＨＩ  Ｒ１，  １６
ＸＧＲ  Ｒ３，  Ｒ３
ＬＯＯＰ：          ＬＬＨ  Ｒ２，０（Ｒ３，Ｒ４）
ＳＴＨ  Ｒ２，０（Ｒ３，Ｒ５）
ＡＧＨＩ  Ｒ３，２
ＢＣＴ  Ｒ１，ＬＯＯＰ
ここで、ＬＨＩはロード・ハーフワード・イミディエット（ＬＯＡＤ  ＨＡＬＦＷＯＲＤ  ＩＭＭＥＤＩＡＴＥ）命令であり、ＸＧＲは排他的ＯＲ（ＥＸＣＬＵＳＩＶＥ  ＯＲ）命令であり、ＬＬＨはロード論理ハーフワード（ＬＯＡＤ  ＬＯＧＩＣＡＬ  ＨＡＬＦＷＯＲＤ）命令であり、ＳＴＨはストア・ハーフワード（ＳＴＯＲＥ  ＨＡＬＦＷＯＲＤ）命令であり、ＡＧＨＩは加算ハーフワード・イミディエット（ＡＤＤ  ＨＡＬＦＷＯＲＤ  ＩＭＭＥＤＩＡＴＥ）命令であり、ＢＣＴは分岐オン・カウント（ＢＲＡＮＣＨ  ＯＮ  ＣＯＵＮＴ）命令であり、Ｒ１〜Ｒ５はレジスタである。これらの命令に関するより詳細な説明は、z/Architecture Principles of Operationに記述がある。
【００３３】
例１に示されている１６個のハーフワードのロードおよびストアは、ダブルワードの４つのロードと４つのストアとで置き換えられ得るのであって、そのように置き換えると、次の例２に示されるように、実行時間が、６６個の命令の実行に対応する時間から、１８個の命令の実行に対応する時間に短縮される。
ＬＨＩ  Ｒ１，  ４
ＸＧＲ  Ｒ３，  Ｒ３
ＬＯＯＰ：          ＬＧ  Ｒ２，０（Ｒ３，Ｒ４）
ＳＴＧ  Ｒ２，０（Ｒ３，Ｒ５）
ＡＧＨＩ  Ｒ３，８
ＢＣＴ  Ｒ１，ＬＯＯＰ
【００３４】
しかし、１６個のハーフワードをコピーすることに基づく例１は、レジスタＲ４およびＲ５に保持されるアドレスが少なくとも２のアドレス・アライメント・サイズに対応する場合の２バイトのブロック同時性と、１バイトの同時性（すなわち、ブロック・サイズが１バイトに対応するブロック同時性）とを与える。他方で、例２に示されている命令は、一般的に、レジスタＲ４およびＲ５が少なくともクワドワードのアドレス・アライメント・サイズを有する場合のクワドワードのブロック同時性と、そうでない場合のバイト同時性とを保証し得る。このように、例１から例２に命令を変換するプログラマまたはコンパイラは、例１のブロック同時性の保証を、ハーフワードのブロック同時性から、クワドワード未満であるが少なくともハーフワード・サイズのアドレス・アライメント・サイズを有するアドレスに対しては、単なるバイト同時性にまで低下させ得る。したがって、プログラマまたはコンパイラは、それ以外には有益なこの変更により、プログラミング言語またはプログラミング規約の違反を導いてしまうことになり得る。
【００３５】
別の例であるが、２バイトの境界上の３２個の２バイトの変数のアレイがコピーされる場合には、そのコピーを完了するのに、３２個のハーフワードのロードと、３２個のハーフワードのストアとが必要になり得る。本発明のいくつかの実施形態に従って一度に１６バイトをロードする、単一命令多重データ（ＳＩＭＤ）のロードが用いられる場合には、わずかに、２つのロードと２つのストアとが要求されるだけであり、コピーの実行時間を著しく短縮する。ＳＩＭＤのロードがｚ／アーキテクチャのプロセッサ上で実装されるときには、下記の例３におけるコードは、下記の例４に示されているように、２つのベクトル・ロード（ＶＥＣＴＯＲ  ＬＯＡＤ）命令とそれに続く２つのベクトル・ストア（ＶＥＣＴＯＲ  ＳＴＯＲＥ）命令とによって置き換えられ得る。
【００３６】
例３は、１６個のハーフワードのロードおよびストアのコピー・ループを示している。
ＬＨＩ  Ｒ１，  １６
ＸＧＲ  Ｒ３，  Ｒ３
ＬＯＯＰ：          ＬＬＨ  Ｒ２，０（Ｒ３，Ｒ４）
ＳＴＨ  Ｒ２，０（Ｒ３，Ｒ５）
ＡＧＨＩ  Ｒ３，２
ＢＣＴ  Ｒ１，ＬＯＯＰ
このコピー・ループは、ベクトル・レジスタの２つのロードおよび２つのストアだけによって置き換えることが可能であり、６６個の命令を実行することに対応する時間から、次の例４に示されているように、４つの命令を実行することに対応する時間に、実行時間を短縮する。
ＶＬ  Ｖ１，  ０（Ｒ４）
ＶＳＴ  Ｖ１，  ０（Ｒ５）
ＶＬ  Ｖ１，  １６（Ｒ４）
ＶＳＴ  Ｖ１，  １６（Ｒ５）
ここで、ＶＬはベクトル・ロード（ＶＥＣＴＯＲ  ＬＯＡＤ）命令であり、ＶＳＴはベクトル・ストア（ＶＥＣＴＯＲ  ＳＴＯＲＥ）命令であり、Ｖ１はベクトル・データ・タイプである。
【００３７】
しかし、従来型の命令アーキテクチャによると、１６個のハーフワードをコピーすることに基づく例３は、レジスタＲ４およびＲ５に保持されているアドレスが少なくとも２のアドレス・アライメント・サイズに対応する場合の２バイトのブロック同時性と、１バイトの同時性とを与える。他方で、例４は、一般的に、レジスタＲ４およびＲ５が少なくともクワドワードのアドレス・アライメント・サイズを有する場合のクワドワードのブロック同時性と、そうでない場合のバイト同時性とを保証し得る。このようにして、例３から例４に命令を変換するプログラマまたはコンパイラは、例３のブロック同時性保証を、ハーフワードのブロック同時性から、クワドワード未満であるが少なくともハーフワード・サイズのアドレス・アライメント・サイズを有するアドレスに対しては、単なるバイト同時性にまで低下させ得る。したがって、プログラマまたはコンパイラは、それ以外には有益なこの変更により、プログラミング言語またはプログラミング規約の違反を導いてしまうことになり得る。
【００３８】
あるアレイの複数の値が、ある定数だけインクリメントされるときには、同様の変換が行われ得る。特に、下記の例５は、１６個のハーフワードの加算ループを示している。
ＬＨＩ  Ｒ１，  １６
ＬＨ  Ｒ７，  Ｒ６
ＸＧＲ  Ｒ３，  Ｒ３
ＬＯＯＰ：          ＬＬＨ  Ｒ２，０（Ｒ３，Ｒ４）
ＡＨ  Ｒ２，  Ｒ６
ＳＴＨ  Ｒ２，０（Ｒ３，Ｒ５）
ＡＧＨＩ  Ｒ３，２
ＢＣＴ  Ｒ１，ＬＯＯＰ
ここで、ＬＨはロード・ハーフワード（ＬＯＡＤ  ＨＡＬＦＷＯＲＤ）命令であり、ＡＨは加算ハーフワード（ＡＤＤ  ＨＡＬＦＷＯＲＤ）命令であり、Ｒ６およびＲ７はレジスタである。１６個のハーフワードのこの加算ループは、ただ２つのベクトル加算で置き換えることが可能であり、その場合には、次の例６に示されるように、８３個の命令を実行することに対応する時間から、７つの命令を実行することに対応する時間まで、実行時間が短縮される。
ＶＬＲＥＰＨ  Ｖ３，  ０（Ｒ６）
ＶＬ  Ｖ１，  ０（Ｒ４）
ＶＡＨ  Ｖ１，  Ｖ１，  Ｖ３
ＶＳＴ  Ｖ１，  ０（Ｒ５）
ＶＬ  Ｖ１，  １６（Ｒ４）
ＶＡＨ  Ｖ１，  Ｖ１，  Ｖ３
ＶＳＴ  Ｖ２，  １６（Ｒ５）
ここで、ＶＬＲＥＰＨはベクトル・ロードおよび複製（ＶＥＣＴＯＲ  ＬＯＡＤ  ＡＮＤ  ＲＥＰＬＩＣＡＴＥ）命令、ＶＡＨはベクトル加算ハーフワード（ＶＥＣＴＯＲ  ＡＤＤ  ＨＡＬＦＷＯＲＤ）命令、Ｖ１〜Ｖ３はベクトルである。
【００３９】
例５は、アドレスＲ４およびＲ５が、少なくとも２のアドレス・アライメント・サイズを有する場合には、そのようにインクリメントされる各ハーフワードに対して、ブロック同時性を提供し、他方で、例６は、アドレスＲ４およびＲ５が、少なくとも１６のアドレス・アライメント・サイズを有する場合には、そのようにインクリメントされる８のハーフワードのグループに対して、ブロック同時性を与え、それ以外の場合には、１バイトの同時性を与える。このように、例５から例６への変換は、例５のブロック同時性の振る舞いを保存しない。
【００４０】
例４および６に示されたベクトル命令は、従来型のメモリ参照命令ではなく、新たな命令である、ということが注意されるべきである。しかし、これらの新たなベクトル命令は、本明細書で説明される本発明のいくつかの実施形態によるブロック同時性の振る舞いを有しない。
【００４１】
本発明の実施形態は、特定されたメモリ・アドレスに対するアドレス・アライメント・サイズに基づき、メモリ参照命令の新たな定義を提供することにより、そのような命令は、そのアドレス・アライメント・サイズにおいてアラインされたアドレス・アライメント・サイズに対応するブロック・サイズのサブブロックに対して、ブロック同時性を提供する。よって、上記の３つのコード変換（例１から例２、例３から例４、および例５から例６）は、ロードおよびストア命令に対する新たな変更された命令定義に基づき、実行され得る。この変更は、本明細書で説明されているブロック同時性の振る舞いに対応し、他方で、命令実行の他の態様の振る舞いは、変更されないままに維持する。明確にするために、以下の例示的な変更された命令のオペコードは、以下で述べる命令の例では、演算コードの最初に「ｍ」を付して表される。
【００４２】
ハーフワードのブロック同時性を伴うハーフワードのコピー・ループは、下記の例７に示されているように、変更されたダブルワードのアクセス命令を用いて、実行され得る。
ＬＨＩ  Ｒ１，  ４
ＸＧＲ  Ｒ３，  Ｒ３
ＬＯＯＰ：          ｍＬＧ  Ｒ２，０（Ｒ３，Ｒ４）
ｍＳＴＧ  Ｒ２，０（Ｒ３，Ｒ５）
ＡＧＨＩ  Ｒ３，８
ＢＣＴ  Ｒ１，ＬＯＯＰ
いくつかの実施形態では、例７のこのコードは、レジスタＲ４およびＲ５に保持されているアドレスが少なくとも２のアドレス・アライメント・サイズに対応する場合の２バイトのブロック同時性と、１バイトの同時性とを与える。さらに、いくつかの実施形態では、このコードは、レジスタＲ４およびＲ５に保持されているアドレスが少なくとも４のアドレス・アライメント・サイズに対応する場合には、４バイトのブロック同時性を与える。さらに、いくつかの実施形態では、このコードは、レジスタＲ４およびＲ５に保持されているアドレスが少なくとも８のアドレス・アライメント・サイズに対応する場合には、８バイトのブロック同時性を与える。
【００４３】
同様に、例７の命令は、ロードおよびストア命令に対する変更されたパワーＩＳＡ命令の定義に基づき、パワーＩＳＡを用いて、表され得る。変更は、本明細書で説明されているブロック同時性の振る舞いに対応し、他方で、パワーＩＳＡの定義によって特定されるように、命令実行の他の態様の振る舞いは、修正されないままに維持される。やはり、明確にするために、以下で述べる例７においては、これらの変更された命令のオペコードは、演算コードの最初に「ｍ」を付して表される。
ＬＩ  Ｒ１，  ４
ＭＴＣＴＲ  Ｒ１
ＸＯＲ  Ｒ３，  Ｒ３，  Ｒ３
ＬＯＯＰ：          ｍＬＤＸ  Ｒ２，  Ｒ３，Ｒ４
ｍＳＴＤＸ  Ｒ２，  Ｒ３，Ｒ５
ＡＤＤＩ  Ｒ３，  Ｒ３，  ８
ＢＤＮＺ  ＬＯＯＰ
ここで、ＬＩはロード・イミディエット（Ｌｏａｄ  Ｉｍｍｅｄｉａｔｅ）命令であり、ＭＴＣＴＲはムーブ・ツー・カウント・レジスタ（Ｍｏｖｅ  Ｔｏ  Ｃｏｕｎｔ  Ｒｅｇｉｓｔｅｒ）命令であり、ＸＯＲは排他的ＯＲ（Ｅｘｃｌｕｓｉｖｅ  ＯＲ）命令であり、ＬＤＸはロード・ダブル・ワード（Ｌｏａｄ  Ｄｏｕｂｌｅ  Ｗｏｒｄ）命令であり、ＳＴＤＸはストア・ダブルワード・インデックスト（Ｓｔｏｒｅ  Ｄｏｕｂｌｅｗｏｒｄ  Ｉｎｄｅｘｅｄ）命令であり、ＡＤＤＩは加算イミディエット（Ａｄｄ  Ｉｍｍｅｄｉａｔｅ）命令であり、ＢＤＮＺは分岐（Ｂｒａｎｃｈ）命令であり、Ｒ１〜Ｒ５はレジスタである。
【００４４】
さらに、例４の最適化された命令は、下記の例８の命令に変換され得る。最適化されたコードは、下記のように、変更された命令を用いて、実行され得る。
ｍＶＬ  Ｖ１，  ０（Ｒ４）
ｍＶＳＴ  Ｖ１，  ０（Ｒ５）
ｍＶＬ  Ｖ１，  １６（Ｒ４）
ｍＶＳＴ  Ｖ１，  １６（Ｒ５）
【００４５】
いくつかの実施形態では、例８のこのコードは、レジスタＲ４およびＲ５に保持されているアドレスが少なくとも２のアドレス・アライメント・サイズに対応する場合の２バイトのブロック同時性と、１バイトの同時性（すなわち、１バイトに対応するブロック・サイズを備えたブロック同時性）とを与える。さらに、いくつかの実施形態では、このコードは、レジスタＲ４およびＲ５に保持されているアドレスが少なくとも４のアドレス・アライメント・サイズに対応する場合には、４バイトのブロック同時性を与える。さらに、いくつかの実施形態では、このコードは、レジスタＲ４およびＲ５に保持されているアドレスが少なくとも８のアドレス・アライメント・サイズに対応する場合には、８バイトのブロック同時性を与える。さらに、いくつかの実施形態では、このコードは、レジスタＲ４およびＲ５に保持されているアドレスが少なくとも１６のアドレス・アライメント・サイズに対応し、ｍＶＬおよびｍＶＳＴのための最大ブロック同時性サイズが少なくとも１６バイトとして定義されている場合には、１６バイトのブロック同時性を与える。いくつかの実施形態では、このコードは、レジスタＲ４およびＲ５に保持されているアドレスが少なくとも１６のアドレス・アライメント・サイズに対応し、ｍＶＬおよびｍＶＳＴのための最大ブロック同時性サイズが少なくとも８バイトとして定義されている場合には、８バイトのブロック同時性を与える。
【００４６】
同様に、例７のコードは、下記の例８のように、変更されたパワーＩＳＡの定義を用いて、表され得る。
ＬＩ  Ｒ１，  １６
ｍＬＸＶＸ  Ｖ１，  Ｒ０，  Ｒ４
ｍＳＴＸＶＸ  Ｖ１，  Ｒ０，  Ｒ５
ｍＬＸＶＸ  Ｖ１，  Ｒ１，  Ｒ４
ｍＳＴＸＶＸ  Ｖ１，  Ｒ１，  Ｒ５
【００４７】
同様に、例６のコードは、下記の例９のように、表され得る。
ＶＬＲＥＰＨ  Ｖ３，  ０（Ｒ６）
ｍＶＬ  Ｖ１，  ０（Ｒ４）
ＶＡＨ  Ｖ１，  Ｖ１，  Ｖ３
ｍＶＳＴ  Ｖ１，  ０（Ｒ５）
ｍＶＬ  Ｖ１，  １６（Ｒ４）
ＶＡＨ  Ｖ１，  Ｖ１，  Ｖ３
ｍＶＳＴ  Ｖ２，  １６（Ｒ５）
【００４８】
いくつかの実施形態では、例９のコードは、レジスタＲ４およびＲ５に保持されているアドレスが少なくとも２のアドレス・アライメント・サイズに対応する場合の２バイトのブロック同時性と、１バイトの同時性（すなわち、１バイトに対応するブロック・サイズを用いたブロック同時性）とを与える。さらに、いくつかの実施形態では、このコードは、レジスタＲ４およびＲ５に保持されているアドレスが少なくとも４のアドレス・アライメント・サイズに対応する場合には、４バイトのブロック同時性を与える。さらに、いくつかの実施形態では、このコードは、レジスタＲ４およびＲ５に保持されているアドレスが少なくとも８のアドレス・アライメント・サイズに対応する場合には、８バイトのブロック同時性を与える。さらに、いくつかの実施形態では、このコードは、レジスタＲ４およびＲ５に保持されているアドレスが少なくとも１６のアドレス・アライメント・サイズに対応する場合であって、ｍＶＬおよびｍＶＳＴに対する最大のブロック同時性サイズが少なくとも１６バイトとして定義されている場合には、１６バイトのブロック同時性を与える。さらに、いくつかの実施形態では、このコードは、レジスタＲ４およびＲ５に保持されているアドレスが少なくとも１６のアドレス・アライメント・サイズに対応する場合であって、ｍＶＬおよびｍＶＳＴに対する最大のブロック同時性サイズが少なくとも８バイトとして定義されている場合には、８バイトのブロック同時性を与える。
【００４９】
いくつかの実施形態では、既存の命令およびオペコードが変更され、命令のために新たなニーモニックが導入されることはない。他の実施形態では、本明細書で説明されるアドレス・アライメント・サイズに基づくブロック同時性に関する教示を用いて、新たな命令およびオペコードが導入される。
【００５０】
図３は、本発明のいくつかの実施形態に従ってメモリにアクセスするためのプロセス・フローを図示している。いくつかの実施形態では、プロセッサ（たとえば、ＣＰＵ）は、図３に示されたプロセス・フローを実行する。ボックス３０５では、プロセッサが、メモリの、あるアドレスにおけるデータのブロックを参照するメモリ参照命令を受け取る。メモリ参照命令は、メモリにおけるあるデータのブロックを参照するいずれかの命令（たとえば、メモリにおけるあるアドレスをオペランドとして含む命令）を含む。このような命令は、算術演算（たとえば、加算命令、減算命令、比較命令など）だけでなく、ロード命令とストア命令とを含む。
【００５１】
判断ボックス３１０では、プロセッサが、オプションであるが、そこからのデータをプロセッサが参照するメモリが、ボックス３０５で受け取られたメモリ参照命令によってサポートされる最大ブロック同時メモリ参照サイズ（または、最大ブロック同時性サイズ）以上のメモリ・アドレス境界（すなわち、メモリ参照命令で特定されたアドレスのアドレス・アライメント・サイズ）を有するかどうかを判断する。ある命令に対する最大メモリ参照サイズは、命令セット・アーキテクチャのすべての命令に対して、定義される。最大ブロック同時メモリ参照サイズは、命令のメモリ参照のサイズであり得るか、または、命令セット・アーキテクチャのすべての命令に対して定義された最大ブロック同時参照サイズに対応することもあり得る。いくつかの実施形態では、最大ブロック同時メモリ参照サイズは、命令のメモリ参照のサイズであり得るか、または、命令セット・アーキテクチャのそれぞれの命令に対して独立に定義された最大ブロック同時メモリ参照サイズに対応することもあり得る。
【００５２】
判断ボックス３１０において、メモリ・アドレス境界が最大ブロック同時メモリ参照サイズ未満であると判断されると、プロセッサは、判断ボックス３２０に進むのであるが、判断ボックス３２０については、さらに後述する。判断ボックス３１０において、メモリ・アドレス境界が最大ブロック同時メモリ参照サイズ以上であると判断されると、プロセッサは、ボックス３１５に進み、最大ブロック同時メモリ参照サイズのブロックずつ同時に、メモリにアクセスする。たとえば、メモリ参照サイズが３２バイトであり、メモリ・アドレス境界が１６バイトであるが、最大ブロック同時メモリ参照サイズが８バイトであるときには、プロセッサは、同時に８バイトずつ、メモリにアクセスする。
【００５３】
判断ボックス３２０では、プロセッサが、要求されたメモリ・アドレスのアライメント・サイズが２のＮ乗（すなわち、２Ｎ）であるかどうかを判断するのであるが、ここで、Ｎとは、２Ｎがメモリ参照サイズ以下になるような、最大の非負整数である。たとえば、メモリ参照サイズが３６バイトであるときには、プロセッサは、判断ボックス３２０において、要求されたメモリ・アドレスが３２バイト（２５バイト）のアライメント・サイズを有するかどうかを判断する。要求されたメモリ・アドレス・アライメント・サイズが２のＮ乗であると判断すると、プロセッサは、ボックス３２５に進み、同時に２Ｎバイトずつ、メモリにアクセスする。たとえば、メモリ・アドレス・アライメント・サイズが３２バイトであり、メモリ参照サイズが３２バイトである場合には、プロセッサは、すべての３２バイトにアクセスするために、同時に３２バイトずつ、ブロック同時的にメモリにアクセスする。要求されたメモリ・アドレス・アライメント・サイズが２のＮ乗ではないと判断すると、プロセッサは、ボックス３３０に進む。上述のように、最大ブロック同時メモリ参照サイズは、１つまたは複数の命令に対して設定され得る。いくつかの実施形態では、Ｎは、メモリ参照サイズとは無関係に、２Ｎが最大ブロック同時メモリ参照サイズ以下になるような、最大の非負整数に設定される。たとえば、命令が、８バイトの最大ブロック同時メモリ参照サイズを提供することがあり得る。そのときには、メモリ参照サイズが２３よりも大きい場合でも、Ｎは３に設定される。
【００５４】
判断ボックス３３０では、プロセッサが、要求されたメモリ・アドレス・アライメント・サイズが２の（Ｎ−１）乗（すなわち、２（Ｎ−１））であるかどうかを判断する。たとえば、メモリ参照サイズが３２バイト（２５バイト）であるときには、プロセッサは、ボックス３３０において、要求されたメモリ・アドレス・アライメント・サイズが１６バイト（２４バイト）であるかどうかを判断する。要求されたメモリ・アドレス・アライメント・サイズが２の（Ｎ−１）乗であると判断すると、プロセッサは、ボックス３３５に進み、同時に２（Ｎ−１）バイトずつ、メモリにアクセスする。たとえば、メモリ参照サイズが３２バイト（２５バイト）である場合には、プロセッサは、すべての３２バイトにアクセスするために、一度に１６バイト（２４バイト）ずつ、ブロック同時的にアクセスする。
【００５５】
要求されたメモリ・アドレス・アライメント・サイズが２の（Ｎ−１）乗ではないと判断すると、プロセッサは、要求されたメモリ・アドレス・アライメント・サイズが２の１乗（すなわち、２１バイト）であると判断ボックス３４０で判断されるまで、同様に、判断ボックス３４０まで進む。要求されたメモリ・アドレス・アライメント・サイズが２であると判断すると、プロセッサは、ボックス３４５に進み、同時に２バイトずつ、メモリにアクセスする。たとえば、メモリ参照サイズが３２バイトである場合には、プロセッサは、すべての３２バイトにアクセスするために、一度に２バイトずつ、ブロック同時的にアクセスする。判断ボックス３４０において、要求されたメモリ・アドレス・アライメント・サイズが２ではないと判断すると、プロセッサは、ボックス３５０に進み、一度に１バイトずつ、メモリにアクセスする。すなわち、プロセッサは、メモリ参照命令によって特定されたすべてのバイトにアクセスするために、一度に１バイトずつアクセスする。
【００５６】
ボックス３２０から３５０までにおいて、プロセッサは、要求されたメモリ・アドレス・アライメント・サイズがメモリ参照命令のメモリ参照サイズよりも小さいときには、要求されたメモリ・アドレス・アライメント・サイズにおけるブロック同時性をもってメモリにアクセスする、ということが認識されるべきである。すなわち、いくつかの実施形態では、メモリ参照命令を実行するプロセッサは、要求されたデータのブロックのアドレスがアラインされているどのような境界にもアクセスがブロック同時的である（すなわち、アクセスは、任意のアライメント・サイズにブロック同時的である）かのように、機能する。
【００５７】
いくつかの実施形態では、メモリ参照命令のメモリ参照サイズは、たとえば、命令のオペコード（演算コード）によって示唆される。この理由は、命令のオペコードが、実行すべき演算だけでなく、参照されているデータのデータ型も指示するからである。あるいは、または、上述したことと関連して（Alternatively or conjunctively）、いくつかの実施形態では、メモリ参照命令は、たとえば命令のオペランドにおけるメモリ参照サイズを明示的に特定するように、定義され得る。たとえば、命令のオペランドは、フェッチまたはストアすべき最高のインデックスが付されたバイトを特定する。これにより、プログラマが、メモリ参照サイズを特定することが可能になる。いくつかの場合に、特定されたメモリ参照サイズが、２の累乗ではない（たとえば、１０バイト）ことがあり得るし、オペコードによって示唆されたメモリ参照サイズと一致しないこともあり得る。
【００５８】
本発明の実施形態は、特定されたメモリ参照サイズと要求されたメモリのアドレス境界とが同じでないときに、ブロック同時性を提供するシステムおよび方法を提供する。いくつかの実施形態では、メモリ参照サイズが、メモリ参照命令において特定されているときには、その命令を実行するプロセッサは、要求されたメモリのアドレスのアドレス境界と特定されたメモリ参照サイズとの最大公約数を、ブロック同時データ・アクセス・サイズとして用いる。たとえば、命令のオペランド・アドレスが４バイトの境界上にあり、特定されたメモリ参照サイズが１０バイトである場合には、１０と４との最大公約数は２であるから、データ・アクセスは、少なくとも２バイトについては、他のプロセッサと同時的であるように見える。これにより、スカラ・コードと同じように振る舞い、いかなるプログラミング言語のセマンティクスや規約にも違反しないデータ並列コードが許容される。
【００５９】
いくつかの実施形態では、ブロック同時性のブロック・サイズ（すなわち、たとえば２バイトの同時性、４バイトの同時性、１６バイトの同時性、３２バイトの同時性などの、ブロック同時性のレベル）が、アドレス・アライメント・サイズから直接導かれる。別の実施形態では、ブロック同時アクセスのブロック同時性サイズは、アドレス・アライメント・サイズと命令のメモリ参照サイズとの両方に基づく。いくつかのそのような実施形態では、ブロック同時アクセスのためのブロック・サイズは、アドレス・アライメントとメモリ参照のサイズとから直接導かれるブロック同時性のブロック・サイズの最小値である。さらに別の実施形態では、ブロック同時アクセスのためのブロック・サイズは、さらに図４に示されているように、アドレス・アライメント・サイズとメモリ参照サイズとの間で共通の２つのブロック・サイズの最大の累乗によって、決定される。
【００６０】
図４は、ブロック同時アクセスのブロック・サイズがアドレス・アライメント・サイズとメモリ参照命令のメモリ参照サイズとの両方に基づくときに、メモリにアクセスするためのプロセス・フローを図示している。いくつかの実施形態では、ブロック同時アクセスの最大ブロック・サイズが、命令セット・アーキテクチャによってすべての命令に課せられるか、または、最大ブロック同時性サイズを有する特定の命令に課せられることがあり得る。いくつかのメモリ参照命令は、メモリ参照サイズを明示的に特定するのであるが、そのサイズが２の累乗ではない場合もある。しかし、いくつかの実装例では、２の累乗のブロック同時サイズだけが許容されることがあり得る。そのようないくつかの実施形態では、プロセッサ（たとえば、ＣＰＵ）は、図４に示されたプロセス・フローを実行する。
【００６１】
ボックス４０５では、プロセッサが、メモリの、あるアドレスにおけるデータのブロックを参照するメモリ参照命令を受け取る。このメモリ参照命令は、また、たとえば命令のオペランドにおいて、参照するデータのサイズを特定する。
【００６２】
判断ボックス４１０では、プロセッサが、オプションであるが、そこからのデータをプロセッサが参照するメモリが、ボックス４０５で受け取られたメモリ参照命令の最大ブロック同時メモリ参照サイズ以上のメモリ・アドレス・アライメント・サイズを有するかどうかを判断する。メモリ・アドレス・アライメント・サイズが最大ブロック同時メモリ参照サイズ未満であると判断されると、プロセッサは、判断ボックス４２０に進むのであるが、判断ボックス４２０については、さらに後述する。メモリ・アドレス・アライメント・サイズが上記特定されたメモリ参照サイズ以上であると判断されると、プロセッサは、ボックス４１５に進み、最大ブロック同時メモリ参照サイズのブロックずつ同時に、メモリにアクセスする。たとえば、特定されたメモリ参照サイズが８バイトであり、メモリ・アドレス・アライメント・サイズが８バイトであるが、最大ブロック同時アクセス・サイズが４バイトであるときには、プロセッサは、同時に４バイトずつ、メモリにアクセスする。
【００６３】
判断ボックス４２０では、プロセッサが、要求されたメモリ・アドレス・アライメント・サイズが２のＮ乗（すなわち、２Ｎ）であるかどうかを判断するのであるが、ここで、Ｎとは、２Ｎが特定されたメモリ参照サイズ以下になるような、最大の非負整数である。たとえば、特定されたメモリ参照サイズが１０バイトであるときには、プロセッサは、ボックス４２０において、要求されたメモリ・アドレスが８バイト（２３バイト）にアラインされているかどうかを判断する。判断ボックス４２０において、要求されたメモリ・アドレス・アライメント・サイズが２のＮ乗ではないと判断すると、プロセッサは、判断ボックス４３５に進むが、判断ボックス４３５については、さらに後述する。
【００６４】
判断ボックス４２０において、要求されたメモリ・アドレス・アライメント・サイズが２のＮ乗であると判断すると、プロセッサは、判断ボックス４２５に進み、特定されたメモリ参照サイズが２のＮ乗の倍数であるかどうかを判断する。たとえば、特定されたメモリ参照サイズが１０バイトであるときには、プロセッサは、判断ボックス４２５において、特定されたメモリ参照サイズである１０バイトが８バイトの倍数であるかどうかを判断する。特定されたメモリ参照サイズが２のＮ乗の倍数でない場合には、プロセッサは、判断ボックス４４０に進むが、判断ボックス４４０については、さらに後述する。特定されたメモリ参照サイズが２のＮ乗の倍数である場合には、プロセッサは、ボックス４３０に進み、同時に２Ｎバイトずつメモリにアクセスする。
【００６５】
判断ボックス４３５では、プロセッサが、要求されたメモリ・アドレス・アライメント・サイズが２の（Ｎ−１）乗（すなわち、２（Ｎ−１））であるかどうかを判断する。たとえば、メモリ参照サイズが１０バイトであるときには、プロセッサは、判断ボックス４３５において、要求されたメモリ・アドレス・アライメント・サイズが４バイト（２２バイト）であるかどうかを判断する。要求されたメモリ・アドレス・アライメント・サイズが２の（Ｎ−１）乗ではないと判断すると、プロセッサは、判断ボックス４５０に向かって進むが、判断ボックス４５０についてはさらに後述する。
【００６６】
判断ボックス４３５において、要求されたメモリ・アドレス・アライメント・サイズが２の（Ｎ−１）乗であると判断すると、プロセッサは、判断ボックス４４０に進み、特定されたメモリ参照サイズが２の（Ｎ−１）乗の倍数であるかどうかを判断する。たとえば、特定されたメモリ参照サイズが１０バイトであるときには、プロセッサは、判断ボックス４４０において、特定されたメモリ参照サイズである１０バイトが４バイト（２２バイト）の倍数であるかどうかを判断する。特定されたメモリ参照サイズが２の（Ｎ−１）乗の倍数でない場合には、プロセッサは、判断ボックス４５５に向かって進むのであるが、判断ボックス４５５については、さらに後述する。特定されたメモリ参照サイズが２の（Ｎ−１）乗の倍数である場合には、プロセッサはボックス４４５に進み、同時に２（Ｎ−１）バイトずつ、メモリにアクセスする。
【００６７】
判断ボックス４３５において、要求されたメモリ・アドレス・アライメント・サイズが２の（Ｎ−１）乗の倍数ではないと判断すると、プロセッサは、要求されたメモリ・アドレスアライメント・サイズが２の１乗（２１）であると判断ボックス４５０で判断されるまで、同様に、判断ボックス４５０まで進む。判断ボックス４５０において、要求されたメモリ・アドレス・アライメント・サイズが２ではないと判断すると、プロセッサは、ボックス４６５において、一度に１バイトずつ、メモリにアクセスする。すなわち、プロセッサは、メモリ参照命令によって特定されたすべてのバイトにアクセスするために、一度に１バイトずつ、アクセスする。
【００６８】
判断ボックス４５０において、要求されたメモリ・アドレス・アライメント・サイズが２であると判断すると、プロセッサは、判断ボックス４５５に進み、特定されたメモリ参照サイズが２バイトの倍数であるかどうかを判断する。特定されたメモリ参照サイズが２の倍数ではない場合には、プロセッサは、ボックス４６５に進み、一度に１バイトずつメモリにアクセスする。特定されたメモリ参照サイズが２の倍数である場合には、プロセッサはボックス４６０に進み、同時に２バイトずつ、メモリにアクセスする。たとえば、プロセッサは、メモリ参照サイズが１０バイトである場合には、すべての１０バイトにアクセスするために、一度に２バイトずつ、メモリにアクセスする。
【００６９】
ボックス４２０から４６５までにおいて、プロセッサは、要求されたメモリ・アドレス・アライメント・サイズと特定されたメモリ参照サイズとの最大公約数をバイト数として識別し、その最大公約数のブロック同時性をもって、メモリにアクセスする、ということが認識されるべきである。たとえば、特定されたメモリ参照サイズが１０バイトであり、要求されたメモリ・アドレス・アライメント・サイズが４バイトであるときには、プロセッサは、最大公約数である２バイトを識別し、同時に２バイトずつメモリにアクセスする（すなわち、ブロック同時的に一度に２バイトずつアクセスすることによって、すべての１０バイトにアクセスする）。
【００７０】
いくつかの実施形態では、最大ブロック同時性サイズは、１つまたは複数の命令に対して設定され得る。たとえば、ある命令が、８バイトの最大ブロック同時性サイズを提供することがあり得る。そのときには、特定されたメモリ参照サイズが２３より大きい場合であっても、判断ボックス４２０において、Ｎは３に設定される。いくつかの実施形態では、最大ブロック同時性サイズは、すべての命令に適用される。他の実施形態では、それぞれの命令が、別個の最大ブロック同時性サイズを有することも可能である。
【００７１】
図５は、本発明のいくつかの実施形態による、メモリにおけるデータにアクセスするためのシステム５００を図解している。特に、この図は、それ以外のコンポーネントは図解および記述の単純化のために図示されていないのであるが、システム５００がメモリ５０５と複数のプロセッサ５１０および５１５とを含むことを図解している。メモリ５０５と、プロセッサ５１０および５１５とは、１つまたは複数のバス５２０を経由して、相互に結合されている。プロセッサ５１０および５１５は、それぞれ、レジスタ５２５および５３０を有するように示されているが、プロセッサの内部の他のコンポーネント（たとえば、算術論理装置、制御装置、クロック、内部バスなど）は、図解および記述の単純化のために図示されていない。
【００７２】
いくつかの実施形態では、システム５００は、様々な並列処理環境を表す。たとえば、プロセッサ５１０および５１５のうちの１つが、ベクトル化された命令を実行するベクトル・プロセッサである場合がある。それ以外のプロセッサのうちの１つが、スカラ命令を実行するスカラ・プロセッサである場合がある。ベクトル・プロセッサとスカラ・プロセッサとは、メモリ５０５を共用し得る。別の例として、システム５００が、マルチコア・プロセッサを表し得るが、その場合、プロセッサ５１０および５１５は、メモリ５０５を共用する異なるコアである。さらに別の例としては、システム５００が、並列処理を行うプロセッサ５１０および５１５を有するメインフレーム・コンピュータ・システムを表す場合もある。
【００７３】
当技術分野で知られているように、プロセッサまたは（８０８６およびｘ８６ファミリ、もしくはＩＢＭのシステムｚサーバ・ファミリなどの）プロセッサ・ファミリは、それ自体のマシン命令のセットを有する。たとえば、ＩＢＭのシステムｚサーバ・ファミリの命令セットは、ｚ／アーキテクチャ命令セットとして知られているが、上記に組み入れられたz/Architecture Principles of Operationで定められており、パワー・サーバの命令セットは、パワーＩＳＡ（命令セットアーキテクチャ）として知られているが、上記に組み入れられたPower ISAで定められている。マシン命令は、マシンへの異なるコマンドに対応するように設計されたビットのパターンである。ほとんどの場合、命令セットは、同じアーキテクチャを用いるプロセッサのクラスに特有である。ほとんどの命令は、基本的な命令タイプ（算術、メモリ参照、分岐など）と実際の動作（ロード、ストア、加算、または比較など）とを特定する１つまたは複数のオペコードと、オペランドのタイプ、アドレス指定モード、アドレス指定オフセットもしくはインデックス、または実際の値自体を与え得る他のフィールドと、を有する。すなわち、各マシン命令は、レジスタまたはメモリにおけるデータ・ユニットに対し、ロード、分岐、または算術論理装置（ＡＬＵ）演算など、非常に特定的なタスクを実行するためのものである。これらのマシン命令のうちのいくつかは、メモリ参照命令であって、このメモリ参照命令は、メモリ５０５の特定のアドレスにおけるデータを参照し、そのデータを、メモリ５０５からレジスタにフェッチし、もしくは、レジスタからメモリ５０５に記憶する。
【００７４】
プロセッサ５１０および５１５は、メモリ５０５内部のデータのブロックのアドレスがそのメモリ参照命令のためのメモリ参照サイズと整数的でない場合であってもブロックの同時性を提供するメモリ参照命令を実行するように、構成され得る。すなわち、いくつかの実施形態では、プロセッサ５１０および５１５に対するメモリ参照命令は、参照されているデータのブロックがアラインされているどの境界に対しても命令がブロック同時的であるかのように、機能する。いくつかの実施形態では、８バイトの同時性の最大値が存在する。いくつかの実施形態では、プロセッサは、メモリ・アドレス・アライメント・サイズと特定されたメモリ参照サイズとの最大公約数を、バイト数として識別し、その最大公約数におけるブロック同時性でメモリ５０５にアクセスする。このようにして、プロセッサ５１０および５１５を含むコンピュータの機能が改善され得る。
【００７５】
異なる実施形態では、プロセッサ５１０および５１５は、異なるように構成される。たとえば、いくつかの実施形態では、プロセッサ５１０および５１５は、命令を実行しているときには本発明の様々な実施形態に従ってメモリ５０５にアクセスするように、既存の従来型のメモリ参照命令に新たな定義を提供することによって、構成され得る。あるいは、または、上述したことと関連して、プロセッサ５１０および５１５は、本発明の様々な実施形態に従ってメモリ５０５にアクセスする新たなメモリ参照命令を定義することにより、構成され得る。
【００７６】
たとえば、メモリ参照命令は、ベクトル・ロード命令を含み、このベクトル・ロード命令は、多くの場合、１６バイトのアライメント要求を有する。すなわち、１６バイトのアライメント要求を有するベクトル・ロード命令は、１６バイトのデータのブロックのうちの１６ブロック全部を、メモリから、１単位としてロードすると期待される。マルチスレッド化コードがコンパイラによって、たとえばデータ並列実行を可能にするためにベクトル化される場合、ある変数が第１のＣＰＵによって更新され、第２のＣＰＵによって読み出される場合には、第２のＣＰＵは、混合された結果ではなく、その変数への変化全体を見ると想定される。従来型のベクトル・ロード命令の定義では、ブロック同時性を保証することは不可能である。したがって、スレッド並列性を用いるときも、より高い程度のデータ並列性を用いることが困難であることが多い。これが、潜在的なソフトウェアの性能を制限し、ハードウェアが十分に利用されない状態を生じさせる。
【００７７】
本発明の様々な実施形態に従ってメモリにアクセスするようにプロセッサを構成することにより、プロセッサは、スレッド並列性を用いるときに、外部的なシリアライズ（たとえば、ロック）を要求することなく、より程度の高いデータ並列性を用いることができる。本発明の実施形態に従って構成されたプロセッサは、また、ソフトウェア性能も改善させ、ハードウェアの利用を容易にする。本発明の実施形態によると、より小さいデータ型がベクトルの中にパックされることが可能になり、他のプロセッサには、スカラ命令が用いられているかのように、同じセマンティクスで動作しているように見える。さらに、ブロック同時性により、余分なアライメント制限が回避され、アラインされ得ないデータの部分を処理するための余分なコードの必要性が回避されるために、コンパイラによる、コードの、より容易な自動並列化が可能になる。
【００７８】
本発明のいくつかの実施形態では、プロセッサに結合されたメモリにおけるデータにアクセスするための方法が提供される。この方法は、メモリ中のあるアドレスにおける第１のサイズのデータにアクセスするためのメモリ参照命令を受け取る。この方法は、上記アドレスのアライメント・サイズを決定する。この方法は、ブロック同時的にデータの各グループにアクセスすることにより、データの１以上のグループ単位で第１のサイズのデータにアクセスする。データの上記グループは、アライメント・サイズの倍数であるサイズを有する。この方法は、バイナリ表現でのアドレスにおける後置ゼロの個数を数えることにより、アライメント・サイズを決定する。データの各グループは、バイト数において、予め定義された最大ブロック同時性サイズよりも大きくない。いくつかの実施形態では、第１のサイズは、決定されたアライメント・サイズよりも大きい。いくつかの実施形態では、第１のサイズと決定されたアライメント・サイズとはバイト数としてのサイズであり、第１のサイズは２Ａであり、決定されたアライメント・サイズは２Ｂであり、Ａは、非負整数であるＢよりも大きい整数である。いくつかの実施形態では、この方法は、メモリ参照命令のオペコードに基づき、第１のサイズを決定する。いくつかの実施形態では、プロセッサはベクトル・プロセッサを含み、メモリ参照命令はベクトル命令を含む。
【００７９】
本発明のいくつかの実施形態では、プロセッサに結合されたメモリにおけるデータにアクセスするための方法が提供される。この方法は、メモリ中のあるアドレスにおける第１のサイズのデータにアクセスするためのメモリ参照命令を受け取る。メモリ参照命令が、第１のサイズを特定する。この方法は、上記アドレスのアライメント・サイズを決定する。この方法は、上記第１のサイズと決定された上記アライメント・サイズとの最大公約数を決定する。この方法は、データの１以上のグループ単位で上記第１のサイズのデータにアクセスする。データの上記グループは、最大公約数のサイズの倍数であるサイズを有する。いくつかの実施形態では、第１のサイズは決定されたアライメント・サイズよりも大きい。いくつかの実施形態では、第１のサイズと決定されたアライメント・サイズとはバイト数としてのサイズであり、第１のサイズは２の累乗のサイズではなく、決定されたアライメント・サイズは２の累乗のサイズである。いくつかの実施形態では、この方法は、メモリ参照命令のオペランドに基づき、第１のサイズを決定する。いくつかの実施形態では、プロセッサはベクトル・プロセッサを含み、メモリ参照命令はベクトル命令を含む。
【００８０】
本発明は、システム、方法、またはコンピュータ・プログラム製品あるいはこれらの組合せであり得る。コンピュータ・プログラム製品は、プロセッサに本発明の諸態様を実行させるためのコンピュータ可読プログラム命令を有する（１つまたは複数の）コンピュータ可読ストレージ媒体を含み得る。
【００８１】
コンピュータ可読ストレージ媒体とは、有体物であって命令実行デバイスによって用いられる命令を保持および記憶することが可能なデバイスであり得る。コンピュータ可読ストレージ媒体は、たとえば、これらに限定されることはないが、電子ストレージ・デバイス、磁気ストレージ・デバイス、光ストレージ・デバイス、電磁気ストレージ・デバイス、半導体ストレージ・デバイス、または以上のいずれかの適切な組合せであり得る。コンピュータ可読ストレージ媒体の、より特定的な例の非網羅的なリストは、ポータブルなコンピュータ・ディスケット、ハード・ディスク、ランダム・アクセス・メモリ（ＲＡＭ）、リード・オンリ・メモリ（ＲＯＭ）、消去可能でプログラム可能なリード・オンリ・メモリ（ＥＰＲＯＭまたはフラッシュ・メモリ）、静的なランダム・アクセス・メモリ（ＳＲＡＭ）、ポータブルなコンパクト・ディスク・リード・オンリ・メモリ（ＣＤ−ＲＯＭ）、デジタル・バーサタイル・ディスク（ＤＶＤ）、メモリ・スティック、フロッピー（Ｒ）・ディスク（Ｒ）、パンチ・カードまたは命令が記録されている溝を有する隆起構造などの機械的に符号化されたデバイス、および以上のいずれかの適切な組合せを含む。本明細書で用いられているコンピュータ可読ストレージ媒体とは、無線波もしくはそれ以外の自由に伝搬する電磁波、導波管もしくはそれ以外の伝送媒体を通過して伝搬する電磁波（たとえば、光ファイバ・ケーブルを通過する光パルス）、またはワイヤを通過して伝送される電気信号などのような一時的な信号自体としては、解釈されるべきでない。
【００８２】
本明細書で説明されているコンピュータ可読プログラム命令は、それぞれのコンピューティング／処理デバイスに、コンピュータ可読ストレージ媒体からダウンロードされ得るし、または、外部コンピュータもしくは外部ストレージ媒体に、たとえば、インターネット、ローカル・エリア・ネットワーク、ワイド・エリア・ネットワーク、またはワイヤレス・ネットワークあるいはこれらの組合せなどのネットワークを介して、ダウンロードされ得る。ネットワークは、銅伝送ケーブル、光伝送ファイバ、ワイヤレス伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイ・コンピュータ、またはエッジ・サーバあるいはこれらの組合せを備え得る。各コンピューティング／処理デバイスにおけるネットワーク・アダプタ・カードまたはネットワーク・インターフェースが、ネットワークからコンピュータ可読プログラム命令を受け取り、それぞれのコンピューティング／処理デバイスにおけるコンピュータ可読ストレージ媒体に記憶するために、そのコンピュータ可読プログラム命令を転送する。
【００８３】
本発明の動作を実行させるためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セット・アーキテクチャ（ＩＳＡ）命令、マシン命令、マシン依存命令、マイクロコード、ファームウェア命令、状態設定データ、または１つもしくは複数のプログラミング言語のいずれかの組合せで書かれたソース・コードもしくはオブジェクト・コードのいずれかであり得るが、ここでプログラミング言語とは、Ｓｍａｌｌｔａｌｋ（Ｒ）、Ｃ＋＋などのオブジェクト指向プログラミング言語、または、「Ｃ」プログラミング言語もしくは類似のプログラミング言語などの従来型の手続き型プログラミング言語を含む。コンピュータ可読プログラム命令は、全体的にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンド・アロンのソフトウェア・パッケージとして、部分的にはユーザのコンピュータ上であり部分的にはリモート・コンピュータ上で、または全体的にリモート・コンピュータもしくはサーバ上で、実行され得る。後者のシナリオでは、リモート・コンピュータは、ローカル・エリア・ネットワーク（ＬＡＮ）もしくはワイド・エリア・ネットワーク（ＷＡＮ）を含むいずれかのタイプのネットワークを介してユーザのコンピュータに接続され得るし、または、この接続が、（たとえば、インターネット・サービス・プロバイダを用い、インターネットを通じて）外部コンピュータに対してなされることがあり得る。いくつかの実施形態では、たとえば、プログラム可能なロジック回路、フィールド・プログラム可能なゲート・アレイ（ＦＰＧＡ）、またはプログラム可能なロジック・アレイ（ＰＬＡ）を含む電子回路が、本発明の諸態様を実行するために、コンピュータ可読プログラム命令の状態情報を用いて電子回路をカスタマイズすることによって、コンピュータ可読プログラム命令を実行し得る。
【００８４】
本明細書では、本発明の諸態様が、本発明の実施形態による方法、装置（システム）、およびコンピュータ・プログラム製品の流れ図またはブロック図あるいはその両方を参照して、説明されている。流れ図またはブロック図あるいはその両方の各ブロックと、流れ図またはブロック図あるいはその両方におけるブロックの組合せとが、コンピュータ可読プログラム命令によって実装され得る、ということが理解されるであろう。
【００８５】
これらのコンピュータ可読プログラム命令は、コンピュータまたはそれ以外のプログラム可能なデータ処理装置のプロセッサ経由で実行される命令が、流れ図またはブロック図あるいはその両方の１つまたは複数のブロックにおいて特定されている機能／作用を実装するための手段を生じさせるように、汎用コンピュータ、専用コンピュータ、またはそれ以外のプログラム可能なデータ処理装置のプロセッサに提供されて、マシンを作り出すものであってよい。また、これらのコンピュータ可読プログラム命令は、命令が記憶されているコンピュータ可読ストレージ媒体が、流れ図またはブロック図あるいはその両方の１つまたは複数のブロックにおいて特定されている機能／作用の諸態様を実装する命令を含む製品を構成するように、コンピュータ可読ストレージ媒体に記憶され、コンピュータ、プログラム可能なデータ処理装置、またはそれ以外のデバイスあるいはこれらの組合せに、特定の態様で機能するように指示するものであってもよい。
【００８６】
コンピュータ可読プログラム命令は、また、コンピュータ、他のプログラム可能な装置または他のデバイス上で実行する命令が、流れ図またはブロック図あるいはその両方の１つまたは複数のブロックにおいて特定されている機能／作用を実現させるように、コンピュータ実装プロセスを生じさせるために、コンピュータ、他のプログラム可能なデータ処理装置、または他のデバイスの上にロードされ、コンピュータ、他のプログラム可能な装置または他のデバイスの上で一連の動作ステップを実行させるものであってもよい。
【００８７】
図面における流れ図およびブロック図は、本発明の様々な実施形態によるシステム、方法、およびコンピュータ・プログラム製品の可能な実装のアーキテクチャ、機能、および動作を図解している。この点で、流れ図またはブロック図における各ブロックは、特定された（１つまたは複数の）論理機能を実装するための１つまたは複数の実行可能な命令を備えたモジュール、セグメント、または命令の一部を表し得る。いくつかの別の実施では、ブロックに記されている機能が、図面に記されている順序とは異なる順序で生じることがあり得る。たとえば、連続するように示されている２つのブロックが、関係する機能に応じて、実際には、実質的に同時に実行されることがあり得るし、または、それらのブロックが、逆の順序で実行されることもあり得る。ブロック図または流れ図あるいはその両方の各ブロックと、ブロック図または流れ図あるいはその両方におけるブロックの組合せとは、特定された機能もしくは作用を実行する、または、専用のハードウェアおよびコンピュータ命令の組合せを実行する専用のハードウェア・ベースのシステムによって、実装され得る。
【００８８】
本発明の様々な実施形態に関する説明が、例証する目的のために提示されてきたが、以上の説明は、網羅的であることや、開示されている実施形態に限定されることが、意図されたものではない。当業者にとっては、説明された実施形態の範囲および主旨から逸脱することなく、多くの変更および変形が明らかであろう。本明細書で用いられている用語は、実施形態の原理、実際的な応用、もしくは市場において見出される技術に対する技術的改善を最もよく説明するために、または、本明細書に開示されている実施形態を他の当業者が理解することを可能にするために、選択されたものである。
【図１】
0006664105.tif 000002
【図２】
0006664105.tif 000003
【図３】
0006664105.tif 000004
【図４】
0006664105.tif 000005
【図５】
0006664105.tif 000006