(57)【要約】  態様は、コンピューティングデバイス上で、ハイブリッド入力／出力（Ｉ／Ｏ）コヒーレント書込み要求をインプリメントするための、装置によってインプリメントされる方法、コンピューティングデバイス、装置を含み、Ｉ／Ｏコヒーレント書込み要求を受信することと、Ｉ／Ｏコヒーレント書込み要求から、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することと、共有メモリに、第１のハイブリッドＩ／Ｏコヒーレント書込み要求と、Ｉ／Ｏコヒーレント書込み要求のＩ／Ｏコヒーレント書込みデータとを送ることと、コヒーレンシドメインに、Ｉ／Ｏコヒーレント書込み要求のＩ／Ｏコヒーレント書込みデータなしに、第２のハイブリッドＩ／Ｏコヒーレント書込み要求を送ることと、を含む。
2019533855.tif 000002
【特許請求の範囲】
【請求項１】
コンピューティングデバイス上で、ハイブリッド入力／出力（Ｉ／Ｏ）コヒーレント書込み要求をインプリメントする方法であって、
Ｉ／Ｏコヒーレント書込み要求を受信することと、
前記Ｉ／Ｏコヒーレント書込み要求から、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することと、
共有メモリに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求と、前記Ｉ／Ｏコヒーレント書込み要求のＩ／Ｏコヒーレント書込みデータとを送ることと、
コヒーレンシドメインに、前記Ｉ／Ｏコヒーレント書込み要求の前記Ｉ／Ｏコヒーレント書込みデータなしに、前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を送ることと
を備える方法。
【請求項２】
ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされているかどうかを決定することをさらに備え、
ここにおいて、前記Ｉ／Ｏコヒーレント書込み要求から、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することは、前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、前記Ｉ／Ｏコヒーレント書込み要求から、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することを備える、
請求項１に記載の方法。
【請求項３】
前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、ハイブリッドＩ／Ｏコヒーレント書込み要求として、前記Ｉ／Ｏコヒーレント書込み要求をマーキングすることをさらに備える、請求項２に記載の方法。
【請求項４】
前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信することと、
前記Ｉ／Ｏコヒーレント書込み要求を発行した処理デバイスに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を送ることと
をさらに備える、請求項１に記載の方法。
【請求項５】
前記コヒーレンシドメインにおいて、前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を受信することと、
前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求によって指定されるＩ／Ｏコヒーレンシ書込みデータのアドレスについてのコヒーレンシチェックを実行することと、
前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信することと
をさらに備える、請求項１に記載の方法。
【請求項６】
前記共有メモリにおいて、コヒーレントインターコネクトから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記Ｉ／Ｏコヒーレント書込みデータを受信することと、
前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求を実行することと、
前記コヒーレントインターコネクトに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を送ることと
をさらに備える、請求項１に記載の方法。
【請求項７】
前記コヒーレントインターコネクトから、前記コヒーレンシドメインによって、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信することと、
前記コヒーレントインターコネクトから、前記Ｉ／Ｏコヒーレント書込み要求を発行した処理デバイスによって、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信することと
をさらに備える、請求項６に記載の方法。
【請求項８】
処理デバイスによって、Ｉ／Ｏコヒーレントモードを使用した実行のために、ハードウェアアクセラレータに作業負荷をオフロードすることと、
前記処理デバイスによって、前記作業負荷が前記ハードウェアアクセラレータによって実行されている間に、コヒーレントインターコネクトを、非ハイブリッドＩ／Ｏコヒーレント書込みモードからハイブリッドＩ／Ｏコヒーレント書込みモードに切り替えるための動的トリガを検出することと、
前記動的トリガを検出したことに応答して、前記コヒーレントインターコネクトを、非ハイブリッドＩ／Ｏコヒーレント書込みモードから前記ハイブリッドＩ／Ｏコヒーレント書込みモードに切り替えることと
をさらに備える、請求項１に記載の方法。
【請求項９】
コンピューティングデバイスであって、
共有メモリと、
処理デバイスと、
コヒーレンシドメインと、
前記共有メモリと、前記処理デバイスと、前記コヒーレンシドメインとに結合されたコヒーレントインターコネクトと
を備え、ここにおいて、前記コヒーレントインターコネクトは、
Ｉ／Ｏコヒーレント書込み要求を受信することと、
前記Ｉ／Ｏコヒーレント書込み要求から、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することと、
前記共有メモリに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求と、前記Ｉ／Ｏコヒーレント書込み要求のＩ／Ｏコヒーレント書込みデータとを送ることと、
前記コヒーレンシドメインに、前記Ｉ／Ｏコヒーレント書込み要求の前記Ｉ／Ｏコヒーレント書込みデータなしに、前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を送ることと
を備える動作を実行するように構成される、
コンピューティングデバイス。
【請求項１０】
前記コヒーレントインターコネクトは、ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされているかどうかを決定することをさらに備える動作を実行するように構成され、
ここにおいて、前記コヒーレントインターコネクトは、前記Ｉ／Ｏコヒーレント書込み要求から、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することが、前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、前記Ｉ／Ｏコヒーレント書込み要求から、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することを備えるように、動作を実行するように構成される、
請求項９に記載のコンピューティングデバイス。
【請求項１１】
前記コヒーレントインターコネクトは、前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、ハイブリッドＩ／Ｏコヒーレント書込み要求として、前記Ｉ／Ｏコヒーレント書込み要求をマーキングすることをさらに備える動作を実行するように構成される、請求項１０に記載のコンピューティングデバイス。
【請求項１２】
前記コヒーレントインターコネクトは、
前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信することと、
前記Ｉ／Ｏコヒーレント書込み要求を発行した前記処理デバイスに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を送ることと
をさらに備える動作を実行するように構成される、請求項９に記載のコンピューティングデバイス。
【請求項１３】
前記コヒーレンシドメインは、
前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を受信することと、
前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求によって指定されるＩ／Ｏコヒーレンシ書込みデータのアドレスについてのコヒーレンシチェックを実行することと、
前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信することと
を備える動作を実行するように構成される、請求項９に記載のコンピューティングデバイス。
【請求項１４】
前記共有メモリは、
前記コヒーレントインターコネクトから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記Ｉ／Ｏコヒーレント書込みデータを受信することと、
前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求を実行することと、
前記コヒーレントインターコネクトに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を送ることと
を備える動作を実行するように構成される、請求項９に記載のコンピューティングデバイス。
【請求項１５】
前記コヒーレンシドメインは、
前記コヒーレントインターコネクトから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信すること
を備える動作を実行するように構成され、
前記処理デバイスは、
前記コヒーレントインターコネクトから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信すること、ここにおいて、前記処理デバイスは、前記Ｉ／Ｏコヒーレント書込み要求を発行した、
を備える動作を実行するように構成される、
請求項１４に記載のコンピューティングデバイス。
【請求項１６】
前記処理デバイスは、ハードウェアアクセラレータであり、前記コンピューティングデバイスは、前記コヒーレントインターコネクトに結合され、および
Ｉ／Ｏコヒーレントモードを使用した実行のために、前記ハードウェアアクセラレータに作業負荷をオフロードすることと、
前記作業負荷が前記ハードウェアアクセラレータによって実行されている間に、コヒーレントインターコネクトを、非ハイブリッドＩ／Ｏコヒーレント書込みモードからハイブリッドＩ／Ｏコヒーレント書込みモードに切り替えるための動的トリガを検出することと、
前記動的トリガを検出することに応答して、前記コヒーレントインターコネクトを、非ハイブリッドＩ／Ｏコヒーレント書込みモードから前記ハイブリッドＩ／Ｏコヒーレント書込みモードに切り替えることと
を備える動作を実行するように構成された第２の処理デバイスをさらに備える、
請求項９に記載のコンピューティングデバイス。
【請求項１７】
コンピューティングデバイスであって、
共有メモリと、
コヒーレンシドメインと、
Ｉ／Ｏコヒーレント書込み要求を受信するための手段と、
前記Ｉ／Ｏコヒーレント書込み要求から、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成するための手段と、
前記共有メモリに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求と、前記Ｉ／Ｏコヒーレント書込み要求のＩ／Ｏコヒーレント書込みデータとを送るための手段と、
前記コヒーレンシドメインに、前記Ｉ／Ｏコヒーレント書込み要求の前記Ｉ／Ｏコヒーレント書込みデータなしに、前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を送るための手段と
を備えるコンピューティングデバイス。
【請求項１８】
ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされているかどうかを決定するための手段をさらに備え、
ここにおいて、前記Ｉ／Ｏコヒーレント書込み要求から、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成するための手段は、前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、前記Ｉ／Ｏコヒーレント書込み要求から、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成するための手段を備える、
請求項１７に記載のコンピューティングデバイス。
【請求項１９】
前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、ハイブリッドＩ／Ｏコヒーレント書込み要求として、前記Ｉ／Ｏコヒーレント書込み要求をマーキングするための手段をさらに備える、請求項１８に記載のコンピューティングデバイス。
【請求項２０】
前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信するための手段と、
前記Ｉ／Ｏコヒーレント書込み要求を発行した処理デバイスに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を送るための手段と
をさらに備える、請求項１７に記載のコンピューティングデバイス。
【請求項２１】
前記コヒーレンシドメインにおいて、前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を受信するための手段と、
前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求によって指定されるＩ／Ｏコヒーレンシ書込みデータのアドレスについてのコヒーレンシチェックを実行するための手段と、
前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信するための手段と
をさらに備える、請求項１７に記載のコンピューティングデバイス。
【請求項２２】
前記共有メモリにおいて、コヒーレントインターコネクトから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記Ｉ／Ｏコヒーレント書込みデータを受信するための手段と、
前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求を実行するための手段と、
前記コヒーレントインターコネクトに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を送るための手段と
をさらに備える、請求項１７に記載のコンピューティングデバイス。
【請求項２３】
前記コヒーレントインターコネクトから、前記コヒーレンシドメインによって、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信するための手段と、
前記コヒーレントインターコネクトから、前記Ｉ／Ｏコヒーレント書込み要求を発行した処理デバイスによって、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信するための手段と
をさらに備える、請求項２２に記載のコンピューティングデバイス。
【請求項２４】
コンピューティングデバイスの処理デバイスに、
Ｉ／Ｏコヒーレント書込み要求を受信することと、
前記Ｉ／Ｏコヒーレント書込み要求から、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することと、
共有メモリに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求と、前記Ｉ／Ｏコヒーレント書込み要求のＩ／Ｏコヒーレント書込みデータとを送ることと、
コヒーレンシドメインに、前記Ｉ／Ｏコヒーレント書込み要求の前記Ｉ／Ｏコヒーレント書込みデータなしに、前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を送ることと
を備える動作を実行させるように構成されたプロセッサ実行可能命令を記憶した非一時的なプロセッサ可読媒体。
【請求項２５】
前記記憶された実行可能命令は、前記コンピューティングデバイスの前記処理デバイスに、ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされているかどうかを決定することをさらに備える動作を実行させるように構成され、
ここにおいて、前記Ｉ／Ｏコヒーレント書込み要求から、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することは、前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、前記Ｉ／Ｏコヒーレント書込み要求から、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することを備える、
請求項２４に記載の非一時的なプロセッサ可読媒体。
【請求項２６】
前記記憶された実行可能命令は、前記コンピューティングデバイスの前記処理デバイスに、前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、ハイブリッドＩ／Ｏコヒーレント書込み要求として、前記Ｉ／Ｏコヒーレント書込み要求をマーキングすることをさらに備える動作を実行させるように構成される、請求項２５に記載の非一時的なプロセッサ可読媒体。
【請求項２７】
前記記憶された実行可能命令は、前記コンピューティングデバイスの前記処理デバイスに、
前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信することと、
前記Ｉ／Ｏコヒーレント書込み要求を発行した第２の処理デバイスに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を送ることと
をさらに備える動作を実行させるように構成される、請求項２４に記載の非一時的なプロセッサ可読媒体。
【請求項２８】
前記記憶された実行可能命令は、前記コンピューティングデバイスの前記処理デバイスに、
前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を受信することと、
前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求によって指定されるＩ／Ｏコヒーレンシ書込みデータのアドレスについてのコヒーレンシチェックを実行することと、
前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信することと
をさらに備える動作を実行させるように構成される、請求項２４に記載の非一時的なプロセッサ可読媒体。
【請求項２９】
前記記憶された実行可能命令は、前記コンピューティングデバイスの前記処理デバイスに、
コヒーレントインターコネクトから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記Ｉ／Ｏコヒーレント書込みデータを受信することと、
前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求を実行することと、
前記コヒーレントインターコネクトに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を送ることと
をさらに備える動作を実行させるように構成される、請求項２４に記載の非一時的なプロセッサ可読媒体。
【請求項３０】
前記記憶された実行可能命令は、前記コンピューティングデバイスの前記処理デバイスに、
前記コヒーレントインターコネクトから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信することと、
前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信することと、ここにおいて、前記処理デバイスは、前記コヒーレントインターコネクトから前記Ｉ／Ｏコヒーレント書込み要求を発行した、
をさらに備える動作を実行させるように構成される、請求項２９に記載の非一時的なプロセッサ可読媒体。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]アクセラレータは、中央処理ユニット（ＣＰＵ）が作業負荷を処理するのを（a central processing unit (CPU) process workloads）助けるために使用され得る。作業負荷は、多くの場合（often）、ＣＰＵキャッシュからのデータを使用することを必要とする。アクセラレータは、ランダムアクセスメモリ（ＲＡＭ）に、作業負荷の実行（workload executions）からのデータを書き込み得る。入力／出力（Ｉ／Ｏ）コヒーレントモードでは、ＲＡＭにデータを書き込むための要求を送信すること、およびＲＡＭに書き込むためのデータを送信することは、インターコネクトを経由して（through）ＲＡＭへ、およびコヒーレントドメインを経由してＲＡＭへとルーティングされる。ＲＡＭにデータを書き込むことを要求するための経路およびＲＡＭに書き込まれることになるデータのための経路は、インターコネクトからＲＡＭへと通過し（pass）、インターコネクトからコヒーレントドメインに、そしてその後、ＲＡＭへと通過するように複製される（duplicated to pass）。インターコネクトからＲＡＭへの複製経路（duplicate the paths）は、Ｉ／Ｏコヒーレント能力を有するデバイスにおいて、面積コスト（area costs）を増大させる。コヒーレントドメインを通る複製経路はまた、インターコネクトからＲＡＭへの経路よりも効率が劣り（less efficient than）得る。より低い効率の経路は、速度、レイテンシ、および／または電力のペナルティを生じさせ（incur）得る。
【発明の概要】
【０００２】
[0002]様々な開示される態様は、コンピューティングデバイス上で、ハイブリッド入力／出力（Ｉ／Ｏ）コヒーレント書込み要求をインプリメントするための装置および方法を含み得る。様々な態様は、Ｉ／Ｏコヒーレント書込み要求を受信することと、Ｉ／Ｏコヒーレント書込み要求から、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することと、共有メモリ（shared memory）に、第１のハイブリッドＩ／Ｏコヒーレント書込み要求と、Ｉ／Ｏコヒーレント書込み要求のＩ／Ｏコヒーレント書込みデータとを送ることと、コヒーレンシドメインに、Ｉ／Ｏコヒーレント書込み要求のＩ／Ｏコヒーレント書込みデータなしに、第２のハイブリッドＩ／Ｏコヒーレント書込み要求を送ることと、を含み得る。
【０００３】
[0003]いくつかの態様は、ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされているかどうかを決定することをさらに含み得、ここで、Ｉ／Ｏコヒーレント書込み要求から、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することは、ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、Ｉ／Ｏコヒーレント書込み要求から、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することを含み得る。
【０００４】
[0004]いくつかの態様は、ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、ハイブリッドＩ／Ｏコヒーレント書込み要求として（as）、Ｉ／Ｏコヒーレント書込み要求をマーキングすることをさらに含み得る。
【０００５】
[0005]いくつかの態様は、共有メモリから、第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信することと、Ｉ／Ｏコヒーレント書込み要求を発行した（issued）処理デバイスに、第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を送ることと、をさらに含み得る。
【０００６】
[0006]いくつかの態様は、コヒーレンシドメインにおいて、第２のハイブリッドＩ／Ｏコヒーレント書込み要求を受信することと、第２のハイブリッドＩ／Ｏコヒーレント書込み要求によって指定されるＩ／Ｏコヒーレンシ書込みデータのアドレスについての（for）コヒーレンシチェックを実行することと、共有メモリから、第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信することと、をさらに含み得る。
【０００７】
[0007]いくつかの態様は、共有メモリにおいて、コヒーレントインターコネクトから、第１のハイブリッドＩ／Ｏコヒーレント書込み要求およびＩ／Ｏコヒーレント書込みデータを受信することと、第１のハイブリッドＩ／Ｏコヒーレント書込み要求を実行することと、コヒーレントインターコネクトに、第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を送ることと、をさらに含み得る。
【０００８】
[0008]いくつかの態様は、コヒーレントインターコネクトから、コヒーレンシドメインによって、第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信することと、コヒーレントインターコネクトから、Ｉ／Ｏコヒーレント書込み要求を発行した処理デバイスによって、第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信することと、をさらに含み得る。
【０００９】
[0009]いくつかの態様は、処理デバイスによって、Ｉ／Ｏコヒーレントモードを使用した（using）実行のために（for）、ハードウェアアクセラレータに作業負荷をオフロードすることと、処理デバイスによって、作業負荷がハードウェアアクセラレータによって実行されている間に（while）、コヒーレントインターコネクトを、非ハイブリッドＩ／Ｏコヒーレント書込みモードからハイブリッドＩ／Ｏコヒーレント書込みモードに切り替えるための動的トリガを検出することと、動的トリガを検出したこと（detecting）に応答して、コヒーレントインターコネクトを、非ハイブリッドＩ／Ｏコヒーレント書込みモードからハイブリッドＩ／Ｏコヒーレント書込みモードに切り替えることと、をさらに含み得る。
【００１０】
[0010]さらなる態様は、上記で要約された方法の動作を実行するように構成された、コヒーレントインターコネクトと、コヒーレンシドメインと、処理デバイスと、共有メモリとを有するコンピューティングデバイスを含む。さらなる態様は、上記で要約された方法の機能を実行するための手段を有するコンピューティングデバイスを含む。さらなる態様は、コンピューティングデバイスの処理デバイスに、上記で要約された方法の動作を実行させるように構成されたプロセッサ実行可能命令を記憶した非一時的なプロセッサ可読記憶媒体を含む。
【図面の簡単な説明】
【００１１】
[0011]ここに組み込まれ、本明細書の一部を成す添付の図面は、様々な態様の例となる態様を例示し、上記で与えられた概要と、以下で与えられる詳細な説明と共に、特許請求の範囲の特徴を説明するのに役立つ。
【図１】[0012]図１は、一態様をインプリメントするのに好適なコンピューティングデバイスを例示するコンポーネントブロック図である。
【図２】[0013]図２は、一態様をインプリメントするのに好適な例となるマルチコアプロセッサを例示するコンポーネントブロック図である。
【図３Ａ】[0014]図３Ａは、一態様をインプリメントするのに好適なコヒーレントインターコネクトを有する、例となる異種コンピューティングデバイスを例示するブロック図である。
【図３Ｂ】[0015]図３Ｂは、一態様による、Ｉ／Ｏコヒーレント書込みをインプリメントしている、例となる異種コンピューティングデバイスを例示するブロックおよびシグナリング図である。
【図３Ｃ】[0016]図３Ｃは、一態様による、ハイブリッドＩ／Ｏコヒーレント書込みをインプリメントしている、例となる異種コンピューティングデバイスを例示するブロックおよびシグナリング図である。
【図４】[0017]図４は、一態様をインプリメントするための非Ｉ／Ｏコヒーレント作業負荷処理の一例を例示する信号およびプロセス図である。
【図５】[0018]図５は、一態様をインプリメントするためのＩ／Ｏコヒーレント作業負荷処理の一例を例示する信号およびプロセス図である。
【図６】[0019]図６は、一態様をインプリメントするための動的Ｉ／Ｏコヒーレント作業負荷処理の一例を例示する信号およびプロセス図である。
【図７】[0020]図７は、一態様をインプリメントするための動的Ｉ／Ｏコヒーレント作業負荷処理の一例を例示する信号およびプロセス図である。
【図８】[0021]図８は、一態様をインプリメントするための、ハイブリッドＩ／Ｏコヒーレント書込みを用いてＩ／Ｏコヒーレント作業負荷処理をインプリメントするための方法を例示する信号およびプロセス図である。
【図９】[0022]図９は、一態様をインプリメントするための、ハイブリッドＩ／Ｏコヒーレント書込みを用いて動的Ｉ／Ｏコヒーレント作業負荷処理をインプリメントするための方法を例示する信号およびプロセス図である。
【図１０】[0023]図１０は、一態様による、ハイブリッドＩ／Ｏコヒーレント書込みをインプリメントするための方法を例示するプロセスフロー図である。
【図１１】[0024]図１１は、一態様による、ハイブリッドＩ／Ｏコヒーレント書込みをインプリメントするための方法を例示するプロセスフロー図である。
【図１２】[0025]図１２は、一態様による、ハイブリッドＩ／Ｏコヒーレント書込みをインプリメントするための方法を例示するプロセスフロー図である。
【図１３】[0026]図１３は、一態様による、ハイブリッドＩ／Ｏコヒーレント書込みを用いて動的Ｉ／Ｏコヒーレント作業負荷処理をインプリメントするための方法を例示するプロセスフロー図である。
【図１４】[0027]図１４は、複数の態様による、ハイブリッドＩ／Ｏコヒーレント書込みを用いてＩ／Ｏコヒーレントおよび／または動的Ｉ／Ｏコヒーレント作業負荷処理をインプリメントするための方法を例示するプロセスフロー図である。
【図１５】[0028]図１５は、様々な態様との使用に好適な例となるモバイルコンピューティングデバイスを例示するコンポーネントブロック図である。
【図１６】[0029]図１６は、様々な態様との使用に好適な例となるモバイルコンピューティングデバイスを例示するコンポーネントブロック図である。
【図１７】[0030]図１７は、様々な態様との使用に好適な例となるサーバを例示するコンポーネントブロック図である。
【詳細な説明】
【００１２】
[0031]様々な態様は、添付の図面を参照して詳細に説明される。可能な限り、同一の参照番号は、同一または同様の部分を指すように、図面全体を通して使用される。特定の例およびインプリメンテーションに対してなされる参照は、例示を目的としており、特許請求の範囲を限定するようには意図されない。
【００１３】
[0032]様々な態様は、非Ｉ／ＯコヒーレントのパフォーマンスおよびＩ／Ｏコヒーレントの利益とともに、ランダムアクセスメモリ（ＲＡＭ）に、ハードウェアアクセラレータによって、オフロードされた作業負荷のための入力／出力（Ｉ／Ｏ）コヒーレント書込み動作をインプリメントするためのそのような方法をインプリメントする方法、およびシステムおよびデバイスを含み得る。複数のプロセッサは、マルチコアプロセッサであり得る。様々な態様の装置および方法は、インターコネクトからコヒーレンシドメインへの書込みデータ経路をなしで済ませることと（foregoing）、インターコネクトからコヒーレンシドメインおよびＲＡＭへの書込み要求経路のために、インターコネクトにおいて書込み要求を分割することとを含み得る。
【００１４】
[0033]「コンピューティングデバイス」および「モバイルコンピューティングデバイス」という用語は、セルラ電話、スマートフォン、パーソナルまたはモバイルマルチメディアプレーヤ、携帯情報端末（ＰＤＡ）、ラップトップコンピュータ、タブレットコンピュータ、コンバーチブルラップトップ／タブレット（２−ｉｎ−１コンピュータ）、スマートブック、ウルトラブック、ネットブック、パームトップコンピュータ、ワイヤレス電子メール受信機、マルチメディアインターネット対応セルラ電話、モバイルゲームコンソール、ワイヤレスゲームコントローラ、およびプログラマブルプロセッサとメモリとを含む同様のパーソナル電子デバイス、のうちの任意の１つまたは全てを指すように、ここで交換可能に使用される。「コンピューティングデバイス」という用語はさらに、パーソナルコンピュータ、デスクトップコンピュータ、オールインワンコンピュータ、ワークステーション、スーパーコンピュータ、メインフレームコンピュータ、組込み型コンピュータ、サーバ、ホームシアタコンピュータ、およびゲームコンソールを含む、据え置き型のコンピューティングデバイスを指し得る。
【００１５】
[0034]非Ｉ／Ｏコヒーレントシステムのための書込み動作は、コヒーレンシドメインをインプリメントする必要がないので、Ｉ／Ｏコヒーレントシステムよりも少ない（less）ハードウェアを必要とし（require）得る。非Ｉ／Ｏコヒーレントシステムのための書込み要求は、より少ない（fewer）ハードウェアコンポーネント間で書込みデータを送信することに伴うより少ないステップゆえに（because of）、より高速に実行され得る。また、ハードウェアアクセラレータとＲＡＭとの間のコヒーレンシドメインへのデータ経路は、非Ｉ／ＯコヒーレントシステムでのアクセラレータとＲＡＭとの間のデータ経路に比べて、Ｉ／Ｏコヒーレントシステムではより効率が劣り得る。しかしながら、非Ｉ／Ｏコヒーレントシステムの書込み動作は、Ｉ／Ｏコヒーレントシステムの書込み動作よりも大きいメモリ保守動作オーバヘッドペナルティを生じさせ（incur）得る。これは、Ｉ／Ｏコヒーレントシステムが、非Ｉ／Ｏコヒーレントシステムでのように、書込み動作の前後でメモリ保守動作を実行しなければならないのではなく（rather than）、メモリコヒーレンシを継続的に管理し得るからである。
【００１６】
[0035]ハイブリッドＩ／Ｏコヒーレント書込みは、インターコネクトからコヒーレンシドメインへも送信するために、インターコネクトからＲＡＭへの書込み要求経路のみを複製し得る。ハイブリッドＩ／Ｏコヒーレント書込みは、インターコネクトからコヒーレンシドメインへのデータ経路をなしで済ませ得、アクセラレータからインターコネクトを通ってＲＡＭに至るデータ経路に沿ってデータを送信する。コヒーレンシドメインへの複製のデータ経路を無くすことは、面積、電力、および帯域幅を節約し、レイテンシを低減させ得、一方（while）、コヒーレンシドメインへの複製の要求経路を保持することは、メモリコヒーレンシ動作がインプリメントされることを可能にし得る。
【００１７】
[0036]ハイブリッドＩ／Ｏコヒーレント書込みをインプリメントするために、ハイブリッドＩ／Ｏコヒーレント書込みがイネーブルにされるとき、インターコネクトは、アクセラレータから関連する書込みデータとともに書込み要求を受信し、書込み要求における既存の（existing）フィールドを使用または追加することによって、ハイブリッドＩ／Ｏコヒーレント書込み要求として、書込み要求をマーキングし得る。インターコネクトは、ハイブリッドＩ／Ｏコヒーレント書込み要求を複製し、ＲＡＭにハイブリッドＩ／Ｏコヒーレント書込み要求の第１の複製（first duplicate）を送り、コヒーレンシドメインにハイブリッドＩ／Ｏコヒーレント書込み要求の第２の複製を送り得る。インターコネクトはまた、書込みデータを複製することおよびそれをコヒーレンシドメインに送ることなく、ＲＡＭに書込みデータを送り得る。ＲＡＭは、２つの経路に沿って、ハイブリッドＩ／Ｏコヒーレント書込み要求に対する（for）複製の確認応答（duplicate acknowledgements）を送り得る。第１の複製の確認応答は、第１の確認応答経路を介して、インターコネクトを通ってアクセラレータに返送され（be sent via a first acknowledgement path back through the interconnect to the accelerator）得、第２の複製の確認応答は、第２の確認応答経路を介して、コヒーレンシドメインに送られ得る。
【００１８】
[0037]コヒーレンシドメインは、ハイブリッドＩ／Ｏコヒーレント書込み要求の第２の複製と、第２の複製の確認応答とに基づいて、メモリのコヒーレンシを管理し得る。コヒーレンシドメインは、ハイブリッドＩ／Ｏコヒーレント書込み要求の第２の複製に基づいて、コヒーレンシチェックおよび無効化（invalidates）をインプリメントし得る。コヒーレンシドメインは、第２の複製の確認応答に基づいて、トランザクションをクリアすることをインプリメントし（implement clear transactions）得る。メモリドライバは、コヒーレンシドメインがメモリのコヒーレンシを管理し得るので、メモリ無効化保守動作を使用することなく済ませ得る。
【００１９】
[0038]インターコネクトからコヒーレンシドメインへの書込み要求経路は、書込み要求に必要な帯域幅（bandwidth）のみをサポートする必要があり得、書込み要求データのための帯域幅をサポートする必要がない場合がある（may）。様々な態様では、書込み要求のための帯域幅は、インターコネクトとコヒーレンシドメインとの間の経路の全帯域幅の半分または半分未満であり得る。
【００２０】
[0039]図１は、様々な態様との使用に好適なコンピューティングデバイス１０を含むシステムを例示する。コンピューティングデバイス１０は、プロセッサ１４、メモリ１６、通信インターフェース１８、および記憶メモリインターフェース２０を備えた、システムオンチップ（ＳｏＣ）１２を含み得る。コンピューティングデバイス１０は、ワイヤレス通信リンクを確立するための、ワイヤードまたはワイヤレスモデムのような通信コンポーネント２２、記憶メモリ２４、およびアンテナ２６をさらに含み得る。プロセッサ１４は、様々な処理デバイスのうちの任意のもの、例えば、いくつかの（a number of）プロセッサコアを含み得る。
【００２１】
[0040]「システムオンチップ」（ＳｏＣ）という用語は、ここで、典型的に、それに限定されるものではないが（but not exclusively）、処理デバイス、メモリ、および通信インターフェースを含む、相互接続された電子回路のセットを指すために使用される。処理デバイスは、汎用プロセッサ、中央処理ユニット（ＣＰＵ）、デジタルシグナルプロセッサ（ＤＳＰ）、グラフィックス処理ユニット（ＧＰＵ）、アクセラレーテッド処理ユニット（ＡＰＵ：accelerated processing unit）、補助プロセッサ、シングルコアプロセッサ、およびマルチコアプロセッサなどの、様々な異なるタイプのプロセッサ１４およびプロセッサコアを含み得る。処理デバイスはさらに、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）、特定用途向け集積回路（ＡＳＩＣ）、他のプログラマブル論理デバイス、ディスクリートゲート論理回路、トランジスタ論理回路、パフォーマンス監視ハードウェア、ウォッチドッグハードウェア、およびタイムリファレンス（time references）などの、他のハードウェアおよびハードウェアの組合せを具現化し得る。集積回路は、集積回路のコンポーネントが、シリコンのような単一の半導体材料上に存在する（reside）ように構成され得る。
【００２２】
[0041]ＳｏＣ１２は、１つまたは複数のプロセッサ１４を含み得る。コンピューティングデバイス１０は、１つより多くのＳｏＣ１２を含み得、それによって、プロセッサ１４およびプロセッサコアの数を増大させる。コンピューティングデバイス１０はまた、ＳｏＣ１２に関連付けられていないプロセッサ１４を含み得る。個々のプロセッサ１４は、図２を参照して以下で説明されるように、マルチコアプロセッサであり得る。プロセッサ１４は、コンピューティングデバイス１０の他のプロセッサ１４と同じであるかまたはそれらとは異なり得る特定の目的のために、それぞれ構成され得る。同じまたは異なる構成のプロセッサ１４およびプロセッサコアのうちの１つまたは複数が、共にグループ化され得る。プロセッサ１４またはプロセッサコアのグループが、マルチプロセッサクラスタと呼ばれ得る。
【００２３】
[0042]ＳｏＣ１２のメモリ１６は、プロセッサ１４によるアクセスのために、データおよびプロセッサ実行可能コードを記憶するために構成された揮発性または不揮発性メモリであり得る。コンピューティングデバイス１０および／またはＳｏＣ１２は、様々な目的のために構成された１つまたは複数のメモリ１６を含み得る。１つまたは複数のメモリ１６は、ランダムアクセスメモリ（ＲＡＭ）またはメインメモリ、あるいはキャッシュメモリなどの、揮発性メモリを含み得る。これらのメモリ１６は、データセンサまたはサブシステムから受信される限られた量のデータ、不揮発性メモリから要求され、様々な要因に基づいて将来のアクセスを見込んで（in anticipation of）不揮発性メモリからメモリ１６にロードされるデータおよび／またはプロセッサ実行可能コード命令、および／または、プロセッサ１４によって生成され、不揮発性メモリに記憶されることなく、将来の高速なアクセスのために一時的に記憶される中間（intermediary）処理データおよび／またはプロセッサ実行可能コード命令を一時的に保持するように構成され得る。
【００２４】
[0043]メモリ１６は、プロセッサ１４のうちの１つまたは複数によるアクセスのために、別のメモリ１６または記憶メモリ２４のような、別のメモリデバイスからメモリ１６にロードされるデータおよびプロセッサ実行可能コードを少なくとも一時的に記憶するように構成され得る。メモリ１６にロードされるデータまたはプロセッサ実行可能コードは、プロセッサ１４による機能の実行に応答してロードされ得る。機能の実行に応答してメモリ１６にデータまたはプロセッサ実行可能コードをロードすることは、不成功または「ミス（miss）」であるメモリ１６へのメモリアクセス要求の結果として起こり（result from）得、これは、要求されたデータまたはプロセッサ実行可能コードが、メモリ１６中に見つからなかった（not located）からである。ミスに応答して、別のメモリ１６または記憶メモリ２４からメモリデバイス１６に、要求されたデータまたはプロセッサ実行可能コードをロードするために、別のメモリ１６または記憶メモリ２４へのメモリアクセス要求が行われ得る。機能の実行に応答してメモリ１６にデータまたはプロセッサ実行可能コードをロードすることは、別のメモリ１６または記憶メモリ２４へのメモリアクセス要求の結果として起こり得、データまたはプロセッサ実行可能コードは、後のアクセスのためにメモリ１６にロードされ得る。
【００２５】
[0044]記憶メモリインターフェース２０および記憶メモリ２４は、コンピューティングデバイス１０が不揮発性記憶媒体上にデータおよびプロセッサ実行可能コードを記憶することを可能にするように調和して作動し（work in unison to）得る。記憶メモリ２４は、記憶メモリ２４が、プロセッサ１４のうちの１つまたは複数によるアクセスのために、データまたはプロセッサ実行可能コードを記憶し得る、メモリ１６の態様とほぼ同様に（much like）構成され得る。不揮発性である記憶メモリ２４は、コンピューティングデバイス１０の電源がシャットオフされた後、情報を保持し（retain）得る。電源がオンに戻され、コンピューティングデバイス１０がリブートすると（when）、記憶メモリ２４上に記憶された情報は、コンピューティングデバイス１０に利用可能になり得る。記憶メモリインターフェース２０は、記憶メモリ２４へのアクセスを制御し、プロセッサ１４が、記憶メモリ２４からデータを読み取り、また、記憶メモリ２４にデータを書き込むことを可能にし得る。
【００２６】
[0045]コンピューティングデバイス１０のコンポーネントの一部または全ては、依然として（still）様々な態様の機能を果たし（serving）ながら（while）、異なって配置され、および／または組み合わされ得る。コンピューティングデバイス１０は、これらコンポーネントのそれぞれの１つに限定されなくてよく（may not）、各コンポーネントの複数の（multiple）事例が、コンピューティングデバイス１０の様々な構成に含まれ得る。
【００２７】
[0046]図２は、一態様をインプリメントするために好適なマルチコアプロセッサを例示する。マルチコアプロセッサ１４は、例えば、中央処理ユニット、グラフィックス処理ユニット、および／またはデジタル処理ユニットを含む、複数の（multiple）プロセッサタイプを含み得る。マルチコアプロセッサ１４はまた、機能（functions）の専用セット（a specialized set）をインプリメントするように構成された汎用ハードウェアおよび／またはカスタム処理ハードウェアを含み得るカスタムハードウェアアクセラレータを含み得る。
【００２８】
[0047]マルチコアプロセッサは、複数の同種または異種プロセッサコア２００、２０１、２０２、２０３を有し得る。同種マルチコアプロセッサは、複数の同種プロセッサコアを含み得る。プロセッサコア２００、２０１、２０２、２０３は、マルチコアプロセッサ１４のプロセッサコア２００、２０１、２０２、２０３が同じ目的のために構成され、同じまたは同様のパフォーマンス特性を有し得るという点で同種であり得る。例えば、マルチコアプロセッサ１４は、汎用（general purpose）プロセッサであり得、プロセッサコア２００、２０１、２０２、２０３は、同種汎用プロセッサコアであり得る。マルチコアプロセッサ１４は、グラフィックス処理ユニットまたはデジタルシグナルプロセッサであり得、プロセッサコア２００、２０１、２０２、２０３は、それぞれ同種グラフィックスプロセッサコアまたはデジタルシグナルプロセッサコアであり得る。マルチコアプロセッサ１４は、同種プロセッサコア２００、２０１、２０２、２０３を備えた（with）カスタムハードウェアアクセラレータであり得る。参照を簡単にするために、「カスタムハードウェアアクセラレータ」、「プロセッサ」、および「プロセッサコア」という用語は、ここで交換可能に（interchangeably）使用され得る。
【００２９】
[0048]異種マルチコアプロセッサは、複数の異種プロセッサコアを含み得る。プロセッサコア２００、２０１、２０２、２０３は、マルチコアプロセッサ１４のプロセッサコア２００、２０１、２０２、２０３が異なる目的のために構成され、および／または異なるパフォーマンス特性を有し得るという点で異種であり得る。このような異種プロセッサコアの異種性は、異なる命令セットアーキテクチャ、パイプライン、動作周波数、等を含み得る。このような異種プロセッサコアの一例が、より遅い低電力のプロセッサコアがよりパワフルおよび電力を大量消費する（power-hungry）プロセッサコアと結合され得る「ｂｉｇ．ＬＩＴＴＬＥ」アーキテクチャとして知られるものを含み得る。同様の態様では、ＳｏＣ（例えば、図１のＳｏＣ１２）は、任意の数の同種または異種マルチコアプロセッサ１４を含み得る。様々な態様では、異種マルチコアプロセッサは、少なくとも１つの異種プロセッサコアを含むプロセッサコア２００、２０１、２０２、２０３の任意の組合せを含み得るので（as）、プロセッサコア２００、２０１、２０２、２０３の全てが、異種プロセッサコアである必要はない（not all off the processor cores 200, 201, 202, 203 need to be heterogeneous processor cores）。
【００３０】
[0049]マルチコアプロセッサ１４のプロセッサコア２００、２０１、２０２、２０３の各々は、指定されたプロセッサコア２００、２０１、２０２、２０３による読取りおよび／または書込みアクセスに専用であり得る専有（private）キャッシュ２１０、２１２、２１４、２１６を指定され（be designated）得る。専有キャッシュ２１０、２１２、２１４、２１６は、データおよび／または命令を記憶し、プロセッサコア２００、２０１、２０２、２０３による実行において使用するために、専有キャッシュ２１０、２１２、２１４、２１６が専用である（to which the private cache 210, 212, 214, 216 is dedicated）プロセッサコア２００、２０１、２０２、２０３に、記憶されたデータおよび／または命令を利用可能にし得る。専有キャッシュ２１０、２１２、２１４、２１６は、図１のメモリ１６を参照してここで説明されたような、揮発性メモリを含み得る。
【００３１】
[0050]マルチコアプロセッサ１４は、プロセッサコア２００、２０１、２０２、２０３による読取りおよび／または書込みアクセスのために構成され得る共有キャッシュ２３０をさらに含み得る。専有キャッシュ２１０、２１２、２１４、２１６は、データおよび／または命令を記憶し、プロセッサコア２００、２０１、２０２、２０３による実行において使用するために、プロセッサコア２００、２０１、２０２、２０３に、記憶されたデータおよび／または命令を利用可能にし得る。共有キャッシュ２３０はまた、マルチコアプロセッサ１４に入力されるおよび／またはマルチコアプロセッサ１４から出力されるデータおよび／または命令のためのバッファとして機能し得る。共有キャッシュ２３０は、図１のメモリ１６を参照してここで説明されたような、揮発性メモリを含み得る。
【００３２】
[0051]図２に例示される例では、マルチコアプロセッサ１４は、４つのプロセッサコア２００、２０１、２０２、２０３（すなわち、プロセッサコア０、プロセッサコア１、プロセッサコア２、およびプロセッサコア３）を含む。この例では、各プロセッサコア２００、２０１、２０２、２０３は、それぞれの専有キャッシュ２１０、２１２、２１４、２１６が指定されている（すなわち、プロセッサコア０と専有キャッシュ０、プロセッサコア１と専有キャッシュ１、プロセッサコア２と専有キャッシュ２、およびプロセッサコア３と専有キャッシュ３）。説明を簡単にするために、ここでの例は、図２に例示される４つのプロセッサコア２００、２０１、２０２、２０３および４つの専有キャッシュ２１０、２１２、２１４、２１６を参照し得る。しかしながら、図２に例示され、ここで説明される４つのプロセッサコア２００、２０１、２０２、２０３および４つの専有キャッシュ２１０、２１２、２１４、２１６は、単なる一例として提供されているにすぎず、決して（in no way）様々な態様を４つの指定された専有キャッシュを有する４コアプロセッサシステムに限定するように意図されるものではない。コンピューティングデバイス１０、ＳｏＣ１２、またはマルチコアプロセッサ１４は、個別にまたは組合せにおいて、ここで例示および説明される４つより少ないまたはそれより多くのプロセッサコア２００、２０１、２０２、２０３および専有キャッシュ２１０、２１２、２１４、２１６を含み得る。
【００３３】
[0052]図３Ａ〜図３Ｃは、コヒーレントインターコネクトを有する異種コンピューティングデバイスの例となる態様を例示する。ハイブリッドＩ／Ｏコヒーレント書込みをインプリメントするように構成された異種コンピューティングデバイス（例えば、図１におけるコンピューティングデバイス１０）および／または動的Ｉ／Ｏコヒーレンシシステム３００は、少なくとも２つであるが、最大で任意の整数「Ｎ」個までの処理デバイス（例えば、図１および図２におけるプロセッサ１４）を含み得、例えば、処理デバイス（例えば、ＣＰＵ）３０２、ハードウェアアクセラレータ（例えば、ＧＰＵ）３０６ａ、ハードウェアアクセラレータ（例えば、ＤＳＰ）３０６ｂ、および／またはカスタムハードウェアアクセラレータ３０６ｃである。各処理デバイス３０２、３０６ａ、３０６ｂ、３０６ｃは、処理デバイスキャッシュ（例えば、図２における専有キャッシュ２１０、２１２、２１４、２１６、および／または共有キャッシュ２３０）に関連付けられ得る。例えば、処理デバイス３０２は、処理デバイスキャッシュ（例えば、ＣＰＵキャッシュ）３０８を含み得、ハードウェアアクセラレータ３０６ａは、ハードウェアアクセラレータキャッシュ（例えば、ＧＰＵキャッシュ）３１０ａを含み得、ハードウェアアクセラレータ３０６ｂは、ハードウェアアクセラレータキャッシュ（例えば、ＤＳＰキャッシュ）３１０ｂを含み得、および／またはカスタムハードウェアアクセラレータ３０６ｃは、カスタムハードウェアアクセラレータキャッシュ３１０ｃを含み得る。ここで説明されるように、処理デバイス３０２、３０６ａ、３０６ｂ、３０６ｃの各々は、互いに対しておよび／またはそれらのそれぞれのプロセッサコア（例えば、図２におけるプロセッサコア２００、２０１、２０２、２０３）の間で、同種および／または異種であり得る。
【００３４】
[0053]コヒーレントインターコネクト３１２は、処理デバイス３０２、３０６ａ、３０６ｂ、３０６ｃと、共有メモリ３０４（例えば、図１におけるメモリ１６、２４）のような、任意の数の（any number of）メインメモリまたはランダムアクセスメモリコンポーネントとに通信可能に接続され得る。コヒーレントインターコネクト３１２は、様々な接続されたコンポーネント間のデータの送信をイネーブルにし、制御するように構成され得る。Ｉ／Ｏコヒーレントモードで動作している処理デバイスキャッシュ３０８、３１０ａ、３１０ｂ、３１０ｃおよび／または共有メモリ３０４について、コヒーレンシメカニズムは、処理デバイスキャッシュ３０８、３１０ａ、３１０ｂ、３１０ｃおよび／または共有メモリ３０４におけるデータの正確性（correctness）を保証するために、コヒーレントインターコネクト３１２によって継続的にインプリメントされ得る。コヒーレントインターコネクト３１２は、処理デバイス３０２、３０６ａ、３０６ｂ、３０６ｃが、作業負荷の処理を分担し（share）、作業負荷処理の結果を出力し得るように、処理デバイス３０２、３０６ａ、３０６ｂ、３０６ｃ間でデータを送信するように構成され得る。結果が正しくあるためには（For the results to be correct）、処理デバイス３０２、３０６ａ、３０６ｂ、３０６ｃへ入力されるおよび処理デバイス３０２、３０６ａ、３０６ｂ、３０６ｃから出力されるデータは、Ｉ／Ｏコヒーレントモードがアクティブである間、コヒーレントインターコネクト３１２のコヒーレンシメカニズムによってインプリメントされ得るコヒーレンシ要件（requirements）が課せられ（be subject to）得る。様々な態様では、コヒーレンシドメイン３１４、またはスヌープフィルタ（図示せず）のような、コヒーレントインターコネクト３１２の他のコヒーレンシメカニズムが、処理デバイスキャッシュ３０８、３１０ａ、３１０ｂ、３１０ｃおよび／または共有メモリ３０４へのメモリアクセス要求の受け取りに基づいて、コヒーレンシチェックおよび無効化を実行するように構成され得る。コヒーレンシドメイン３１４はまた、処理デバイス３０２、３０６ａ、３０６ｂ、３０６ｃおよび／または共有メモリ３０４の間のトランザクションの確認応答の受け取り（receipt）に基づいて、トランザクションをクリアするように構成され得る。
【００３５】
[0054]Ｉ／Ｏコヒーレントモードが非アクティブであるか、または処理デバイスキャッシュ３０８、３１０ａ、３１０ｂ、３１０ｃおよび／または共有メモリ３０４が、非Ｉ／Ｏコヒーレントモードにある間、処理デバイス３０２、３０６ａ、３０６ｂ、３０６ｃへ入力されるおよび処理デバイス３０２、３０６ａ、３０６ｂ、３０６ｃから出力されるデータの正確性は、処理デバイス３０２、３０６ａ、３０６ｂ、３０６ｃそれら自体によって管理され得る。様々な態様では、キャッシュ保守動作は、処理デバイスキャッシュ３０８、３１０ａ、３１０ｂ、３１０ｃに記憶されたデータのために、処理デバイス３０２、３０６ａ、３０６ｂ、３０６ｃによってインプリメントされ得る。様々な態様では、キャッシュ管理デバイス（図示せず）および／またはプロセッサコアを含む、処理デバイス３０２、３０６ａ、３０６ｂ、３０６ｃのコンポーネントは、キャッシュ保守動作をインプリメントするように構成され得る。コヒーレントインターコネクト３１２は、コヒーレンシ動作を実施すること（conducting）なく、依然として処理デバイス３０２、３０６ａ、３０６ｂおよび／または共有メモリ３０４間のデータ間のデータ（data between the data between）を送信し得る。
【００３６】
[0055]図３Ｂは、Ｉ／Ｏコヒーレント書込み要求をインプリメントしているコヒーレントインターコネクトを有する異種コンピューティングデバイスの例となる態様を例示する。図３Ｂにおける例は、カスタムハードウェアアクセラレータ３０６ｃを例示し、これは、Ｉ／Ｏコヒーレント書込み要求データとともにＩ／Ｏコヒーレント書込み要求を発行するハードウェアアクセラレータ３０６ａ、３０６ｂのうちの任意のものによって置き換えられ得る。カスタムハードウェアアクセラレータ３０６ｃは、共有メモリ３０４に対する（to）Ｉ／Ｏコヒーレント書込み要求を発行し得る。Ｉ／Ｏコヒーレント書込み要求は、Ｉ／Ｏコヒーレント書込み要求経路３２４ａ、３２４ｂ、３２４ｃ、３２４ｄをたどり（follow）得、Ｉ／Ｏコヒーレント書込み要求データは、Ｉ／Ｏコヒーレント書込みデータ経路３２０ａ、３２０ｂ、３２０ｃ、３２０ｄをたどり得る。Ｉ／Ｏコヒーレント書込み要求を発行すると、カスタムハードウェアアクセラレータ３０６ｃは、Ｉ／Ｏコヒーレント書込み要求経路（path）３２４ａに沿って、コヒーレントインターコネクト３１２にＩ／Ｏコヒーレント書込み要求を送り、Ｉ／Ｏコヒーレント書込みデータ経路３２０ａに沿って、コヒーレントインターコネクト３１２にＩ／Ｏコヒーレント書込み要求データを送り得る。
【００３７】
[0056]コヒーレントインターコネクト３１２は、Ｉ／Ｏコヒーレント書込み要求経路３２４ｂに沿って、コヒーレンシドメイン３１４へ（to）とＩ／Ｏコヒーレント書込み要求を向かわせ（direct）、Ｉ／Ｏコヒーレント書込みデータ経路３２０ｂに沿って、コヒーレンシドメイン３１４へとＩ／Ｏコヒーレント書込み要求データを向かわせ得る。ここで説明されるように、コヒーレンシドメイン３１４は、Ｉ／Ｏコヒーレント書込み要求データの正確性を保証するために、様々なコヒーレンシ動作を実行し得る。コヒーレンシドメイン３１４は、Ｉ／Ｏコヒーレント書込み要求経路３２４ｃに沿って、コヒーレントインターコネクト３１２にＩ／Ｏコヒーレント書込み要求を返送し、Ｉ／Ｏコヒーレント書込みデータ経路３２０ｃに沿って、コヒーレントインターコネクト３１２にＩ／Ｏコヒーレント書込み要求データを返送し得る。コヒーレントインターコネクト３１２は、Ｉ／Ｏコヒーレント書込み要求経路３２４ｄに沿って、共有メモリ３０４にＩ／Ｏコヒーレント書込み要求を送り、Ｉ／Ｏコヒーレント書込みデータ経路３２０ｄに沿って、共有メモリ３０４にＩ／Ｏコヒーレント書込み要求データを送り得る。
【００３８】
[0057]Ｉ／Ｏコヒーレント書込み要求に応答して、共有メモリ３０４は、Ｉ／Ｏコヒーレント確認応答経路３２６ａ、３２６ｂ、３２６ｃ、３２６ｄに沿って、カスタムハードウェアアクセラレータ３０６ｃおよびコヒーレンシドメイン３１４に確認応答を返し（return）得る。Ｉ／Ｏコヒーレント確認応答経路３２６ａ、３２６ｂ、３２６ｃ、３２６ｄは、共有メモリ３０４からカスタムハードウェアアクセラレータ３０６ｃへ、逆方向にＩ／Ｏコヒーレント書込み要求経路３２４ａ、３２４ｂ、３２４ｃ、３２４ｄをたどり得、Ｉ／Ｏコヒーレント確認応答経路３２６ａ、３２６ｂ、３２６ｃ、３２６ｄと呼ばれ得る。共有メモリ３０４は、Ｉ／Ｏコヒーレント確認応答経路３２６ａに沿って、コヒーレントインターコネクト３１２に確認応答を送り得る。コヒーレントインターコネクト３１２は、Ｉ／Ｏコヒーレント確認応答経路３２６ｂに沿って、コヒーレンシドメイン３１４に確認応答を送り得る。コヒーレントインターコネクト３１２は、Ｉ／Ｏコヒーレント確認応答経路３２６ｃに沿って、コヒーレントインターコネクト３１２に確認応答を返送し得る。コヒーレントインターコネクト３１２は、Ｉ／Ｏコヒーレント確認応答経路３２６ｄに沿って、カスタムハードウェアアクセラレータ３０６ｃに確認応答を送り得る。
【００３９】
[0058]図３Ｂに例示されるこの例は、非Ｉ／Ｏコヒーレント書込みデータを伴う（with）非Ｉ／Ｏコヒーレント書込み要求と比較した、コヒーレントインターコネクト３１２を通る（through）Ｉ／Ｏコヒーレント書込み要求経路３２４ａ、３２４ｂ、３２４ｃ、３２４ｄおよびＩ／Ｏコヒーレント書込みデータ経路３２０ａ、３２０ｂ、３２０ｃにおける相違（divergence）を示す。例示されるように、Ｉ／Ｏコヒーレント書込み要求およびＩ／Ｏコヒーレント書込み要求データは、コヒーレンシドメイン３１４を通って送られ得る。非Ｉ／Ｏコヒーレント書込み要求および非Ｉ／Ｏコヒーレント書込みデータは、コヒーレンシドメイン３１４に送られることなく、コヒーレントインターコネクト３１２によって共有メモリ３０４に直接送られ得る。カスタムハードウェアアクセラレータ３０６ｃから共有メモリ３０４への経路の各々は、それら独自のレイテンシを有し得る。図３Ｂに例示される例は、Ｉ／Ｏコヒーレント書込み高レイテンシ（high latency）経路３２２ａ、３２２ｂ、３２２ｃ、３２２ｄを示す。Ｉ／Ｏコヒーレント書込み要求および／またはＩ／Ｏコヒーレント書込み要求データを送信するためのレイテンシは、カスタムハードウェアアクセラレータ３０６ｃからコヒーレントインターコネクト３１２へのＩ／Ｏコヒーレント書込み高レイテンシ経路３２２ａに沿って；コヒーレントインターコネクト３１２からコヒーレンシドメイン３１４へのＩ／Ｏコヒーレント書込み高レイテンシ経路３２２ｂに沿って；コヒーレンシドメイン３１４からコヒーレントインターコネクト３１２に戻るＩ／Ｏコヒーレント書込み高レイテンシ経路３２２ｃに沿って；およびコヒーレントインターコネクト３１２から共有メモリ３０４へのＩ／Ｏコヒーレント書込み高レイテンシ経路３２２ｄに沿って、たどり（follow）得る。
【００４０】
[0059]図３Ｃは、ハイブリッドＩ／Ｏコヒーレント書込み要求をインプリメントしているコヒーレントインターコネクトを有する異種コンピューティングデバイスの例となる態様を例示する。図３Ｃにおける例は、ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされている状態で（with）、Ｉ／Ｏコヒーレント書込み要求データとともにＩ／Ｏコヒーレント書込み要求を発行している、ハードウェアアクセラレータ３０６ａ、３０６ｂのうちの任意のものによって置き換えられ得る、カスタムハードウェアアクセラレータ３０６ｃを例示する。カスタムハードウェアアクセラレータ３０６ｃは、共有メモリ３０４に対するＩ／Ｏコヒーレント書込み要求を発行し得る。Ｉ／Ｏコヒーレント書込み要求は、ハイブリッドＩ／Ｏコヒーレント書込み要求経路３３４ａ、３３４ｂ、３３４ｄをたどり得、Ｉ／Ｏコヒーレント書込み要求データは、ハイブリッドＩ／Ｏコヒーレント書込みデータ経路３３０ａ、３３０ｄをたどり得る。Ｉ／Ｏコヒーレント書込み要求を発行すると、カスタムハードウェアアクセラレータ３０６ｃは、ハイブリッドＩ／Ｏコヒーレント書込み要求経路３３４ａに沿って、コヒーレントインターコネクト３１２にＩ／Ｏコヒーレント書込み要求を送り、ハイブリッドＩ／Ｏコヒーレント書込みデータ経路３３０ａに沿って、コヒーレントインターコネクト３１２にＩ／Ｏコヒーレント書込み要求データを送り得る。
【００４１】
[0060]コヒーレントインターコネクト３１２は、ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定し、ハイブリッドＩ／Ｏコヒーレント書込み要求として、Ｉ／Ｏコヒーレント書込み要求をマーキングし、ハイブリッドＩ／Ｏコヒーレント書込み要求経路３３４ｂに沿って、コヒーレンシドメイン３１４へとハイブリッドＩ／Ｏコヒーレント書込み要求を向かわせ得る。コヒーレントインターコネクト３１２は、Ｉ／Ｏコヒーレント書込み要求データをコヒーレンシドメイン３１４へと向かわせることはできない。ここで説明されるように、コヒーレンシドメイン３１４は、Ｉ／Ｏコヒーレント書込み要求データの正確性を保証するために、様々なコヒーレンシ動作を実行し得る。コヒーレンシドメイン３１４が、Ｉ／Ｏコヒーレント書込み要求データを受信することができない（may not）ので、コヒーレンシドメイン３１４は、共有メモリ３０４に、ハイブリッドＩ／Ｏコヒーレント書込み要求および／またはＩ／Ｏコヒーレント書込み要求データを送ることができない（may not）。コヒーレントインターコネクト３１２は、ハイブリッドＩ／Ｏコヒーレント書込み要求経路３３４ｄに沿って、共有メモリ３０４にハイブリッドＩ／Ｏコヒーレント書込み要求を送り、Ｉ／Ｏコヒーレント書込みデータ経路３３０ｄに沿って、共有メモリ３０４にＩ／Ｏコヒーレント書込み要求データを送り得る。
【００４２】
[0061]ハイブリッドＩ／Ｏコヒーレント書込み要求に応答して、共有メモリ３０４は、ハイブリッドＩ／Ｏコヒーレント確認応答経路３３６ａ、３３６ｂ、３３６ｃに沿って、カスタムハードウェアアクセラレータ３０６ｃおよびコヒーレンシドメイン３１４に確認応答を返し得る。共有メモリ３０４は、ハイブリッドＩ／Ｏコヒーレント確認応答経路３３６ａに沿って、コヒーレントインターコネクト３１２に確認応答を送り得る。様々な態様では、コヒーレントインターコネクト３１２は、ハイブリッドＩ／Ｏコヒーレント確認応答経路３３６ｂに沿って、コヒーレンシドメイン３１４に確認応答を送り得る。様々な態様では、共有メモリ３０４は、ハイブリッドＩ／Ｏコヒーレント確認応答経路３３６ａ、３３６ｂに沿って、コヒーレンシドメイン３１４に確認応答を送り得る。コヒーレントインターコネクト３１２は、ハイブリッドＩ／Ｏコヒーレント確認応答経路３３６ｃに沿って、カスタムハードウェアアクセラレータ３０６ｃに確認応答を送り得る。
【００４３】
[0062]図３Ｃに例示されるこの例は、コヒーレントインターコネクト３１２を通るハイブリッドＩ／Ｏコヒーレント書込み要求経路３３４ａ、３３４ｂ、３３４ｄおよびハイブリッドＩ／Ｏコヒーレント書込みデータ経路３３０ａ、３３０ｄにおける相違を示す。例示されるように、ハイブリッドＩ／Ｏコヒーレント書込み要求は、コヒーレントインターコネクト３１２によって、コヒーレンシドメイン３１４に、および直接共有メモリ３０４に送られ得る。しかしながら、図３Ｂにおける例とは異なり、Ｉ／Ｏコヒーレント書込み要求データは、コヒーレントインターコネクト３１２によって直接共有メモリ３０４に送られ得、コヒーレンシドメイン３１４へは送られ得ない。カスタムハードウェアアクセラレータ３０６ｃから共有メモリ３０４への経路の各々は、それら独自のレイテンシを有し得る。図３Ｂに例示される例は、コヒーレントインターコネクト３１２およびコヒーレンシドメイン３１４を通るＩ／Ｏコヒーレント書込み高レイテンシ経路３２２ａ、３２２ｂ、３２２ｃ、３２２ｄを示す。図３Ｃに例示される例は、ハイブリッドＩ／Ｏコヒーレント書込み高レイテンシ経路３３２ａ、３３２ｄを示す。ハイブリッドＩ／Ｏコヒーレント書込み要求および／またはＩ／Ｏコヒーレント書込み要求データを送信するためのレイテンシは、カスタムハードウェアアクセラレータ３０６ｃからコヒーレントインターコネクト３１２へのハイブリッドＩ／Ｏコヒーレント書込み高レイテンシ経路３３２ａに沿って、およびコヒーレントインターコネクト３１２から共有メモリ３０４へのハイブリッドＩ／Ｏコヒーレント書込み高レイテンシ経路３３２ｄに沿って、たどり得る。
【００４４】
[0063]図３Ｂに例示される例におけるＩ／Ｏコヒーレント書込み高レイテンシ経路３２２ａ、３２２ｂ、３２２ｃ、３２２ｄは、Ｉ／Ｏコヒーレント書込み要求経路３２４ａ、３２４ｂ、３２４ｃ、３２４ｄおよびＩ／Ｏコヒーレント書込みデータ経路３２０ａ、３２０ｂ、３２０ｃの両方がコヒーレンシドメイン３１４を通り得るので、コヒーレンシドメイン３１４を通り得る。しかしながら、図３Ｃに例示される例では、ハイブリッドＩ／Ｏコヒーレント書込み高レイテンシ経路３３２ａ、３３２ｄは、ハイブリッドＩ／Ｏコヒーレント書込みデータ経路３３０ａ、３３０ｄがコヒーレンシドメイン３１４を通ることができないので（as）、コヒーレンシドメイン３１４を通ることなく、コヒーレントインターコネクト３１２を通り得る。レイテンシにおける差は、Ｉ／Ｏコヒーレント書込みと比較した、ハイブリッドＩ／Ｏコヒーレント書込みの関連するロジック、クロックドメインクロッシング（clock domain crossings）の数、および距離に関するレイテンシという点ではより短い経路によって説明され得る。ハイブリッドＩＯコヒーレント書込みは、コヒーレンシ動作を、書込み要求の共有メモリ３０４への横断（traversal to）および共有メモリ３０４における実行とオーバラップさせることによって、Ｉ／Ｏコヒーレント書込みと比較して、パフォーマンス速度の利点（performance speed advantage）を提供し得る。したがって、ハイブリッドＩ／Ｏコヒーレント書込み高レイテンシ経路３３２ａ、３３２ｄは、Ｉ／Ｏコヒーレント書込み高レイテンシ経路３２２ａ、３２２ｂ、３２２ｃ、３２２ｄよりも低いレイテンシを示し得る。同様に、ハイブリッドＩ／Ｏコヒーレント書込み要求と対比した（versus）Ｉ／Ｏコヒーレント書込み要求についてのより遅いパフォーマンスは、コヒーレンシドメイン３１４を通ることなくコヒーレントインターコネクト３１２を通るハイブリッドＩ／Ｏコヒーレント書込みデータ経路３３０ａ、３３０ｄよりも、コヒーレンシドメイン３１４を通るＩ／Ｏコヒーレント書込みデータ経路３２０ａ、３２０ｂ、３２０ｃ、３２０ｄに沿った、より低い帯域幅の可用性によって説明され得る。
【００４５】
[0064]図３Ａ〜図３Ｃは、ハイブリッドＩ／Ｏコヒーレント書込みシステムおよび／または動的Ｉ／Ｏコヒーレンシシステムをインプリメントするように構成された異種コンピューティングデバイスの非限定的な例を例示する。特に、図３Ａ〜図３Ｃのそれらを参照し、および図３Ａ〜図３Ｃに関連した、ここで例示および説明された例は、非限定的である。ハイブリッドＩ／Ｏコヒーレント書込みシステムおよび／または動的Ｉ／Ｏコヒーレンシシステムをインプリメントするように構成された異種コンピューティングデバイスは、任意の数および／または組合せの処理デバイス（any number and/or combination of processing devices）、プロセッサコア、処理デバイスキャッシュ（例えば、専有キャッシュおよび／または共有キャッシュ）、コヒーレントインターコネクト、共有メモリ、およびそのようなコンポーネント間の接続を含み得る。
【００４６】
[0065]図４〜図９は、作業負荷オフローディングの例となる態様を例示する。これらの例は、処理デバイス（例えば、ＣＰＵ）３０２からハードウェアアクセラレータ（例えば、ＧＰＵ、ＤＳＰ、カスタムハードウェアアクセラレータ、等）３０６への作業負荷オフローディングを例示する。これらの例は、処理デバイス３０２と、単一のハードウェアアクセラレータ３０６との間の作業負荷オフローディングを例示する。様々な態様では、処理デバイス３０２とハードウェアアクセラレータ３０６との間で送信されるデータは、共有メモリ（例えば、図３Ａ〜図３Ｃにおける共有メモリ３０４）への読取り／書込みを通じて送信され得、キャッシュミスメカニズムを介してトリガされ得る。様々な態様では、共有メモリを介したものを含む、データ送信は、オフロードされた作業負荷の実行中ずっと（throughout）行われ得る。１対１の作業負荷オフローディングのこれらの例は、非限定的であり、処理デバイス３０２は、任意の数の共有メモリを介したものを含む、任意の数のハードウェアアクセラレータ３０６および／または他の処理デバイス３０２に作業負荷の一部をオフロードし得る。
【００４７】
[0066]図４〜図９に例示される例の各々では、処理デバイス３０２は、作業負荷を実行することをタスクとして課され（tasked with）得る。処理デバイス３０２は、ハードウェアアクセラレータ３０６に作業負荷の一部をオフロードするように構成され得る。オフロードされた作業負荷のためのデータは、処理デバイスキャッシュ（例えば、図３Ａにおける処理デバイスキャッシュ３０８）に記憶され得る。データは、ハードウェアアクセラレータ３０６に、コヒーレントインターコネクト（例えば、図３Ａ〜図３Ｃにおけるコヒーレントインターコネクト３１２）を介して送信され得る。様々な態様では、データは、コヒーレントインターコネクトに通信可能に接続またはコヒーレントインターコネクトと一体化される共有メモリを通じて送信され得る（the data may be transmitted through the shared memory communicatively connect or integral to the coherent interconnect.  ）。ハードウェアアクセラレータ３０６は、送信されたデータを使用して、オフロードされた作業負荷を実行し、処理デバイス３０２に結果を返送して、処理デバイスキャッシュに書き込まれるようにし得る。
【００４８】
[0067]図４は、非Ｉ／Ｏコヒーレント作業負荷処理の例となる態様を例示する。ハードウェアアクセラレータ３０６に、オフロードされた作業負荷のためのデータを送信するために、およびハードウェアアクセラレータ３０６から受信された結果を出力するために、処理デバイス３０２は、コヒーレントインターコネクトを介して、直接ハードウェアアクセラレータ３０６に、または、共有メモリに、そしてその後、ハードウェアアクセラレータ３０６に、のいずれかにデータを書き込むためのキャッシュ保守動作をインプリメントし得る。ここで述べられているように、非Ｉ／Ｏコヒーレントデータ送信中、コヒーレントインターコネクトは、コヒーレンシ動作を実施する（conducting）ことなく、処理デバイス３０２と共有メモリおよび／またはハードウェアアクセラレータ３０６との間でデータの間でデータ（data between the data between the processing device 302 and the shared memory and/or the hardware accelerator 306）を送信し得る。
【００４９】
[0068]ハードウェアアクセラレータ３０６に、オフロードされた作業負荷のためのデータを送信するために、処理デバイス３０２は、コヒーレントインターコネクトを介して、ハードウェアアクセラレータ３０６におよび／または共有メモリにデータを書き込むために、キャッシュフラッシュ保守動作４００をインプリメントし得る。複数の宛先（multiple destination）にデータを書き込むキャッシュフラッシュ保守動作４００は、オーバヘッド４０４ａを生じさせ（creates）、これは、オフロードされた作業負荷のために書き出される（written out）、処理デバイスキャッシュにおけるデータの量に依存して変化し得る。処理デバイスキャッシュに記憶されたデータは、パーティションまたはバッファに記憶され得、キャッシュフラッシュ保守動作４００は、処理デバイスキャッシュのこのような特定の部分に対して（for）インプリメントされ得る。そうでない場合、キャッシュフラッシュ保守動作４００は、処理デバイスキャッシュ全体に対してインプリメントされ得る。オーバヘッド４０４ａは、ハードウェアアクセラレータ３０６による、オフロードされた作業負荷の実行の開始（commencement）を遅延させ得る。
【００５０】
[0069]キャッシュフラッシュ保守動作４００のオーバヘッド４０４ａに相関する（correlating）時間の間、処理デバイス３０２は、ハードウェアアクセラレータ３０６に作業負荷の一部をオフロードすることを完了し得る。様々な態様では、ハードウェアアクセラレータ３０６に作業負荷の一部をオフロードすることは、処理デバイスキャッシュおよび／または共有メモリにアクセスしているハードウェアアクセラレータ３０６によるデータの読み取りおよび書き込みを含み得る。共有メモリへのアクセスは、処理デバイスキャッシュのキャッシュミスに関する（for）キャッシュミスメカニズムを介してインプリメントされ得る。ハードウェアアクセラレータ３０６は、ローカルにデータをキャッシュする必要なしに、処理デバイスキャッシュおよび／または共有メモリから取り出されたデータを使用して、オフロードされた作業負荷を実行し得る。様々な態様では、ハードウェアアクセラレータ３０６は、そのハードウェアアクセラレータキャッシュ（例えば、図３Ａ〜図３Ｃにおける処理デバイスキャッシュ３１０ａ、３１０ｂ、３１０ｃ）に、オフロードされた作業負荷のための（for）任意の送信されたデータを記憶し得る。ハードウェアアクセラレータ３０６は、オフロードされた作業負荷の実行を起動し４０８、オフロードされた作業負荷を実行し得る４０６ａ。オフロードされた作業負荷を実行することに費やされる時間の長さは、温度を含む環境要因、および／または、電力（electrical power）、計算能力、メモリ空間、通信帯域幅、を含む、ハードウェアアクセラレータ３０６の可用性および／またはハードウェアアクセラレータ３０６のための可用性および／またはリソースの使用、オフロードされた作業負荷のサイズおよび／または複雑さを含む、様々な要因に依存し得る。ハードウェアアクセラレータ３０６は、オフロードされた作業負荷の実行（offloaded workload execution）を終了し得４１０、コヒーレントインターコネクトを介して、処理デバイス３０２に、オフロードされた作業負荷の実行４０６ａの結果を返す。
【００５１】
[0070]オフロードされた作業負荷の実行の結果を、処理デバイス３０２に利用可能にするために、処理デバイス３０２は、結果がハードウェアアクセラレータ３０６によって出力された後（after）、ミスとして結果を現在記憶している共有メモリへと処理デバイスキャッシュ空間の将来の読み取りを向けるためのキャッシュ無効化保守動作４０２をインプリメントし得る。キャッシュ無効化保守動作４０２はまた、オーバヘッド４０４ｂを生じさせ得、これは、オフロードされた作業負荷の結果を記憶するために処理デバイスキャッシュにおいて使用される空間または記憶されたオフロードされた作業負荷の結果のデータの量に依存して変化し得る。オーバヘッド４０４ｂは、処理デバイス３０２によるアクセスに対する、オフロードされた作業負荷の結果の可用性を遅延させ得る。キャッシュ無効化保守動作４０２が完了すると、オフロードされた作業負荷の結果は、処理デバイス３０２による、オフロードされた作業負荷の結果のアクセス、使用、および／または出力のために利用可能になり得る４１２。処理デバイス３０２は、オフロードされた作業負荷の実行４０６ａの結果を受信し、その処理デバイスキャッシュに結果を記憶し得る。
【００５２】
[0071]図５は、Ｉ／Ｏコヒーレント作業負荷処理の例となる態様を例示する。ハードウェアアクセラレータ３０６に、オフロードされた作業負荷のためのデータを送信するために、およびハードウェアアクセラレータ３０６から受信された結果を出力するために、コヒーレンシメカニズム（例えば、図３Ａ〜図３Ｃにおけるコヒーレンシドメイン３１４および／またはスヌープフィルタ）が、処理デバイスキャッシュおよび／または共有メモリにおけるデータの正確性を保証するために、コヒーレントインターコネクトによって継続的に（continuously）インプリメントされ得る。したがって、処理デバイスキャッシュおよび／または共有メモリがＩ／Ｏコヒーレントモードにある間、処理デバイス３０２は、それが非Ｉ／Ｏコヒーレントモードのために（for）インプリメントし得るキャッシュ保守動作を、インプリメントし得ない（may not）。
【００５３】
[0072]処理デバイス３０２は、ハードウェアアクセラレータ３０６に作業負荷の一部をオフロードし得る。様々な態様では、ハードウェアアクセラレータ３０６に作業負荷の一部（portion）をオフロードすることは、処理デバイスキャッシュおよび／または共有メモリにアクセスしているハードウェアアクセラレータ３０６によるデータの読み取りおよび書き込みを含み得る。共有メモリへのアクセスは、処理デバイスキャッシュのキャッシュミスに関するキャッシュミスメカニズムを介してインプリメントされ得る。ハードウェアアクセラレータ３０６は、ローカルにデータをキャッシュする必要なしに、処理デバイスキャッシュおよび／または共有メモリから取り出されたデータを使用して、オフロードされた作業負荷を実行し得る。様々な態様では、ハードウェアアクセラレータ３０６は、そのハードウェアアクセラレータキャッシュ（例えば、図３Ａ〜図３Ｃにおける処理デバイスキャッシュ３１０ａ、３１０ｂ、３１０ｃ）に、オフロードされた作業負荷のための任意の送信されたデータを記憶し得る。ハードウェアアクセラレータ３０６は、オフロードされた作業負荷の実行を起動し４０８、オフロードされた作業負荷を実行し得る４０６ｂ。非Ｉ／Ｏコヒーレントモードでの処理デバイスキャッシュおよび／または共有メモリについてのように（as for）、オフロードされた作業負荷データを送信するためのオーバヘッドを生じさせるのではなく（Rather than）、Ｉ／Ｏコヒーレントモードでは、コヒーレンシはデータが転送されている間に保守され得、したがって（so that）、いかなるオーバヘッドも、オフロードされた作業負荷の起動の実行４０８の前には生じない。
【００５４】
[0073]オーバヘッド４０４ｃにおける増大は、依然として、オフロードされた作業負荷の実行４０６ｂ中に生じ得る。このオーバヘッド４０４ｃは、オフロードされた作業負荷の結果のデータが移動する（travels）コヒーレント経路のパフォーマンスによって引き起こされ得る。コヒーレントインターコネクトは、ハードウェアアクセラレータ３０６がオフロードされた作業負荷の結果を生成するほど迅速に、そのコヒーレンシメカニズムをインプリメントし、オフロードされた作業負荷の結果を転送することが可能でないことがあり得る。コヒーレントインターコネクトは、追加されたオーバヘッド４０４ｃをもたらすコヒーレンシメカニズムをインプリメントしている間、オフロードされた作業負荷の結果に対してボトルネック（bottleneck）を引き起こし得る。様々な態様では、オーバヘッド４０４ｃは、オフロードされた作業負荷を実行する４０６ｂためのハードウェアアクセラレータ３０６のランタイムに比例またはおおよそ比例し得る。
【００５５】
[0074]いったんコヒーレントインターコネクトのコヒーレンシメカニズムが、処理デバイスキャッシュおよび／または共有メモリにおけるオフロードされた作業負荷の結果の正確性を保証するためのそれらの動作を完了すると、オフロードされた作業負荷の結果は、処理デバイス３０２による、オフロードされた作業負荷の結果のアクセス、使用、および／または出力に利用可能になり得る４１２。
【００５６】
[0075]図６および図７は、動的Ｉ／Ｏコヒーレント作業負荷処理の例となる態様を例示する。図６および図７の各々に例示される例では、処理デバイス３０２による作業負荷オフローディングは、Ｉ／Ｏコヒーレントモードにある（in）処理デバイスキャッシュおよび／または共有メモリで始まり得る。したがって、ハードウェアアクセラレータ３０６に、オフロードされた作業負荷のためのデータを送信するために、およびハードウェアアクセラレータ３０６によって生成される結果を受信および／または出力するために、コヒーレンシメカニズム（例えば、図３Ａ〜図３Ｃにおけるコヒーレンシドメイン３１４および／またはスヌープフィルタ）が、処理デバイスキャッシュおよび／または共有メモリにおけるデータの正確性を保証するために、コヒーレントインターコネクトによって継続的にインプリメントされ得る。したがって、処理デバイスキャッシュおよび／または共有メモリがＩ／Ｏコヒーレントモードにある間、処理デバイス３０２は、それが非Ｉ／Ｏコヒーレントモードのために（for）インプリメントすることができるキャッシュ保守動作を、インプリメントすることができない（may not）。
【００５７】
[0076]処理デバイス３０２は、ハードウェアアクセラレータ３０６に作業負荷の一部をオフロードし得る。様々な態様では、ハードウェアアクセラレータ３０６に作業負荷の一部をオフロードすることは、処理デバイスキャッシュおよび／または共有メモリにアクセスしているハードウェアアクセラレータ３０６によるデータの読み取りおよび書き込みを含み得る。共有メモリへのアクセスは、処理デバイスキャッシュのキャッシュミスに関するキャッシュミスメカニズムを介してインプリメントされ得る。ハードウェアアクセラレータ３０６は、ローカルにデータをキャッシュする必要なしに、処理デバイスキャッシュおよび／または共有メモリから取り出されたデータを使用して、オフロードされた作業負荷を実行し得る。様々な態様では、ハードウェアアクセラレータ３０６は、そのハードウェアアクセラレータキャッシュ（例えば、図３Ａ〜図３Ｃにおける処理デバイスキャッシュ３１０ａ、３１０ｂ、３１０ｃ）に、オフロードされた作業負荷のための任意の送信されたデータを記憶し得る。ハードウェアアクセラレータ３０６は、オフロードされた作業負荷の実行を起動し４０８、オフロードされた作業負荷を実行し得る４０６ｃ、４０６ｄ。非Ｉ／Ｏコヒーレントモードでの処理デバイスキャッシュおよび／または共有メモリについてのように（as for）、オフロードされた作業負荷データを送信するためのオーバヘッドを生じさせるのではなく、Ｉ／Ｏコヒーレントモードでは、コヒーレンシはデータが転送されている間に保守され得、したがって、いかなるオーバヘッドも、オフロードされた作業負荷の起動の実行４０８の前には生じない。
【００５８】
[0077]図６に例示される例は、ハードウェアアクセラレータ３０６による短期的な（short run）オフロードされた作業負荷の実行のための動的Ｉ／Ｏコヒーレント作業負荷処理のインプリメンテーションである。ここで説明されるように、オーバヘッド４０４ｄは、依然として、オフロードされた作業負荷の実行４０６ｃのために生じ得る。動的Ｉ／Ｏコヒーレント作業負荷処理では、オーバヘッド４０４ｄがオーバヘッドしきい値未満のままである限り、オフロードされた作業負荷の実行（execution of the offloaded workload）４０６ｃは、Ｉ／Ｏコヒーレントモードにある処理デバイスキャッシュおよび／または共有メモリとともに継続し得る。したがって、オーバヘッド４０４ｄは、ここで説明されるように、オフロードされた作業負荷の結果（the offloaded workload result）を送信しているコヒーレントインターコネクトのパフォーマンスによって引き起こされるオーバヘッドに限定される。いったんコヒーレントインターコネクトのコヒーレンシメカニズムが、処理デバイスキャッシュおよび／または共有メモリにおけるオフロードされた作業負荷の結果の正確性を保証するために（to）それらの動作を完了すると、オフロードされた作業負荷の結果は、処理デバイス３０２による、オフロードされた作業負荷の結果のアクセス、使用、および／または出力のために利用可能になり得る４１２。
【００５９】
[0078]図７に例示される例は、ハードウェアアクセラレータ３０６による長期的な（long run）オフロードされた作業負荷の実行のための動的Ｉ／Ｏコヒーレント作業負荷処理のインプリメンテーションである。ここで説明されるように、オーバヘッド４０４ｅは、依然として、オフロードされた作業負荷の実行４０６ｃのために生じ得る。動的Ｉ／Ｏコヒーレント作業負荷処理では、長期的なオフロードされた作業負荷は、オーバヘッドしきい値を超えるオーバヘッド４０４ｅを生じさせ（produce）得る。様々な方法は、ここでさらに説明されるように、処理デバイス３０２がアイドル状態に入ること、経過時間、および／またはオフロードされた作業負荷の実行の苦難（suffering）を含む、オーバヘッドしきい値を超える長期的な作業負荷を検出するために使用され得る。
【００６０】
[0079]長期的なオフロードされた作業負荷を検出することに応答して、処理デバイス３０２は、Ｉ／Ｏコヒーレントモードから非Ｉ／Ｏコヒーレントモードに、処理デバイスキャッシュおよび／または共有メモリを動的に遷移し得る。Ｉ／Ｏコヒーレントモードから非Ｉ／Ｏコヒーレントモードに遷移するために、処理デバイス３０２は、処理デバイスキャッシュおよび／または共有メモリがＩ／Ｏコヒーレントモードのままでありながら（while）、キャッシュ保守動作をインプリメントし始め得る。例えば、処理デバイス３０２は、ハードウェアアクセラレータがオフロードされた作業負荷の実行４０４ｄを継続しながら、キャッシュフラッシュ保守動作４００をインプリメントし得る。キャッシュフラッシュ保守動作４００中、オフロードされた作業負荷の実行４０４ｄは、Ｉ／Ｏコヒーレントモードオーバヘッド４０４ｅを生じさせ続け得るが、いかなるオーバヘッドも、キャッシュフラッシュ保守動作４００のために生じ得ない。したがって、オーバヘッド４０４ｄは、ここで説明されるように、オフロードされた作業負荷の結果を送信しているコヒーレントインターコネクトのパフォーマンスによって引き起こされるオーバヘッドに限定され得る。
【００６１】
[0080]キャッシュフラッシュ保守動作４００が完了すると、処理デバイスキャッシュおよび／または共有メモリは、Ｉ／Ｏコヒーレントモードから非Ｉ／Ｏコヒーレントモードに動的に切り替わり得る４１４。Ｉ／Ｏコヒーレントモードと非Ｉ／Ｏコヒーレントモードとの間の切替え４１４は、オフロードされた作業負荷の実行４０４ｄを中断させ得ない（may not）。オフロードされた作業負荷の実行４０４ｄが継続する間、それ以上の（no more）Ｉ／Ｏコヒーレントモードオーバヘッド４０４ｅは生じ得ない（may be incurred）。ハードウェアアクセラレータ３０６は、オフロードされた作業負荷の実行を終了し得４１０、コヒーレントインターコネクトおよび／または共有メモリを介して、処理デバイス３０２に、オフロードされた作業負荷の実行４０６ｄの結果を返す。
【００６２】
[0081]オフロードされた作業負荷の実行の結果を処理デバイス３０２に利用可能にするために、処理デバイス３０２は、ここでさらに説明されるように、キャッシュ無効化保守動作４０２をインプリメントし得る。キャッシュ無効化保守動作４０２は、オーバヘッド４０４ｂを作成し得、これは、オフロードされた作業負荷の結果を記憶するために、処理デバイスキャッシュにおいて（in）使用される空間または記憶されたオフロードされた作業負荷の結果のデータの量に依存して変化し得る。オーバヘッド４０４ｂは、処理デバイス３０２によるアクセスに対する（for）、オフロードされた作業負荷の結果の可用性を遅延させ得る。キャッシュ無効化保守動作４０２が完了すると、オフロードされた作業負荷の結果は、処理デバイス３０２によるオフロードされた作業負荷の結果のアクセス、使用、および／または出力のために利用可能になり得る４１２。処理デバイス３０２は、オフロードされた作業負荷の実行４０６ａの結果を受信し、その処理デバイスキャッシュに結果を記憶し得る。
【００６３】
[0082]図８は、ハイブリッドＩ／Ｏコヒーレント書込みを用いた（with）Ｉ／Ｏコヒーレント作業負荷処理の例となる態様を例示する。ハードウェアアクセラレータ３０６に、オフロードされた作業負荷のためのデータを送信するために、およびハードウェアアクセラレータ３０６から受信された結果を出力するために、コヒーレンシメカニズム（例えば、図３Ａ〜図３Ｃにおけるコヒーレンシドメイン３１４）は、処理デバイスキャッシュにおけるデータの正確性を保証するために、コヒーレントインターコネクトによって継続的にインプリメントされ得る。したがって、処理デバイスキャッシュが、Ｉ／Ｏコヒーレントモードにある間、処理デバイス３０２は、それが非Ｉ／Ｏコヒーレントモードの場合には（for）インプリメントすることができるキャッシュ保守動作をインプリメントすることができない（may not）。
【００６４】
[0083]ハイブリッドＩ／Ｏコヒーレント書込みを用いたＩ／Ｏコヒーレント作業負荷処理は、図５を参照してここで説明されたような、Ｉ／Ｏコヒーレント作業負荷処理に類似し得る。しかしながら、Ｉ／Ｏコヒーレント作業負荷処理にハイブリッドＩ／Ｏコヒーレント書込みを含めることは、Ｉ／Ｏコヒーレント書込みデータの送信が、ハイブリッドＩ／Ｏコヒーレント書込みなしのＩ／Ｏコヒーレント作業負荷処理と同じコヒーレンシメカニズムを通じてＩ／Ｏコヒーレント書込みデータを送信することによって妨げられることはない（not be hindered）ので（as）生じるオーバヘッドの量を低減させ得る。
【００６５】
[0084]処理デバイス３０２は、ハードウェアアクセラレータ３０６に作業負荷の一部をオフロードし得る。ハードウェアアクセラレータ３０６は、そのハードウェアアクセラレータキャッシュ（例えば、図３における処理デバイスキャッシュ３１０ａ、３１０ｂ、３１０ｃ）に、オフロードされた作業負荷のための任意の送信されたデータを記憶し、ハイブリッドＩ／Ｏコヒーレント書込みがイネーブルにされている状態でオフロードされた作業負荷の実行を起動し８００、オフロードされた作業負荷を実行し得る４０６ｂ。非Ｉ／Ｏコヒーレントモードでの処理デバイスキャッシュについてのように（as for）、オフロードされた作業負荷データを送信するためのオーバヘッドを生じさせるのではなく、Ｉ／Ｏコヒーレントモードでは、コヒーレンシはデータが転送されている間に保守され得、したがって、いかなるオーバヘッドも、オフロードされた作業負荷の起動の実行（launch execution of the offloaded workload）４０８の前には生じない。
【００６６】
[0085]オフロードされた作業負荷の実行４０６ｂ中、図５におけるオーバヘッド４０４ｃの（in）低減が、オーバヘッド４０４ｆによって例示されるように実現され得る。オーバヘッドの低減は、コヒーレンシメカニズムを通じてＩ／Ｏコヒーレント書込みデータを送ることをバイパスするハイブリッドＩ／Ｏコヒーレント書込み要求を実行することによる、Ｉ／Ｏコヒーレント書込み要求を実行することにおける（in）低減されたレイテンシからもたらされ得る。ハードウェアアクセラレータ３０６は、オフロードされた作業負荷の実行を終了し得４１０、オフロードされた作業負荷の結果は、処理デバイス３０２がオフロードされた作業負荷の結果を出力するために利用可能になり得る４１２。
【００６７】
[0086]図９は、ハイブリッドＩ／Ｏコヒーレント書込みを用いた動的Ｉ／Ｏコヒーレント作業負荷処理の例となる態様を例示する。図９に例示される例では、処理デバイス３０２による作業負荷オフローディング、処理デバイスキャッシュは、Ｉ／Ｏコヒーレントモードにあり得る。したがって、ハードウェアアクセラレータ３０６に、オフロードされた作業負荷のためのデータを送信するために、およびハードウェアアクセラレータ３０６から受信された結果を出力するために、コヒーレンシメカニズム（例えば、図３Ａ〜図３Ｃにおけるコヒーレンシドメイン３１４）は、処理デバイスキャッシュにおけるデータの正確性を保証するために、コヒーレントインターコネクト３１２によって継続的にインプリメントされ得る。したがって、処理デバイスがＩ／Ｏコヒーレントモードにある間、処理デバイス３０２は、それが非Ｉ／Ｏコヒーレントモードの場合にはインプリメントすることができるキャッシュ保守動作をインプリメントすることができない。
【００６８】
[0087]ハイブリッドＩ／Ｏコヒーレント書込みを用いた動的Ｉ／Ｏコヒーレント作業負荷処理は、図７を参照してここで説明されたような、動的Ｉ／Ｏコヒーレント作業負荷処理に類似し得る。しかしながら、Ｉ／Ｏコヒーレント作業負荷処理にハイブリッドＩ／Ｏコヒーレント書込みを含めることは、Ｉ／Ｏコヒーレント書込みデータの送信が、ハイブリッドＩ／Ｏコヒーレント書込みなしのＩ／Ｏコヒーレント作業負荷処理と同じコヒーレンシメカニズムを通じてＩ／Ｏコヒーレント書込みデータを送信することによって妨げられ得ないので（as）生じるオーバヘッドの量を低減させ得る。Ｉ／Ｏコヒーレント作業負荷処理にハイブリッドＩ／Ｏコヒーレント書込みを含めることはまた、動的トリガを検出したことに応答して使用される非Ｉ／Ｏコヒーレント処理とは対照的に、ハイブリッドＩ／Ｏコヒーレント書込みがＩ／Ｏコヒーレントであり得るので、生じるオーバヘッドの量を低減させ得る。したがって、ハイブリッドＩ／Ｏコヒーレント書込みを用いた動的Ｉ／Ｏコヒーレント作業負荷処理中に実行されるＩ／Ｏコヒーレンシ動作は、処理デバイスキャッシュの一部を無効化する必要性を除去し得るので（since）、キャッシュ無効化保守動作（invalidate cache maintenance operation）はスキップされ得る。
【００６９】
[0088]処理デバイス３０２は、ハードウェアアクセラレータ３０６に作業負荷の一部をオフロードし得る。ハードウェアアクセラレータ３０６は、そのハードウェアアクセラレータキャッシュ（例えば、図３Ａ〜図３Ｃにおける処理デバイスキャッシュ３１０ａ、３１０ｂ、３１０ｃ）に、オフロードされた作業負荷のための任意の送信されたデータを記憶し、オフロードされた作業負荷の実行を起動し４０８、オフロードされた作業負荷を実行し得る４０６ｄ。非Ｉ／Ｏコヒーレントモードでの処理デバイスキャッシュについてのように、オフロードされた作業負荷データを送信するためのオーバヘッドを生じさせるのではなく、Ｉ／Ｏコヒーレントモードでは、コヒーレンシはデータが転送されている間に保守され得、したがって、いかなるオーバヘッドも、オフロードされた作業負荷の起動の実行４０８の前には生じない（so that not overhead is incurred before the launch execution of the offloaded workload 408）。
【００７０】
[0089]図９に例示される例は、ハードウェアアクセラレータ３０６による長期的なオフロードされた作業負荷の実行のための動的Ｉ／Ｏコヒーレント作業負荷処理のインプリメンテーションである。ここで説明されるように、オーバヘッド４０４ｅは、依然として、オフロードされた作業負荷の実行４０６ｃのために生じ得る。動的Ｉ／Ｏコヒーレント作業負荷処理では、長期的なオフロードされた作業負荷は、オーバヘッドしきい値を超えるオーバヘッド４０４ｅを生じさせ得る。様々な方法は、ここでさらに説明されるように、処理デバイス３０２がアイドル状態に入ること、経過時間、および／またはオフロードされた作業負荷の実行の苦難を含む、オーバヘッドしきい値を超える長期的な作業負荷を検出するために使用され得る。
【００７１】
[0090]長期的なオフロードされた作業負荷を検出することに応答して、コヒーレントインターコネクトは、ハイブリッドＩ／Ｏコヒーレント書込みモードに動的に遷移し得る。Ｉ／Ｏコヒーレントモードから非Ｉ／Ｏコヒーレントモードに遷移するために、処理デバイス３０２は、コヒーレントインターコネクトが非ハイブリッドＩ／Ｏコヒーレント書込みモードのままでありながら、キャッシュ保守動作をインプリメントし始め得る。例えば、処理デバイス３０２は、ハードウェアアクセラレータがオフロードされた作業負荷の実行（offloaded workload execution）４０４ｄを継続しながら、キャッシュフラッシュ保守動作４００をインプリメントし得る。キャッシュフラッシュ保守動作４００中、オフロードされた作業負荷の実行４０４ｄは、Ｉ／Ｏコヒーレントモードオーバヘッド４０４ｅを生じさせ続け得るが、いかなるオーバヘッドも、キャッシュフラッシュ保守動作４００のために生じ得ない。したがって、オーバヘッド４０４ｄは、ここで説明されるように、オフロードされた作業負荷の結果を送信しているコヒーレントインターコネクトのパフォーマンスによって引き起こされるオーバヘッドに限定され得る。
【００７２】
[0091]キャッシュフラッシュ保守動作４００が完了すると、コヒーレントインターコネクトは、ハイブリッドＩ／Ｏコヒーレント書込みモードに動的に遷移し得る９００。非ハイブリッドＩ／Ｏコヒーレント書込みモードとハイブリッドＩ／Ｏコヒーレント書込みモードとの間の切替え４１４は、オフロードされた作業負荷の実行４０４ｄを中断させ得ない。オフロードされた作業負荷の実行４０４ｄが継続する間、コヒーレンシメカニズムを通じてＩ／Ｏコヒーレント書込みを送信しないことの結果として、全くないか、またはより少ない（none or less）Ｉ／Ｏコヒーレントモードオーバヘッド４０４ｅが生じ得る。ハードウェアアクセラレータ３０６は、オフロードされた作業負荷の実行を終了し得４１０、コヒーレントインターコネクトを介して処理デバイス３０２に、オフロードされた作業負荷の実行４０６ｄの結果を返し、オフロードされた作業負荷の結果は、処理デバイス３０２がオフロードされた作業負荷の結果を出力するために利用可能になり得る４１２。ここで述べられているように、オフロードされた作業負荷の結果を利用可能にする４１２前の（prior to）キャッシュ無効化保守動作の実行は、非Ｉ／Ｏコヒーレントモードに遷移することとは対照的に、Ｉ／Ｏコヒーレントモードのままであることによって除去され得、それによって、キャッシュ無効化保守動作に関連するオーバヘッド（例えば、図７におけるオーバヘッド４０４ｂ）を無くす（eliminating）。
【００７３】
[0092]図１０は、一態様による、ハイブリッドＩ／Ｏコヒーレント書込みをインプリメントするための方法１０００を例示する。方法１０００は、プロセッサ（例えば、図１および図２におけるプロセッサ１４および図３〜図９における処理デバイス３０２）において実行中のソフトウェアにおいて、汎用ハードウェアにおいて、専用ハードウェア（例えば、図３Ａ〜図３Ｃにおけるコヒーレントインターコネクト３１２）において、または他の個々のコンポーネントを含む、動的Ｉ／Ｏコヒーレンシシステムおよび／またはハイブリッドＩ／Ｏコヒーレント書込みシステム（例えば、図３Ａ〜図３Ｃ）内でソフトウェアを実行するプロセッサのような、ソフトウェア構成プロセッサ（software-configured processor）と専用ハードウェアとの組合せにおいて、コンピューティングデバイス内でインプリメントされ得る。様々な態様においてイネーブルにされる代替の構成を包含するために、方法１０００をインプリメントするハードウェアは、ここで「処理デバイス」と呼ばれる。
【００７４】
[0093]ブロック１００２において、処理デバイスは、ハードウェアアクセラレータ（例えば、図３Ａ〜図３ＣにおけるＧＰＵ３０６ａ、ＤＳＰ３０６ｂ、およびカスタムハードウェアアクセラレータ３０６ｃ、および図４〜図９におけるハードウェアアクセラレータ３０６）から、Ｉ／Ｏコヒーレント書込み要求およびＩ／Ｏコヒーレント書込みデータを受信し得る。
【００７５】
[0094]決定ブロック１００４において、処理デバイスは、ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされているかどうかを決定し得る。ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていないと決定すること（すなわち、決定ブロック１００４＝「Ｎｏ」）に応答して、処理デバイスは、ブロック１０１６において、書込み要求が、Ｉ／Ｏコヒーレント書込み要求であるか、または非Ｉ／Ｏコヒーレント書込み要求であるか（whether）を決定し、指定されたコンポーネントに書込み要求および書込みデータを送り得る。Ｉ／Ｏコヒーレント書込み要求の場合（For）、処理デバイスは、ブロック１０１６において、共有メモリ（例えば、図３Ａ〜図３Ｃにおける共有メモリ３０４）に、およびコヒーレンシドメイン（例えば、図３Ａ〜図３Ｃにおけるコヒーレンシドメイン３１４）に、Ｉ／Ｏコヒーレント書込み要求およびＩ／Ｏコヒーレント書込みデータを送り得る。非Ｉ／Ｏコヒーレント書込み要求の場合、処理デバイスは、ブロック１０１６において、共有メモリに、非Ｉ／Ｏコヒーレント書込み要求および非Ｉ／Ｏコヒーレント書込みデータを送り得る。
【００７６】
[0095]ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定すること（すなわち、決定ブロック１００４＝「Ｙｅｓ」）に応答して、処理デバイスは、オプションの（optional）ブロック１００６において、ハイブリッドＩ／Ｏコヒーレント書込み要求として、Ｉ／Ｏコヒーレント書込み要求をマーキングし得る。処理デバイスは、Ｉ／Ｏコヒーレント書込み要求がハイブリッドＩ／Ｏコヒーレント書込み要求であることを示すために、指定されたビットまたは値などのマークを用いて、Ｉ／Ｏコヒーレント書込み要求におけるフィールドを再使用および／または追加することによって、Ｉ／Ｏコヒーレント書込み要求をマーキングし得る。
【００７７】
[0096]ブロック１００８において、処理デバイスは、マーキングされたＩ／Ｏコヒーレント書込み要求から、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成し得る。様々な態様では、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求のうちの１つまたは両方が、マーキングされたＩ／Ｏコヒーレント書込み要求のコピーであり得る。
【００７８】
[0097]オプションのブロック１００６において、ハイブリッドＩ／Ｏコヒーレント書込み要求として、Ｉ／Ｏコヒーレント書込み要求をマーキングするのではなく、ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定すること（すなわち、決定ブロック１００４＝「Ｙｅｓ」）に応答して、処理デバイスは、ブロック１００８において、生成されるハイブリッドＩ／Ｏコヒーレント書込み要求として（as）、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求をマーキングし得る。
【００７９】
[0098]ブロック１０１０において、処理デバイスは、共有メモリに、第１のハイブリッドＩ／Ｏコヒーレント書込み要求およびＩ／Ｏコヒーレント書込みデータを送り、コヒーレンシドメインに、第２のハイブリッドＩ／Ｏコヒーレント書込み要求を送り得る。ここで述べられているように、処理デバイスは、ハイブリッドＩ／Ｏコヒーレント書込み要求のために、またはハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされているとき、コヒーレンシドメインにＩ／Ｏコヒーレント書込みデータを送ることをバイパスし得る。
【００８０】
[0099]ブロック１０１２において、処理デバイスは、共有メモリから、第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信し得る。
【００８１】
[00100]ブロック１０１４において、処理デバイスは、ハードウェアアクセラレータおよび／またはコヒーレンシドメインに、第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を送り得る。ここでさらに説明されるように、様々な態様では、確認応答は、コヒーレントインターコネクトに送られ、その後、コヒーレンシドメインにコヒーレントインターコネクトによって送られ得る。様々な態様では、確認応答は、コヒーレントインターコネクトおよびコヒーレンシドメインに送られ得、コヒーレントインターコネクトは、コヒーレンシドメインに確認応答を送る必要がない場合がある（may not need to send）。
【００８２】
[00101]図１１は、一態様による、ハイブリッドＩ／Ｏコヒーレント書込みをインプリメントするための方法１１００を例示する。方法１１００は、プロセッサ（例えば、図１および図２におけるプロセッサ１４および図３〜図９における処理デバイス３０２）において実行中のソフトウェアにおいて、汎用ハードウェアにおいて、専用ハードウェア（例えば、アクセスを制御し、共有メモリ３０４に対する読取り／書込みメモリアクセス要求をインプリメントするように構成された共有メモリコントローラ（図示せず）を含む、図３Ａ〜図３Ｃにおける共有メモリ３０４）において、または他の個々のコンポーネントを含む、動的Ｉ／Ｏコヒーレンシシステムおよび／またはハイブリッドＩ／Ｏコヒーレント書込みシステム（例えば、図３Ａ〜図３Ｃ）内でソフトウェアを実行するプロセッサのような、ソフトウェア構成プロセッサと専用ハードウェアとの組合せにおいて、コンピューティングデバイス内でインプリメントされ得る。様々な態様においてイネーブルにされる代替の構成を包含するために、方法１０００をインプリメントするハードウェアは、ここで「処理デバイス」と呼ばれる。
【００８３】
[00102]ブロック１１０２において、処理デバイスは、Ｉ／Ｏコヒーレント書込み要求を受信し得る。様々な態様では、Ｉ／Ｏコヒーレント書込み要求は、コヒーレントインターコネクト（例えば、図３Ａ〜図３Ｃにおけるコヒーレントインターコネクト３１２）から、またはコヒーレンシドメイン（例えば、図３Ａ〜図３Ｃにおけるコヒーレンシドメイン３１４）から受信され得る。様々な態様では、Ｉ／Ｏコヒーレント書込み要求は、ハイブリッドＩ／Ｏコヒーレント書込み要求であり得、ここで説明された第１のハイブリッドＩ／Ｏコヒーレント書込み要求または第２のハイブリッドＩ／Ｏコヒーレント書込み要求を含む。
【００８４】
[00103]オプションのブロック１１０４において、処理デバイスは、Ｉ／Ｏコヒーレント書込みデータを受信し得る。様々な態様では、Ｉ／Ｏコヒーレント書込みデータは、コヒーレントインターコネクトから、またはコヒーレンシドメインから受信され得る。ブロック１１０４は、処理デバイスが、ハイブリッドＩ／Ｏコヒーレント書込み要求に関して（for）、コヒーレンシドメインからＩ／Ｏコヒーレント書込みデータを受信しないことがあり得るので、オプションである。
【００８５】
[00104]決定ブロック１１０６において、処理デバイスは、受信されたＩ／Ｏコヒーレント書込み要求が、ハイブリッドＩ／Ｏコヒーレント書込み要求であるかどうかを決定し得る。ハイブリッドＩ／Ｏコヒーレント書込み要求は、第１のハイブリッドＩ／Ｏコヒーレント書込み要求または第２のハイブリッドＩ／Ｏコヒーレント書込み要求を含み得る。処理デバイスは、特定のビットまたは値を有する、受信されたＩ／Ｏコヒーレント書込み要求の特定のフィールドのような、受信されたＩ／Ｏコヒーレント書込み要求がハイブリッドＩ／Ｏコヒーレント書込み要求であるという指定されたインジケータをチェックするように構成され得る。
【００８６】
[00105]受信されたＩ／Ｏコヒーレント書込み要求がハイブリッドＩ／Ｏコヒーレント書込み要求でないと決定すること（すなわち、決定ブロック１１０６＝「Ｎｏ」）に応答して、処理デバイスは、ブロック１１１８において、非ハイブリッドＩ／Ｏコヒーレント書込み要求を実行し得る。
【００８７】
[00106]受信されたＩ／Ｏコヒーレント書込み要求がハイブリッドＩ／Ｏコヒーレント書込み要求であると決定すること（すなわち、決定ブロック１１０６＝「Ｙｅｓ」）に応答して、処理デバイスは、決定ブロック１１０８において、ハイブリッドＩ／Ｏコヒーレント書込み要求がコヒーレントインターコネクトから受信されるかどうかを決定し得る。様々な態様では、処理デバイスは、代替として、ハイブリッドＩ／Ｏコヒーレント書込み要求がコヒーレンシドメインから受信されるかどうかを決定し、またはコヒーレントインターコネクトとコヒーレンシドメインの何れから、ハイブリッドＩ／Ｏコヒーレント書込み要求が受信されたかを決定し得る。様々な態様では、処理デバイスは、ハイブリッドＩ／Ｏコヒーレント書込み要求のソースを識別するハイブリッドＩ／Ｏコヒーレント書込み要求と共に含まれるインジケータを含む、任意の多数の識別子（any of numerous identifiers）を使用することで、ハイブリッドＩ／Ｏコヒーレント書込み要求のソースについて、処理デバイスの指定されたハードウェアロケーションにおいて、ハイブリッドＩ／Ｏコヒーレント書込み要求を受信することについて、および／またはＩ／Ｏコヒーレント書込みデータもまた受信されかつハイブリッドＩ／Ｏコヒーレント書込み要求と同じソースからのものであるかどうかについて、これらの決定を行い得る。コヒーレントインターコネクトからのハイブリッドＩ／Ｏコヒーレント書込み要求は、第１のハイブリッドＩ／Ｏコヒーレント書込み要求を含み得、コヒーレンシドメインからのハイブリッドＩ／Ｏコヒーレント書込み要求は、第２のハイブリッドＩ／Ｏコヒーレント書込み要求を含み得る。
【００８８】
[00107]ハイブリッドＩ／Ｏコヒーレント書込み要求がコヒーレントインターコネクトから受信されたと決定すること（すなわち、決定ブロック１１０８＝「Ｙｅｓ」）に応答して、処理デバイスは、ブロック１１１０において、共有メモリに、Ｉ／Ｏコヒーレント書込みデータを記憶することによって、ハイブリッドＩ／Ｏコヒーレント書込み要求を実行し、ブロック１１１２において、コヒーレントインターコネクトに、ハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を送り得る。いくつかの態様では、処理デバイスは、ブロック１１１２において、コヒーレントインターコネクトに、ハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を送り、ブロック１１１０において、Ｉ／Ｏコヒーレント書込みデータが、共有メモリに記憶されたとき、ブロック１１１６において、コヒーレンシドメインにハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を送るように構成され得る。このような態様では、処理デバイスは、コヒーレンシドメインに確認応答を送り得、またはコヒーレントインターコネクトは、コヒーレンシドメインに確認応答を送り得る。ハイブリッドＩ／Ｏコヒーレント書込み要求は、第１のハイブリッドＩ／Ｏコヒーレント書込み要求または第２のハイブリッドＩ／Ｏコヒーレント書込み要求を含み得る。
【００８９】
[00108]ハイブリッドＩ／Ｏコヒーレント書込み要求がコヒーレントインターコネクトから受信されないと決定すること（すなわち、決定ブロック１１０８＝「Ｎｏ」）（すなわち、ハイブリッドＩ／Ｏコヒーレント書込み要求は、コヒーレンシドメインから受信された）に応答して、処理デバイスは、ブロック１１１０において共有メモリにＩ／Ｏコヒーレント書込みデータが記憶されるのを、ブロック１１１４において待ち（wait）得る。いくつかの態様では、処理デバイスは、ブロック１１１４において、記憶書込みデータ（storage write data）を待った後、ブロック１１１０において、Ｉ／Ｏコヒーレント書込みデータが共有メモリに記憶されたとき、ブロック１１１２において、コヒーレントインターコネクトに、ハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を送り得る。いくつかの態様では、処理デバイスは、ブロック１１１４において、記憶書込みデータを待った後に、ブロック１１１０において、Ｉ／Ｏコヒーレント書込みデータが共有メモリに記憶されるとき、ブロック１１１６において、コヒーレンシドメインに、ハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を送り得る。様々な態様では、ハイブリッドＩ／Ｏコヒーレント書込み要求は、第１のハイブリッドＩ／Ｏコヒーレント書込み要求または第２のハイブリッドＩ／Ｏコヒーレント書込み要求を含み得る。
【００９０】
[00109]図１２は、一態様による、ハイブリッドＩ／Ｏコヒーレント書込みをインプリメントするための方法１２００を例示する。方法１２００は、プロセッサ（例えば、図１および図２におけるプロセッサ１４および図３〜図９における処理デバイス３０２）において実行中のソフトウェアにおいて、汎用ハードウェアにおいて、専用ハードウェア（例えば、図３Ａ〜図３Ｃにおけるコヒーレンシドメイン３１４）において、または他の個々のコンポーネントを含む、動的Ｉ／Ｏコヒーレンシシステムおよび／またはハイブリッドＩ／Ｏコヒーレント書込みシステム（例えば、図３Ａ〜図３Ｃ）内でソフトウェアを実行するプロセッサのような、ソフトウェア構成プロセッサと専用ハードウェアとの組合せにおいて、コンピューティングデバイス内でインプリメントされ得る。様々な態様においてイネーブルにされる代替の構成を包含するために、方法１０００をインプリメントするハードウェアは、ここで「処理デバイス」と呼ばれる。
【００９１】
[00110]ブロック１２０２において、処理デバイスは、Ｉ／Ｏコヒーレント書込み要求を受信し得る。様々な態様では、Ｉ／Ｏコヒーレント書込み要求は、コヒーレントインターコネクト（例えば、図３Ａ〜図３Ｃにおけるコヒーレントインターコネクト３１２）から受信され得る。ハイブリッドＩ／Ｏコヒーレント書込み要求は、第２のハイブリッドＩ／Ｏコヒーレント書込み要求を含み得る。
【００９２】
[00111]オプションのブロック１２０４において、処理デバイスは、Ｉ／Ｏコヒーレント書込みデータを受信し得る。様々な態様では、Ｉ／Ｏコヒーレント書込みデータは、コヒーレントインターコネクトから受信され得る。ブロック１２０４は、処理デバイスが、ハイブリッドＩ／Ｏコヒーレント書込み要求に関して（for）、コヒーレントインターコネクトからＩ／Ｏコヒーレント書込みデータを受信しないことがあり得るので、オプションである。
【００９３】
[00112]決定ブロック１２０６において、処理デバイスは、受信されたＩ／Ｏコヒーレント書込み要求が、ハイブリッドＩ／Ｏコヒーレント書込み要求であるかどうかを決定し得る。処理デバイスは、特定のビットまたは値を有する、受信されたＩ／Ｏコヒーレント書込み要求の特定のフィールドのような、受信されたＩ／Ｏコヒーレント書込み要求がハイブリッドＩ／Ｏコヒーレント書込み要求であるという（that）指定された（designated）インジケータをチェックするように構成され得る。ハイブリッドＩ／Ｏコヒーレント書込み要求は、第２のハイブリッドＩ／Ｏコヒーレント書込み要求を含み得る。
【００９４】
[00113]受信されたＩ／Ｏコヒーレント書込み要求がハイブリッドＩ／Ｏコヒーレント書込み要求でないと決定すること（すなわち、決定ブロック１２０６＝「Ｎｏ」）に応答して、処理デバイスは、ブロック１２１８において、受信されたＩ／Ｏコヒーレント書込みデータに対する（for）無効化動作およびコヒーレンシチェックを実行し得る。ブロック１２２０において、処理デバイスは、共有メモリ（例えば、図３Ａ〜図３Ｃにおける共有メモリ３０４）に、非ハイブリッドＩ／Ｏコヒーレント書込み要求およびＩ／Ｏコヒーレント書込みデータを送り得る。様々な態様では、処理デバイスは、コヒーレントインターコネクトを介して共有メモリに、非ハイブリッドＩ／Ｏコヒーレント書込み要求およびＩ／Ｏコヒーレント書込みデータを送り得る。
【００９５】
[00114]受信されたＩ／Ｏコヒーレント書込み要求がハイブリッドＩ／Ｏコヒーレント書込み要求でないと決定すること（すなわち、決定ブロック１２０６＝「Ｙｅｓ」）に応答して、処理デバイスは、ブロック１２０８において、受信されたＩ／Ｏコヒーレント書込みデータに対するコヒーレンシチェックおよび無効化動作を実行し得る。様々な態様では、コヒーレンシチェックおよび無効化動作は、第２のハイブリッドＩ／Ｏコヒーレント書込み要求を含む、ハイブリッドＩ／Ｏコヒーレント書込み要求によって指定されるＩ／Ｏコヒーレンシ書込みデータのアドレスに対して実行され得る。ブロック１２１０において、処理デバイスは、共有メモリから、ハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信し得る。確認応答は、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および／または第２のハイブリッドＩ／Ｏコヒーレント書込み要求に対するものであり得る。
【００９６】
[00115]決定ブロック１２１２において、処理デバイスは、確認応答が、既に受信されたハイブリッドＩ／Ｏコヒーレント書込み要求に対するものであるかどうかを決定し得る。様々な態様では、ハイブリッドＩ／Ｏコヒーレント書込み要求に対応する確認応答が、ハイブリッドＩ／Ｏコヒーレント書込み要求より前に、コヒーレンシドメインにおいて受信され得る。これは、例えば、コヒーレンシドメインの入力上での輻輳によって引き起こされ得る。対応するハイブリッドＩ／Ｏコヒーレント書込み要求を処理する前に、確認応答を処理することを回避するために、コヒーレンシドメインは、対応するハイブリッドＩ／Ｏコヒーレント書込み要求が処理されるまで、確認応答をバッファリングするように構成され得る。確認応答は、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および／または第２のハイブリッドＩ／Ｏコヒーレント書込み要求に対するものであり得る（may be for）。様々な実施形態では、確認応答は、第１のハイブリッドＩ／Ｏコヒーレント書込み要求に対するものであり得、受信されたハイブリッドＩ／Ｏコヒーレント書込み要求は、第２のハイブリッドＩ／Ｏコヒーレント書込み要求を含み得る。第２のハイブリッドＩ／Ｏコヒーレント書込み要求は、それが第１のハイブリッドＩ／Ｏコヒーレント書込み要求と同じであり得るので、依然として、確認応答と対応し（correspond with）得る。
【００９７】
[00116]確認応答が、既に受信されたハイブリッドＩ／Ｏコヒーレント書込み要求に対するものでないと決定すること（すなわち、決定ブロック１２１２＝「Ｎｏ」）に応答して、処理デバイスは、ブロック１２１４において、確認応答をバッファリングし得る。処理デバイスは、ローカルおよび／または専有化された（privatized）メモリ（例えば、図１におけるメモリ１６、２４）に確認応答をバッファリングし得る。処理デバイスは、ブロック１２０２において、対応するハイブリッドＩ／Ｏコヒーレント書込み要求を受信するバッファユニットに（in）確認応答を保持することによって、確認応答を処理することを阻止し得、決定ブロック１２１２において、確認応答が、既に受信されたハイブリッドＩ／Ｏコヒーレント書込み要求に対するものであるためであることを決定する。ハイブリッドＩ／Ｏコヒーレント書込み要求は、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および／または第２のハイブリッドＩ／Ｏコヒーレント書込み要求を含み得る。
【００９８】
[00117]確認応答が、既に受信されたハイブリッドＩ／Ｏコヒーレント書込み要求に対するものであると決定すること（すなわち、決定ブロック１２１２＝「Ｙｅｓ」）に応答して、処理デバイスは、ブロック１２１６において、ハイブリッドＩ／Ｏコヒーレンシ書込み要求トランザクションをクリアし得る。ハイブリッドＩ／Ｏコヒーレント書込み要求は、第２のハイブリッドＩ／Ｏコヒーレント書込み要求を含み得る。
【００９９】
[00118]図１３は、一態様による、ハイブリッドＩ／Ｏコヒーレント書込みを用いて動的Ｉ／Ｏコヒーレント作業負荷処理をインプリメントするための方法１３００を例示する。方法１３００は、プロセッサ（例えば、図１および図２におけるプロセッサ１４および図３〜図７における処理デバイス３０２）において実行中のソフトウェアにおいて、汎用ハードウェアにおいて、専用ハードウェアにおいて、または他の個々のコンポーネントを含む、動的Ｉ／Ｏコヒーレンシシステム（例えば、図３Ａ〜図３Ｃ）内でソフトウェアを実行するプロセッサのような、ソフトウェア構成プロセッサと専用ハードウェアとの組合せにおいて、コンピューティングデバイス内でインプリメントされ得る。様々な態様においてイネーブルにされる代替の構成を包含するために、方法１３００をインプリメントするハードウェアは、ここで「処理デバイス」と呼ばれる。
【０１００】
[00119]ブロック１３０２において、処理デバイスは、処理デバイスキャッシュ（例えば、図３Ａにおける処理デバイスキャッシュ３０８）および／または共有メモリ（例えば、図３Ａ〜図３Ｃにおける共有メモリ３０４）のために、Ｉ／Ｏコヒーレントモードを「オン」に設定し得る。代替として、処理デバイスは、処理デバイスキャッシュおよび／または共有メモリのために、非Ｉ／Ｏコヒーレントモードを「オフ」に設定し得る。様々な態様では、Ｉ／Ｏコヒーレントモードは、処理デバイスキャッシュおよび／または共有メモリのためのデフォルト状態として「オン」に設定され得、したがって、Ｉ／Ｏコヒーレントモードを「オン」に設定することは、不要であり得る。Ｉ／Ｏコヒーレントモードを「オン」に設定することは、たとえ「オン」が、デフォルトのＩ／Ｏコヒーレントモード状態であるとしても、予防措置（precautionary measure）であり得る。
【０１０１】
[00120]ブロック１３０４において、処理デバイスは、Ｉ／Ｏコヒーレントモードを使用して、ハードウェアアクセラレータ（例えば、図３Ａ〜図３ＣにおけるＧＰＵ３０６ａ、ＤＳＰ３０６ｂ、カスタムハードウェアアクセラレータ３０６ｃ、および図４〜図７におけるハードウェアアクセラレータ３０６）上で、オフロードされた作業負荷の実行を起動し得る。ここで説明されるように、実行を起動することは、ハードウェアアクセラレータへの作業負荷のオフローディングに対して即時であり得（may be immediate to）、これは、Ｉ／Ｏコヒーレントモードを使用した実行の場合（for）、処理デバイスからハードウェアアクセラレータにデータを送信するために、いかなるオーバヘッドも生じ得ないから（as）である。処理デバイスとハードウェアアクセラレータとの間でデータを送信するためのメモリアクセス要求は、コヒーレントインターコネクトのＩ／Ｏコヒーレント経路（例えば、図３Ａ〜図３Ｃにおけるコヒーレンシドメイン３１４）を通ってルーティングされ得る。処理デバイスとハードウェアアクセラレータとの間で送信されるデータは、オフロードされた作業負荷を実行するための、処理デバイスからハードウェアアクセラレータへのデータと、実行されたオフロードされた作業負荷の結果としての、ハードウェアアクセラレータから処理デバイスへのデータとを含み得る。処理デバイスとハードウェアアクセラレータとの間で送信されるデータは、共有メモリを通じて送信され得る。
【０１０２】
[00121]決定ブロック１３０６において、処理デバイスは、オフロードされた作業負荷が、ハードウェアアクセラレータによって完了したかどうかを決定し得る。
【０１０３】
[00122]オフロードされた作業負荷がハードウェアアクセラレータによって完了されると決定すること（すなわち、決定ブロック１３０６＝「Ｙｅｓ」）に応答して、処理デバイスは、ブロック１３１８において、ハードウェアアクセラレータから、オフロードされた作業負荷の実行の結果を受信し得る。オフロードされた作業負荷の実行の結果は、ハードウェアアクセラレータによって、共有メモリに出力され、処理デバイスによって、共有メモリから取り出され得る。完全に（entirely）Ｉ／Ｏコヒーレントモードでの、オフロードされた作業負荷の実行の完了は、データのコヒーレンシを管理するコヒーレントインターコネクトのＩ／Ｏコヒーレントメカニズムの結果として、キャッシュ保守動作が不要であることを意味し（signify）得る。
【０１０４】
[00123]オフロードされた作業負荷がハードウェアアクセラレータによって完了されていないと決定すること（すなわち、決定ブロック１３０６＝「Ｎｏ」）に応答して、処理デバイスは、決定ブロック１３０８において、Ｉ／Ｏコヒーレントモードと非Ｉ／Ｏコヒーレントモードとの間で切り替えるための動的トリガが検出されたかどうかを決定し得る。動的トリガは、いつ（when）、オフロードされた作業負荷が、Ｉ／Ｏコヒーレントモードオーバヘッドペナルティが望ましくないまたは許容できない可能性がある（may）という点まで高まり得る（may be growing to the point）かを決定するために使用され得る。動的トリガが検出されるかどうかを決定することは、様々なやり方（manners）の任意の組合せにおいて成し遂げられ得る。
【０１０５】
[00124]いくつかの態様では、動的トリガは、経過する計算された時間または事前設定（preset or calculated time to elapse）を含み得、動的トリガを検出することは、時間が経過したことを検出することを伴い得る。様々な態様では、時間は、ハードウェアアクセラレータによるオフロードされた作業負荷の実行に関する予期される時間の量に基づいて、事前設定または計算され得る。オフロードされた作業負荷の予期される実行時間は、温度を含む環境要因、および／または、電力（electrical power）、計算能力、メモリ空間、および／または通信帯域幅、を含む、ハードウェアアクセラレータの可用性および／またはハードウェアアクセラレータのための可用性および／またはリソースの使用、オフロードされた作業負荷のサイズおよび／または複雑さを含む、様々な要因に基づかれ得る。様々な態様では、時間は、Ｉ／Ｏコヒーレントモードと非Ｉ／Ｏコヒーレントモードとの間の即時の切替えをトリガするために、ゼロ（０）のような、自明な値（trivial value）として計算されるか、または事前設定され得る。
【０１０６】
[00125]いくつかの態様では、動的トリガは、アイドル状態に遷移しているおよび／またはアイドル状態にある処理デバイスを感知することを含み得る。アイドル状態は、処理デバイスが、作業が無くなり（has run out of work）、オフロードされた作業負荷をハードウェアアクセラレータが終えるのを待っているので、ハードウェアアクセラレータが、オフロードされた作業負荷を予期されるよりも遅く実行しているかもしれない（may）こと示し得る。作業負荷をオフローディングすることの目的は、作業負荷を実行するために、コンピューティングリソースを効率的に使用することである。したがって、アイドル状態に遷移しているおよび／またはアイドル状態にある処理デバイスは、コンピューティングリソースの非効率的な使用を示し得る。
【０１０７】
[00126]いくつかの態様では、動的トリガは、Ｉ／Ｏコヒーレント経路を使用することに苦難しているオフロードされた作業負荷の実行のインジケータを含み得る。オフロードされた作業負荷の苦難は、様々なメトリクスに基づいて検出され得る。増補された作業負荷（augmented workloads）は、パフォーマンスをドライバに通知し（notify a driver of performance）得る。テストまたはランダムなテストのいずれかを介した、作業負荷分類に基づく方法または静的割当ての使用は、作業負荷の苦難を示す信号または標準的なタイムアウトをもたらし（lead to）得る。ポーリングハードウェアパフォーマンスレジスタは、作業負荷の苦難を示すデータを提供し得る。最大に近い（near maximum）、帯域幅および／または未処理のトランザクションなどの、持続的に高いインターコネクト動作レベルは、抑制（throttling）を示し得る。高いアクセラレータメモリレイテンシは、レイテンシ制限を示し得る。高いアクセラレータメモリバックプレッシャは、帯域幅の抑制（bandwidth throttling）を示し得る。高い占有のメモリ要求待ち行列（queues）と連携した（in conjunction with）メモリによる、高いアクセラレータアイドルは、帯域幅が制限されていることを示し得る。
【０１０８】
[00127]Ｉ／Ｏコヒーレントモードと非Ｉ／Ｏコヒーレントモードとの間で切り替えるための動的トリガが検出されていないと決定すること（すなわち、決定ブロック１３０８＝「Ｎｏ」）に応答して、処理デバイスは、決定ブロック１３０６において、オフロードされた作業負荷がハードウェアアクセラレータによって完了されるかどうかを決定し得る。
【０１０９】
[00128]Ｉ／Ｏコヒーレントモードと非Ｉ／Ｏコヒーレントモードとの間で切り替えるための動的トリガが検出されると決定すること（すなわち、決定ブロック１３０８＝「Ｙｅｓ」）に応答して、処理デバイスは、ブロック１３１０において、繰延べ（deferred）処理デバイスキャッシュ保守を実行し得る。ここで説明されるように、Ｉ／Ｏコヒーレントモードから非Ｉ／Ｏコヒーレントモードに切り替えるための準備において、処理デバイスは、処理デバイスキャッシュのためのキャッシュフラッシュ保守動作を実行し得る。ハードウェアアクセラレータは、処理デバイスが、ブロック１３１０において、キャッシュフラッシュ保守動作を実行する間、オフロードされた作業負荷を実行し続け得る。
【０１１０】
[00129]決定ブロック１３１２において、処理デバイスは、オフロードされた作業負荷が、ハードウェアアクセラレータによって完了されるかどうかを決定し得る。
【０１１１】
[00130]オフロードされた作業負荷がハードウェアアクセラレータによって完了されると決定すること（すなわち、決定ブロック１３１２＝「Ｙｅｓ」）に応答して、処理デバイスは、ブロック１３１８において、ハードウェアアクセラレータから受信されるオフロードされた作業負荷の実行の結果を受信し得る。完全にＩ／Ｏコヒーレントモードでの、オフロードされた作業負荷の実行の完了は、データのコヒーレンシを管理するコヒーレントインターコネクトのＩ／Ｏコヒーレントメカニズムの結果として、キャッシュ保守動作が不要であることを意味し得る。キャッシュフラッシュ保守動作が既に実行された可能性がある（may）一方で、いかなる追加のオーバヘッドも、キャッシュフラッシュ保守動作の実行により生じることはなく（may be incurred）、これは、Ｉ／Ｏコヒーレントモードにある間の、オフロードされた作業負荷の実行と並行したキャッシュフラッシュ保守動作の実行のためである（because of）。
【０１１２】
[00131]オフロードされた作業負荷がハードウェアアクセラレータによって完了されないと決定すること（すなわち、決定ブロック１３１２＝「Ｎｏ」）に応答して、処理デバイスは、ブロック１３１４において、コヒーレントインターコネクトを、非ハイブリッドＩ／Ｏコヒーレント書込みモードからハイブリッドＩ／Ｏコヒーレント書込みモードに切り替え得る。ブロック１３１４における非ハイブリッドＩ／Ｏコヒーレント書込みモードからハイブリッドＩ／Ｏコヒーレント書込みモードへの切替えは、ハイブリッドＩ／Ｏコヒーレント書込みモードの状態を「オン」に設定すること、または非ハイブリッドＩ／Ｏコヒーレント書込みモードの状態を「オフ」に設定することを含み得る。非ハイブリッドＩ／Ｏコヒーレント書込みモードからハイブリッドＩ／Ｏコヒーレント書込みモードに切り替わることは、図３Ｂ、図３Ｃ、および図８〜図１２を参照してここでさらに説明されたように、コヒーレントインターコネクトおよびコヒーレンシドメインを通るＩ／Ｏコヒーレント書込みデータおよびＩ／Ｏコヒーレント書込み要求のルーティングを変更し得る。
【０１１３】
[00132]ブロック１３１６において、ハードウェアアクセラレータは、ここでさらに説明されるように、コヒーレントインターコネクトがハイブリッドＩ／Ｏコヒーレント書込みモードにある間、オフロードされた作業負荷を実行し続け得る。
【０１１４】
[00133]図１４は、一態様による、ハイブリッドＩ／Ｏコヒーレント書込みを用いてＩ／Ｏコヒーレントおよび／または動的Ｉ／Ｏコヒーレント作業負荷処理をインプリメントするための方法１４００を例示する。方法１４００は、プロセッサ（例えば、図１および図２におけるプロセッサ１４および図３〜図７における処理デバイス３０２）において実行中のソフトウェアにおいて、汎用ハードウェアにおいて、専用ハードウェアにおいて、または他の個々のコンポーネントを含む、動的Ｉ／Ｏコヒーレンシシステム（例えば、図３Ａ〜図３Ｃ）内でソフトウェアを実行するプロセッサのような、ソフトウェア構成プロセッサと専用ハードウェアとの組合せにおいて、コンピューティングデバイス内でインプリメントされ得る。様々な態様においてイネーブルにされる代替の構成を包含するために、方法１４００をインプリメントするハードウェアは、ここで「処理デバイス」と呼ばれる。様々な態様では、方法１４００は、ハイブリッドＩ／Ｏコヒーレント書込みを用いてＩ／Ｏコヒーレント作業負荷処理をインプリメントするためのスタンドアロン方法であり得、ハイブリッドＩ／Ｏコヒーレント書込みを用いて動的Ｉ／Ｏコヒーレント作業負荷処理をインプリメントするための方法１３００のブロック１３１４および１３１６をさらに説明し得る。
【０１１５】
[00134]ブロック１４０２において、処理デバイスは、コヒーレントインターコネクト（例えば、図３Ａ〜図３Ｃにおけるコヒーレントインターコネクト３１２）のために、ハイブリッドＩ／Ｏコヒーレント書込みモードを「オン」に設定し得る。代替として、処理デバイスは、コヒーレントインターコネクトのために、非ハイブリッドＩ／Ｏコヒーレント書込みモードを「オフ」に設定し得る。
【０１１６】
[00135]ブロック１４０４において、ハイブリッドＩ／Ｏコヒーレント書込みを用いてＩ／Ｏコヒーレント作業負荷処理をインプリメントするために、処理デバイスは、ハイブリッドＩ／Ｏコヒーレント書込みモードを使用して、ハードウェアアクセラレータ（例えば、図３Ａ〜図３ＣにおけるＧＰＵ３０６ａ、ＤＳＰ３０６ｂ、カスタムハードウェアアクセラレータ３０６ｃ、および図４〜図７におけるハードウェアアクセラレータ３０６）上で、オフロードされた作業負荷の実行を起動し得る。ここで説明されるように、実行を起動することは、ハードウェアアクセラレータへの作業負荷のオフローディングに対して即時であり得、これは、Ｉ／Ｏコヒーレントモードを使用するとき、処理デバイスからハードウェアアクセラレータにデータを送信するために、いかなるオーバヘッドも生じ得ないからである。ブロック１４０４において、ハイブリッドＩ／Ｏコヒーレント書込みを用いて動的Ｉ／Ｏコヒーレント作業負荷処理をインプリメントするために、ハードウェアアクセラレータは、ハイブリッドＩ／Ｏコヒーレント書込みモードがコヒーレントインターコネクトのためにイネーブルでありながら、残りのオフロードされた作業負荷を実行し得る。
【０１１７】
[00136]決定ブロック１４０６において、処理デバイスは、残りのオフロードされた作業負荷が、ハードウェアアクセラレータによって完了されるかどうかを決定し得る。
【０１１８】
[00137]オフロードされた作業負荷がハードウェアアクセラレータによって完了されないと決定すること（すなわち、決定ブロック１４０６＝「Ｎｏ」）に応答して、処理デバイスは、決定ブロック１４０６において、残りのオフロードされた作業負荷がハードウェアアクセラレータによって完了されるかどうかを継続的に決定し得る。オフロードされた作業負荷がハードウェアアクセラレータによって完了されない間、ハードウェアアクセラレータは、ブロック１４０４において、残りのオフロードされた作業負荷を実行し続け得る。ハードウェアアクセラレータによる残りのオフロードされた作業負荷の実行中、コヒーレントインターコネクトが、ハイブリッドＩ／Ｏコヒーレント書込みモードに切り替えられたので、コヒーレントインターコネクトのコヒーレンシメカニズム（例えば、図３Ａ〜図３Ｃにおけるコヒーレンシドメイン３１４）をバイパスするように、Ｉ／Ｏコヒーレンシ書込みデータをルーティングすることにより、残りの作業負荷は、オーバヘッドを、または同じ量のオーバヘッド（as much overhead）を、もはや生じ得ない（may no longer）。
【０１１９】
[00138]オフロードされた作業負荷がハードウェアアクセラレータによって完了されると決定すること（すなわち、決定ブロック１４０６＝「Ｙｅｓ」）に応答して、処理デバイスは、ブロック１４０８において、オフロードされた作業負荷の結果を受信し得る。処理デバイスは、オフロードされた作業負荷の実行の結果を受信し、処理デバイスキャッシュに記憶し得る。ここで説明されるように、ハイブリッドＩ／Ｏコヒーレンシ書込み要求のために実行されるコヒーレンシ動作は、処理デバイスによる出力のために、オフロードされた作業負荷の結果を利用可能にするために、キャッシュ無効化保守動作を含む（include）、さらなるメモリ保守動作を実行する必要性を除去し得る。
【０１２０】
[00139]様々な態様（それに限定されるものでないが、図１〜図１４を参照して上記で説明された態様を含む）は、モバイルコンピューティングデバイスを含む幅広い種類のコンピューティングシステムにおいてインプリメントされ得、様々な態様との使用（use with）に好適なその一例が、図１５に例示される。モバイルコンピューティングデバイス１５００は、タッチスクリーンコントローラ１５０４と内部メモリ１５０６とに結合されたプロセッサ１５０２を含み得る。プロセッサ１５０２は、汎用または専用の処理タスクのために指定された１つまたは複数のマルチコア集積回路であり得る。内部メモリ１５０６は、揮発性または不揮発性メモリであり得、セキュアなおよび／または暗号化されたメモリ、またはセキュアではないおよび／または暗号化されていないメモリ、またはこれらの任意の組合せでもあり得る。活用され得る（that can be leveraged）メモリタイプの例は、それに限定されるものでないが、ＤＤＲ、ＬＰＤＤＲ、ＧＤＤＲ、ＷＩＤＥＩＯ、ＲＡＭ、ＳＲＡＭ、ＤＲＡＭ、Ｐ−ＲＡＭ、Ｒ−ＲＡＭ、Ｍ−ＲＡＭ、ＳＴＴ−ＲＡＭ、および埋込み型ＤＲＡＭを含む。タッチスクリーンコントローラ１５０４およびプロセッサ１５０２はまた、抵抗感知タッチスクリーン、静電容量感知（capacitive-sensing）タッチスクリーン、赤外線感知タッチスクリーン、等のような、タッチスクリーンパネル１５１２に結合され得る。加えて、コンピューティングデバイス１５００のディスプレイは、タッチスクリーン能力を有する必要はない。
【０１２１】
[00140]モバイルコンピューティングデバイス１５００は、互いにおよび／またはプロセッサ１５０２に結合された、通信を送受信するための、１つまたは複数の無線信号トランシーバ１５０８（例えば、Ｐｅａｎｕｔ、Ｂｌｕｅｔｏｏｔｈ（登録商標）、Ｚｉｇｂｅｅ（登録商標）、Ｗｉ−Ｆｉ（登録商標）、ＲＦ無線）およびアンテナ１５１０を有し得る。トランシーバ１５０８およびアンテナ１５１０は、様々なワイヤレス送信プロトコルスタックおよびインターフェースをインプリメントするために、上述された回路とともに使用され得る。モバイルコンピューティングデバイス１５００は、セルラネットワークを介した通信をイネーブルにしかつプロセッサに結合される、セルラネットワークワイヤレスモデムチップ１５１６を含み得る。
【０１２２】
[00141]モバイルコンピューティングデバイス１５００は、プロセッサ１５０２に結合された周辺デバイス接続インターフェース１５１８を含み得る。周辺デバイス接続インターフェース１５１８は、１つのタイプの接続を受け入れるように単独で構成され得、または、ユニバーサルシリアルバス（ＵＳＢ）、ＦｉｒｅＷｉｒｅ、Ｔｈｕｎｄｅｒｂｏｌｔ、またはＰＣＩｅなどの、共通または独自の（proprietary）様々なタイプの物理的接続および通信接続を受け入れるように構成され得る。周辺デバイス接続インターフェース１５１８はまた、同様に構成された周辺デバイス接続ポート（図示せず）に結合され得る。
【０１２３】
[00142]モバイルコンピューティングデバイス１５００はまた、音声出力を提供するためのスピーカ１５１４を含み得る。モバイルコンピューティングデバイス１５００はまた、ここで説明されたコンポーネントの全てまたはいくつかを収容するための、プラスチック、金属、または材料の組合せから構成されたハウジング１５２０を含み得る。モバイルコンピューティングデバイス１５００は、使い捨てバッテリまたは再充電可能バッテリなどの、プロセッサ１５０２に結合された電源１５２２を含み得る。再充電可能バッテリはまた、モバイルコンピューティングデバイス１５００の外部にあるソースから充電電流を受けるための周辺デバイス接続ポートに結合され得る。モバイルコンピューティングデバイス１５００はまた、ユーザ入力を受けるための物理ボタン１５２４を含み得る。モバイルコンピューティングデバイス１５００はまた、モバイルコンピューティングデバイス１５００をオンおよびオフにするための電源ボタン１５２６を含み得る。
【０１２４】
[00143]様々な態様（それに限定されるものでないが、図１〜図１４を参照して上記で説明された態様を含む）は、ラップトップコンピュータ１６００を含む幅広い種類のコンピューティングシステムにおいてインプリメントされ得、その一例が、図１６に例示される。多くのラップトップコンピュータは、コンピュータのポインティングデバイスとして機能するタッチパッドタッチ面１６１７を含み、したがって、上記で説明され、タッチスクリーンディスプレイを装備したコンピューティングデバイス上でインプリメントされるそれらと同様の、ドラッグ、スクロール、およびフリックのジェスチャを受け入れ得る。ラップトップコンピュータ１６００は、典型的に、揮発性メモリ１６１２に結合されたプロセッサ１６１１と、フラッシュメモリのディスクドライブ１６１３のような大容量不揮発性メモリとを含むだろう。加えて、コンピュータ１６００は、プロセッサ１６１１に結合され得る、セルラ電話トランシーバ１６１６および／またはワイヤレスデータリンクに接続され得る電磁放射を送受信するための１つまたは複数のアンテナ１６０８を有し得る。コンピュータ１６００はまた、プロセッサ１６１１に結合されたフロッピー（登録商標）ディスクドライブ１６１４およびコンパクトディスク（ＣＤ）ドライブ１６１５を含み得る。ノートブック構成では、コンピュータハウジングは、全てプロセッサ１６１１に結合されたタッチパッド１６１７、キーボード１６１８、およびディスプレイ１６１９を含む。コンピューティングデバイスの他の構成は、周知であるように、（例えば、ＵＳＢ入力を介して）プロセッサに結合されたコンピュータマウスまたはトラックボールを含み得、それはまた、様々な態様と併せて使用され得る。
【０１２５】
[00144]様々な態様（それに限定されるものでないが、図１〜図１４を参照して上記で説明された態様を含む）はまた、様々な市販のサーバのうちの任意のもののような、固定のコンピューティングシステムにおいてインプリメントされ得る。例となるサーバ１７００が、図１７に例示される。このようなサーバ１７００は、典型的に、揮発性メモリ１７０２およびディスクドライブ１７０４のような大容量の不揮発性メモリに結合された１つまたは複数のマルチコアプロセッサアセンブリ１７０１を含む。図１７に例示されるように、マルチコアプロセッサアセンブリ１７０１は、それらをアセンブリのラック（racks）へと挿入することによってサーバ１７００に追加され得る。サーバ１７００はまた、プロセッサ１７０１に結合されたフロッピーディスクドライブ、コンパクトディスク（ＣＤ）またはデジタル多目的ディスク（ＤＶＤ）ディスクドライブ１７０６を含み得る。サーバ１７００はまた、他のブロードキャストシステムコンピュータおよびサーバに結合されたローカルエリアネットワーク、インターネット、公衆交換電話網、および／またはセルラデータネットワーク（例えば、ＣＤＭＡ、ＴＤＭＡ、ＧＳＭ（登録商標）、ＰＣＳ、３Ｇ、４Ｇ、ＬＴＥ（登録商標）、またはその他任意のタイプのセルラデータネットワーク）などの、ネットワーク１７０５とのネットワークインターフェース接続を確立するためのマルチコアプロセッサアセンブリ１７０１に結合されたネットワークアクセスポート１７０３を含み得る。
【０１２６】
[00145]様々な態様の動作を実行するためのプログラマブルプロセッサ上での実行のためのコンピュータプログラムコードまたは「プログラムコード」は、Ｃ、Ｃ＋＋、Ｃ＃、Ｓｍａｌｌｔａｌｋ、Ｊａｖａ（登録商標）、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ｖｉｓｕａｌ Ｂａｓｉｃ、構造化クエリ言語（例えば、Ｔｒａｎｓａｃｔ−ＳＱＬ）、Ｐｅｒｌなどの高水準プログラミング言語で、または様々な他のプログラミング言語で書かれ得る。このアプリケーションで使用されるコンピュータ可読記憶媒体上に記憶されるプログラムコードまたはプログラムは、そのフォーマットがプロセッサによって理解可能である（オブジェクトコードのような）機械言語コードを指し得る。
【０１２７】
[00146]前述の方法の説明およびプロセスフロー図は、単に例示的な例として提供されており、様々な態様の動作が、提示された順序で実行しなければならないことを必要とするまたは暗示するように意図されるものでない。当業者によって理解されるように、前述の態様における動作の順序は、任意の順序で実行され得る。「その後に（thereafter）」、「その後（then）」、「次に（next）」、等の用語は、動作の順序を限定するように意図されるものではなく、これらの用語は、単に、方法の説明を通じて読者を導くために使用される。さらに、例えば、「ａ」、「ａｎ」または「ｔｈｅ」という冠詞を使用した、単数形の請求項の要素への任意の参照は、その要素を単数形に限定するように解釈されるべきではない。
【０１２８】
[00147]様々な態様に関連して説明された様々な例示的な論理ブロック、モジュール、回路、およびアルゴリズム動作は、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとしてインプリメントされ得る。ハードウェアおよびソフトウェアのこの互換性を明確に例示するために、様々な例示的なコンポーネント、ブロック、モジュール、回路、および動作が、概してそれらの機能の観点から上記で説明されてきた。このような機能が、ハードウェアとしてインプリメントされるか、あるいはソフトウェアとしてインプリメントされるかは、特定のアプリケーションおよびシステム全体に課せられる設計制約に依存する。当業者は、特定のアプリケーションごとに多様な方法において、説明された機能をインプリメントし得るが、このようなインプリメンテーションの決定は、特許請求の範囲から逸脱を引き起こしていると解釈されるべきでない。
【０１２９】
[00148]ここで開示された態様に関連して説明された様々な例示的なロジック、論理ブロック、モジュール、および回路をインプリメントするために使用されるハードウェアは、汎用プロセッサ、デジタルシグナルプロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＩＣ）、フィールドプログラマブルゲートアレイ（ＦＰＧＡ）または他のプログラマブル論理デバイス、個別ゲートまたはトランジスタロジック、個別ハードウェアコンポーネント、あるいはここで説明された機能を実行するように設計されたこれらの任意の組合せを用いてインプリメントまたは実行され得る。汎用プロセッサは、マイクロプロセッサであり得るが、代替として、このプロセッサは、任意の従来のプロセッサ、コントローラ、マイクロコントローラ、またはステートマシン（state machine）であり得る。プロセッサはまた、コンピューティングデバイスの組合せ、例えば、ＤＳＰとマイクロプロセッサの組合せ、複数のマイクロプロセッサ、ＤＳＰコアと連携した１つまたは複数のマイクロプロセッサ、あるいはその他任意のこのような構成としてインプリメントされ得る。代替として、いくつかの動作または方法は、所与の機能に特有の回路によって実行され得る。
【０１３０】
[00149]１つまたは複数の態様では、説明された機能は、ハードウェア、ソフトウェア、ファームウェア、またはこれらの任意の組合せでインプリメントされ得る。ソフトウェアでインプリメントされる場合、これら機能は、非一時的なコンピュータ可読媒体または非一時的なプロセッサ可読媒体上で、１つまたは複数の命令またはコードとして記憶され得る。ここで開示された方法またはアルゴリズムの動作は、非一時的なコンピュータ可読記憶媒体またはプロセッサ可読記憶媒体上に存在し得るプロセッサ実行可能ソフトウェアモジュールにおいて具現化され得る。非一時的なコンピュータ可読記憶媒体またはプロセッサ可読記憶媒体は、コンピュータまたはプロセッサによってアクセスされ得る任意の記憶媒体であり得る。限定ではなく例として、このような非一時的なコンピュータ可読またはプロセッサ可読媒体は、ＲＡＭ、ＲＯＭ、ＥＥＰＲＯＭ（登録商標）、ＦＬＡＳＨメモリ、ＣＤ−ＲＯＭまたは他の光ディスク記憶装置、磁気ディスク記憶装置または他の磁気記憶デバイス、または命令あるいはデータ構造の形態で所望のプログラムコードを記憶するために使用され得、かつコンピュータによってアクセスされ得るその他任意の媒体を含み得る。ここで使用される場合、ディスク（disk）およびディスク（disc）は、コンパクトディスク（ＣＤ）、レーザーディスク（登録商標）、光ディスク、デジタル多目的ディスク（ＤＶＤ）、フロッピーディスク、およびブルーレイ（登録商標）ディスクを含み、ここでディスク（disks）は、通常磁気的にデータを再生し、一方ディスク（discs）は、レーザーを用いて光学的にデータを再生する。上記の組合せもまた、非一時的なコンピュータ可読およびプロセッサ可読媒体の範囲内に含まれる。加えて、方法またはアルゴリズムの動作は、コンピュータプログラム製品に組み込まれ得る、非一時的なプロセッサ可読媒体および／またはコンピュータ可読媒体上で、コードおよび／または命令の１つまたは任意の組合せまたはセットとして存在し得る。
【０１３１】
[00150]開示された態様についての前述の説明は、当業者が特許請求の範囲を製造又は使用できるように提供されている。これらの態様への様々な修正は、当業者には容易に明らかとなり、ここで定義した一般原理は、特許請求の範囲から逸脱することなく他の態様およびインプリメンテーションに適用され得る。したがって、本開示は、ここで説明された態様およびインプリメンテーションに限定されるようには意図されず、以下の特許請求の範囲およびここで開示された原理および新規の特徴に合致する最も広い範囲を与えられることとなる。
【図１】
2019533855.tif 000003
【図２】
2019533855.tif 000004
【図３Ａ】
2019533855.tif 000005
【図３Ｂ】
2019533855.tif 000006
【図３Ｃ】
2019533855.tif 000007
【図４】
2019533855.tif 000008
【図５】
2019533855.tif 000009
【図６】
2019533855.tif 000010
【図７】
2019533855.tif 000011
【図８】
2019533855.tif 000012
【図９】
2019533855.tif 000013
【図１０】
2019533855.tif 000014
【図１１】
2019533855.tif 000015
【図１２】
2019533855.tif 000016
【図１３】
2019533855.tif 000017
【図１４】
2019533855.tif 000018
【図１５】
2019533855.tif 000019
【図１６】
2019533855.tif 000020
【図１７】
2019533855.tif 000021
【手続補正書】
【提出日】令和1年5月14日(2019.5.14)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
コンピューティングデバイス上で、ハイブリッド入力／出力（Ｉ／Ｏ）コヒーレント書込み要求をインプリメントする方法であって、
Ｉ／Ｏコヒーレント書込み要求を受信することと、
前記Ｉ／Ｏコヒーレント書込み要求を複製することによって、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することと、
共有メモリに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求と、前記Ｉ／Ｏコヒーレント書込み要求のＩ／Ｏコヒーレント書込みデータとを送ることと、
コヒーレンシドメインに、前記Ｉ／Ｏコヒーレント書込み要求の前記Ｉ／Ｏコヒーレント書込みデータを送ることなしに、前記コヒーレンシドメインに、前記Ｉ／Ｏコヒーレント書込み要求から複製された前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を送ることと
を備える方法。
【請求項２】
ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされているかどうかを決定することをさらに備え、
ここにおいて、前記Ｉ／Ｏコヒーレント書込み要求を複製することによって、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することは、前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、前記Ｉ／Ｏコヒーレント書込み要求を複製することによって、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することを備える、
請求項１に記載の方法。
【請求項３】
前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、ハイブリッドＩ／Ｏコヒーレント書込み要求として、前記Ｉ／Ｏコヒーレント書込み要求をマーキングすることをさらに備える、請求項２に記載の方法。
【請求項４】
前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信することと、
前記Ｉ／Ｏコヒーレント書込み要求を発行した処理デバイスに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を送ることと
をさらに備える、請求項１に記載の方法。
【請求項５】
前記コヒーレンシドメインにおいて、前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を受信することと、
前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求によって指定される前記Ｉ／Ｏコヒーレンシ書込みデータのアドレスについてのコヒーレンシチェックを実行することと、
前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信することと
をさらに備える、請求項１に記載の方法。
【請求項６】
前記共有メモリにおいて、コヒーレントインターコネクトから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記Ｉ／Ｏコヒーレント書込みデータを受信することと、
前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求を実行することと、
前記コヒーレントインターコネクトに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を送ることと
をさらに備える、請求項１に記載の方法。
【請求項７】
前記コヒーレントインターコネクトから、前記コヒーレンシドメインによって、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信することと、
前記コヒーレントインターコネクトから、前記Ｉ／Ｏコヒーレント書込み要求を発行した処理デバイスによって、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信することと
をさらに備える、請求項６に記載の方法。
【請求項８】
処理デバイスによって、Ｉ／Ｏコヒーレントモードを使用した実行のために、ハードウェアアクセラレータに作業負荷をオフロードすることと、
前記処理デバイスによって、前記作業負荷が前記ハードウェアアクセラレータによって実行されている間に、コヒーレントインターコネクトを、非ハイブリッドＩ／Ｏコヒーレント書込みモードからハイブリッドＩ／Ｏコヒーレント書込みモードに切り替えるための動的トリガを検出することと、
前記動的トリガを検出したことに応答して、前記コヒーレントインターコネクトを、非ハイブリッドＩ／Ｏコヒーレント書込みモードから前記ハイブリッドＩ／Ｏコヒーレント書込みモードに切り替えることと
をさらに備える、請求項１に記載の方法。
【請求項９】
コンピューティングデバイスであって、
共有メモリと、
処理デバイスと、
コヒーレンシドメインと、
前記共有メモリと、前記処理デバイスと、前記コヒーレンシドメインとに結合されたコヒーレントインターコネクトと
を備え、ここにおいて、前記コヒーレントインターコネクトは、
Ｉ／Ｏコヒーレント書込み要求を受信することと、
前記Ｉ／Ｏコヒーレント書込み要求を複製することによって、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することと、
前記共有メモリに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求と、前記Ｉ／Ｏコヒーレント書込み要求のＩ／Ｏコヒーレント書込みデータとを送ることと、
前記コヒーレンシドメインに、前記Ｉ／Ｏコヒーレント書込み要求の前記Ｉ／Ｏコヒーレント書込みデータを送ることなしに、前記コヒーレンシドメインに、前記Ｉ／Ｏコヒーレント書込み要求から複製された前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を送ることと
を行うための、コヒーレントインターコネクトにより実行可能なソフトウェア命令で構成される、
コンピューティングデバイス。
【請求項１０】
前記コヒーレントインターコネクトは、ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされているかどうかを決定することを行うための、コヒーレントインターコネクトにより実行可能なソフトウェア命令でさらに構成され、
ここにおいて、前記コヒーレントインターコネクトは、前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、前記Ｉ／Ｏコヒーレント書込み要求を複製することによって、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することによって、前記Ｉ／Ｏコヒーレント書込み要求を複製することによって、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することを行うための、コヒーレントインターコネクトにより実行可能なソフトウェア命令でさらに構成される、
請求項９に記載のコンピューティングデバイス。
【請求項１１】
前記コヒーレントインターコネクトは、前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、ハイブリッドＩ／Ｏコヒーレント書込み要求として、前記Ｉ／Ｏコヒーレント書込み要求をマーキングすることを行うための、コヒーレントインターコネクトにより実行可能なソフトウェア命令でさらに構成される、請求項１０に記載のコンピューティングデバイス。
【請求項１２】
前記コヒーレントインターコネクトは、
前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信することと、
前記Ｉ／Ｏコヒーレント書込み要求を発行した前記処理デバイスに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を送ることと
を行うための、コヒーレントインターコネクトにより実行可能なソフトウェア命令でさらに構成される、請求項９に記載のコンピューティングデバイス。
【請求項１３】
前記コヒーレンシドメインは、
前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を受信することと、
前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求によって指定される前記Ｉ／Ｏコヒーレンシ書込みデータのアドレスについてのコヒーレンシチェックを実行することと、
前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信することと
を行うための、コヒーレンシドメインにより実行可能なソフトウェア命令で構成される、請求項９に記載のコンピューティングデバイス。
【請求項１４】
前記共有メモリは、
前記コヒーレントインターコネクトから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記Ｉ／Ｏコヒーレント書込みデータを受信することと、
前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求を実行することと、
前記コヒーレントインターコネクトに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を送ることと
を行うための、共有メモリにより実行可能なソフトウェア命令で構成される、請求項９に記載のコンピューティングデバイス。
【請求項１５】
前記コヒーレンシドメインは、
前記コヒーレントインターコネクトから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信すること
を行うための、コヒーレンシドメインにより実行可能なソフトウェア命令で構成され、
前記処理デバイスは、
前記コヒーレントインターコネクトから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信すること、ここにおいて、前記処理デバイスは、前記Ｉ／Ｏコヒーレント書込み要求を発行した、
を行うための、プロセッサにより実行可能なソフトウェア命令で構成される、
請求項１４に記載のコンピューティングデバイス。
【請求項１６】
前記処理デバイスは、ハードウェアアクセラレータであり、前記コンピューティングデバイスは、前記コヒーレントインターコネクトに結合され、および
Ｉ／Ｏコヒーレントモードを使用した実行のために、前記ハードウェアアクセラレータに作業負荷をオフロードすることと、
前記作業負荷が前記ハードウェアアクセラレータによって実行されている間に、コヒーレントインターコネクトを、非ハイブリッドＩ／Ｏコヒーレント書込みモードからハイブリッドＩ／Ｏコヒーレント書込みモードに切り替えるための動的トリガを検出することと、
前記動的トリガを検出したことに応答して、前記コヒーレントインターコネクトを、非ハイブリッドＩ／Ｏコヒーレント書込みモードから前記ハイブリッドＩ／Ｏコヒーレント書込みモードに切り替えることと
を行うための、プロセッサにより実行可能なソフトウェア命令で構成された第２の処理デバイスをさらに備える、
請求項９に記載のコンピューティングデバイス。
【請求項１７】
コンピューティングデバイスであって、
共有メモリと、
コヒーレンシドメインと、
Ｉ／Ｏコヒーレント書込み要求を受信するための手段と、
前記Ｉ／Ｏコヒーレント書込み要求を複製するための手段を備える、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成するための手段と、
前記共有メモリに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求と、前記Ｉ／Ｏコヒーレント書込み要求のＩ／Ｏコヒーレント書込みデータとを送るための手段と、
前記コヒーレンシドメインに、前記Ｉ／Ｏコヒーレント書込み要求の前記Ｉ／Ｏコヒーレント書込みデータを送ることなしに、前記コヒーレンシドメインに、前記Ｉ／Ｏコヒーレント書込み要求から複製された前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を送るための手段と
を備えるコンピューティングデバイス。
【請求項１８】
ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされているかどうかを決定するための手段をさらに備え、
ここにおいて、前記Ｉ／Ｏコヒーレント書込み要求を複製するための手段を備える、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成するための手段は、前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、前記Ｉ／Ｏコヒーレント書込み要求を複製するための手段を備える、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成するための手段を備える、
請求項１７に記載のコンピューティングデバイス。
【請求項１９】
前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、ハイブリッドＩ／Ｏコヒーレント書込み要求として、前記Ｉ／Ｏコヒーレント書込み要求をマーキングするための手段をさらに備える、請求項１８に記載のコンピューティングデバイス。
【請求項２０】
前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信するための手段と、
前記Ｉ／Ｏコヒーレント書込み要求を発行した処理デバイスに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を送るための手段と
をさらに備える、請求項１７に記載のコンピューティングデバイス。
【請求項２１】
前記コヒーレンシドメインにおいて、前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を受信するための手段と、
前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求によって指定される前記Ｉ／Ｏコヒーレンシ書込みデータのアドレスについてのコヒーレンシチェックを実行するための手段と、
前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信するための手段と
をさらに備える、請求項１７に記載のコンピューティングデバイス。
【請求項２２】
前記共有メモリにおいて、コヒーレントインターコネクトから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記Ｉ／Ｏコヒーレント書込みデータを受信するための手段と、
前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求を実行するための手段と、
前記コヒーレントインターコネクトに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を送るための手段と
をさらに備える、請求項１７に記載のコンピューティングデバイス。
【請求項２３】
前記コヒーレントインターコネクトから、前記コヒーレンシドメインによって、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信するための手段と、
前記コヒーレントインターコネクトから、前記Ｉ／Ｏコヒーレント書込み要求を発行した処理デバイスによって、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信するための手段と
をさらに備える、請求項２２に記載のコンピューティングデバイス。
【請求項２４】
コンピューティングデバイスの処理デバイスに、
Ｉ／Ｏコヒーレント書込み要求を受信することと、
前記Ｉ／Ｏコヒーレント書込み要求を複製することによって、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することと、
共有メモリに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求と、前記Ｉ／Ｏコヒーレント書込み要求のＩ／Ｏコヒーレント書込みデータとを送ることと、
コヒーレンシドメインに、前記Ｉ／Ｏコヒーレント書込み要求の前記Ｉ／Ｏコヒーレント書込みデータを送ることなしに、前記コヒーレンシドメインに、前記Ｉ／Ｏコヒーレント書込み要求から複製された前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を送ることと
を備える動作を実行させるように構成されたプロセッサ実行可能命令を記憶した非一時的なプロセッサ可読媒体。
【請求項２５】
前記記憶された実行可能命令は、前記コンピューティングデバイスの前記処理デバイスに、ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされているかどうかを決定することをさらに備える動作を実行させるように構成され、
ここにおいて、前記Ｉ／Ｏコヒーレント書込み要求を複製することによって、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することは、前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、前記Ｉ／Ｏコヒーレント書込み要求を複製することによって、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することを備える、
請求項２４に記載の非一時的なプロセッサ可読媒体。
【請求項２６】
前記記憶された実行可能命令は、前記コンピューティングデバイスの前記処理デバイスに、前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、ハイブリッドＩ／Ｏコヒーレント書込み要求として、前記Ｉ／Ｏコヒーレント書込み要求をマーキングすることをさらに備える動作を実行させるように構成される、請求項２５に記載の非一時的なプロセッサ可読媒体。
【請求項２７】
前記記憶された実行可能命令は、前記コンピューティングデバイスの前記処理デバイスに、
前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信することと、
前記Ｉ／Ｏコヒーレント書込み要求を発行した第２の処理デバイスに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を送ることと
をさらに備える動作を実行させるように構成される、請求項２４に記載の非一時的なプロセッサ可読媒体。
【請求項２８】
前記記憶された実行可能命令は、前記コンピューティングデバイスの前記処理デバイスに、
前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を受信することと、
前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求によって指定される前記Ｉ／Ｏコヒーレンシ書込みデータのアドレスについてのコヒーレンシチェックを実行することと、
前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信することと
をさらに備える動作を実行させるように構成される、請求項２４に記載の非一時的なプロセッサ可読媒体。
【請求項２９】
前記記憶された実行可能命令は、前記コンピューティングデバイスの前記処理デバイスに、
コヒーレントインターコネクトから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記Ｉ／Ｏコヒーレント書込みデータを受信することと、
前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求を実行することと、
前記コヒーレントインターコネクトに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を送ることと
をさらに備える動作を実行させるように構成される、請求項２４に記載の非一時的なプロセッサ可読媒体。
【請求項３０】
前記記憶された実行可能命令は、前記コンピューティングデバイスの前記処理デバイスに、
前記コヒーレントインターコネクトから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信することと、
前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信することと、ここにおいて、前記処理デバイスは、前記コヒーレントインターコネクトから前記Ｉ／Ｏコヒーレント書込み要求を発行した、
をさらに備える動作を実行させるように構成される、請求項２９に記載の非一時的なプロセッサ可読媒体。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０１３１
【補正方法】変更
【補正の内容】
【０１３１】
[00150]開示された態様についての前述の説明は、当業者が特許請求の範囲を製造又は使用できるように提供されている。これらの態様への様々な修正は、当業者には容易に明らかとなり、ここで定義した一般原理は、特許請求の範囲から逸脱することなく他の態様およびインプリメンテーションに適用され得る。したがって、本開示は、ここで説明された態様およびインプリメンテーションに限定されるようには意図されず、以下の特許請求の範囲およびここで開示された原理および新規の特徴に合致する最も広い範囲を与えられることとなる。
以下に本願の出願当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］  コンピューティングデバイス上で、ハイブリッド入力／出力（Ｉ／Ｏ）コヒーレント書込み要求をインプリメントする方法であって、
Ｉ／Ｏコヒーレント書込み要求を受信することと、
前記Ｉ／Ｏコヒーレント書込み要求から、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することと、
共有メモリに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求と、前記Ｉ／Ｏコヒーレント書込み要求のＩ／Ｏコヒーレント書込みデータとを送ることと、
コヒーレンシドメインに、前記Ｉ／Ｏコヒーレント書込み要求の前記Ｉ／Ｏコヒーレント書込みデータなしに、前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を送ることと
を備える方法。
［Ｃ２］  ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされているかどうかを決定することをさらに備え、
ここにおいて、前記Ｉ／Ｏコヒーレント書込み要求から、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することは、前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、前記Ｉ／Ｏコヒーレント書込み要求から、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することを備える、
Ｃ１に記載の方法。
［Ｃ３］  前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、ハイブリッドＩ／Ｏコヒーレント書込み要求として、前記Ｉ／Ｏコヒーレント書込み要求をマーキングすることをさらに備える、Ｃ２に記載の方法。
［Ｃ４］  前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信することと、
前記Ｉ／Ｏコヒーレント書込み要求を発行した処理デバイスに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を送ることと
をさらに備える、Ｃ１に記載の方法。
［Ｃ５］  前記コヒーレンシドメインにおいて、前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を受信することと、
前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求によって指定されるＩ／Ｏコヒーレンシ書込みデータのアドレスについてのコヒーレンシチェックを実行することと、
前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信することと
をさらに備える、Ｃ１に記載の方法。
［Ｃ６］  前記共有メモリにおいて、コヒーレントインターコネクトから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記Ｉ／Ｏコヒーレント書込みデータを受信することと、
前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求を実行することと、
前記コヒーレントインターコネクトに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を送ることと
をさらに備える、Ｃ１に記載の方法。
［Ｃ７］  前記コヒーレントインターコネクトから、前記コヒーレンシドメインによって、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信することと、
前記コヒーレントインターコネクトから、前記Ｉ／Ｏコヒーレント書込み要求を発行した処理デバイスによって、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信することと
をさらに備える、Ｃ６に記載の方法。
［Ｃ８］  処理デバイスによって、Ｉ／Ｏコヒーレントモードを使用した実行のために、ハードウェアアクセラレータに作業負荷をオフロードすることと、
前記処理デバイスによって、前記作業負荷が前記ハードウェアアクセラレータによって実行されている間に、コヒーレントインターコネクトを、非ハイブリッドＩ／Ｏコヒーレント書込みモードからハイブリッドＩ／Ｏコヒーレント書込みモードに切り替えるための動的トリガを検出することと、
前記動的トリガを検出したことに応答して、前記コヒーレントインターコネクトを、非ハイブリッドＩ／Ｏコヒーレント書込みモードから前記ハイブリッドＩ／Ｏコヒーレント書込みモードに切り替えることと
をさらに備える、Ｃ１に記載の方法。
［Ｃ９］  コンピューティングデバイスであって、
共有メモリと、
処理デバイスと、
コヒーレンシドメインと、
前記共有メモリと、前記処理デバイスと、前記コヒーレンシドメインとに結合されたコヒーレントインターコネクトと
を備え、ここにおいて、前記コヒーレントインターコネクトは、
Ｉ／Ｏコヒーレント書込み要求を受信することと、
前記Ｉ／Ｏコヒーレント書込み要求から、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することと、
前記共有メモリに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求と、前記Ｉ／Ｏコヒーレント書込み要求のＩ／Ｏコヒーレント書込みデータとを送ることと、
前記コヒーレンシドメインに、前記Ｉ／Ｏコヒーレント書込み要求の前記Ｉ／Ｏコヒーレント書込みデータなしに、前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を送ることと
を備える動作を実行するように構成される、
コンピューティングデバイス。
［Ｃ１０］  前記コヒーレントインターコネクトは、ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされているかどうかを決定することをさらに備える動作を実行するように構成され、
ここにおいて、前記コヒーレントインターコネクトは、前記Ｉ／Ｏコヒーレント書込み要求から、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することが、前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、前記Ｉ／Ｏコヒーレント書込み要求から、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することを備えるように、動作を実行するように構成される、
Ｃ９に記載のコンピューティングデバイス。
［Ｃ１１］  前記コヒーレントインターコネクトは、前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、ハイブリッドＩ／Ｏコヒーレント書込み要求として、前記Ｉ／Ｏコヒーレント書込み要求をマーキングすることをさらに備える動作を実行するように構成される、Ｃ１０に記載のコンピューティングデバイス。
［Ｃ１２］  前記コヒーレントインターコネクトは、
前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信することと、
前記Ｉ／Ｏコヒーレント書込み要求を発行した前記処理デバイスに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を送ることと
をさらに備える動作を実行するように構成される、Ｃ９に記載のコンピューティングデバイス。
［Ｃ１３］  前記コヒーレンシドメインは、
前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を受信することと、
前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求によって指定されるＩ／Ｏコヒーレンシ書込みデータのアドレスについてのコヒーレンシチェックを実行することと、
前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信することと
を備える動作を実行するように構成される、Ｃ９に記載のコンピューティングデバイス。
［Ｃ１４］  前記共有メモリは、
前記コヒーレントインターコネクトから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記Ｉ／Ｏコヒーレント書込みデータを受信することと、
前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求を実行することと、
前記コヒーレントインターコネクトに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を送ることと
を備える動作を実行するように構成される、Ｃ９に記載のコンピューティングデバイス。
［Ｃ１５］  前記コヒーレンシドメインは、
前記コヒーレントインターコネクトから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信すること
を備える動作を実行するように構成され、
前記処理デバイスは、
前記コヒーレントインターコネクトから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信すること、ここにおいて、前記処理デバイスは、前記Ｉ／Ｏコヒーレント書込み要求を発行した、
を備える動作を実行するように構成される、
Ｃ１４に記載のコンピューティングデバイス。
［Ｃ１６］  前記処理デバイスは、ハードウェアアクセラレータであり、前記コンピューティングデバイスは、前記コヒーレントインターコネクトに結合され、および
Ｉ／Ｏコヒーレントモードを使用した実行のために、前記ハードウェアアクセラレータに作業負荷をオフロードすることと、
前記作業負荷が前記ハードウェアアクセラレータによって実行されている間に、コヒーレントインターコネクトを、非ハイブリッドＩ／Ｏコヒーレント書込みモードからハイブリッドＩ／Ｏコヒーレント書込みモードに切り替えるための動的トリガを検出することと、
前記動的トリガを検出することに応答して、前記コヒーレントインターコネクトを、非ハイブリッドＩ／Ｏコヒーレント書込みモードから前記ハイブリッドＩ／Ｏコヒーレント書込みモードに切り替えることと
を備える動作を実行するように構成された第２の処理デバイスをさらに備える、
Ｃ９に記載のコンピューティングデバイス。
［Ｃ１７］  コンピューティングデバイスであって、
共有メモリと、
コヒーレンシドメインと、
Ｉ／Ｏコヒーレント書込み要求を受信するための手段と、
前記Ｉ／Ｏコヒーレント書込み要求から、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成するための手段と、
前記共有メモリに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求と、前記Ｉ／Ｏコヒーレント書込み要求のＩ／Ｏコヒーレント書込みデータとを送るための手段と、
前記コヒーレンシドメインに、前記Ｉ／Ｏコヒーレント書込み要求の前記Ｉ／Ｏコヒーレント書込みデータなしに、前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を送るための手段と
を備えるコンピューティングデバイス。
［Ｃ１８］  ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされているかどうかを決定するための手段をさらに備え、
ここにおいて、前記Ｉ／Ｏコヒーレント書込み要求から、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成するための手段は、前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、前記Ｉ／Ｏコヒーレント書込み要求から、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成するための手段を備える、
Ｃ１７に記載のコンピューティングデバイス。
［Ｃ１９］  前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、ハイブリッドＩ／Ｏコヒーレント書込み要求として、前記Ｉ／Ｏコヒーレント書込み要求をマーキングするための手段をさらに備える、Ｃ１８に記載のコンピューティングデバイス。
［Ｃ２０］  前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信するための手段と、
前記Ｉ／Ｏコヒーレント書込み要求を発行した処理デバイスに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を送るための手段と
をさらに備える、Ｃ１７に記載のコンピューティングデバイス。
［Ｃ２１］  前記コヒーレンシドメインにおいて、前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を受信するための手段と、
前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求によって指定されるＩ／Ｏコヒーレンシ書込みデータのアドレスについてのコヒーレンシチェックを実行するための手段と、
前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信するための手段と
をさらに備える、Ｃ１７に記載のコンピューティングデバイス。
［Ｃ２２］  前記共有メモリにおいて、コヒーレントインターコネクトから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記Ｉ／Ｏコヒーレント書込みデータを受信するための手段と、
前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求を実行するための手段と、
前記コヒーレントインターコネクトに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を送るための手段と
をさらに備える、Ｃ１７に記載のコンピューティングデバイス。
［Ｃ２３］  前記コヒーレントインターコネクトから、前記コヒーレンシドメインによって、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信するための手段と、
前記コヒーレントインターコネクトから、前記Ｉ／Ｏコヒーレント書込み要求を発行した処理デバイスによって、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信するための手段と
をさらに備える、Ｃ２２に記載のコンピューティングデバイス。
［Ｃ２４］  コンピューティングデバイスの処理デバイスに、
Ｉ／Ｏコヒーレント書込み要求を受信することと、
前記Ｉ／Ｏコヒーレント書込み要求から、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することと、
共有メモリに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求と、前記Ｉ／Ｏコヒーレント書込み要求のＩ／Ｏコヒーレント書込みデータとを送ることと、
コヒーレンシドメインに、前記Ｉ／Ｏコヒーレント書込み要求の前記Ｉ／Ｏコヒーレント書込みデータなしに、前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を送ることと
を備える動作を実行させるように構成されたプロセッサ実行可能命令を記憶した非一時的なプロセッサ可読媒体。
［Ｃ２５］  前記記憶された実行可能命令は、前記コンピューティングデバイスの前記処理デバイスに、ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされているかどうかを決定することをさらに備える動作を実行させるように構成され、
ここにおいて、前記Ｉ／Ｏコヒーレント書込み要求から、第１のハイブリッドＩ／Ｏコヒーレント書込み要求および第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することは、前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、前記Ｉ／Ｏコヒーレント書込み要求から、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を生成することを備える、
Ｃ２４に記載の非一時的なプロセッサ可読媒体。
［Ｃ２６］  前記記憶された実行可能命令は、前記コンピューティングデバイスの前記処理デバイスに、前記ハイブリッドＩ／Ｏコヒーレント書込みモードがイネーブルにされていると決定することに応答して、ハイブリッドＩ／Ｏコヒーレント書込み要求として、前記Ｉ／Ｏコヒーレント書込み要求をマーキングすることをさらに備える動作を実行させるように構成される、Ｃ２５に記載の非一時的なプロセッサ可読媒体。
［Ｃ２７］  前記記憶された実行可能命令は、前記コンピューティングデバイスの前記処理デバイスに、
前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信することと、
前記Ｉ／Ｏコヒーレント書込み要求を発行した第２の処理デバイスに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を送ることと
をさらに備える動作を実行させるように構成される、Ｃ２４に記載の非一時的なプロセッサ可読媒体。
［Ｃ２８］  前記記憶された実行可能命令は、前記コンピューティングデバイスの前記処理デバイスに、
前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求を受信することと、
前記第２のハイブリッドＩ／Ｏコヒーレント書込み要求によって指定されるＩ／Ｏコヒーレンシ書込みデータのアドレスについてのコヒーレンシチェックを実行することと、
前記共有メモリから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を受信することと
をさらに備える動作を実行させるように構成される、Ｃ２４に記載の非一時的なプロセッサ可読媒体。
［Ｃ２９］  前記記憶された実行可能命令は、前記コンピューティングデバイスの前記処理デバイスに、
コヒーレントインターコネクトから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求および前記Ｉ／Ｏコヒーレント書込みデータを受信することと、
前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求を実行することと、
前記コヒーレントインターコネクトに、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の確認応答を送ることと
をさらに備える動作を実行させるように構成される、Ｃ２４に記載の非一時的なプロセッサ可読媒体。
［Ｃ３０］  前記記憶された実行可能命令は、前記コンピューティングデバイスの前記処理デバイスに、
前記コヒーレントインターコネクトから、前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信することと、
前記第１のハイブリッドＩ／Ｏコヒーレント書込み要求の前記確認応答を受信することと、ここにおいて、前記処理デバイスは、前記コヒーレントインターコネクトから前記Ｉ／Ｏコヒーレント書込み要求を発行した、
をさらに備える動作を実行させるように構成される、Ｃ２９に記載の非一時的なプロセッサ可読媒体。
【国際調査報告】
2019533855.tif 000022
2019533855.tif 000023