(57)【要約】  例において、メモリ要求を仲裁する方法は、メモリ要求の第１のバッチがスレッドの第１のグループから生じることを識別する第１のメタデータで、メモリ要求の第１のバッチをタグ付けすることを含んでいてもよい。方法は、メモリ要求の第２のバッチがスレッドの第１のグループから生じることを識別する第２のメタデータで、メモリ要求の第２のバッチをタグ付けすることを含んでいてもよい。方法は、メモリ要求の第１および第２のバッチを競合仲裁キュー中に記憶させることを含んでいてもよい。方法は、第１のメタデータと第２のメタデータとを使用して、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行することを含んでいてもよく、これは、そこに記憶されているスレッドの第１のグループとは異なるスレッドのグループから生じる、記憶されているメモリ要求の少なくとも１つの他のバッチを含んでいてもよい。【選択図】図１２
2019525324.tif 000002
【特許請求の範囲】
【請求項１】
方法において、
処理ユニットによって、メモリ要求のバッチを発生させることと、
前記処理ユニットによって、前記メモリ要求のバッチのうちの前記メモリ要求の第１のバッチを第１のメタデータでタグ付けすることと、
前記処理ユニットによって、前記メモリ要求のバッチのうちの前記メモリ要求の第２のバッチを第２のメタデータでタグ付けすることと、
前記メモリ要求の第１のバッチの任意のメモリ要求を第１のメモリまたはメモリ制御装置に送る前に、前記メモリ要求の第１のバッチと前記第１のメタデータとを競合仲裁キュー中に記憶させることと、
前記メモリ要求の第２のバッチの任意のメモリ要求を前記第１のメモリまたは前記メモリ制御装置に送る前に、前記メモリ要求の第２のバッチと前記第２のメタデータとを前記競合仲裁キュー中に記憶させることと、
前記第１のメタデータと前記第２のメタデータとを使用して、前記競合仲裁キュー中に記憶されている前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間だけで競合仲裁を実行することとを含み、
前記メモリ要求の各バッチは、スレッドのそれぞれのグループの実行からそれぞれ生じ、
前記第１のメタデータは、前記メモリ要求の第１のバッチが生じるスレッドのグループを識別するデータを含み、前記メモリ要求の第１のバッチが生じる前記スレッドのグループは、スレッドの第１のグループであり、
前記第２のメタデータは、前記メモリ要求の第２のバッチが生じるスレッドのグループを識別するデータを含み、前記メモリ要求の第２のバッチが生じる前記スレッドのグループは、前記スレッドの第１のグループであり、
前記競合仲裁キュー中に記憶されている前記メモリ要求の少なくとも１つの他のバッチは、前記スレッドの第１のグループとは異なるスレッドの少なくとも１つのグループから生じる方法。
【請求項２】
前記競合仲裁キュー中に記憶されている前記メモリ要求の少なくとも１つの他のバッチは、前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間に記憶されている請求項１記載の方法。
【請求項３】
前記競合仲裁キュー中に記憶されている前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間だけで競合仲裁を実行することは、
前記第１のメタデータを使用して、前記メモリ要求の第１のバッチが前記スレッドの第１のグループから生じていることを決定することと、
前記第２のメタデータを使用して、前記メモリ要求の第２のバッチが前記スレッドの第１のグループから生じていることを決定することとを含む請求項１記載の方法。
【請求項４】
前記メモリ要求の第１のバッチが生じる前記スレッドのグループを識別するデータは、第１のスレッドグループ識別子であり、前記メモリ要求の第２のバッチが生じる前記スレッドのグループを識別するデータは、前記第１のスレッドグループ識別子である請求項１記載の方法。
【請求項５】
前記処理ユニットによって、前記メモリ要求のバッチのうちの前記メモリ要求の第３のバッチを第３のメタデータでタグ付けすることと、
前記処理ユニットによって、前記メモリ要求のバッチのうちの前記メモリ要求の第４のバッチを第４のメタデータでタグ付けすることと、
前記メモリ要求の第３のバッチの任意のメモリ要求を前記第１のメモリまたは前記メモリ制御装置に送る前に、前記メモリ要求の第３のバッチと前記第３のメタデータとを前記競合仲裁キュー中に記憶させることと、
前記メモリ要求の第４のバッチの任意のメモリ要求を前記第１のメモリまたは前記メモリ制御装置に送る前に、前記メモリ要求の第４のバッチと前記第４のメタデータとを前記競合仲裁キュー中に記憶させることと、
前記第３のメタデータと前記第４のメタデータとのうちの少なくとも１つを使用して、前記競合仲裁キュー中に記憶されている前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間だけで競合仲裁を実行することとをさらに含み、
前記第３のメタデータは、前記メモリ要求の第３のバッチが生じるスレッドのグループを識別するデータを含み、前記メモリ要求の第３のバッチが生じる前記スレッドのグループは、スレッドの第２のグループであり、
前記第４のメタデータは、前記メモリ要求の第４のバッチが生じるスレッドのグループを識別するデータを含み、前記メモリ要求の第４のバッチが生じる前記スレッドのグループは、前記スレッドの第２のグループである請求項１記載の方法。
【請求項６】
前記競合仲裁キュー中に記憶されている前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間だけで競合仲裁を実行することは、
前記第１のメタデータを使用して、前記メモリ要求の第１のバッチが前記スレッドの第１のグループから生じていることを決定することと、
前記第２のメタデータを使用して、前記メモリ要求の第２のバッチが前記スレッドの第１のグループから生じていることを決定することと、および、
前記第３のメタデータを使用して、前記メモリ要求の第３のバッチが前記スレッドの第１のグループから生じていないことを決定すること、または、
前記第４のメタデータを使用して、前記メモリ要求の第４のバッチが前記スレッドの第１のグループから生じていないことを決定すること、のうちの少なくとも１つを実行することとを含む請求項５記載の方法。
【請求項７】
前記メモリ要求の第３のバッチが前記スレッドの第１のグループから生じていないことを決定することは、前記メモリ要求の第３のバッチが前記スレッドの第２のグループから生じていることを決定することを含み、または、
前記メモリ要求の第４のバッチが前記スレッドの第１のグループから生じていないことを決定することは、前記メモリ要求の第４のバッチが前記スレッドの第２のグループから生じていることを決定することを含む請求項６記載の方法。
【請求項８】
前記メモリ要求の第１のバッチが生じる前記スレッドのグループを識別するデータは、第１のスレッドグループ識別子であり、前記メモリ要求の第２のバッチが生じる前記スレッドのグループを識別するデータは、前記第１のスレッドグループ識別子であり、前記メモリ要求の第３のバッチが生じる前記スレッドのグループを識別するデータは、第２のスレッドグループ識別子であり、前記メモリ要求の第４のバッチが生じる前記スレッドのグループを識別するデータは、前記第２のスレッドグループ識別子である請求項５記載の方法。
【請求項９】
前記競合仲裁キュー中に記憶されている前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間だけで競合仲裁を実行することと並行して、前記競合仲裁キュー中に記憶されている前記メモリ要求の第３のバッチと前記メモリ要求の第４のバッチとの間だけで競合仲裁を実行することをさらに含む請求項５記載の方法。
【請求項１０】
前記競合仲裁キュー中に記憶されている前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間だけで競合仲裁を実行することは、
前記処理ユニットによって解消される、前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間の競合があるか否かを決定することを含む請求項３記載の方法。
【請求項１１】
前記競合は、実際のまたは潜在的な競合である請求項１０記載の方法。
【請求項１２】
前記競合仲裁キュー中に記憶されている前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間だけで競合仲裁を実行することは、
前記処理ユニットによって解消される、前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間の競合がないことを決定すると、前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとを、前記競合仲裁キューから前記第１のメモリまたは前記メモリ制御装置に送ることを含む請求項１０記載の方法。
【請求項１３】
前記競合仲裁キュー中に記憶されている前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間だけで競合仲裁を実行することは、
前記処理ユニットによって解消される、前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間の競合がないことを決定すると、前記メモリ要求の第１のバッチのすべてのメモリ要求に対する処理が完了するまで、前記メモリ要求の第２のバッチを、前記競合仲裁キューから前記第１のメモリまたは前記メモリ制御装置に送ることをストールしないことを含む請求項１０記載の方法。
【請求項１４】
前記競合仲裁キュー中に記憶されている前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間だけで競合仲裁を実行する前に、間に、または、後に、前記メモリ要求の第１のバッチの１つ以上のメモリ要求を、前記競合仲裁キューから前記第１のメモリまたは前記メモリ制御装置に送ることをさらに含む請求項１０記載の方法。
【請求項１５】
前記競合仲裁キュー中に記憶されている前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間だけで競合仲裁を実行することは、
前記処理ユニットによって解消される、前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間の競合があることを決定すると、前記メモリ要求の第１のバッチのすべてのメモリ要求に対する処理が完了するまで、前記メモリ要求の第２のバッチを、前記競合仲裁キューから前記第１のメモリまたは前記メモリ制御装置に送ることをストールすること含む請求項１０記載の方法。
【請求項１６】
前記競合仲裁キュー中に記憶されている前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間だけで競合仲裁を実行する前に、間に、または、後に、前記メモリ要求の第１のバッチの１つ以上のメモリ要求を、前記競合仲裁キューから前記第１のメモリまたは前記メモリ制御装置に送ることをさらに含む請求項１５記載の方法。
【請求項１７】
前記メモリ要求の第１のバッチのバッチタイプが読み取られ、前記メモリ要求の第２のバッチのバッチタイプが読み取られるとき、前記処理ユニットによって解消される、前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間の競合があることを決定することをさらに含み、
前記メモリ要求の第２のバッチは、前記メモリ要求の第１のバッチの後、前記競合仲裁キュー中に位置付けられる請求項１０記載の方法。
【請求項１８】
前記スレッドの第１のグループから生じる前記メモリ要求の第２のバッチを送ることをストールした後、かつ、前記スレッドの第１のグループから生じる前記メモリ要求の第２のバッチを前記第１のメモリまたは前記メモリ制御装置に送る前に、前記スレッドの第２のグループから生じる前記メモリ要求の第３のバッチを前記第１のメモリまたは前記メモリ制御装置に送ることをさらに含む請求項１７記載の方法。
【請求項１９】
前記処理ユニットによって、前記メモリ要求のバッチのうちの前記メモリ要求の第３のバッチを第３のメタデータでタグ付けすることと、
前記メモリ要求の第３のバッチの任意のメモリ要求を前記第１のメモリまたは前記メモリ制御装置に送る前に、前記メモリ要求の第３のバッチと前記第３のメタデータとを前記競合仲裁キュー中に記憶させることと、
前記第２のメタデータと前記第３のメタデータとを使用して、前記競合仲裁キュー中に記憶されている前記メモリ要求の第２のバッチと前記メモリ要求の第３のバッチとの間だけで競合仲裁を実行することとをさらに含み、
前記第３のメタデータは、前記メモリ要求の第３のバッチが生じるスレッドのグループを識別するデータを含み、前記メモリ要求の第３のバッチが生じる前記スレッドのグループは、前記スレッドの第１のグループである請求項１記載の方法。
【請求項２０】
前記競合仲裁キュー中に記憶されている前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間だけで競合仲裁を実行した後、前記競合仲裁キュー中に記憶されている前記メモリ要求の第２のバッチと前記メモリ要求の第３のバッチとの間だけで競合仲裁を実行することをさらに含む請求項１９記載の方法。
【請求項２１】
前記競合仲裁キュー中に記憶されている前記メモリ要求の第２のバッチと前記メモリ要求の第３のバッチとの間だけで競合仲裁を実行することは、
前記第２のメタデータを使用して、前記メモリ要求の第１のバッチが前記スレッドの第１のグループから生じていることを決定することと、
前記第３のメタデータを使用して、前記メモリ要求の第２のバッチが前記スレッドの第１のグループから生じていることを決定することとを含み、
前記第１、第２、および、第３のメタデータは、第１のスレッドグループ識別子を含み、
前記メモリ要求の第１のバッチが生じる前記スレッドのグループを識別するデータは、前記第１のスレッドグループ識別子であり、前記メモリ要求の第２のバッチが生じる前記スレッドのグループを識別するデータは、前記第１のスレッドグループ識別子であり、前記メモリ要求の第３のバッチが生じる前記スレッドのグループを識別するデータは、前記第１のスレッドグループ識別子である請求項１９記載の方法。
【請求項２２】
前記競合仲裁キュー中に記憶されている前記メモリ要求の第２のバッチと前記メモリ要求の第３のバッチとの間だけで競合仲裁を実行することは、
前記処理ユニットによって解消される、前記メモリ要求の第２のバッチと前記メモリ要求の第３のバッチとの間の競合があるか否かを決定することを含む請求項２１記載の方法。
【請求項２３】
前記処理ユニットは、ＧＰＵである請求項１記載の方法。
【請求項２４】
デバイスにおいて、
第１のメモリと、
前記第１のメモリに通信可能に結合されているメモリ制御装置と、
前記第１のメモリまたは前記メモリ制御装置のうちの少なくとも１つに通信可能に結合されている処理ユニットとを具備し、
前記処理ユニットは、
メモリ要求のバッチを発生させ、
前記メモリ要求のバッチのうちの前記メモリ要求の第１のバッチを第１のメタデータでタグ付けし、
前記メモリ要求のバッチのうちの前記メモリ要求の第２のバッチを第２のメタデータでタグ付けし、
前記メモリ要求の第１のバッチの任意のメモリ要求を前記第１のメモリまたは前記メモリ制御装置に送る前に、前記メモリ要求の第１のバッチと前記第１のメタデータとを競合仲裁キュー中に記憶させ、
前記メモリ要求の第２のバッチの任意のメモリ要求を前記第１のメモリまたは前記メモリ制御装置に送る前に、前記メモリ要求の第２のバッチと前記第２のメタデータとを前記競合仲裁キュー中に記憶させ、
前記第１のメタデータと前記第２のメタデータとを使用して、前記競合仲裁キュー中に記憶されている前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間だけで競合仲裁を実行するように構成され、
前記メモリ要求の各バッチは、スレッドのそれぞれのグループの実行からそれぞれ生じ、
前記第１のメタデータは、前記メモリ要求の第１のバッチが生じるスレッドのグループを識別するデータを含み、前記メモリ要求の第１のバッチが生じる前記スレッドのグループは、スレッドの第１のグループであり、
前記第２のメタデータは、前記メモリ要求の第２のバッチが生じるスレッドのグループを識別するデータを含み、前記メモリ要求の第２のバッチが生じる前記スレッドのグループは、前記スレッドの第１のグループであり、
前記競合仲裁キュー中に記憶されている前記メモリ要求の少なくとも１つの他のバッチは、前記スレッドの第１のグループとは異なるスレッドの少なくとも１つのグループから生じるデバイス。
【請求項２５】
前記競合仲裁キューは、第２のメモリ中に割り振られている請求項２４記載のデバイス。
【請求項２６】
前記第２のメモリは、前記処理ユニットの内部にある、または、前記処理ユニットの外部にある請求項２５記載のデバイス。
【請求項２７】
装置において、
メモリ要求のバッチを発生させる手段と、
前記メモリ要求のバッチのうちの前記メモリ要求の第１のバッチを第１のメタデータでタグ付けする手段と、
前記メモリ要求のバッチのうちの前記メモリ要求の第２のバッチを第２のメタデータでタグ付けする手段と、
前記メモリ要求の第１のバッチの任意のメモリ要求を第１のメモリまたはメモリ制御装置に送る前に、前記メモリ要求の第１のバッチと前記第１のメタデータとを競合仲裁キュー中に記憶させる手段と、
前記メモリ要求の第２のバッチの任意のメモリ要求を前記第１のメモリまたは前記メモリ制御装置に送る前に、前記メモリ要求の第２のバッチと前記第２のメタデータとを前記競合仲裁キュー中に記憶させる手段と、
前記第１のメタデータと前記第２のメタデータとを使用して、前記競合仲裁キュー中に記憶されている前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間だけで競合仲裁を実行する手段とを具備し、
前記メモリ要求の各バッチは、スレッドのそれぞれのグループの実行からそれぞれ生じ、
前記第１のメタデータは、前記メモリ要求の第１のバッチが生じるスレッドのグループを識別するデータを含み、前記メモリ要求の第１のバッチが生じる前記スレッドのグループは、スレッドの第１のグループであり、
前記第２のメタデータは、前記メモリ要求の第２のバッチが生じるスレッドのグループを識別するデータを含み、前記メモリ要求の第２のバッチが生じる前記スレッドのグループは、前記スレッドの第１のグループであり、
前記競合仲裁キュー中に記憶されている前記メモリ要求の少なくとも１つの他のバッチは、前記スレッドの第１のグループとは異なるスレッドの少なくとも１つのグループから生じる装置。
【請求項２８】
前記競合仲裁キュー中に記憶されている前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間だけで競合仲裁を実行する手段は、
前記第１のメタデータを使用して、前記メモリ要求の第１のバッチが前記スレッドの第１のグループから生じていることを決定する手段と、
前記第２のメタデータを使用して、前記メモリ要求の第２のバッチが前記スレッドの第１のグループから生じていることを決定する手段とを備える請求項２７記載の装置。
【請求項２９】
前記競合仲裁キュー中に記憶されている前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間だけで競合仲裁を実行する手段は、
前記競合仲裁を実行する手段によって解消される、前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間の競合があるか否かを決定する手段を備える請求項２８記載の装置。
【請求項３０】
命令を記憶しているコンピュータ読取可能記憶媒体において、
前記命令は、実行されるとき、１つ以上の処理ユニットに、
メモリ要求のバッチを発生させ、
前記メモリ要求のバッチのうちの前記メモリ要求の第１のバッチを第１のメタデータでタグ付けさせ、
前記メモリ要求のバッチのうちの前記メモリ要求の第２のバッチを第２のメタデータでタグ付けさせ、
前記メモリ要求の第１のバッチの任意のメモリ要求を第１のメモリまたはメモリ制御装置に送る前に、前記メモリ要求の第１のバッチと前記第１のメタデータとを競合仲裁キュー中に記憶させ、
前記メモリ要求の第２のバッチの任意のメモリ要求を前記第１のメモリまたは前記メモリ制御装置に送る前に、前記メモリ要求の第２のバッチと前記第２のメタデータとを前記競合仲裁キュー中に記憶させ、
前記第１のメタデータと前記第２のメタデータとを使用して、前記競合仲裁キュー中に記憶されている前記メモリ要求の第１のバッチと前記メモリ要求の第２のバッチとの間だけで競合仲裁を実行させ、
前記メモリ要求の各バッチは、スレッドのそれぞれのグループの実行からそれぞれ生じ、
前記第１のメタデータは、前記メモリ要求の第１のバッチが生じるスレッドのグループを識別するデータを含み、前記メモリ要求の第１のバッチが生じる前記スレッドのグループは、スレッドの第１のグループであり、
前記第２のメタデータは、前記メモリ要求の第２のバッチが生じるスレッドのグループを識別するデータを含み、前記メモリ要求の第２のバッチが生じる前記スレッドのグループは、前記スレッドの第１のグループであり、
前記競合仲裁キュー中に記憶されている前記メモリ要求の少なくとも１つの他のバッチは、前記スレッドの第１のグループとは異なる
スレッドの少なくとも１つのグループから生じるコンピュータ読取可能記憶媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
［０００１］
本開示は、メモリ要求を仲裁することに関連する。
【背景】
【０００２】
［０００２］
ＣＰＵおよびＧＰＵのような処理ユニットは、並行してスレッドのグループを処理するように構成されていてもよい。スレッドの各グループ中の１つ以上のスレッドは、処理ユニットによって実行されると、読み取り要求または書き込み要求のような、メモリ要求を発生させる。メモリ要求は、メモリ要求のバッチにグループ化されてもよい。
【概要】
【０００３】
［０００３］
一般的に、本開示は、メモリ要求を仲裁するための技術を説明する。
【０００４】
［０００４］
１つの例において、本開示は、方法を説明し、方法は、処理ユニットによって、メモリ要求のバッチを発生させることと、処理ユニットによって、メモリ要求のバッチのうちのメモリ要求の第１のバッチを第１のメタデータでタグ付けすることと、処理ユニットによって、メモリ要求のバッチのうちのメモリ要求の第２のバッチを第２のメタデータでタグ付けすることと、メモリ要求の第１のバッチの任意のメモリ要求を第１のメモリまたはメモリ制御装置に送る前に、メモリ要求の第１のバッチと第１のメタデータとを競合仲裁キュー中に記憶させることと、メモリ要求の第２のバッチの任意のメモリ要求を第１のメモリまたはメモリ制御装置に送る前に、メモリ要求の第２のバッチと第２のメタデータとを競合仲裁キュー中に記憶させることと、第１のメタデータと第２のメタデータとを使用して、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行することとを含み、メモリ要求の各バッチは、スレッドのそれぞれのグループの実行からそれぞれ生じ、第１のメタデータは、メモリ要求の第１のバッチが生じるスレッドのグループを識別するデータを含み、メモリ要求の第１のバッチが生じるスレッドのグループは、スレッドの第１のグループであり、第２のメタデータは、メモリ要求の第２のバッチが生じるスレッドのグループを識別するデータを含み、メモリ要求の第２のバッチが生じるスレッドのグループは、スレッドの第１のグループであり、競合仲裁キュー中に記憶されているメモリ要求の少なくとも１つの他のバッチは、スレッドの第１のグループとは異なるスレッドの少なくとも１つのグループから生じる。
【０００５】
［０００５］
別の例では、本開示は、第１のメモリと、第１のメモリに通信可能に結合されているメモリ制御装置と、第１のメモリまたはメモリ制御装置のうちの少なくとも１つに通信可能に結合されている処理ユニットとを具備するデバイスを説明し、処理ユニットは、メモリ要求のバッチを発生させ、メモリ要求のバッチのうちのメモリ要求の第１のバッチを第１のメタデータでタグ付けし、メモリ要求のバッチのうちのメモリ要求の第２のバッチを第２のメタデータでタグ付けし、メモリ要求の第１のバッチの任意のメモリ要求を第１のメモリまたはメモリ制御装置に送る前に、メモリ要求の第１のバッチと第１のメタデータとを競合仲裁キュー中に記憶させ、メモリ要求の第２のバッチの任意のメモリ要求を第１のメモリまたはメモリ制御装置に送る前に、メモリ要求の第２のバッチと第２のメタデータとを競合仲裁キュー中に記憶させ、第１のメタデータと第２のメタデータとを使用して、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行するように構成され、メモリ要求の各バッチは、スレッドのそれぞれのグループの実行からそれぞれ生じ、第１のメタデータは、メモリ要求の第１のバッチが生じるスレッドのグループを識別するデータを含み、メモリ要求の第１のバッチが生じるスレッドのグループは、スレッドの第１のグループであり、第２のメタデータは、メモリ要求の第２のバッチが生じるスレッドのグループを識別するデータを含み、メモリ要求の第２のバッチが生じるスレッドのグループは、スレッドの第１のグループであり、競合仲裁キュー中に記憶されているメモリ要求の少なくとも１つの他のバッチは、スレッドの第１のグループとは異なるスレッドの少なくとも１つのグループから生じる。
【０００６】
［０００６］
別の例において、本開示は装置を説明し、装置は、メモリ要求のバッチを発生させる手段と、メモリ要求のバッチのうちのメモリ要求の第１のバッチを第１のメタデータでタグ付けする手段と、メモリ要求のバッチのうちのメモリ要求の第２のバッチを第２のメタデータでタグ付けする手段と、メモリ要求の第１のバッチの任意のメモリ要求を第１のメモリまたはメモリ制御装置に送る前に、メモリ要求の第１のバッチと第１のメタデータとを競合仲裁キュー中に記憶させる手段と、メモリ要求の第２のバッチの任意のメモリ要求を第１のメモリまたはメモリ制御装置に送る前に、メモリ要求の第２のバッチと第２のメタデータとを競合仲裁キュー中に記憶させる手段と、第１のメタデータと第２のメタデータとを使用して、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行する手段とを具備し、メモリ要求の各バッチは、スレッドのそれぞれのグループの実行からそれぞれ生じ、第１のメタデータは、メモリ要求の第１のバッチが生じるスレッドのグループを識別するデータを含み、メモリ要求の第１のバッチが生じるスレッドのグループは、スレッドの第１のグループであり、第２のメタデータは、メモリ要求の第２のバッチが生じるスレッドのグループを識別するデータを含み、メモリ要求の第２のバッチが生じるスレッドのグループは、スレッドの第１のグループであり、競合仲裁キュー中に記憶されているメモリ要求の少なくとも１つの他のバッチは、スレッドの第１のグループとは異なるスレッドの少なくとも１つのグループから生じる。
【０００７】
［０００７］
別の例では、本開示は、命令を記憶している非一時的コンピュータ読取可能記憶媒体を説明し、命令は、実行されるとき、１つ以上の処理ユニットに、メモリ要求のバッチを発生させ、メモリ要求のバッチのうちのメモリ要求の第１のバッチを第１のメタデータでタグ付けさせ、メモリ要求のバッチのうちのメモリ要求の第２のバッチを第２のメタデータでタグ付けさせ、メモリ要求の第１のバッチの任意のメモリ要求を第１のメモリまたはメモリ制御装置に送る前に、メモリ要求の第１のバッチと第１のメタデータとを競合仲裁キュー中に記憶させ、メモリ要求の第２のバッチの任意のメモリ要求を第１のメモリまたはメモリ制御装置に送る前に、メモリ要求の第２のバッチと第２のメタデータとを競合仲裁キュー中に記憶させ、第１のメタデータと第２のメタデータとを使用して、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行させ、メモリ要求の各バッチは、スレッドのそれぞれのグループの実行からそれぞれ生じ、第１のメタデータは、メモリ要求の第１のバッチが生じるスレッドのグループを識別するデータを含み、メモリ要求の第１のバッチが生じるスレッドのグループは、スレッドの第１のグループであり、第２のメタデータは、メモリ要求の第２のバッチが生じるスレッドのグループを識別するデータを含み、メモリ要求の第２のバッチが生じるスレッドのグループは、スレッドの第１のグループであり、競合仲裁キュー中に記憶されているメモリ要求の少なくとも１つの他のバッチは、スレッドの第１のグループとは異なるスレッドの少なくとも１つのグループから生じる。
【０００８】
［０００８］
本開示の１つ以上の例の詳細を、添付の図面および以下の説明において述べる。本発明の、他の特徴、目的、および、利点は、説明、図面、および、特許請求の範囲から明らかになるだろう。
【図面の簡単な説明】
【０００９】
【図１】［０００９］  図１は、本開示の技術を実現するように構成されているかもしれない、コンピューティングデバイスを図示しているブロックダイヤグラムである。
【図２】［００１０］  図２は、本開示の技術を実現するように構成されているかもしれない、図１中に示されている１つ以上の処理ユニットをより詳細に図示している。
【図３】［００１１］  図３は、メモリ要求のバッチの１つの例を図示している。
【図４】［００１２］  図４は、メモリ要求のバッチをメタデータでタグ付けする例を図示している。
【図５】［００１３］  図５は、メモリ要求のバッチをメタデータでタグ付けする例を図示している。
【図６】［００１４］  図６は、メモリ要求のバッチの各メモリ要求をメタデータでタグ付けする例を図示している。
【図７】［００１５］  図７は、競合仲裁キューの例を図示している。
【図８】［００１６］  図８は、競合仲裁キューの例を図示している。
【図９】［００１７］  図９は、競合仲裁を実行する例を図示している。
【図１０】［００１８］  図１０は、競合仲裁を実行する例を図示している。
【図１１Ａ】［００１９］  図１１Ａは、競合仲裁を実行する例を図示している。
【図１１Ｂ】図１１Ｂは、競合仲裁を実行する例を図示している。
【図１１Ｃ】図１１Ｃは、競合仲裁を実行する例を図示している。
【図１１Ｄ】図１１Ｄは、競合仲裁を実行する例を図示している。
【図１１Ｅ】図１１Ｅは、競合仲裁を実行する例を図示している。
【図１２】［００２０］  図１２は、本開示の１つ以上の技術にしたがう例示的な方法を図示している。
【詳細な説明】
【００１０】
［００２１］
一般的に、本開示は、メモリ要求を仲裁するための１つ以上の技術を説明する。ここで説明する１つ以上の技術は、（例えば、実際のまたは潜在的な）競合があるとき、メモリ要求再順序付けを抑制してもよく、このようなことから、メモリ要求再順序付けを実行することが確実に安全である（例えば、競合がない）かもしれない。競合がないことへの参照は、絶対に競合がないことを意味しないかもしれないことが理解される。むしろ、競合がないことは、ここで説明するメモリ要求を仲裁するための技術を実行するように構成されている処理ユニットによって解消される競合がないことを意味するかもしれない。２つのバッチ間の既知の競合は、処理のチェーン中のメモリサブシステム（例えば、メモリ制御装置）によって解消できることから、例えば、ここで説明するメモリ要求を仲裁するための技術を実行する処理ユニットは、メモリ要求のバッチ間に競合がないことを決定してもよい。ここで説明する１つ以上の技術は、メモリ要求実行並列処理およびメモリ待ち時間隠しを増加させ、それにより、性能向上をもたらす。例えば、ここで説明する１つ以上の技術は、ＡＰＩ（例えば、ＧＰＵ  ＡＰＩ）にしたがって、グループ間（例えば、ウェーブ間）とスレッド間に依存がないことを活用することにより、より多くのメモリ要求がメモリまたはメモリ制御装置に移行することを可能にする。ここで使用されるように、メモリ要求「移行」は、いくつかの例では、メモリおよび／またはメモリ制御装置に現在移動しているメモリ要求、メモリおよび／またはメモリ制御装置によって受け取られるメモリ要求、メモリおよび／またはメモリ制御装置によってサービス提供されるメモリ要求、メモリおよび／またはメモリ制御装置によってサービス提供するためにキューされているメモリ要求、あるいは、これらの任意の組み合わせを指す。
【００１１】
［００２２］
ここで説明する１つ以上の技術は、ハザードチェックウィンドウ中のすべてのメモリ要求に渡る競合をチェックする必要性を取り除くことによって、メモリに対応する競合チェックハードウェアを簡略化またはなくすことができる。代わりに、ここで説明する１つ以上の技術は、同じスレッドグループ（例えば、ウェーブ）から生じるメモリ要求間だけでの競合をチェックすることにより、グループ間（例えば、ウェーブ間）とスレッド間に依存がないことを活用してもよい。例えば、不要な競合チェックを除去することにより、ここで説明する技術は、移行中の数百から数千のメモリ要求を有するＧＰＵにおける競合仲裁（例えば、ハザードチェック）に対してスケーラブルである。
【００１２】
［００２３］
いくつかの例では、ここで使用されるように、用語「スレッド」は、単一の動作または命令を指してもよい。動作または命令は、固定またはプログラム可能であってもよい。他の例では、ここで使用されるように、用語「スレッド」は、複数の動作または命令を指してもよい。例えば、用語「スレッド」は、動作または命令のシーケンスを指してもよい。動作または命令のシーケンスは、固定またはプログラム可能であってもよい。したがって、いくつかの例では、処理ユニット１の異なる部分から生じる異なるスレッドタイプ（例えば、固定またはプログラム可能）があってもよく、および、このようなことから、処理ユニット１は、異なるスレッドタイプ（例えば、固定またはプログラム可能のスレッドタイプ）からメモリ要求を発生させることがあることが理解される。
【００１３】
［００２４］
図１は、本開示の１つ以上の技術を実現するように構成されているかもしれない、例示的な処理ユニットを図示しているブロックダイヤグラムである。図１中に示すように、処理ユニット１は、内部メモリ３Ａを含んでいてもよい。内部メモリ３Ａへのアクセスは、メモリ制御装置３Ｂによって制御されてもよい。メモリ制御装置３Ｂは、ダイレクトメモリアクセス（ＤＭＡ）制御装置、または、他の何らかのメモリ制御装置のような、任意のメモリ制御装置であってもよい。描写されている外部メモリ５Ａのような、処理ユニット１に対して外部のメモリは、処理ユニット１によってアクセス可能であってもよい。いくつかの例において、外部メモリ５Ａは、システムメモリであってもよい。外部メモリ５Ａへのアクセスは、メモリ制御装置５Ｂによって制御されてもよい。メモリ制御装置５Ｂは、ダイレクトメモリアクセス（ＤＭＡ）制御装置のような、任意のメモリ制御装置であってもよい。メモリ制御装置（例えば、メモリ制御装置３Ｂおよび／またはメモリ制御装置５Ｂ）は、メモリ制御装置が他のメモリ要求にサービス提供している間に、受け取ったメモリ要求を一時的に記憶する１つ以上のメモリ要求バッファを含んでいてもよい。メモリ制御装置は、メモリ制御装置が関係付けられているメモリにメモリ要求がアクセスする順序を仲裁するように構成されていてもよい。図１に関して説明した例は、図１の例において図示しているコンポーネントに加えて、他のコンポーネントを含んでいてもよい。
【００１４】
［００２５］
処理ユニット１は、メモリ要求（例えば、読み取りメモリ要求、書き込みメモリ要求、および、他の何らかのタイプのメモリ要求）を発生させるように構成されていてもよい。処理ユニット１は、ここではアービター４とも呼ばれることがあるメモリ要求アービター４を含んでいてもよい。アービター４は、処理ユニット１の以下の要素：プロセッサ（例えば、１つ以上のマイクロプロセッサ）、１つ以上の特定用途向け集積回路（ＡＳＩＣ）、１つ以上のフィールドプログラム可能ゲートアレイ（ＦＰＧＡ）、１つ以上の算術論理ユニット（ＡＬＵ）、１つ以上のデジタル信号プロセッサ（ＤＳＰ）、ディスクリート論理、ソフトウェア、ハードウェア、ファームウェア、あるいは、他の均等な集積またはディスクリート論理回路、のうちの１つ以上であってもよく、または、これらのうちの１つ以上を含んでいてもよい。例えば、処理ユニット１は、アービター４の機能性を提供することから、アービター４への参照は、処理ユニット１への参照を含んでいてもよいことが理解される。１つの例として、メモリ要求を保持するために、競合仲裁キューと呼ばれることがあるキューを含むように、アービター４を以下に説明する。しかしながら、アービター４への参照が処理ユニット１への参照を含んでいてもよいことを理解すると、したがって、アービターに関するこの説明は、より高いレベルにおいて処理ユニット１に適用されてもよいことが理解され、よってこの説明は、処理ユニット１が、メモリ要求を保持するために、競合仲裁キューと呼ばれることがあるキューを含んでいてもよいことも意味するように解釈されてもよい。
【００１５】
［００２６］
アービター４は、メモリ要求を保持するために、競合仲裁キューと呼ばれることがあるキューを含んでいてもよい。アービター４への参照は、処理ユニット１への参照を含んでいてもよいという理解をすることにより、したがって、この説明は、処理ユニット１が、メモリ要求を保持するために、競合仲裁キューと呼ばれることがあるキューを含んでいてもよいことを意味するように解釈されてもよいことが理解される。
【００１６】
［００２７］
アービター４は、シーケンスでまたは並行して、キュー中に記憶されているメモリ要求を処理してもよい。アービター４への参照は処理ユニット１への参照を含んでいてもよいという理解をすることにより、したがって、この説明は、処理ユニット１が、シーケンスでまたは並行して、キュー中に記憶されているメモリ要求を処理してもよいことを意味するように解釈されてもよいことが理解される。メモリ要求は、メモリ要求のバッチに対応していてもよい。例えば、キューは、メモリ要求の複数のバッチに対応するメモリ要求を保持（例えば、記憶）するように構成されていてもよい。別の例として、キューは、メモリ要求のＮ個以上のバッチに対応するメモリ要求を保持（例えば、記憶）するように構成されていてもよく、ここで、Ｎは正の整数である。
【００１７】
［００２８］
アービター４は、キューからメモリ要求を解放するように構成されていてもよい。アービター４への参照は、処理ユニット１への参照を含んでいてもよいということを理解することにより、したがって、この説明は、処理ユニット１が、キューからメモリ要求を解放するように構成されていてもよいことを意味するように解釈されてもよいことが理解される。アービター４のキューから解放されると、処理ユニット１は、解放されたメモリ要求をメモリ（例えば、内部メモリ３Ａおよび／または外部メモリ５Ａ）に送るまたはそうでなければ送信するように構成されていてもよい。ここで使用されるように、「メモリ」への参照は、内部メモリ３Ａ、外部メモリ５Ａ、および／または、処理ユニット１によってアクセス可能な他の何らかのメモリを指してもよい。例えば、メモリ要求が、メモリ要求に関係付けられているメモリに対応するメモリ制御装置に送られて、これによって受け取られるように、処理ユニット１は、メモリ要求を取り扱うように構成されていてもよい。したがって、処理ユニット１は、メモリ要求をメモリに送るように構成されているものとしてここで説明されているが、送られたメモリ要求は、メモリに対するメモリ要求を仲裁するメモリ制御装置によって受け取られてもよいことが理解される。メモリ要求は、いくつかの例では、これらが通信媒体（例えば、バス７）を通して送信され、アドレス指定されたコンポーネント（例えば、メモリ制御装置）によって受信されるように、アドレス指定されてもよい。他の例では、メモリ要求は、これらがメモリに対して向けられているが、それにもかかわらず、メモリ制御装置によって受信されるように、アドレス指定されてもよい。
【００１８】
［００２９］
処理ユニット１は、メモリ要求をおよび／またはメモリ要求のバッチをメタデータでタグ付けするように構成されていてもよい。いくつかの例では、メモリ要求をメタデータでタグ付けすることは、各メモリ要求が発生されたときに起こってもよい。同様に、いくつかの例では、メモリ要求のバッチをメタデータでタグ付けすることは、各バッチが発生されたときに起こってもよい。いくつかの例では、タグ付けされたメタデータは、メタデータでタグ付けされている特定のメモリ要求が生じたスレッドグループを識別してもよい。他の例では、タグ付けされたメタデータは、メタデータでタグ付けされているメモリ要求のバッチが生じたスレッドグループを識別してもよい。このような例では、メモリ要求のバッチ自体がメタデータでタグ付けされてもよく、または、メモリ要求のバッチ中の最初のメモリ要求だけがメタデータでタグ付けされてもよい。メモリ要求のバッチを、または、メモリ要求のバッチ中の最初のメモリ要求だけをタグ付けすることにより、処理ユニット１は、メモリ要求のバッチ中の各メモリ要求をメタデータでタグ付けしないことにより、帯域幅の消費を低減するように構成されていてもよい。メモリ要求のバッチをメタデータでタグ付けすることへの参照は、メモリ要求のバッチの各メモリ要求をメタデータでタグ付けするように解釈されないことが理解される。代わりに、メモリ要求のバッチをメタデータでタグ付けすることは、バッチ自体をタグ付けすること（例えば、バッチの最初のメモリ要求の前にデータを追加すること、バッチの最後のメモリ要求の後にメタデータを追加すること、または、バッチに対応するカプセル化データ構造にメタデータを追加すること）、または、バッチ中の単一のメモリ要求（例えば、バッチ中の最初のメモリ要求）をタグ付けすることを意味するように理解される。バッチ自体をタグ付けすることは、例えば、メタデータをカプセル化データ構造に追加することを含んでいてもよい。別の例では、バッチ自体をタグ付けすることは、異なるスレッドグループから生じるメモリ要求間にバッチ識別子を挿入することを含んでいてもよい。バッチ区切りトークンとも呼ばれることがある、ここでバッチ開始識別子として説明されているようなバッチ識別子は、メモリ要求の各バッチの最初のメモリ要求の前に挿入されてもよい。他の例では、メモリ要求の各バッチの最後のメモリ要求の後に挿入されてもよい。このような例では、メモリ要求の各バッチの前におよび／または終わりにバッチ識別子を挿入することは、競合仲裁キュー中に記憶されるとき、メモリ要求のバッチを区切る役割を果たしてもよい。なぜなら、シーケンスで記憶されるとき、（このようなキュー中の最初および／または最後のバッチの例外を有する）バッチ識別子は、メモリ要求の２つのバッチ間に位置付けられるからである。バッチ識別子は、異なるスレッドグループおよび／またはクライアントからバッチを分離する役割を果たしてもよい。
【００１９】
［００３０］
メモリ要求のバッチは、例えば、ここで説明する開始バッチ識別子またはバッチ区切りトークンのような、バッチ識別子によって区切られてもよい。バッチ識別子を、競合仲裁キュー中に記憶させてもよい。
【００２０】
［００３１］
処理ユニット１、処理ユニット１のアービター４、メモリ要求のバッチ、メタデータのタグ付け、および、メタデータ自体を、以下でより詳細に説明する。
【００２１】
［００３２］
処理ユニット１は、ワイヤードであるかワイヤレスであるかにかかわらず、通信媒体を通して外部メモリ５Ａに通信可能に結合されていてもよい。いくつかの例では、処理ユニット１は、バス７のような通信媒体を介して、外部メモリ５Ａに通信可能に直接的に結合されていてもよい。他の例では、処理ユニット１は、バスのような通信媒体を介して、外部メモリ５Ａに通信可能に間接的に結合されていてもよい。このような他の例では、処理ユニット１は、別のコンポーネント（例えば、異なる処理ユニット）に通信可能に直接的に結合されていてもよく、別のコンポーネント自体が、バスのような通信媒体を介して、外部メモリ５Ａに通信可能に直接的に結合される。
【００２２】
［００３３］
いくつかの例では、内部メモリ３Aは、例えば、ランダムアクセスメモリ（ＲＡＭ）、静的ＲＡＭ（ＳＲＡＭ）、動的ＲＡＭ（ＤＲＡＭ）、消去可能プログラム可能ＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラム可能ＲＯＭ（ＥＥＰＲＯＭ（登録商標））、フラッシュメモリ、磁気データ媒体または光学記憶媒体、任意のオンチップメモリ（例えば、処理ユニット１の任意の集積メモリ）、あるいは、他の何らかの内部メモリのような、１つ以上の揮発性または不揮発性メモリあるいは記憶デバイスを含んでいてもよい。他の例では、内部メモリ３Ａは、上記で説明した例とは異なる、１つ以上のメモリまたは記憶デバイスを含んでいてもよい。
【００２３】
［００３４］
外部メモリ５Ａは、１つ以上のコンピュータ読取可能記憶媒体を備えていてもよい。外部メモリ５Ａは、例えば、ランダムアクセスメモリ（ＲＡＭ）、静的ＲＡＭ（ＳＲＡＭ）、動的ＲＡＭ（ＤＲＡＭ）、消去可能プログラム可能ＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラム可能ＲＯＭ（ＥＥＰＲＯＭ）、フラッシュメモリ、ＳＤＲＡＭ  ＤＤＲ  ＳＤＲＡＭ、磁気データ媒体または光学記憶媒体、任意のオフチップメモリ（例えば、処理ユニット１に対して外部の任意のメモリ）、他の何らかのメモリ、ならびに、１つ以上の命令および／またはデータ構造を記憶するために使用することができ、処理ユニット（例えば、処理ユニット１）によってアクセスすることができる、他の何らかの媒体のような、１つ以上の揮発性または不揮発性のメモリあるいは記憶デバイスを含んでいてもよい。
【００２４】
［００３５］
外部メモリ５Ａは、いくつかの例にしたがうと、非一時的記憶媒体であってもよい。用語「非一時的」は、記憶媒体が、搬送波または伝搬信号で具現化されていないことを示してもよい。いくつかの例では、用語「非一時的」は、外部メモリ５Ａが非移動可能であることを意味してもよい。他の例では、用語「非一時的な」は、外部メモリ５Ａが非移動可能であること、または、その内容が静的であること、を意味しない。１つの例として、外部メモリ５Ａは、それが通信可能に結合されているコンピューティングデバイス（例えば、図２に関して説明するコンピューティングデバイス２）から取り除かれてもよい。例えば、外部メモリ５Ａは、コンピューティングデバイスから（例えば、ワイヤレスに、物理的に、または、別の方法で）通信可能に減結合されてもよく、別のコンピューティングデバイス（例えば、図２に関して説明するコンピューティングデバイス２）に（例えば、ワイヤレスに、物理的に、または、別の方法で）通信可能に結合されてもよい。別の例として、外部メモリ５Ａは、通信可能に結合されているコンピューティングデバイスから取り除かれてもよく、または、そうでなければ物理的に切断されてもよく、そして、別のデバイスに移動されてもよい（例えば、別のデバイスに移動され、物理的に接続される）。別の例として、外部メモリ５Ａは、物理的に別のデバイスに挿入されてもよい。ある例では、非一時的記憶媒体は、（例えば、ＲＡＭにおいて）経時的に変化することがあるデータを記憶してもよい。
【００２５】
［００３６］
いくつかの例では、外部メモリ５Ａは、実行されるとき、処理ユニット１に、本開示において処理ユニット１に与えられた機能を実行させる命令を含んでいてもよい（例えば、命令を記憶してもよい）。したがって、外部メモリ５Ａは、実行されるとき、１つ以上のプロセッサ（例えば、処理ユニット１）に、ここで説明する１つ以上の機能を実行させる命令を記憶しているコンピュータ読取可能記憶媒体であってもよい。
【００２６】
［００３７］
処理ユニット１は、中央処理ユニット（ＣＰＵ）、グラフィック処理ユニット（ＧＰＵ）、並列処理ユニット（例えば、並列処理を実行するように構成されている任意の処理ユニット）、システムオンチップ（ＳｏＣ）、または、ここで説明する１つ以上の技術を実行するように構成されていてもよい他の何らかの処理ユニットであってもよい。いくつかの例では、処理ユニット１は、汎用処理能力を有するＧＰＵであってもよく、汎用処理タスク（例えば、非グラフィック関連のタスク）を実行するとき、汎用ＧＰＵ（ＧＰＧＰＵ）と呼ばれることがある。したがって、ここで使用されるように、ＧＰＵへの参照は、汎用処理能力を有する、または、汎用処理能力を有さないＧＰＵを意味してもよい。いくつかの例では、処理ユニット１は、単一命令複数データ（ＳＩＭＤ）プロセッサ、複数命令複数データ（ＭＩＭＤ）プロセッサ、単一プログラム複数データ（ＳＰＭＤ）プロセッサ、または、複数プログラム複数データ（ＭＰＭＤ）プロセッサであってもよい。
【００２７】
［００３８］
処理ユニット１は、１つ以上のプロセッサ（例えば、１つ以上のマイクロプロセッサ）、１つ以上の特定用途向け集積回路（ＡＳＩＣ）、１つ以上のフィールドプログラム可能ゲートアレイ（ＦＰＧＡ）、１つ以上の算術論理ユニット（ＡＬＵ）、１つ以上のデジタル信号プロセッサ（ＤＳＰ）、ディスクリート論理、ソフトウェア、ハードウェア、ファームウェア、他の均等な集積またはディスクリート論理回路、あるいは、これらの任意の組み合わせを含んでいてもよい。処理ユニット１は、１つ以上のプロセッサコアも含んでいてもよく、したがって、処理ユニット１は、マルチコアプロセッサと呼ばれることがある。いくつかの例では、処理ユニット１は、グラフィック処理のような並列処理に適した大量な並列処理能力を処理ユニット１に提供する集積および／またはディスクリート論理回路を含む、特殊化されたハードウェアであってもよい。本開示の技術は、メモリ要求仲裁を実行するように構成されていてもよい任意の処理ユニットに適用される。
【００２８】
［００３９］
処理ユニット１の並列処理能力が増加すると、ここで説明する技術に対応する何らかの利益が増加するかもしれないことが理解される。例えば、ＧＰＵは、一般的に大量並列処理能力を有するように考えられている一方で、ＣＰＵは、並列処理能力を有するが、特にＧＰＵと比較されるとき、必ずしも大量な意味ではないように考えられている。したがって、例示的なＧＰＵが大量並列処理能力を有し、例示的なＣＰＵが、例示的なＧＰＵの並列処理能力よりも少ない並列処理能力を有するこのような例において、例示的なＧＰＵがより多くの並列処理能力を有することにより、例示的なＧＰＵによって実現される何らかの利益が例示的なＣＰＵのものよりも大きいかもしれないことを除き、ここで説明する技術から生じる何らかの利益が、両方のこのような処理ユニットによって認識されてもよいことが理解される。しかしながら、産業が流動的であり、いくつかのＣＰＵがＧＰＵの並列処理能力よりもより多くの並列処理能力を有するように、いくつかのＣＰＵは設計されるかもしれないことも理解される。このような例では、例示的なＣＰＵが例示的なＧＰＵよりもより並列処理能力を有することにより、これら特定の例示的なＣＰＵによって実現される何らかの利点が例示的なＧＰＵのものよりも大きいかもしれないことを除き、ここで説明する１つ以上の技術に対応する何らかの利点は、このような大量並列ＣＰＵとともにＧＰＵによって認識されてもよい。したがって、ここで説明する１つ以上の技術に対応する何らかの利点は、並列処理能力を有する任意の処理ユニットによって実現してもよいことが理解される。
【００２９】
［００４０］
典型的なＣＰＵとは異なり、ＧＰＵは、単一の命令から（例えば、単一のＳＩＭＤ命令から）数百から数千のメモリ要求を発生させることがあることが理解される。これに関して、並行して数百から数千のメモリ要求を発生させる能力を有さない処理ユニットと比較されるとき、並行して数百から数千のメモリ要求を発生させる能力を有する処理ユニットにとって、ここで説明する技術が、一般的により有益であることが理解される。例えば、メモリ要求のアウトオブオーダー実行は、性能を向上させるかもしれず、いくつかの例では、大幅に向上させる。例えば、アウトオブオーダー実行は、移行中の多くのメモリ要求が、メモリ待ち時間を隠すことを可能にしてもよい。しかしながら、メモリの整合性を確実にするために、それぞれ個々のメモリ要求のアドレスが別の個々のメモリ要求のアドレスと競合するか否か決定することによって、アウトオブオーダー実行を可能にする場合、発生されたメモリ要求の数が増加すると、アウトオブオーダー実行を可能にするために必要とされる処理も多くなりすぎる。例えば、それぞれ発生されたメモリ要求のアドレスを比較することは、実行可能ではないかもしれず、および／または、発生された要求の数が増加すると、うまくスケーリングしないかもしれない。したがって、ここで説明する技術は、メモリ要求間で、非競合および／または競合メモリを識別する、効率的でスケーラブルな方法を可能にすることができる。例えば、ここで説明する技術は、メモリ要求間で、非競合および／または独立メモリを抽出する、効率的でスケーラブルな方法を可能にすることができる。
【００３０】
［００４１］
ここで説明する１つ以上の技術は、ハードウェア、ソフトウェア、ファームウェア、または、これらの任意の組み合わせにおいて実現してもよい。 例えば、ここで説明する１つ以上の技術は、ハードウェアで実現してもよく、処理ユニット１は、このようなハードウェアまたはここで説明する１つ以上の技術を実行するようにともに動作するように構成されている複数のハードウェアコンポーネントのうちの１つのコンポーネントであってもよい。このような例において、ハードウェアは、実行されるとき、ここで説明する１つ以上の技術を実行してもよいソフトウェアまたはファームウェアを実行するように構成されていても、されていなくてもよい。任意のソフトウェアおよび／またはファームウェアは、ハードウェアのオンチップメモリ（例えば、処理ユニット１の内部メモリ３Ａ）、または、任意のハードウェアに対して外部のメモリ（例えば、外部メモリ５Ａ）のような、非一時的記憶媒体上に記憶されてもよい。
【００３１】
［００４２］
図２は、本開示の１つ以上の態様を実現するように構成されてもよい、例示的なコンピューティングデバイス（例えば、コンピューティングデバイス２）および処理ユニット（例えば、処理ユニット１）を図示するブロックダイヤグラムである。図２中に示すように、コンピューティングデバイス２は、例えば、パーソナルコンピュータ、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、コンピュータワークステーション、ビデオゲームプラットフォームまたはコンソール、移動体電話機（例えば、セルラまたは衛星電話機）、ハンドヘルドデバイス（例えば、ポータブルビデオゲームデバイスまたはパーソナルデジタルアシスタント（ＰＤＡ））、ウェアラブルコンピューティングデバイス、パーソナル音楽プレーヤ、ビデオプレーヤ、ディスプレイデバイス、テレビ、ネットワークデバイス、中間ネットワークデバイス、任意のコンピューティングデバイス、あるいは、本開示の１つ以上の態様を実現するように構成されてもよい、他の何らかのタイプのデバイスであってもよい。
【００３２】
［００４３］
コンピューティングデバイス２は、１つの以上の処理ユニット１、トランシーバ９、ユーザインターフェース１１、ディスプレイ処理ユニット１３、ディスプレイ１５、および、外部メモリ５Ａを含んでいてもよい。図１の例では、コンピューティングデバイスは、２つの処理ユニット：処理ユニット１Ａおよび処理ユニット１Ｂを含むように示されている。ここで使用するように、処理ユニット１への参照は、１つ以上の処理ユニット、例えば、処理ユニット１Ａおよび／または処理ユニット１Ｂを指してもよい。例えば、処理ユニット１への参照は、処理ユニット１Ａを指してもよい。別の例として、処理ユニット１への参照は、処理ユニット１Ｂを指してもよい。別の例として、処理ユニット１への参照は、処理ユニット１Ａおよび／または処理ユニット１Ｂを指してもよい。さらに別の例として、処理ユニット１への参照は、１つ以上の処理ユニット１を指してもよい。処理ユニット１は、他の処理ユニットとヘテロジニアスに実行するように構成されていても、されていなくてもよい。例えば、処理ユニット１Ａおよび処理ユニット１Ｂは、互いにヘテロジニアスに実行するように構成されていてもよい。したがって、コンピューティングデバイス２は、ヘテロジニアスコンピューティングを実行するように構成されていてもよいことが理解される。処理ユニット１は、任意のコンピューティングデバイスに統合されていてもよい。いくつかの例では、処理ユニット１ＡはＣＰＵであってもよく、処理ユニット１ＢはＧＰＵであってもよい。他の例では、処理ユニット１ＢはＣＰＵであってもよく、処理ユニット１ＡはＧＰＵであってもよい。
【００３３】
［００４４］
処理ユニット１Ａは、内部メモリ３Ａ−１を含んでいてもよい。内部メモリ３Ａ−１へのアクセスは、メモリ制御装置３Ｂ−１によって制御されてもよい。メモリ制御装置３Ｂ−１は、ダイレクトメモリアクセス（ＤＭＡ）制御装置、または、他の何らかのメモリ制御装置のような、任意のメモリ制御装置であってもよい。同様に、処理ユニット１Ｂは、内部メモリ３Ａ−２を含んでいてもよい。内部メモリ３Ａ−２へのアクセスは、メモリ制御装置３Ｂ−２によって制御されてもよい。メモリ制御装置３Ｂ−２は、ダイレクトメモリアクセス（ＤＭＡ）制御装置、または、他の何らかのメモリ制御装置のような、任意のメモリ制御装置であってもよい。ここで使用するように、内部メモリ３Ａへの参照は、内部メモリ３Ａ−１および／または内部メモリ３Ａ−２を指してもよい。例えば、内部メモリ３Ａへの参照は、内部メモリ３Ａ−１を指してもよい。別の例として、内部メモリ３Ａへの参照は、内部メモリ３Ａ−２を指してもよい。別の例として、内部メモリ３Ａへの参照は、内部メモリ３Ａ−１および／または内部メモリ３Ａ−２を指してもよい。ここで使用するのと同様に、メモリ制御装置３Ｂへの参照は、メモリ制御装置３Ｂ−１および／またはメモリ制御装置３Ｂ−２を指してもよい。例えば、メモリ制御装置３Ｂへの参照は、メモリ制御装置３Ｂ−１を指してもよい。別の例として、メモリ制御装置３Ｂへの参照は、メモリ制御装置３Ｂ−２を指してもよい。別の例として、メモリ制御装置３Ｂへの参照は、メモリ制御装置３Ｂ−１および／またはメモリ制御装置３Ｂ−２を指してもよい。
【００３４】
［００４５］
内部メモリ３Ａ−１は、例えば、ランダムアクセスメモリ（ＲＡＭ）、静的ＲＡＭ（ＳＲＡＭ）、動的ＲＡＭ（ＤＲＡＭ）、消去可能プログラム可能ＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラム可能ＲＯＭ（ＥＥＰＲＯＭ）、フラッシュメモリ、磁気データ媒体または光記憶媒体、任意のオンチップメモリ（例えば、処理ユニットＡ１の任意の集積メモリ）、あるいは、他の何らかの内部メモリのような、１つ以上の揮発性または不揮発性メモリまたは記憶デバイスを含んでいてもよい。他の例では、内部メモリ３Ａ−１が、上記で説明した例とは異なる、１つ以上のメモリまたは記憶デバイスを含んでいてもよい。同様に、内部メモリ３Ａ−２は、例えば、ランダムアクセスメモリ（ＲＡＭ）、静的ＲＡＭ（ＳＲＡＭ）、動的ＲＡＭ（ＤＲＡＭ）、消去可能プログラム可能ＲＯＭ（ＥＰＲＯＭ）、電気的消去可能プログラム可能ＲＯＭ（ＥＥＰＲＯＭ）、フラッシュメモリ、磁気データ媒体または光学記憶媒体、任意のオンチップメモリ（例えば、処理ユニット１Ｂの任意の集積メモリ）、または、他の何らかの内部メモリのような、１つ以上の揮発性または不揮発性のメモリまたは記憶デバイスを含んでいてもよい。他の例では、内部メモリ３Ａ−２は、上記で説明した例とは異なる、１つ以上のメモリまたは記憶デバイスを含んでいてもよい。
【００３５】
［００４６］
処理ユニット１Ａは、アービター４−１とここでは呼ぶメモリ要求アービター４−１を含んでいてもよい。アービター４−１は、メモリ要求を保持するキューを含んでいてもよい。アービター４に関する説明は、アービター４−１に適用される。処理ユニット１Ｂは、アービター４−２とここでは呼ぶメモリ要求アービター４−２を含んでいてもよい。アービター４−２は、メモリ要求を保持するキューを含んでいてもよい。アービター４に関する説明は、アービター４−２に適用される。したがって、ここで使用されるように、アービター４への参照は、アービター４−１および／またはアービター４−２を指してもよい。例えば、アービター４への参照は、アービター４−１を指してもよい。別の例として、アービター４への参照は、アービター４−２を指してもよい。別の例として、アービター４への参照は、アービター４−１および／またはアービター４−２を指してもよい。
【００３６】
［００４７］
描いた外部メモリ５Ａのような、処理ユニット１Ａおよび処理ユニット１Ｂに対して外部のメモリは、処理ユニット１Ａおよび／または処理ユニット１Ｂによってアクセス可能であってもよい。いくつかの例では、外部メモリ５Ａはシステムメモリであってもよい。外部メモリ５Ａへのアクセスは、メモリ制御装置５Ｂによって制御されてもよい。メモリ制御装置５Ｂは、ダイレクトメモリアクセス（ＤＭＡ）制御装置のような、任意のメモリ制御装置であってもよい。メモリ制御装置（例えば、メモリ制御装置３Ｂ−１、メモリ制御装置３Ｂ−２、および／または、メモリ制御装置５Ｂ）は、メモリ制御装置が他のメモリ要求にサービス提供している間に、受け取ったメモリ要求を一時的に記憶する１つ以上のメモリ要求バッファを含んでいてもよい。メモリ制御装置は、メモリ制御装置が関係付けられているメモリにメモリ要求がアクセスする順序を仲裁するように構成されていてもよい。
【００３７】
［００４８］
図２の例中のコンピューティングデバイス２において示されているさまざまなコンポーネントは、必ずしも、すべてのコンピューティングデバイス２のすべての例になくてもよい。例えば、コンピューティングデバイス２は、他の例では、図２の例中に示されている１つ以上のコンポーネント（例えば、ディスプレイ処理ユニット１３）を含んでいても、含んでいなくてもよい。他の例では、コンピューティングデバイス２は、図２の例において図示されているコンポーネントに加えて、１つ以上のコンポーネントを含んでいてもよい。
【００３８】
［００４９］
トランシーバ９は、コンピューティングデバイス２と、別のデバイスまたはネットワークとの間で、ワイヤレスまたはワイヤード通信を可能にする回路を含んでいてもよい。トランシーバ９は、変調器、復調器、増幅器、および、ワイヤードまたはワイヤレス通信のための他のこのような回路を含んでいてもよい。いくつかの例では、トランシーバ９は、処理ユニット１に統合されていても、されていなくてもよい。例えば、トランシーバ９は、処理ユニット１と同じ集積回路（ＩＣ）の一部であってもよく、処理ユニット１の一部またはすべてを含んでいてもよいＩＣの外部であってもよく、あるいは、処理ユニット１の一部またはすべてを含んでいてもよいＩＣに対して外部にあるＩＣにおいて形成されてもよい。例えば、トランシーバ９は、１つ以上のマイクロプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラム可能ゲートアレイ（ＦＰＧＡ）、算術論理ユニット（ＡＬＵ）、ディスクリート論理、ソフトウェア、ハードウェア、ファームウェア、または、これらの任意の組み合わせのような、さまざまな適したエンコーダ回路のいずれかとして実現してもよい。
【００３９】
［００５０］
ユーザインターフェース１１の例は、トラックボール、マウス、キーボード、および、他の何らかの入力デバイスを含んでいてもよいが、これらに限定されない。例えば、ユーザインターフェース１１は、タッチスクリーンを含んでいてもよく、これは、ディスプレイ１５の一部として組み込まれていてもよい。ディスプレイ１５は、液晶ディスプレイ（ＬＣＤ）、陰極線管（ＣＲＴ）ディスプレイ、プラズマディスプレイ、タッチ感応ディスプレイ、存在感応ディスプレイ、または、他の何らかのタイプのディスプレイを備えてもよい。ユーザインターフェース１１がソフトウェア（例えば、グラフィカルユーザインタフェース）を使用して部分的または完全に実現される例において、ソフトウェアは、処理ユニット１によって、または、処理ユニット１とは異なる処理ユニットによって実行されてもよく、ソフトウェアは、メモリ（例えば、内部メモリ３Ａのようなオンチップメモリ、または、外部メモリ５Ａのようなオフチップメモリ）上に記憶されていてもよい。処理ユニット１は、ユーザインターフェース１１の１つ以上の態様を実現するために、メモリ上に記憶されているソフトウェア命令にアクセスし、実行するように構成されていてもよい。
【００４０】
［００５１］
ディスプレイ処理ユニット１３は、タイルベースのアーキテクチャを利用しても、しなくてもよい。いくつかの例では、タイルは、高さが１以上のピクセルであり、幅が１以上のピクセルである、高さと幅を備えるピクセルのエリア表現である。このような例では、タイルは、本質的に長方形または正方形であってもよい。他の例では、タイルは、正方形または長方形とは異なる形状であってもよい。ディスプレイ処理ユニット１３は、少なくとも１つのメモリから複数の（例えば、フォアグラウンドおよびバックグラウンド）画像レイヤをフェッチするように構成されていてもよい。例えば、ディスプレイ処理ユニット１３は、処理ユニット（例えば、いくつかの例では、処理ユニット１Ｂのような処理ユニット１）が、ピクセル表現のおよび／または他のメモリの形態のグラフィカルデータを出力するフレームバッファから画像レイヤをフェッチするように構成されていてもよい。複数の画像レイヤは、フォアグラウンドレイヤおよび／またはバックグラウンドレイヤを含んでいてもよい。ここで使用されるように、用語「画像」は静止画像のみを意味するようには意図されていない。むしろ、画像または画像レイヤは、静止画像（例えば、ブレンドされるとき、画像または画像レイヤは、画像であってもよい）またはビデオ（ブレンドされるとき、画像または画像レイヤが、シーケンスで見られるときに映画またはビデオを生成させる、画像のシーケンスにおける単一の画像であってもよい）に関係付けられていてもよい。
【００４１】
［００５２］
ディスプレイ処理ユニット１３は、複数のレイヤからのピクセルを処理するように構成されていてもよい。ディスプレイ処理ユニット１３によって実行されてもよい例示的なピクセル処理は、アップサンプリング、ダウンサンプリング、スケーリング、回転、および／または、他のピクセル処理を含んでいてもよい。例えば、ディスプレイ処理ユニット１３は、フォアグラウンド画像レイヤおよび／またはバックグラウンド画像レイヤに関係付けられているピクセルを処理するように構成されていてもよい。ディスプレイ処理ユニット１３は、複数のレイヤからのピクセルをブレンドし、タイルフォーマットで、ブレンドされたピクセルをメモリに書き戻すように構成されていてもよい。その後、ブレンドされたピクセルが、ラスタフォーマットで、メモリから読み取られ、提示のためにディスプレイ１５に送られてもよい。
【００４２】
［００５３］
処理ユニット１を参照すると、処理ユニット１は、さまざまなタイプのアプリケーションを実行するように構成されていてもよい。１つ以上のアプリケーションの実行のための命令は、処理ユニット１によってアクセス可能なメモリ（例えば、内部メモリ３Ａおよび／または外部メモリ５Ａ）内に記憶されていてもよい。処理ユニット１は、別の処理ユニットとの間で、１つ以上の処理タスクを送信および／または受信するように構成されていてもよい。例えば、処理ユニット１Ａ（例えば、ＣＰＵ）は、１つ以上の処理タスクを処理ユニット１Ｂ（例えば、ＧＰＵ）にオフロードするように構成されていてもよい。別の例として、処理ユニット１Ｂ（例えば、ＧＰＵ）は、１つ以上の処理タスクを処理ユニット１Ａ（例えば、ＣＰＵ）にオフロードするように構成されていてもよい。
【００４３】
［００５４］
処理ユニット１は、プログラミング言語、アプリケーションプログラムインターフェース（ＡＰＩ）、ライブラリ、および／または、ランタイムシステムを含んでいてもよい、コンピューティングプラットフォーム（例えば、並列プログラミングのためのフレームワーク）にしたがって、１つ以上のプロセスを実行するように構成されていてもよい。他の例では、コンピューティングプラットフォームは、コンピューティング標準規格および／またはコンピューティング仕様を参照してもよい。例えば、処理ユニット１は、ＯｐｅｎＣＬ  ＡＰＩを使用するＯｐｅｎＣＬコンピューティングプラットフォームにしたがって、１つ以上のプロセスを実行するように構成されていてもよい。本開示の態様は、ＯｐｅｎＣＬコンピューティングプラットフォームおよび／またはＯｐｅｎＣＬ  ＡＰＩに限定されない。例えば、処理ユニット１は、任意の並列コンピューティングプラットフォーム、任意のヘテロジニアスコンピューティングプラットフォーム、および、これらに類するものにしたがって、１つ以上のプロセスを実行するように構成されていてもよい。例えば、処理ユニット１は、ＯｐｅｎＧＬコンピューティングプラットフォーム、ＣＵＤＡコンピューティングプラットフォーム、ＨＳＡ財団コンピューティングプラットフォーム、ヴァルカンＡＰＩ、および、これらに類するものにしたがって、１つ以上のプロセスを実行するように構成されていてもよい。さらに、本開示で説明する技術は、ＡＰＩにしたがって機能することを必要としない。
【００４４】
［００５５］
図３は、メモリ要求のバッチ３０の１つの例を図示している。メモリ要求のバッチ３０のようなメモリ要求のバッチは、複数の、個々のメモリ要求を含んでいてもよい。メモリ要求のバッチにおける各メモリ要求は、同じタイプのものだけであってもよい。例えば、メモリ要求のバッチ３０は、複数の読み取りメモリ要求を含んでいてもよい。別の例では、メモリ要求のバッチ３０は、複数の書き込みメモリ要求を含んでいてもよい。しかしながら、メモリ要求のバッチ３０は、１つより多くのタイプのメモリ要求を含むことができない。例えば、メモリ要求のバッチ３０は、読み取りメモリ要求と書き込みメモリ要求とを含むことができない。示している例では、メモリ要求Ｎは、メモリ要求のバッチ３０のうちのＮ番目と番号付けされたメモリ要求を指し、Ｎは正の整数である。
【００４５】
［００５６］
処理ユニット１は、複数のスレッドグループを並行して処理するように構成されていてもよい。ここで使用されるように、スレッドグループを、スレッドのグループ、ウェーブ、ワープ、ワークグループ、または、これらに類するものとしても呼ぶこともある。スレッドグループは、複数のスレッドを含んでいてもよい。いくつかの例では、スレッドグループに対応する複数のスレッドを、単一のＳＩＭＤ命令のような、単一の命令から発生させてもよい。いくつかの例では、スレッドグループは、３２個のスレッドを含んでいてもよい。他の例では、スレッドグループは、３２個より多くの、または、３２個未満のスレッドを含んでいてもよい。例えば、スレッドグループは、８個のスレッド、１６個のスレッド、６４個のスレッド、あるいは、３２個未満または３２個に等しい他の何らかの数のスレッドを含んでいてもよい。
【００４６】
［００５７］
処理ユニット１は、複数のスレッドのグループを並行して実行するように構成されていてもよい。例えば、処理ユニット１は、１つ以上の他のスレッドグループと並行して、第１のスレッドグループを実行するように構成されていてもよい。このような例では、処理ユニット１は、１つ以上の他のスレッドグループに対応する１つ以上の他のスレッドと並行して、第１のスレッドグループに対応する複数のスレッドを実行するように構成されていてもよい。例えば、処理ユニット１は、第１のスレッドグループに対応する複数のスレッドと第２スレッドグループに対応する複数のスレッドとを実行するように構成されていてもよい。
【００４７】
［００５８］
各スレッドのグループに対応する１つの以上のスレッドが、処理ユニット１によって実行される際、結果として、（例えば、読み取りまたは書き込み）メモリ要求またはフェンス（例えば、バリア）要求のような、要求の発生となってもよい。例えば、処理ユニット１は、スレッドを実行することに応答して、メモリ要求を発生させてもよい。別の例として、３２個のスレッドのグループは、実行される際、３２個までのメモリ要求を発生させてもよい。この例における、３２個のメモリ要求は、複数の読み取り要求と複数の書き込み要求とを含んでいてもよい。
【００４８】
［００５９］
処理ユニット１は、メモリ要求をメモリ要求のバッチにグループ化するように構成されていてもよい。ここで使用されるように、用語「バッチ」は、メモリ要求のバッチを指す。例えば、第１のバッチへの参照は、メモリ要求の第１のバッチを指し、第２のバッチへの参照は、メモリ要求の第２のバッチを指す。処理ユニット１は、メモリ要求が生じるスレッドグループに基づいて、および、メモリ要求の要求タイプに基づいて、メモリ要求のバッチを発生させるように構成されていてもよい。例えば、上記で説明したように、処理ユニット１は、複数のスレッドグループを実行するように構成されていてもよく、各スレッドグループは、１つ以上のメモリ要求を発生させる。処理ユニット１は、各スレッドグループに対応するメモリ要求の１つ以上のバッチを発生させるように構成されていてもよく、メモリ要求の各バッチは、同じスレッドグループから生じたメモリ要求だけを含むことを意味する。
【００４９】
［００６０］
いくつかの例では、バッチは、例えば、メモリ要求命令（例えば、単一のＳＩＭＤメモリ要求命令であるが、スレッドグループのスレッドを使用して、並列化されている）を実行するスレッドグループにおけるすべてのアクティブなスレッドによって形成されていてもよい。いくつかの例では、処理ユニット１が、バッチ中に重複またはオーバーラップしたメモリ要求を見つけると、処理ユニット１は、スレッドグループ中のアクティブなスレッドの数と比較して、バッチ中のメモリ要求の数を減らすように構成されていてもよい。このような例では、処理ユニット１は、スレッドグループ中のスレッドの数に対して、より少ないメモリ要求を発生させるように構成されていてもよい。このようなことから、処理ユニット１は、メモリ要求が生じるスレッドグループ中のスレッドの数に対して、より少ないメモリ要求を有するメモリ要求のバッチを発生させるおよび／または記憶するように構成されていてもよい。このように、メモリ要求の数を、および／または、メモリ要求のバッチのサイズの数を減らすことによって、メモリ要求を記憶させるために、競合仲裁キュー中のより少ないメモリ空間を、適応させるだけで足りる。したがって、いくつかの例では、バッチサイズと発行スレッドグループ中の（アクティブな）スレッドの数との間に１対１の対応があっても、なくてもよく、発行されるスレッドグループは、メモリ要求が生じるスレッドのグループを指す。
【００５０】
［００６１］
メモリ要求のバッチは、単一のタイプのメモリ要求だけを含んでいる。例えば、読み取りメモリ要求のバッチは、読み取りメモリ要求だけを含み、書き込みメモリ要求のバッチは、書き込みメモリ書き込み要求だけを含んでいる。したがって、スレッドのグループの実行から生じる複数の読み取りメモリ要求から、および、スレッドの同じグループの実行から生じる複数の書き込みメモリ要求から、処理ユニット１は、読み取りメモリ要求の１つ以上のバッチと書き込みメモリ要求の１つ以上のバッチとを発生させるように構成されていてもよい。
【００５１】
［００６２］
例えば、３２個のスレッドの第１のグループは、１つ以上の読み取りメモリ要求および／または１つ以上の書き込みメモリ要求を発生させてもよく、３２個のスレッドの第２のグループは、１つ以上の読み取りメモリ要求および／または１つ以上の書き込みメモリ要求を発生させてもよい。このような例では、３２個のスレッドの第１のグループは、複数の読み取り要求と複数の書き込み要求とを発生させてもよく、３２個のスレッドの第２のグループは、複数の読み取り要求と複数の書き込み要求とを発生させてもよい。処理ユニット１は、この例では、スレッドの第１グループの複数の読み取りメモリ要求に対応するメモリ要求の少なくとも１つのバッチと、スレッドの第１グループの複数の書き込みメモリ要求に対応するメモリ要求の少なくとも１つのバッチとを発生させるように構成されていてもよい。同様に、処理ユニット１は、スレッドの第２グループの複数の読み取りメモリ要求に対応するメモリ要求の少なくとも１つのバッチと、スレッドの第２グループの複数の書き込みメモリ要求に対応するメモリ要求の少なくとも１つのバッチとを発生させるように構成されていてもよい。
【００５２】
［００６３］
処理ユニット１は、メモリ要求をおよび／またはメモリ要求のバッチをメタデータでタグ付けするように構成されていてもよい。例えば、図４は、処理ユニット１がメモリ要求のバッチ（例えば、メモリ要求のバッチ３１）をメタデータでタグ付けするように構成されていてもよい１つの例を図示している。いくつかの例では、バッチ自体をメタデータでタグ付けすることは、図４の例において示すように、メタデータをメモリ要求のバッチの始め（例えば、バッチの最初のメモリ要求の直前のような、前に）に追加することを含んでいてもよい。他の例では、バッチ自体をメタデータでタグ付けすることは、メモリ要求のバッチの最後（例えば、バッチの最後のメモリ要求の後）にメタデータを追加することを含んでいてもよい。他の例では、メタデータは、メモリ要求のバッチに対応するヘッダ中の１つの以上のフィールドに追加してもよい。例えば、メタデータは、メモリ要求のバッチのカプセル化データ構造に対応するヘッダ中の１つの以上のフィールドに追加してもよい。図４の例において、メタデータは、バッチ中の最初のメモリ要求の前のバッチに追加され（例えば、タグ付けされ）てもよい。
【００５３】
［００６４］
図５は、処理ユニット１が、メモリ要求のバッチ（例えば、メモリ要求のバッチ３２）をメタデータでタグ付けするように構成されてもよい別の例を図示している。いくつかの例では、バッチ自体をメタデータでタグ付けすることは、図５の例中に示すように、メモリ要求のバッチ中の最初のメモリ要求（例えば、図５中に示すメモリ要求１）をメタデータでタグ付けすることを含んでいてもよい。いくつかの例では、メタデータは、メモリ要求のバッチ中の最初のメモリ要求の始めに追加してもよい。例えば、メタデータは、最初のメモリ要求に対応するヘッダ中の１つ以上のフィールドに追加してもよい。
【００５４】
［００６５］
図６は、処理ユニット１がメモリ要求のバッチ（例えば、メモリ要求のバッチ３３）中の各メモリ要求をメタデータでタグ付けするように構成されてもよい例を図示している。いくつかの例では、メタデータは、メモリ要求のバッチ中の各メモリ要求の始めに追加してもよい。例えば、メタデータは、各メモリ要求に対応するヘッダ中の１つ以上のフィールドに追加してもよい。メタデータは、図６中に描いた各メモリ要求に対する「メタデータ」として描かれているが、各メモリ要求にタグ付けされるメタデータは、同じであっても、なくてもよいことが理解される。例えば、各メモリ要求にタグ付けされるメタデータは、以下でより詳細に説明するスレッドグループ識別子を含んでいてもよい。しかしながら、メモリ要求（例えば、メモリ要求１）のバッチの最初のメモリ要求にタグ付けされるメタデータは、バッチ開始識別子も含んでいてもよい一方で、後続するメモリ要求（例えば、同じバッチ中の最初のメモリ要求に後続するメモリ要求）にタグ付けされるメタデータは、バッチ開始識別子を含んでいなくてもよい。バッチ開始識別子は、（例えば、そこに記憶されているとき）競合仲裁キュー中のスレッド識別子に先行していてもよく、バッチ区切りとして機能してもよい。他の例では、メモリ要求のバッチの最後のメモリ要求は、バッチ開始識別子を含んでいてもよい一方で、前のメモリ要求（例えば、同じバッチ中の最後のメモリ要求より前のメモリ要求）にタグ付けされているメタデータは、バッチ開始識別子を含んでいなくてもよい。競合仲裁キュー中に記憶され、バッチ区切りとして機能するとき、最後のメモリ要求の後にバッチ開始識別子が位置付けられるように、バッチ開始識別子は、バッチの最後のメモリ要求にタグ付けされてもよい。
【００５５】
［００６６］
バッチ開始識別子を以下でより詳細に説明する。他の例では、スレッドグループ識別子は、２つの目的：１つ目の目的は、メタデータに続くメモリ要求が生じるスレッドのグループを識別すること、２つ目の目的は、メモリ要求の新たなバッチの開始を識別すること、の役割を果たしてもよい。このような例では、アービター４は、２つのことをスレッドグループ識別子で決定するように構成されていることから、バッチ開始識別子は、メタデータ内に含まれていなくてもよい。スレッドグループ識別子が２つの目的の役割を果たしてもよい例は、例えば、図４と５に関して説明した例を含んでいてもよい。いくつかの例では、メタデータは、スレッドグループ識別子だけを含んでいてもよい。
【００５６】
［００６７］
いくつかの例では、処理ユニット１がメモリ要求のバッチを発生させる際、ここで説明したように、処理ユニット１は、メタデータをメモリ要求のバッチにまたは１つ以上のメモリ要求にタグ付けするように構成されていてもよい。例えば、１つ以上のメモリ要求をバッチにグループ化する際、ここで説明したように、処理ユニット１は、メタデータをメモリ要求のバッチにまたは１つ以上のメモリ要求にタグ付けするように構成されていてもよい。
【００５７】
［００６８］
処理ユニット１は、メモリ要求のバッチを競合仲裁キュー４０中に記憶させるように構成されていてもよい。例えば、処理ユニット１のアービター４は、（例えば、図４または図５に関して説明した方法で）メタデータでタグ付けされているメモリ要求のバッチ３０を受け取るように構成されていてもよい。別の例として、処理ユニット１のアービター４は、メモリ要求のバッチ３０を受け取るように構成されていてもよく、メモリ要求のバッチの各メモリ要求は、（例えば、図６に関して説明した方法で）メタデータでタグ付けされる。アービター４は、受け取ったメモリ要求のバッチを、競合仲裁キュー４０と呼ばれることがあるキュー４０中に記憶させるように構成されていてもよい。
【００５８】
［００６９］
いくつかの例では、処理ユニット１（例えば、アービター４）は、バッチが発行された順序で、メモリ要求のバッチを競合仲裁キュー中に記憶させるように構成されていてもよい。他の例では、処理ユニット１（例えば、アービター４）は、バッチが発行された順序とは異なる順序で、メモリ要求のバッチを競合仲裁キュー中に記憶させるように構成されていてもよい。このような例では、処理ユニット１は、事前競合仲裁キューポリシーに基づいて、バッチを再順序付けするように構成されていてもよい。他の例では、スレッドグループを実行できる順序を仲裁するように構成されることにより、処理ユニット１は、メモリ要求のバッチが競合仲裁キュー中に記憶される順序を制御するように構成されていてもよい。このような例では、処理ユニット１は、バッチが発行された順序でメモリ要求のバッチを競合仲裁キュー中に記憶させるように構成されていてもよい。
【００５９】
［００７０］
競合仲裁キュー４０は、メモリ要求のバッチを保持するように構成されていてもよい。例えば、図７は、メモリ要求のバッチ１からＮがキュー中に記憶されている競合仲裁キュー４０の１つの例を図示しており、Ｎは、メモリ要求のＮ番目のバッチを表し、Ｎは正の整数である。１つの例では、図４〜６のうちのいずれかに関して説明したメモリ要求のバッチ３０は、図７および／または図８中に図示するメモリ要求のバッチのうちの１つを構成していてもよい。別の例では、図４〜６のうちのいずれかに関して説明したメモリ要求のバッチ３０のフォーマットは、図７および／または図８中に図示するメモリ要求のバッチに対してメタデータがタグ付けされるフォーマットを構成していてもよい。
【００６０】
［００７１］
競合仲裁キュー４０中に記憶されているメモリ要求の１つ以上のバッチは、１つ以上のスレッドグループから生じていてもよい。例えば、図８は、競合仲裁キュー４０がメモリ要求のバッチ（例えば、メモリ要求のバッチ１からＮ）を記憶している例を図示している。図８の例において、メモリ要求のバッチ１と４は第１のスレッドグループから生じ、メモリ要求のバッチ２は第２のスレッドグループから生じ、メモリ要求のバッチ３と５は第３のスレッドグループから生じ、メモリ要求のバッチＮは第４のスレッドグループから生じている。競合仲裁キュー４０中に記憶されているメモリ要求の１つ以上のバッチは、１つ以上のスレッドグループから生じていてもよいが、アービター４は、競合仲裁を実行するまで、メモリ要求のどのバッチがどのスレッドグループに対応するかを知らないかもしれない。
【００６１】
［００７２］
１つ以上の競合（例えば、実際のまたは潜在的な競合）が、同じスレッドグループから生じるメモリ要求の２つの以上のバッチの間に存在するか否かを決定するように、アービター４は競合仲裁を実行するように構成されていてもよい。このような方法で、アービター４は、効率的かつスケーラブルなアウトオブオーダー実行を可能にするように構成されていてもよい。なぜなら、メモリ要求をメモリ制御装置においてストールさせるよりもむしろ、アービター４は、競合仲裁キューから解放されているメモリ要求をストールするように構成されていてもよいからである。特定のメモリ要求が競合仲裁キュー４０中にストールされる一方で、アービター４は、ストールされたメモリ要求に対応するスレッドグループとは異なるスレッドグループに対応する１つ以上のメモリ要求を解放する（例えば、送る）ように構成されていてもよい。別の例として、アービター４は、効率的かつスケーラブルなアウトオブオーダー実行を可能にするように構成されていてもよい。なぜなら、メモリ要求のバッチをメモリ制御装置においてストールさせるよりもむしろ、アービター４は、競合仲裁キューから解放されているメモリ要求のバッチをストールするように構成されていてもよいからである。メモリ要求の特定のバッチが競合仲裁キュー４０中にストールされる一方で、アービター４は、ストールされたメモリ要求のバッチに対応するスレッドグループとは異なるスレッドグループに対応するメモリ要求の１つ以上の他のバッチを解放する（例えば、送る）ように構成されていてもよい。メモリ要求にまたはメモリ要求のバッチに対応するスレッドグループは、メモリ要求がまたはメモリ要求のバッチが生じるスレッドグループである。
【００６２】
［００７３］
いくつかの例では、競合仲裁は、メモリ要求のバッチにタグ付けされているメタデータに基づいて、競合仲裁キュー中に記憶されているメモリ要求のバッチが生じるスレッドグループを決定するように構成されているアービター４を含んでいてもよい。このような例では、アービター４は、このような決定をメタデータ中に含まれるスレッドグループ識別子に基づくように構成されていてもよい。
【００６３】
［００７４］
図９は、本開示の１つの以上の技術にしたがって、競合仲裁を実行する簡略化した例を図示している。図９中に示す競合仲裁キュー４０の例は、メモリ要求の各バッチが３つのメモリ要求を含む、メモリ要求の３つのバッチを含む簡略化した例である。図９の例において、メモリ要求の第１のバッチは、メモリ要求１−Ｂ１、２−Ｂ１、および、３−Ｂ１を含み、メモリ要求の第２のバッチは、メモリ要求１−Ｂ２、２−Ｂ２、および、３−Ｂ２を含み、メモリ要求の第３のバッチは、メモリ要求１−Ｂ３、２−Ｂ３、および、３−Ｂ３を含んでいる。第１のメタデータＭＤ−Ｂ１は、メモリ要求の第１のバッチにタグ付けされていてもよく、第２のメタデータのＭＤ−Ｂ２は、メモリ要求の第２バッチにタグ付けされていてもよく、第３のメタデータＭＤ−Ｂ３は、メモリ要求の第３のバッチにタグ付けされていてもよい。
【００６４】
［００７５］
図９の例では、メモリ要求の第１および第３のバッチは、スレッドの第１のグループから生じていてもよく、メモリ要求の第２のバッチは、スレッドの第２のグループから生じていてもよい。アービター４は、メモリ要求のバッチにタグ付けされているメタデータを使用して、メモリ要求のバッチの開始点を決定するように構成されていてもよい。いくつかの例では、メモリ要求の第１、第２、および、第３のバッチにそれぞれタグ付けされている第１、第２、および、第３のメタデータは、それぞれバッチ開始識別子を含んでいてもよい。バッチ開始識別子は、メモリ要求のバッチの始めまたは開始を識別する。
【００６５】
［００７６］
他の例では、メモリ要求の第１、第２、および、第３のバッチにそれぞれタグ付けされている第１、第２、および、第３のメタデータは、バッチ開始識別子を含んでいなくてもよい。代わりに、このような例では、アービター４は、メタデータ中に含まれているスレッドグループ識別子を使用して、メモリ要求のバッチの開始点を決定するように構成されていてもよい。例えば、メモリ要求の第１、第２、および、第３のバッチにそれぞれタグ付けされている第１、第２、および、第３のメタデータは、それぞれスレッドグループ識別子を含んでいてもよい。スレッドグループ識別子は、メモリ要求の第１のバッチが生じるスレッドのグループを識別してもよい。図９の例では、メタデータＭＤ−Ｂ１およびＭＤ−Ｂ３中に含まれているスレッドグループ識別子は同じであり、メタデータＭＤ−Ｂ２中に含まれているスレッドグループ識別子は、メタデータＭＤ−Ｂ１およびＭＤ−Ｂ３中に含まれているスレッドグループ識別子とは異なるだろう。
【００６６】
［００７７］
スレッドグループ識別子は、一意的な識別子であってもよい。スレッドグループ識別子は、メモリ要求のバッチがおよび／またはメモリ要求が生じるスレッドを識別してもよい。いくつかの例では、スレッドグループは、処理ユニット１の特定のクライアント（例えば、固定機能頂点フェッチハードウェア）にマッピングされていてもよい。
【００６７】
［００７８］
いくつかの例では、スレッドグループ識別子は、一時的に一意的な識別子または永続的に一意的な識別子であってもよい。例えば、スレッドグループ識別子は、スレッドグループ識別子の値が変わらないにもかかわらず、異なるスレッドグループを一意的に識別するために再使用してもよいという点で、一時的に一意的であってもよい。
【００６８】
［００７９］
一時的に一意的な識別子によって意味されることをさらに説明するために、例を説明する：競合仲裁キューは、メモリ要求の複数のバッチを含んでいてもよく、複数のバッチの間で、メモリ要求の第１の複数のバッチのうちのメモリ要求の各バッチが第１のスレッドグループから生じることを識別するために、それぞれが第１のスレッドグループ識別子でタグ付けされている、メモリ要求の第１の複数のバッチを競合仲裁キューが含んでいてもよい。第１のグループ識別子に対応する任意のサービス提供されない（送信されない）メモリ要求を、競合仲裁キューがもはや含まないことを決定すると、処理ユニット１は、第１のスレッドグループとは異なるスレッドグループから生じるメモリ要求の１つ以上のバッチに対して、第１のスレッドグループ識別子を再使用するように構成されていてもよい。例えば、いったんアービター４が、第１のグループ識別子でタグ付けされているメモリ要求の各バッチに対応するすべてのメモリ要求を解放する（例えば、送る）と、処理ユニット１は、スレッドの第２のグループから生じるメモリ要求の１つ以上のバッチを第１のスレッドグループ識別子でタグ付けするように構成されていてもよく、スレッドの第２のグループは、スレッドの第１のグループとは異なる。このような例では、再使用の準備ができているフラグが各スレッドグループ識別子に関係付けられていてもよい。アービター４は、再使用の準備ができているフラグを、それに対応するスレッドグループ識別子が再使用の準備ができていることを示す値に設定するように構成されていてもよい。対応する再使用の準備ができているフラグが設定されるとき、処理ユニット１は、再使用の準備ができているフラグに対応する値を決定し、スレッドグループ識別子を再使用するように構成されていてもよい。
【００６９】
［００８０］
図４および／または５に対応するタグ付け方法論に関して、ここでの多くの例が説明されたことが理解される。しかしながら、これらの例は、本開示のさまざまな技術を説明するために提供されたことが理解され、このようなことから、図４に対応するタグ付け方法論に関して説明した例は、タグ付け方法論自体が異なることを理解して、図５および／または図６に対応するタグ付け方法論に同様に適用される。例えば、真上で、第1のグループ識別子でタグ付けされているメモリ要求の各バッチに対応するすべてのメモリ要求をいったんアービター４が解放する（例えば、送る）例で、処理ユニット１は、スレッドの第２のグループから生じるメモリ要求の１つ以上のバッチを第１のスレッドグループ識別子でタグ付けするように構成されていてもよく、スレッドの第２のグループは、スレッドの第１のグループとは異なることが説明されている。本開示と一致して、したがって、第１のグループ識別子を有する少なくとも１つのタグ付けされたメモリ要求を含む、メモリ要求の各バッチに対応するすべてのメモリ要求をいったんアービター４が解放する（例えば、送る）別の例において、処理ユニット１は、スレッドの第２のグループから生じるメモリ要求のバッチの１つ以上のメモリ要求を第１のグループ識別子でタグ付けするように構成されていてもよく、スレッドの第２のグループは、スレッドの第１のグループとは異なることも理解される。
【００７０】
［００８１］
図１０は、本開示の１つの以上の技術にしたがって、競合仲裁を実行する簡略化した例を図示している。メタデータとメモリ要求のバッチは、図９に関して説明したものと同じである。しかしながら、図１０は、アービター４が、１つ以上のポインタを利用するように構成されていてもよいことを図示している。例えば、アービター４は、１つ以上のポインタを利用して、キュー中のメモリ要求を通して進行してもよい。各スレッドグループは、いくつかの例では、２つの対応するスレッドグループ特有ポインタ：第１のポインタと第２のポインタとを有していてもよい。第１のポインタは、実行依頼ポインタと呼ばれることがあり、第２のポインタは、完了ポインタと呼ばれることがある。スレッドグループ特有ポインタは、単一のスレッドグループのためだけに使用されるポインタである。例えば、特定のスレッドグループに対応する各ポインタが、特定のスレッドグループとは異なるスレッドグループに対応するメモリ要求をスキップするように、アービター４は、特定のスレッドグループに対応する各ポインタを前進させるように構成されていてもよい。例えば、図１０中に図示されているポインタを以下でより詳細に説明するが、アービター４は、実行依頼ポインタ５０Ａと完了ポインタ５０Ｂの両方が、第１のスレッドグループから生じなかった任意のメモリ要求をスキップするように、実行依頼ポインタ５０Ａと完了ポインタ５０Ｂを進行させるように構成されていてもよい。同様に、アービター４は、実行依頼ポインタ５２Ａと完了ポインタ５２Ｂの両方が、第２のスレッドグループから生じなかった任意のメモリ要求をスキップするように、実行依頼ポインタ５２Ａと完了ポインタ５２Ｂを進行させるように構成されていてもよい。図１０の例は、各スレッドグループに対して２つのポインタを使用して、競合仲裁キュー４０を通してアービター４が進行する時間におけるスナップショットを示している。
【００７１】
［００８２］
図１０の例では、メモリ要求の第１および第３のバッチは、スレッドの第１のグループから生じてもよく、メモリ要求の第２のバッチは、スレッドの第２グループから生じてもよい。実行依頼ポインタ５０Ａと完了ポインタ５０Ｂは、スレッドの第１のグループに対応していてもよく、実行依頼ポインタ５２Ａと完了ポインタ５２Ｂは、スレッドの第２のグループに対応していてもよい。完了ポインタ（例えば、完了ポインタ５０Ｂと５２Ｂ）は、アービター４による競合仲裁キュー４０からの解放に続く、完了ポインタに関係付けられているスレッドのグループに対応する処理が（例えば、メモリ制御装置によって）終了したまたはそうでなければ完了した最後のメモリ要求を示していても（例えば、指していても）よい。いくつかの例では、読み取りメモリ要求の完了は、読み取りメモリ要求に対して、メモリ制御装置によって、データが戻った（例えば、処理ユニット１にまたは処理ユニット１とは異なる上流のクライアントに戻った）ときを指してもよい。他の例では、書き込みメモリ要求の完了は、メモリ制御装置によって、データが消費されたときを指してもよい。メモリ要求が完了すると、処理ユニット１は、完了ポインタをそのメモリ要求に前進させることによって、メモリ要求に完了したと印付けするように構成されていてもよい。いくつかの例では、メモリ要求の完了は、例えば、メモリ制御装置において、アウトオブオーダーで生じてもよい。このような例では、ここで説明する完了ポインタは、完了したと印付けられた要求の連続シーケンスを通して前進させてもよい。
【００７２】
［００８３］
いくつかの例では、対応するメモリ要求が解放された（例えば、メモリ制御装置の下流に送られた）か否かを示す、各メモリ要求に割り振られる単一のビットがあってもよい。（例えば、１の値と、または、対応するメモリ要求が解放されたことを表する値と等しく）セットされているこのようなビットを有するメモリ要求を、実行依頼ポインタが指す場合、処理ユニット１は、実行依頼ポインタを前進させるように構成されていてもよい。（この例では）このようにして、処理ユニット１は、競合仲裁キューからメモリ要求をシーケンシャルに解放するように構成されていてもよい。例えば、処理ユニット１は、競合仲裁キュー中のバッチ区切りをチェックすることによって、バッチ毎のベースでメモリ要求をシーケンシャルに解放するように構成されていてもよい。このような例において、処理ユニット１は、実行依頼ポインタがバッチ区切り（例えば、バッチ開始識別子）に達するまで、競合仲裁キューからバッチのメモリ要求をシーケンシャルに解放するように構成されていてもよい。
【００７３】
［００８４］
図１０の例を参照すると、完了ポインタ５０Ｂは、メモリ要求の第１のバッチのメモリ要求３−Ｂ１を指し、完了ポインタ５２Ｂは、メモリ要求の第２のバッチのメモリ要求１−Ｂ２を指している。実行依頼ポインタ（例えば、実行依頼ポインタ５０Ａおよび５２Ａ）は、アービター４が競合仲裁キュー４０から例えばメモリ制御装置に解放するようにスケジューリングされている、実行依頼ポインタに関係付けられているスレッドのグループに対応する現在のメモリ要求を示し（例えば、指し）ていてもよい。例えば、図１０の例では、実行依頼ポインタ５０Ａは、メモリ要求の第３のバッチのメモリ要求１−Ｂ３を指し、実行依頼ポインタ５２Ａは、メモリ要求の第２のバッチのメモリ要求３−Ｂ２を指している。
【００７４】
［００８５］
完了ポインタと実行依頼ポインタとの間の任意のメモリ要求は、解放のためにクリアされているか、または、例えば、メモリ制御装置による実行のために、競合仲裁キュー４０から、アービター４により、実際に解放されている。例えば、メモリ要求２−Ｂ２は、解放のためにクリアされていてもよく、または、競合仲裁キュー４０から、アービター４により、実際に解放されていてもよい。
【００７５】
［００８６］
アービターは、他のポインタから独立しておよびこれらと並行して、各スレッドグループに対応するポインタを進めるあるいはそうでなければ移動または前進させるように構成されていてもよい。例えば、アービターは、実行依頼ポインタ５２Ａと完了ポインタ５２Ｂから独立して、および、これらと並行して、実行依頼ポインタ５０Ａと完了ポインタ５０Ｂを進めるように構成されていてもよい。
【００７６】
［００８７］
いくつかの例では、アービター４は、スレッドグループ内の競合を防止するために、競合仲裁を実行するように構成されていてもよい。ここで使用するように、競合はまた、ハザードと呼ばれることがある。アービター４は、特定のスレッドグループに対する実行依頼ポインタを、ストールされたメモリ要求と呼ばれることがある特定のメモリ要求上にとどまらせるように構成されていてもよい。いくつかの例では、完了ポインタがキュー中のストールされたメモリ要求に先行する最初のメモリ要求を指すまで、ストールされたメモリ要求と、ストールされたメモリ要求と同じスレッドグループから生じる、競合仲裁キュー４０中に記憶されている任意の後続のメモリ要求とは、アービター４によって競合仲裁キューから解放されないかもしれない。例えば、図１０の例では、メモリ要求３−Ｂ１は、メモリ要求１−Ｂ３に先行する最初のメモリ要求であってもよい。
【００７７】
［００８８］
他の例では、メモリ要求のバッチにタグ付けされているメタデータがバッチ開始識別子を含む例では、アービター４は、特定のスレッドグループに対する実行依頼ポインタを、特定のバッチ開始識別子上にとどまらせるように構成されていてもよく、これは、特定のバッチ開始識別子が関係付けられているスレッドグループに対応する任意の後続のメモリ要求の解放をストールするように、同様に機能するかもしれない。このような例では、完了ポインタがキュー中の特定のバッチ開始識別子に先行する最初のメモリ要求を指すまで、実行依頼ポインタは、キューの前方に進行しないかもしれない。例えば、図１０の例では、メモリ要求３−Ｂ１が、メタデータＭＤ−Ｂ３中のバッチ開始識別子に先行する最初のメモリ要求であってもよい。この例では、図示したように、メモリ要求１−Ｂ３の代わりに、メタデータＭＤ−Ｂ３中のバッチ開始識別子上で実行依頼ポインタ５０Ａがストールすることが理解される。
【００７８】
［００８９］
アービター４は、書き込みメモリ要求の連続するバッチを順番に並べることにより、ライトアフターライト競合を識別して解消するように構成されていてもよい。アービター４は、書き込みメモリ要求のバッチが後に続く読み取りメモリ要求のバッチを順番に並べることにより、リードアフターライト競合を識別して解消するように構成されていてもよい。アービター４は、アトミックメモリ要求の連続するバッチを順番に並べるとともに、アトミックメモリ動作のバッチに先行する非アトミックメモリ要求の任意のバッチとアトミックメモリ要求のバッチとを順番に並べることにより、アトミックメモリアクセス競合を識別して解消するように構成されていてもよい。図１１Ａ〜Ｅは、どのように、アービター４が可能性あるまたは実際の競合を解消するように構成されているかのさまざまな例を図示している。
【００７９】
［００９０］
図１１Ａ〜Ｅのそれぞれは、単一のスレッドグループから生じるメモリ要求のバッチを図示している。各ブロックは、メモリ要求のバッチではないが代わりにフェンスを表すフェンスブロックを除き、メモリ要求のバッチを表している。例えば、図１１Ａは、読み取りメモリ要求のバッチが続く、書き込みメモリ要求の２つのバッチが続く、読み取りメモリ要求の２つのバッチを含んでいる。これらのバッチが、競合仲裁キュー４０中で表される場合、２つの描いたバッチ間に記憶されている、異なるスレッドグループから生じるメモリ要求の少なくとも１つのバッチを（必ずしもではないが）有していそうであるという点で、図１１Ａ〜Ｇは、概念的であることが理解される。
【００８０】
［００９１］
図１１Ａの例では、アービター４は、読み取り要求のシーケンシャルなバッチに渡って、書き込み要求の第１のバッチ（バッチ３）の後に、実行依頼ポインタを前進させるように構成されていてもよい。しかしながら、アービター４は、ライトアフターライトシナリオが実際のまたは潜在的な競合を構成するかもしれないことを決定するように構成されていてもよい。したがって、アービター４は、書き込み要求の第２の連続するバッチ（バッチ４）において、実行依頼ポインタを停止（例えば、ストール）するように構成されていてもよい。
【００８１】
［００９２］
図１１Ｂの例では、アービター４は、第１のリードアフターライトシナリオまで、実行依頼ポインタを進行するように構成されていてもよい。例えば、アービター４は、リードアフターライトシナリオが実際のまたは潜在的な競合を構成するかもしれないことを決定するように構成されていてもよい。したがって、アービター４は、書き込み要求のバッチ（バッチ１）に続く読み取り要求のバッチ（バッチ２）において、実行依頼ポインタを停止（例えば、ストール）するように構成されていてもよい。
【００８２】
［００９３］
図１１Ｃの例では、アービター４は、バッチ１と２の間のリードアフターライト競合を解消した後、実行依頼ポインタをバッチ４に進行させるように構成されていてもよい。例えば、アービター４は、アトミックメモリ要求の連続するバッチが実際のまたは潜在的な競合を構成するかもしれないことを決定するように構成されていてもよい。したがって、アービター４は、アトミックメモリ要求の第１のバッチ（バッチ３）に続くアトミックメモリ要求の第２の連続するバッチ（バッチ４）において、実行依頼ポインタを停止（例えば、ストール）するように構成されていてもよい。
【００８３】
［００９４］
図１１Ｄの例では、アービター４は、バッチ１と２の間のリードアフターライト競合を解消した後、実行依頼ポインタをバッチ３に進行させるように構成されていてもよい。例えば、アービター４は、アトミックメモリ要求が、非アトミックメモリ要求のバッチとの、実際のまたは潜在的な競合を構成するかもしれないことを決定するように構成されていてもよい。したがって、アービター４は、非アトミックメモリ要求の第１の先行するバッチ（バッチ２）に続くアトミックメモリ要求の第１のバッチ（バッチ３）において、実行依頼ポインタを停止（例えば、ストール）するように構成されていてもよい。
【００８４】
［００９５］
図１１Ｅの例では、完了ポインタが追いつくまで（例えば、完了ポインタがバッチ２に達するとき）、アービター４は、実行依頼ポインタをフェンスに進行させるように構成されていてもよい。いくつかの例では、フェンスは、カーネル幅、シェーダー幅フェンス、ワークグループフェンス、サブグループフェンス、あるいは、他の何らかのフェンスまたはバリアであってもよい。アービター４は、完了ポインタがフェンスに達すると、メモリ要求の１つ以上のバッチを順序付けるように構成されていてもよい。いくつかの例では、フェンスは、１つ以上のスレッドグループに対応する１つ以上の実行依頼ポインタを停止させてもよい。このような例では、フェンスはまた、フェンスが実行依頼ポインタを停止させる１つ以上のスレッドグループとは異なる１つ以上のスレッドグループに対応する１つ以上の実行依頼ポインタが、フェンスを通過できる（例えば、フェンスがこのような実行依頼ポインタを停止させない）ようにしてもよい。他の例では、フェンスは、すべての実行依頼ポインタを停止させてもよい。特定のスレッドグループに対応する実行依頼ポインタの前進を停止させることにより、処理ユニット１は、フェンスに対応するメモリ要求のバッチが完了するまで、その特定のスレッドグループに対する次のバッチの実行をストールするように構成されていてもよい。
【００８５】
［００９６］
ここで説明した任意のステップ、機能、特徴、方法、および、これらに類するものを実行するように構成されている処理ユニット１および／またはアービター４への参照は、いくつかの例では、説明したステップ、機能、特徴、方法、および、これらに類するものをもたらす１つ以上の命令を実行するように構成されている処理ユニット１および／またはアービター４を指してもよい。いくつかの例では、１つ以上の命令は、処理ユニット１および／またはアービター４によってアクセス可能なメモリ上に記憶されていてもよい。例として、ここで説明した任意のステップ、機能、特徴、方法、および、これらに類するものを実行するように構成されている処理ユニット１および／またはアービター４への参照は、いくつかの例では、説明したステップ、機能、特徴、方法、および、これらに類するものをもたらす１つ以上の命令を実行するように構成されている、任意の計算デバイス、計算ユニット、および／または、処理ユニット１の処理要素を指していてもよい。
【００８６】
［００９７］
図１２は、本開示の例示的な方法を示すフローチャートである。図１２の方法は、１つ以上の処理ユニット（例えば、１つの以上のＣＰＵ、１つ以上のＧＰＵ、１つ以上の並列処理ユニット（例えば、並列処理を実行するように構成されている任意の処理ユニット）、１つ以上のＳｏＣ、または、これらの任意の組み合わせ）によって実行してもよい。図１２は、本開示の１つ以上の技術と一致する１つの例示的な方法を描いている。
【００８７】
［００９８］
処理ユニット１は、メモリ要求のバッチを発生させるように構成されていてもよい（１００）。メモリ要求の各バッチは、スレッドのそれぞれのグループの実行からそれぞれ生じていてもよい。１つの例として、メモリ要求の１０個の発生されたバッチのうち、メモリ要求の１０個のバッチのうちの４つがスレッドの第１のグループから生じていてもよく、メモリ要求の１０個のバッチのうちの２つがスレッドの第２のグループから生じていてもよく、メモリ要求の１０個のバッチのうちの２つがスレッドの第３のグループから生じていてもよく、メモリ要求の１０個のバッチのうちの１つがスレッドの第４のグループから生じていてもよく、メモリ要求の１０個のバッチのうちの１つがスレッドの第５のグループから生じていてもよい。このように、メモリ要求の各バッチがスレッドのそれぞれのグループの実行からそれぞれ生じることは、スレッドのバッチがスレッドの単一のグループから生じることを意味することが理解される。
【００８８】
［００９９］
いくつかの例では、処理ユニット１は、スレッドのグループを実行することにより、メモリ要求のバッチを発生させるように構成されていてもよい。例えば、スレッドのグループの各スレッドは、処理ユニット１の処理要素によって実行されてもよい。スレッドのグループの各スレッドは、処理ユニット１によって並行して実行されてもよい。例えば、スレッドのグループが３２個のスレッドを含む場合、３２個のスレッドのそれぞれは、並行して、処理ユニット１の異なる処理要素上で実行されてもよい。いくつかの例では、処理要素は、処理ユニット１の計算ユニットの一部とみなされてもよい。処理ユニット１は、各計算ユニットが複数の処理要素を含んでいる、複数の計算ユニットを含んでいてもよい。
【００８９】
［０１００］
処理要素によるスレッドの実行は、結果として、メモリ要求の発生となる。いくつかの例では、処理要素は、メモリ要求をメタデータでタグ付けし、メタデータでタグ付けされているメモリ要求を、競合仲裁キュー（例えば、競合仲裁キュー４０）に送るように構成されていてもよい。他の例では、処理要素は、メモリ要求をメタデータでタグ付けし、メタデータでタグ付けされているメモリ要求を、処理ユニット１のアービター（例えば、アービター４）に送るように構成されていてもよい。このような例では、アービターは、受け取ったメモリ要求とメタデータとを競合仲裁キュー（例えば、競合仲裁キュー４０）に記憶させるように構成されていてもよい。他の例では、処理要素は、メモリ要求を処理ユニット１のアービター（例えば、アービター４）に送るように構成されていてもよい。このような例では、アービターは、受け取ったメモリ要求をメタデータでタグ付けし、受け取ったメモリ要求とメタデータとを競合仲裁キュー（例えば、競合仲裁キュー４０）中に記憶させるように構成されていてもよい。他の例では、処理ユニット１は、それぞれ実行ＳＩＭＤ命令を実行する複数のスレッドグループを実行するように構成されていてもよい。複数のスレッドグループが、メモリアクセスのＳＩＭＤ命令を実行するとともに、処理ユニット１は、（例えば、仲裁プロセスを通して）スレッドグループを選択するように構成されていてもよい。処理ユニット１は、選択したスレッドグループのスレッドからメモリ要求のセットを発生させるように構成されていてもよい。いくつかの例では、処理ユニット１は、その数を減らすために、選択したスレッドグループのスレッドを組み合わせるおよび合体させるように構成されていてもよい。処理ユニット１は、選択したスレッドグループのスレッド（例えば、すべてのスレッド、あるいは、スレッドを組み合わせるおよび／または合体させることから結果として生じた低減された数）を実行するように構成されていてもよく、メモリ要求の結果として生じたセットは、選択したスレッドグループＩＤ（例えば、選択したスレッドグループに対するスレッドグループ識別子）でタグ付けされてもよい。メモリ要求のバッチは、その後、例えば、メモリ要求のバッチを仲裁するために、アービター４および／または競合仲裁キュー（例えば、競合仲裁キュー４０）に送られてもよい。メモリ要求のバッチは、例えば、バッチ区切りトークンとしても呼ばれることがある、ここで説明したバッチ開始識別子のような、バッチ識別子によって区切られてもよい。バッチ識別子は、競合仲裁キュー中に記憶されてもよい。
【００９０】
［０１０１］
処理ユニット１は、メモリ要求のバッチのうちのメモリ要求の第１のバッチを第１のメタデータでタグ付けするように構成されていてもよい（１０２）。第１のメタデータは、メモリ要求の第１のバッチが生じるスレッドのグループを識別するデータを含んでいてもよい。メモリ要求の第１のバッチが生じるスレッドのグループは、スレッドの第１のグループであってもよい。処理ユニット１は、メモリ要求のバッチのうちのメモリ要求の第２のバッチを第２のメタデータでタグ付けするように構成されていてもよい（１０４）。第２のメタデータは、メモリ要求の第２バッチが生じるスレッドのグループを識別するデータを含んでいてもよい。メモリ要求の第２のバッチが生じるスレッドのグループは、スレッドの第１のグループであってもよい。処理ユニット１は、メモリ要求の各バッチが生じるスレッドのグループを識別するメタデータで、メモリ要求のバッチをタグ付けするように構成されていてもよいことが理解される。
【００９１】
［０１０２］
処理ユニット１は、第１のメモリまたはメモリ制御装置にメモリ要求の第１のバッチの任意のメモリ要求を送る前に、メモリ要求の第１のバッチと第１のメタデータとを競合仲裁キュー中に記憶させるように構成されていてもよい（１０６）。処理ユニット１は、第１のメモリまたはメモリ制御装置にメモリ要求の第２のバッチの任意のメモリ要求を送る前に、メモリ要求の第２のバッチと第２のメタデータとを競合仲裁キュー中に記憶させるように構成されていてもよい（１０８）。いくつかの例では、第１のメモリは、処理ユニット１に対して外部の任意のメモリ（例えば、外部メモリ５Ａ）を含んでいてもよい。いくつかの例では、メモリ制御装置は、第１のメモリに通信可能に結合されている任意のメモリ制御装置（例えば、第１メモリが外部メモリ５Ａである例では、メモリ制御装置５Ｂ）を含んでいてもよい。
【００９２】
［０１０３］
処理ユニット１は、競合仲裁を実行するように構成されていてもよい（１１０）。例えば、処理ユニット１は、第１および第２のメタデータを使用して、競合仲裁を実行するように構成されていてもよい。別の例として、処理ユニット１は、第１のメタデータと第２のメタデータとを使用して、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行するように構成されていてもよい。ここで使用されるように、スレッドの同じグループから生じるメモリ要求の２つのバッチ間で競合仲裁を実行することへの参照は、メモリ要求の２つのバッチが生じるスレッドのグループとは異なるスレッドのグループから生じる、競合仲裁キュー中に記憶されているメモリ要求の他の何らかのバッチを考慮することなく（例えば、無視してまたはスキップして）、メモリ要求の２つのバッチ間で競合仲裁を実行することを指す。例えば、上記で説明したように、処理ユニット１は、第１のメタデータと第２のメタデータとを使用して、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチの間だけで競合仲裁を実行するように構成されていてもよい。これは、メモリ要求の第１および第２のバッチが生じるスレッドのグループとは異なるスレッドのグループから生じる、競合仲裁キュー中に記憶されているメモリ要求の他の何らかのバッチを考慮することなく（例えば、無視してまたはスキップして）、メモリ要求の第１および第２のバッチ間で競合仲裁を実行することを意味するように理解される。
【００９３】
［０１０４］
このような例では、メモリ要求の第２のバッチは、メモリ要求の第１のバッチの後に競合仲裁キュー中に記憶されてもよい。いくつかの例では、競合仲裁キュー中に記憶されているメモリ要求の少なくとも１つの他のバッチは、スレッドの第１のグループとは異なるスレッドの少なくとも１つのグループから生じる。このような例では、競合仲裁キュー中に記憶されるメモリ要求の少なくとも１つの他のバッチは、メモリ要求の第１のバッチとメモリ要求の第２のバッチと間に記憶されてもよい。
【００９４】
［０１０５］
いくつかの例では、処理ユニット１は、第１のメタデータを使用して、スレッドの第１のグループから生じるメモリ要求の第１のバッチを決定し、第２のメタデータを使用して、スレッドの第１のグループから生じるメモリ要求の第２のバッチを決定するように構成されることにより、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行するように構成されていてもよい。例えば、処理ユニット１は、メモリ要求の第１のバッチが生じるスレッドのグループを識別するデータと、メモリ要求の第２のバッチが生じるスレッドのグループを識別するデータとが一致することを決定するように構成されることにより、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行するように構成されていてもよい。このようなデータの一致は、メモリ要求の２つのバッチ（例えば、メモリ要求の第１および第２のバッチ）が、スレッドの同じグループ（この例では第１のスレッドグループ）から生じることを示す。
【００９５】
［０１０６］
いくつかの例では、メモリ要求の第１のバッチが生じるスレッドのグループを識別するデータは、第１のスレッドグループ識別子であり、メモリ要求の第２のバッチが生じるスレッドのグループを識別するデータは、第１のスレッドグループ識別子である。このような例では、処理ユニット１は、メモリ要求の第１のバッチにタグ付けされているスレッドグループ識別子がメモリ要求の第２のバッチにタグ付けされているスレッドグループ識別子と一致することを決定するように構成されることにより、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行するように構成されていてもよい。２つのバッチの間におけるこのようなデータ（例えば、スレッドのグループ識別子）の一致は、メモリ要求の２つのバッチ（例えば、メモリ要求の第１および第２のバッチ）が、スレッドの同じグループ（この例では、第１のスレッドグループ）から生じることを示す。
【００９６】
［０１０７］
いくつかの例では、処理ユニット１は、処理ユニット１によって解消される、メモリ要求の第１のバッチとメモリ要求の第２のバッチとの間に競合があるか否かを決定するように構成されることにより、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行するように構成されていてもよい。処理ユニット１は、メモリ要求の第１および第２のバッチが同じスレッドのグループから生じる場合だけ、処理ユニット１によって解消される、メモリ要求の第１のバッチとメモリ要求の第２のバッチとの間の競合があるか否かを決定するように構成されていてもよい。したがって、処理ユニット１は、メモリ要求の第１および第２のバッチがスレッドの同じグループから生じることを決定することに基づいて（例えば、スレッドの第１および第２のバッチが第１のスレッドグループから生じることを決定することに基づいて）、処理ユニット１によって解消される、メモリ要求の第１のバッチとメモリ要求の第２のバッチとの間の競合があるか否かを決定するように構成されていてもよい。
【００９７】
［０１０８］
いくつかの例では、処理ユニット１は、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行する前に、間に、および／または、後に、メモリ要求の第１のバッチの１つ以上のメモリ要求を、競合仲裁キューから第１のメモリまたはメモリ制御装置に送るように構成されていてもよい。例えば、処理ユニット１は、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行する前に、メモリ要求の第１のバッチのすべてまたはすべてより少ない（例えば、１つ以上の）メモリ要求を、競合仲裁キューから第１のメモリまたはメモリ制御装置に送るように構成されていてもよい。別の例として、処理ユニット1は、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行する間に、メモリ要求の第１のバッチのすべてまたはすべてより少ない（例えば、１つ以上の）メモリ要求を、競合仲裁キューから第１のメモリまたはメモリ制御装置に送るように構成されていてもよい。別の例として、処理ユニット１は、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行した後に、メモリ要求の第１のバッチのすべてまたはすべてより少ない（例えば、１つ以上の）メモリ要求を、競合仲裁キューから第１のメモリまたはメモリ制御装置に送るように構成されていてもよい。
【００９８】
［０１０９］
別の例として、処理ユニット１は、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行する前に、間に、または、後に、メモリ要求の第１のバッチの少なくとも１つのメモリ要求を、競合仲裁キューから第１のメモリまたはメモリ制御装置に送るように構成されていてもよい。このような例では、少なくとも１つのメモリ要求（例えば、第１のメモリ要求）は、競合仲裁を実行する前に送られ、少なくとも１つのメモリ要求（例えば、第２のメモリ要求）は、競合仲裁を実行する間に送られ、少なくとも１つのメモリ要求（例えば、第３のメモリ要求）は、競合仲裁を実行した後に送られることが理解される。別の例として、処理ユニット1は、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行する間におよび後に、メモリ要求の第１のバッチの少なくとも１つのメモリ要求を、競合仲裁キューから第１のメモリまたはメモリ制御装置に送るように構成されていてもよい。このような例では、少なくとも１つのメモリ要求（例えば、第１のメモリ要求）は、競合仲裁を実行する間に送られ、少なくとも１つのメモリ要求（例えば、第２のメモリ要求）は、競合仲裁を実行した後に送られることが理解される。
【００９９】
［０１１０］
ここで使用されるように、用語競合は、処理ユニット１が解消するように構成されている競合を指してもよい。用語競合は、いくつかの例では、実際の競合または潜在的な競合を指してもよい。例えば、実際の競合は、シーケンス内でメモリ要求の順序を変更することが、シーケンスが影響を及ぼすメモリロケーションのセット上のシーケンスの効果を変更させる状況に対応してもよい。このような例において、実際の競合は、（例えば、ここで説明した技術によって抑制されない）処理することが可能である場合、結果として、メモリ要求の順序付けが維持される場合にメモリロケーションのセット中に記憶されるものとは異なる、メモリロケーションのセット中に記憶される値になるかもしれない。別の例として、潜在的な競合は、シーケンス内でメモリ要求の順序を変更することが、関係するメモリ要求のパラメータのある組み合わせ（例えば、メモリ要求によって指定されるアドレス）が生じるときのような、実際の競合につながるかもしれない状況に対応してもよい。いくつかの例では、処理ユニット１は、ここで説明する技術にしたがって、メモリ要求の間におよび／またはメモリ要求のバッチの間に競合があることを決定すると、メモリ要求の再順序付けを抑制してもよい。例えば、処理ユニット１は、競合があることを決定すると、特定のスレッドグループに対応する、メモリ要求の１つ以上のバッチのおよび／または１つ以上のメモリ要求の解放をストールするように構成されていてもよい。ストールの間、処理ユニット１は、競合がないことを決定すると、異なるスレッドグループに対応する、メモリ要求の１つ以上のバッチをおよび／または１つ以上のメモリ要求を解放するように構成されていてもよい。
【０１００】
［０１１１］
いくつかの例では、処理ユニット１によって解消される、メモリ要求の第１のバッチとメモリ要求の第２のバッチとの間の競合がないことを決定すると、メモリ要求の第１のバッチとメモリ要求の第２のバッチとを、競合仲裁キューから第１のメモリまたはメモリ制御装置に送るように構成されることにより、処理ユニット１は、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行するように構成されていてもよい。例えば、メモリ要求の第１のバッチのメモリ要求を送ることと、メモリ要求の第１のバッチの各メモリ要求が確実に実行されるようにストールすることなく、メモリ要求の第２のバッチを送ることとにより、処理ユニット１は、競合仲裁キューを通して進行するように構成されていてもよい。
【０１０１】
［０１１２］
いくつかの例では、処理ユニット１は、（スレッドグループに対する先入れ先出しスキームにしたがって）競合仲裁キュー中に記憶された順序で、同じスレッドグループから生じるメモリ要求を送るように構成されていてもよい。ここで説明するように、処理ユニット１は、競合の場合にストールすることによって、メモリ要求を送ることを中断するように構成されていてもよい。競合の場合、たとえ、メモリ要求のバッチに対してストールが起こったとしても、たとえ、メモリ要求のストールされたバッチに対応するスレッドのグループとは異なるスレッドのグループから生じたメモリ要求の異なるバッチからのメモリ要求が送らるとしても、処理ユニット１は、ストールが解除されるまたはそうでなければ取り除かれると、（例えば、スレッドグループに対する先入れ先出しスキームにしたがって）競合仲裁キュー中に記憶された順序で、同じスレッドグループから生じるメモリ要求を送ることを継続するように構成されていてもよい。
【０１０２】
［０１１３］
いくつかの例では、処理ユニット１によって解消される、メモリ要求の第１のバッチとメモリ要求の第２のバッチとの間の競合がないことを決定すると、メモリ要求の第１のバッチのすべてのメモリ要求に対する処理が完了するまで、競合仲裁キューから第１のメモリまたはメモリ制御装置にメモリ要求の第２のバッチを送ることをストールしないように構成されることにより、処理ユニット１は、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行するように構成されていてもよい。
【０１０３】
［０１１４］
いくつかの例において、処理ユニット１によって解消される、メモリ要求の第１のバッチとメモリ要求の第２のバッチとの間の競合があることを決定すると、メモリ要求の第１のバッチのすべてのメモリ要求に対する処理が完了するまで、競合仲裁キューから第１のメモリまたはメモリ制御装置にメモリ要求の第２のバッチを送ることをストールするように構成されることにより、処理ユニット１は、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行するように構成されていてもよい。処理ユニット１は、多数の例に関して上記で説明したように、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行する前に、間に、後に、競合仲裁キューから第１のメモリまたはメモリ制御装置にメモリ要求の第１のバッチの１つ以上のメモリ要求を送るように構成されていてもよい。いくつかの例では、スレッドの第１のグループから生じるメモリ要求の第２のバッチを送ることをストールした後、および、スレッドの第１のグループから生じるメモリ要求の第２のバッチを第１のメモリまたはメモリ制御装置に送る前に、処理ユニット１は、スレッドの第２のグループから生じるメモリ要求の第３のバッチを、第１のメモリまたはメモリ制御装置に送るように構成されていてもよい。
【０１０４】
［０１１５］
いくつかの例では、処理ユニット１は、メモリ要求の各バッチのバッチタイプに基づいて、メモリ要求の２つのバッチの間に競合があるか否かを決定するように構成されていてもよい。ここで使用するように、用語バッチタイプは、メモリ要求の特定のバッチが含む、メモリ要求のタイプを指してもよい。例えば、読み取りメモリ要求のバッチは、読み取りのバッチタイプを有しているだろう。別の例として、書き込みメモリ要求のバッチは、書き込みのバッチタイプを有しているだろう。処理ユニット１は、メモリ要求のバッチのバッチタイプを決定するように構成されていてもよい。例えば、処理ユニット１は、メモリ要求が発生されるスレッドに対応する動作タイプを決定することにより、メモリ要求のバッチのバッチタイプを決定するように構成されていてもよい。別の例として、例えば、処理ユニット１は、メモリ要求の発生をさせるＳＩＭＤ命令に対応する動作タイプを決定することにより、メモリ要求のバッチのバッチタイプを決定するように構成されていてもよい。
【０１０５】
［０１１６］
例えば、処理ユニット１は、メモリ要求の第１のバッチのバッチタイプとメモリ要求の第２のバッチのバッチタイプとに基づいて、処理ユニット１によって解消される、メモリ要求の第１のバッチとメモリ要求の第２のバッチとの間の競合があるか否かを決定するように構成されていてもよい。このような例では、メモリ要求の第１のバッチのバッチタイプが書き込みであり、メモリ要求の第２のバッチのバッチタイプが書き込みであるとき、処理ユニット１によって解消される、メモリ要求の第１のバッチとメモリ要求の第２のバッチとの間の競合があることを決定するように構成されていてもよい。別の例として、処理ユニット１は、メモリ要求の第２のバッチがメモリ要求の第１のバッチの後に競合仲裁キュー中に位置付けられている場合に、メモリ要求の第１のバッチのバッチタイプが読み取りであり、メモリ要求の第２のバッチのバッチタイプが読み取りであるとき、処理ユニット１によって解消される、メモリ要求の第１のバッチとメモリ要求の第２のバッチとの間の競合があることを決定するように構成されていてもよい。
【０１０６】
［０１１７］
図１２に関して説明したメモリ要求の第１および第２のバッチが例であることが理解される。上記で説明したように、処理ユニット１は、メモリ要求の各バッチが生じるスレッドのグループを識別するメタデータで、メモリ要求のバッチをタグ付けするように構成されていてもよい。メタデータは、メモリ要求の特定のバッチが生じるスレッドのグループを識別するデータを含んでいてもよい。
【０１０７】
［０１１８］
例えば、処理ユニット１は、メモリ要求のバッチのうちのメモリ要求の第３のバッチを第３のメタデータでタグ付けするように構成されていてもよい。第３のメタデータは、メモリ要求の第３のバッチが生じるスレッドのグループを識別するデータを含んでいてもよい。メモリ要求の第３のバッチが生じるスレッドのグループは、スレッドの第１のグループであってもよい。この例では、処理ユニット１は、メモリ要求の第３のバッチの任意のメモリ要求を第１のメモリまたはメモリ制御装置に送る前に、メモリ要求の第３のバッチと第３のメタデータとを競合仲裁キュー中に記憶させるように構成されていてもよい。メモリ要求の第２のバッチは、メモリ要求の第１のバッチの後に、競合仲裁キュー中に記憶されてもよく、メモリ要求の第３のバッチは、メモリ要求の第２のバッチ後に、競合仲裁キュー中に記憶されてもよい。処理ユニット１は、メモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行することに関してここで説明したのと類似する方法で、第２のメタデータと第３のメタデータとを使用して、競合仲裁キュー中に記憶されているメモリ要求の第２のバッチとメモリ要求の第３のバッチとの間だけで競合仲裁を実行するように構成されていてもよい。いくつかの例では、処理ユニット１は、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけでの競合仲裁を実行した後、競合仲裁キューに記憶されているメモリ要求の第２のバッチとメモリ要求の第３のバッチとの間だけで競合仲裁を実行するように構成されていてもよい。他の例では、処理ユニット１は、競合仲裁キュー中に記憶されているメモリ要求の第２のバッチとメモリ要求の第３のバッチとの間だけで競合仲裁することと、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁することを、並行して実行するように構成されていてもよい。
【０１０８】
［０１１９］
前の段落で説明した例では、第２のメタデータを使用して、メモリ要求の第１のバッチがスレッドの第１のグループから生じることを決定し、第３のメタデータを使用して、メモリ要求の第２のバッチがスレッドの第１のグループから生じることを決定するように構成されることにより、処理ユニット１は、競合仲裁キュー中に記憶されているメモリ要求の第２のバッチとメモリ要求の第３のバッチとの間だけで競合仲裁を実行するように構成されていてもよい。例えば、メモリ要求の第２のバッチが生じるスレッドのグループを識別するデータと、メモリ要求の第３のバッチが生じるメモリ要求の第３のバッチが生じるスレッドのグループを識別するデータとが一致することを決定するように構成されることにより、処理ユニット１は、競合仲裁キュー中に記憶されているメモリ要求の第２のバッチとメモリ要求の第３のバッチとの間だけで競合仲裁を実行するように構成されていてもよい。このようなデータの一致は、メモリ要求の２つバッチ（例えば、メモリ要求の第２および第３のバッチ）がスレッドの同じグループ（この例では、第１のスレッドグループ）から生じていることを示している。
【０１０９】
［０１２０］
いくつかの例では、上記で説明したように、メモリ要求の第２のバッチが生じるスレッドのグループを識別するデータは、第１スレッドのグループ識別子であり、メモリ要求の第３のバッチが生じるスレッドのグループを識別するデータは、第１のスレッドのグループの識別子である。このような例では、メモリ要求の第２のバッチにタグ付けされているスレッドグループ識別子が、メモリ要求の第３のバッチにタグ付けされているスレッドグループ識別子と一致することを決定するように構成されることにより、処理ユニット１は、競合仲裁キュー中に記憶されているメモリ要求の第２のバッチとメモリ要求の第３のバッチとの間だけで競合仲裁を実行するように構成されていてもよい。２つのバッチ間のこのようなデータ（例えば、スレッドグループ識別子）の一致は、メモリ要求の２つのバッチ（例えば、メモリ要求の第２および第３のバッチ）がスレッドの同じグループ（この例では、第１のスレッドグループ）から生じることを示している。
【０１１０】
［０１２１］
いくつかの例では、処理ユニット１によって解消される、メモリ要求の第２のバッチとメモリ要求の第３のバッチとの間の競合があるか否かを決定するように構成されることにより、処理ユニット１は、競合仲裁キュー中に記憶されているメモリ要求の第２のバッチとメモリ要求の第３のバッチとの間だけで競合仲裁を実行するように構成されていてもよい。処理ユニット１は、メモリ要求の第２および第３のバッチがスレッドの同じグループから生じる場合だけ、処理ユニット１によって解消される、メモリ要求の第２のバッチとメモリ要求の第３のバッチとの間の競合があるか否かを決定するように構成されていてもよい。したがって、処理ユニット１は、メモリ要求の第２および第３のバッチがスレッドの同じグループから生じることを決定することに基づいて（例えば、スレッドの第２および第３のバッチが第１のスレッドグループから生じることを決定することに基づいて）、処理ユニット１によって解消される、メモリ要求の第２のバッチとメモリ要求の第３のバッチとの間の競合があるか否かを決定するように構成されていてもよい。
【０１１１】
［０１２２］
いくつかの例では、処理ユニット１は、競合仲裁キュー中に記憶されているメモリ要求の第２のバッチとメモリ要求の第３のバッチとの間だけで競合仲裁を実行する前に、間に、および／または、後に、メモリ要求の第２のバッチの１つ以上のメモリ要求を、競合仲裁キューから第１のメモリまたはメモリ制御装置に送るように構成されていてもよい。例えば、処理ユニット１は、競合仲裁キュー中に記憶されているメモリ要求の第２のバッチとメモリ要求の第３のバッチとの間だけで競合仲裁を実行する前に、メモリ要求の第２のバッチのすべてまたはすべてより少ない（例えば、１つ以上の）メモリ要求を、競合仲裁キューから第１のメモリまたはメモリ制御装置に送るように構成されていてもよい。別の例として、処理ユニット１は、競合仲裁キュー中に記憶されているメモリ要求の第２のバッチとメモリ要求の第３のバッチとの間だけで競合仲裁を実行する間に、メモリ要求の第２のバッチのすべてまたはすべてより少ない（例えば、１つ以上の）メモリ要求を、競合仲裁キューから第１のメモリまたはメモリ制御装置に送るように構成されていてもよい。別の例として、処理ユニット１は、競合仲裁キュー中に記憶されているメモリ要求の第２のバッチとメモリ要求の第３のバッチとの間だけで競合仲裁を実行した後に、メモリ要求の第２のバッチのすべてまたはすべてより少ない（例えば、１つ以上の）メモリ要求を、競合仲裁キューから第１のメモリまたはメモリ制御装置に送るように構成されていてもよい。
【０１１２】
［０１２３］
別の例として、処理ユニット１は、競合仲裁キュー中に記憶されているメモリ要求の第２のバッチとメモリ要求の第３のバッチとの間だけで競合仲裁を実行する前に、間に、および、後に、メモリ要求の第２のバッチの少なくとも１つのメモリ要求を、競合仲裁キューから第１のメモリまたはメモリ制御装置に送るように構成されていてもよい。このような例では、少なくとも１つのメモリ要求（例えば、第１のメモリ要求）は、競合仲裁を実行する前に送られ、少なくとも１つのメモリ要求（例えば、第２のメモリ要求）は、競合仲裁を実行する間に送られ、少なくとも１つのメモリ要求（例えば、第３のメモリ要求）は、競合仲裁を実行した後に送られることが理解される。別の例として、処理ユニット１は、競合仲裁キュー中に記憶されているメモリ要求の第２のバッチとメモリ要求の第３のバッチとの間だけで競合仲裁を実行する間に、および、後に、メモリ要求の第２のバッチの少なくとも１つのメモリ要求を、競合仲裁キューから第１のメモリまたはメモリ制御装置に送るように構成されていてもよい。このような例では、少なくとも１つのメモリ要求（例えば、第１のメモリ要求）は、競合仲裁を実行する間に送られ、少なくとも１つのメモリ要求（例えば、第２のメモリ要求）は、競合仲裁を実行した後に送られることが理解される。
【０１１３】
［０１２４］
いくつかの例において、処理ユニット１によって解消される、メモリ要求の第２のバッチとメモリ要求の第３のバッチとの間に競合がないことを決定すると、メモリ要求の第２のバッチとメモリ要求の第３のバッチとを、競合仲裁キューから第１のメモリまたはメモリ制御装置に送るように構成されることにより、処理ユニット１は、競合仲裁キュー中に記憶されているメモリ要求の第２のバッチとメモリ要求の第３のバッチとの間だけで競合仲裁を実行するように構成されていてもよい。例えば、メモリ要求の第２のバッチのメモリ要求を送ることと、メモリ要求の第２のバッチの各メモリ要求が確実に実行されるようにストールすることなく、メモリ要求の第３のバッチを送ることとにより、処理ユニット１は、競合仲裁キューを通して進行するように構成されていてもよい。
【０１１４】
［０１２５］
いくつかの例において、処理ユニット１によって解消される、メモリ要求の第２のバッチとメモリ要求の第３のバッチとの間の競合がないことを決定すると、メモリ要求の第２のバッチのすべてのメモリ要求に対する処理が完了するまで、メモリ要求の第３のバッチを、競合仲裁キューから第１のメモリまたはメモリ制御装置に送ることをストールしないように構成されることにより、処理ユニット１は、競合仲裁キュー中に記憶されているメモリ要求の第２のバッチとメモリ要求の第３のバッチとの間だけで競合仲裁を実行するように構成されていてもよい。
【０１１５】
［０１２６］
いくつかの例において、処理ユニット１によって解消される、メモリ要求の第２のバッチとメモリ要求の第３のバッチとの間に競合があることを決定すると、メモリ要求の第２のバッチのすべてのメモリ要求に対する処理が完了するまで、メモリ要求の第３のバッチを、競合仲裁キューから第１のメモリまたはメモリ制御装置に送ることをストールするように構成されることにより、処理ユニット１は、競合仲裁キュー中に記憶されているメモリ要求の第２のバッチとメモリ要求の第３のバッチとの間だけで競合仲裁を実行するように構成されていてもよい。多数の例に関して上記で説明したように、競合仲裁キュー中に記憶されているメモリ要求の第２のバッチとメモリ要求の第３のバッチとの間だけで競合仲裁を実行する前に、間に、および／または、後に、処理ユニット１は、メモリ要求の第２のバッチの１つ以上のメモリ要求を、競合仲裁キューから第１のメモリまたはメモリ制御装置に送るように構成されていてもよい。いくつかの例では、処理ユニット１は、スレッドの第１のグループから生じるメモリ要求の第３のバッチを送ることをストールした後に、および、スレッドの第１のグループから生じるメモリ要求の第３のバッチを第１のメモリまたはメモリ制御装置に送る前に、スレッドの第２のグループから生じるメモリ要求の第４のバッチを第１のメモリまたはメモリ制御装置に送るように構成されていてもよい。
【０１１６】
［０１２７］
例えば、処理ユニット１は、メモリ要求の第２のバッチのバッチタイプとメモリ要求の第３のバッチのバッチタイプとに基づいて、処理ユニットによって解消される、メモリ要求の第２のバッチとメモリ要求の第３のバッチとの間の競合があるか否かを決定するように構成されていてもよい。このような例では、処理ユニット１は、メモリ要求の第２のバッチのバッチタイプが書き込みであり、メモリ要求の第３のバッチのバッチタイプが書き込みであるとき、処理ユニットによって解消される、メモリ要求の第２のバッチとメモリ要求の第３のバッチとの間の競合があることを決定するように構成されていてもよい。別の例として、処理ユニット１は、メモリ要求の第２のバッチがメモリ要求の第１のバッチの後に競合仲裁キュー中に位置付けられている場合に、メモリ要求の第２のバッチのバッチタイプが読み取りであり、メモリ要求の第３のバッチのバッチタイプが読み取りであるときに、処理ユニットによって解消される、メモリ要求の第２のバッチとメモリ要求の第３のバッチとの間の競合があることを決定するように構成されていてもよい。
【０１１７】
［０１２８］
他の例では、メモリ要求の第３のバッチが生じるスレッドのグループは、スレッドの第１のグループではないかもしれない。先行する段落［０１１８］−［０１２７］は、メモリ要求の第３のバッチが、スレッドの第１のグループから生じない以下で説明する例には適用されないことが理解される。メモリ要求の第３のバッチがスレッドの第１のグループから生じない例では、メモリの第３のバッチが生じるスレッドのグループは、スレッドの第２のグループであってもよい。このような例では、第３のメタデータは、メモリの第３のバッチが生じるスレッドのグループを識別するデータを含んでいてもよい。
【０１１８】
［０１２９］
処理ユニット１は、メモリ要求のバッチのうちのメモリ要求の第４のバッチを第４のメタデータでタグ付けするように構成されていてもよい。第４のメタデータは、メモリ要求の第４のバッチが生じるスレッドのグループを識別するデータを含んでいてもよい。メモリ要求の第４のバッチが生じるスレッドのグループは、スレッドの第２のグループであってもよい。処理ユニット１は、メモリ要求の第３のバッチの任意のメモリ要求を第１のメモリまたはメモリ制御装置に送る前に、メモリ要求の第３のバッチと第３のメタデータとを競合仲裁キュー中に記憶させるように構成されていてもよい。処理ユニット１は、メモリ要求の第４のバッチの任意のメモリ要求を第１のメモリまたはメモリ制御装置に送る前に、メモリ要求の第４のバッチと第４のメタデータとを競合仲裁キュー中に記憶させるように構成されていてもよい。
【０１１９】
［０１３０］
いくつかの例では、メモリ要求の第４のバッチは、メモリ要求の第３のバッチの後に競合仲裁キュー中に記憶されていてもよい。例えば、メモリ要求の第３のバッチおよび／またはメモリ要求の第４のバッチは、メモリ要求の第１および第２のバッチの間で競合仲裁キュー中に記憶されていてもよい。別の例として、メモリ要求の第３のバッチは、メモリ要求の第１および第２のバッチの間で競合仲裁キュー中に記憶されていてもよく、メモリ要求の第４のバッチは、メモリ要求の第１および第２のバッチの後に競合仲裁キュー中に記憶されていてもよい。別の例として、メモリ要求の第４のバッチは、メモリ要求の第１および第２のバッチの間で競合仲裁キュー中に記憶されていてもよく、メモリ要求の第３のバッチは、メモリ要求の第１および第２のバッチの後に競合仲裁キュー中に記憶されていてもよい。
【０１２０】
［０１３１］
メモリ要求の第３のバッチとメモリ要求の第４のバッチとが、メモリ要求の第１および第２のバッチの間で競合仲裁キュー中に記憶されている例では、処理ユニット１は、第３のメタデータと第４のメタデータとを使用して、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行するように構成されていてもよい。第３のメタデータを使用して、メモリ要求の第３のバッチは、スレッドの第１のグループから生じていないことを決定し、第４のメタデータを使用して、メモリ要求の第４のバッチは、スレッドの第１のグループから生じていないことを決定するように構成されることにより、処理ユニット１は、第３のメタデータと第４のメタデータとを使用して、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行するように構成されていてもよい。
【０１２１】
［０１３２］
メモリ要求の第３のバッチがメモリ要求の第１および第２のバッチ間で競合仲裁キュー中に記憶され、メモリ要求の第４のバッチがメモリ要求の第１および第２のバッチの後に競合仲裁キュー中に記憶されている例では、処理ユニット１は、第３のメタデータを使用して、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行するように構成されていてもよい。第３のメタデータを使用して、メモリ要求の第３のバッチがスレッドの第１のグループから生じていないことを決定するように構成されることにより、処理ユニット１は、第３のメタデータを使用して、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行するように構成されていてもよい。
【０１２２】
［０１３３］
メモリ要求の第４のバッチがメモリ要求の第１および第２のバッチ間で競合仲裁キュー中に記憶され、メモリ要求の第３のバッチがメモリ要求の第１および第２のバッチの後に競合仲裁キュー中に記憶されている例では、処理ユニット１は、第４のメタデータを使用して、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行するように構成されていてもよい。第４のメタデータを使用して、メモリ要求の第４のバッチがスレッドの第１のグループから生じていないことを決定するように構成されることにより、処理ユニット１は、第４のメタデータを使用して、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけで競合仲裁を実行するように構成されていてもよい。
【０１２３】
［０１３４］
メモリ要求の第３のバッチがスレッドの第２のグループから生じていることを決定するように構成されることにより、処理ユニット１は、メモリ要求の第３のバッチがスレッドの第１のグループから生じていないことを決定するように構成されていてもよい。同様に、メモリ要求の第４のバッチがスレッドの第２のグループから生じていることを決定するように構成されることにより、処理ユニット１は、メモリ要求の第４のバッチがスレッドの第１のグループから生じていないことを決定するように構成されていてもよい。
【０１２４】
［０１３５］
処理ユニット１は、競合仲裁キュー中に記憶されているメモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけ競合仲裁を実行することと並行して、競合仲裁キュー中に記憶されているメモリ要求の第３のバッチとメモリ要求の第４のバッチとの間だけ競合仲裁を実行するように構成されていてもよい。処理ユニット１は、メモリ要求の第１のバッチとメモリ要求の第２のバッチとの間だけ競合仲裁を実行することに関してここで説明するのと類似する方法で、競合仲裁キュー中に記憶されているメモリ要求の第３のバッチとメモリ要求の第４のバッチとの間だけ競合仲裁を実行するように構成されていてもよい。
【０１２５】
［０１３６］
処理ユニット１は、本開示で説明した１つ以上の技術を実行するように構成されていてもよい。例えば、処理ユニット１は、アービター４によってまたはアービター４なしであろうとなかろうと、アービター４に関して説明した任意の技術を実行するように構成されていてもよい。いくつかの例では、アービター４は、処理ユニット１の概念的な機能ユニットである。このような例では、処理ユニット１はアービター４の機能性を提供することから、アービター４への参照は、処理ユニット１への参照を含むと理解される。他の例では、アービター４は、処理ユニット１の物理ユニットである。このような例では、アービター４は、処理ユニット１の以下の要素：プロセッサ（例えば、１つ以上のマイクロプロセッサ）、１つ以上の特定用途向け集積回路（ＡＳＩＣ）、１つ以上のフィールドプログラム可能ゲートアレイ（ＦＰＧＡ）、１つ以上の算術論理ユニット（ＡＬＵ）、１つ以上のデジタル信号プロセッサ（ＤＳＰ）、ディスクリート論理、ソフトウェア、ハードウェア、ファームウェア、あるいは、他の均等の集積またはディスクリート論理回路、のうちの１つ以上であってもよく、または、これらを含んでいてもよい。同様に、アービター４は、本開示で説明した１つ以上の技術を実行するように構成されていてもよい。例えば、アービター４は、処理ユニット１に関してここで説明した１つ以上の技術を実行するように構成されていてもよい。例として、ここでのいくつかの例は、処理ユニット１が、メモリ要求のバッチをタグ付けし、メモリ要求のバッチとメタデータとを競合仲裁キュー中に記憶させ、競合仲裁を実行するように構成されていることを説明している。このような例では、アービター４は、このような特徴を実行するように構成されていてもよいと理解される。
【０１２６】
［０１３７］
本開示にしたがうと、文脈がそうでないことを要求しない場合、用語「または」は、「および／または」と解釈されてもよい。さらに、「１つ以上」または「少なくとも１つ」またはこれらに類するもののようなフレーズは、ここで開示されているが他では開示されていないいくつかの特徴に対して使用されているかもしれない。このような言葉が使用されなかった特徴は、文脈がそうでないことを要求しない場合、暗示されているこのような意味を有していると解釈されてもよい。
【０１２７】
［０１３８］
技術のさまざまな態様の特定の組み合わせを上記で説明したが、これらの組み合わせは、本開示で説明した技術の例を図示するために提供されたにすぎない。したがって、本開示の技術は、これらの例示的な組み合わせに限定されるべきではなく、本開示で説明した技術のさまざまな態様の任意の想像できる組み合わせを包含していてもよい。
【０１２８】
［０１３９］
本開示において説明した技術は、ハードウェア、ソフトウェア、ファームウェア、または、これらの任意の組み合わせにおいて、少なくとも部分的に実現してもよい。例えば、説明した技術のさまざまな態様は、１つ以上のマイクロプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラム可能ゲートアレイ（ＦＰＧＡ）、あるいは、他の何らかの均等の集積またはディスクリートの論理回路とともに、このようなコンポーネントの任意の組み合わせをも含む、１つ以上のプロセッサ内で実現してもよい。用語「プロセッサ」または「処理回路」は、一般的に、単独での、または、他の論理回路との組み合わせでの、前述の論理回路のうちのいずれか、あるいは、処理を実行するディスクリートハードウェアのような、他の何らかの均等な回路を指す。
【０１２９】
［０１４０］
このようなハードウェア、ソフトウェア、および、ファームウェアは、本開示で説明したさまざまな動作および機能をサポートするために、同じデバイス内、または、別のデバイス内で実現してもよい。加えて、説明したユニット、モジュール、または、コンポーネントのいずれかは、ともに実現することができ、または、ディスクリートであるが相互運用可能な論理デバイスとして別に実現してもよい。モジュールまたはユニットとしての異なる特徴の描写は、異なる機能的態様を強調するよう意図されており、必ずしもこのようなモジュールまたはユニットが、別のハードウェアまたはソフトウェアのコンポーネントによって実現しなければならないことを意味しているのではない。むしろ、１つ以上のモジュールまたはユニットに関係付けられている機能性は、別のハードウェア、ファームウェア、および／または、ソフトウェアのコンポーネントによって実行してもよく、あるいは、共通のまたは別のハードウェアまたはソフトウェアのコンポーネント内に統合されてもよい。
【０１３０】
［０１４１］
本開示で説明した技術はまた、命令を記憶している、コンピュータ読取可能記憶媒体のような、コンピュータ読取可能媒体中に記憶され、具現化され、または、エンコードされてもよい。コンピュータ読取可能媒体に埋め込まれているまたはエンコードされる命令は、例えば、１つ以上のプロセッサによって命令が実行されるときに、１つ以上のプロセッサに、ここで説明した技術を実行させてもよい。コンピュータ読取可能記憶媒体は、ランダムアクセスメモリ（ＲＡＭ）、リードオンリーメモリ（ＲＯＭ）、プログラム可能リードオンリーメモリ（ＰＲＯＭ）、消去可能プログラム可能リードオンリーメモリ（ＥＰＲＯＭ）、電子的消去可能プログラム可能リードオンリーメモリ（ＥＥＰＲＯＭ）、フラッシュメモリ、ハードディスク、ＣＤ−ＲＯＭ、フロッピー（登録商標）ディスク、カセット、磁気媒体、光学媒体、または、有形の他のコンピュータ読取可能記憶媒体を含んでいてもよい。
【０１３１】
［０１４２］
コンピュータ読取可能媒体は、上記でリストアップしたもののような、有形記憶媒体に対応する、コンピュータ読取可能記憶媒体を含んでいてもよい。コンピュータ読取可能媒体はまた、例えば、通信プロトコルにしたがって、１つの場所から別の場所へのコンピュータプログラムの転送を促進する何らかの媒体を含む通信媒体を備えていてもよい。このように、フレーズ「コンピュータ読取可能媒体」は、一般的に、（１）非一時的である有形コンピュータ読取可能記憶媒体と、（２）一時的な信号または搬送波のような、非有形コンピュータ読取可能通信媒体とに対応していてもよい。
【０１３２】
［０１４３］
さまざまな態様および例を説明した。しかしながら、以下の特許請求の範囲から逸脱することなく、本開示の構造または技術に修正をすることができる。
【図１】
2019525324.tif 000003
【図２】
2019525324.tif 000004
【図３】
2019525324.tif 000005
【図４】
2019525324.tif 000006
【図５】
2019525324.tif 000007
【図６】
2019525324.tif 000008
【図７】
2019525324.tif 000009
【図８】
2019525324.tif 000010
【図９】
2019525324.tif 000011
【図１０】
2019525324.tif 000012
【図１１Ａ】
2019525324.tif 000013
【図１１Ｂ】
2019525324.tif 000014
【図１１Ｃ】
2019525324.tif 000015
【図１１Ｄ】
2019525324.tif 000016
【図１１Ｅ】
2019525324.tif 000017
【図１２】
2019525324.tif 000018
【国際調査報告】
2019525324.tif 000019
2019525324.tif 000020