(57)【要約】コンピュータシステムは、命令コード、ソースタイプ、ソースアドレス、デスティネーションタイプ、およびデスティネーションアドレスを含む命令を処理する。ソースタイプおよびデスティネーションタイプは、メモリ装置を示してもよく、その場合、データは、ソースアドレスにおいてメモリ装置から読み出され、デスティネーションアドレスに書き込まれる。ソースタイプおよびデスティネーションタイプの一方または両方は、転送記述子フラグを含み得、その場合、ソースアドレスまたはデスティネーションアドレスによって識別される転送記述子が実行される。ソースアドレスによって参照される転送記述子は、命令コードによって示される操作を実行するために使用される中間結果を得るために実行され得る。デスティネーションアドレスによって参照される転送記述子は、操作結果が格納される位置を決定するために実行されて得る。【選択図】図４Ａ
2018537800.tif 000002
【特許請求の範囲】
【請求項１】
複数の命令のそれぞれが、（ａ）命令コード、（ｂ）ソースタイプ、および（ｃ）ソースアドレスを含む前記複数の命令を格納するメモリ装置を提供するステップと、
前記メモリ装置に動作可能に接続された処理装置を提供するステップと、
前記複数の命令のうちの第１の命令を前記メモリ装置から前記処理装置が取り出すステップと、
前記処理装置およびメモリ制御システムのうちの一方が、
前記第１の命令の前記ソースタイプが転送記述子フラグであると判定し、
前記第１の命令の前記ソースタイプが前記転送記述子フラグであると判定することに応じて、第１の中間結果を得るために転送バッファ内の前記第１の命令の前記ソースアドレスに格納された第１の転送記述子を実行し、
前記第１の中間結果に対して前記第１の命令の前記命令コードを実行する、
ことによって、前記第１の命令を処理するステップと、
を含む、方法。
【請求項２】
前記複数の命令のうちの第２命令を前記メモリ装置から前記処理装置が取り出すステップと、
前記処理装置およびメモリ制御システムのうちの少なくとも一方が、
前記第２の命令の前記ソースタイプが転送記述子フラグではないと判定し、
前記第２の命令の前記ソースタイプが転送記述子フラグではないと判定することに応じて、前記第２の命令の前記ソースアドレスに格納されたデータ値を要求し、及び
前記データ値に対して前記第２の命令の前記命令コードを実行する、
ことによって、前記第２の命令を処理するステップと、
を更に含む、請求項１に記載の方法。
【請求項３】
前記第２の命令の前記命令コードを実行することは、前記第１の命令の前記命令コードを実行することと同じの操作を実行することを含むように、前記第２の命令の前記命令コードは、前記第１の命令の前記命令コードと同一である、ことを特徴とする、請求項２に記載の方法。
【請求項４】
前記第１の中間結果に対して前記第１の命令の前記命令コードを実行することは、第１の結果値をもたらし、
前記方法は、
前記第１の命令の前記デスティネーションタイプが前記転送記述子フラグであると判定するステップと、
前記第１の命令の前記デスティネーションタイプが前記転送記述子フラグであると判定することに応じて、前記転送バッファ内の前記第１の命令の前記デスティネーションアドレスに格納された第２の転送記述子を実行して、第２の中間結果を取得し、
格納された前記第１の結果値を、前記メモリ装置内の前記第２の中間結果に対応するアドレスに格納する、
ことを更に含む、
ことを特徴とする請求項３に記載の方法。
【請求項５】
前記データ値に対して前記第２の命令の前記命令コードを実行することにより、第２の結果値がもたらされ、
前記方法は、
前記第２の命令の前記デスティネーションタイプが前記転送記述子フラグではないと判定し、
前記第２の命令の前記デスティネーションタイプが前記転送記述子フラグではないと判定することに応じて、前記第２の結果値を前記第２の命令の前記デスティネーションアドレスにおいて前記メモリ装置に格納する、
ことを更に含む、
ことを特徴とする、請求項４に記載の方法。
【請求項６】
前記第１の転送記述子を実行するステップは、前記第１の転送記述子の状態を更新するステップを含み、及び
前記第２の転送記述子を実行するステップは、前記第２の転送記述子の状態を更新するステップを含む、
ことを特徴とする、請求項５に記載の方法。
【請求項７】
前記第１の転送記述子を実行するステップは、
前記第１の転送記述子の前記状態に従って少なくとも１つの読み出しアドレスを識別し、及び
前記メモリ装置内の前記少なくとも１つの読み出しアドレスから少なくとも１つの取り出されたデータ値を取り出し、及び
前記第１の中間結果は、前記少なくとも１つの取り出されたデータ値と、前記少なくとも１つの取り出されたデータ値から導出された値とのうちの少なくとも１つである、
ことを特徴とする請求項６に記載の方法。
【請求項８】
前記第１の命令を処理するステップは、前記アプリケーションによってインスタンス化された実行の第１のスレッドを実行しながら前記プロセッサによって実行され、
前記方法は、
前記プロセッサによって、前記第１の転送記述子および前記第２の転送記述子のうちの少なくとも一方の状態を評価するステップと、
前記第１の転送記述子の状態と前記第２の転送記述子の状態の少なくとも一方が閾値条件を満たすと判定するステップと、及び
前記第１の転送記述子の前記状態および前記第２の転送記述子の前記状態のうちの少なくとも一方が前記閾値条件を満たすと判定することに応じて、実行の前記第１のスレッドの前記少なくとも１つ及び、前記アプリケーションによってインスタンス化された実行の別のスレッドのうちの少なくとも一方の実行をブロックするステップと、
を更に含む、請求項５に記載の方法。
【請求項９】
前記転送バッファは、前記メモリ装置とは別のデバイスである、請求項１に記載の方法。
【請求項１０】
前記第１の命令の前記ソースタイプが前記転送記述子フラグであると判定するステップと、及び
前記第１の命令の前記ソースタイプが前記転送記述子フラグであると判定することに応じて、前記第１の中間結果を得るために前記転送バッファ内の前記第１命令の前記ソースアドレスに格納された前記第１の転送記述子を実行するステップと、
の両方が、前記処理装置と前記メモリ装置との間に介在する前記処理装置とは別の装置によって実行される、ことを特徴とする請求項９に記載の方法。
【請求項１１】
メモリ装置と、
前記メモリ装置に動作可能に接続された処理装置であって、（ａ）命令コード、（ｂ）ソースタイプ、及び（ｃ）ソースアドレスを含む命令を処理するようにプログラムされた前記処理装置と、
を含み、
前記処理装置は、更に、
前記メモリ装置から命令を取り出し、
前記命令の前記ソースタイプを評価し、
前記命令の前記ソースタイプが転送記述子フラグである場合、（ｉ）転送バッファ内の前記ソースアドレスに対応するアドレスにおいて対応する転送記述子を取り出し、（ｉｉ）前記対応する転送記述子を実行して第１の中間結果を取得し、及び（ｉｉｉ）前記第１の中間結果に対して前記命令の前記命令コードを実行して結果値を取得する、
のに有効であるように、前記処理装置により前記命令を処理すること、及び前記メモリ装置と前記処理装置との間に介在するメモリ制御システムにおいて前記命令を処理することの少なくとも一方を実行する、
ようにさらにプログラムされる、ことを特徴とする、システム。
【請求項１２】
前記処理装置は、
前記命令の前記ソースタイプが転送記述子フラグでない場合、（ｉｖ）前記命令の前記ソースアドレスにおいて前記メモリ装置に格納されたデータ値を取り出し、及び（ｖ）前記命令の前記命令コードを、前記ソースアドレスにおいて前記メモリ装置に格納された前記データ値に対して実行するために有効であるように、
前記処理装置により前記命令を処理することと、及び前記メモリ装置と前記処理装置との間に介在する前記メモリ制御システムにおいて前記命令の処理を呼び出すこととの少なくとも一方を実行するように、更にプログラムされることを特徴とする、請求項１１に記載のシステム。
【請求項１３】
（ａ）前記ソースタイプにかかわらず、前記命令コードに応じて実行される操作が同じであるように、前記命令コードを実行するように前記処理装置がプログラムされることと、並びに、（ｂ）前記メモリ制御システムにおいて前記命令を処理するように前記処理装置はプログラムされており、及び、前記メモリ制御システムは、前記ソースタイプにかかわらず前記命令コードに応じて実行される操作が同じであるように、プログラムされることと、のうちの少なくとも一方であること特徴とする請求項１２に記載のシステム。
【請求項１４】
前記処理装置は、
前記命令の前記デスティネーションタイプを評価し、
前記命令の前記デスティネーションタイプが前記転送記述子フラグである場合、（ｖｉ）前記命令の前記デスティネーションアドレスに対応するアドレスにおいて前記転送バッファに格納された第２の転送記述子を実行して、第２の中間結果を取得し、（ｖｉｉ）前記メモリ装置内の前記第２の中間結果に対応するアドレスに前記結果値を格納する、ために有効であるように、
前記処理装置により前記命令を処理することと、前記メモリ装置と前記処理装置との間に介在する前記メモリ制御システムにおいて前記命令の処理を呼び出すことと、の少なくとも一方を実行するように、更にプログラムされることを特徴とする、請求項１３に記載のシステム。
【請求項１５】
前記処理装置は、
前記命令の前記デスティネーションタイプが前記転送記述子フラグでない場合、前記結果値を前記命令の前記デスティネーションアドレスにおいて前記メモリ装置に格納するために有効であるように、
前記処理装置により前記命令の処理することと、前記メモリ装置と前記処理装置との間に介在する前記メモリ制御システムにおいて前記命令の処理を呼び出すこととの少なくとも一方を実行するように、更にプログラムされる、請求項１４に記載の方法。
【請求項１６】
前記第１の転送記述子は、前記第１の転送記述子の状態を更新するのに有効な実行可能コードを含み、及び
前記第２の転送記述子は、前記第２の転送記述子の状態を更新するのに有効な実行可能コードを含む、ことを特徴とする請求項１６に記載のシステム。
【請求項１７】
前記第１の転送記述子は、
前記第１の転送記述子の前記状態に従って少なくとも１つの読み出しアドレスを識別し、及び
前記メモリ装置内の前記少なくとも１つの読み出しアドレスから少なくとも１つの取り出されたデータ値を取り出し、及び
前記取り出されたデータの少なくとも１つとして、前記少なくとも１つの取り出されたデータ値に関しての関数を評価することによって、前記第１の中間結果を計算する、ために有効な実行可能コードを含む、請求項１６に記載のシステム。
【請求項１８】
前記処理装置は、
前記第１の転送記述子と前記第２の転送記述子の少なくとも一方の前記状態を評価し、
前記第１の転送記述子および前記第２の転送記述子の前記少なくとも一方の前記状態が閾値条件を満たす場合、前記処理装置によって実行される実行の少なくとも１つのスレッドの実行をブロックする、
ように更にプログラムされる、ことを特徴とする、請求項１６に記載の方法。
【請求項１９】
前記転送バッファは、前記メモリ装置とは別のデバイスである、請求項１１に記載の方法。
【請求項２０】
複数の命令を含むアプリケーションを格納するメモリ装置であって、前記命令の少なくとも一部は、複数のメモリアクセスコマンドを含み、前記複数のメモリアクセスコマンドの各メモリアクセスコマンドは、（ａ）命令コード、（ｂ）ソースタイプ、（ｃ）ソースアドレス、（ｄ）、デスティネーションタイプ、および（ｅ）デスティネーションアドレスを含む命令語を含む、メモリ装置と、
前記メモリ装置に接続され、前記命令を実行するようにプログラムされた処理装置であって、各メモリアクセスコマンドごとに、
（ｉ）前記各メモリアクセスコマンドの前記ソースタイプを評価するステップと、
（ｉｉ）前記ソースタイプが前記メモリ装置に対応する場合、前記メモリ装置において前記各メモリアクセスコマンドの前記ソースアドレスに格納されたデータを要求し、前記各メモリアクセスコマンドの前記ソースアドレスに格納された前記データに前記命令コードに対応する操作を実行して、最終結果を得るステップと、
（ｉｉｉ）前記デスティネーションタイプが前記メモリ装置に対応する場合、前記メモリにおける前記各メモリアクセスコマンドの前記デスティネーションアドレスへの前記最終結果の書き込みを要求するステップと、
（ｉｖ）前記ソースタイプが転送記述子フラグである場合、
前記メモリ装置及び別のバッファデバイスのうちの１つを含む転送バッファにおいて前記各メモリアクセスコマンドの前記ソースアドレスに対応するアドレスに格納された第１の転送記述子であって、第１の中間結果を出力するようにプログラムされた前記第１の転送記述子を実行するステップと、
前記命令コードに対応する前記操作を前記第１の中間結果に実行して前記最終結果を得るステップと、
（ｖ）前記デスティネーションタイプが前記転送記述子フラグである場合、
前記転送バッファにおいて前記各メモリアクセスコマンドの前記デスティネーションアドレスに対応するアドレスに格納された第２の転送記述子であって、第２の中間結果を出力するようにプログラムされた前記第２の転送記述子を実行するステップと、
前記メモリ装置内の前記第２の中間結果に対応する位置への前記最終結果の書き込みを要求するステップと、
によって前記複数のメモリアクセスコマンドを実行するように更にプログラムされる処理装置と、
を含む、システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリアクセスコマンドを実施するためのシステムおよび方法に関する。
【背景技術】
【０００２】
従来のコンピュータシステムでは、メモリアクセスコマンドは、命令（読み出し、書き込み、消去など）、ソースタイプ（例えば、メモリ装置の指定）、ソースアドレス、デスティネーションタイプ、及びデスティネーションアドレスを含む。より複雑な命令は、実行すべき複数の動作を指定し、処理機能の非常に特殊な制御を提供することができる「超長命令語」（ＶＬＩＷ）を用いることによって実装され得る。しかし、ＶＬＩＷシステムは、命令の記憶のために大容量のメモリを必要とし、対応する回路に大きな面積を必要とする。
【０００３】
本明細書で開示されるシステムおよび方法は、複雑なコマンド、特にメモリアクセスコマンドを実装するための改良されたアプローチを提供する。
【図面の簡単な説明】
【０００４】
本発明の効果が容易に理解されるように、上記に簡単に記述した本発明のより具体的な記述は、添付の図面に示される特定の実施形態を参照して提供される。これらの図面は、本発明の典型的な実施形態のみを示すものであり、したがって、その範囲を限定するものとみなされるべきではないと理解されたく、本発明は、添付の図面の使用を通して、さらなる具体性および詳細とともに記述および説明される。
【０００５】
【図１】本発明の実施形態に係る方法を実装するのに適したコンピュータシステムの概略ブロック図である。
【図２Ａ】本発明の一実施形態に係る転送記述子を使用するための構成の概略ブロック図である。
【図２Ｂ】本発明の一実施形態に係る転送記述子を使用するための構成の概略ブロック図である。
【図２Ｃ】本発明の一実施形態に係る転送記述子を使用するための構成の概略ブロック図である。
【図２Ｄ】本発明の一実施形態に係る転送記述子を使用するための構成の概略ブロック図である。
【図３】従来技術に係る命令語のフィールドの図である。
【図４Ａ】本発明の一実施形態に係るメモリアクセスコマンドにおける転送記述子を処理するための方法のプロセスフロー図を示す。
【図４Ｂ】本発明の一実施形態に係る、メモリアクセスコマンドにおける転送記述子を処理するための方法のプロセスフロー図を示す。
【発明を実施するための形態】
【０００６】
本明細書の図面において概して記述および説明されている本発明の構成要素は、多種多様な異なる構成で配置および設計できることが容易に理解されるであろう。したがって、図面に表された本発明の実施形態の以下のより詳細な説明は、請求される本発明の範囲を限定する意図はではなく、単に本発明に係る現在考えられる実施形態のいくつかの例を表している。現在記述されている実施形態は、同様の部材が全体を通じて同様の数字で示されている図面を参照することで最もよく理解されるであろう。
【０００７】
本発明に係る実施形態は、装置、方法、またはコンピュータプログラム製品として具体化され得る。したがって、本発明は、完全にハードウェアの実施形態、完全にソフトウェアの実施形態（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）、または、本明細書では「モジュール」または「システム」としてすべて参照され得るソフトウェアおよびハードウェアの態様を組み合わせた実施形態の形態をとってよい。さらに、本発明は、媒体に具体化されたコンピュータ使用可能プログラムコードを有する表現の任意の有形の媒体に具体化されたコンピュータプログラム製品の形態を取ってよい。
【０００８】
非一時的媒体を含む、１つまたは複数のコンピュータ使用可能媒体またはコンピュータ可読媒体の任意の組み合わせが利用され得る。例えば、コンピュータ可読媒体は、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ（ＲＡＭ）デバイス、読み出し専用メモリ（ＲＯＭ）デバイス、消去可能プログラマブル読み出し専用メモリ（ＥＰＲＯＭまたはフラッシュメモリ）デバイス、ポータブルコンパクトディスク読み出し専用メモリ（ＣＤＲＯＭ）、光記憶装置、および磁気記憶装置の１つまたは複数を含見得る。選ばれた実施形態では、コンピュータ可読媒体は、命令実行システム、装置、またはデバイスによって使用される、又は関連するプログラムを、含む、格納する、通信する、伝播する、または転送することができる任意の非一時的媒体を含み得る。
【０００９】
本発明の操作を実行するためのコンピュータプログラムコードは、Ｊａｖａ（登録商標）、Ｓｍａｌｌｔａｌｋ（登録商標）、Ｃ++などのオブジェクト指向プログラミング言語、および"Ｃ"プログラミング言語または同様のプログラミング言語などの従来の手続き型プログラミング言語を含む、１つまたは複数のプログラミング言語の任意の組み合わせで記載され得る。プログラムコードは、全体的にスタンドアローンのソフトウェアパッケージとしてコンピュータシステム上で、全体的にスタンドアローンのハードウェアユニット上で、一部がコンピュータからある程度の距離の離れたリモートコンピュータ上で、或いは全体的にリモートコンピュータ上で、又はサーバ上で実行され得る。後者のシナリオでは、リモートコンピュータは、ローカルエリアネットワーク（ＬＡＮ）またはワイドエリアネットワーク（ＷＡＮ）を含む任意のタイプのネットワークを介してコンピュータに接続されてもよく、或いは、（例えば、インターネットサービスプロバイダを使用してインターネットを介して）外部コンピュータに接続されてもよい。
【００１０】
本発明の実施形態に係る方法、装置（システム）およびコンピュータプログラム製品のフローチャート図および/またはブロック図を参照して以下に本発明は記載される。フローチャート図および/またはブロック図の各ブロック、ならびにフローチャート図および/またはブロック図におけるブロックの組み合わせは、コンピュータプログラム命令またはコードによって実装できることが理解されよう。これらのコンピュータプログラム命令は、コンピュータまたは他のプログラム可能データ処理装置のプロセッサを介して実行する命令が、フローチャートおよび/またはブロック図のブロックまたは複数のブロックで指定された機能/動作を実装するための手段を作成するように、汎用コンピュータ、専用コンピュータ、または他のプログラム可能データ処理装置のプロセッサに提供されて、機械を製造し得る。
【００１１】
これらのコンピュータプログラム命令は、コンピュータまたは他のプログラム可能データ処理装置に特定の仕方で機能するように指示することができ、コンピュータ可読媒体に格納された命令が、フローチャートおよび/またはブロック図のブロックまたは複数のブロックで指定された機能/動作を実装する命令手段を含む製造品を製造するように、非一時的コンピュータ可読媒体に格納されてもよい。
【００１２】
コンピュータプログラム命令はまた、コンピュータまたは他のプログラム可能装置上で実行される命令が、フローチャートおよび/またはブロック図のブロックまたは複数のブロックで指定される機能/動作を実装するためのプロセスを提供するように、コンピュータまたは他のプログラム可能データ処理装置にロードされて、コンピュータまたは他のプログラム可能装置上で一連の操作ステップを実行させて、コンピュータ実装プロセスを生成してもよい。
【００１３】
図１は、例示的なコンピュータデバイス１００を示すブロック図である。コンピュータデバイス１００は、本明細書で論じられるものなどの様々な手順を実行するために使用され得る。コンピュータデバイス１００は、サーバ、クライアント、または任意の他のコンピューティングエンティティ（other computing entity）として機能することができる。コンピュータデバイスは、本明細書で論じるような様々なモニタリング機能を実行することができ、本明細書に記述するアプリケーションプログラムなどの１つまたは複数のアプリケーションプログラムを実行することができる。コンピュータデバイス１００は、例えば、デスクトップコンピュータ、ノートブックコンピュータ、サーバコンピュータ、ハンドヘルドコンピュータ、タブレットコンピュータなどの多種多様なコンピュータデバイスのいずれかとすることができる。
【００１４】
コンピュータデバイス１００は、１つまたは複数のプロセッサ１０２、１つまたは複数のメモリ装置１０４、１つまたは複数のインタフェース１０６、１つまたは複数の大容量記憶装置１０８、１つまたは複数の入力/出力（Ｉ/Ｏ）デバイス、および表示装置１３０を含み、これらすべてはバス１１２に接続される。（複数の）プロセッサ１０２は、（複数の）メモリ装置１０４および/または（複数の）大容量記憶装置１０８に格納された命令を実行する１つまたは複数のプロセッサまたはコントローラを含む。（複数の）プロセッサ１０２は、キャッシュメモリなどの様々な種類のコンピュータ可読媒体を含んでもよい。
【００１５】
（複数の）メモリ装置１０４は、揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）１１４）および/または不揮発性メモリ（例えば、読み出し専用メモリ（ＲＯＭ）１１６）などの様々なコンピュータ可読媒体を含む。（複数の）メモリ装置１０４はまた、フラッシュメモリなどの書き換え可能なＲＯＭを含んでもよい。
【００１６】
（複数の）大容量記憶装置１０８は、磁気テープ、磁気ディスク、光ディスク、ソリッドステートメモリ（例えば、フラッシュメモリ）などの様々なコンピュータ可読媒体を含む。図１に示すように、具体的な大容量記憶装置はハードディスクドライブ１２４である。（複数の）大容量記憶装置１０８には様々なドライブが含まれ、様々なコンピュータ可読媒体からの読み出しおよび/または書き込みを可能にしてもよい。（複数の）大容量記憶装置１０８は、リムーバブルメディア１２６および/または非リムーバブルメディアを含む。
【００１７】
（複数の）Ｉ/Ｏデバイス１１０は、データおよび/または他の情報がコンピュータデバイス１００に入力されるか、またはコンピュータデバイス１００から取り出されることを可能にする様々なデバイスを含む。例示的な（複数の）Ｉ/Ｏデバイス１１０は、カーソル制御デバイス、キーボード、キーパッド、マイク、モニタまたは他の表示装置、スピーカー、プリンタ、ネットワークインタフェースカード、モデム、レンズ、ＣＣＤまたは他の画像キャプチャ装置などを含む。
【００１８】
表示装置１３０は、コンピュータデバイス１００の１人または複数人のユーザに情報を表示することができる任意の種類のデバイスを含む。表示装置１３０の例は、モニタ、表示端末、ビデオ投影装置などを含む。
【００１９】
グラフィックス・プロセッシングユニット（ＧＰＵ）１３２は、（複数の）プロセッサ１０２および/または表示装置１３０に接続されてよい。ＧＰＵは、コンピュータ生成画像をレンダリングし、及び他のグラフィカル処理を実行するように動作可能であってよい。ＧＰＵは、（複数の）プロセッサ１０２などの汎用プロセッサの機能の一部または全部を含み得る。ＧＰＵは、グラフィックス処理に特有の追加の機能を含んでもよい。ＧＰＵは、座標変換、シェーディング、テクスチャリング、ラスタライズ、およびコンピュータ生成画像のレンダリングに役立つ他の機能に関連するハードコードされたグラフィックス機能、および/またはハードワイヤードのグラフィックス機能を含み得る。
【００２０】
（複数の）インタフェース１０６は、コンピュータデバイス１００が他のシステム、デバイス、またはコンピューティング環境と情報をやり取りすることを可能にする様々なインタフェースを含む。例示的な（複数の）インタフェース１０６は、ローカルエリアネットワーク（ＬＡＮ）、広域ネットワーク（ＷＡＮ）、無線ネットワーク、およびインターネットへのインタフェースなどの任意の数の様々なネットワークインタフェース１２０を含む。他の（複数の）インタフェースは、ユーザインタフェース１１８と周辺装置インタフェース１２２とを含む。（複数の）インタフェース１０６はまた、１つまたは複数のユーザインタフェース要素１１８を含んでもよい。（複数の）インタフェース１０６はまた、例えば、プリンタ、ポインティングデバイス（マウス、トラックパッドなど）、キーボードなどのインタフェースのような、１つまたは複数の周辺インタフェースを含んでもよい。
【００２１】
バス１１２は、（複数の）プロセッサ１０２、（複数の）メモリ装置１０４、（複数の）インタフェース１０６、（複数の）大容量記憶装置１０８、および（複数の）Ｉ/Ｏデバイス１１０が相互に通信することを可能にし、バス１１２に接続された他のデバイスまたは要素との通信も可能にする。バス１１２は、システムバス、ＰＣＩバス、ＩＥＥＥ１３９４バス、ＵＳＢバスなどのいくつかの種類のバス構造の１つまたは複数を表す。
【００２２】
説明のために、プログラムおよび他の実行可能なプログラム要素は、本明細書では個別のブロックとして示されているが、そのようなプログラムおよび要素は、コンピュータデバイス１００の様々な時間に異なる記憶要素に存在し得、プロセッサ１０２によって実行され得ることが理解される。代わりに、本明細書に記載のシステムおよび手順は、ハードウェアで、またはハードウェア、ソフトウェア、および/またはファームウェアの組み合わせで実装されることができる。例えば、１つまたは複数の特定用途向け集積回路（ＡＳＩＣ）は、本明細書で記載される１つまたは複数のシステムおよび手順を実行するようにプログラムすることができる。
【００２３】
図２Ａ〜図２Ｄを参照すると、以下により詳細に記述するように、メモリアクセスコマンドは、ソースアドレスおよび/またはデスティネーションアドレスよりもむしろ転送記述子を参照し得る。転送記述子は、実行時に、メモリアクセスコマンドのアドレス（ソースまたはデスティネーション）として、その後に使用される値を生成する実行可能コードである。転送記述子が格納される場所と、転送記述子を実行するデバイスとは、変わってもよい。
【００２４】
例えば、特に図２Ａを参照すると、処理装置１０２は、メモリ装置１０４に格納されたアプリケーション２００を実行し得る。アプリケーション２００の命令は、処理装置１０２によって取り出され、実行されてよい。命令が転送記述子を参照する場合、処理装置１０２は、例えば、プロセッサに接続されたキャッシュメモリまたは他のメモリ装置などの別個のメモリ装置１０４として具体化された転送記述子バッファ２０２から転送記述子を取り出し得る。
【００２５】
図２Ｂを参照すると、他の実施形態では、転送記述子バッファ２０２は、アプリケーション２００と同じメモリ装置１０４内の記憶領域にある。
【００２６】
図２Ｃを参照すると、他の実施形態では、ダイレクトメモリアクセス（ＤＭＡ）コントローラが、処理装置１０２およびメモリ装置１０４ならびに転送記述子バッファ２０２に接続される。メモリアクセスコマンドの転送記述子は、次に、ＤＭＡコントローラ２０４によって実行され得、ＤＭＡコントローラ２０４は、次に、転送記述子の結果に基づいてメモリ装置１０４からデータ値を取り出し、そのデータ値を処理装置１０２または他の要素に返し得る。
【００２７】
図２Ｄを参照すると、さらに別の実装において、本明細書では転送記述子コントローラ２０６として参照される別の要素が、転送記述子バッファ２０２からの転送記述子を処理し、転送記述子の処理結果に従ってデータ値を取り出し、そのデータ値を処理装置１０２に返し得る。
【００２８】
図３を参照すると、処理装置１０２によって実行される命令語は、命令コード３００、ソースタイプ３０２、ソースアドレス３０４、デスティネーションタイプ３０６、およびデスティネーションアドレス３０８を含む、図示されたフィールドの一部または全部を含み得る。命令語の図示されたフォーマットは標準的なものであり、当技術分野で知られている多くのプロセッサまたはメモリコントローラによって実行され得る。従来の命令語のフィールドは、以下により詳細に記述するように、新規の転送記述子を実装するために、別の目的で用いられる。
【００２９】
命令コード３００は、ソースアドレス３０４から取り出されたデータに関して実行される操作を規定し、その操作の結果はデスティネーションアドレス３０８に書き込まれる。ソースタイプ３０２は、従来、ソースデータがソースアドレス３０４から読み出されるメモリ装置を指定するために使用される。同様に、デスティネーションタイプ３０６は、従来、デスティネーションアドレス３０８に操作の結果が書き込まれるメモリ装置を指定するために使用される。本明細書に記載の方法によれば、ソースタイプ３０２は、メモリ装置または転送記述子のいずれかを参照し得る。ソースタイプ３０２が転送記述子を参照する場合、ソースアドレス３０４は、実行する転送記述子を識別するためにデコードされる。同様に、デスティネーションタイプ３０６が転送記述子を参照する場合、デスティネーションアドレス３０８は、実行する転送記述子を決定するためにデコードされる。ソースタイプ３０２およびデスティネーションタイプ３０６は、好ましくは、命令コード３００によって指定されるものとして実行される操作に影響を与えない。言い換えると、ソースタイプ３０２およびデスティネーションタイプ３０６は、命令コード３００によって指定された操作に従って処理されるべきデータを決定するためにのみに使用されるが、データに対して実行される操作は、データがソースアドレス３０４およびデスティネーションアドレス３０８から直接取り出されたか、または転送記述子の実行の結果として取り出されたかにかかわらず同じである。
【００３０】
図４Ａおよび図４Ｂを参照すると、図示の方法４００は、図３の命令のフィールドを有する命令などの命令を処理するときに実行されてよい。上述のように、方法４００のステップは、処理装置１０２、ＤＭＡコントローラ２０４、専用の転送コントローラ２０６、または他の要素、或いはこれらのデバイスの２つ以上の組み合わせによって実行されてもよい。例えば、いくつかの実施形態では、方法４００は、処理装置１０２に対してトランスペアレントであってよく、すなわち、メモリアクセス命令がメモリ制御システムに提示され、転送記述子のいかなる処理も処理装置１０２によって実行されることなく、応答が受信されてよい。
【００３１】
方法４００は、命令語（例えば、命令語３００）を受信する(４０２)こと、および命令語のソースタイプを評価する(４０４)ことを含む。ソースタイプが転送記述子フラグではない場合、その後、命令語のソースアドレスに位置するデータが、ソースタイプによって参照されるメモリ装置１０４からフェッチされる（４０６）。その後、命令語の命令コードによって示される操作が実行され（４０８）、操作の結果（“結果データ”）が出力される（４１０）。
【００３２】
転送記述子フラグを含むソースタイプが見つかった（４０４）場合、その後、転送記述子が実行される（４１２）。具体的には、命令語のソースアドレスに対応する転送記述子が実行される（４１２）。例えば、転送記述子がバッファに格納される場合、バッファ内のソースアドレスに開始アドレスを有する転送記述子が実行されてよい（４１２）。代わりに、各転送記述子は識別子を有してもよく、命令語のソースアドレスと一致する識別子を有する転送記述子が実行されてよい（４１２）。転送記述子の実行結果(４１２)は、転送記述子によって出力される(４１４)出力データである（以下、「第１中間値」と呼ぶ）。
【００３３】
いくつかの実施形態では、命令語の命令コードによって示される操作が実行され（４０８）、その操作の結果が出力される（４１０）。他の実施形態では、中間結果はアドレスである。したがって、メモリ装置１０４内の中間値において格納された値が取り出され、その後、取り出された値に対して命令コードによって示される操作が実行される（４０８）。
【００３４】
図４Ｂを参照すると、ステップ４０２で受信された命令語の処理は、命令語のデスティネーションタイプを評価する（４１６）ことをさらに含み得る。デスティネーションタイプが転送記述子フラグでない場合、その後、結果データは、命令語のデスティネーションタイプによって示されるメモリ装置１０４に、命令語のデスティネーションアドレスにおいて書き込まれる（４１８）。
【００３５】
デスティネーションタイプが転送記述子フラグを含むことが判明した（４１８）場合、その後、命令語のデスティネーションアドレスによって識別される転送記述子が実行される（４２０）。転送記述子は、転送記述子がソースアドレスに対して識別されるものとして上述したのと同じようにして、デスティネーションアドレスに基づいて識別されてよい。
【００３６】
転送記述子の実行（４２０）は、出力値（「第２の中間結果」）を含んでよい。第２の中間結果は、アドレスであってよい。ステップ４１０の結果データは、その後、第２の中間結果に対応するアドレスにおいてメモリ装置１０４に書き込まれる（４２４）。
【００３７】
いくつかの実施形態では、操作は、１つの操作される（ソースまたはデスティネーション）のみを含む。したがって、いくつかの実施形態では、ソースタイプのみが、図４Ａに記述したように転送記述子を実行する可能性があり、または、図４Ｂに記述したようにデスティネーションタイプのみが転送記述子に潜在的に対応する。他の例では、ソースタイプとデスティネーションタイプの両方によって示されるように、２つの転送記述子が、各命令語に対して実行される。
【００３８】
前述の記述から明らかなように、転送記述子は、メモリアクセス機能の期間中に実行される機能のカスタマイズおよび拡張を提供する。以下は、転送記述子を用いて実装され得る機能の例である。
【００３９】
先入れ先出し（ＦＩＦＯ）バッファは、転送記述子を用いて実装され得、それによって、ＦＩＦＯバッファにアクセスする実行の複数のスレッド（multiple threads of execution）間でオブジェクトを共有する必要がなくなる。第１の転送記述子は、新しいエントリがＦＩＦＯバッファに書き込まれるべき現在の位置を示す書き込みポインタを維持し得る。第２の転送記述子は、新しいエントリがＦＩＦＯバッファから読み出されるべき現在の位置を示す読み出しポインタを維持し得る。第１の転送記述子は、書き込み要求に応じて書き込みポインタを更新し、書き込み要求に応じてポインタの現在の値を返す機能を規定してよい。例えば、第１の転送記述子は、バッファのサイズ（例えば、エントリの数）及びバッファの開始アドレスを含み得る。
【００４０】
第１の転送記述子について、書き込み要求を受信すると、ポインタがインクリメントされる。インクリメントされた値がバッファのサイズを超えるか、または、バッファの終了アドレスの外側にある場合、ポインタはバッファの開始アドレスを指すように更新されてよい。第２の転送記述子について、読み出し要求を受信すると、ポインタが更新され、そのポインタがバッファのサイズを超えた場合、またはバッファの終了アドレスの外側にあるアドレスを指す場合、ポインタはバッファの開始アドレスに設定される。
【００４１】
したがって、ＭＯＶＥ命令を示す命令コード、転送記述子フラグに設定されたソースタイプ、および第１の転送記述子を指し示すソースアドレスを有するアプリケーションによって命令が生成され得る。この命令を受信すると、第１の転送記述子が実行され、書き込みポインタの現在値の出力し、書き込みポインタを更新する結果となる。メモリ装置１０４内の書込みポインタの現在の値に格納された値は、その後、命令の結果として読み出され、返される。
【００４２】
別の例では、ＭＯＶＥ命令を示す命令コードと、転送記述子フラグに設定されたデスティネーションタイプと、第２の転送記述子を指し示すデスティネーションアドレスとを有するアプリケーションによって、命令が生成され得る。この命令を受信すると、第２の転送記述子が実行され、読み出しポインタの現在値を出力し、読み出しポインタを更新する結果となる。その後、データ値は、メモリ装置１０４内の読み出しポインタの現在の値に書き込まれ得る。
【００４３】
上記の例から明らかなように、転送記述子は、或る命令から次の命令まで持続的（ｐｅｒｓｉｓｔｅｎｔ）であり、且つ転送記述子が呼び出されたときに更新される状態変数を含み得る。いくつかの実施形態では、アプリケーションまたは他のソフトウェア、或いはハードウェア要素は、１つまたは複数の転送記述子の状態変数を監視し、イベントを生成し得る。例えば、転送記述子の状態変数が、閾値条件が満たされていることを示す場合、その後、１つまたは複数のスレッドは、ブロックされるか、実行の異なるスレッドに分岐するか、開始されるかまたはインスタンスを生成する（instantiate）か、或いは他のスレッド管理機能の対象とされ得る。
【００４４】
例えば、上述したＦＩＦＯバッファを規定する転送記述子の読み出しポインタ及び書き込みポインタが比較されてもよく、読み出しポインタが、書き込みポインタからオフセットされた閾値よりも小さい場合、バッファはほぼ空であるとみなされ得、閾値が超過されたことがわかるまで、ＦＩＦＯバッファへの要求を行おうと試みるスレッドがブロックされ得る。同様に、読み出しポインタが書き込みポインタからオフセットされた第２の閾値量を上回る場合、ＦＩＦＯバッファはほぼ満杯であるとみなされ得、第２の閾値がもはや超過されなくなるまで、ＦＩＦＯバッファへの書込みを試みるスレッドはブロックされ得る。
【００４５】
本発明は、その趣旨または本質的な特徴から逸脱することなく、他の特定の形態で実施され得る。記載された実施形態は、すべての点において、単に例示的なものであり、限定的なものではないとみなされるべきである。したがって、本発明の範囲は、前述の記述によってではなく、添付の特許請求の範囲によって示される。特許請求の均等の意味および範囲内に入るすべての変更は、その範囲内に含まれるべきである。
【図１】
2018537800.tif 000003
【図２Ａ】
2018537800.tif 000004
【図２Ｂ】
2018537800.tif 000005
【図２Ｃ】
2018537800.tif 000006
【図２Ｄ】
2018537800.tif 000007
【図３】
2018537800.tif 000008
【図４Ａ】
2018537800.tif 000009
【図４Ｂ】
2018537800.tif 000010
【国際調査報告】
2018537800.tif 000011