(57)【要約】      （修正有）【課題】遠隔アトミックオペレーションの空間的・時間的マージに関する。【解決手段】２つ以上のプロセッサコアが、最適化回路部のインスタンスおよびＲＡＯ命令キューのインスタンスを組み込む、中レベルキャッシュ（例えば、Ｌ１、Ｌ２、およびＬ３キャッシュを含む階層におけるＬ２キャッシュ）制御回路を共有する。最適化回路部の組み込みインスタンスは、入来するＲＡＯ命令を空間的および／または時間的に組み合わせる機会を特定して利用するためのものである。組み合わせの機会が検出されない場合、中レベルキャッシュ制御回路は、自身のＲＡＯリクエストキューのインスタンスにそれらをバッファし、数タイムアウトサイクルにわたってそれらの送出を遅延させることで、同じラインに別のリクエストが入って来るためのいくらかの時間を取ることを可能とし、それらのリクエストを時間的および／または空間的に組み合わせるようにする。【選択図】図５
2019121351.tif 000002
【特許請求の範囲】
【請求項１】
遠隔アトミックオペレーション（ＲＡＯ）命令を弱い順序付けでアトミックに実行するためのシステムであって、
各エントリが、オペコード、デスティネーション識別子、およびソースデータを含む１または複数のＲＡＯ命令をエンキューする、デスティネーションキャッシュラインによってグループ化された複数のエントリを有するＲＡＯ命令キューと、
入来ＲＡＯ命令を受け取り、前記入来ＲＡＯ命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するＲＡＯ命令を検出するべく前記ＲＡＯ命令キューをスキャンする、最適化回路部とを備え、
前記最適化回路部はさらに、
エンキュー済みの合致するＲＡＯ命令が検出されないことに応答して、前記入来ＲＡＯ命令を前記ＲＡＯ命令キューにエンキューし、
エンキュー済みの合致するＲＡＯ命令が検出されたことに応答して、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインＲＡＯ命令の同じグループにエンキューすることにより、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令を空間的に組み合わせる、
システム。
【請求項２】
前記最適化回路部はさらに、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が同じデスティネーション識別子と異なるが対応性のあるオペコードとを有することから、部分的なオーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、特別な処理を行う、請求項１に記載のシステム。
【請求項３】
前記最適化回路部はさらに、オーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令を時間的に組み合わせる、請求項１に記載のシステム。
【請求項４】
前記最適化回路部はさらに、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令が完了するまで前記入来ＲＡＯ命令を遅延させ、続いて前記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う、請求項１に記載のシステム。
【請求項５】
前記入来ＲＡＯ命令および前記エンキュー済みＲＡＯ命令は、各々が要素サイズ識別子をさらに含み、前記最適化回路部はさらに、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が同じデスティネーション識別子および同じオペコードを有するが異なる特定された要素サイズを有することから、部分的なオーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令が完了するまで前記入来ＲＡＯ命令を遅延させ、続いて前記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う、請求項１に記載のシステム。
【請求項６】
前記最適化回路部はさらに、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、未完信号をＴＲＵＥに設定した状態で前記合致するＲＡＯ命令を実行対象としてディスパッチし、続いて前記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う、請求項１に記載のシステム。
【請求項７】
規則的にインクリメントするシステムカウンタをさらに備え、
各ＲＡＯ命令キューエントリは、満了タイムスタンプをさらに含み、
前記最適化回路部はさらに、前記入来ＲＡＯ命令をエンキューするときに、前記満了タイムスタンプを前記システムカウンタよりも前の予め定められた時間量に初期化し、前記エンキュー済みＲＡＯ命令は、前記満了タイムスタンプが前記システムカウンタよりも前である限り、他の命令と組み合わせることが可能である、
請求項１に記載のシステム。
【請求項８】
各々が前記ＲＡＯ命令キューのインスタンスおよび前記最適化回路部のインスタンスを組み込む複数のコアをさらに備え、各コアは、
ＲＡＯ命令をコードストレージからフェッチするフェッチ回路部と、
前記フェッチされた命令をデコードし、自身の最適化回路部のインスタンスに提供するデコード回路部と、
自身のＲＡＯ命令キューのインスタンスをスキャンし、満了タイムスタンプが前記システムカウンタを超過する１または複数のエンキュー済みＲＡＯ命令のうちからエンキュー済みＲＡＯ命令を選択し、前記選択されたＲＡＯ命令を、前記システムにおける複数の実行回路のうちから選択される実行回路部による実行のためにディスパッチする、スケジューリング回路部とをさらに含み、
前記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも１つを最適化するように選択される順序で、前記ＲＡＯ命令を他のエンキュー済みＲＡＯ命令に関してアウトオブオーダで選択する、
請求項７に記載のシステム。
【請求項９】
規則的にインクリメントするシステムカウンタであって、各ＲＡＯ命令キューエントリは、満了タイムスタンプをさらに含み、前記最適化回路部はさらに、前記入来ＲＡＯ命令をエンキューするときに、前記満了タイムスタンプを前記システムカウンタよりも前の予め定められた時間量に初期化し、前記エンキュー済みＲＡＯ命令は、前記満了タイムスタンプが前記システムカウンタよりも前である限り、他の命令と組み合わせることが可能である、システムカウンタと、
前記ＲＡＯ命令キューおよび前記最適化回路部のインスタンスを組み込むキャッシュ制御回路とをさらに備え、
前記キャッシュ制御回路は、
ＲＡＯ命令を受け取って自身の最適化回路部のインスタンスに提供するインタフェース回路部であって、前記最適化回路部は、組み合わせの機会がある場合、前記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューされたＲＡＯ命令と組み合わせ、組み合わせの機会がない場合、前記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューする、インタフェース回路部と、
自身のＲＡＯ命令キューのインスタンスをスキャンして、満了タイムスタンプが前記システムカウンタを超過する１または複数のエンキュー済みＲＡＯ命令のうちでＲＡＯ命令を選択し、前記選択された命令を実行対象としてスケジューリングする、スケジューリング回路部であって、前記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも１つを最適化するように選択される順序で、前記ＲＡＯ命令を他のエンキュー済みＲＡＯ命令に関してアウトオブオーダで選択する、スケジューリング回路部と、
前記デスティネーション識別子によりアドレス指定されるキャッシュライン全体を読み込み、前記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して前記選択された命令を行い、特定されたデスティネーションが同じキャッシュラインをアドレス指定する１または複数の追加的なエンキュー済みＲＡＯ命令を行い、前記キャッシュラインを前記キャッシュにライトバックし、確認を１または複数のリクエスト元の処理コアに送ることにより、前記選択されたＲＡＯ命令を実行する実行回路部と
をさらに含む、
請求項１から６のいずれか一項に記載のシステム。
【請求項１０】
規則的にインクリメントするシステムカウンタであって、各ＲＡＯ命令キューエントリは、満了タイムスタンプをさらに含み、前記最適化回路部はさらに、前記入来ＲＡＯ命令をエンキューするときに、前記満了タイムスタンプを前記システムカウンタよりも前の予め定められた時間量に初期化し、前記エンキュー済みＲＡＯ命令は、前記満了タイムスタンプが前記システムカウンタよりも前である限り、他の命令と組み合わせることが可能である、システムカウンタと、
前記ＲＡＯ命令キューおよび前記最適化回路部のインスタンスを組み込む中レベル共有キャッシュ制御回路とをさらに備え、
前記中レベル共有キャッシュ制御回路は、
ＲＡＯ命令を受け取って自身の最適化回路部のインスタンスに提供するインタフェース回路部であって、前記最適化回路部は、組み合わせの機会がある場合、前記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューされたＲＡＯ命令と組み合わせ、組み合わせの機会がない場合、前記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューする、インタフェース回路部と、
自身のＲＡＯ命令キューのインスタンスをスキャンして、満了タイムスタンプが現在のタイムスタンプを超過する１または複数のエンキュー済みＲＡＯ命令のうちでＲＡＯ命令を選択し、前記選択された命令を実行対象としてスケジューリングする、スケジューリング回路部であって、前記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも１つを最適化するように選択される順序で、前記ＲＡＯ命令を他のエンキュー済みＲＡＯ命令に関してアウトオブオーダで選択する、スケジューリング回路部と、
前記デスティネーション識別子によりアドレス指定されるキャッシュライン全体を読み込み、前記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して前記選択されたＲＡＯ命令を行い、特定されたデスティネーションが同じキャッシュラインをアドレス指定する１または複数の追加的なエンキュー済みＲＡＯ命令を行い、前記キャッシュラインを前記キャッシュにライトバックし、確認を１または複数のリクエスト元の処理コアに送ることにより、前記選択されたＲＡＯ命令を実行する実行回路部と
をさらに含む、
請求項１から６のいずれか一項に記載のシステム。
【請求項１１】
遠隔アトミックオペレーション（ＲＡＯ）命令を弱い順序付けでアトミックに実行するための方法であって、
最適化回路部が、入来ＲＡＯ命令を受け取る段階と、
前記最適化回路部が、各ＲＡＯ命令がオペコード、デスティネーション識別子、およびソースデータを含む、デスティネーションキャッシュラインによってグループ化された複数のエントリを有するＲＡＯ命令キューをスキャンし、前記入来ＲＡＯ命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するＲＡＯ命令を検出する段階とを備え、
前記最適化回路部はさらに、
エンキュー済みの合致するＲＡＯ命令が検出されないことに応答して、前記入来ＲＡＯ命令を前記ＲＡＯ命令キューにエンキューし、
エンキュー済みの合致するＲＡＯ命令が検出されたことに応答して、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインＲＡＯ命令の同じグループにエンキューすることにより、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令を空間的に組み合わせる、
方法。
【請求項１２】
前記最適化回路部が、オーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令を時間的に組み合わせる段階をさらに備える、請求項１１に記載の方法。
【請求項１３】
前記最適化回路部が、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令が完了するまで前記入来ＲＡＯ命令を遅延させ、続いて前記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う段階をさらに備える、請求項１１に記載の方法。
【請求項１４】
前記入来ＲＡＯ命令および前記エンキュー済みＲＡＯ命令は、各々が要素サイズ識別子をさらに含み、前記最適化回路部はさらに、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が同じデスティネーション識別子および同じオペコードを有するが異なる特定された要素サイズを有することから、部分的なオーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令が完了するまで前記入来ＲＡＯ命令を遅延させ、続いて前記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う、請求項１１に記載の方法。
【請求項１５】
前記最適化回路部が、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、未完信号をＴＲＵＥに設定した状態で前記合致するＲＡＯ命令を実行対象としてディスパッチし、続いて前記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う段階をさらに備える、請求項１１に記載の方法。
【請求項１６】
前記入来ＲＡＯ命令をエンキューするときに、満了タイムスタンプを、規則的にインクリメントするシステムカウンタよりも前の予め定められた時間量に初期化する段階をさらに備え、前記満了タイムスタンプは、前記入来ＲＡＯ命令と共に前記ＲＡＯ命令キューに保持され、前記満了タイムスタンプが前記システムカウンタよりも前である限り、前記入来ＲＡＯ命令を他の入来ＲＡＯ命令と組み合わせることを可能とする、
請求項１１に記載の方法。
【請求項１７】
スケジューリング回路部が、前記ＲＡＯ命令キューをスキャンして、満了タイムスタンプが前記システムカウンタを超過する１または複数のエンキュー済みＲＡＯ命令のうちからエンキュー済みＲＡＯ命令を選択する段階と、
前記スケジューリング回路部が、前記選択されたＲＡＯ命令を、前記方法における複数の実行回路のうちから選択される実行回路部による実行対象としてディスパッチする段階とをさらに備え、
前記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも１つを最適化するように選択される順序で、前記ＲＡＯ命令を他のエンキュー済みＲＡＯ命令に関してアウトオブオーダで選択する、
請求項１６に記載の方法。
【請求項１８】
キャッシュ制御回路が、前記ディスパッチされたＲＡＯ命令を受け取る段階であって、前記キャッシュ制御回路は、前記選択された実行回路部を含み、前記最適化回路部のインスタンスおよび前記ＲＡＯ命令キューのインスタンスを組み込む、段階と、
前記キャッシュ制御回路が、前記受け取ったＲＡＯ命令を自身の最適化回路部のインスタンスに提供する段階と、
最適化回路部の前記インスタンスが、空間的組み合わせの機会がある場合に、前記受け取ったＲＡＯ命令を既にエンキュー済みのＲＡＯ命令と組み合わせ、組み合わせの機会がない場合、前記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューする、段階と、
キャッシュ制御回路スケジューリング回路部が、自身のＲＡＯ命令キューのインスタンスをスキャンして、満了タイムスタンプが前記システムカウンタを超過する１または複数のエンキュー済みＲＡＯ命令のうちでＲＡＯ命令を選択する段階と、
前記デスティネーション識別子によりアドレス指定されるキャッシュライン全体をキャッシュから読み込み、前記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して前記選択されたＲＡＯ命令を行い、前記キャッシュラインを前記キャッシュにライトバックし、確認を１または複数のリクエスト元の処理コアに送ることにより、前記選択されたＲＡＯ命令を実行する段階と
をさらに備える、
請求項１１から１６のいずれか一項に記載の方法。
【請求項１９】
遠隔アトミックオペレーション（ＲＡＯ）命令を弱い順序付けでアトミックに実行するための装置であって、
各エントリが、オペコード、デスティネーション識別子、およびソースデータを含む１または複数のＲＡＯ命令をエンキューする、デスティネーションキャッシュラインによってグループ化された複数のエントリを有するＲＡＯ命令キューと、
入来ＲＡＯ命令を受け取り、前記入来ＲＡＯ命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するＲＡＯ命令を検出するべく前記ＲＡＯ命令キューをスキャンするための最適化手段とを備え、
前記最適化手段はさらに、
エンキュー済みの合致するＲＡＯ命令が検出されないことに応答して、前記入来ＲＡＯ命令を前記ＲＡＯ命令キューにエンキューし、
エンキュー済みの合致するＲＡＯ命令が検出されたことに応答して、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインＲＡＯ命令の同じグループにエンキューすることにより、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令を空間的に組み合わせる、
装置。
【請求項２０】
前記最適化手段はさらに、オーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令を時間的に組み合わせる、請求項１９に記載の装置。
【請求項２１】
前記最適化手段はさらに、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令が完了するまで前記入来ＲＡＯ命令を遅延させ、続いて前記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う、請求項１９または２０に記載の装置。
【請求項２２】
前記入来ＲＡＯ命令および前記エンキュー済みＲＡＯ命令は、各々が要素サイズ識別子をさらに含み、前記最適化手段はさらに、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が同じデスティネーション識別子および同じオペコードを有するが異なる特定された要素サイズを有することから、部分的なオーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令が完了するまで前記入来ＲＡＯ命令を遅延させ、続いて前記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う、請求項１９または２０に記載の装置。
【請求項２３】
命令を格納する非一時的機械可読媒体であって、前記命令は、プロセッサによって実行されると、前記プロセッサに、
最適化回路部が、入来ＲＡＯ命令を受け取ることと、
前記最適化回路部が、各ＲＡＯ命令がオペコード、デスティネーション識別子、およびソースデータを含む、デスティネーションキャッシュラインによってグループ化された複数のエントリを有するＲＡＯ命令キューをスキャンし、前記入来ＲＡＯ命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するＲＡＯ命令を検出することであって、
前記最適化回路部はさらに、
エンキュー済みの合致するＲＡＯ命令が検出されないことに応答して、前記入来ＲＡＯ命令を前記ＲＡＯ命令キューにエンキューし、
エンキュー済みの合致するＲＡＯ命令が検出されたことに応答して、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインＲＡＯ命令の同じグループにエンキューすることにより、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令を空間的に組み合わせる、ことと
によって、遠隔アトミックオペレーション（ＲＡＯ）命令を弱い順序付けでアトミックに実行させる、非一時的機械可読媒体。
【請求項２４】
前記格納された命令はさらに、前記最適化回路部が、オーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令を時間的に組み合わせることによって、前記プロセスに前記ＲＡＯ命令をさらに実行させる、請求項２３に記載の非一時的機械可読媒体。
【請求項２５】
前記格納された命令はさらに、前記最適化回路部が、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令が完了するまで前記入来ＲＡＯ命令を遅延させ、続いて前記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行うことによって、前記プロセスに前記ＲＡＯ命令をさらに実行させる、請求項２３または２４に記載の非一時的機械可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の分野は、概してコンピュータプロセッサアーキテクチャに関し、より具体的には、遠隔アトミックオペレーションの空間的・時間的マージに関する。
【背景技術】
【０００２】
アトミックメモリオペレーションは、プロセッサコアが、他のコアから見ると単一のバスオペレーションで、ロケーションの読み込み、変更、およびライトバックを行うメモリアクセスオペレーションである。アトミックメモリオペレーションは、典型的には処理コアの内部で行われる。しかしながら、一部のプロセッサまたはシステムは、コア外部でのアトミックの実行をサポートすることがあり、この場合、これらは遠隔アトミックオペレーション（ＲＡＯ）と称され得る。ＲＡＯは、いくつか例を挙げると、パケット処理、高性能コンピューティング、機械学習を含む多様なアプリケーションのセットにおいて、またより総称的には動的スケジューリングアルゴリズムにおいて、有用である。
【０００３】
ファイア・アンド・フォーゲット型アトミック（ｆｉｒｅ−ａｎｄ−ｆｏｒｇｅｔ  ａｔｏｍｉｃｓ）とも呼ばれる、ポストされたＲＡＯ（Ｐｏｓｔｅｄ  ＲＡＯ）は、アーキテクチャ情報をソフトウェアに返さないＲＡＯ命令のクラスである。これらは、アトミックなリード・モディファイ・ライト・オペレーションを行うようハードウェアに命令するが、レジスタへのリターン結果を用いない。ポストされたＲＡＯ命令は、弱く順序付けられ（ｗｅａｋｌｙ  ｏｒｄｅｒｅｄ）、コアがオペレーションを（例えばキャッシュ制御回路部に）オフロードして実行を継続することを可能とする。
【０００４】
しかしながら、ポストされたものか否かによらず、ＲＡＯの実行は、単一のスレッドが複数のＲＡＯを同じキャッシュラインに対して立て続けに実行する場合に特に、非効率的になることがある。これら複数のＲＡＯ命令はシリアル化されることがあり、それにより、各命令が終了して完了の確認応答を受け取ってからでないとそのシーケンスの次のものが実行を開始できなくなる。
【図面の簡単な説明】
【０００５】
添付の図面の各図において、限定ではなく例として本発明を示しており、また類似の参照符号は同様の要素を示す。
【０００６】
【図１】いくつかの実施形態に係る、遠隔アトミックオペレーションの命令を実行するための処理コンポーネントを示すブロック図である。
【０００７】
【図２】いくつかの実施形態に係る、遠隔アトミックオペレーションの命令を実行するプロセッサコアおよびキャッシュ制御回路部のブロックフロー図である。
【０００８】
【図３】いくつかの実施形態に係る、遠隔アトミックオペレーションの命令を実行するためのマルチプロセッサシステムの部分を示す。
【０００９】
【図４Ａ】いくつかの実施形態に係る、遠隔アトミックオペレーション命令のエンキューを示すブロックフロー図である。
【００１０】
【図４Ｂ】いくつかの実施形態に係る、遠隔アトミックオペレーション命令を既存のキュー入れ済みエントリと空間的に組み合わせることを示すブロックフロー図である。
【００１１】
【図４Ｃ】いくつかの実施形態に係る、遠隔アトミックオペレーションを格納するリクエストキューを示すブロック図である。
【００１２】
【図４Ｄ】いくつかの実施形態に係る、遠隔アトミックオペレーション命令を既存のキュー入れ済みエントリと空間的に組み合わせることを示すブロックフロー図である。
【００１３】
【図４Ｅ】いくつかの実施形態に係る、遠隔アトミックオペレーション命令を既存のキュー入れ済みエントリと時間的に組み合わせることを示すブロックフロー図である。
【００１４】
【図４Ｆ】いくつかの実施形態に係る、遠隔アトミックオペレーション命令の特別な処理を示すブロックフロー図である。
【００１５】
【図４Ｇ】いくつかの実施形態に係る、遠隔アトミックオペレーション命令の特別な処理を示すブロックフロー図である。
【００１６】
【図４Ｈ】いくつかの実施形態に係る、遠隔アトミックオペレーション命令の特別な処理を示すブロックフロー図である。
【００１７】
【図４Ｉ】いくつかの実施形態に係る、遠隔アトミックオペレーション命令の特別な処理を示すブロックフロー図である。
【００１８】
【図４Ｊ】いくつかの実施形態に係る、中央キャッシュ制御回路に転送される遠隔アトミックオペレーション命令を示すブロックフロー図である。
【００１９】
【図５】いくつかの実施形態に係る、受け取った遠隔アトミックオペレーション命令の処理を示すブロック図である。
【００２０】
【図６】いくつかの実施形態に係る、遠隔アトミックオペレーションの命令のフォーマットを示すブロック図である。
【００２１】
図７Ａ〜図７Ｂは、本発明の実施形態に係る、汎用ベクトルフレンドリ命令フォーマットおよびその命令テンプレートを示すブロック図である。
【００２２】
【図７Ａ】本発明の実施形態に係る、汎用ベクトルフレンドリ命令フォーマットおよびそのクラスＡ命令テンプレートを示すブロック図である。
【００２３】
【図７Ｂ】本発明の実施形態に係る、汎用ベクトルフレンドリ命令フォーマットおよびそのクラスＢ命令テンプレートを示すブロック図である。
【００２４】
【図８Ａ】本発明の実施形態に係る、例示的な特定ベクトルフレンドリ命令フォーマットを示すブロック図である。
【００２５】
【図８Ｂ】本発明の１つの実施形態に係る、フルオペコードフィールドを構成する特定ベクトルフレンドリ命令フォーマットのフィールドを示すブロック図である。
【００２６】
【図８Ｃ】本発明の１つの実施形態に係る、レジスタインデックスフィールドを構成する特定ベクトルフレンドリ命令フォーマットのフィールドを示すブロック図である。
【００２７】
【図８Ｄ】本発明の１つの実施形態に係る、オーグメンテーションオペレーションフィールドを構成する特定ベクトルフレンドリ命令フォーマットのフィールドを示すブロック図である。
【００２８】
【図９】本発明の１つの実施形態に係る、レジスタアーキテクチャのブロック図である。
【００２９】
【図１０Ａ】本発明の実施形態に係る、例示的なインオーダパイプラインおよび例示的なレジスタリネーミング・アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。
【００３０】
【図１０Ｂ】本発明の実施形態に係る、プロセッサに含まれるべきインオーダアーキテクチャコアの例示的実施形態および例示的なレジスタリネーミング・アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。
【００３１】
図１１Ａ〜図１１Ｂは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示す。当該コアは、チップ内のいくつかの論理ブロック（同じタイプおよび／または異なるタイプの他のコアを含む）のうちの１つであろう。
【００３２】
【図１１Ａ】本発明の実施形態に係る、単一プロセッサコアの、オンダイ相互接続ネットワークへの接続、およびレベル２（Ｌ２）キャッシュのローカルサブセットを併せたブロック図である。
【００３３】
【図１１Ｂ】本発明の実施形態に係る、図１１Ａのプロセッサコアの一部の拡大図である。
【００３４】
【図１２】本発明の実施形態に係る、１つよりも多くのコアを有し得、内蔵メモリコントローラを有し得、内蔵グラフィクスを有し得るプロセッサのブロック図である。
【００３５】
図１３〜図１６は、例示的コンピュータアーキテクチャのブロック図である。
【００３６】
【図１３】本発明の１つの実施形態に係るシステムのブロック図である。
【００３７】
【図１４】本発明の一実施形態に係る第１のより具体的な例示的システムのブロック図である。
【００３８】
【図１５】本発明の一実施形態に係る第２のより具体的な例示的システムのブロック図である。
【００３９】
【図１６】本発明の一実施形態に係るシステムオンチップ（ＳｏＣ）のブロック図である。
【００４０】
【図１７】本発明の実施形態に係る、ソース命令セットにおけるバイナリ命令をターゲット命令セットにおけるバイナリ命令に変換するソフトウェア命令コンバータの使用を対比するブロック図である。
【発明を実施するための形態】
【００４１】
以下の説明において、多数の具体的な詳細を記載する。しかしながら、本発明の実施形態は、これらの具体的な詳細を伴うことなく実施されてよいことを理解されたい。他の例では、この説明の理解を妨げることのないよう、周知の回路、構造および技法は詳細には示されていない。
【００４２】
本明細書における「１つの実施形態」、「一実施形態」、「例示的な実施形態」等の記載は、説明されている実施形態が特定の特徴、構造、または特性を含んでよいが、必ずしも全ての実施形態がその特定の特徴、構造、または特性を含まなくてもよいことを示す。また、そのような文言は、必ずしも同じ実施形態を指すものではない。さらに、ある実施形態に関連して特定の特徴、構造、または特性が説明される場合、明示的な説明の有無によらず、そのような特徴、構造、または特性を他の実施形態に関連して実施することは当業者の知識の範囲内であると考えられる。
【００４３】
本明細書に開示の実施形態は、複数のＲＡＯ命令を空間的および／または時間的に組み合わせる機会を検出および利用することにより、ＲＡＯ命令を実行する効率を向上し、コストを低減する。本明細書で用いる場合、空間的に組み合わせるとは、同じキャッシュライン内の異なるアドレスに対する複数のＲＡＯ命令を組み合わせる、例えば、キャッシュラインの第２の要素にアクセスする第１のＲＡＯ命令をキャッシュラインの第１０の要素にアクセスする第２のＲＡＯ命令と組み合わせることを指す。時間的に組み合わせるとは、可能な場合に、同じキャッシュラインロケーションに連続的にアクセスする複数のＲＡＯ命令を組み合わせる、例えば、アドレス指定ロケーションに「３３」を加算する第１のＲＡＯ命令を、当該アドレス指定ロケーションに「１１」を加算する第２のＲＡＯ命令と組み合わせて、当該アドレス指定ロケーションに「４４」を加算する単一のＲＡＯ命令とすることを指す。
【００４４】
本明細書に開示の実施形態は、ｘ８６プロセッサと互換性のあるアトミックメモリ命令のファミリをサポートする。本明細書で用いる場合、ｘ８６プロセッサとは、いくつかの異なる企業のうちの１つにより製造され、ｘ８６命令セットアーキテクチャ（ＩＳＡ）と互換性のあるプロセッサを指す。各命令は、メモリロケーションに対してアトミックな更新オペレーション（例えばリード・モディファイ・ライト）を行う。これらのメモリアクセスは、ｘ８６のノンテンポラル（ＮＴ）・ストアと同様に、同じスレッドからの他の命令に関して弱く順序付けられることがある。しかしながら、これらの命令は、同じスレッドからの命令との、リード・アフター・ライト、ライト・アフター・リードおよびライト・アフターライトの依存関係といった従来のデータハザードをこうむる。これらの命令は、プロセッサコア、プライベートキャッシュ、共有キャッシュもしくはキャッシングアンドホームエージェント（ｃａｃｈｉｎｇ  ａｎｄ  ｈｏｍｅ  ａｇｅｎｔ）（ＣＨＡ）、メモリコントローラ、または遠隔コアなど、多様なロケーションにおいて実行される場合がある。いくつかの実施形態において、各命令は、メモリに格納されたベクトルの複数の要素に対して並列オペレーションを行うためのものである。
【００４５】
開示の実施形態は、処理コアが、ＲＡＯ命令をキャッシュ制御回路による実行対象としてディスパッチし、キャッシュ制御回路がＲＡＯ命令を行っている間に有用な作業を継続して行うことを可能とするという利点を供する。コアは、少なくともスレッド内のフェンスおよび依存関係（例えば、同じメモリロケーションに対するリード・アフター・ライト）を実効化するべく、依然として処理中のＲＡＯ命令をトラッキングしなければならない。しかし、コアが複数の異なるキャッシュラインに対してＲＡＯ命令を行っていれば、コアがそのトラッキング能力を使い切る、またはキャッシュ制御回路部をリクエストで飽和させるまでは／そうしない限り、コアは、これらのＲＡＯ命令を非常に高いスループットで実行することができる。個々のＲＡＯ命令は高レイテンシを有する場合がある（コアからキャッシュ制御回路部まで進み、メモリロケーションを読み込み、オペレーションを行い、メモリロケーションをライトバックし、確認応答をコアに返さなければならない）ものの、このレイテンシは、その他の有用な作業とオーバーラップさせることで実質的に隠すことができる。
【００４６】
開示の実施形態は、複数のＲＡＯ命令のシリアル化の抑制を図り、アプリケーションが、同じキャッシュラインに対する複数のアトミックオペレーションを、バックツーバックで（ｂａｃｋ−ｔｏ−ｂａｃｋ）、または立て続けに（ｉｎ  ｑｕｉｃｋ  ｓｕｃｃｅｓｓｉｏｎ）、より効率的に行うことを可能とする。開示の実施形態は、同じキャッシュラインに対する複数のＲＡＯ命令がシリアル化されることで、コアがＲＡＯ命令ごとにキャッシュ制御回路部からの応答を待機しなければならなくなり、可能性として数十または数百サイクルにわたり実行がストールしてしまう事態を抑制する。ＲＡＯ命令は、ローカルキャッシュにあるデータについても、はるばる中央エージェント（キャッシュ制御回路部など）まで進んでから戻って来ることがあるので、これらをシリアル化するのは損失が大きい場合がある。開示の実施形態は、同じキャッシュラインに対するＲＡＯ命令を自動的に組み合わせるハードウェアを含むという利点を有する。
【００４７】
いくつかの実施形態は、同じキャッシュライン上のいくつかの異なるロケーションに対する複数のＲＡＯ更新を空間的に組み合わせる。これは、偶発的に（例えば特定の入力パターンに起因して）起こるものであってよく、またはアルゴリズムに本来固有のものであってもよい。例えば、ソフトウェアは、Ｃプログラミング言語における構造体などの単一オブジェクトの複数のフィールドを更新するための複数のＲＡＯ命令を発行する場合がある。具体例として、物理シミュレーションアプリケーションが、Ｃ構造体の配列、
【数１】
2019121351.tif 000003
として表される、オブジェクトのセットにかかる合力を計算する場合がある。これは多くの場合、以下のパターンに従う。
【数２】
2019121351.tif 000004
【００４８】
なお、ｘ、ｙ、およびｚに対する個々の更新は独立である（すなわち、これらは弱い順序付けで実行することができ、構造体全体をロックする必要はない）。開示の実施形態は、個々の更新をシリアル化することを避け、代わりにこれらのアトミックオペレーションのうち２つ以上を共に空間的に組み合わせる機会を捉える。
【００４９】
関連するシナリオにおいては、何らかのソフトウェアが、厳密に同じロケーションに対して複数のアトミックな更新を立て続けに行う場合がある。いくつかの開示の実施形態は、例えば同じロケーションのアトミックなインクリメントを２０回行うことを２０のアトミックな加算を１回行うことに変換することにより、これらのオペレーションを機会的に（ｏｐｐｏｒｔｕｎｉｓｔｉｃａｌｌｙ）時間的に組み合わせる。
【００５０】
より具体的には、開示の実施形態は、同じキャッシュラインに対するＲＡＯ命令の空間的および／または時間的な組み合わせを利用するハードウェアを含む。いくつかの実施形態は、ＲＡＯ命令が生成される各処理コアのみでなく、アトミックオペレーションが実際に行われるキャッシュ制御回路などの別個の実行回路においても、最適化回路部を含む。
【００５１】
いくつかの実施形態において、コア内のＲＡＯ命令キューは、保留中のＲＡＯ命令をキャッシュラインごとの単位でトラッキングする。いくつかの実施形態において、キャッシュラインは、６４バイト幅を有し、４バイト幅のデータパスを介してアクセスされる。他の実施形態において、キャッシュラインおよびアクセスデータパスのサイズは、限定されることなく、様々であり得る。いくつかの実施形態においては、キャッシュライン全体が、読み込みまたは書き込みのバーストを用いて実質的に一度にアクセスされる。よって、保留中のエンキュー済みＲＡＯ命令の各キャッシュラインが、バースト読み込みまたは書き込みを用いて読み込まれまたは書き込まれ得る。６４バイトキャッシュラインの４バイト要素ごとにアクセスする場合、１６回の読み込みまたは書き込みの一バーストを用いてキャッシュライン全体にアクセスすることができる。キャッシュラインの一部のみにアクセスする必要がある場合は、１６よりも少ない数のアクセスを用いることができる。
【００５２】
いくつかの実施形態において、ＲＡＯ命令キューは、プロセッサの既存のライト・コンバイニング・バッファ（ＷＣＢ）を用いる。ＷＣＢは、データのキャッシュライン（６４Ｂ）およびキャッシュラインアドレスを含むバッファエントリを介したストリーミング・ストアのトラッキングなどのいくつかの有用な機能を既に含んでいる。いくつかの実施形態は、ＷＣＢ（または相当する構造）を用いて、ポストされたＲＡＯ命令をバッファする。これは、ポストされたＲＡＯ命令が、ストリーミング・ストアと非常に類似のメモリオーダリング（弱い順序付け）を有するためである。
【００５３】
ただし、開示の実施形態は、キャッシュラインにおけるどの要素にＲＡＯ命令が適用されるべきかを示すための有効マスク、ＲＡＯ命令を指定するオペコード（例えば整数加算）、ＲＡＯ命令のためのデータ要素サイズ、および、予め定められたサイクル数の経過後にバッファエントリを無効にするタイムアウトカウンタ（または現在のサイクルカウントが満了タイムスタンプに達したときにバッファエントリを無効にする満了タイムスタンプ）といったいくつかの追加的なフィールドを含むよう、各バッファエントリを拡張する。
【００５４】
いくつかの実施形態において、コアは、ポストされたＲＡＯ命令を実行するときに、ＲＡＯ命令キューをスキャンして、ポストされたＲＡＯ命令がそのキャッシュラインについて既に処理中であるか否かを判定する。否である場合は、組み合わせの機会がなく、代わりにコアは新たなバッファエントリを割り当ててそのフィールドを埋める。コアは、ＲＡＯ命令をアンコア（ｕｎｃｏｒｅ）に即座には送らない。そうしてしまうと、今後のオペレーションをこの命令と組み合わせる全ての機会を妨げることになるからである。代わりに、コアは、サイクルごとに小さくなる何らかの初期値（例えば２０サイクル）にタイムアウト値を設定し、カウンタが満了したときにのみ、コアがＲＡＯ命令をアンコアに送る。
【００５５】
一方、同じアドレス指定キャッシュラインについてのバッファエントリが存在する場合、コアは、新たなＲＡＯ命令と既存のエンキュー済みＲＡＯ命令と間のオーバーラップを判定する。オーバーラップの度合いは、これら２つのＲＡＯ命令のオペコード、データ要素サイズ、および有効マスクを比較することにより評価される。（有効マスクは、種々の形式をとり得る。例えば、いくつかの実施形態は、要素サイズを明示的にエンコードし、各マスクビットが１つの要素に対応し得る。あるいは、各マスクビットが最小データ要素サイズを指してもよく、これはバイト、ワード、ダブルワードであり得る。）
【００５６】
オーバーラップがない場合、空間的組み合わせをサポートする実施形態は、新たなＲＡＯ命令オペランドを、当該新たなＲＡＯ命令のオペコード、ソースデータ、データ要素サイズ、デスティネーションアドレス、有効マスク、および満了タイムスタンプを含め、既存のＲＡＯ命令キューエントリ内の適切な位置に書き込む。
【００５７】
オーバーラップがある場合、例えば新たなＲＡＯ命令と既存のＲＡＯ命令とが、同じオペコード（例えばＡＤＤ）を同じキャッシュライン要素（例えば４番目の要素）に対してかつ同じデータ要素サイズ（例えば４バイト）で指定するとき、時間的組み合わせをサポートする実施形態は、ＲＡＯ命令キューの適切な部分を読み込み、ＲＡＯ命令により指定される指定の算術または論理オペレーションをバッファからのデータおよび新たなＲＡＯ命令からのデータに対して行い、結果をデータバッファに書き込む（例えば、ＲＡＯ＿ＡＤＤ  ３３をＲＡＯ＿ＡＤＤ  １１と組み合わせ、ＲＡＯ＿ＡＤＤ  ４４をＲＡＯ命令キューに格納する）。このプロセスの間、ハードウェアは、コアが（当該コア上の同じスレッドまたは異なるハイパースレッドについて）同じキャッシュラインに対して他のオペレーションを同時に行うことを試みる場合に備えて、バッファのコンテンツのアトミック性を保証する。別の例として、新たなＲＡＯ命令と既存のＲＡＯ命令とが同じオペコードおよび同じデータ要素サイズを指定し、しかしこれが異なるキャッシュライン要素に対するものである場合、空間的組み合わせをサポートする実施形態は、ＲＡＯリクエストキューから既存のＲＡＯリクエストを含むキャッシュラインエントリを読み込み、新たなＲＡＯオペレーションをキャッシュラインエントリの適切な要素に追加し、更新されたキャッシュラインエントリをＲＡＯリクエストキューにライトバックする。
【００５８】
部分的なオーバーラップ（例えば、２０のインクリメントリクエストに続いて５の整数加算リクエストなど、異なるが対応性のあるオペコードを有するＲＡＯ命令）がある場合、いくつかの実施形態は、異なるオペコードおよび／またはオペランドサイズを有するＲＡＯ命令をより積極的に組み合わせるなどの特別な処理を行う。いくつかの実施形態は、特定のオペコードを、他のより一般的なものに変換する。例えば、整数加算は、インクリメントのより一般的な形式であるので、バッファ内のＲＡＯ命令がインクリメントであり、新たなオペレーションが整数加算である場合、いくつかの実施形態におけるハードウェアは、バッファエントリを整数加算オペレーションに変換し、１のデータ値をバッファエントリのデータ部分における適切な位置に挿入し、それにより当該新たなオペレーションがバッファエントリとマージすることを可能とする。
【００５９】
いくつかの実施形態は、ワードサイズのＲＡＯ命令をダブルワードサイズのＲＡＯ命令と組み合わせる。これは、これら２つのＲＡＯ命令がいかなる同じキャッシュライン要素にもアクセスしないことを条件とする。
【００６０】
より複雑な実施形態は、複数のオペコード、データ要素サイズ、および／または有効マスクを含むバッファエントリを含んでよく、ワードの単精度浮動小数点加算および整数デクリメントなどの複数の異なるＲＡＯ命令を組み合わせることが可能であってよい。
【００６１】
キャッシュ制御回路において（またはＲＡＯ命令が実際にメモリに作用する任意の場所において）、基本的なＲＡＯ実装の場合、コアからリクエストを受け取る論理は、ＲＡＯ命令をデコードし、指定されたアドレスをローカルメモリ／キャッシュから読み込み、ＲＡＯ命令からのオペランドを用いて、指定されたオペレーションをそのアドレスに対して行い、結果をメモリにライトバックし、完了の信号をリクエスト元のコアに送り返す。
【００６２】
いくつかの実施形態において、キャッシュ制御回路部は、空間的および／または時間的に組み合わされたＲＡＯ命令をコアから受け取ってデコードすることができるように高度化される。空間的に組み合わされたＲＡＯ命令をサポートするべく、キャッシュ制御回路部は、キャッシュラインデータ要素の単一のアドレスを受け取るのではなく、キャッシュラインアドレスと、どのキャッシュライン要素が更新されるべきかを示す有効マスクとを含むＲＡＯ命令をコアから受け付ける。キャッシュ制御回路部は、キャッシュラインを一度読み込み、指定された１または複数のオペレーション（例えば、ＡＤＤ  ５）を全ての有効化された要素に対して反復的に（または並列に）行い、結果をキャッシュにライトバックし、完了の信号をリクエスト元のコアに送り返す。いくつかの実施形態において、キャッシュ制御回路部は、有効マスクに加え、デスティネーションキャッシュラインの各要素を更新するときに用いられるべきソースオペランドを含むソースデータベクトルも受け付ける。
【００６３】
いくつかの実施形態においては、２つ以上のプロセッサコアが、本明細書で説明するような、最適化回路部のインスタンスおよびＲＡＯ命令キューのインスタンスを組み込む、中レベルキャッシュ（例えば、Ｌ１、Ｌ２、およびＬ３キャッシュを含む階層におけるＬ２キャッシュ）制御回路を共有する。実施形態で説明するような、最適化回路部の組み込みインスタンスは、入来するＲＡＯ命令を空間的および／または時間的に組み合わせる機会を特定して利用するためのものである。そのような実施形態における当該回路部は、上記および本明細書において説明するようなコアおよびキャッシュ制御回路部の内部に含まれる組み合わせ回路部と同様に動作する。組み合わせの機会が検出されない場合、中レベルキャッシュ制御回路は、自身のＲＡＯリクエストキューのインスタンスにそれらをバッファし、数タイムアウトサイクルにわたってそれらの送出を遅延させることで、同じラインに別のリクエストが入って来るためのいくらかの時間を取ることを可能とし、当該回路部がそれらのリクエストを時間的および／または空間的に組み合わせるようにする。
【００６４】
図１は、ＲＡＯ命令を処理するハードウェアの一実施形態を示す。図示するように、ストレージ１０３は、実行されるべきＲＡＯＯＰＭＥＭＲＥＧ命令１０１を格納する。当該命令は、デコード回路１０５により受け取られる。例えば、デコード回路１０５は、フェッチ回路１０４からこの命令を受け取る。命令１０１は、オペコード、メモリデスティネーションを指定するデスティネーションメモリ識別子、レジスタデスティネーションを指定するデスティネーションレジスタ識別子、およびソースロケーションを指定するソースデータのためのフィールドを含む。デコード回路１０５は、当該命令を１または複数のオペレーションにデコードする。いくつかの実施形態において、このデコードは、実行回路（実行回路１０９など）により行われるべき複数のマイクロオペレーションを生成することを含む。デコード回路１０５はまた、命令プリフィックス（使用される場合）をデコードする。
【００６５】
いくつかの実施形態において、レジスタリネーミング、レジスタ割り当て、および／またはスケジューリング回路１０７は、１）論理オペランド値を物理オペランド値にリネームすること（例えば、いくつかの実施形態ではレジスタエイリアステーブル）、２）ステータスビットおよびフラグをデコードされた命令に割り当てること、および３）デコードされた命令を命令プール外部の実行回路での実行のために（例えば、いくつかの実施形態ではリザベーションステーションを用いて）スケジューリングすること、のうちの１または複数のための機能性を提供する。
【００６６】
レジスタ（レジスタファイル）および／またはメモリ１０８は、データを、実行回路によるオペレーションの対象となる命令のオペランドとして格納する。例示的なレジスタのタイプとしては、パックドデータレジスタ、汎用レジスタ、および浮動小数点レジスタが挙げられる。
【００６７】
実行回路１０９は、デコードされたＲＡＯＯＰＭＥＭＲＥＧ命令を実行する。実行回路の一実施形態が、図５および図１０Ａ〜図１０Ｂとの関連を含め以下で図示および説明されており、これを実行回路１０９の１つの実施形態とする。ライトバック回路１１１は、デコードされたＲＡＯＯＰＭＥＭＲＥＧ命令の実行の結果をコミットする。
【００６８】
図２は、ＲＡＯ命令を行うのに用いることができるマルチコアプロセッサの部分を示すブロック図である。図示のとおり、プロセッサ２００はコアクラスタ２０２を含み、コアクラスタ２０２は回路部２０４を含み、回路部２０４は、フェッチ、デコード、スケジューリング、実行、算術論理演算装置（ＡＬＵ）、およびレジスタを含む。コアクラスタ２０２はまた、ロード／ストアユニット（ＬＳＵ）２０６、レベル１／レベル２（Ｌ１／Ｌ２）キャッシュ２０８、およびバスインタフェースユニット２１０（ＢＩＵ）を含む。プロセッサ２００はまた、キャッシングアンドホームエージェント（ＣＨＡ）２１４を含み、ＣＨＡ２１４は、イングレス２１６、ストアデータバッファ（ＳＤ）２１８、テーブルオブリクエスト（ＴＯＲ）２２０、ホームエージェント（ＨＡ）２２２、コールパイプ２２４、およびホームエージェント（ＨＡ）パイプ２２６を含む。イントラダイインターコネクト（ＩＤＩ）２１２は、コアクラスタ２０２をＣＨＡ２１４に結合する。また、ＲＡＯ命令をサービスするべくＣＨＡ２１４が通信するスヌープフィルタ（ＳＦ）／最終レベルキャッシュ（ＬＬＣ）２２８も示されている。
【００６９】
図３は、いくつかの実施形態に係る、遠隔アトミックオペレーションの命令を実行するためのマルチプロセッサシステムの部分を示す。図示のとおり、プロセッサ３７０および３８０はそれぞれ、内蔵メモリ・Ｉ／Ｏ制御論理（「ＩＭＣ」）３７２および３８２を含む。プロセッサ３７０およびプロセッサ３８０は各々、１または複数のコア３７４および３８４、キャッシングアンドホームエージェント（ＣＨＡ）３７５および３８５、最終レベルキャッシュ（ＬＬＣ）３７７および３８７、ならびにポイントツーポイントインタフェース３７６、３７８、３８８および３８６を含む。システム３００は、チップセット３９０をさらに含み、チップセット３９０は、バス３１６および任意選択的なコプロセッサ３３８と通信するポイントツーポイントインタフェース３９４および３９８ならびに高性能インタフェース３９２および３９６を含む。
【００７０】
本明細書に開示の実施形態に係る、入来するＲＡＯ命令を処理するＲＡＯ命令キューおよび最適化回路部３９９も示されている。入来ＲＡＯ命令３９０は、最適化回路３９１によりアクセスされるバッファ、レジスタ、または他の中間メモリロケーションに保持される。動作中、最適化回路３９１は、例えば図４Ａ〜図４Ｊおよび図５に関して図示および説明するように、入来ＲＡＯ命令３９０を処理する。図示のとおり、ＲＡＯ命令キュー３９３は、キャッシュライン単位で整理され、オペコード、デスティネーション、および任意選択的なソースデータを各々が有する複数のＲＡＯ命令を格納する。いくつかの実施形態において、各ＲＡＯ命令キューエントリは、以下で論じるいくつかの開示の実施形態に従って用いられる有効マスクおよび満了タイムスタンプをさらに含む。
【００７１】
いくつかの実施形態において、図示のとおり、ＲＡＯ命令キューおよび最適化回路部３９９はまた、例えば図４Ａ〜図４Ｊおよび図５に関して本明細書に開示の様々な実施形態において用いられる、規則的にインクリメントするシステムカウンタ３９２を含む。
【００７２】
図示するように、システム３００は、ＲＡＯ命令キューおよび最適化回路部３９９の複数の任意選択的なインスタンス３９９Ａ〜Ｄを含み、各インスタンスは、入来ＲＡＯ命令を処理し、入来ＲＡＯ命令をエンキュー済みＲＡＯ命令と空間的および／または時間的に組み合わせることによりシステム性能を向上する機会を利用するためのものである。命令キューおよび最適化回路部インスタンス３９９Ａは、いくつかの実装ではそのうちの１または複数が含まれ得ない限りにおいて、破線の枠で示すように、任意選択的なものである。図示するように、ＲＡＯ命令キューおよび最適化回路部３９９の全てのインスタンス３９９Ａ〜Ｄが、ＲＡＯ命令キューおよび最適化回路部を含む。ただし、インスタンス３９９Ａ〜Ｄの各々は、ＲＡＯ命令を空間的および時間的に組み合わせる機会を利用するように、実装される場所に応じてカスタマイズされるべきであることを理解されたい。
【００７３】
入来ＲＡＯ命令およびエンキュー済みＲＡＯ命令のフォーマットについては、図６、図７Ａ〜図７Ｂ、および図８Ａ〜図８Ｄに関してさらに下で論じる。
【００７４】
システム３００は、明確性のために図３には示していないが、例えば図１２から図１５に関して図示および議論するような追加的なコンポーネントを含む。
【００７５】
本明細書に開示の実施形態において、ＲＡＯ命令は、システム内の複数の異なる回路において実行することができる。いくつかの実施形態において、ＲＡＯ命令は、ＣＨＡ２１４（図２）、ＣＨＡ３７５もしくはＣＨＡ３８５（図３）内の回路部、チップセット３９０（図３）などのチップセット内の回路部、またはコプロセッサ３３８（図３）などの遠隔プロセッサ内の回路部などのキャッシュ制御回路により実行される。いくつかの実施形態において、遠隔アトミックオペレーションが実行されるロケーションは、例えば選択回路部１０７（図１）により選択される。
【００７６】
いくつかの実施形態において、選択される実行回路は、例えばシステム３００を設計するハードウェア設計者によって選択されるように、静的な選択を反映する。複数のプロセッサコア３７４および３８４の各々は、遠隔アトミック命令を実行するキャッシングホームエージェント（ＣＨＡ）、例えばＣＨＡ３７５およびＣＨＡ３８５と関連付けられることがある。
【００７７】
換言すると、いくつかの実施形態において、遠隔アトミックオペレーションが実行されるロケーションは、ハードウェア設計者により静的に選ばれる。いくつかの実施形態において、遠隔アトミックオペレーションが実行されるロケーションは、ソフトウェアにより静的に選ばれる。いくつかの実施形態において、遠隔アトミックオペレーションが実行されるロケーションは、ソフトウェアにより動的に選ばれる。いくつかの実施形態において、遠隔アトミックオペレーションが実行されるロケーションは、命令を実行すべき場所を示す即値を含む各命令によって制御されるとおりに、静的に選ばれる。
【００７８】
いくつかの実施形態において、プロセッサは、ＲＡＯ命令が実行されるべき場所を示すようソフトウェアにより設定されるソフトウェアプログラミング可能な制御レジスタを含む。
【００７９】
いくつかの実施形態において、プロセッサは、複数の異なる命令（例えば、ＡＤＤおよびＣＭＰＸＣＨＧ）または複数の異なる命令グループについて、ＲＡＯ命令が実行される場所を示すようソフトウェアにより設定される、複数の別個のソフトウェアプログラミング可能な制御レジスタを含む。
【００８０】
いくつかの実施形態において、プロセッサは、ハードウェアからの何らかの情報を用いて、ＲＡＯ命令を実行するための最良のロケーションを予測する。そのような実施形態において、プロセッサは、（例えば、命令の一部として、制御レジスタとして、またはページテーブルエントリの一部として）ソフトウェアにより提供される制御およびハードウェアから受け取った情報の両方を用いて、ＲＡＯ命令を実行すべき場所を判定する。そのような実施形態において、ソフトウェアにより提供される制御は、ディレクティブというよりもヒントに近いものである。いくつかの実施形態において、それらのアドレスに向けられるＲＡＯ命令が実行されるべき場所を示すプロパティがページテーブルエントリに追加される。
【００８１】
本明細書に開示の実施形態に係る遠隔アトミックオペレーションを実行するためのマルチプロセッサシステムについて、図１３から図１７に関して以下でさらに図示および議論する。
【００８２】
図４Ａは、いくつかの実施形態に係る、遠隔アトミックオペレーション命令のエンキューを示すブロックフロー図である。図示のとおり、エンキュー前のＲＡＯ命令キュー４０１は、エンキュー済みＲＡＯ命令を格納するデータ構造である。各キューエントリは、特定のキャッシュライン要素にアドレス指定されたＲＡＯ命令を含む。いくつかの実施形態において、各要素は、キャッシュラインベースアドレスおよびキャッシュラインオフセットを含むメモリアドレスを含む。各エントリは、指定されたＲＡＯオペコード、およびソースデータが存在する場合、これらをさらに含む。
【００８３】
各要素は、ＲＡＯ命令がキューに追加されたときに初期値に設定され、組み合わせの機会を特定するための時間を取ることを可能とするタイムアウトカウンタ（または満了タイムスタンプ）をさらに含む。タイムアウトカウンタは、予め定められた値にソフトウェアによって静的に設定される場合があり、または過去の組み合わせの統計に基づいて動的に設定される場合もある。タイムアウトカウンタは、満了タイムスタンプとも称されることがあり、ここでエンキュー済みＲＡＯ命令は、規則的にインクリメントするシステムカウンタが満了タイムスタンプに達してこれを超過する時間までは、組み合わせの機会の恩恵を得ることができる。いくつかの実施形態において、所与のキャッシュラインについてＲＡＯ命令キューエントリに関連付けられた満了タイムスタンプは、当該所与のキャッシュラインの任意の一部に対する変更があると、例えば、特定のキャッシュライン要素に対するエンキュー済みＲＡＯ命令が当該特定のキャッシュラインに対する入来ＲＡＯ命令と組み合わされたときに、予め定められた値にセットされる。
【００８４】
ＲＡＯ命令キュー４０１は、表形式で整理されるものとして示されており、各行が６４バイトキャッシュラインを表し、各列が４バイトキャッシュライン要素を表す。いくつかの実施形態において、ＲＡＯ命令キュー４０１は、各キャッシュライン要素について別個のＲＡＯオペコードを保持し、異なるオペレーションが異なる要素に対して生じることを可能とする。いくつかの実施形態において、各キャッシュライン要素について別個のタイムアウトカウンタが保持される。ＲＡＯ命令キュー４０１の可能な一実装を、図４Ｃにおいて図示および説明する。ここで、ＲＡＯ命令キュー４２１は、キュー内に、キャッシュラインアドレス「ｇ」に対するいかなるＲＡＯリクエストもまだ有していない。開示の実施形態は、限定されることなく、様々な実装、キャッシュラインサイズ、および要素サイズを選ぶことができる。ＲＡＯ命令キュー４０１は、限定されることなく、レジスタにまたはメモリに格納することができる。いくつかの実施形態において、ＲＡＯ命令キュー４０１が連想メモリ（ｃｏｎｔｅｎｔ−ａｄｄｒｅｓｓａｂｌｅ  ｍｅｍｏｒｙ）に格納されることで、特定のキャッシュラインアドレスを効率的に検索することが可能となる。
【００８５】
図４Ａに示すように、入来ＲＡＯ命令４０２は、ベースアドレスが「ｇ」に等しいキャッシュラインのバイト４４の要素に「５５」の値がＡＤＤされることを指定する。４０４において、エンキュー回路部は、キャッシュライン「ｇ」に対する任意のＲＡＯ命令がキュー内で既に保留中であるか否かを判定する。キャッシュライン「ｇ」に対する保留中のＲＡＯ命令が存在しないので、ＲＡＯ命令を組み合わせる機会が存在しない。４０８におけるエンキュー回路は、即座に入来ＲＡＯ命令４０２をキャッシュ制御回路部へ転送するのではなく、入来リクエストをキューに追加し、組み合わせ機会を待機するためのいくらかの時間を取ることが可能となるようタイムアウトカウンタを設定する。４０９におけるエンキュー後の更新済みＲＡＯ命令キューは、キューに追加された入来リクエストを示す。ＲＡＯ命令キュー４０９の可能な一実装を、図４Ｃにおいて図示および説明する。ここで、ＲＡＯ命令キュー４２２は、キャッシュラインｇ、オフセット４４、１３のタイムアウトカウンタに対する、５５に等しいソースデータ、および０ｘ０８００に等しい有効マスクによるＲＡＯ  ＡＤＤ命令を保持する。その後、オペレーションは、時間的および空間的なＲＡＯ命令マージの機会の待機を継続する。
【００８６】
図４Ｂは、いくつかの実施形態に係る、入来ＲＡＯ命令をＲＡＯ命令キューの既存のエンキュー済みエントリと空間的に組み合わせるエンキュー回路部を示すブロックフロー図である。図示のとおり、エンキュー前のＲＡＯ命令キュー４１１は、エンキュー済みＲＡＯ命令を格納するデータ構造である。各キューエントリは、特定のキャッシュライン要素にアドレス指定されたＲＡＯ命令を含む。いくつかの実施形態において、各要素は、キャッシュラインベースアドレスおよびキャッシュラインオフセットを含むメモリアドレスを含む。各エントリは、指定されたＲＡＯオペコード、およびソースデータが存在する場合、これらをさらに含む。
【００８７】
各要素は、ＲＡＯ命令がキューに追加されたときに初期値に設定され、組み合わせの機会を特定するための時間を取ることを可能とするタイムアウトカウンタ（または満了タイムスタンプ）をさらに含む。タイムアウトカウンタは、予め定められた値にソフトウェアによって静的に設定される場合があり、または過去の組み合わせの統計に基づいて動的に設定される場合もある。
【００８８】
ＲＡＯ命令キュー４１１は、表形式で整理されるものとして示されており、各行が６４バイトキャッシュラインを表し、各列が４バイトキャッシュライン要素を表す。開示の実施形態は、限定されることなく、様々な実装、キャッシュラインサイズ、および要素サイズを選ぶことができる。ＲＡＯ命令キュー４１１は、限定されることなく、レジスタにまたはメモリに格納することができる。いくつかの実施形態において、ＲＡＯ命令キュー４１１が連想メモリに格納されることで、特定のキャッシュラインアドレスを効率的に検索することが可能となる。
【００８９】
図示のとおり、入来ＲＡＯ命令４１２は、ベースアドレスが「ｇ」に等しいキャッシュラインのオフセット２４に「３３」の値がＡＤＤされることを指定する。４１４において、エンキュー回路部は、キャッシュライン「ｇ」に対する任意のＲＡＯ命令がキュー内で既に保留中であるか否かを判定する。保留中のものが存在し、４１６において、エンキュー回路部は、キャッシュライン「ｇ」に対する入来ＲＡＯ命令４１２と既存のエンキュー済みＲＡＯ命令との間のオーバーラップの度合いを判定する。入来ＲＡＯ命令と、合致するＲＡＯ命令との間にオーバーラップが見つからない場合、４１８におけるエンキュー回路部は、キャッシュライン「ｇ」に対する入来ＲＡＯ命令と既存のＲＡＯ命令とを空間的に組み合わせる。キャッシュライン「ｇ」はここで、保留中の「オフセット４４に対するＡＤＤ  ５５」のＲＡＯ命令と、保留中の「オフセット２４に対するＡＤＤ  ３３」のＲＡＯ命令とを有するものとして示されている。いくつかの実施形態において、４１８におけるエンキュー回路は、即座にキャッシュライン「ｇ」に対するエンキュー済みＲＡＯ命令をキャッシュ制御回路部へ転送するのではなく、組み合わせ機会を待機するためのいくらかの時間を取ることを可能とするべく、入来リクエストをキューに追加し、オフセット「２４」のＲＡＯキューエントリについてタイムアウトカウンタを設定し、オフセット「４４」のＲＡＯキューエントリのタイムアウトカウンタを新たな値に再設定する。４１９におけるエンキュー後の更新済みＲＡＯ命令キューは、キューに追加された入来リクエストを示す。ＲＡＯ命令キュー４１９の可能な一実装を、図４Ｃにおいて図示および説明する。ここで、ＲＡＯ命令キュー４２３は、０ｘ０８４０に等しい有効マスクによるキャッシュラインアドレス「ｇ」のオフセット４４に対するＡＤＤ「５５」および併せてオフセット２４に対するＡＤＤ「３３」を保持するものとして示されている。その後、オペレーションは、時間的および空間的なＲＡＯ命令マージの機会の待機を継続する。
【００９０】
よって、図４Ｂに開示する最適化回路部の実施形態は、複数のＲＡＯ命令を空間的に組み合わせる機会を検出および利用することにより、ＲＡＯ命令を実行する効率を向上し、コストを低減する。いくつかの実施形態は、ＲＡＯ命令が生成される各処理コアのみでなく、アトミックオペレーションが実際に行われるキャッシュ制御回路などの別個の実行回路においても、最適化回路部を含む。個々のＲＡＯ命令は高レイテンシを有する場合がある（コアからキャッシュ制御回路部まで進み、メモリロケーションを読み込み、オペレーションを行い、メモリロケーションをライトバックし、確認応答をコアに返さなければならない）ものの、このレイテンシは、その他の有用な作業とオーバーラップさせることで実質的に隠すことができる。
【００９１】
図４Ｃは、いくつかの実施形態に係る、遠隔アトミックオペレーションを格納するリクエストキューを示すブロック図である。ＲＡＯ命令キュー４０１（図４Ａ）の可能な一実装を、図４Ｃにおいて図示および説明する。ここで、ＲＡＯ命令キュー４２１は、キュー内に、キャッシュラインアドレス「ｇ」に対するいかなるＲＡＯリクエストもまだ有していない。ＲＡＯ命令キュー４０９（図４Ａ）の可能な一実装を、図４Ｃにおいて図示および説明する。ここで、ＲＡＯ命令キュー４２２は、オフセット４４、１３のタイムアウトカウンタに対する、５５に等しいソースデータ、および０ｘ０８００に等しい有効マスクによるＲＡＯ  ＡＤＤ命令を保持する。ＲＡＯ命令キュー４１９（図４Ｂ）の可能な一実装を、図４Ｃにおいて図示および説明する。ここで、ＲＡＯ命令キュー４２３は、０ｘ０８４０に等しい有効マスクによるキャッシュラインアドレス「ｇ」のオフセット４４に対するＡＤＤ「５５」および併せてオフセット２４に対するＡＤＤ「３３」を保持することが示されている。ＲＡＯ命令キュー４２１、４２２、および４２３の各々は、限定されることなく、レジスタに、またはメモリに格納することができる。いくつかの実施形態において、ＲＡＯ命令キュー４２１、４２２、および４２３のうちの１または複数が連想メモリに格納されることで、特定のキャッシュラインアドレスを効率的に検索することが可能となる。
【００９２】
図４Ｄは、いくつかの実施形態に係る、入来ＲＡＯ命令をＲＡＯ命令キューの既存のエンキュー済みエントリと空間的に組み合わせるエンキュー回路部を示すブロックフロー図である。図示のとおり、エンキュー前のＲＡＯ命令キュー４３１は、エンキュー済みＲＡＯ命令を格納するデータ構造である。各キューエントリは、特定のキャッシュライン要素にアドレス指定されたＲＡＯ命令を含む。いくつかの実施形態において、各要素は、キャッシュラインベースアドレスおよびキャッシュラインオフセットを含むメモリアドレスを含む。各エントリは、指定されたＲＡＯオペコード、およびソースデータが存在する場合、これらをさらに含む。
【００９３】
各要素は、ＲＡＯ命令がキューに追加されたときに初期値に設定され、組み合わせの機会を特定するための時間を取ることを可能とするタイムアウトカウンタ（または満了タイムスタンプ）をさらに含む。タイムアウトカウンタは、予め定められた値にソフトウェアによって静的に設定される場合があり、または過去の組み合わせの統計に基づいて動的に設定される場合もある。
【００９４】
ＲＡＯ命令キュー４３１は、表形式で整理されるものとして示されており、各行が６４バイトキャッシュラインを表し、各列が４バイトキャッシュライン要素を表す。開示の実施形態は、限定されることなく、様々な実装、キャッシュラインサイズ、および要素サイズを選ぶことができる。ＲＡＯ命令キュー４３１は、限定されることなく、レジスタにまたはメモリに格納することができる。いくつかの実施形態において、ＲＡＯ命令キュー４３１が連想メモリに格納されることで、特定のキャッシュラインアドレスを効率的に検索することが可能となる。
【００９５】
図示のとおり、入来ＲＡＯ命令４３２は、０ｘ３３３３に等しい書き込みマスクによるベースアドレスが「ｇ」に等しいキャッシュライン全体に対する「３」の値のベクトルワイドブロードキャストＡＤＤ（ｖｅｃｔｏｒ−ｗｉｄｅ  ｂｒｏａｄｃａｓｔ−ＡＤＤ）を指定する（すなわち、書き込みマスクにおける対応するビットが「１」に設定されたキャッシュライン上の各要素に値「３」が加算される）。４３４において、エンキュー回路部は、キャッシュライン「ｇ」に対する任意のＲＡＯ命令がキュー内で既に保留中であるか否かを判定する。保留中のものが存在し、４３６において、エンキュー回路部は、キャッシュライン「ｇ」に対する入来ＲＡＯ命令４３２と既存のエンキュー済みＲＡＯ命令との間のオーバーラップの度合いを判定する。入来ＲＡＯ命令と、合致するＲＡＯ命令との間にオーバーラップが見つからない場合、４３８におけるエンキュー回路部は、キャッシュライン「ｇ」に対する入来ＲＡＯ命令と既存のＲＡＯ命令とを空間的に組み合わせる。キャッシュライン「ｇ」はここで、保留中の「オフセット４４に対するＡＤＤ  ５５」と、保留中の「オフセット２４に対するＡＤＤ  ３３」と、「１」に等しいマスクビットに対応するオフセット０、４、１６、２０、３２、３６、４８、および５２に対する新たに追加された「ＡＤＤ  ３」とを有するものとして示されている。いくつかの実施形態において、エンキュー回路は、即座にキャッシュライン「ｇ」に対するエンキュー済みＲＡＯ命令をキャッシュ制御回路部へ転送するのではなく、組み合わせ機会を待機するためのいくらかの時間を取ることを可能とするべく、オフセット０、４、１６、２０、３２、３６、４８、および５２におけるＲＡＯキューエントリについてタイムアウトカウンタを新たな値に設定する。４３９におけるエンキュー後の更新済みＲＡＯ命令キューは、キューに追加された入来リクエストを示す。その後、オペレーションは、時間的および空間的なＲＡＯ命令マージの機会の待機を継続する。
【００９６】
よって、図４Ｄに開示する最適化回路部の実施形態は、複数のＲＡＯ命令を空間的に組み合わせる機会を検出および利用することにより、ＲＡＯ命令を実行する効率を向上し、コストを低減する。いくつかの実施形態は、ＲＡＯ命令が生成される各処理コアのみでなく、アトミックオペレーションが実際に行われるキャッシュ制御回路などの別個の実行回路においても、最適化回路部を含む。個々のＲＡＯ命令は高レイテンシを有する場合がある（コアからキャッシュ制御回路部まで進み、メモリロケーションを読み込み、オペレーションを行い、メモリロケーションをライトバックし、確認応答をコアに返さなければならない）ものの、このレイテンシは、その他の有用な作業とオーバーラップさせることで実質的に隠すことができる。
【００９７】
図４Ｅは、いくつかの実施形態に係る、入来した遠隔アトミックオペレーション命令を既存のキュー入れ済みエントリと時間的に組み合わせることを示すブロックフロー図である。図示のとおり、エンキュー前のＲＡＯ命令キュー４４１は、エンキュー済みＲＡＯ命令を格納するデータ構造である。各キューエントリは、特定のキャッシュライン要素にアドレス指定されたＲＡＯ命令を含む。いくつかの実施形態において、各要素は、キャッシュラインベースアドレスおよびキャッシュラインオフセットを含むメモリアドレスを含む。各エントリは、指定されたＲＡＯオペコード、およびソースデータが存在する場合、これらをさらに含む。
【００９８】
各要素は、ＲＡＯ命令がキューに追加されたときに初期値に設定され、組み合わせの機会を特定するための時間を取ることを可能とするタイムアウトカウンタ（または満了タイムスタンプ）をさらに含む。タイムアウトカウンタは、予め定められた値にソフトウェアによって静的に設定される場合があり、または過去の組み合わせの統計に基づいて動的に設定される場合もある。
【００９９】
ＲＡＯ命令キュー４４１は、表形式で整理されるものとして示されており、各行が６４バイトキャッシュラインを表し、各列が４バイトキャッシュライン要素を表す。開示の実施形態は、限定されることなく、様々な実装、キャッシュラインサイズ、および要素サイズを選ぶことができる。ＲＡＯ命令キュー４４１は、限定されることなく、レジスタにまたはメモリに格納することができる。いくつかの実施形態において、ＲＡＯ命令キュー４４１が連想メモリに格納されることで、特定のキャッシュラインアドレスを効率的に検索することが可能となる。
【０１００】
図示のとおり、入来ＲＡＯ命令４４２は、ベースアドレスが「ｇ」に等しいキャッシュラインのオフセット２４に「１１」の値がＡＤＤされることを指定する。４４４において、エンキュー回路部は、キャッシュライン「ｇ」に対する任意のＲＡＯ命令がキュー内で既に保留中であるか否かを判定する。保留中のものが存在し、４４６において、エンキュー回路部は、キャッシュライン「ｇ」に対する入来ＲＡＯ命令４４２と既存のエンキュー済みＲＡＯ命令との間のオーバーラップの度合いを判定する。キャッシュライン「ｇ」のオフセット２４に対するＡＤＤという厳密なオーバーラップが見つかった場合、４４８におけるエンキュー回路部は、キャッシュライン「ｇ」に対する入来ＲＡＯ命令（Ａｄｄ「１１」）と既存のＲＡＯ命令（Ａｄｄ「３３」）とを時間的に組み合わせる。キャッシュライン「ｇ」はここで、保留中の「キャッシュライン「ｇ」のオフセット２４に対するＡＤＤ  ４４」を有するものとして示されている。いくつかの実施形態において、４４８におけるエンキュー回路は、即座にキャッシュライン「ｇ」に対するエンキュー済みＲＡＯ命令をキャッシュ制御回路部へ転送するのではなく、組み合わせ機会を待機するためのいくらかの時間を取ることを可能とするべく、入来リクエストをキューに追加し、オフセット「２４」のＲＡＯキューエントリについてタイムアウトカウンタを設定し、オフセット「４４」のＲＡＯキューエントリのタイムアウトカウンタを新たな値に再設定する。４４９におけるエンキュー後の更新済みＲＡＯ命令キューは、キューに追加された入来リクエストを示す。その後、オペレーションは、時間的および空間的なＲＡＯ命令マージの機会の待機を継続する。
【０１０１】
よって、図４Ｅに開示する最適化回路部の実施形態は、複数のＲＡＯ命令を時間的に組み合わせる機会を検出および利用することにより、ＲＡＯ命令を実行する効率を向上し、コストを低減する。いくつかの実施形態は、ＲＡＯ命令が生成される各処理コアのみでなく、アトミックオペレーションが実際に行われるキャッシュ制御回路などの別個の実行回路においても、最適化回路部を含む。個々のＲＡＯ命令は高レイテンシを有する場合がある（コアからキャッシュ制御回路部まで進み、メモリロケーションを読み込み、オペレーションを行い、メモリロケーションをライトバックし、確認応答をコアに返さなければならない）ものの、このレイテンシは、その他の有用な作業とオーバーラップさせることで実質的に隠すことができる。
【０１０２】
図４Ｆは、いくつかの実施形態に係る、遠隔アトミックオペレーション命令の特別な処理を示すブロックフロー図である。図示のとおり、エンキュー前のＲＡＯ命令キュー４５１は、エンキュー済みＲＡＯ命令を格納するデータ構造である。各キューエントリは、特定のキャッシュライン要素にアドレス指定されたＲＡＯ命令を含む。いくつかの実施形態において、各要素は、キャッシュラインベースアドレスおよびキャッシュラインオフセットを含むメモリアドレスを含む。各エントリは、指定されたＲＡＯオペコード、およびソースデータが存在する場合、これらをさらに含む。
【０１０３】
各要素は、ＲＡＯ命令がキューに追加されたときに初期値に設定され、組み合わせの機会を特定するための時間を取ることを可能とするタイムアウトカウンタ（または満了タイムスタンプ）をさらに含む。タイムアウトカウンタは、予め定められた値にソフトウェアによって静的に設定される場合があり、または過去の組み合わせの統計に基づいて動的に設定される場合もある。
【０１０４】
ＲＡＯ命令キュー４５１は、表形式で整理されるものとして示されており、各行が６４バイトキャッシュラインを表し、各列が４バイトキャッシュライン要素を表す。開示の実施形態は、限定されることなく、様々な実装、キャッシュラインサイズ、および要素サイズを選ぶことができる。ＲＡＯ命令キュー４５１は、限定されることなく、レジスタにまたはメモリに格納することができる。いくつかの実施形態において、ＲＡＯ命令キュー４５１が連想メモリに格納されることで、特定のキャッシュラインアドレスを効率的に検索することが可能となる。
【０１０５】
図示のとおり、入来ＲＡＯ命令４５２は、ベースアドレスが「ｇ」に等しいキャッシュラインのオフセット２４における値がインクリメントされることを指定する。４５４において、エンキュー回路部は、キャッシュライン「ｇ」に対する任意のＲＡＯ命令がキュー内で既に保留中であるか否かを判定する。保留中のものが存在し、４５６において、エンキュー回路部は、キャッシュライン「ｇ」に対する入来ＲＡＯ命令４５２と既存のエンキュー済みＲＡＯ命令との間のオーバーラップの度合いを判定する。ここで、入来ＲＡＯ命令と既存のＲＡＯ命令とが部分的にオーバーラップしている。これらは、同じキャッシュラインの同じオフセットに対する、しかしＡＤＤとＩＮＣという異なるオペコードによる更新を指定する。この部分的なオーバーラップのシナリオにおいて、４５８におけるエンキュー回路部は、ＡＤＤのＲＡＯ命令とＩＮＣのＲＡＯ命令とを単一のＲＡＯ命令として組み合わせる機会を捉える。特に、キャッシュライン「ｇ」のオフセット２４に対する既存の「ＡＤＤ  ４４」のＲＡＯ命令が、同じキャッシュライン要素に対する入来した「ＩＮＣ」のＲＡＯ命令と組み合わされ、「ＡＤＤ  ４５」がキャッシュライン「ｇ」のオフセット２４に書き込まれる。いくつかの実施形態において、４５８におけるエンキュー回路は、即座にキャッシュライン「ｇ」に対するエンキュー済みＲＡＯ命令をキャッシュ制御回路部へ転送するのではなく、組み合わせ機会を待機するためのいくらかの時間を取ることを可能とするべく、入来リクエストをキューに追加し、オフセット「２４」のＲＡＯキューエントリについてタイムアウトカウンタを設定し、オフセット「４４」のＲＡＯキューエントリのタイムアウトカウンタを新たな値に再設定する。４５９におけるエンキュー後の更新済みＲＡＯ命令キューは、キューに追加された入来リクエストを示す。その後、オペレーションは、時間的および空間的なＲＡＯ命令マージの機会の待機を継続する。
【０１０６】
よって、図４Ｆに開示する最適化回路部の実施形態は、複数のＲＡＯ命令を時間的に組み合わせる機会を検出および利用することにより、ＲＡＯ命令を実行する効率を向上し、コストを低減する。いくつかの実施形態は、ＲＡＯ命令が生成される各処理コアのみでなく、アトミックオペレーションが実際に行われるキャッシュ制御回路などの別個の実行回路においても、最適化回路部を含む。個々のＲＡＯ命令は高レイテンシを有する場合がある（コアからキャッシュ制御回路部まで進み、メモリロケーションを読み込み、オペレーションを行い、メモリロケーションをライトバックし、確認応答をコアに返さなければならない）ものの、このレイテンシは、その他の有用な作業とオーバーラップさせることで実質的に隠すことができる。
【０１０７】
図４Ｇは、いくつかの実施形態に係る、遠隔アトミックオペレーション命令の特別な処理を示すブロックフロー図である。図示のとおり、エンキュー前のＲＡＯ命令キュー４６１は、エンキュー済みＲＡＯ命令を格納するデータ構造である。各キューエントリは、特定のキャッシュライン要素にアドレス指定されたＲＡＯ命令を含む。いくつかの実施形態において、各要素は、キャッシュラインベースアドレスおよびキャッシュラインオフセットを含むメモリアドレスを含む。各エントリは、指定されたＲＡＯオペコード、およびソースデータが存在する場合、これらをさらに含む。
【０１０８】
各要素は、ＲＡＯ命令がキューに追加されたときに初期値に設定され、組み合わせの機会を特定するための時間を取ることを可能とするタイムアウトカウンタ（または満了タイムスタンプ）をさらに含む。タイムアウトカウンタは、予め定められた値にソフトウェアによって静的に設定される場合があり、または過去の組み合わせの統計に基づいて動的に設定される場合もある。
【０１０９】
ＲＡＯ命令キュー４６１は、表形式で整理されるものとして示されており、各行が６４バイトキャッシュラインを表し、各列が４バイトキャッシュライン要素を表す。開示の実施形態は、限定されることなく、様々な実装、キャッシュラインサイズ、および要素サイズを選ぶことができる。ＲＡＯ命令キュー４６１は、限定されることなく、レジスタにまたはメモリに格納することができる。いくつかの実施形態において、ＲＡＯ命令キュー４６１が連想メモリに格納されることで、特定のキャッシュラインアドレスを効率的に検索することが可能となる。
【０１１０】
図示のとおり、入来ＲＡＯ命令４６２は、ベースアドレスが「ｇ」に等しいキャッシュラインのオフセット２４の値が、その値の平方根で置き換えられることを指定する。４６４において、エンキュー回路部は、キャッシュライン「ｇ」に対する任意のＲＡＯ命令がキュー内で既に保留中であるか否かを判定する。保留中のものが存在し、４６６において、エンキュー回路部は、キャッシュライン「ｇ」に対する入来ＲＡＯ命令４６２と既存のエンキュー済みＲＡＯ命令との間のオーバーラップの度合いを判定する。ここで、入来ＲＡＯ命令と既存のＲＡＯ命令とが部分的にオーバーラップしている。これらは、同じキャッシュライン「ｇ」の同じオフセット２４に対する、しかしＡＤＤとＳＱＲＴという異なるオペコードによる更新を指定する。この部分的なオーバーラップのシナリオにおいて、４６８におけるエンキュー回路部は、ＡＤＤおよびＳＱＲＴをシリアル化する。特に、キュー内に配置する場所がないので、まず命令４６２をストールする。次に、エンキュー回路は、既存のエンキュー済みＲＡＯ命令のタイムアウトカウンタ値に関わらず、オフセット２４に対する「ＡＤＤ  ４５」およびオフセット４４に対する「ＡＤＤ  ５５」を含む、キャッシュライン「ｇ」に対する全てのＲＡＯ命令を即座にキャッシュ制御回路へ送る。これに応答して、キャッシュ制御回路は、アドレス「ｇ」のキャッシュラインを読み込んで加算を行うことによりそれらのＲＡＯ命令を実行する。エンキュー回路は、キャッシュ制御回路から確認応答を受け取ると、キャッシュライン「ｇ」のエントリをクリアアウトし、命令４６２を挿入する。
【０１１１】
図４Ｈは、いくつかの実施形態に係る、遠隔アトミックオペレーション命令の特別な処理を示すブロックフロー図である。図示のとおり、エンキュー前のＲＡＯ命令キュー４７１は、エンキュー済みＲＡＯ命令を格納するデータ構造である。各キューエントリは、特定のキャッシュライン要素にアドレス指定されたＲＡＯ命令を含む。いくつかの実施形態において、各要素は、キャッシュラインベースアドレスおよびキャッシュラインオフセットを含むメモリアドレスを含む。各エントリは、指定されたＲＡＯオペコード、およびソースデータが存在する場合、これらをさらに含む。
【０１１２】
各要素は、ＲＡＯ命令がキューに追加されたときに初期値に設定され、組み合わせの機会を特定するための時間を取ることを可能とするタイムアウトカウンタ（または満了タイムスタンプ）をさらに含む。タイムアウトカウンタは、予め定められた値にソフトウェアによって静的に設定される場合があり、または過去の組み合わせの統計に基づいて動的に設定される場合もある。
【０１１３】
ＲＡＯ命令キュー４７１は、表形式で整理されるものとして示されており、各行が６４バイトキャッシュラインを表し、各列が４バイトキャッシュライン要素を表す。開示の実施形態は、限定されることなく、様々な実装、キャッシュラインサイズ、および要素サイズを選ぶことができる。ＲＡＯ命令キュー４７１は、限定されることなく、レジスタにまたはメモリに格納することができる。いくつかの実施形態において、ＲＡＯ命令キュー４７１が連想メモリに格納されることで、特定のキャッシュラインアドレスを効率的に検索することが可能となる。
【０１１４】
図示のとおり、入来ＲＡＯ命令４７２は、ベースアドレスが「ｇ」に等しいキャッシュラインのオフセット２４におけるクワッドワード値に対する「ＡＤＤ  ９９９」を指定する。４７４において、エンキュー回路部は、キャッシュライン「ｇ」に対する任意のＲＡＯ命令がキュー内で既に保留中であるか否かを判定する。保留中のものが存在し、４７６において、エンキュー回路部は、キャッシュライン「ｇ」に対する入来ＲＡＯ命令４７２と既存のエンキュー済みＲＡＯ命令との間のオーバーラップの度合いを判定する。ここで、入来ＲＡＯ命令と既存のＲＡＯ命令とが部分的にオーバーラップしている。これらは、同じキャッシュライン「ｇ」の同じオフセット２４に対する、しかしクワッドワードとダブルワードという異なるデータ要素サイズによる更新を指定する。この部分的なオーバーラップのシナリオにおいて、エンキュー回路部４７８は、これら２つのＡＤＤ命令をシリアル化する。特に、キュー内に配置する場所がないので、まず命令４７２をストールする。次に、エンキュー回路は、既存のエンキュー済みＲＡＯ命令のタイムアウトカウンタ値に関わらず、オフセット２４に対する「ＡＤＤ  ４５」およびオフセット４４に対する「ＡＤＤ  ５５」を含む、キャッシュライン「ｇ」に対する全てのＲＡＯ命令を即座にキャッシュ制御回路へ送る。これに応答して、キャッシュ制御回路は、アドレス「ｇ」のキャッシュラインを読み込んで加算を行うことによりそれらのＲＡＯ命令を実行する。エンキュー回路は、キャッシュ制御回路から確認応答を受け取ると、キャッシュライン「ｇ」のエントリをクリアアウトし、命令４７２を挿入する。
【０１１５】
図４Ｉは、いくつかの実施形態に係る、遠隔アトミックオペレーション命令の特別な処理を示すブロックフロー図である。図示のとおり、エンキュー前のＲＡＯ命令キュー４８１は、エンキュー済みＲＡＯ命令を格納するデータ構造である。各キューエントリは、特定のキャッシュライン要素にアドレス指定されたＲＡＯ命令を含む。いくつかの実施形態において、各要素は、キャッシュラインベースアドレスおよびキャッシュラインオフセットを含むメモリアドレスを含む。各エントリは、指定されたＲＡＯオペコード、およびソースデータが存在する場合、これらをさらに含む。
【０１１６】
各要素は、ＲＡＯ命令がキューに追加されたときに初期値に設定され、組み合わせの機会を特定するための時間を取ることを可能とするタイムアウトカウンタ（または満了タイムスタンプ）をさらに含む。タイムアウトカウンタは、予め定められた値にソフトウェアによって静的に設定される場合があり、または過去の組み合わせの統計に基づいて動的に設定される場合もある。
【０１１７】
ＲＡＯ命令キュー４８１は、表形式で整理されるものとして示されており、各行が６４バイトキャッシュラインを表し、各列が４バイトキャッシュライン要素を表す。開示の実施形態は、限定されることなく、様々な実装、キャッシュラインサイズ、および要素サイズを選ぶことができる。ＲＡＯ命令キュー４８１は、限定されることなく、レジスタにまたはメモリに格納することができる。いくつかの実施形態において、ＲＡＯ命令キュー４８１が連想メモリに格納されることで、特定のキャッシュラインアドレスを効率的に検索することが可能となる。
【０１１８】
図示のとおり、入来ＲＡＯ命令４８２は、ベースアドレスが「ｇ」に等しいキャッシュラインのオフセット２４における値に対する「ＡＤＤ  １１」を指定する。４８４において、エンキュー回路部は、キャッシュライン「ｇ」に対する任意のＲＡＯ命令がキュー内で既に保留中であるか否かを判定する。しかしながら、ここで、「ＡＤＤ  ４５」のＲＡＯ命令がＲＡＯ命令キュー内で保留中であるが、そのタイムアウトカウンタは満了しており、これはキャッシュライン「ｇ」の命令が既にキャッシュ制御回路へ送られたことを示す。４８４における判定に関して、エンキュー回路部は、既存の「ＡＤＤ  ４５」のＲＡＯ命令を無効として扱い、入来ＲＡＯ命令と既存のＲＡＯ命令とを空間的または時間的に組み合わせることを控える。この部分的なオーバーラップのシナリオにおいて、４８８におけるエンキュー回路部は、ＲＡＯ命令４８２をキャッシュライン「ｇ」に対する以前の命令とシリアル化する。エンキュー回路は、キャッシュライン「ｇ」に対する以前の命令について確認応答をキャッシュ制御回路から受け取ると、キャッシュライン「ｇ」のエントリをクリアアウトし、命令４８２を挿入する。
【０１１９】
図４Ｊは、いくつかの実施形態に係る、中央キャッシュ制御回路に転送される遠隔アトミックオペレーション命令を示すブロックフロー図である。図示のとおり、エンキュー前のＲＡＯ命令キュー４９１は、エンキュー済みＲＡＯ命令を格納するデータ構造である。各キューエントリは、特定のキャッシュライン要素にアドレス指定されたＲＡＯ命令を含む。いくつかの実施形態において、各要素は、キャッシュラインベースアドレスおよびキャッシュラインオフセットを含むメモリアドレスを含む。各エントリは、指定されたＲＡＯオペコード、およびソースデータが存在する場合、これらをさらに含む。
【０１２０】
キャッシュライン「ｇ」に対するエンキュー済みＲＡＯ命令に関して、エンキュー回路は、何らかの時点で、例えばそのキャッシュラインについてエンキューされているＲＡＯ命令のタイムアウトカウンタのうち１または複数が満了すると、ＲＡＯ命令を、それらが行われることになるキャッシュ制御回路へ送る。いくつかの実施形態において、エンキュー回路部は、４９２に示すように、ＲＡＯ命令のサブセットを１つのメッセージでキャッシュ制御回路へ送る。いくつかの実施形態において、このサブセットは常に、当該キャッシュラインについてのエンキュー済み命令の完全なセットである。いくつかの実施形態において、エンキュー回路部は、命令のサブセットを複数のメッセージでキャッシュ制御回路へ送る。このとき、最後のメッセージを除く全てのメッセージに「この後も継続（ＭＯＲＥ  ＯＮ  ＴＨＥ  ＷＡＹ）」信号を含める。
【０１２１】
図５は、いくつかの実施形態に係る、受け取った遠隔アトミックオペレーション命令の処理を示すブロック図である。開始後、５０２において、エンキュー回路部は、オペコード、デスティネーション識別子、およびソースデータを含む命令を受け取る。５０４において、エンキュー回路部は、各エントリが命令および満了タイムスタンプを保持する、デスティネーションキャッシュラインによってグループ化された複数のエントリを有するＲＡＯ命令キューをスキャンする。５０６において、エンキュー回路部は、受け取ったＲＡＯ命令と同じデスティネーションキャッシュラインを特定する、何らかの合致するＲＡＯ命令を検出する。５０８において、エンキュー回路部は、合致する既存のＲＡＯ命令が存在しない場合、受け取ったＲＡＯ命令を命令キューにエンキューし、関連付けられた満了タイムスタンプを初期化する。５１０において、エンキュー回路部は、エンキュー済みの合致するＲＡＯ命令が存在する場合、受け取ったＲＡＯ命令と既存のエンキュー済みＲＡＯ命令との間のオーバーラップの度合いを判定する。いくつかの実施形態において、オーバーラップ判定を行うべく、エンキュー回路部は、受け取ったＲＡＯ命令および既存のＲＡＯ命令のオペコード、要素サイズ、キャッシュラインアドレス、およびキャッシュラインオフセットを比較する。５１２において、エンキュー回路は、オーバーラップが存在しない場合、例えば図４Ｂ〜図４Ｃに関して図示および説明するように、受け取った命令と合致する命令とを空間的に組み合わせる。５１４において、エンキュー回路は、厳密なオーバーラップが存在する場合、例えば図４Ｄに関して図示および説明するように、受け取った命令と合致する命令とを時間的に組み合わせる。５１６において、エンキュー回路部は、部分的なオーバーラップが存在する場合、例えば図４Ｅ〜図４Ｈに関して図示および説明するように、特別な処理を行う。
【０１２２】
遠隔アトミックオペレーション命令を実行するための例示的な実行回路について、以下で図１０Ａから図１２に関してさらに議論および図示する。
［ＲＡＯ命令が実行される場所］
【０１２３】
本明細書の様々な実施形態において命令として定義される遠隔アトミックオペレーションは、マルチプロセッサのコアのうちの１または複数、プライベートキャッシュ、共有キャッシュもしくはキャッシングアンドホームエージェント（ＣＨＡ）、メモリコントローラ、または遠隔コアなど、プロセッサ内の多様なロケーションにおいて行われ得るものとして定義される。ＲＡＯ命令は、シングルソケットシステムおよびマルチソケットシステムの両方を対象とする。
［ＲＡＯ命令のタイプ］
【０１２４】
いくつかの実施形態において、命令の実行は、プロセッサがメモリロケーションのコンテンツを読み込み、読み込んだデータを変更し、結果を当該メモリロケーションにライトバックする、リード・モディファイ・ライトを伴う。任意選択的なパラメータを、変更ステージの間に行われるオペレーションを変更するように機能させることができる。
【０１２５】
ＲＡＯ命令には、アトミックに更新されたメモリロケーションを唯一の出力とするものと、デスティネーションレジスタも有するものとの、２つの異なるクラスが存在する。この差異には、マイクロアーキテクチャ上の影響がある。
【０１２６】
アトミックに更新されたメモリロケーションを唯一の出力とするＲＡＯ命令は、弱く順序付けられる場合がある。この弱い順序付けに起因して、そのようなＲＡＯ命令は、オペレーションがメモリシステムに発行されると、オペレーションの完了を待機することなく速やかにリタイアされる。一方、レジスタデスティネーションを有する命令は、同様にオペレーションがメモリシステムに発行されると速やかに完了する場合があるが、いずれのコンシューマに対してもデータ依存関係を実効化するべく、コアは依然として、命令がそのデスティネーションレジスタの値を生成していることをトラッキングしなければならない。この理由から、いくつかの実施形態において、レジスタデスティネーションを有する命令は、強く順序付けられるものとして扱われる。
【０１２７】
全てのＲＡＯ命令は、メモリデスティネーションおよび汎用レジスタオペランドを取る。それに加えて、（例えばＲＡＸにおいて）追加の暗黙的なオペランドを取るものもある。
【０１２８】
本明細書に開示の実施形態は、以下の特定のオペレーションを包含し、またその他のものにも拡張可能である。
［レジスタデスティネーションなし（すなわち、ＯＰ  ｍｅｍｄｅｓｔ，  ｒｅｇ）］
【０１２９】
ＲＡＯ＿ＡＤＤ：整数加算
【０１３０】
ＲＡＯ＿ＳＵＢ：整数減算
【０１３１】
ＲＡＯ＿ＡＤＤ＿ＳＡＴ：整数飽和加算
【０１３２】
ＲＡＯ＿ＳＵＢ＿ＦＬＲ：床ありの整数減算
【０１３３】
ＲＡＯ＿ＡＮＤ：論理積
【０１３４】
ＲＡＯ＿ＯＲ：論理和
【０１３５】
ＲＡＯ＿ＸＯＲ：排他的論理和
［レジスタデスティネーションありのＲＡＯ命令（すなわち、ＯＰ  ｍｅｍｄｅｓｔ，  ｒｅｇｄｅｓｔ，  ｒｅｇ）］
【０１３６】
ＲＡＯ＿ＡＤＤ＿ＴＨＲ：閾値ありの整数加算（ｒｅｇデスティネーションは単一のビットフラグ）
【０１３７】
ＲＡＯ＿ＳＵＢ＿ＴＨＲ：閾値ありの整数減算（ｒｅｇデスティネーションは単一のビットフラグ）
【０１３８】
ＲＡＯ＿ＸＡＤＤ：整数交換および加算
【０１３９】
ＲＡＯ＿ＸＩＮＣ：整数交換およびインクリメント
【０１４０】
ＲＡＯ＿ＸＤＥＣ：整数交換およびデクリメント
【０１４１】
ＲＡＯ＿ＸＣＨＧ：交換
【０１４２】
ＲＡＯ＿ＣＭＰＸＣＨＧ：比較および交換
［ＲＡＯ命令フォーマット］
【０１４３】
図６は、いくつかの実施形態に係る、遠隔アトミックオペレーションの命令のフォーマットを示すブロック図である。図示のとおり、ＲＡＯ命令６００は、オペコード６０２、任意選択的なサイズ識別子６０８および６１８（任意選択的な命令フィールドを破線で囲ったボックスに示す）、デスティネーション識別子６１２、ならびにソースデータ６１４を含む。
【０１４４】
いくつかの実施形態において、任意選択的なサイズ識別子６０８および６１８は、１バイト、２バイト、４バイト、または８バイトといった各ソースベクトル要素のサイズに対応する、それぞれ「Ｂ」、「Ｗ」、「Ｄ」、および「Ｑ」といったプリフィックスまたはサフィックスなど、オペコードに含まれる。いくつかの実施形態において、任意選択的なサイズ識別子６０８は、半精度（２バイト）、単精度（４バイト）、倍精度（８バイト）、四倍精度（１６バイト）といった各ソースベクトル要素の精度レベルに対応する、それぞれ「Ｈ」、「Ｓ」、「Ｄ」、「Ｑ」、および「Ｅ」といったプリフィックスまたはサフィックスなど、オペコードに含まれる。他の実施形態において、任意選択的なサイズ識別子６０１８は、ソースベクトル要素のサイズおよび／または精度レベルを指定する命令パラメータまたはオペランドである。
【０１４５】
いくつかの実施形態において、ソースデータ６１４は、プロセッサのレジスタファイルに含まれる複数のレジスタのうちの１つなどのソースレジスタを指定する。図９およびさらに下の関連する説明により、プロセッサのレジスタファイルの一実施形態を説明する。いくつかの実施形態において、ソースデータ６１４は、メモリロケーションを特定する。いくつかの実施形態において、ソースデータ６１４は、即値を特定する。
【０１４６】
デスティネーション識別子６１２は、例えば図５に関連して以下で説明するいくつかの実施形態に係る実行結果を書き込む先であるプロセッサのレジスタファイルのベクトルレジスタまたはメモリロケーションのいずれかを特定する。
【０１４７】
遠隔アトミックオペレーション命令の例示的な命令フォーマットについて、以下で図７Ａから図８Ｄに関してさらに議論および図示する。
［命令セット］
【０１４８】
命令セットは、１または複数の命令フォーマットを含んでよい。所与の命令フォーマットは、とりわけ、行われるオペレーション（例えばオペコード）および当該オペレーションが行われる対象となるオペランド、および／または他のデータフィールド（例えばマスク）を指定する様々なフィールド（例えばビットの数、ビットのロケーション）を定義してよい。いくつかの命令フォーマットは、命令テンプレート（またはサブフォーマット）の定義付けによって、さらに細分化される。例えば、所与の命令フォーマットの命令テンプレートは、当該命令フォーマットのフィールドの種々のサブセットを有するものとして定義されてよく（含まれるフィールドは通常同じ順序であるが、少なくともいくつかは、含まれるフィールドの数がより少ないために異なるビット位置を有する）、および／または、異なって解釈される所与のフィールドを有するものとして定義されてよい。よって、ＩＳＡの各命令は、所与の命令フォーマットを用いて（また、定義されている場合には、当該命令フォーマットの命令テンプレートのうちの所与の１つにおいて）表現され、オペレーションおよびオペランドを指定するためのフィールドを含む。例えば、例示的なＡＤＤ命令は、特定のオペコードと、当該オペコードを指定するためのオペコードフィールドおよびオペランド（ソース１／デスティネーションおよびソース２）を選択するためのオペランドフィールドを含む命令フォーマットとを有する。命令ストリーム内でのこのＡＤＤ命令の発生は、特定のオペランドを選択するオペランドフィールド内に特定のコンテンツを有することになる。アドバンスト・ベクトル・エクステンション（ＡＶＸ）（ＡＶＸ１およびＡＶＸ２）と称されるＳＩＭＤ拡張のセット、およびベクトル・エクステンション（ＶＥＸ）のコーディング方式の使用が、リリースおよび／または公開されている（例えば、２０１４年９月のＩｎｔｅｌ（登録商標）  ６４  ａｎｄ  ＩＡ−３２  Ａｒｃｈｉｔｅｃｔｕｒｅｓ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ'ｓ  Ｍａｎｕａｌ、および２０１４年１０月のＩｎｔｅｌ（登録商標）  Ａｄｖａｎｃｅｄ  Ｖｅｃｔｏｒ  Ｅｘｔｅｎｓｉｏｎｓ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｒｅｆｅｒｅｎｃｅを参照）。
［例示的な命令フォーマット］
【０１４９】
本明細書で説明する命令の実施形態は、種々のフォーマットにおいて具現化されてよい。加えて、例示的なシステム、アーキテクチャ、およびパイプラインを以下に詳述する。命令の実施形態は、そのようなシステム、アーキテクチャ、およびパイプライン上で実行されてよいが、詳述されているものに限定されない。
［汎用ベクトルフレンドリ命令フォーマット］
【０１５０】
ベクトルフレンドリ命令フォーマットとは、ベクトル命令に適した命令フォーマットである（例えば、ベクトルオペレーションに特有の特定のフィールドが存在する）。ベクトルオペレーションおよびスカラオペレーションの両方がベクトルフレンドリ命令フォーマットによってサポートされる実施形態が説明されているが、代替的な実施形態は、ベクトルフレンドリ命令フォーマットでのベクトルオペレーションのみを用いる。
【０１５１】
図７Ａ〜図７Ｂは、本発明の実施形態に係る、汎用ベクトルフレンドリ命令フォーマットおよびその命令テンプレートを示すブロック図である。  図７Ａは、本発明の実施形態に係る、汎用ベクトルフレンドリ命令フォーマットおよびそのクラスＡ命令テンプレートを示すブロック図であり、一方で図７Ｂは、本発明の実施形態に係る、汎用ベクトルフレンドリ命令フォーマットおよびそのクラスＢ命令テンプレートを示すブロック図である。具体的には、汎用ベクトルフレンドリ命令フォーマット７００について、クラスＡ命令テンプレートおよびクラスＢ命令テンプレートが定義され、これらの両方が、メモリアクセスなし７０５命令テンプレートおよびメモリアクセス７２０命令テンプレートを含む。ベクトルフレンドリ命令フォーマットの文脈における汎用という用語は、いずれの特定の命令セットにも拘束されない命令フォーマットを指す。
【０１５２】
ベクトルフレンドリ命令フォーマットが、３２ビット（４バイト）または６４ビット（８バイト）のデータ要素幅（またはサイズ）を有する６４バイトベクトルオペランド長（またはサイズ）（よって６４バイトベクトルは、１６ダブルワードサイズの要素、または代替的に８クワッドワードサイズの要素のいずれかからなる）と、１６ビット（２バイト）または８ビット（１バイト）のデータ要素幅（またはサイズ）を有する６４バイトベクトルオペランド長（またはサイズ）と、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、または８ビット（１バイト）のデータ要素幅（またはサイズ）を有する３２バイトベクトルオペランド長（またはサイズ）と、３２ビット（４バイト）、６４ビット（８バイト）、１６ビット（２バイト）、または８ビット（１バイト）のデータ要素幅（またはサイズ）を有する１６バイトベクトルオペランド長（またはサイズ）とをサポートする本発明の実施形態を説明するが、代替的な実施形態は、より多数の、より少数の、または異なるデータ要素幅（例えば１２８ビット（１６バイト）のデータ要素幅）を有する、より多数の、より少数の、および／または異なるベクトルオペランドサイズ（例えば２５６バイトのベクトルオペランド）をサポートしてよい。
【０１５３】
図７ＡのクラスＡ命令テンプレートは、１）メモリアクセスなし７０５命令テンプレート内に示す、メモリアクセスなし・フル丸め制御タイプオペレーション７１０命令テンプレート、およびメモリアクセスなし・データ変換タイプオペレーション７１５命令テンプレート、ならびに２）メモリアクセス７２０命令テンプレート内に示す、メモリアクセス・テンポラル７２５命令テンプレート、およびメモリアクセス・ノンテンポラル７３０命令テンプレートを含む。図７ＢのクラスＢ命令テンプレートは、１）メモリアクセスなし７０５命令テンプレート内に示す、メモリアクセスなし・書き込みマスク制御・部分丸め制御タイプオペレーション７１２命令テンプレート、およびメモリアクセスなし・書き込みマスク制御・ｖｓｉｚｅタイプオペレーション７１７命令テンプレート、ならびに２）メモリアクセス７２０命令テンプレート内に示す、メモリアクセス・書き込みマスク制御７２７命令テンプレートを含む。
【０１５４】
汎用ベクトルフレンドリ命令フォーマット７００は、図７Ａ〜図７Ｂに示す順序で次に列挙する以下のフィールドを含む。
【０１５５】
フォーマットフィールド７４０：このフィールドの特定の値（命令フォーマット識別子の値）は、ベクトルフレンドリ命令フォーマットを一意に特定し、よって命令ストリームにおける当該ベクトルフレンドリ命令フォーマットでの命令の発生を特定する。したがって、このフィールドは、汎用ベクトルフレンドリ命令フォーマットのみを有する命令セットには不要であるという点で、任意選択的である。
【０１５６】
ベースオペレーションフィールド７４２：そのコンテンツは、異なるベースオペレーションを区別する。
【０１５７】
レジスタインデックスフィールド７４４：そのコンテンツは、直接的にまたはアドレス生成を介して、ソースおよびデスティネーションオペランドがレジスタ内にあるかまたはメモリ内にあるかを問わず、それらのロケーションを指定する。これらは、Ｐ×Ｑ（例えば、３２×５１２、１６×１２８、３２×１０２４、６４×１０２４）のレジスタファイルからＮ個のレジスタを選択するのに十分な数のビットを含む。１つの実施形態において、Ｎは３つのソースおよび１つのデスティネーションレジスタまでであってよいが、代替的な実施形態は、より多数またはより少数のソースおよびデスティネーションレジスタをサポートしてよい（例えば、２つのソースまでをサポートしてもよく、このときこれらのソースのうち１つはデスティネーションとしても働き、３つのソースまでをサポートしてもよく、このときこれらのソースのうち１つはデスティネーションとしても働き、２つのソースおよび１つのデスティネーションまでをサポートしてもよい。）
【０１５８】
変更子フィールド７４６：そのコンテンツは、メモリアクセスを指定する汎用ベクトル命令フォーマットでの命令の発生を、そうでないものと区別する、すなわち、メモリアクセスなし７０５命令テンプレートとメモリアクセス７２０命令テンプレートとを区別する。メモリアクセスオペレーションは、（場合によってはレジスタ内の値を用いてソースおよび／またはデスティネーションアドレスを指定して）メモリ階層に対して読み込みおよび／または書き込みを行い、一方で非メモリアクセスオペレーションはこれを行わない（例えば、ソースおよびデスティネーションがレジスタである）。１つの実施形態において、このフィールドはまた、メモリアドレス算出を行うための３つの異なる態様の別を選択するが、代替的な実施形態は、メモリアドレス算出を行うための、より多数の、より少数の、または異なる態様をサポートしてよい。
【０１５９】
オーグメンテーション（ａｕｇｍｅｎｔａｔｉｏｎ）オペレーションフィールド７５０：そのコンテンツは、ベースオペレーションに加えて、多様な異なるオペレーションのうちどれが行われるべきかを区別する。このフィールドは、コンテキスト固有である。本発明の１つの実施形態において、このフィールドは、クラスフィールド７６８、アルファフィールド７５２、およびベータフィールド７５４に分割される。オーグメンテーションオペレーションフィールド７５０は、共通グループの複数のオペレーションを、２つ、３つ、または４つの命令ではなく、単一の命令で行うことを可能とする。
【０１６０】
スケールフィールド７６０：そのコンテンツは、メモリアドレス生成のためのインデックスフィールドのコンテンツのスケーリングを可能とする（例えば、２スケール×インデックス＋ベースを用いるアドレス生成について）。
【０１６１】
変位フィールド７６２Ａ：そのコンテンツは、メモリアドレス生成の一部として用いられる（例えば、２スケール×インデックス＋ベース＋変位を用いるアドレス生成について）。
【０１６２】
変位ファクタフィールド７６２Ｂ（なお、変位フィールド７６２Ａが変位ファクタフィールド７６２Ｂの直上に並置されているが、これはその一方または他方が用いられることを示す）：そのコンテンツは、アドレス生成の一部として用いられ、メモリアクセスのサイズ（Ｎ）によりスケーリングされるべき変位ファクタを指定し、ここでＮは、当該メモリアクセスにおけるバイト数である（例えば、２スケール×インデックス＋ベース＋スケーリングされた変位を用いるアドレス生成について）。冗長の下位ビットは無視され、したがって、変位ファクタフィールドのコンテンツにメモリオペランド合計サイズ（Ｎ）を乗算することで、実効アドレスの算出に用いられる最終的な変位を生成する。Ｎの値は、フルオペコードフィールド７７４（本明細書で後述）およびデータ操作フィールド７５４Ｃに基づいて、ランタイムでプロセッサハードウェアによって決定される。変位フィールド７６２Ａおよび変位ファクタフィールド７６２Ｂは、これらがメモリアクセスなし７０５命令テンプレートについては用いられないという点で任意選択的であり、および／または、異なる実施形態は、これら２つのうち一方のみを実装してよく、またはいずれも実装しなくてもよい。
【０１６３】
データ要素幅フィールド７６４：そのコンテンツは、複数のデータ要素幅のうちどれが用いられるべきかを区別する（いくつかの実施形態では全ての命令について、他の実施形態では一部の命令のみについて）。このフィールドは、１つのデータ要素幅のみがサポートされる、および／または複数のデータ要素幅が何らかの態様のオペコードを用いてサポートされる場合は不要であるという点で、任意選択的である。
【０１６４】
書き込みマスクフィールド７７０：そのコンテンツは、データ要素位置ごとの単位で、デスティネーションベクトルオペランドにおけるそのデータ要素位置がベースオペレーションおよびオーグメンテーションオペレーションの結果を反映するか否かを制御する。クラスＡ命令テンプレートは、マージ式書き込みマスキングをサポートし、一方でクラスＢ命令テンプレートは、マージ式書き込みマスキングおよびゼロ化式書き込みマスキングの両方をサポートする。マージ式の場合、ベクトルマスクは、デスティネーションにおける任意の要素セットが、（ベースオペレーションおよびオーグメンテーションオペレーションにより指定される）任意のオペレーションの実行中に更新から保護されることを可能とし、他の１つの実施形態においては、対応するマスクビットが０を有するデスティネーションの各要素の古い値が保たれる。これに対し、ゼロ化式の場合、ベクトルマスクは、デスティネーションにおける任意の要素セットが、（ベースオペレーションおよびオーグメンテーションオペレーションにより指定される）任意のオペレーションの実行中にゼロ化されることを可能とし、１つの実施形態においては、対応するマスクビットが０値を有する場合にデスティネーションの要素が０に設定される。この機能性のサブセットとして、行われているオペレーションのベクトル長（すなわち、変更されている複数の要素の、最初の要素から最後の要素までのスパン）を制御する機能がある。ただし、変更されるこれらの要素は連続したものである必要はない。よって、書き込みマスクフィールド７７０は、ロード、ストア、算術的なもの、論理的なもの等を含む部分的なベクトルオペレーションを可能とする。書き込みマスクフィールド７７０のコンテンツが、複数の書き込みマスクレジスタのうち、用いられるべき書き込みマスクを含むものを選択する（よって、書き込みマスクフィールド７７０のコンテンツが、行われるべきそのマスキングを間接的に特定する）本発明の実施形態が説明されているが、代替的な実施形態は、これに代えてまたは加えて、マスク書き込みフィールド７７０のコンテンツが、行われるべきマスキングを直接的に指定することを可能とする。
【０１６５】
即値フィールド７７２：そのコンテンツは、即値の指定を可能とする。このフィールドは、即値をサポートしない汎用ベクトルフレンドリフォーマットの一実装では存在せず、即値を用いない命令には存在しないという点で、任意選択的である。
【０１６６】
クラスフィールド７６８：そのコンテンツは、異なるクラスの命令を区別する。図７Ａ〜図７Ｂに関連して、このフィールドのコンテンツは、クラスＡ命令とクラスＢ命令との別を選択する。図７Ａ〜図７Ｂにおいて、角の丸い四角形を用いて、特定の値がフィールド（例えば、図７Ａ〜図７Ｂにおける、クラスフィールド７６８のそれぞれクラスＡ  ７６８ＡおよびクラスＢ  ７６８Ｂ）に存在することを示す。
［クラスＡの命令テンプレート］
【０１６７】
クラスＡの非メモリアクセス７０５命令テンプレートの場合において、アルファフィールド７５２は、ＲＳフィールド７５２Ａとして解釈され、そのコンテンツは、複数の異なるオーグメンテーションオペレーションタイプのうちどれが行われるべきかを区別し（例えば、丸め７５２Ａ．１およびデータ変換７５２Ａ．２が、それぞれ、メモリアクセスなし・丸めタイプオペレーション７１０命令テンプレートおよびメモリアクセスなし・データ変換タイプオペレーション７１５命令テンプレートについて指定される）、一方でベータフィールド７５４は、指定されたタイプのオペレーションのうちどれが行われるべきかを区別する。メモリアクセスなし７０５命令テンプレートにおいては、スケールフィールド７６０、変位フィールド７６２Ａ、および変位スケールフィールド７６２Ｂが存在しない。
［メモリアクセスなし命令テンプレート：フル丸め制御タイプオペレーション］
【０１６８】
メモリアクセスなし・フル丸め制御タイプオペレーション７１０命令テンプレートにおいて、ベータフィールド７５４は、丸め制御フィールド７５４Ａとして解釈され、そのコンテンツは、静的な丸めを提供する。説明されている本発明の実施形態において、丸め制御フィールド７５４Ａは、全浮動小数点例外抑制（ＳＡＥ）フィールド７５６および丸めオペレーション制御フィールド７５８を含むが、代替的な実施形態は、これらのコンセプトの両方をサポートしてよく、同じフィールドにエンコードしてよく、またはこれらのコンセプト／フィールドの一方または他方のみを有してよい（例えば、丸めオペレーション制御フィールド７５８のみを有してよい）。
【０１６９】
ＳＡＥフィールド７５６：そのコンテンツは、例外イベントレポートを無効化するか否かを区別する。ＳＡＥフィールド７５６のコンテンツが、抑制が有効化されていることを示す場合、所与の命令は、いかなる種類の浮動小数点例外フラグもレポートせず、いかなる浮動小数点例外ハンドラも起こさない。
【０１７０】
丸めオペレーション制御フィールド７５８：そのコンテンツは、一群の丸めオペレーションのうちどれを行うべきか（例えば、切り上げ、切り捨て、０への丸めおよび最近接丸め）を区別する。よって、丸めオペレーション制御フィールド７５８は、命令ごとの単位で丸めモードを変えることを可能とする。プロセッサが丸めモードを指定するための制御レジスタを含む本発明の１つの実施形態では、丸めオペレーション制御フィールド７５０のコンテンツが、そのレジスタ値をオーバーライドする。
［メモリアクセスなし命令テンプレート：データ変換タイプオペレーション］
【０１７１】
メモリアクセスなしデータ変換タイプオペレーション７１５命令テンプレートにおいて、ベータフィールド７５４は、データ変換フィールド７５４Ｂとして解釈され、そのコンテンツは、複数のデータ変換のうちどれが行われるべきか（例えば、データ変換なし、スウィズル、ブロードキャスト）を区別する。
【０１７２】
クラスＡのメモリアクセス７２０命令テンプレートの場合において、アルファフィールド７５２は、追い出しヒントフィールド７５２Ｂとして解釈され、そのコンテンツは、追い出しヒントのうちどれが用いられるべきかを区別し（図７Ａにおいて、テンポラル７５２Ｂ．１およびノンテンポラル７５２Ｂ．２が、それぞれ、メモリアクセス・テンポラル７２５命令テンプレートおよびメモリアクセス・ノンテンポラル７３０命令テンプレートについて指定される）、一方でベータフィールド７５４は、データ操作フィールド７５４Ｃとして解釈され、そのコンテンツは、複数のデータ操作オペレーション（プリミティブとしても知られる）のうちどれが行われるべきか（例えば、操作なし、ブロードキャスト、ソースのアップコンバージョン、およびデスティネーションのダウンコンバージョン）を区別する。メモリアクセス７２０命令テンプレートは、スケールフィールド７６０、および任意選択的に変位フィールド７６２Ａまたは変位スケールフィールド７６２Ｂを含む。
【０１７３】
ベクトルメモリ命令は、変換サポートによってメモリからのベクトルロードおよびメモリへのベクトルストアを行う。通常のベクトル命令と同様に、ベクトルメモリ命令は、データをデータ要素単位でメモリから／メモリへ移送し、ここで実際に移送される要素は、書き込みマスクとして選択されたベクトルマスクのコンテンツによって規定される。
［メモリアクセス命令テンプレート：テンポラル］
【０１７４】
テンポラルデータとは、キャッシュによる恩恵を得るのに十分早く再使用される可能性が高いデータである。ただし、これはヒントであり、種々のプロセッサが、このヒントを全く無視することを含めて、これを種々の態様で実装してよい。
［メモリアクセス命令テンプレート：ノンテンポラル］
【０１７５】
ノンテンポラルデータとは、一次キャッシュでキャッシュすることによる恩恵を得るのに十分早く再使用される可能性が低いデータであり、これには追い出しの優先度が与えられるべきである。ただし、これはヒントであり、種々のプロセッサが、このヒントを全く無視することを含めて、これを種々の態様で実装してよい。
［クラスＢの命令テンプレート］
【０１７６】
クラスＢの命令テンプレートの場合において、アルファフィールド７５２は、書き込みマスク制御（Ｚ）フィールド７５２Ｃとして解釈され、そのコンテンツは、書き込みマスクフィールド７７０によって制御される書き込みマスキングがマージ式であるべきかまたはゼロ化式であるべきかを区別する。
【０１７７】
クラスＢの非メモリアクセス７０５命令テンプレートの場合において、ベータフィールド７５４の一部は、ＲＬフィールド７５７Ａとして解釈され、そのコンテンツは、複数の異なるオーグメンテーションオペレーションタイプのうちどれが行われるべきかを区別し（例えば、丸め７５７Ａ．１およびベクトル長（ＶＳＩＺＥ）７５７Ａ．２が、それぞれ、メモリアクセスなし・書き込みマスク制御・部分丸め制御タイプオペレーション７１２命令テンプレートおよびメモリアクセスなし・書き込みマスク制御・ＶＳＩＺＥタイプオペレーション７１７命令テンプレートについて指定される）、一方でベータフィールド７５４の残りは、指定されたタイプのオペレーションのうちどれが行われるべきかを区別する。メモリアクセスなし７０５命令テンプレートにおいては、スケールフィールド７６０、変位フィールド７６２Ａ、および変位スケールフィールド７６２Ｂが存在しない。
【０１７８】
メモリアクセスなし・書き込みマスク制御・部分丸め制御タイプオペレーション７１０命令テンプレートにおいて、ベータフィールド７５４の残りは、丸めオペレーションフィールド７５９Ａとして解釈され、例外イベントレポートは無効化される（所与の命令は、いかなる種類の浮動小数点例外フラグもレポートせず、いかなる浮動小数点例外ハンドラも起こさない）。
【０１７９】
丸めオペレーション制御フィールド７５９Ａ：丸めオペレーション制御フィールド７５８と同様に、そのコンテンツは、一群の丸めオペレーションのうちどれを行うべきか（例えば、切り上げ、切り捨て、０への丸めおよび最近接丸め）を区別する。よって、丸めオペレーション制御フィールド７５９Ａは、命令ごとの単位で丸めモードを変えることを可能とする。プロセッサが丸めモードを指定するための制御レジスタを含む本発明の１つの実施形態では、丸めオペレーション制御フィールド７５０のコンテンツが、そのレジスタ値をオーバーライドする。
【０１８０】
メモリアクセスなし・書き込みマスク制御・ＶＳＩＺＥタイプオペレーション７１７命令テンプレートにおいて、ベータフィールド７５４の残りは、ベクトル長フィールド７５９Ｂとして解釈され、そのコンテンツは、複数のデータベクトル長のうちどれに対して行われるべきか（例えば、１２８、２５６、または５１２バイト）を区別する。
【０１８１】
クラスＢのメモリアクセス７２０命令テンプレートの場合において、ベータフィールド７５４の一部は、ブロードキャストフィールド７５７Ｂとして解釈され、そのコンテンツは、ブロードキャストタイプデータ操作オペレーションが行われるべきか否かを区別し、一方でベータフィールド７５４の残りは、ベクトル長フィールド７５９Ｂとして解釈される。メモリアクセス７２０命令テンプレートは、スケールフィールド７６０、および任意選択的に変位フィールド７６２Ａまたは変位スケールフィールド７６２Ｂを含む。
【０１８２】
汎用ベクトルフレンドリ命令フォーマット７００に関して、フルオペコードフィールド７７４は、フォーマットフィールド７４０と、ベースオペレーションフィールド７４２と、データ要素幅フィールド７６４とを含むものとして示されている。フルオペコードフィールド７７４がこれらのフィールドの全てを含む１つの実施形態が示されているが、これらの全てをサポートしない実施形態においては、フルオペコードフィールド７７４は、これらのフィールドの全てよりも少数のフィールドを含む。フルオペコードフィールド７７４は、オペレーションコード（オペコード）を提供する。
【０１８３】
オーグメンテーションオペレーションフィールド７５０、データ要素幅フィールド７６４、および書き込みマスクフィールド７７０は、これらの特徴が汎用ベクトルフレンドリ命令フォーマットにおいて命令ごとの単位で指定されることを可能とする。
【０１８４】
書き込みマスクフィールドとデータ要素幅フィールドとの組み合わせは、複数の異なるデータ要素幅に基づいてマスクが適用されることを可能にするという点で、分類された命令を形成する。
【０１８５】
クラスＡおよびクラスＢの範囲内に見出される様々な命令テンプレートは、種々の状況において有利である。本発明のいくつかの実施形態において、種々のプロセッサまたはプロセッサ内の種々のコアは、クラスＡのみ、クラスＢのみ、または両方のクラスをサポートするものであってよい。例として、汎用コンピューティングを用途とする高性能汎用アウトオブオーダコアは、クラスＢのみをサポートしてよく、グラフィクスおよび／または科学技術（スループット）コンピューティングを主な用途とするコアは、クラスＡのみをサポートしてよく、これら両方を用途とするコアは、両方をサポートしてよい（勿論、両方のクラスに属するテンプレートおよび命令の何らかの混合を有するが、両方のクラスに属する全てのテンプレートおよび命令を有しないコアも、本発明の範囲内である）。また、単一のプロセッサは複数のコアを含んでよく、その全てが同じクラスをサポートする、または異なるコアは異なるクラスをサポートする。例として、別個のグラフィクスコアおよび汎用コアを有するプロセッサにおいて、グラフィクスおよび／または科学技術コンピューティングを主な用途とするグラフィクスコアのうちの１つは、クラスＡのみをサポートしてよく、一方で汎用コアのうちの１または複数は、クラスＢのみをサポートする、汎用コンピューティングを用途とするアウトオブオーダ実行およびレジスタリネーミングを伴う高性能汎用コアであってよい。別個のグラフィクスコアを有さない別のプロセッサは、クラスＡおよびクラスＢの両方をサポートする１または複数の汎用インオーダまたはアウトオブオーダコアを含んでよい。勿論、本発明の種々の実施形態において、一方のクラスに属する特徴が、他方のクラスに実装されてもよい。高水準言語で記述されるプログラムは、１）実行用のターゲットプロセッサによりサポートされるクラスの命令のみを有する形式、または２）全クラスの命令の種々の組み合わせを用いて記述される代替的なルーチンを有し、コードを現在実行しているプロセッサによりサポートされる命令に基づいて実行すべきルーチンを選択する制御フローコードを有する形式を含む、種々多様な実行可能な形式にされる（例えば、ジャストインタイム方式でコンパイルされる、または静的にコンパイルされる）こととなる。
［例示的な特定ベクトルフレンドリ命令フォーマット］
【０１８６】
図８Ａは、本発明の実施形態に係る、例示的な特定ベクトルフレンドリ命令フォーマットを示すブロック図である。図８Ａは、フィールドのロケーション、サイズ、解釈、および順序、ならびにそれらのフィールドのうちのいくつかにおける値を指定するという点で特定のものである、特定ベクトルフレンドリ命令フォーマット８００を示す。特定ベクトルフレンドリ命令フォーマット８００は、ｘ８６命令セットを拡張するよう用いられてよく、よってこれらのフィールドのうちのいくつかは、既存のｘ８６命令セットおよびその拡張（例えばＡＶＸ）で用いられるものと同様または同じである。このフォーマットは、拡張を伴う既存のｘ８６命令セットのプリフィックスエンコードフィールド、リアルオペコードバイトフィールド、ＭＯＤ  Ｒ／Ｍフィールド、ＳＩＢフィールド、変位フィールド、および即値フィールドと整合性を保っている。図７Ａまたは図７Ｂの各フィールドに図８Ａの各フィールドをマッピングしたものを示す。
【０１８７】
本発明の実施形態は、例示の目的で、汎用ベクトルフレンドリ命令フォーマット７００の文脈において特定ベクトルフレンドリ命令フォーマット８００に関連して説明されているが、本発明は、それが要請される場合を除き、特定ベクトルフレンドリ命令フォーマット８００に限定されるものではないことを理解されたい。例えば、汎用ベクトルフレンドリ命令フォーマット７００は、様々なフィールドについて多様なあり得るサイズを想定しており、一方で特定ベクトルフレンドリ命令フォーマット８００は、特定のサイズのフィールドを有するものとして示されている。具体的な例として、データ要素幅フィールド７６４が特定ベクトルフレンドリ命令フォーマット８００における１ビットフィールドとして示されているが、本発明はこれに限定されるものではない（すなわち、汎用ベクトルフレンドリ命令フォーマット７００は、その他のサイズのデータ要素幅フィールド７６４も想定する）。
【０１８８】
汎用ベクトルフレンドリ命令フォーマット７００は、図８Ａに示す順序で次に列挙する以下のフィールドを含む。
【０１８９】
ＥＶＥＸプリフィックス（バイト０〜３）８０２：４バイト形式でエンコードされる。
【０１９０】
フォーマットフィールド７４０（ＥＶＥＸバイト０、ビット［７：０］）：第１のバイト（ＥＶＥＸバイト０）は、フォーマットフィールド７４０であり、０ｘ６２（本発明の１つの実施形態における、ベクトルフレンドリ命令フォーマットを区別するのに用いられる固有の値）を含む。
【０１９１】
第２〜第４のバイト（ＥＶＥＸバイト１〜３）は、特定の機能を提供する複数のビットフィールドを含む。
【０１９２】
ＲＥＸフィールド８０５（ＥＶＥＸバイト１、ビット［７−５］）：ＥＶＥＸ．Ｒビットフィールド（ＥＶＥＸバイト１、ビット［７］―Ｒ）、ＥＶＥＸ．Ｘビットフィールド（ＥＶＥＸバイト１、ビット［６］―Ｘ）、および７５７ＢＥＸバイト１、ビット［５］―Ｂ）からなる。ＥＶＥＸ．Ｒ、ＥＶＥＸ．Ｘ、およびＥＶＥＸ．Ｂビットフィールドは、対応するＶＥＸビットフィールドと同じ機能性を提供し、１の補数形式を用いてエンコードされる。すなわち、ＺＭＭ０は１１１１Ｂとしてエンコードされ、ＺＭＭ１５は００００Ｂとしてエンコードされる。命令の他のフィールドは、当技術分野で既知のようにレジスタインデックスの下位３ビットをエンコードし（ｒｒｒ、ｘｘｘ、およびｂｂｂ）、それにより、ＥＶＥＸ．Ｒ、ＥＶＥＸ．ＸおよびＥＶＥＸ．Ｂを加算することによってＲｒｒｒ、Ｘｘｘｘ、およびＢｂｂｂが形成されてよい。
【０１９３】
ＲＥＸ'フィールド７１０：これは、ＲＥＸ'フィールド７１０の第１の部分であり、拡張３２レジスタセットの上位１６または下位１６のいずれかをエンコードするのに用いられるＥＶＥＸ．Ｒ'ビットフィールド（ＥＶＥＸバイト１、ビット［４］―Ｒ'）である。本発明の１つの実施形態において、このビットは、以下に示す他のものと併せて、リアルオペコードバイトが６２であるＢＯＵＮＤ命令と（周知のｘ８６  ３２ビットモードにおいて）区別するよう、ビット反転フォーマットで格納されるが、ＭＯＤ  Ｒ／Ｍフィールド（以下で説明）においてＭＯＤフィールドにおける１１の値を受け付けない。本発明の代替的な実施形態は、このビットおよび以下の他に示されるビットを反転フォーマットで格納しない。下位１６個のレジスタのエンコードには、１の値を用いる。換言すると、ＥＶＥＸ．Ｒ'、ＥＶＥＸ．Ｒ、および他のフィールドからの他のＲＲＲを組み合わせることにより、Ｒ'Ｒｒｒｒが形成される。
【０１９４】
オペコードマップフィールド８１５（ＥＶＥＸバイト１、ビット［３：０］―ｍｍｍｍ）：そのコンテンツは、暗黙的に示される先頭オペコードバイト（０Ｆ、０Ｆ  ３８、または０Ｆ  ３）をエンコードする。
【０１９５】
データ要素幅フィールド７６４（ＥＶＥＸバイト２、ビット［７］―Ｗ）：表記ＥＶＥＸ．Ｗにより表される。ＥＶＥＸ．Ｗは、データ型の粒度（サイズ）を定義するのに用いられる（３２ビットデータ要素または６４ビットデータ要素のいずれか）。
【０１９６】
ＥＶＥＸ．ｖｖｖｖ８２０（ＥＶＥＸバイト２、ビット［６：３］―ｖｖｖｖ）：ＥＶＥＸ．ｖｖｖｖの役割は、以下を含んでよい。１）ＥＶＥＸ．ｖｖｖｖは、反転（１の補数）形式で指定された第１のソースレジスタオペランドをエンコードし、２つ以上のソースオペランドを有する命令について有効である。２）ＥＶＥＸ．ｖｖｖｖは、特定のベクトルシフトについて１の補数形式で指定されたデスティネーションレジスタオペランドをエンコードする。または、３）ＥＶＥＸ．ｖｖｖｖは、いずれのオペランドもエンコードせず、当該フィールドは予約されており、１１１１ｂを含むはずである。よって、ＥＶＥＸ．ｖｖｖｖフィールド８２０は、反転（１の補数）形式で格納される第１のソースレジスタ指定子の４つの下位ビットをエンコードする。命令に応じて、指定子サイズを３２個のレジスタに拡張するべく、追加の異なるＥＶＥＸビットフィールドが用いられる。
【０１９７】
ＥＶＥＸ．Ｕ７６８クラスフィールド（ＥＶＥＸバイト２、ビット［２］―Ｕ）：ＥＶＥＸ．Ｕ＝０である場合、これはクラスＡまたはＥＶＥＸ．Ｕ０を示し、ＥＶＥＸ．Ｕ＝１である場合、これはクラスＢまたはＥＶＥＸ．Ｕ１を示す。
【０１９８】
プリフィックスエンコードフィールド８２５（ＥＶＥＸバイト２、ビット［１：０］―ｐｐ）：ベースオペレーションフィールドの追加的なビットを提供する。ＥＶＥＸプリフィックスフォーマットにおけるレガシＳＳＥ命令のサポートを提供することに加え、これはまた、ＳＩＭＤプリフィックスをコンパクト化するという利点を有する（ＥＶＥＸプリフィックスは、ＳＩＭＤプリフィックスを表現するのに１バイトを必要とするのではなく、２ビットのみを必要とする）。１つの実施形態において、レガシフォーマットおよびＥＶＥＸプリフィックスフォーマットの両方においてＳＩＭＤプリフィックス（６６Ｈ、Ｆ２Ｈ、Ｆ３Ｈ）を用いるレガシＳＳＥ命令をサポートするべく、これらのレガシＳＩＭＤプリフィックスは、ＳＩＭＤプリフィックスエンコードフィールドにエンコードされ、ランタイムで、デコーダのＰＬＡに提供される前にレガシＳＩＭＤプリフィックスに展開される（これによりＰＬＡは、これらのレガシ命令のレガシフォーマットおよびＥＶＥＸフォーマットの両方を変更なしで実行することができる）。より新たな命令は、ＥＶＥＸプリフィックスエンコードフィールドのコンテンツをオペコード拡張として直接的に用いることができるであろうが、特定の実施形態は、整合のために同様に展開を行うが、これらのレガシＳＩＭＤプリフィックスが異なる意味を指定することを可能とする。代替的な実施形態は、２ビットＳＩＭＤプリフィックスのエンコードをサポートするよう、よって展開を必要としなくなるよう、ＰＬＡを再設計してよい。
【０１９９】
アルファフィールド７５２（ＥＶＥＸバイト３、ビット［７］―ＥＨ、またＥＶＥＸ．ＥＨ、ＥＶＥＸ．ｒｓ、ＥＶＥＸ．ＲＬ、ＥＶＥＸ．ｗｒｉｔｅ  ｍａｓｋ  ｃｏｎｔｒｏｌ、およびＥＶＥＸ．Ｎとしても知られ、またαで示される）：前述のとおり、このフィールドはコンテキスト固有である。
【０２００】
ベータフィールド７５４（ＥＶＥＸバイト３、ビット［６：４］―ＳＳＳ、またＥＶＥＸ．ｓ２−０、ＥＶＥＸ．ｒ２−０、ＥＶＥＸ．ｒｒ１、ＥＶＥＸ．ＬＬ０、ＥＶＥＸ．ＬＬＢとしても知られ、またβββで示される）：前述のとおり、このフィールドはコンテキスト固有である。
【０２０１】
ＲＥＸ'フィールド７１０：これは、ＲＥＸ'フィールドの残部であり、拡張３２レジスタセットの上位１６または下位１６のいずれかをエンコードするのに用いられ得るＥＶＥＸ．Ｖ'ビットフィールド（ＥＶＥＸバイト３、ビット［３］―Ｖ'）である。このビットは、ビット反転フォーマットで格納される。下位１６個のレジスタのエンコードには、１の値を用いる。換言すると、ＥＶＥＸ．Ｖ'、ＥＶＥＸ．ｖｖｖｖを組み合わせることにより、Ｖ'ＶＶＶＶが形成される。
【０２０２】
書き込みマスクフィールド７７０（ＥＶＥＸバイト３、ビット［２：０］―ｋｋｋ）：そのコンテンツは、前述のとおり、書き込みマスクレジスタにおけるレジスタのインデックスを指定する。本発明の１つの実施形態において、特定の値ＥＶＥＸ．ｋｋｋ＝０００は、書き込みマスクが特定の命令に用いられないことを示唆する特別な挙動を有する（これは、全て１にハードワイヤード接続された書き込みマスク、またはマスキングハードウェアをバイパスするハードウェアの使用を含む多様な態様で実装されてよい）。
【０２０３】
リアルオペコードフィールド８３０（バイト４）は、オペコードバイトとしても知られる。オペコードの一部が、このフィールドで指定される。
【０２０４】
ＭＯＤ  Ｒ／Ｍフィールド８４０（バイト５）は、ＭＯＤフィールド８４２、Ｒｅｇフィールド８４４、およびＲ／Ｍフィールド８４６を含む。前述のとおり、ＭＯＤフィールド８４２のコンテンツは、メモリアクセスオペレーションと非メモリアクセスオペレーションとを区別する。Ｒｅｇフィールド８４４の役割は、デスティネーションレジスタオペランドまたはソースレジスタオペランドのいずれかをエンコードする、またはオペコード拡張として扱われ、いずれの命令オペランドをエンコードするのにも用いられないという２つの状況に要約することができる。Ｒ／Ｍフィールド８４６の役割は、メモリアドレスを参照する命令オペランドをエンコードすること、またはデスティネーションレジスタオペランドもしくはソースレジスタオペランドのいずれかをエンコードすることを含んでよい。
【０２０５】
スケール・インデックス・ベース（ＳＩＢ）バイト（バイト６）：前述のとおり、スケールフィールド７５０のコンテンツは、メモリアドレス生成に用いられる。ＳＩＢ．ｘｘｘ８５４およびＳＩＢ．ｂｂｂ８５６：これらのフィールドのコンテンツは、レジスタインデックスＸｘｘｘおよびＢｂｂｂに関して既に言及した。
【０２０６】
変位フィールド７６２Ａ（バイト７−１０）：ＭＯＤフィールド８４２が１０を含む場合、バイト７−１０は、変位フィールド７６２Ａであり、これはレガシ３２ビット変位（ｄｉｓｐ３２）と同じく機能し、バイト粒度で機能する。
【０２０７】
変位ファクタフィールド７６２Ｂ（バイト７）：ＭＯＤフィールド８４２が０１を含む場合、バイト７は変位ファクタフィールド７６２Ｂである。このフィールドのロケーションは、バイト粒度で機能するレガシｘ８６命令セットの８ビット変位（ｄｉｓｐ８）のものと同じである。ｄｉｓｐ８は符号拡張されるので、−１２８から１２７バイトのオフセットの間でのみアドレス指定が可能である。６４バイトキャッシュラインに関しては、ｄｉｓｐ８は、−１２８、−６４、０、および６４という４つの実際に有用な値にのみ設定可能な８ビットを用いる。より大きな範囲が多くの場合必要となるので、ｄｉｓｐ３２が用いられるが、ｄｉｓｐ３２は４バイトを必要とする。ｄｉｓｐ８およびｄｉｓｐ３２とは対照的に、変位ファクタフィールド７６２Ｂは、ｄｉｓｐ８の再解釈であり、変位ファクタフィールド７６２Ｂを用いる場合、実際の変位は、変位ファクタフィールドのコンテンツをメモリオペランドアクセスのサイズ（Ｎ）で乗算したものによって決定される。このタイプの変位は、ｄｉｓｐ８＊Ｎと称される。これにより、平均命令長が小さくなる（変位に用いられる単一バイトであるが、範囲がはるかに広くなる）。このように圧縮された変位により、実効的な変位がメモリアクセスの粒度の倍数となり、したがってアドレスオフセットの冗長の下位ビットがエンコードされる必要がなくなることが想定される。換言すると、変位ファクタフィールド７６２Ｂが、レガシｘ８６命令セットの８ビット変位と置き換わる。よって、変位ファクタフィールド７６２Ｂは、ｄｉｓｐ８がｄｉｓｐ８＊Ｎにオーバーロードされる点のみを除けば、ｘ８６命令セットの８ビット変位と同じようにエンコードされる（ゆえに、ＭｏｄＲＭ／ＳＩＢのエンコードルールに変更はない）。換言すると、エンコードルールまたはエンコード長に変更はなく、ハードウェアによる変位値の解釈のみに変更がある（バイト単位のアドレスオフセットを得るには、メモリオペランドのサイズによって変位をスケーリングする必要がある）。即値フィールド７７２は、前述のとおりに機能する。
［フルオペコードフィールド］
【０２０８】
図８Ｂは、本発明の１つの実施形態に係る、フルオペコードフィールド７７４を構成する特定ベクトルフレンドリ命令フォーマット８００のフィールドを示すブロック図である。具体的には、フルオペコードフィールド７７４は、フォーマットフィールド７４０、ベースオペレーションフィールド７４２、およびデータ要素幅（Ｗ）フィールド７６４を含む。ベースオペレーションフィールド７４２は、プリフィックスエンコードフィールド８２５、オペコードマップフィールド８１５、およびリアルオペコードフィールド８３０を含む。
［レジスタインデックスフィールド］
【０２０９】
図８Ｃは、本発明の１つの実施形態に係る、レジスタインデックスフィールド７４４を構成する特定ベクトルフレンドリ命令フォーマット８００のフィールドを示すブロック図である。具体的には、レジスタインデックスフィールド７４４は、ＲＥＸフィールド８０５、ＲＥＸ'フィールド８１０、ＭＯＤＲ／Ｍ．ｒｅｇフィールド８４４、ＭＯＤＲ／Ｍ．ｒ／ｍフィールド８４６、ＶＶＶＶフィールド８２０、ｘｘｘフィールド８５４、およびｂｂｂフィールド８５６を含む。
［オーグメンテーションオペレーションフィールド］
【０２１０】
図８Ｄは、本発明の１つの実施形態に係る、オーグメンテーションオペレーションフィールド７５０を構成する特定ベクトルフレンドリ命令フォーマット８００のフィールドを示すブロック図である。クラス（Ｕ）フィールド７６８は、０を含む場合はＥＶＥＸ．Ｕ０（クラスＡ  ７６８Ａ）を表し、１を含む場合はＥＶＥＸ．Ｕ１（クラスＢ  ７６８Ｂ）を表す。Ｕ＝０であり、かつＭＯＤフィールド８４２が１１を含む（メモリアクセスなしオペレーションを表す）場合、アルファフィールド７５２（ＥＶＥＸバイト３、ビット［７］―ＥＨ）は、ｒｓフィールド７５２Ａとして解釈される。ｒｓフィールド７５２Ａが１を含む場合（丸め７５２Ａ．１）、ベータフィールド７５４（ＥＶＥＸバイト３、ビット［６：４］―ＳＳＳ）は丸め制御フィールド７５４Ａとして解釈される。丸め制御フィールド７５４Ａは、１ビットのＳＡＥフィールド７５６および２ビットの丸めオペレーションフィールド７５８を含む。ｒｓフィールド７５２Ａが０を含む場合（データ変換７５２Ａ．２）、ベータフィールド７５４（ＥＶＥＸバイト３、ビット［６：４］―ＳＳＳ）は、３ビットのデータ変換フィールド７５４Ｂとして解釈される。Ｕ＝０であり、かつＭＯＤフィールド８４２が００、０１、または１０を含む（メモリアクセスオペレーションを表す）場合、アルファフィールド７５２（ＥＶＥＸバイト３、ビット［７］―ＥＨ）は、追い出しヒント（ＥＨ）フィールド７５２Ｂとして解釈され、ベータフィールド７５４（ＥＶＥＸバイト３、ビット［６：４］―ＳＳＳ）は、３ビットのデータ操作フィールド７５４Ｃとして解釈される。
【０２１１】
Ｕ＝１である場合、アルファフィールド７５２（ＥＶＥＸバイト３、ビット［７］―ＥＨ）は、書き込みマスク制御（Ｚ）フィールド７５２Ｃとして解釈される。Ｕ＝１であり、かつＭＯＤフィールド８４２が１１を含む（メモリアクセスなしオペレーションを表す）場合、ベータフィールド７５４の一部（ＥＶＥＸバイト３、ビット［４］―Ｓ０）は、ＲＬフィールド７５７Ａとして解釈される。これが１を含む場合（丸め７５７Ａ．１）、ベータフィールド７５４の残り（ＥＶＥＸバイト３、ビット［６‐５］―Ｓ２−１）は、丸めオペレーションフィールド７５９Ａとして解釈され、一方でＲＬフィールド７５７Ａが０を含む場合（ＶＳＩＺＥ  ７５７．Ａ２）、ベータフィールド７５４の残り（ＥＶＥＸバイト３、ビット［６‐５］―Ｓ２−１）は、ベクトル長フィールド７５９Ｂ（ＥＶＥＸバイト３、ビット［６‐５］‐Ｌ１−０）として解釈される。Ｕ＝１であり、かつＭＯＤフィールド８４２が００、０１、または１０を含む（メモリアクセスオペレーションを表す）場合、ベータフィールド７５４（ＥＶＥＸバイト３、ビット［６：４］―ＳＳＳ）は、ベクトル長フィールド７５９Ｂ（ＥＶＥＸバイト３、ビット［６‐５］―Ｌ１−０）およびブロードキャストフィールド７５７Ｂ（ＥＶＥＸバイト３、ビット［４］―Ｂ）として解釈される。
［例示的なレジスタアーキテクチャ］
【０２１２】
図９は、本発明の１つの実施形態に係る、レジスタアーキテクチャ９００のブロック図である。示されている実施形態において、幅５１２ビットの３２個のベクトルレジスタ９１０が存在し、これらのレジスタにｚｍｍ０からｚｍｍ３１の参照符号を付す。下位１６個のｚｍｍレジスタの下位２５６ビットは、レジスタｙｍｍ０〜１６にオーバーレイされる。下位１６個のｚｍｍレジスタの下位１２８ビット（ｙｍｍレジスタの下位１２８ビット）は、レジスタｘｍｍ０〜１５にオーバーレイされる。特定ベクトルフレンドリ命令フォーマット８００は、以下の表に示すような、これらのオーバーレイされたレジスタファイルに対して機能する。
【表１】
2019121351.tif 000005
【０２１３】
換言すると、ベクトル長フィールド７５９Ｂは、最大の長さから１または複数の他のより短い長さまでの間から選択し、ここで、そのようなより短い長さの各々は、先行する長さの半分の長さであり、ベクトル長フィールド７５９Ｂを有さない命令テンプレートは、最大のベクトル長に対して機能する。さらに、１つの実施形態において、特定ベクトルフレンドリ命令フォーマット８００のクラスＢ命令テンプレートは、パックドまたはスカラの単精度／倍精度浮動小数点データおよびパックドまたはスカラの整数データに対して機能する。スカラオペレーションは、ｚｍｍ／ｙｍｍ／ｘｍｍレジスタ内の最下位のデータ要素位置に対して行われるオペレーションであり、より上位のデータ要素位置は、実施形態に応じて、命令以前のまま残されるか、またはゼロ化されるかのいずれかである。
【０２１４】
書き込みマスクレジスタ９１５：示されている実施形態において、８個の書き込みマスクレジスタ（ｋ０からｋ７）が存在し、その各々が６４ビットのサイズである。代替的実施形態において、書き込みマスクレジスタ９１５は、１６ビットのサイズである。前述のとおり、本発明の１つの実施形態において、ベクトルマスクレジスタｋ０は、書き込みマスクとして使用することができない。通常であればｋ０を示すであろうエンコードが書き込みマスクに用いられる場合、これは０ｘＦＦＦＦのハードワイヤード書き込みマスクを選択し、その命令について書き込みマスキングを実効的に無効化する。
【０２１５】
汎用レジスタ９２５：示されている実施形態において、メモリオペランドをアドレス指定するために、既存のｘ８６アドレッシングモードと共に用いられる１６個の６４ビット汎用レジスタが存在する。これらのレジスタは、ＲＡＸ、ＲＢＸ、ＲＣＸ、ＲＤＸ、ＲＢＰ、ＲＳＩ、ＲＤＩ、ＲＳＰ、およびＲ８からＲ１５という名称により参照される。
【０２１６】
ＭＭＸパックド整数フラットレジスタファイル９５０がエイリアス化されるスカラ浮動小数点スタックレジスタファイル（ｘ８７スタック）９４５：示されている実施形態において、ｘ８７スタックは、ｘ８７命令セット拡張を用いて３２／６４／８０ビット浮動小数点データに対してスカラ浮動小数点オペレーションを行うのに用いられる８要素スタックであり、一方でＭＭＸレジスタは、６４ビットパックド整数データに対してオペレーションを行うのに、またＭＭＸレジスタとＸＭＭレジスタとの間で行われるいくつかのオペレーションのためのオペランドを保持するのに用いられる。
【０２１７】
本発明の代替的な実施形態は、範囲のより広いまたはより狭いレジスタを用いてよい。加えて、本発明の代替的な実施形態は、より多数の、より少数の、または異なるレジスタファイルおよびレジスタを用いてよい。
［例示的なコアアーキテクチャ、プロセッサ、およびコンピュータアーキテクチャ］
【０２１８】
プロセッサコアは、種々の態様で、種々の目的のために、および種々のプロセッサにおいて実装されてよい。例として、そのようなコアの実装は、１）汎用コンピューティングを用途とする汎用インオーダコア、２）汎用コンピューティングを用途とする高性能汎用アウトオブオーダコア、３）グラフィクスおよび／または科学技術（スループット）コンピューティングを主な用途とする専用コアを含んでよい。種々のプロセッサの実装は、１）汎用コンピューティングを用途とする１または複数の汎用インオーダコアおよび／または汎用コンピューティングを用途とする１または複数の汎用アウトオブオーダコアを含むＣＰＵ、および２）グラフィクスおよび／または科学技術（スループット）を主な用途とする１または複数の専用コアを含むコプロセッサを含んでよい。そのような種々のプロセッサは、１）ＣＰＵとは別個のチップ上のコプロセッサ、２）ＣＰＵと同じパッケージ内の別個のダイ上のコプロセッサ、３）ＣＰＵと同じダイ上のコプロセッサ（この場合、そのようなコプロセッサは、内蔵グラフィクスおよび／または科学技術（スループット）論理などの専用論理、または専用コアと称されることがある）、および４）上記のＣＰＵ（アプリケーションコアまたはアプリケーションプロセッサと称されることがある）、上述のコプロセッサ、および追加的な機能性を同じダイ上に含み得るシステムオンチップを含み得る、種々のコンピュータシステムアーキテクチャをもたらす。次に例示的なコアアーキテクチャについて説明し、続いて例示的なプロセッサおよびコンピュータアーキテクチャについて説明する。
［例示的なコアアーキテクチャ］
［インオーダコアおよびアウトオブオーダコアのブロック図］
【０２１９】
図１０Ａは、本発明の実施形態に係る、例示的なインオーダパイプラインおよび例示的なレジスタリネーミング・アウトオブオーダ発行／実行パイプラインの両方を示すブロック図である。図１０Ｂは、本発明の実施形態に係る、プロセッサに含まれるべきインオーダアーキテクチャコアの例示的実施形態および例示的なレジスタリネーミング・アウトオブオーダ発行／実行アーキテクチャコアの両方を示すブロック図である。図１０Ａ〜図１０Ｂにおける実線のボックスは、インオーダパイプラインおよびインオーダコアを示し、一方で任意選択的な追加の破線のボックスは、レジスタリネーミング・アウトオブオーダ発行／実行パイプラインおよびコアを示す。インオーダの態様はアウトオブオーダの態様のサブセットであるとして、アウトオブオーダの態様を説明する。
【０２２０】
図１０Ａにおいて、プロセッサパイプライン１０００は、フェッチステージ１００２、長さデコードステージ１００４、デコードステージ１００６、割り当てステージ１００８、リネームステージ１０１０、スケジューリング（ディスパッチまたは発行としても知られる）ステージ１０１２、レジスタ読み込み／メモリ読み込みステージ１０１４、実行ステージ１０１６、ライトバック／メモリ書き込みステージ１０１８、例外処理ステージ１０２２、およびコミットステージ１０２４を含む。
【０２２１】
図１０Ｂは、両方がメモリユニット１０７０に結合された、実行エンジンユニット１０５０に結合されたフロントエンドユニット１０３０を含むプロセッサコア１０９０を示す。コア１０９０は、縮小命令セットコンピューティング（ＲＩＳＣ）コア、複合命令セットコンピューティング（ＣＩＳＣ）コア、超長命令語（ＶＬＩＷ）コア、またはハイブリッドのまたは代替的なコアタイプであってよい。さらに別の選択肢として、コア１０９０は例えば、ネットワークもしくは通信コア、圧縮エンジン、コプロセッサコア、汎用コンピューティンググラフィクス処理ユニット（ＧＰＧＰＵ）コア、またはグラフィクスコア等のような専用コアであってよい。
【０２２２】
フロントエンドユニット１０３０は、デコードユニット１０４０に結合された命令フェッチユニット１０３８に結合された命令トランスレーション・ルックアサイド・バッファ（ＴＬＢ）１０３６に結合された命令キャッシュユニット１０３４に結合された分岐予測ユニット１０３２を含む。デコードユニット１０４０（またはデコーダ）は、命令をデコードし、１または複数のマイクロオペレーション、マイクロコードエントリポイント、マイクロ命令、他の命令、または他の制御信号を出力として生成してよく、これらは、元の命令からデコードされる、もしくは他の方法で元の命令を反映する、または元の命令から導出される。デコードユニット１０４０は、様々な異なるメカニズムを用いて実装されてよい。好適なメカニズムの例としては、限定されるものではないが、ルックアップテーブル、ハードウェア実装、プログラマブルロジックアレイ（ＰＬＡ）、マイクロコードリードオンリメモリ（ＲＯＭ）等が挙げられる。１つの実施形態において、コア１０９０は、マイクロコードＲＯＭ、または特定のマクロ命令のためのマイクロコードを（例えば、デコードユニット１０４０またはフロントエンドユニット１０３０内の他のものに）格納する他の媒体を含む。デコードユニット１０４０は、実行エンジンユニット１０５０のリネーム／アロケータユニット１０５２に結合される。
【０２２３】
実行エンジンユニット１０５０は、リタイアメントユニット１０５４および１または複数のスケジューラユニット１０５６のセットに結合されたリネーム／アロケータユニット１０５２を含む。スケジューラユニット１０５６は、リザベーションステーション、中央命令ウィンドウ等を含む任意の数の異なるスケジューラを表す。スケジューラユニット１０５６は、物理レジスタファイルユニット１０５８に結合される。物理レジスタファイルユニット１０５８の各々は、１または複数の物理レジスタファイルを表し、そのうちの異なるものは、スカラ整数、スカラ浮動小数点、パックド整数パックド浮動小数点、ベクトル整数、ベクトル浮動小数点、ステータス（例えば、実行されるべき次の命令のアドレスである命令ポインタ）等のような１または複数の異なるデータ型を格納する。１つの実施形態において、物理レジスタファイルユニット１０５８は、ベクトルレジスタユニット、書き込みマスクレジスタユニット、およびスカラレジスタユニットを含む。これらのレジスタユニットは、アーキテクチャベクトルレジスタ、ベクトルマスクレジスタおよび汎用レジスタを提供してよい。レジスタリネーミングおよびアウトオブオーダ実行が（例えば、リオーダバッファおよびリタイアメントレジスタファイルの使用、以降のファイル、ヒストリバッファおよびリタイアメントレジスタファイルの使用、レジスタマップおよびレジスタのプールの使用等によって）実装され得る様々な態様を示すよう、物理レジスタファイルユニット１０５８がリタイアメントユニット１０５４と重ねられている。リタイアメントユニット１０５４および物理レジスタファイルユニット１０５８は、実行クラスタ１０６０に結合される。実行クラスタ１０６０は、１または複数の実行ユニット１０６２のセットおよび１または複数のメモリアクセスユニット１０６４のセットを含む。実行ユニット１０６２は、様々なオペレーション（例えば、シフト、加算、減算、乗算）を、様々なタイプのデータ（例えば、スカラ浮動小数点、パックド整数、パックド浮動小数点、ベクトル整数、ベクトル浮動小数点）に対して行ってよい。いくつかの実施形態は、特定の機能または機能セットに専用の複数の実行ユニットを含んでよいが、他の実施形態は、そのいずれもが全ての機能を行う、１つのみの実行ユニットまたは複数の実行ユニットを含んでよい。スケジューラユニット１０５６、物理レジスタファイルユニット１０５８、および実行クラスタ１０６０は、複数存在する可能性があるものとして示す。これは、特定の実施形態が、特定のタイプのデータ／オペレーションについて別個のパイプライン（例えば、スカラ整数パイプライン、スカラ浮動小数点／パックド整数／パックド浮動小数点／ベクトル整数／ベクトル浮動小数点パイプライン、および／またはメモリアクセスパイプラインであり、その各々が自身のスケジューラユニット、物理レジスタファイルユニット、および／または実行クラスタを有し、別個のメモリアクセスパイプラインの場合には、このパイプラインの実行クラスタのみがメモリアクセスユニット１０６４を有する特定の実施形態が実装される）を作成するからである。別個のパイプラインが用いられる場合、これらのパイプラインのうち、１または複数がアウトオブオーダ発行／実行で、残りがインオーダであってよいことも理解されたい。
【０２２４】
メモリアクセスユニット１０６４のセットは、レベル２（Ｌ２）キャッシュユニット１０７６に結合されたデータキャッシュユニット１０７４に結合されたデータＴＬＢユニット１０７２を含むメモリユニット１０７０に結合される。１つの例示的な実施形態において、メモリアクセスユニット１０６４は、ロードユニット、ストアアドレスユニット、およびストアデータユニットを含んでよく、その各々がメモリユニット１０７０内のデータＴＬＢユニット１０７２に結合される。命令キャッシュユニット１０３４は、メモリユニット１０７０内のレベル２（Ｌ２）キャッシュユニット１０７６にさらに結合される。Ｌ２キャッシュユニット１０７６は、１または複数の他のレベルのキャッシュに結合され、最終的にメインメモリに結合される。
【０２２５】
例として、例示的なレジスタリネーミング・アウトオブオーダ発行／実行コアアーキテクチャは、以下のようにパイプライン１０００を実装してよい。１）命令フェッチ１０３８が、フェッチステージ１００２および長さデコードステージ１００４を行う。２）デコードユニット１０４０が、デコードステージ１００６を行う。３）リネーム／アロケータユニット１０５２が、割り当てステージ１００８およびリネームステージ１０１０を行う。４）スケジューラユニット１０５６が、スケジューリングステージ１０１２を行う。５）物理レジスタファイルユニット１０５８およびメモリユニット１０７０が、レジスタ読み込み／メモリ読み込みステージ１０１４を行い、実行クラスタ１０６０が、実行ステージ１０１６を行う。６）メモリユニット１０７０および物理レジスタファイルユニット１０５８が、ライトバック／メモリ書き込みステージ１０１８を行う。７）様々なユニットが、例外処理ステージ１０２２に関わり得る。８）リタイアメントユニット１０５４および物理レジスタファイルユニット１０５８が、コミットステージ１０２４を行う。
【０２２６】
コア１０９０は、本明細書で説明する命令を含めて、１または複数の命令セット（例えば、ｘ８６命令セット（より新しいバージョンで追加されるいくつかの拡張を伴う）、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セット、カリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セット（ＮＥＯＮなどの任意選択的な追加の拡張を伴う））をサポートしてよい。１つの実施形態において、コア１０９０は、パックドデータ命令セット拡張（例えば、ＡＶＸ１、ＡＶＸ２）をサポートする論理を含み、それにより、多数のマルチメディアアプリケーションにより用いられるオペレーションがパックドデータを用いて行われることを可能とする。
【０２２７】
コアは、マルチスレッディング（複数のオペレーションまたはスレッドの、２つ以上の並列セットを実行すること）をサポートしてよく、タイムスライスマルチスレッディング、同時マルチスレッディング（この場合、単一の物理コアが、その物理コアが同時マルチスレッディングを行っているスレッドの各々について論理コアを提供する）、またはそれらの組み合わせ（例えば、Ｉｎｔｅｌ（登録商標）  Ｈｙｐｅｒｔｈｒｅａｄｉｎｇ  ｔｅｃｈｎｏｌｏｇｙのように、タイムスライスのフェッチおよびデコードを行い、続いて同時マルチスレッディングを行う）を含む多様な態様において、マルチスレッディングをサポートしてよいことを理解されたい。
【０２２８】
レジスタリネーミングをアウトオブオーダ実行の文脈において説明しているが、レジスタリネーミングはインオーダアーキテクチャで用いられてもよいことを理解されたい。示されているプロセッサの実施形態はまた、別個の命令およびデータキャッシュユニット１０３４／１０７４ならびに共有Ｌ２キャッシュユニット１０７６も含むが、代替的な実施形態は、命令およびデータの両方について、例えばレベル１（Ｌ１）内部キャッシュなどの単一の内部キャッシュを有してよく、または複数のレベルの内部キャッシュを有してもよい。いくつかの実施形態において、システムは、内部キャッシュと、コアおよび／またはプロセッサの外部にある外部キャッシュとの組み合わせを含んでよい。あるいは、全てのキャッシュがコアおよび／またはプロセッサの外部にあってよい。
［具体的な例示的インオーダコアアーキテクチャ］
【０２２９】
図１１Ａ〜図１１Ｂは、より具体的な例示的インオーダコアアーキテクチャのブロック図を示す。当該コアは、チップ内のいくつかの論理ブロック（同じタイプおよび／または異なるタイプの他のコアを含む）のうちの１つであろう。論理ブロックは、アプリケーションに応じて、高帯域幅相互接続ネットワーク（例えば、リング型ネットワーク）を介して、何らかの固定機能論理、メモリＩ／Ｏインタフェース、および他の必要なＩ／Ｏ論理と通信を行う。
【０２３０】
図１１Ａは、本発明の実施形態に係る、単一プロセッサコアの、オンダイ相互接続ネットワーク１１０２への接続、およびレベル２（Ｌ２）キャッシュのローカルサブセット１１０４を併せたブロック図である。１つの実施形態では、命令デコーダ１１００が、パックドデータ命令セット拡張を伴うｘ８６命令セットをサポートする。Ｌ１キャッシュ１１０６は、スカラユニットおよびベクトルユニットへのキャッシュメモリに対する低レイテンシアクセスを可能とする。１つの実施形態において（設計を簡略化するために）、スカラユニット１１０８およびベクトルユニット１１１０は、別個のレジスタセット（それぞれスカラレジスタ１１１２およびベクトルレジスタ１１１４）を用い、これらの間で移送されるデータは、メモリに書き込まれた後にレベル１（Ｌ１）キャッシュ１１０６から読み戻されるが、本発明の代替的な実施形態は、異なるアプローチを用いてよい（例えば、単一のレジスタセットを用いてよい、または、データが書き込みまたは読み戻しされることなくそれら２つのレジスタファイルの間で移送されることを可能とする通信パスを含んでよい）。
【０２３１】
Ｌ２キャッシュのローカルサブセット１１０４は、プロセッサコアごとに１つずつの別個のローカルサブセットに分割されたグローバルＬ２キャッシュの一部である。各プロセッサコアは、自身のＬ２キャッシュのローカルサブセット１１０４への直接的なアクセスパスを有する。プロセッサコアにより読み込まれたデータは、そのＬ２キャッシュサブセット１１０４に格納され、他のプロセッサコアが自身のローカルＬ２キャッシュサブセットにアクセスするのと並列して速やかにアクセスできるようになる。プロセッサコアによって書き込まれたデータは、必要に応じて、自身のＬ２キャッシュサブセット１１０４に格納され、他のサブセットからフラッシュされる。リング型ネットワークは、共有データの一貫性を保証する。リング型ネットワークは、双方向性であり、プロセッサコア、Ｌ２キャッシュおよび他の論理ブロックなどのエージェントが、チップ内で互いに通信することを可能とする。各リングデータパスは、一方向当たり１０１２ビット幅である。
【０２３２】
図１１Ｂは、本発明の実施形態に係る、図１１Ａのプロセッサコアの一部の拡大図である。図１１Ｂは、Ｌ１キャッシュ１１０４のＬ１データキャッシュ１１０６Ａ部分、および併せてベクトルユニット１１１０およびベクトルレジスタ１１１４に関するさらなる詳細を含む。具体的には、ベクトルユニット１１１０は１６幅ベクトル処理ユニット（ＶＰＵ）（１６幅ＡＬＵ１１２８を参照）であり、これは、整数、単精度浮動、および倍精度浮動の命令のうちの１または複数を実行する。ＶＰＵは、メモリ入力に対する、スウィズルユニット１１２０によるレジスタ入力のスウィズル、数値変換ユニット１１２２Ａ〜Ｂによる数値変換、およびレプリケーションユニット１１２４によるレプリケーションをサポートする。書き込みマスクレジスタ１１２６は、得られたベクトル書き込みのプレディケートを可能とする。
【０２３３】
図１２は、本発明の実施形態に係る、１つよりも多くのコアを有し得、内蔵メモリコントローラを有し得、内蔵グラフィクスを有し得るプロセッサ１２００のブロック図である。図１２における実線のボックスは、単一のコア１２０２Ａ、システムエージェント１２１０、１または複数のバスコントローラユニット１２１６のセットを有するプロセッサ１２００を示し、一方で任意選択的な追加の破線のボックスは、複数のコア１２０２Ａ〜Ｎ、システムエージェントユニット１２１０内の１または複数の内蔵メモリコントローラユニット１２１４のセット、および専用論理１２０８を有する代替的なプロセッサ１２００を示す。
【０２３４】
よって、プロセッサ１２００の異なる実装としては、１）専用論理１２０８を内蔵グラフィクスおよび／または科学技術（スループット）論理（これは、１または複数のコアを含んでよい）とし、コア１２０２Ａ〜Ｎを１または複数の汎用コア（例えば、汎用インオーダコア、汎用アウトオブオーダコア、それら２つの組み合わせ）としたＣＰＵ、２）コア１２０２Ａ〜Ｎをグラフィクスおよび／または科学技術（スループット）を主な用途とする多数の専用コアとしたコプロセッサ、および３）コア１２０２Ａ〜Ｎを多数の汎用インオーダコアとしたコプロセッサが挙げられてよい。よって、プロセッサ１２００は、汎用プロセッサ、コプロセッサ、または、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ（汎用グラフィクス処理ユニット）、高スループット多集積コア（ＭＩＣ）コプロセッサ（３０個またはより多数のコアを含む）、または埋め込みプロセッサ等のような専用プロセッサであってよい。プロセッサは、１または複数のチップ上に実装されてよい。プロセッサ１２００は、例えば、ＢｉＣＭＯＳ、ＣＭＯＳ、またはＮＭＯＳなどの複数のプロセス技術のいずれかを用いて、１または複数の基板の一部であってもよく、および／または当該基板上に実装されてもよい。
【０２３５】
メモリ階層は、コア、１または複数の共有キャッシュユニット１２０６のセット、および内蔵メモリコントローラユニット１２１４のセットに結合された外部メモリ（不図示）の内部に、１または複数のレベルのキャッシュを含む。共有キャッシュユニット１２０６のセットは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、または他のレベルのキャッシュ、最終レベルキャッシュ（ＬＬＣ）、および／またはそれらの組み合わせなどの１または複数の中レベルキャッシュを含んでよい。１つの実施形態において、リング型相互接続ユニット１２１２は、内蔵グラフィクス論理１２０８（内蔵グラフィクス論理１２０８は、専用論理の一例であり、本明細書において専用論理とも称される）、共有キャッシュユニット１２０６のセット、およびシステムエージェントユニット１２１０／内蔵メモリコントローラユニット１２１４を相互接続するが、代替的な実施形態は、そのようなユニットの相互接続に任意の数の周知の技法を用いてよい。１つの実施形態において、１または複数のキャッシュユニット１２０６とコア１２０２Ａ〜Ｎとの間には一貫性が保たれる。
【０２３６】
いくつかの実施形態において、コア１２０２Ａ〜Ｎのうちの１または複数は、マルチスレッディングが可能である。システムエージェント１２１０は、コア１２０２Ａ〜Ｎを協調させ動作させるそれらのコンポーネントを含む。システムエージェントユニット１２１０は、例えば、電力制御ユニット（ＰＣＵ）およびディスプレイユニットを含んでもよい。ＰＣＵは、コア１２０２Ａ〜Ｎおよび内蔵グラフィクス論理１２０８の電力状態を調整するのに必要な論理およびコンポーネントであってよく、またはこれを含んでよい。ディスプレイユニットは、１または複数の外部接続されたディスプレイを駆動するためのものである。
【０２３７】
コア１２０２Ａ〜Ｎは、アーキテクチャ命令セットに関して同種または異種であってよい。すなわち、コア１２０２Ａ〜Ｎのうちの２つ以上は、同じ命令セットの実行が可能であってよく、一方で他のものは、その命令セットのサブセットまたは異なる命令セットのみの実行が可能であってよい。
［例示的なコンピュータアーキテクチャ］
【０２３８】
図１３〜図１６は、例示的コンピュータアーキテクチャのブロック図である。ラップトップ、デスクトップ、ハンドヘルドＰＣ、パーソナルデジタルアシスタント、エンジニアリングワークステーション、サーバ、ネットワークデバイス、ネットワークハブ、スイッチ、埋め込みプロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、グラフィクスデバイス、ビデオゲームデバイス、セットトップボックス、マイクロコントローラ、携帯電話、ポータブルメディアプレイヤ、ハンドヘルドデバイス、および様々な他の電子デバイスについて当技術分野において既知の他のシステム設計および構成もまた好適である。一般に、本明細書に開示のプロセッサおよび／または他の実行論理を組み込むことが可能な多種多様なシステムまたは電子デバイスは、概して好適である。
【０２３９】
ここで図１３を参照すると、本発明の１つの実施形態に係るシステム１３００のブロック図が示されている。システム１３００は、コントローラハブ１３２０に結合された１または複数のプロセッサ１３１０、１３１５を含んでよい。１つの実施形態において、コントローラハブ１３２０は、グラフィクスメモリコントローラハブ（ＧＭＣＨ）１３９０および入力／出力ハブ（ＩＯＨ）１３５０（これらは別個のチップ上にあってよい）を含む。ＧＭＣＨ１３９０は、メモリ１３４０およびコプロセッサ１３４５が結合されたメモリおよびグラフィクスコントローラを含む。ＩＯＨ１３５０は、入力／出力（Ｉ／Ｏ）デバイス１３６０をＧＭＣＨ１３９０に結合する。あるいは、メモリおよびグラフィクスコントローラの一方または両方が、（本明細書で説明するように）プロセッサに内蔵され、メモリ１３４０およびコプロセッサ１３４５は、プロセッサ１３１０に直接的に結合され、コントローラハブ１３２０はＩＯＨ１３５０と共に単一のチップ内に存在する。
【０２４０】
追加的なプロセッサ１３１５の任意選択的な性質が、図１３において破線で示されている。各プロセッサ１３１０、１３１５は、本明細書で説明する処理コアのうちの１または複数を含んでよく、プロセッサ１２００の何らかのバージョンであってよい。
【０２４１】
メモリ１３４０は、例えば、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、相変化メモリ（ＰＣＭ）、またはそれら２つの組み合わせであってよい。少なくとも１つの実施形態について、コントローラハブ１３２０は、フロントサイドバス（ＦＳＢ）のようなマルチドロップバス、ＱｕｉｃｋＰａｔｈ  Ｉｎｔｅｒｃｏｎｎｅｃｔ（ＱＰＩ）のようなポイントツーポイントインタフェース、または類似の接続１３９５を介して、プロセッサ１３１０、１３１５と通信する。
【０２４２】
１つの実施形態において、コプロセッサ１３４５は、例えば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、埋め込みプロセッサ等のような専用プロセッサである。１つの実施形態において、コントローラハブ１３２０は、内蔵グラフィクスアクセラレータを含んでもよい。
【０２４３】
物理リソース１３１０、１３１５の間には、アーキテクチャ上のもの、マイクロアーキテクチャ上のもの、熱的なもの、および電力消費特性のもの等を含む様々な利点の基準に関して、多様な差異があり得る。
【０２４４】
１つの実施形態において、プロセッサ１３１０は、一般的なタイプのデータ処理オペレーションを制御する命令を実行する。それらの命令内にコプロセッサ命令が埋め込まれてもよい。プロセッサ１３１０は、これらのコプロセッサ命令を、アタッチされているコプロセッサ１３４５によって実行されるべきタイプのものとして認識する。したがって、プロセッサ１３１０は、これらのコプロセッサ命令（またはコプロセッサ命令を表す制御信号）を、コプロセッサバスまたは他の相互接続上でコプロセッサ１３４５に発行する。コプロセッサ１３４５は、受け取ったコプロセッサ命令を受け付け、実行する。
【０２４５】
ここで図１４を参照すると、本発明の一実施形態に係る、第１のより具体的な例示的システム１４００のブロック図が示されている。図１４に示すように、マルチプロセッサシステム１４００は、ポイントツーポイント相互接続システムであり、ポイントツーポイント相互接続１４５０を介して結合された第１のプロセッサ１４７０および第２のプロセッサ１４８０を含む。プロセッサ１４７０および１４８０の各々は、プロセッサ１２００の何らかのバージョンであってよい。本発明の１つの実施形態において、プロセッサ１４７０および１４８０はそれぞれプロセッサ１３１０および１３１５であり、一方でコプロセッサ１４３８はコプロセッサ１３４５である。別の実施形態において、プロセッサ１４７０および１４８０はそれぞれプロセッサ１３１０およびコプロセッサ１３４５である。
【０２４６】
プロセッサ１４７０および１４８０は、それぞれ、内蔵メモリコントローラ（ＩＭＣ）ユニット１４７２および１４８２を含むものとして示されている。プロセッサ１４７０はまた、そのバスコントローラユニットの一部として、ポイントツーポイント（Ｐ−Ｐ）インタフェース１４７６および１４７８を含み、同様に、第２のプロセッサ１４８０は、Ｐ−Ｐインタフェース１４８６および１４８８を含む。プロセッサ１４７０、１４８０は、ポイントツーポイント（Ｐ−Ｐ）インタフェース１４５０を介して、Ｐ−Ｐインタフェース回路１４７８、１４８８を用いて情報を交換してよい。図１４に示すように、ＩＭＣ１４７２および１４８２は、これらのプロセッサをそれぞれのメモリ、すなわちメモリ１４３２およびメモリ１４３４に結合し、これらは、それぞれのプロセッサにローカルでアタッチされたメインメモリの部分であってよい。
【０２４７】
プロセッサ１４７０、１４８０は、各々、個々のＰ−Ｐインタフェース１４５２、１４５４を介して、ポイントツーポイントインタフェース回路１４７６、１４９４、１４８６、１４９８を用いてチップセット１４９０と情報を交換してよい。チップセット１４９０は、任意選択的に、高性能インタフェース１４９２を介してコプロセッサ１４３８と情報を交換してよい。１つの実施形態において、コプロセッサ１４３８は、例えば、高スループットＭＩＣプロセッサ、ネットワークまたは通信プロセッサ、圧縮エンジン、グラフィクスプロセッサ、ＧＰＧＰＵ、または埋め込みプロセッサ等のような専用プロセッサである。
【０２４８】
共有キャッシュ（不図示）が、一方のプロセッサ内にまたは両方のプロセッサの外部に含まれてよく、ただしＰ−Ｐ相互接続を介してこれらのプロセッサに接続される。これにより、一方または両方のプロセッサのローカルキャッシュ情報は、プロセッサが低電力モードとなった場合、共有キャッシュに格納されてよい。
【０２４９】
チップセット１４９０は、インタフェース１４９６を介して第１のバス１４１６に結合されてよい。１つの実施形態において、第１のバス１４１６は、ペリフェラルコンポーネントインターコネクト（ＰＣＩ）バス、または、ＰＣＩエクスプレスバスもしくは別の第３世代Ｉ／Ｏ相互接続バスなどのバスであってよいが、本発明の範囲はこれに限定されるものではない。
【０２５０】
図１４に示すように、様々なＩ／Ｏデバイス１４１４が、第１のバス１４１６を第２のバス１４２０に結合するバスブリッジ１４１８と共に、第１のバス１４１６に結合されてよい。１つの実施形態において、コプロセッサ、高スループットＭＩＣプロセッサ、ＧＰＧＰＵ、アクセラレータ（例えば、グラフィクスアクセラレータまたはデジタル信号処理（ＤＳＰ）ユニットなど）、フィールドプログラマブルゲートアレイ、または任意の他のプロセッサなどの１または複数の追加的なプロセッサ１４１５が、第１のバス１４１６に結合される。１つの実施形態において、第２のバス１４２０は、ローピンカウント（ＬＰＣ）バスであってよい。１つの実施形態において、例えば、キーボードおよび／またはマウス１４２２、通信デバイス１４２７、および、命令／コードおよびデータ１４３０を含んでよいディスクドライブまたは他の大容量ストレージデバイスなどのストレージユニット１４２８を含む様々なデバイスが、第２のバス１４２０に結合されてよい。さらに、オーディオＩ／Ｏ１４２４が第２のバス１４２０に結合されてよい。なお、他のアーキテクチャも可能である。例えば、図１４のポイントツーポイントアーキテクチャに代えて、システムは、マルチドロップバスまたは他のそのようなアーキテクチャを実装してよい。
【０２５１】
ここで図１５を参照すると、本発明の一実施形態に係る、第２のより具体的な例示的システム１５００のブロック図が示されている。図１４および図１５における同様の要素は、同様の参照番号を有し、図１４の特定の態様が、図１５の他の態様を不明瞭にするのを避けるべく、図１５から省略されている。
【０２５２】
図１５は、プロセッサ１４７０、１４８０が、内蔵メモリおよびそれぞれＩ／Ｏ制御論理（「ＣＬ」）１４７２および１４８２を含んでよいことを示す。よって、ＣＬ１４７２、１４８２は、内蔵メモリコントローラユニットを含み、Ｉ／Ｏ制御論理を含む。図１５は、ＣＬ１４７２、１４８２に結合されるものがメモリ１４３２、１４３４のみではなく、Ｉ／Ｏデバイス１５１４もまた制御論理１４７２、１４８２に結合されることを示す。レガシＩ／Ｏデバイス１５１５は、チップセット１４９０に結合される。
【０２５３】
ここで図１６を参照すると、本発明の一実施形態に係るＳｏＣ１６００のブロック図が示されている。図１２における類似の要素は、同様の参照番号を有する。また、破線のボックスは、より高度なＳｏＣにおける任意選択的な特徴である。図１６において、相互接続ユニット１６０２は、キャッシュユニット１２０４Ａ〜Ｎおよび共有キャッシュユニット１２０６を含む１または複数のコア１２０２Ａ〜Ｎのセットを含むアプリケーションプロセッサ１６１０と、システムエージェントユニット１２１０と、バスコントローラユニット１２１６と、内蔵メモリコントローラユニット１２１４と、内蔵グラフィクス論理、イメージプロセッサ、オーディオプロセッサ、およびビデオプロセッサを含み得る１または複数のコプロセッサ１６２０のセットと、スタティックランダムアクセスメモリ（ＳＲＡＭ）ユニット１６３０と、ダイレクトメモリアクセス（ＤＭＡ）ユニット１６３２と、１または複数の外部ディスプレイに結合するためのディスプレイユニット１６４０とに結合される。１つの実施形態において、コプロセッサ１６２０は、例えば、ネットワークまたは通信プロセッサ、圧縮エンジン、ＧＰＧＰＵ、高スループットＭＩＣプロセッサ、埋め込みプロセッサ等のような専用プロセッサを含む。
【０２５４】
本明細書に開示のメカニズムの実施形態は、ハードウェア、ソフトウェア、ファームウェア、またはそのような実装アプローチの組み合わせにおいて実装されてよい。本発明の実施形態は、少なくとも１つのプロセッサ、ストレージシステム（揮発性および不揮発性メモリおよび／またはストレージ要素を含む）、少なくとも１つの入力デバイス、および少なくとも１つの出力デバイスを含むプログラミング可能なシステム上で実行するコンピュータプログラムまたはプログラムコードとして実装されてよい。
【０２５５】
図１４に示すコード１４３０などのプログラムコードは、本明細書で説明する機能を行わせて出力情報を生成させる入力命令に適用されてよい。出力情報は、既知の方式で１または複数の出力デバイスに適用されてよい。本願において、処理システムは、例えば、デジタルシグナルプロセッサ（ＤＳＰ）、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、またはマイクロプロセッサなどのプロセッサを有する任意のシステムを含む。
【０２５６】
プログラムコードは、処理システムと通信するよう、高水準の手続き型またはオブジェクト指向プログラミング言語で実装されてよい。プログラムコードは、必要に応じて、アセンブリ言語または機械語で実装されてもよい。実際、本明細書で説明するメカニズムは、いかなる特定のプログラミング言語にもその範囲が限定されるものではない。いずれの場合でも、当該言語は、コンパイラ型またはインタプリタ型の言語であってよい。
【０２５７】
少なくとも１つの実施形態の１または複数の態様が、プロセッサ内の様々な論理を代表する機械可読媒体に格納された代表的な命令によって実装されてよく、これは、機械によって読み込まれると、本明細書で説明する技法を行うための論理を当該機械に作成させる。「ＩＰコア」として知られるそのような代表物は、有形の機械可読媒体に格納され、論理またはプロセッサを実際に作製する製造機械にロードするよう様々な顧客または製造施設に供給されてよい。
【０２５８】
そのような機械可読記憶媒体は、限定されることなく、ハードディスクや、フロッピー（登録商標）ディスク、光ディスク、コンパクトディスクリードオンリメモリ（ＣＤ−ＲＯＭ）、コンパクトディスクリライタブル（ＣＤ−ＲＷ）、および光磁気ディスクを含む任意の他のタイプのディスク、リードオンリメモリ（ＲＯＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、スタティックランダムアクセスメモリ（ＳＲＡＭ）などのランダムアクセスメモリ（ＲＡＭ）、消去可能プログラマブルリードオンリメモリ（ＥＰＲＯＭ）、フラッシュメモリ、電気的消去可能プログラマブルリードオンリメモリ（ＥＥＰＲＯＭ）、相変化メモリ（ＰＣＭ）、磁気カードもしくは光カードなどの半導体デバイス、または電子的命令を格納するのに好適な任意の他のタイプの媒体などの記憶媒体を含む、機械またはデバイスにより製造または形成された非一時的な有形の構成をした物品を含んでよい。
【０２５９】
したがって、本発明の実施形態は、本明細書で説明する構造、回路、装置、プロセッサ、および／またはシステムの特徴を定義する、命令を含むまたはハードウェア記述言語（ＨＤＬ）などの設計データを含む非一時的な有形の機械可読媒体も含む。そのような実施形態は、プログラム製品とも称される場合がある。
［エミュレーション（バイナリトランスレーション、コードモーフィング等を含む）］
【０２６０】
場合によって、命令をソース命令セットからターゲット命令セットに変換するのに、命令コンバータが用いられてよい。例えば、命令コンバータは、命令を、コアにより処理されるべき１または複数の他の命令に（例えば、静的バイナリトランスレーション、動的コンパイルを含む動的バイナリトランスレーションを用いて）翻訳、モーフィング、エミュレート、または他の方法で変換してよい。命令コンバータは、少なくとも１つのｘ８６命令セットコアを有するプロセッサ内のソフトウェアまたはファームウェアにおいて実装されてよく、それにより、少なくとも１つのｘ８６命令セットコアを有するＩｎｔｅｌプロセッサと実質的に同じ結果を実現する。ｘ８６コンパイラ１７０４は、追加的なリンケージ処理があってもなくても、少なくとも１つのｘ８６命令セットコア１７１６を有するプロセッサ上で実行されることができるｘ８６バイナリコード１７０６（例えばオブジェクトコード）を生成するよう動作可能であるコンパイラを表す。同様に、図１７は、高水準言語１７０２におけるプログラムが、少なくとも１つのｘ８６命令セットコア１７１４を有しないプロセッサ（例えば、カリフォルニア州サニーベールのＭＩＰＳ  ＴｅｃｈｎｏｌｏｇｉｅｓのＭＩＰＳ命令セットを実行する、および／またはカリフォルニア州サニーベールのＡＲＭ  ＨｏｌｄｉｎｇｓのＡＲＭ命令セットを実行するコアを有するプロセッサ）によってネイティブに実行され得る代替的な命令セットバイナリコード１７１０を生成するべく、代替的な命令セットコンパイラ１７０８を用いてコンパイルされてよいことを示す。命令コンバータ１７１２は、ｘ８６バイナリコード１７０６を、ｘ８６命令セットコア１７１４を有しないプロセッサによってネイティブに実行され得るコードに変換するよう用いられる。この変換されたコードは、代替的な命令セットバイナリコード１７１０と同じものにはなりにくい。なぜなら、これが可能な命令コンバータを作るのが難しいからである。ただし、変換されたコードは、一般的なオペレーションを遂行し、代替的な命令セットに属する命令で構成されることとなる。よって、命令コンバータ１７１２は、エミュレーション、シミュレーションまたは任意の他のプロセスによって、ｘ８６命令セットプロセッサまたはコアを有しないプロセッサまたは他の電子デバイスがｘ８６バイナリコード１７０６を実行することを可能とする、ソフトウェア、ファームウェア、ハードウェア、またはそれらの組み合わせを表す。
［さらなる例］
【０２６１】
例１は、遠隔アトミックオペレーション（ＲＡＯ）命令を弱い順序付けでアトミックに実行するためのシステムであって、メモリに格納され、各エントリが、オペコード、デスティネーション識別子、およびソースデータを含む１または複数のＲＡＯ命令をエンキューする、デスティネーションキャッシュラインによってグループ化された複数のエントリを有する、ＲＡＯ命令キューと、入来ＲＡＯ命令を受け取り、上記入来ＲＡＯ命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するＲＡＯ命令を検出するべく上記ＲＡＯ命令キューをスキャンする、最適化回路部とを備え、上記最適化回路部はさらに、エンキュー済みの合致するＲＡＯ命令が検出されないことに応答して、上記入来ＲＡＯ命令を上記ＲＡＯ命令キューにエンキューし、エンキュー済みの合致するＲＡＯ命令が検出されたことに応答して、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインＲＡＯ命令の同じグループにエンキューすることにより、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令を空間的に組み合わせる、システムを提供する。
【０２６２】
例２は、例１の例示的システムの内容を含み、上記最適化回路部はさらに、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子と異なるが対応性のあるオペコードとを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、特別な処理を行う。
【０２６３】
例３は、例１の例示的システムの内容を含み、上記最適化回路部はさらに、オーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令を時間的に組み合わせる。
【０２６４】
例４は、例１の例示的システムの内容を含み、上記最適化回路部はさらに、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令が完了するまで上記入来ＲＡＯ命令を遅延させ、続いて上記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う。
【０２６５】
例５は、例１の例示的システムの内容を含み、上記入来ＲＡＯ命令および上記エンキュー済みＲＡＯ命令は、各々が要素サイズ識別子をさらに含み、上記最適化回路部はさらに、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子および同じオペコードを有するが異なる特定された要素サイズを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令が完了するまで上記入来ＲＡＯ命令を遅延させ、続いて上記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う。
【０２６６】
例６は、例１の例示的システムの内容を含み、上記最適化回路部はさらに、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、未完信号（ｔｏ−ｂｅ−ｃｏｎｔｉｎｕｅｄ  ｓｉｇｎａｌ）をＴＲＵＥに設定した状態で上記合致するＲＡＯ命令を実行対象としてディスパッチし、続いて上記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う。
【０２６７】
例７は、例１から６のいずれか１つの例示的システムの内容を含み、規則的にインクリメントするシステムカウンタをさらに備え、各ＲＡＯ命令キューエントリは、満了タイムスタンプをさらに含み、上記最適化回路部はさらに、上記入来ＲＡＯ命令をエンキューするときに、上記満了タイムスタンプを上記システムカウンタよりも前の予め定められた時間量に初期化し、上記エンキュー済みＲＡＯ命令は、上記満了タイムスタンプが上記システムカウンタよりも前である限り、他の命令と組み合わせることが可能である。
【０２６８】
例８は、例７の例示的システムの内容を含み、各々が上記ＲＡＯ命令キューのインスタンスおよび上記最適化回路部のインスタンスを組み込む複数のコアをさらに備え、各コアは、ＲＡＯ命令をコードストレージからフェッチするフェッチ回路部と、上記フェッチされた命令をデコードし、自身の最適化回路部のインスタンスに提供するデコード回路部と、自身のＲＡＯ命令キューのインスタンスをスキャンし、満了タイムスタンプが上記システムカウンタを超過する１または複数のエンキュー済みＲＡＯ命令のうちからエンキュー済みＲＡＯ命令を選択し、上記選択されたＲＡＯ命令を、上記システムにおける複数の実行回路のうちから選択される実行回路部による実行のためにディスパッチする、スケジューリング回路部とをさらに含み、上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも１つを最適化するように選択される順序で、上記ＲＡＯ命令を他のエンキュー済みＲＡＯ命令に関してアウトオブオーダで選択する。
【０２６９】
例９は、例１から６のいずれか１つの例示的システムの内容を含み、規則的にインクリメントするシステムカウンタであって、各ＲＡＯ命令キューエントリは、満了タイムスタンプをさらに含み、上記最適化回路部はさらに、上記入来ＲＡＯ命令をエンキューするときに、上記満了タイムスタンプを上記システムカウンタよりも前の予め定められた時間量に初期化し、上記エンキュー済みＲＡＯ命令は、上記満了タイムスタンプが上記システムカウンタよりも前である限り、他の命令と組み合わせることが可能である、システムカウンタと、上記ＲＡＯ命令キューおよび上記最適化回路部のインスタンスを組み込むキャッシュ制御回路とをさらに備え、上記キャッシュ制御回路は、ＲＡＯ命令を受け取って自身の最適化回路部のインスタンスに提供するインタフェース回路部であって、上記最適化回路部は、組み合わせの機会がある場合、上記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューされたＲＡＯ命令と組み合わせ、組み合わせの機会がない場合、上記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューする、インタフェース回路部と、自身のＲＡＯ命令キューのインスタンスをスキャンして、満了タイムスタンプが上記システムカウンタを超過する１または複数のエンキュー済みＲＡＯ命令のうちでＲＡＯ命令を選択し、上記選択された命令を実行対象としてスケジューリングする、スケジューリング回路部であって、上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも１つを最適化するように選択される順序で、上記ＲＡＯ命令を他のエンキュー済みＲＡＯ命令に関してアウトオブオーダで選択する、スケジューリング回路部と、上記デスティネーション識別子によりアドレス指定されるキャッシュライン全体を読み込み、上記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して上記選択された命令を行い、特定されたデスティネーションが同じキャッシュラインをアドレス指定する１または複数の追加的なエンキュー済みＲＡＯ命令を行い、上記キャッシュラインを上記キャッシュにライトバックし、確認を１または複数のリクエスト元の処理コアに送ることにより、上記選択されたＲＡＯ命令を実行する実行回路部とをさらに含む。
【０２７０】
例１０は、例１から６のいずれか１つの例示的システムの内容を含み、規則的にインクリメントするシステムカウンタであって、各ＲＡＯ命令キューエントリは、満了タイムスタンプをさらに含み、上記最適化回路部はさらに、上記入来ＲＡＯ命令をエンキューするときに、上記満了タイムスタンプを上記システムカウンタよりも前の予め定められた時間量に初期化し、上記エンキュー済みＲＡＯ命令は、上記満了タイムスタンプが上記システムカウンタよりも前である限り、他の命令と組み合わせることが可能である、システムカウンタと、上記ＲＡＯ命令キューおよび上記最適化回路部のインスタンスを組み込む中レベル共有キャッシュ制御回路とをさらに備え、上記中レベル共有キャッシュ制御回路は、ＲＡＯ命令を受け取って自身の最適化回路部のインスタンスに提供するインタフェース回路部であって、上記最適化回路部は、組み合わせの機会がある場合、上記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューされたＲＡＯ命令と組み合わせ、組み合わせの機会がない場合、上記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューする、インタフェース回路部と、自身のＲＡＯ命令キューのインスタンスをスキャンして、満了タイムスタンプが現在のタイムスタンプを超過する１または複数のエンキュー済みＲＡＯ命令のうちでＲＡＯ命令を選択し、上記選択された命令を実行対象としてスケジューリングする、スケジューリング回路部であって、上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも１つを最適化するように選択される順序で、上記ＲＡＯ命令を他のエンキュー済みＲＡＯ命令に関してアウトオブオーダで選択する、スケジューリング回路部と、上記デスティネーション識別子によりアドレス指定されるキャッシュライン全体を読み込み、上記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して上記選択されたＲＡＯ命令を行い、特定されたデスティネーションが同じキャッシュラインをアドレス指定する１または複数の追加的なエンキュー済みＲＡＯ命令を行い、上記キャッシュラインを上記キャッシュにライトバックし、確認を１または複数のリクエスト元の処理コアに送ることにより、上記選択されたＲＡＯ命令を実行する実行回路部とをさらに含む。
【０２７１】
例１１は、遠隔アトミックオペレーション（ＲＡＯ）命令を弱い順序付けでアトミックに実行するための方法であって、最適化回路部が、入来ＲＡＯ命令を受け取る段階と、上記最適化回路部が、各ＲＡＯ命令がオペコード、デスティネーション識別子、およびソースデータを含む、デスティネーションキャッシュラインによってグループ化された複数のエントリを有するＲＡＯ命令キューをスキャンし、上記入来ＲＡＯ命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するＲＡＯ命令を検出する段階とを備え、上記最適化回路部はさらに、エンキュー済みの合致するＲＡＯ命令が検出されないことに応答して、上記入来ＲＡＯ命令を上記ＲＡＯ命令キューにエンキューし、エンキュー済みの合致するＲＡＯ命令が検出されたことに応答して、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインＲＡＯ命令の同じグループにエンキューすることにより、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令を空間的に組み合わせる、方法を提供する。
【０２７２】
例１２は、例１１の例示的方法の内容を含み、上記最適化回路部が、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子と異なるが対応性のあるオペコードとを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、特別な処理を行う段階をさらに備える。
【０２７３】
例１３は、例１１の例示的方法の内容を含み、上記最適化回路部が、オーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令を時間的に組み合わせる段階をさらに備える。
【０２７４】
例１４は、例１１の例示的方法の内容を含み、上記最適化回路部が、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令が完了するまで上記入来ＲＡＯ命令を遅延させ、続いて上記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う段階をさらに備える。
【０２７５】
例１５は、例１１の例示的方法の内容を含み、上記入来ＲＡＯ命令および上記エンキュー済みＲＡＯ命令は、各々が要素サイズ識別子をさらに含み、上記最適化回路部はさらに、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子および同じオペコードを有するが異なる特定された要素サイズを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令が完了するまで上記入来ＲＡＯ命令を遅延させ、続いて上記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う。
【０２７６】
例１６は、例１１の例示的方法の内容を含み、上記最適化回路部が、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、未完信号をＴＲＵＥに設定した状態で上記合致するＲＡＯ命令を実行対象としてディスパッチし、続いて上記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う段階をさらに備える。
【０２７７】
例１７は、例１１から１６のいずれか１つの例示的方法の内容を含み、上記入来ＲＡＯ命令をエンキューするときに、満了タイムスタンプを、規則的にインクリメントするシステムカウンタよりも前の予め定められた時間量に初期化する段階をさらに備え、上記満了タイムスタンプは、上記入来ＲＡＯ命令と共に上記ＲＡＯ命令キューに保持され、上記満了タイムスタンプが上記システムカウンタよりも前である限り、上記入来ＲＡＯ命令を他の入来ＲＡＯ命令と組み合わせることを可能とする。
【０２７８】
例１８は、例１７の例示的方法の内容を含み、スケジューリング回路部が、上記ＲＡＯ命令キューをスキャンして、満了タイムスタンプが上記システムカウンタを超過する１または複数のエンキュー済みＲＡＯ命令のうちからエンキュー済みＲＡＯ命令を選択する段階と、上記スケジューリング回路部が、上記選択されたＲＡＯ命令を、上記方法における複数の実行回路のうちから選択される実行回路部による実行対象としてディスパッチする段階とをさらに備え、上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも１つを最適化するように選択される順序で、上記ＲＡＯ命令を他のエンキュー済みＲＡＯ命令に関してアウトオブオーダで選択する。
【０２７９】
例１９は、例１８の例示的方法の内容を含み、キャッシュ制御回路が、上記ディスパッチされたＲＡＯ命令を受け取る段階であって、上記キャッシュ制御回路は、上記選択された実行回路部を含み、上記最適化回路部のインスタンスおよび上記ＲＡＯ命令キューのインスタンスを組み込む、段階と、上記キャッシュ制御回路が、上記受け取ったＲＡＯ命令を自身の最適化回路部のインスタンスに提供する段階と、最適化回路部の上記インスタンスが、空間的組み合わせの機会がある場合に、上記受け取ったＲＡＯ命令を既にエンキュー済みのＲＡＯ命令と組み合わせ、組み合わせの機会がない場合、上記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューする、段階と、キャッシュ制御回路スケジューリング回路部が、自身のＲＡＯ命令キューのインスタンスをスキャンして、満了タイムスタンプが上記システムカウンタを超過する１または複数のエンキュー済みＲＡＯ命令のうちでＲＡＯ命令を選択する段階と、上記デスティネーション識別子によりアドレス指定されるキャッシュライン全体をキャッシュから読み込み、上記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して上記選択されたＲＡＯ命令を行い、上記キャッシュラインを上記キャッシュにライトバックし、確認を１または複数のリクエスト元の処理コアに送ることにより、上記選択されたＲＡＯ命令を実行する段階とをさらに備える。
【０２８０】
例２０は、例１８のいずれか１つの例示的方法の内容を含み、中レベルキャッシュ制御回路が、上記ディスパッチされたＲＡＯ命令を受け取る段階であって、上記中レベルキャッシュ制御回路は、上記選択された実行回路部を含み、上記最適化回路部のインスタンスおよび上記ＲＡＯ命令キューのインスタンスを組み込む、段階と、最適化回路部の上記インスタンスが、ＲＡＯ命令を空間的に組み合わせる機会がある場合に、上記受け取ったＲＡＯ命令を既にエンキュー済みのＲＡＯ命令と組み合わせ、機会がない場合、上記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューする、段階と、中レベルキャッシュ制御回路のスケジューリング回路部が、自身のＲＡＯ命令キューのインスタンスをスキャンして、１または複数のエンキュー済みＲＡＯ命令のうちでＲＡＯ命令を選択する段階と、上記中レベルキャッシュ制御回路が、上記デスティネーション識別子によりアドレス指定されるキャッシュライン全体を中レベルキャッシュから読み込み、上記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して上記選択されたＲＡＯ命令を行い、上記キャッシュラインを上記中レベルキャッシュにライトバックし、確認を１または複数のリクエスト元の処理コアに送ることにより、上記選択されたＲＡＯ命令を実行する段階とをさらに備える。
【０２８１】
例２１は、遠隔アトミックオペレーション（ＲＡＯ）命令を弱い順序付けでアトミックに実行するための装置であって、各エントリが、オペコード、デスティネーション識別子、およびソースデータを含む１または複数のＲＡＯ命令をエンキューする、デスティネーションキャッシュラインによってグループ化された複数のエントリを有するＲＡＯ命令キューと、入来ＲＡＯ命令を受け取り、上記入来ＲＡＯ命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するＲＡＯ命令を検出するべく上記ＲＡＯ命令キューをスキャンするための最適化手段とを備え、上記最適化手段はさらに、エンキュー済みの合致するＲＡＯ命令が検出されないことに応答して、上記入来ＲＡＯ命令を上記ＲＡＯ命令キューにエンキューし、エンキュー済みの合致するＲＡＯ命令が検出されたことに応答して、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインＲＡＯ命令の同じグループにエンキューすることにより、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令を空間的に組み合わせる、装置を提供する。
【０２８２】
例２２は、例２１の例示的装置の内容を含み、上記最適化手段はさらに、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子と異なるが対応性のあるオペコードとを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、特別な処理を行う。
【０２８３】
例２３は、例２１の例示的装置の内容を含み、上記最適化手段はさらに、オーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令を時間的に組み合わせる。
【０２８４】
例２４は、例２１の例示的装置の内容を含み、上記最適化手段はさらに、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令が完了するまで上記入来ＲＡＯ命令を遅延させ、続いて上記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う。
【０２８５】
例２５は、例２１の例示的装置の内容を含み、上記入来ＲＡＯ命令および上記エンキュー済みＲＡＯ命令は、各々が要素サイズ識別子をさらに含み、上記最適化手段はさらに、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子および同じオペコードを有するが異なる特定された要素サイズを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令が完了するまで上記入来ＲＡＯ命令を遅延させ、続いて上記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う。
【０２８６】
例２６は、例２１の例示的装置の内容を含み、上記最適化手段はさらに、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、未完信号をＴＲＵＥに設定した状態で上記合致するＲＡＯ命令を実行対象としてディスパッチし、続いて上記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う。
【０２８７】
例２７は、例２１から２６のいずれか１つの例示的装置の内容を含み、規則的にインクリメントする装置カウンタをさらに備え、各ＲＡＯ命令キューエントリは、満了タイムスタンプをさらに含み、上記最適化手段はさらに、上記入来ＲＡＯ命令をエンキューするときに、上記満了タイムスタンプを上記装置カウンタよりも前の予め定められた時間量に初期化し、上記エンキュー済みＲＡＯ命令は、上記満了タイムスタンプが上記装置カウンタよりも前である限り、他の命令と組み合わせることが可能である。
【０２８８】
例２８は、例２７の例示的装置の内容を含み、各々が上記ＲＡＯ命令キューのインスタンスおよび上記最適化手段のインスタンスを組み込む複数のコアをさらに備え、各コアは、ＲＡＯ命令をコードストレージからフェッチするフェッチ回路部と、上記フェッチされた命令をデコードし、自身の最適化手段のインスタンスに提供するデコード回路部と、自身のＲＡＯ命令キューのインスタンスをスキャンし、満了タイムスタンプが上記装置カウンタを超過する１または複数のエンキュー済みＲＡＯ命令のうちからＲＡＯ命令を選択し、上記選択されたＲＡＯ命令を、上記装置における複数の実行回路のうちから選択される実行回路部による実行のためにディスパッチする、スケジューリング回路部とをさらに含み、上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも１つを最適化するように選択される順序で、上記ＲＡＯ命令を他のエンキュー済みＲＡＯ命令に関してアウトオブオーダで選択する。
【０２８９】
例２９は、例２１から２６のいずれか１つの例示的装置の内容を含み、規則的にインクリメントする装置カウンタであって、各ＲＡＯ命令キューエントリは、満了タイムスタンプをさらに含み、上記最適化手段はさらに、上記入来ＲＡＯ命令をエンキューするときに、上記満了タイムスタンプを上記装置カウンタよりも前の予め定められた時間量に初期化し、上記エンキュー済みＲＡＯ命令は、上記満了タイムスタンプが上記装置カウンタよりも前である限り、他の命令と組み合わせることが可能である、装置カウンタと、上記ＲＡＯ命令キューおよび上記最適化手段のインスタンスを組み込むキャッシュ制御回路とをさらに備え、上記キャッシュ制御回路は、ＲＡＯ命令を受け取って自身の最適化手段のインスタンスに提供するインタフェース回路部であって、上記最適化手段は、組み合わせの機会がある場合、上記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューされたＲＡＯ命令と組み合わせ、組み合わせの機会がない場合、上記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューする、インタフェース回路部と、自身のＲＡＯ命令キューのインスタンスをスキャンして、満了タイムスタンプが上記装置カウンタを超過する１または複数のエンキュー済みＲＡＯ命令のうちでＲＡＯ命令を選択し、上記選択された命令を実行対象としてスケジューリングする、スケジューリング回路部であって、上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも１つを最適化するように選択される順序で、上記ＲＡＯ命令を他のエンキュー済みＲＡＯ命令に関してアウトオブオーダで選択する、スケジューリング回路部と、上記デスティネーション識別子によりアドレス指定されるキャッシュライン全体を読み込み、上記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して上記選択された命令を行い、特定されたデスティネーションが同じキャッシュラインをアドレス指定する１または複数の追加的なエンキュー済みＲＡＯ命令を行い、上記キャッシュラインを上記キャッシュにライトバックし、確認を１または複数のリクエスト元の処理コアに送ることにより、上記選択されたＲＡＯ命令を実行する実行回路部とをさらに含む。
【０２９０】
例３０は、例２１から２６のいずれか１つの例示的装置の内容を含み、規則的にインクリメントする装置カウンタであって、各ＲＡＯ命令キューエントリは、満了タイムスタンプをさらに含み、上記最適化手段はさらに、上記入来ＲＡＯ命令をエンキューするときに、上記満了タイムスタンプを上記装置カウンタよりも前の予め定められた時間量に初期化し、上記エンキュー済みＲＡＯ命令は、上記満了タイムスタンプが上記装置カウンタよりも前である限り、他の命令と組み合わせることが可能である、装置カウンタと、上記ＲＡＯ命令キューおよび上記最適化手段のインスタンスを組み込む中レベル共有キャッシュ制御回路とをさらに備え、上記中レベル共有キャッシュ制御回路は、ＲＡＯ命令を受け取って自身の最適化手段のインスタンスに提供するインタフェース回路部であって、上記最適化手段は、組み合わせの機会がある場合、上記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューされたＲＡＯ命令と組み合わせ、組み合わせの機会がない場合、上記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューする、インタフェース回路部と、自身のＲＡＯ命令キューのインスタンスをスキャンして、満了タイムスタンプが現在のタイムスタンプを超過する１または複数のエンキュー済みＲＡＯ命令のうちでＲＡＯ命令を選択し、上記選択された命令を実行対象としてスケジューリングする、スケジューリング回路部であって、上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも１つを最適化するように選択される順序で、上記ＲＡＯ命令を他のエンキュー済みＲＡＯ命令に関してアウトオブオーダで選択する、スケジューリング回路部と、上記デスティネーション識別子によりアドレス指定されるキャッシュライン全体を読み込み、上記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して上記選択されたＲＡＯ命令を行い、特定されたデスティネーションが同じキャッシュラインをアドレス指定する１または複数の追加的なエンキュー済みＲＡＯ命令を行い、上記キャッシュラインを上記キャッシュにライトバックし、確認を１または複数のリクエスト元の処理コアに送ることにより、上記選択されたＲＡＯ命令を実行する実行回路部とをさらに含む。
【０２９１】
例３１は、命令を格納する非一時的機械可読媒体であって、上記命令は、プロセッサによって実行されると、上記プロセッサに、最適化回路部が、入来ＲＡＯ命令を受け取ることと、上記最適化回路部が、各ＲＡＯ命令がオペコード、デスティネーション識別子、およびソースデータを含む、デスティネーションキャッシュラインによってグループ化された複数のエントリを有するＲＡＯ命令キューをスキャンし、上記入来ＲＡＯ命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するＲＡＯ命令を検出することであって、上記最適化回路部はさらに、エンキュー済みの合致するＲＡＯ命令が検出されないことに応答して、上記入来ＲＡＯ命令を上記ＲＡＯ命令キューにエンキューし、エンキュー済みの合致するＲＡＯ命令が検出されたことに応答して、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインＲＡＯ命令の同じグループにエンキューすることにより、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令を空間的に組み合わせる、こととによって、遠隔アトミックオペレーション（ＲＡＯ）命令を弱い順序付けでアトミックに実行させる、非一時的機械可読媒体を提供する。
【０２９２】
例３２は、例３１の例示的非一時的機械可読媒体の内容を含み、上記格納された命令は、上記最適化回路部が、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子と異なるが対応性のあるオペコードとを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、特別な処理を行うことによって、上記プロセッサに上記ＲＡＯ命令をさらに実行させる。
【０２９３】
例３３は、例３１の例示的非一時的機械可読媒体の内容を含み、上記格納された命令はさらに、上記最適化回路部が、オーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令を時間的に組み合わせることによって、上記プロセッサに上記ＲＡＯ命令をさらに実行させる。
【０２９４】
例３４は、例３１の例示的非一時的機械可読媒体の内容を含み、上記格納された命令はさらに、上記最適化回路部が、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令が完了するまで上記入来ＲＡＯ命令を遅延させ、続いて上記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行うことによって、上記プロセッサに上記ＲＡＯ命令をさらに実行させる。
【０２９５】
例３５は、例３１の例示的非一時的機械可読媒体の内容を含み、上記入来ＲＡＯ命令および上記エンキュー済みＲＡＯ命令は、各々が要素サイズ識別子をさらに含み、上記最適化回路部はさらに、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子および同じオペコードを有するが異なる特定された要素サイズを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令が完了するまで上記入来ＲＡＯ命令を遅延させ、続いて上記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う。
【０２９６】
例３６は、例３１の例示的非一時的機械可読媒体の内容を含み、上記格納された命令はさらに、上記最適化回路部が、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、未完信号をＴＲＵＥに設定した状態で上記合致するＲＡＯ命令を実行対象としてディスパッチし、続いて上記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行うことによって、上記プロセッサに上記ＲＡＯ命令をさらに実行させる。
【０２９７】
例３７は、例３１から３６のいずれか１つの例示的非一時的機械可読媒体の内容を含み、上記格納された命令はさらに、上記入来ＲＡＯ命令をエンキューするときに、満了タイムスタンプを、規則的にインクリメントするシステムカウンタよりも前の予め定められた時間量に初期化することによって、上記プロセッサに上記ＲＡＯ命令をさらに実行させ、上記満了タイムスタンプは、上記入来ＲＡＯ命令と共に上記ＲＡＯ命令キューに保持され、上記満了タイムスタンプが上記システムカウンタよりも前である限り、上記入来ＲＡＯ命令を他の入来ＲＡＯ命令と組み合わせることを可能とする。
【０２９８】
例３８は、例３７の例示的非一時的機械可読媒体の内容を含み、上記格納された命令はさらに、スケジューリング回路部が、上記ＲＡＯ命令キューをスキャンして、満了タイムスタンプが上記システムカウンタを超過する１または複数のエンキュー済みＲＡＯ命令のうちからエンキュー済みＲＡＯ命令を選択することと、上記スケジューリング回路部が、上記選択されたＲＡＯ命令を、上記方法における複数の実行回路のうちから選択される実行回路部による実行対象としてディスパッチすることとによって、上記プロセッサに上記ＲＡＯ命令をさらに実行させ、上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも１つを最適化するように選択される順序で、上記ＲＡＯ命令を他のエンキュー済みＲＡＯ命令に関してアウトオブオーダで選択する。
【０２９９】
例３９は、例３８の例示的非一時的機械可読媒体の内容を含み、上記格納された命令はさらに、キャッシュ制御回路が、上記ディスパッチされたＲＡＯ命令を受け取ることであって、上記キャッシュ制御回路は、上記選択された実行回路部を含み、上記最適化回路部のインスタンスおよび上記ＲＡＯ命令キューのインスタンスを組み込む、ことと、上記キャッシュ制御回路が、上記受け取ったＲＡＯ命令を自身の最適化回路部のインスタンスに提供することと、最適化回路部の上記インスタンスが、空間的組み合わせの機会がある場合に、上記受け取ったＲＡＯ命令を既にエンキュー済みのＲＡＯ命令と組み合わせ、組み合わせの機会がない場合、上記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューする、ことと、キャッシュ制御回路スケジューリング回路部が、自身のＲＡＯ命令キューのインスタンスをスキャンして、満了タイムスタンプが上記システムカウンタを超過する１または複数のエンキュー済みＲＡＯ命令のうちでＲＡＯ命令を選択することと、上記デスティネーション識別子によりアドレス指定されるキャッシュライン全体をキャッシュから読み込み、上記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して上記選択されたＲＡＯ命令を行い、上記キャッシュラインを上記キャッシュにライトバックし、確認を１または複数のリクエスト元の処理コアに送ることにより、上記選択されたＲＡＯ命令を実行することとによって、上記プロセッサに上記ＲＡＯ命令をさらに実行させる。
【０３００】
例４０は、例３８の例示的非一時的機械可読媒体の内容を含み、上記格納された命令はさらに、中レベルキャッシュ制御回路が、上記ディスパッチされたＲＡＯ命令を受け取ることであって、上記中レベルキャッシュ制御回路は、上記選択された実行回路部を含み、上記最適化回路部のインスタンスおよび上記ＲＡＯ命令キューのインスタンスを組み込む、ことと、最適化回路部の上記インスタンスが、ＲＡＯ命令を空間的に組み合わせる機会がある場合に、上記受け取ったＲＡＯ命令を既にエンキュー済みのＲＡＯ命令と組み合わせ、機会がない場合、上記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューする、ことと、中レベルキャッシュ制御回路のスケジューリング回路部が、自身のＲＡＯ命令キューのインスタンスをスキャンして、１または複数のエンキュー済みＲＡＯ命令のうちでＲＡＯ命令を選択することと、上記中レベルキャッシュ制御回路が、上記デスティネーション識別子によりアドレス指定されるキャッシュライン全体を中レベルキャッシュから読み込み、上記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して上記選択されたＲＡＯ命令を行い、上記キャッシュラインを上記中レベルキャッシュにライトバックし、確認を１または複数のリクエスト元の処理コアに送ることにより、上記選択されたＲＡＯ命令を実行することとによって、上記プロセッサに上記ＲＡＯ命令をさらに実行させる。
［項目１］
遠隔アトミックオペレーション（ＲＡＯ）命令をアトミックに実行するためのシステムであって、
メモリに格納され、各エントリが、オペコード、デスティネーション識別子、およびソースデータを含む１または複数のＲＡＯ命令をエンキューする、デスティネーションキャッシュラインによってグループ化された複数のエントリを有する、ＲＡＯ命令キューと、
入来ＲＡＯ命令を受け取り、上記入来ＲＡＯ命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するＲＡＯ命令を検出するべく上記ＲＡＯ命令キューをスキャンする、最適化回路部とを備え、
上記最適化回路部はさらに、
エンキュー済みの合致するＲＡＯ命令が検出されないことに応答して、上記入来ＲＡＯ命令を上記ＲＡＯ命令キューにエンキューし、
エンキュー済みの合致するＲＡＯ命令が検出されたことに応答して、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインＲＡＯ命令の同じグループにエンキューすることにより、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令を空間的に組み合わせる、
システム。
［項目２］
上記最適化回路部はさらに、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子と異なるが対応性のあるオペコードとを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、特別な処理を行う、項目１に記載のシステム。
［項目３］
上記最適化回路部はさらに、オーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令を時間的に組み合わせる、項目１に記載のシステム。
［項目４］
上記最適化回路部はさらに、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令が完了するまで上記入来ＲＡＯ命令を遅延させ、続いて上記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う、項目１に記載のシステム。
［項目５］
上記入来ＲＡＯ命令および上記エンキュー済みＲＡＯ命令は、各々が要素サイズ識別子をさらに含み、上記最適化回路部はさらに、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子および同じオペコードを有するが異なる特定された要素サイズを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令が完了するまで上記入来ＲＡＯ命令を遅延させ、続いて上記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う、項目１に記載のシステム。
［項目６］
上記最適化回路部はさらに、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、未完信号をＴＲＵＥに設定した状態で上記合致するＲＡＯ命令を実行対象としてディスパッチし、続いて上記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う、項目１に記載のシステム。
［項目７］
規則的にインクリメントするシステムカウンタをさらに備え、
各ＲＡＯ命令キューエントリは、満了タイムスタンプをさらに含み、
上記最適化回路部はさらに、上記入来ＲＡＯ命令をエンキューするときに、上記満了タイムスタンプを上記システムカウンタよりも前の予め定められた時間量に初期化し、上記エンキュー済みＲＡＯ命令は、上記満了タイムスタンプが上記システムカウンタよりも前である限り、他の命令と組み合わせることが可能である、
項目１に記載のシステム。
［項目８］
各々が上記ＲＡＯ命令キューのインスタンスおよび上記最適化回路部のインスタンスを組み込む複数のコアをさらに備え、各コアは、
ＲＡＯ命令をコードストレージからフェッチするフェッチ回路部と、
上記フェッチされた命令をデコードし、自身の最適化回路部のインスタンスに提供するデコード回路部と、
自身のＲＡＯ命令キューのインスタンスをスキャンし、満了タイムスタンプが上記システムカウンタを超過する１または複数のエンキュー済みＲＡＯ命令のうちからエンキュー済みＲＡＯ命令を選択し、上記選択されたＲＡＯ命令を、上記システムにおける複数の実行回路のうちから選択される実行回路部による実行のためにディスパッチする、スケジューリング回路部とをさらに含み、
上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも１つを最適化するように選択される順序で、上記ＲＡＯ命令を他のエンキュー済みＲＡＯ命令に関してアウトオブオーダで選択する、
項目７に記載のシステム。
［項目９］
規則的にインクリメントするシステムカウンタであって、各ＲＡＯ命令キューエントリは、満了タイムスタンプをさらに含み、上記最適化回路部はさらに、上記入来ＲＡＯ命令をエンキューするときに、上記満了タイムスタンプを上記システムカウンタよりも前の予め定められた時間量に初期化し、上記エンキュー済みＲＡＯ命令は、上記満了タイムスタンプが上記システムカウンタよりも前である限り、他の命令と組み合わせることが可能である、システムカウンタと、
上記ＲＡＯ命令キューおよび上記最適化回路部のインスタンスを組み込むキャッシュ制御回路とをさらに備え、
上記キャッシュ制御回路は、
ＲＡＯ命令を受け取って自身の最適化回路部のインスタンスに提供するインタフェース回路部であって、上記最適化回路部は、組み合わせの機会がある場合、上記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューされたＲＡＯ命令と組み合わせ、組み合わせの機会がない場合、上記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューする、インタフェース回路部と、
自身のＲＡＯ命令キューのインスタンスをスキャンして、満了タイムスタンプが上記システムカウンタを超過する１または複数のエンキュー済みＲＡＯ命令のうちでＲＡＯ命令を選択し、上記選択された命令を実行対象としてスケジューリングする、スケジューリング回路部であって、上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも１つを最適化するように選択される順序で、上記ＲＡＯ命令を他のエンキュー済みＲＡＯ命令に関してアウトオブオーダで選択する、スケジューリング回路部と、
上記デスティネーション識別子によりアドレス指定されるキャッシュライン全体を読み込み、上記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して上記選択された命令を行い、特定されたデスティネーションが同じキャッシュラインをアドレス指定する１または複数の追加的なエンキュー済みＲＡＯ命令を行い、上記キャッシュラインを上記キャッシュにライトバックし、確認を１または複数のリクエスト元の処理コアに送ることにより、上記選択されたＲＡＯ命令を実行する実行回路部と
をさらに含む、
項目１に記載のシステム。
［項目１０］
規則的にインクリメントするシステムカウンタであって、各ＲＡＯ命令キューエントリは、満了タイムスタンプをさらに含み、上記最適化回路部はさらに、上記入来ＲＡＯ命令をエンキューするときに、上記満了タイムスタンプを上記システムカウンタよりも前の予め定められた時間量に初期化し、上記エンキュー済みＲＡＯ命令は、上記満了タイムスタンプが上記システムカウンタよりも前である限り、他の命令と組み合わせることが可能である、システムカウンタと、
上記ＲＡＯ命令キューおよび上記最適化回路部のインスタンスを組み込む中レベル共有キャッシュ制御回路とをさらに備え、
上記中レベル共有キャッシュ制御回路は、
ＲＡＯ命令を受け取って自身の最適化回路部のインスタンスに提供するインタフェース回路部であって、上記最適化回路部は、組み合わせの機会がある場合、上記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューされたＲＡＯ命令と組み合わせ、組み合わせの機会がない場合、上記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューする、インタフェース回路部と、
自身のＲＡＯ命令キューのインスタンスをスキャンして、満了タイムスタンプが現在のタイムスタンプを超過する１または複数のエンキュー済みＲＡＯ命令のうちでＲＡＯ命令を選択し、上記選択された命令を実行対象としてスケジューリングする、スケジューリング回路部であって、上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも１つを最適化するように選択される順序で、上記ＲＡＯ命令を他のエンキュー済みＲＡＯ命令に関してアウトオブオーダで選択する、スケジューリング回路部と、
上記デスティネーション識別子によりアドレス指定されるキャッシュライン全体を読み込み、上記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して上記選択されたＲＡＯ命令を行い、特定されたデスティネーションが同じキャッシュラインをアドレス指定する１または複数の追加的なエンキュー済みＲＡＯ命令を行い、上記キャッシュラインを上記キャッシュにライトバックし、確認を１または複数のリクエスト元の処理コアに送ることにより、上記選択されたＲＡＯ命令を実行する実行回路部と
をさらに含む、
項目１に記載のシステム。
［項目１１］
遠隔アトミックオペレーション（ＲＡＯ）命令を弱い順序付けでアトミックに実行するための方法であって、
最適化回路部が、入来ＲＡＯ命令を受け取る段階と、
上記最適化回路部が、各ＲＡＯ命令がオペコード、デスティネーション識別子、およびソースデータを含む、デスティネーションキャッシュラインによってグループ化された複数のエントリを有するＲＡＯ命令キューをスキャンし、上記入来ＲＡＯ命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するＲＡＯ命令を検出する段階とを備え、
上記最適化回路部はさらに、
エンキュー済みの合致するＲＡＯ命令が検出されないことに応答して、上記入来ＲＡＯ命令を上記ＲＡＯ命令キューにエンキューし、
エンキュー済みの合致するＲＡＯ命令が検出されたことに応答して、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインＲＡＯ命令の同じグループにエンキューすることにより、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令を空間的に組み合わせる、
方法。
［項目１２］
上記最適化回路部が、オーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令を時間的に組み合わせる段階をさらに備える、項目１１に記載の方法。
［項目１３］
上記最適化回路部が、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令が完了するまで上記入来ＲＡＯ命令を遅延させ、続いて上記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う段階をさらに備える、項目１１に記載の方法。
［項目１４］
上記入来ＲＡＯ命令および上記エンキュー済みＲＡＯ命令は、各々が要素サイズ識別子をさらに含み、上記最適化回路部はさらに、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子および同じオペコードを有するが異なる特定された要素サイズを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令が完了するまで上記入来ＲＡＯ命令を遅延させ、続いて上記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う、項目１１に記載の方法。
［項目１５］
上記最適化回路部が、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、未完信号をＴＲＵＥに設定した状態で上記合致するＲＡＯ命令を実行対象としてディスパッチし、続いて上記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う段階をさらに備える、項目１１に記載の方法。
［項目１６］
上記入来ＲＡＯ命令をエンキューするときに、満了タイムスタンプを、規則的にインクリメントするシステムカウンタよりも前の予め定められた時間量に初期化する段階をさらに備え、上記満了タイムスタンプは、上記入来ＲＡＯ命令と共に上記ＲＡＯ命令キューに保持され、上記満了タイムスタンプが上記システムカウンタよりも前である限り、上記入来ＲＡＯ命令を他の入来ＲＡＯ命令と組み合わせることを可能とする、
項目１１に記載の方法。
［項目１７］
スケジューリング回路部が、上記ＲＡＯ命令キューをスキャンして、満了タイムスタンプが上記システムカウンタを超過する１または複数のエンキュー済みＲＡＯ命令のうちからエンキュー済みＲＡＯ命令を選択する段階と、
上記スケジューリング回路部が、上記選択されたＲＡＯ命令を、上記方法における複数の実行回路のうちから選択される実行回路部による実行対象としてディスパッチする段階とをさらに備え、
上記スケジューリング回路は、レイテンシ、スループット、電力、および性能のうち少なくとも１つを最適化するように選択される順序で、上記ＲＡＯ命令を他のエンキュー済みＲＡＯ命令に関してアウトオブオーダで選択する、
項目１６に記載の方法。
［項目１８］
キャッシュ制御回路が、上記ディスパッチされたＲＡＯ命令を受け取る段階であって、上記キャッシュ制御回路は、上記選択された実行回路部を含み、上記最適化回路部のインスタンスおよび上記ＲＡＯ命令キューのインスタンスを組み込む、段階と、
上記キャッシュ制御回路が、上記受け取ったＲＡＯ命令を自身の最適化回路部のインスタンスに提供する段階と、
最適化回路部の上記インスタンスが、空間的組み合わせの機会がある場合に、上記受け取ったＲＡＯ命令を既にエンキュー済みのＲＡＯ命令と組み合わせ、組み合わせの機会がない場合、上記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューする、段階と、
キャッシュ制御回路スケジューリング回路部が、自身のＲＡＯ命令キューのインスタンスをスキャンして、満了タイムスタンプが上記システムカウンタを超過する１または複数のエンキュー済みＲＡＯ命令のうちでＲＡＯ命令を選択する段階と、
上記デスティネーション識別子によりアドレス指定されるキャッシュライン全体をキャッシュから読み込み、上記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して上記選択されたＲＡＯ命令を行い、上記キャッシュラインを上記キャッシュにライトバックし、確認を１または複数のリクエスト元の処理コアに送ることにより、上記選択されたＲＡＯ命令を実行する段階と
をさらに備える、
項目１７に記載の方法。
［項目１９］
遠隔アトミックオペレーション（ＲＡＯ）命令を弱い順序付けでアトミックに実行するための装置であって、
各エントリが、オペコード、デスティネーション識別子、およびソースデータを含む１または複数のＲＡＯ命令をエンキューする、デスティネーションキャッシュラインによってグループ化された複数のエントリを有するＲＡＯ命令キューと、
入来ＲＡＯ命令を受け取り、上記入来ＲＡＯ命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するＲＡＯ命令を検出するべく上記ＲＡＯ命令キューをスキャンするための最適化手段とを備え、
上記最適化手段はさらに、
エンキュー済みの合致するＲＡＯ命令が検出されないことに応答して、上記入来ＲＡＯ命令を上記ＲＡＯ命令キューにエンキューし、
エンキュー済みの合致するＲＡＯ命令が検出されたことに応答して、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインＲＡＯ命令の同じグループにエンキューすることにより、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令を空間的に組み合わせる、
装置。
［項目２０］
上記最適化手段はさらに、オーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令を時間的に組み合わせる、項目１９に記載の装置。
［項目２１］
上記最適化手段はさらに、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令が完了するまで上記入来ＲＡＯ命令を遅延させ、続いて上記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う、項目１９に記載の装置。
［項目２２］
上記入来ＲＡＯ命令および上記エンキュー済みＲＡＯ命令は、各々が要素サイズ識別子をさらに含み、上記最適化手段はさらに、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子および同じオペコードを有するが異なる特定された要素サイズを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令が完了するまで上記入来ＲＡＯ命令を遅延させ、続いて上記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う、項目１９に記載の装置。
［項目２３］
命令を格納する非一時的機械可読媒体であって、上記命令は、プロセッサによって実行されると、上記プロセッサに、
最適化回路部が、入来ＲＡＯ命令を受け取ることと、
上記最適化回路部が、各ＲＡＯ命令がオペコード、デスティネーション識別子、およびソースデータを含む、デスティネーションキャッシュラインによってグループ化された複数のエントリを有するＲＡＯ命令キューをスキャンし、上記入来ＲＡＯ命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するＲＡＯ命令を検出することであって、
上記最適化回路部はさらに、
エンキュー済みの合致するＲＡＯ命令が検出されないことに応答して、上記入来ＲＡＯ命令を上記ＲＡＯ命令キューにエンキューし、
エンキュー済みの合致するＲＡＯ命令が検出されたことに応答して、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインＲＡＯ命令の同じグループにエンキューすることにより、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令を空間的に組み合わせる、ことと
によって、遠隔アトミックオペレーション（ＲＡＯ）命令を弱い順序付けでアトミックに実行させる、非一時的機械可読媒体。
［項目２４］
上記格納された命令はさらに、上記最適化回路部が、オーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令を時間的に組み合わせることによって、上記プロセッサに上記ＲＡＯ命令をさらに実行させる、項目２３に記載の非一時的機械可読媒体。
［項目２５］
上記格納された命令はさらに、上記最適化回路部が、上記入来ＲＡＯ命令および上記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、上記合致するＲＡＯ命令が完了するまで上記入来ＲＡＯ命令を遅延させ、続いて上記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行うことによって、上記プロセッサに上記ＲＡＯ命令をさらに実行させる、項目２３に記載の非一時的機械可読媒体。
【図１】
2019121351.tif 000006
【図２】
2019121351.tif 000007
【図３】
2019121351.tif 000008
【図４Ａ】
2019121351.tif 000009
【図４Ｂ】
2019121351.tif 000010
【図４Ｃ】
2019121351.tif 000011
【図４Ｄ】
2019121351.tif 000012
【図４Ｅ】
2019121351.tif 000013
【図４Ｆ】
2019121351.tif 000014
【図４Ｇ】
2019121351.tif 000015
【図４Ｈ】
2019121351.tif 000016
【図４Ｉ】
2019121351.tif 000017
【図４Ｊ】
2019121351.tif 000018
【図５】
2019121351.tif 000019
【図６】
2019121351.tif 000020
【図７Ａ】
2019121351.tif 000021
【図７Ｂ】
2019121351.tif 000022
【図８Ａ】
2019121351.tif 000023
【図８Ｂ】
2019121351.tif 000024
【図８Ｃ】
2019121351.tif 000025
【図８Ｄ】
2019121351.tif 000026
【図９】
2019121351.tif 000027
【図１０Ａ】
2019121351.tif 000028
【図１０Ｂ】
2019121351.tif 000029
【図１１Ａ】
2019121351.tif 000030
【図１１Ｂ】
2019121351.tif 000031
【図１２】
2019121351.tif 000032
【図１３】
2019121351.tif 000033
【図１４】
2019121351.tif 000034
【図１５】
2019121351.tif 000035
【図１６】
2019121351.tif 000036
【図１７】
2019121351.tif 000037
【手続補正書】
【提出日】平成30年12月28日(2018.12.28)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
遠隔アトミックオペレーション（ＲＡＯ）命令を弱い順序付けでアトミックに実行するためのシステムであって、
各エントリが、オペコード、デスティネーション識別子、およびソースデータを含む１または複数のＲＡＯ命令をエンキューする、デスティネーションキャッシュラインによってグループ化された複数のエントリを有するＲＡＯ命令キューと、
入来ＲＡＯ命令を受け取り、前記入来ＲＡＯ命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するＲＡＯ命令を検出するべく前記ＲＡＯ命令キューをスキャンする、最適化回路部とを備え、
前記最適化回路部はさらに、
エンキュー済みの合致するＲＡＯ命令が検出されないことに応答して、前記入来ＲＡＯ命令を前記ＲＡＯ命令キューにエンキューし、
エンキュー済みの合致するＲＡＯ命令が検出されたことに応答して、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインＲＡＯ命令の同じグループにエンキューすることにより、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令を空間的に組み合わせる、
システム。
【請求項２】
前記最適化回路部はさらに、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が同じデスティネーション識別子と異なるが対応性のあるオペコードとを有することから、部分的なオーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、特別な処理を行う、請求項１に記載のシステム。
【請求項３】
前記最適化回路部はさらに、オーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令を時間的に組み合わせる、請求項１に記載のシステム。
【請求項４】
前記最適化回路部はさらに、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令が完了するまで前記入来ＲＡＯ命令を遅延させ、続いて前記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う、請求項１に記載のシステム。
【請求項５】
前記入来ＲＡＯ命令および前記エンキュー済みＲＡＯ命令は、各々が要素サイズ識別子をさらに含み、前記最適化回路部はさらに、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が同じデスティネーション識別子および同じオペコードを有するが異なる特定された要素サイズを有することから、部分的なオーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令が完了するまで前記入来ＲＡＯ命令を遅延させ、続いて前記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う、請求項１に記載のシステム。
【請求項６】
前記最適化回路部はさらに、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、未完信号をＴＲＵＥに設定した状態で前記合致するＲＡＯ命令を実行対象としてディスパッチし、続いて前記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う、請求項１に記載のシステム。
【請求項７】
規則的にインクリメントするシステムカウンタをさらに備え、
各ＲＡＯ命令キューエントリは、満了タイムスタンプをさらに含み、
前記最適化回路部はさらに、前記入来ＲＡＯ命令をエンキューするときに、前記満了タイムスタンプを前記システムカウンタよりも前の予め定められた時間量に初期化し、前記エンキュー済みＲＡＯ命令は、前記満了タイムスタンプが前記システムカウンタよりも前である限り、他の命令と組み合わせることが可能である、
請求項１に記載のシステム。
【請求項８】
各々が前記ＲＡＯ命令キューのインスタンスおよび前記最適化回路部のインスタンスを組み込む複数のコアをさらに備え、各コアは、
ＲＡＯ命令をコードストレージからフェッチするフェッチ回路部と、
前記フェッチされた命令をデコードし、自身の最適化回路部のインスタンスに提供するデコード回路部と、
自身のＲＡＯ命令キューのインスタンスをスキャンし、満了タイムスタンプが前記システムカウンタを超過する１または複数のエンキュー済みＲＡＯ命令のうちからエンキュー済みＲＡＯ命令を選択し、前記選択されたＲＡＯ命令を、前記システムにおける複数の実行回路のうちから選択される実行回路部による実行のためにディスパッチする、スケジューリング回路部とをさらに含み、
前記スケジューリング回路部は、レイテンシ、スループット、電力、および性能のうち少なくとも１つを最適化するように選択される順序で、前記ＲＡＯ命令を他のエンキュー済みＲＡＯ命令に関してアウトオブオーダで選択する、
請求項７に記載のシステム。
【請求項９】
規則的にインクリメントするシステムカウンタであって、各ＲＡＯ命令キューエントリは、満了タイムスタンプをさらに含み、前記最適化回路部はさらに、前記入来ＲＡＯ命令をエンキューするときに、前記満了タイムスタンプを前記システムカウンタよりも前の予め定められた時間量に初期化し、前記エンキュー済みＲＡＯ命令は、前記満了タイムスタンプが前記システムカウンタよりも前である限り、他の命令と組み合わせることが可能である、システムカウンタと、
前記ＲＡＯ命令キューおよび前記最適化回路部のインスタンスを組み込むキャッシュ制御回路とをさらに備え、
前記キャッシュ制御回路は、
ＲＡＯ命令を受け取って自身の最適化回路部のインスタンスに提供するインタフェース回路部であって、前記最適化回路部は、組み合わせの機会がある場合、前記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューされたＲＡＯ命令と組み合わせ、組み合わせの機会がない場合、前記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューする、インタフェース回路部と、
自身のＲＡＯ命令キューのインスタンスをスキャンして、満了タイムスタンプが前記システムカウンタを超過する１または複数のエンキュー済みＲＡＯ命令のうちでＲＡＯ命令を選択し、前記選択された命令を実行対象としてスケジューリングする、スケジューリング回路部であって、前記スケジューリング回路部は、レイテンシ、スループット、電力、および性能のうち少なくとも１つを最適化するように選択される順序で、前記ＲＡＯ命令を他のエンキュー済みＲＡＯ命令に関してアウトオブオーダで選択する、スケジューリング回路部と、
前記デスティネーション識別子によりアドレス指定されるキャッシュライン全体をキャッシュから読み込み、前記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して前記選択された命令を行い、特定されたデスティネーションが同じキャッシュラインをアドレス指定する１または複数の追加的なエンキュー済みＲＡＯ命令を行い、前記キャッシュラインを前記キャッシュにライトバックし、確認を１または複数のリクエスト元の処理コアに送ることにより、前記選択されたＲＡＯ命令を実行する実行回路部と
をさらに含む、
請求項１から６のいずれか一項に記載のシステム。
【請求項１０】
規則的にインクリメントするシステムカウンタであって、各ＲＡＯ命令キューエントリは、満了タイムスタンプをさらに含み、前記最適化回路部はさらに、前記入来ＲＡＯ命令をエンキューするときに、前記満了タイムスタンプを前記システムカウンタよりも前の予め定められた時間量に初期化し、前記エンキュー済みＲＡＯ命令は、前記満了タイムスタンプが前記システムカウンタよりも前である限り、他の命令と組み合わせることが可能である、システムカウンタと、
前記ＲＡＯ命令キューおよび前記最適化回路部のインスタンスを組み込む中レベル共有キャッシュ制御回路とをさらに備え、
前記中レベル共有キャッシュ制御回路は、
ＲＡＯ命令を受け取って自身の最適化回路部のインスタンスに提供するインタフェース回路部であって、前記最適化回路部は、組み合わせの機会がある場合、前記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューされたＲＡＯ命令と組み合わせ、組み合わせの機会がない場合、前記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューする、インタフェース回路部と、
自身のＲＡＯ命令キューのインスタンスをスキャンして、満了タイムスタンプが現在のタイムスタンプを超過する１または複数のエンキュー済みＲＡＯ命令のうちでＲＡＯ命令を選択し、前記選択された命令を実行対象としてスケジューリングする、スケジューリング回路部であって、前記スケジューリング回路部は、レイテンシ、スループット、電力、および性能のうち少なくとも１つを最適化するように選択される順序で、前記ＲＡＯ命令を他のエンキュー済みＲＡＯ命令に関してアウトオブオーダで選択する、スケジューリング回路部と、
前記デスティネーション識別子によりアドレス指定されるキャッシュライン全体をキャッシュから読み込み、前記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して前記選択されたＲＡＯ命令を行い、特定されたデスティネーションが同じキャッシュラインをアドレス指定する１または複数の追加的なエンキュー済みＲＡＯ命令を行い、前記キャッシュラインを前記キャッシュにライトバックし、確認を１または複数のリクエスト元の処理コアに送ることにより、前記選択されたＲＡＯ命令を実行する実行回路部と
をさらに含む、
請求項１から６のいずれか一項に記載のシステム。
【請求項１１】
遠隔アトミックオペレーション（ＲＡＯ）命令を弱い順序付けでアトミックに実行するための方法であって、
最適化回路部が、入来ＲＡＯ命令を受け取る段階と、
前記最適化回路部が、各ＲＡＯ命令がオペコード、デスティネーション識別子、およびソースデータを含む、デスティネーションキャッシュラインによってグループ化された複数のエントリを有するＲＡＯ命令キューをスキャンし、前記入来ＲＡＯ命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するＲＡＯ命令を検出する段階とを備え、
前記最適化回路部はさらに、
エンキュー済みの合致するＲＡＯ命令が検出されないことに応答して、前記入来ＲＡＯ命令を前記ＲＡＯ命令キューにエンキューし、
エンキュー済みの合致するＲＡＯ命令が検出されたことに応答して、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインＲＡＯ命令の同じグループにエンキューすることにより、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令を空間的に組み合わせる、
方法。
【請求項１２】
前記最適化回路部が、オーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令を時間的に組み合わせる段階をさらに備える、請求項１１に記載の方法。
【請求項１３】
前記最適化回路部が、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令が完了するまで前記入来ＲＡＯ命令を遅延させ、続いて前記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う段階をさらに備える、請求項１１に記載の方法。
【請求項１４】
前記入来ＲＡＯ命令および前記エンキュー済みＲＡＯ命令は、各々が要素サイズ識別子をさらに含み、前記最適化回路部はさらに、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が同じデスティネーション識別子および同じオペコードを有するが異なる特定された要素サイズを有することから、部分的なオーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令が完了するまで前記入来ＲＡＯ命令を遅延させ、続いて前記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う、請求項１１に記載の方法。
【請求項１５】
前記最適化回路部が、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、未完信号をＴＲＵＥに設定した状態で前記合致するＲＡＯ命令を実行対象としてディスパッチし、続いて前記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う段階をさらに備える、請求項１１に記載の方法。
【請求項１６】
前記入来ＲＡＯ命令をエンキューするときに、満了タイムスタンプを、規則的にインクリメントするシステムカウンタよりも前の予め定められた時間量に初期化する段階をさらに備え、前記満了タイムスタンプは、前記入来ＲＡＯ命令と共に前記ＲＡＯ命令キューに保持され、前記満了タイムスタンプが前記システムカウンタよりも前である限り、前記入来ＲＡＯ命令を他の入来ＲＡＯ命令と組み合わせることを可能とする、
請求項１１に記載の方法。
【請求項１７】
スケジューリング回路部が、前記ＲＡＯ命令キューをスキャンして、満了タイムスタンプが前記システムカウンタを超過する１または複数のエンキュー済みＲＡＯ命令のうちからエンキュー済みＲＡＯ命令を選択する段階と、
前記スケジューリング回路部が、前記選択されたＲＡＯ命令を、前記方法における複数の実行回路のうちから選択される実行回路部による実行対象としてディスパッチする段階とをさらに備え、
前記スケジューリング回路部は、レイテンシ、スループット、電力、および性能のうち少なくとも１つを最適化するように選択される順序で、前記ＲＡＯ命令を他のエンキュー済みＲＡＯ命令に関してアウトオブオーダで選択する、
請求項１６に記載の方法。
【請求項１８】
キャッシュ制御回路が、前記ディスパッチされたＲＡＯ命令を受け取る段階であって、前記キャッシュ制御回路は、前記選択された実行回路部を含み、前記最適化回路部のインスタンスおよび前記ＲＡＯ命令キューのインスタンスを組み込む、段階と、
前記キャッシュ制御回路が、前記受け取ったＲＡＯ命令を自身の最適化回路部のインスタンスに提供する段階と、
最適化回路部の前記インスタンスが、空間的組み合わせの機会がある場合に、前記受け取ったＲＡＯ命令を既にエンキュー済みのＲＡＯ命令と組み合わせ、組み合わせの機会がない場合、前記受け取ったＲＡＯ命令を自身のＲＡＯ命令キューにエンキューする、段階と、
キャッシュ制御回路スケジューリング回路部が、自身のＲＡＯ命令キューのインスタンスをスキャンして、満了タイムスタンプが前記システムカウンタを超過する１または複数のエンキュー済みＲＡＯ命令のうちでＲＡＯ命令を選択する段階と、
前記デスティネーション識別子によりアドレス指定されるキャッシュライン全体をキャッシュから読み込み、前記デスティネーション識別子によりアドレス指定されるキャッシュライン要素に対して前記選択されたＲＡＯ命令を行い、前記キャッシュラインを前記キャッシュにライトバックし、確認を１または複数のリクエスト元の処理コアに送ることにより、前記選択されたＲＡＯ命令を実行する段階と
をさらに備える、
請求項１７に記載の方法。
【請求項１９】
遠隔アトミックオペレーション（ＲＡＯ）命令を弱い順序付けでアトミックに実行するための装置であって、
各エントリが、オペコード、デスティネーション識別子、およびソースデータを含む１または複数のＲＡＯ命令をエンキューする、デスティネーションキャッシュラインによってグループ化された複数のエントリを有するＲＡＯ命令キューと、
入来ＲＡＯ命令を受け取り、前記入来ＲＡＯ命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するＲＡＯ命令を検出するべく前記ＲＡＯ命令キューをスキャンするための最適化手段とを備え、
前記最適化手段はさらに、
エンキュー済みの合致するＲＡＯ命令が検出されないことに応答して、前記入来ＲＡＯ命令を前記ＲＡＯ命令キューにエンキューし、
エンキュー済みの合致するＲＡＯ命令が検出されたことに応答して、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインＲＡＯ命令の同じグループにエンキューすることにより、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令を空間的に組み合わせる、
装置。
【請求項２０】
前記最適化手段はさらに、オーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令を時間的に組み合わせる、請求項１９に記載の装置。
【請求項２１】
前記最適化手段はさらに、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令が完了するまで前記入来ＲＡＯ命令を遅延させ、続いて前記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う、請求項１９または２０に記載の装置。
【請求項２２】
前記入来ＲＡＯ命令および前記エンキュー済みＲＡＯ命令は、各々が要素サイズ識別子をさらに含み、前記最適化手段はさらに、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が同じデスティネーション識別子および同じオペコードを有するが異なる特定された要素サイズを有することから、部分的なオーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令が完了するまで前記入来ＲＡＯ命令を遅延させ、続いて前記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行う、請求項１９または２０に記載の装置。
【請求項２３】
コンピュータプログラムであって、プロセッサによって実行されると、前記プロセッサに、
最適化回路部が、入来ＲＡＯ命令を受け取ることと、
前記最適化回路部が、各ＲＡＯ命令がオペコード、デスティネーション識別子、およびソースデータを含む、デスティネーションキャッシュラインによってグループ化された複数のエントリを有するＲＡＯ命令キューをスキャンし、前記入来ＲＡＯ命令と同じデスティネーションキャッシュラインを特定するエンキュー済みの合致するＲＡＯ命令を検出することであって、
前記最適化回路部はさらに、
エンキュー済みの合致するＲＡＯ命令が検出されないことに応答して、前記入来ＲＡＯ命令を前記ＲＡＯ命令キューにエンキューし、
エンキュー済みの合致するＲＡＯ命令が検出されたことに応答して、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が、オーバーラップしないキャッシュライン要素に対して同じオペコードを有するか否かを判定し、有する場合に、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令の両方を、異なるキャッシュラインオフセットにおけるデスティネーションキャッシュラインＲＡＯ命令の同じグループにエンキューすることにより、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令を空間的に組み合わせる、ことと
によって、遠隔アトミックオペレーション（ＲＡＯ）命令を弱い順序付けでアトミックに実行させる、コンピュータプログラム。
【請求項２４】
前記コンピュータプログラムはさらに、前記最適化回路部が、オーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令を、実行されると両方の命令を逐次的に実行した場合と同じ結果を生成する新たな命令で置き換えることにより、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令を時間的に組み合わせることによって、前記プロセッサに前記ＲＡＯ命令をさらに実行させる、請求項２３に記載のコンピュータプログラム。
【請求項２５】
前記コンピュータプログラムはさらに、前記最適化回路部が、前記入来ＲＡＯ命令および前記合致するＲＡＯ命令が同じデスティネーション識別子を有するが異なるオペコードを有することから、部分的なオーバーラップが存在すると判定したことに応答して、前記合致するＲＡＯ命令が完了するまで前記入来ＲＡＯ命令を遅延させ、続いて前記入来ＲＡＯ命令を実行対象としてディスパッチすることにより、特別な処理を行うことによって、前記プロセッサに前記ＲＡＯ命令をさらに実行させる、請求項２３または２４に記載のコンピュータプログラム。
【請求項２６】
請求項２３から２５のいずれか一項に記載のコンピュータプログラムを格納する、コンピュータ可読記録媒体。
【外国語明細書】
2019121351000001.pdf