(57)【要約】要求に応答するための方法、装置およびコンピュータ可読媒体が開示されている。要求に応答する方法は、コールバック関数を含む要求を受け取ることを含み得る。１つ以上の要求は、第１タイプのプロセッサ（ＣＰＵであってよい）に関連付けられた第１メモリにおいて受け取られ得る。これらの要求は、第２メモリに移動され得る。第２メモリは、第２タイプのプロセッサ（ＧＰＵであってよい）に関連付けられ得る。ＧＰＵスレッドは、要求の数が少なくとも閾値数である場合に、要求に対する結果を決定するために、要求を処理し得る。この方法は、結果を第１メモリに移動させることを含み得る。この方法は、ＣＰＵが、対応する結果を用いて、１つ以上のコールバック関数を実行することを含み得る。ＧＰＵの持続的なスレッドは、閾値数の要求が到達されたときを決定するために、要求の数をチェックし得る。【選択図】図２
2015522878.tif 000002
【特許請求の範囲】
【請求項１】
要求に応答するための方法であって、
第１タイプの１つ以上のプロセッサが１つ以上の要求を受け取ることと、
前記１つ以上の要求を、前記第１タイプの前記１つ以上のプロセッサに関連付けられた第１メモリから、第２タイプの１つ以上のプロセッサに関連付けられた第２メモリへと移動させることと、
前記第２タイプの前記１つ以上のプロセッサが、前記１つ以上の要求の各々に対してポインタを決定することであって、前記ポインタは、前記要求内の情報に基づいて決定されることと、
決定されたポインタを、前記第１メモリへ移動させることと、
前記第１タイプの前記１つ以上のプロセッサが、前記決定されたポインタの各々に対して、前記決定されたポインタによってポイントされたデータを取得することであって、前記データは、前記第１メモリの第１データ構造から取得されることと、
前記第１タイプの前記１つ以上のプロセッサが、対応する前記取得されたデータを送ることによって、前記受け取った要求に応答することと、
を含む、方法。
【請求項２】
前記第１タイプの前記１つ以上のプロセッサは、１つ以上のＣＰＵコアを含み、前記第２タイプの前記１つ以上のプロセッサは、１つ以上のＧＰＵコアを含む、請求項１に記載の方法。
【請求項３】
前記１つ以上ののＧＰＵコアの各々は、ＧＰＵカーネルに基づいて持続的なスレッドを実行する、請求項２に記載の方法。
【請求項４】
前記１つ以上のＧＰＵコアは、前記１つ以上のＣＰＵコアが前記第２メモリにアクセスするよりもはるかに高速に前記第２メモリにアクセス可能である、請求項２に記載の方法。
【請求項５】
前記１つ以上のＣＰＵコアの第１メモリの第１アクセス時間は、前記１つ以上のＧＰＵコアの前記第１メモリの第２アクセス時間よりもはるかに短い、請求項２に記載の方法。
【請求項６】
前記第２タイプの前記１つ以上のプロセッサがポインタを決定することは、
前記第２タイプの前記１つ以上のプロセッサが前記１つ以上の要求の各々に対してポインタを決定することであって、前記ポインタは、前記要求内の情報と、前記第２メモリの第２データ構造と、に基づいて決定されること、
をさらに含む、請求項１〜５の何れか１項に記載の方法。
【請求項７】
セットされた要求を前記第２メモリに移動させることと、
前記第２タイプの前記１つ以上のプロセッサが、前記セットされた要求に基づいて、前記第２メモリの第２データ構造を変更することと、
をさらに含む、請求項６に記載の方法。
【請求項８】
前記第１タイプの前記１つ以上のプロセッサがセットされた要求を受け取り、前記第１タイプの前記１つ以上のプロセッサが前記セットされた要求に基づいて前記第１データ構造を変更すること、
をさらに含む、請求項１〜７の何れか１項に記載の方法。
【請求項９】
転送することは、
前記１つ以上の要求が閾値数に達した場合に、前記１つ以上の要求を前記第１メモリから前記第２メモリへ転送すること、
をさらに含む、請求項１〜８の何れか１項に記載の方法。
【請求項１０】
前記データは前記ポインタよりもはるかに大きい、請求項１〜９の何れか１項に記載の方法。
【請求項１１】
要求に応答する方法であって、
コールバック関数を含む１つ以上の要求を受け取ることであって、前記１つ以上の要求は、１つ以上のＣＰＵコアに関連付けられた第１メモリにおいて受け取られることと、
前記１つ以上の要求を、１つ以上のＧＰＵコアに関連付けられた第２メモリに移動させることと、
前記１つ以上の要求の数が少なくとも閾値数となった場合に、１つ以上の持続的なＧＰＵスレッドが、前記１つ以上の要求の各々に対する結果を決定するために、前記１つ以上の要求を処理することと、
前記結果を前記第１メモリに移動させることと、
前記１つ以上のＣＰＵコアが、対応する結果を用いて、前記コールバック関数の各々を実行することと、
を含む、方法。
【請求項１２】
前記１つ以上の要求を前記第２メモリに移動させることは、
前記１つ以上の要求を、前記第２メモリのインバウンドキューに移動させること、
をさらに含む、請求項１１に記載の方法。
【請求項１３】
前記１つ以上の要求の前記数が少なくとも閾値数である場合に、
前記１つ以上のＧＰＵスレッドのうち１つのＧＰＵスレッドが、前記１つ以上の要求の前記数が少なくとも閾値数となるときを決定するために、第２メモリの前記インバウンドキューをチェックすること、
をさらに含み、
前記ＧＰＵスレッドは持続的なＧＰＵスレッドである、
請求項１１または１２に記載の方法。
【請求項１４】
要求に応答するためのシステムであって、
コールバック関数を含む１つ以上の要求を受け取るように構成された第１タイプの１つ以上のプロセッサであって、前記１つ以上の要求は、前記第１タイプの前記１つ以上のプロセッサに関連付けられた第１メモリにおいて受け取られ、前記第１タイプの前記１つ以上のプロセッサは、前記１つ以上の要求を第２メモリに移動させるように構成されており、前記第２メモリは、第２タイプの１つ以上のプロセッサに関連付けられており、対応する結果を用いて前記１つ以上のコールバック関数の各々を実行するように構成された１つ以上のプロセッサを含み、
前記第２タイプの前記１つ以上のプロセッサは、前記１つ以上の要求の数が少なくとも閾値数である場合に、前記１つ以上の要求を処理するための１つ以上のスレッドを実行して、前記１つ以上の要求の各々に対する前記結果を決定することと、前記決定された結果を前記第１メモリに移動させることと、を行うように構成されている、
システム。
【請求項１５】
前記第１タイプの前記１つ以上のプロセッサは、１つ以上のＣＰＵコアを含み、前記第２タイプの前記１つ以上のプロセッサは、１つ以上のＧＰＵコアを含み、前記１つ以上のスレッドは、１つ以上のＧＰＵスレッドである、請求項１４に記載のシステム。
【請求項１６】
前記１つ以上のＧＰＵスレッドは、ＧＰＵカーネルに基づく持続的なスレッドである、請求項１５に記載のシステム。
【請求項１７】
前記第２タイプの前記１つ以上のプロセッサの前記第２メモリに対するアクセス時間は、前記第１タイプの前記１つ以上のプロセッサよりもはるかに短い、請求項１４〜１６の何れか１項に記載のシステム。
【請求項１８】
前記第１タイプの前記１つ以上のプロセッサは、前記１つ以上の要求を、前記第２メモリのインバウンドキューに移動させるようにさらに構成されている、請求項１４〜１７の何れか１項に記載のシステム。
【請求項１９】
前記第２タイプの前記１つ以上のプロセッサは、前記１つ以上の要求の前記数が少なくとも閾値数となるときを決定するために、前記第２のメモリのインバウンドキューをチェックするための前記１つ以上のスレッドのうち１つのスレッドを実行するようにさらに構成されており、前記スレッドは持続的なスレッドである、請求項１８に記載のシステム。
【請求項２０】
前記第２タイプの前記１つ以上のプロセッサは、前記決定された結果を前記第１メモリのアウトバウンドキューに移動させるようにさらに構成されている、請求項１４〜１９の何れか１項に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（関連出願の相互参照）
本願は、２０１２年６月８日に出願された米国仮特許出願第６１／６５７，４０４号の優先権を主張するものであり、当該仮出願の内容全体を参照することによって完全に説明されているかのように本願に援用される。
【０００２】
本発明の実施形態は、アプリケーションに低レイテンシを提供することに関し、さらに詳細には、異種（ｈｅｔｅｒｏｇｅｎｅｏｕｓ）プロセッサを使用して低レイテンシを提供することに関する。
【背景技術】
【０００３】
いくつかのコンピュータシステムは、２つ以上のプロセッサタイプを含む。例えば、いくつかのコンピュータシステムは、１つ以上の中央処理装置（ＣＰＵ）（すなわち、第１プロセッサタイプ）と、多数の周辺プロセッサ（すなわち、異なるタイプまたは第２タイプのプロセッサ）と、を含む。周辺プロセッサは、多くの場合グラフィカルプロセッサユニット（ＧＰＵ）であるが、他のプロセッサタイプも当業者において周知である。ＣＰＵとは別の共有メモリを有し得る多数のＧＰＵが存在する。いくつかのアプリケーションは、ＣＰＵのみを使用するか、より非効率的な方法でＧＰＵを使用する。
【０００４】
また、いくつかのアプリケーションは、アプリケーションからの要求に応答するために、コンピュータシステムからの低レイテンシすなわち遅延を必要とする。多くの場合には、アプリケーションからの要求に対する応答の遅延が過剰に長くなることを確実に防ぐために、追加的なハードウェアの購入が必要となる。
【発明の概要】
【発明が解決しようとする課題】
【０００５】
したがって、当該技術分野では、異種処理を使用するアプリケーションに対して低レイテンシを提供するシステムおよび方法に対する必要性が存在する。
【課題を解決するための手段】
【０００６】
要求に応答するための方法、装置およびコンピュータ可読媒体が開示される。要求に応答するための方法は、１つ以上の中央処理装置（ＣＰＵ）が１つ以上の要求を受け取ることを含み得る。この方法では、１つ以上の要求を、１つ以上のＣＰＵに関連付けられた第１メモリから、１つ以上のグラフィカル処理装置（ＧＰＵ）に関連付けられた第２メモリへと移動することを含んでもよい。この方法では、１つ以上のＧＰＵが、１つ以上の要求ごとにポインタを決定することを含んでもよい。ポインタは、要求における情報に基づいて決定されてもよい。この方法では、決定されたポインタを、第１メモリに移動することを含んでもよい。この方法では、決定されたポインタごとに、決定されたポインタによりポイントされたデータを取得することを含んでもよい。このデータは、第１メモリの第１データ構造から取得されてもよい。この方法では、１つ以上のＣＰＵが、対応する取得されたデータを送ることによって、受け取った要求に応答することを含んでもよい。
【０００７】
他の実施形態では、要求に応答する方法は、コールバック関数を含む１つ以上の要求を受け取ることを含んでもよい。１つ以上の要求は、１つ以上のＣＰＵに関連付けられた第１メモリにおいて受け取られてもよい。この方法では、１つ以上の要求を、第２メモリに移動することを含んでもよい。第２メモリは、１つ以上のＧＰＵに関連付けられてもよい。この方法では、１つ以上の要求の個数が少なくとも閾値数である場合には、１つ以上のＧＰＵスレッドが、１つ以上の要求ごとの結果を決定するために、１つ以上の要求を処理することを含んでもよい。この方法では、結果を第１メモリに移動することを含んでもよい。この方法では、１つ以上のＣＰＵが、対応する結果を用いて、１つ以上のコールバック関数の各々を実行することを含んでもよい。
【０００８】
要求に応答するためのシステムが開示される。このシステムは、コールバック関数を含む１つ以上の要求を受け取るよう構成された１つ以上のＣＰＵを含んでもよい。１つ以上の要求は、１つ以上のＣＰＵに関連付けられた第１メモリにおいて受け取られてもよい。１つ以上のＣＰＵは、１つ以上の要求を、第２メモリに移動するよう構成されてもよい。第２メモリは、１つ以上のＧＰＵに関連付けられてもよい。１つ以上のＣＰＵは、対応する結果を用いて、１つ以上のコールバック関数の各々を実行するように構成されてもよい。１つ以上のＧＰＵは、１つ以上の要求の個数が少なくとも閾値数である場合に、１つ以上の要求ごとの結果を決定するために、１つ以上の要求を処理するための１つ以上のＧＰＵスレッドを実行するように構成されてもよい。１つ以上のＧＰＵは、決定された結果を、第１メモリに移動するように構成されてもよい。
【０００９】
本発明の実施形態は、以下の添付の図面の図において限定としてではなく例示として図示される。なお、これらの図面では、同様の参照番号は同様の要素を示す。
【図面の簡単な説明】
【００１０】
【図１】１つ以上の開示された実施形態が実装され得る装置例のブロック図である。
【図２】いくつかの開示された実施形態に係る異種プロセッサを使用する低レイテンシアプリケーションのためのシステムを示す図である。
【図３】要求に応答するために低レイテンシを必要とし得るメモリキャッシュアプリケーションの動作を示す概略図である。
【図４】要求に応答するために低レイテンシを必要とし得るメモリキャッシュアプリケーションの動作を示す概略図である。
【図５】いくつかの開示された実施形態に係るメモリキャッシュアプリケーションに対する異種プロセッサを使用する低レイテンシアプリケーションのためのシステムの動作を示す図である。
【図６】いくつかの開示された実施形態に係るメモリキャッシュアプリケーションに対する異種プロセッサを使用する低レイテンシアプリケーションのためのシステムの動作を示す図である。
【図７】いくつかの開示された実施形態に係る異種プロセッサを使用する低レイテンシアプリケーションのためのシステムの実施形態を示す概略図である。
【図８】いくつかの開示された実施形態に係るＧＰＵが実行し得るカーネルを示す図である。
【図９】いくつかの開示された実施形態に係る異種プロセッサに対する低レイテンシアプリケーションのためのシステムをコールするためのデータ構造およびコールを示す図である。
【図１０】いくつかの開示された実施形態に係るメモリキャッシュアプリケーションのための異種プロセッサを使用して低レイテンシを提供するためのシステムおよび方法の実証分析の結果を示す表である。
【発明を実施するための形態】
【００１１】
図１は、１つ以上の開示された実施形態が実装され得る装置例１００のブロック図である。装置１００は、例えば、コンピュータ、ゲーム装置、ハンドヘルド型デバイス、セットトップボックス、テレビ、モバイルフォンまたはタブレットコンピュータを含んでもよい。装置１００は、プロセッサ１０２と、メモリ１０４と、記憶装置１０６と、１つ以上の入力装置１０８と、１つ以上の出力装置１１０と、を含む。装置１００は、所望により、入力ドライバ１１２と、出力ドライバ１１４と、を含んでもよい。装置１００が、図１に示されていない追加的な構成要素を含んでもよいことを理解すべきである。
【００１２】
プロセッサ１０２は、１つ以上のコア１３２を含み得る第１タイプを有する１つ以上の第１プロセッサ１２８（例えば、中央処理装置（ＣＰＵ）など）と、１つ以上の計算ユニット（ＣＵ）１３４またはＧＰＵコアを含み得る１つ以上の第２タイプのプロセッサ１３０（例えば、グラフィックス処理ユニット（ＧＰＵ）など）と、を含んでもよい。ＣＰＵ１２８およびＧＰＵ１３０は、同一ダイ上に配置されてもよいし、複数のダイ上に配置されてもよい。ＣＵ１３４は、処理制御機能（図示せず）が１グループのＣＵ１３４を制御する状態で、いくつかのグループに組織化され得る。処理制御機能は、１グループのＣＵ１３４が単一の単一命令多重データ（ＳＩＭＤ）処理ユニット（図示せず）として動作するように、１グループのＣＵ１３４を制御し得る。ＣＵ１３４は、１つ以上の他のＣＵ１３４によって共有され得るメモリ１３８を含み得る。例えば、処理制御機能が１３２個のＣＵ１３４を制御し、１３２個のＣＵ１３４の全てが、処理制御機能によって同一のメモリ１３８を共有し得る。
【００１３】
ＧＰＵ１３０およびＣＰＵ１２８に加えて、デジタル信号プロセッサ（ＤＳＰ）およびアプリケーションプロセッサなどの他のタイプのプロセッサまたは計算要素も存在し得る。ＣＰＵ１２８は、ＣＰＵ１２８のコアによって共有されるメモリ１３６を含んでもよい。いくつかの開示された実施形態では、メモリ１３６はＬ２キャッシュである。ＧＰＵ１３０は、１つ以上のＧＰＵ１３０のＣＵ１３４によって共有されるメモリ１３８を含んでもよい。データは、メモリ１３６およびメモリ１３８の間で１３７を介して転送され得る。ＧＰＵ１３０およびＣＰＵ１２８は、他のメモリ（例えば、各コア１３２のメモリと、図示されないＣＵ１３４の処理ユニットごとのメモリと、など）を含んでもよい。メモリ１３６，１３８，１０４は、コヒーレントキャッシュシステム（図示せず）の一部であってよい。いくつかの実施形態では、メモリ１３６，１３８，１０４のうち１つ以上は、コヒーレントメモリではない場合もある。メモリ１０４は、プロセッサ１０２と同一ダイ上に配置されてもよいし、プロセッサ１０２とは別個に配置されてもよい。メモリ１０４は、揮発性メモリまたは不揮発性メモリ（例えば、ランダムアクセスメモリ（ＲＡＭ）、ダイナミックＲＡＭ（ＤＲＡＭ）またはキャッシュ）を含んでもよい。
【００１４】
記憶装置１０６は、固定式記憶装置または着脱式記憶装置（例えば、ハードディスクドライブ、ソリッドステートドライブ、光ディスクまたはフラッシュドライブ）を含んでもよい。入力装置１０８は、キーボード、キーパッド、タッチスクリーン、タッチパッド、検出器、マイクロフォン、加速度計、ジャイロスコープ、生体認証スキャナ、ネットワーク接続部（例えば、ワイヤレスＩＥＥＥ８０２信号を送信および／または受信するためのワイヤレスローカルエリアネットワークカード）を含んでもよい。出力装置１１０は、ディスプレイ、スピーカ、プリンタ、触覚フィードバックデバイス、１つ以上の光、アンテナ、ネットワーク接続部（例えば、ワイヤレスＩＥＥＥ８０２信号を送信および／または受信するためのワイヤレスローカルエリアネットワークカード）を含んでもよい。
【００１５】
入力ドライバ１１２は、プロセッサ１０２および入力装置１０８と通信し、プロセッサ１０２が入力装置１０８から入力を受け取ることを許可する。出力ドライバ１１４は、プロセッサ１０２および出力装置１１０と通信し、プロセッサ１０２が出力装置１１０に出力を送ることを許可する。入力ドライバ１１２および出力ドライバ１１４が省略可能な構成要素であることと、入力ドライバ１１２および出力ドライバ１１４が存在しない場合でも装置１００が同一の方法で動作することと、に留意すべきである。
【００１６】
図２は、異種プロセッサを使用する低レイテンシアプリケーションのためのシステムを示す図である。図２において、ＣＰＵ１２８と、ＧＰＵ１３０と、ＣＵ１３４と、メモリ１３８と、要求２０２と、応答２０４と、セット２２０と、ネットワークスレッド２０６と、ホストスレッド２０８と、アウトバウンドキュー２１０と、ＣＰＵデータ構造２１６と、ＧＰＵスレッド２１２と、インバウンドキュー２１４と、ＧＰＵデータ構造２１８と、が示されている。要求２０２は、ネットワークスレッド２０６により受け取られ、ホストスレッド２０８に渡される。ホストスレッド２０８は、要求２０２をインバウンドキュー２１４に置く。ＧＰＵスレッド２１２は、ＧＰＵデータ構造２１８を使用して、インバウンドキュー２１４において要求２０２を処理し、応答２０４をアウトバウンドキュー２１０に送る。ホストスレッド２０８は、アウトバウンドキュー２１０において、ＣＰＵデータ構造２１６を使用して応答２０４を処理し得る。次に、応答２０４は、送信のためにネットワークスレッド２０６に送られ得る。ネットワークスレッド２０６は、セット２２０を受け取り得る。このセット２２０は、ＣＰＵデータ構造２１６およびＧＰＵデータ構造２１８を作成または変更するために用いられ得る。
【００１７】
要求２０２は、アプリケーション（図示せず）から受け取った情報または処理に対する要求２０２であってよい。要求２０２は、コンピュータネットワーク（図示せず）上で受け取られてもよい。要求２０２の例としては、要求２０２内のキーに対応するデータ２２２に対する要求が挙げられ得る。要求２０２は、コールバック関数を含んでもよい（図９参照）。
【００１８】
応答２０４は、要求２０２に対する応答２０４であってよい。応答２０４の例としては、要求２０２内のキー（図３参照）に対応するデータ２２２が挙げられ得る。セット２２０は、ＣＰＵデータ構造２１６を変更または制作するための命令であってよい。セット２２０の例としては、ＣＰＵデータ構造２１６に挿入される新規データ２２２が挙げられ得る。
【００１９】
ネットワークスレッド２０６は、要求２０２およびセット２２０を入力装置１０８から取得し、応答２０４を入力装置１０８に送る。例えば、ネットワークスレッド２０６は、要求２０２およびセット２２０用の１つ以上の通信制御プロトコル（ＴＣＰ）ポートを監視するためにソケットを使用し、ＴＣＰを使用して１つ以上のポート上で応答２０４を送る、マルチタスキングオペレーティングシステムにおけるスレッドであり得る。ネットワークスレッド２０６は、要求２０２およびセット２２０をホストスレッド２０８に送るまたは渡すことと、応答２０４をホストスレッド２０８から受け取ることと、を行うように構成されてもよい。ＣＰＵ１２８は、ネットワークスレッド２０６を実行し得る。いくつかの実施形態では、ネットワークスレッド２０６は、メモリ１３６（図１参照）に存在してもよいし、メモリ１０４に存在してもよいし、コア１３２に関連付けられた他のメモリ（図示せず）に存在してもよい。いくつかの実施形態では、ネットワークスレッド２０６は、アプリケーションスレッドであってよい。
【００２０】
ホストスレッド２０８は、要求２０２を受け取り、要求２０２を、ＧＰＵ１３０が処理するためにインバウンドキュー２１４に置き得る。ホストスレッド２０８は、アウトバウンドキュー２１０から応答２０４を受け取るように構成されてもよい。いくつかの開示された実施形態では、ホストスレッド２０８は、アウトバウンドキュー２１０を監視し、１つ以上の応答２０４が利用可能となったときに応答２０４を取り、ＣＰＵデータ構造２１６にしたがってさらなる処理を応答２０４に実行し得る。例えば、ホストスレッド２０８は、インバウンドキュー２１４から応答２０４を取得し、応答２０４内のポインタ２２４を用いてＣＰＵデータ構造２１６からデータ２２２を取得し、データ２２２が含まれるように応答２０４を変更してもよい。次に、ホストスレッド２０８は、応答２０４をネットワークスレッド２０６に送ってもよい。いくつかの実施形態では、応答２０４の数が閾値数または周波数未満である場合には、ホストスレッド２０８は、応答２０４を満足し得る。いくつかの実施形態では、２つ以上のホストスレッド２０８が存在し得る。いくつかの実施形態では、１つのアウトバウンドキュー２１０に１つのホストスレッド２０８が存在し得る。いくつかの実施形態では、ホストスレッド２０８は、ＣＰＵ１２８に関連付けられたメモリに存在し得る。いくつかの実施形態では、ネットワークスレッド２０６は、メモリ１３６に存在してもよいし、メモリ１０４に存在してもよいし、コア１３２に関連付けられた他のメモリ（図示せず）に存在してもよい。
【００２１】
アウトバウンドキュー２１０は、ＧＰＵスレッド２１２によって処理された要求２０２が置かれるキューであってよい。いくつかの実施形態では、アウトバウンドキュー２１０の数と、ホストスレッド２０８の数とは比例し得る。いくつかの実施形態では、１つのホストスレッド２０８に１つのアウトバウンドキュー２１０が存在し得る。いくつかの実施形態では、アウトバウンドキュー２１０は、メモリ１３６に存在してもよいし、ＣＰＵ１２８によってアクセス可能な他のメモリに存在してもよい。
【００２２】
ＧＰＵスレッド２１２は、要求２０２を処理するように構成されてもよい。いくつかの実施形態では、ＧＰＵ１３０は、ｍ個のグループ（各グループは、ｎ個のＧＰＵスレッド２１２からなる）へと組織化され得る。１グループのＧＰＵスレッド２１２は、それぞれ別個のＣＵ１３４上で実行され得る。例えば、ｎが６４、ｍが２４である場合には、６４×２４（すなわち１５３６）のＧＰＵスレッド２１２が存在することとなる。ｎ個のＧＰＵスレッド２１２からなるグループのそれぞれに対して１つのインバウンドキュー２１４が存在し得る。例えば、インバウンドキュー２１４．１は、ＧＰＵスレッド２１２．１〜ＧＰＵスレッド２１２．ｎによってサービスされ得る。ｎ個のＧＰＵスレッド２１２からなるグループは、単一命令多重データ（ＳＩＭＤ）ＣＵ１３４であってよい。ｎ個のＧＰＵスレッド２１２からなるグループは、同時に１グループの要求２０２を処理し得る。例えば、ｎ個のＧＰＵスレッド２１２からなるグループ（例えばＧＰＵスレッド２１２．１〜ＧＰＵスレッド２１２．ｎ（ただしｎ＝６４））は、インバウンドキュー２１４．１を監視し得る。６４個の要求２０２がインバウンドキュー２１４．１上で利用可能である場合には、ＧＰＵスレッド２１２．１〜ＧＰＵスレッド２１２．６４からなるグループは、同時に６４個の要求２０２を処理し得る。いくつかの実施形態では、ｎ個のＧＰＵスレッド２１２からなるグループのうち１つのＧＰＵスレッド２１２は、ｎ個のＧＰＵスレッド２１２のグループのインバウンドキュー２１４を監視し得る。ＧＰＵスレッド２１２は、同一カーネルまたはプログラムを実行してもよいし、同一の方法で要求２０２を処理するように構成されてもよい。ＧＰＵスレッド２１２は、応答２０４をアウトバウンドキュー２１０に送り得る。
【００２３】
インバウンドキュー２１４は、要求２０２が置かれた１つ以上のキューであってよい。インバウンドキュー２１４は、メモリ１３８に存在してもよいし、他のメモリに存在してもよい。ＧＰＵデータ構造２１８は、ＧＰＵ１３０に関連付けられたメモリに存在するデータ構造２１８であってよい。ＧＰＵデータ構造２１８は、１つ以上のセット２２０に基づいて構築されてもよいし、追加情報に基づいて構築されてもよい。ＧＰＵデータ構造２１８は、ポインタ２２４を含んでもよく、このポインタ２２４は、データ２２２をＣＰＵデータ構造２１６から取得するために使用され得るポインタ２２４であってよい。ＧＰＵデータ構造２１８は、要求２０２を処理するためにＧＰＵ１３０によって使用され得る。いくつかの実施形態では、ＧＰＵデータ構造２１８は、メモリ１３８に存在してもよいし、メモリ１０４に存在してもよいし、ＧＰＵ１３０に関連付けられた他のメモリ（図示せず）に存在してもよい。
【００２４】
ＣＰＵデータ構造２１６は、ＣＰＵ１２８に関連付けられたメモリに存在するデータ構造２１６であってよい。ＣＰＵデータ構造２１６は、１つ以上のセット２２０に基づいて構築されてもよいし、追加情報に基づいて構築されてもよい。ＣＰＵデータ構造２１６は、ポインタ２２４によってポイントされたデータ２２２であり得るデータ２２２を含んでもよい。ＣＰＵデータ構造２１６は、要求２０２を処理するためにＣＰＵ１２８によって使用され得る。いくつかの実施形態では、ＣＰＵデータ構造２１６は、メモリ１３６に存在してもよいし、メモリ１０４（図１参照）に存在してもよいし、ＣＰＵ１２８に関連付けられた他のメモリ（図示せず）に存在してもよい。
【００２５】
図３および図４は、要求に応答するために低レイテンシを必要とし得るメモリキャッシュアプリケーションの動作を概略的に示す図である。図３および図４において、クライアント３０２と、セット２２０と、確認３３０と、サーバ３９０と、ハッシュテーブル３２６と、要求２０２と、応答２０４とが示されている。クライアント３０２は、サーバ３９０を選択し、次に、選択されたサーバ３９０．１にセット２２０を送る。セット２２０は、値３３８．１５と、キー３２２．１５とを関連付けるコマンドであってよい。メモリキャッシュアプリケーション（図示せず）は、セット２２０を受け取り、キー３２２．１５に関連付けられた値３３８．１５を、ハッシュテーブル３２６であり得るデータ構造に格納し、確認３３０をクライアント３０２に送ってもよい。次に、クライアント３０２は、キー３２２．１５を含む要求２０２（図４参照）を送り、サーバ３９０．１は、ハッシュテーブル３２６を検索することによって、キー３２２．１５に関連付けられた値３３８．１５を含む応答２０４を送る。
【００２６】
クライアント３０２は、ＬＡＮまたはインターネットなどの通信ネットワーク（図示せず）を介して、サーバ３９０．１と通信し得る。いくつかの実施形態では、クライアント３０２は、サーバ３９０．１上に存在し得る。セット２２０は、キー３２２および値３３８のペア３２４を含むコマンドであってよい。キー３２２および値３３８は、データであってよい。キー３２２は、値３３８を特定する一意的な方法であってよい。確認３３０は、セット２２０が正常であったかどうかを示してもよい。ハッシュテーブル３２６は、指数３２８と、キー３２２および値３３８のペア３２４と、を関連付けるテーブルであってよい。
【００２７】
クライアント３０２は、サーバ３９０を選択し得る。いくつかの実施形態では、クライアント３０２は、キー３２２に基づいてサーバ３９０を選択する。例えば、クライアント３０２は、（例えば、キー３２２の法（ｍｏｄｕｌｕｓ）などの）キー３２２のハッシュ値を決定することに基づいて、サーバ３９０を決定し得る。例えば、サーバ３９０は、例えば図３に示すように３つのサーバ３９０が存在する場合には、（キー３２２  ｍｏｄ  ３）＋１の値を決定することに基づいて、選択され得る。
【００２８】
次に、クライアント３０２は、セット２２０をサーバ３９０．１に送り得る。メモリキャッシュアプリケーション（図示せず）は、キー３２２の指数３２８を決定し得る。なお、いくつかの実施形態では、この指数３２８の決定は、ハッシュ値の決定と呼ばれる。例えば、ハッシュテーブルが９項目である場合には、メモリキャッシュアプリケーションは、指数が（キー３２２  ｍｏｄ  ９）＋１であると決定してもよい。したがって、３０の値を有するキー３２２は、（３０  ｍｏｄ  ９）＋１＝４のハッシュ値または指数を有することとなる。次に、メモリキャッシュアプリケーションは、キー３２２．１５および値３３８．１５のペア３２４．１５を、ハッシュテーブル３２６に格納することとなる。指数３２８の各々は、一連のペア３２４を有してもよく、この一連のペア３２４は、ペア３２４を求めて検索するためにトラバース（ｔｒａｖｅｒｓｅ）される必要がある。
【００２９】
このようにして、クライアント３０２は、キー３２２および値３３８のペア３２４を格納するハッシュテーブル３２６を構築することを、サーバ３９０．１に行わせ得る。クライアント３０２は、上述したように、キー３２２に基づいてサーバ３９０を選択することによって、キー３２２に関連付けられた値３３８を取得し、次いで、キー３２２．１５を有するサーバ３９０．１に対して要求２０２を送り得る（図４参照）。次に、サーバ３９０．１は、キー３２２．１５を取得し、指数３２８．４を決定するためにキー３２２．１５のハッシュ値を計算し、次いで、３２２．１５を有するペア３２４．１５を求めて指数３２８．４に関連付けられたペア３２４を検索する。キー３２２．１５が発見されると、メモリキャッシュアプリケーションは、値３３８．１５を取得し、値３３８．１５を有する応答２０４をクライアント３０２に送る。
【００３０】
したがって、クライアント３０２は、キー３２２および値３３８のペア３２４をハッシュテーブル３２６にセット２２０し、キー３２２を使用してハッシュテーブル３２６から値３３８を要求２０２し得る。いくつかの実施形態では、ハッシュテーブル３２６が大規模となってもよく、ハッシュテーブル３２６は、要求２０２が迅速となり得るように、１０４，１３６，１３８などのランダムアクセスメモリ（図１参照）に格納され得る。いくつかの実施形態では、クライアント３０２が値３３８を要求２０２する時点と、値３３８が応答２０４において実際に戻される時点との間に低レイテンシが存在するように、セット２２０および／または要求２０２コマンドが迅速に行われることが重要となり得る。例えば、ハッシュテーブル３２６は、経路設定のためにネットワークアドレスを格納するのに使用されてもよく、係る使用は、非常に迅速な応答２０４を要求する。
【００３１】
図５および図６は、いくつかの開示される実施形態に係るメモリキャッシュアプリケーションに対する異種プロセッサを使用する低レイテンシアプリケーションのためのシステムの動作を図示する。図５および図６において、クライアント３０２と、セット２２０と、確認３３０と、サーバ３９０．１と、ＣＰＵデータ構造２１６と、ＧＰＵデータ構造２１８と、要求２０２（図６参照）と、応答２０４（図６参照）とが示されている。ＣＰＵデータ構造２１６は、アドレス５７０および値３３８を有するデータ構造であってよい。値３３８は、アドレス５７０を使用してセットまたは取得され得る。ＧＰＵデータ構造２１８は、指数５２８によってアクセスされる、キー３２２およびアドレス５７０のペア５２４を含む。いくつかの実施形態では、ＧＰＵデータ構造２１８は、ハッシュテーブル５２７であってよい。
【００３２】
クライアント３０２の観点から見たメモリキャッシュアプリケーションの動作は、図３および図４との関連における説明と同一である。図２および図５を参照すると、動作中、クライアント３０２は、セット２２０をサーバ３９０．１に送る。サーバ３９０．１のネットワークスレッド２０６は、セット２２０をホストスレッド２０８に送る。ホストスレッド２０８は、値３３８．１５を、ＣＰＵデータ構造２１６のアドレス５７０．７に設定する。次に、ホストスレッド２０８は、キー３２２．１５およびアドレス５７０．７のペア５２４．１５を、インバウンドキュー２１４に置く。いくつかの実施形態では、ホストスレッド２０８は、ペア５２４．１５をどのインバウンドキュー２１４に置くかを、インバウンドキュー２１４の内容に基づいて決定し得る。次に、ＧＰＵスレッド２１２は、キー３２２．１５に対する指数５２８を決定し、キー３２２．１５およびアドレス５７０．７のペア５２４．１５を、指数５２８（図５の例では指数５２８．４）におけるハッシュテーブル５２７に置く。いくつかの実施形態では、ペア５２４は、指数５２８に関連付けられた連結リストとして、ハッシュテーブル５２７に格納され得る。セット２２０が正常であった旨の確認３３０がクライアント３０２に送られ得る。
【００３３】
図２および図６を参照すると、クライアント３０２は、要求２０２をサーバ３９０．１に送り得る。ネットワークスレッド２０６は、要求２０２を受け取り得る。ネットワークスレッド２０６は、要求２０２をホストスレッド２０８に送り得る。ホストスレッド２０８は、要求２０２をインバウンドキュー２１４に置き得る。ＧＰＵスレッド２１２は、キー３２２に対応する指数５２８を決定することによって、要求２０２を処理し得る。図６に示すように、指数５２８．４は、キー３２２．１５に対応し、ＧＰＵスレッド２１２は、キー３２２．１５およびアドレス５７０．７のペア５２４．１５を検出するためにリストを検索する。次に、ＧＰＵスレッド２１２は、キー３２２．１５およびアドレス５７０．７のペア５２４．１５を、アウトバウンドキュー２１０に移動し得る。次に、ホストスレッド２０８は、ＣＰＵデータ構造２１６から値３３８．１５を取得するためにアドレス５７０．７を使用し得る。次に、ホストスレッド２０８は、値３３８．１５を含む応答２０４がクライアント３０２に送られるべきである旨を、ネットワークスレッド２０６に示し得る。次に、ネットワークスレッド２０６は、値３３８．１５を含む応答２０４を、クライアント３０２に送り得る。
【００３４】
いくつかの開示された実施形態では、ＣＰＵデータ構造２１６は、メモリ１３６に存在し得る。いくつかの開示された実施形態では、ＧＰＵデータ構造２１８は、メモリ１３８に存在し得る。いくつかの開示された実施形態では、値３３８（大量のデータであり得る）がメモリ１３８などのメモリに転送される（係る転送には時間がかかり得る）必要がない、という利点が存在する。
【００３５】
いくつかの開示された実施形態では、ＣＰＵ１２８のコア１３２よりもはるかに多量の要求２０２が存在する場合もある。いくつかの開示された実施形態では、いくつかの要求２０２は、要求２０２の数がＧＰＵ１３０の計算ユニット１３４の数以上となるまで、インバウンドキュー２１４内で待ち行列に入れられ、次いで、１つ以上の要求２０２がＧＰＵ１３０の計算ユニット１３４の各々に割り当てられる。
【００３６】
いくつかの開示された実施形態では、ＣＰＵ１２８およびＧＰＵ１３０は、アトミックリード／ライト命令を使用して通信する。いくつかの開示された実施形態では、ＧＰＵ１３０は、ＣＰＵ１２８によって書き込まれたインバウンドキューポインタを得るために、メモリ位置をポーリングする。いくつかの実施形態では、ＧＰＵ１３０上で実行されるスレッドのうちの１つのスレッドは、インバウンドキュー２１４に対する更新を求めてメモリ位置をポーリングし得る。いくつかの開示された実施形態では、ＧＰＵ１３０は、ポインタを、ＣＰＵ１２８がポーリングするメモリ位置に書き込むことによって、アウトバウンドキュー２１０を更新する。
【００３７】
いくつかの開示された実施形態では、ＧＰＵスレッド２１２は、カーネルがアクティブ状態である限りアクティブ状態に保持される持続的（ｐｅｒｓｉｓｔｅｎｔ）スレッドであり得る。カーネルは、シャットダウンメッセージに応答する無限の外部ループを有し得る。いくつかの開示された実施形態では、ＯｐｅｎＣＬ（登録商標）は、ＧＰＵ１３０の計算ユニット１３４毎に２つの持続的スレッドが存在する状態で使用され得る。計算ユニット１３４毎に２つの持続的スレッドが存在すると、第１スレッドがデータの到着を待機する間に第２スレッドの実行が可能であるという利点がもたらされ得る。
【００３８】
図７は、異種プロセッサを使用する低レイテンシアプリケーションのためのシステムの実施形態を概略的に示す図である。システム７００は、ＣＰＵ１２８と、ホストスレッド７０８と、アウトバウンドキュー２１０と、ＧＰＵ１３０と、ＧＰＵスレッド２１２と、インバウンドキュー２１４と、を含む。アプリケーションスレッド７０６が要求２０２を送ると、システム７００は、要求２０２を処理し、応答２０４をアプリケーションスレッド７０６に送り得る。
【００３９】
アプリケーションスレッド７０６は、ＣＰＵ１２８上で、または他のＣＰＵ１２８上で実行されるアプリケーションであってよい。要求２０２は、タスクを処理するための要求であってよい。例えば、要求２０２は、図３、図４、図５および図６においてメモリキャッシュアプリケーションとの関連で開示されたセット２２０および要求２０２であってよい。応答２０４は、要求２０２に対する応答であってよい。例えば、応答２０４は、メモリキャッシュアプリケーションに関連して開示した応答２０４であってよい。
【００４０】
ホストスレッド７０８は、要求２０２を受け取り、応答２０４を送るスレッドであってよい。いくつかの実施形態では、アプリケーションスレッド７０６は、暗号作成アプリケーション、ネットワークアプリケーションおよび組み込みアプリケーションであってよい。
【００４１】
図８は、いくつかの開示された実施形態に係るＧＰＵが実行し得るカーネルを示す図である。ＧＰＵスレッド２１２（図２参照）は、一般アプリケーションがＧＰＵスレッド２１２によって実行されることを可能にするｇｐｕＧｅｎｅｒｉｃＡｐｐｌｉｃａｔｉｏｎカーネル８００を実行し得る。カーネル８００は、８０４から８１６までの無限ｄｏループのフロー制御を有する。当該無限ｄｏループは、ＯｐｅｎＣＬ（登録商標）におけるＥＯＳなどのブレーク信号によって打ち切られ得る。カーネル８００は、８０５において＿ｉｎ＿ｃｏｎｔｒｏｌ＿ｑｕｅｕｅ（インバウンドキュー２１４であり得る）を読み出し、ｒｅａｄ＿ｐｔｒを、＿ｉｎ＿ｃｏｎｔｒｏｌ＿ｑｕｅｕｅにおける第１要求２０２にセットする。次に、カーネル８００は、８０６において、＿ｉｎ＿ｃｏｎｔｒｏｌ＿ｑｕｅｕｅにおいて要求が存在する間、ｗｈｉｌｅループでループする。カーネル８００は、ｃｕｒｒ＿ｐｔｒによりポイントされた要求２０２にしたがって、８０８においてアプリケーションをコールする。カーネル８００は、８１０において、応答を、アウトバウンドキュー２１０であり得る＿ｏｕｔ＿ｃｏｎｔｒｏｌ＿ｑｕｅｕｅに置く。カーネル８００は、８１２において、ｃｕｒｒ＿ｐｔｒ＋＋をインクリメントする。次に、カーネル８００は、ｃｕｒｒ＿ｐｔｒがサービスされる必要があるｉｎ＿ｃｏｎｔｒｏｌ＿ｑｕｅｕｅにおける要求２０２をポイントする場合には、８０６にループバックする。ｃｕｒｒ＿ｐｔｒが要求２０２をポイントしない場合には、カーネル８００は、８１４へと継続し、ｐｒｏｔｏｃｏｌ＿ｃｏｎｔｒｏｌを更新する。次に、カーネル８００は、８１６において、ブレーク信号ＥＯＳを８１６で受け取ったかどうかをチェックする。ブレーク信号ＥＯＳを受け取った場合には、カーネル８００は終了する。ブレーク信号を受け取らなかった場合には、カーネル８００は、８０４にループバックする。カーネル８００は、一度コールされると、カーネル８００が多数の要求２０２に応答するために持続的に保持されるという利点を有する。
【００４２】
図９は、いくつかの開示された実施形態に係る異種プロセッサに対する低レイテンシアプリケーションのためのシステムをコールするためのデータ構造およびコールを示す図である。ＬＯＬＡＬＹ＿ＲＥＱと名付けられた構造９０２は、アプリケーションｉｄ９０３およびコールバック関数９０４でポピュレート（ｐｏｐｕｌａｔｅ）され得る。次に、ｌｏｌａｌｙＳｅｎｄＲｅｑｕｅｓｔ９０６は、要求２０２をシステム７００に実行するために、使用され得る。
【００４３】
図１０は、メモリキャッシュアプリケーションのために異種プロセッサを使用して低レイテンシを提供するためのシステムおよび方法の実証分析の結果の表を示す図である。表１０００は、要求サイズ１００２と、２セットのデータ（ＡＭＤ（登録商標）製の製品ＡＰＵ  Ｂｒａｚｏｓ（商標）、ＨＤ６３１／４３０  １００４についての１セットと、ＡＭＤ（登録商標）製の製品ＡＰ  Ｔｒｉｎｉｔｙ（商標）、ＨＤ７６６０／６００についての１セット）と、を含む。例えば、２０４８個の要求１０２０の場合には、ＡＰＵ  Ｂｒａｚｏｓ（商標）は、１９７μ秒のレイテンシ１０１０と、０．１９のスループットＭＲ１００６と、３．２３の帯域幅ＧＢ１００８と、を有する。２０４８個の要求１０２０の場合には、ＡＰ  Ｔｒｉｎｉｔｙ（商標）は、１４０μ秒のレイテンシ１０１８と、０．３１のスループットＭＲ１０１４と、５．２６の帯域幅ＧＢ１０１６と、を有する。したがって、要求が大量であったとしても、システムは、許容可能なレイテンシを提供する。
【００４４】
多数の変形例が本明細書における開示に基づいて可能であることを理解すべきである。上記の例では、特徴および構成要素が特定の組み合わせで説明されたが、各々の特徴または構成要素は、他の特徴および構成要素を用いることなく単独で使用されてもよいし、他の特徴および構成要素を用いて、または、他の特徴および構成要素を用いることなく、様々な組み合わせで使用されてもよい。
【００４５】
本開示で提供した方法は、汎用コンピュータ、プロセッサまたはプロセッサコアにおいて実装され得る。好適なプロセッサは、例示的に、汎用プロセッサ、グラフィックス処理ユニット（ＧＰＵ）、特殊用途プロセッサ、従来のプロセッサ、デジタル信号プロセッサ（ＤＳＰ）、複数のマイクロプロセッサ、ＤＳＰコアに関連付けられた１つ以上のマイクロプロセッサ、コントローラ、マイクロコントローラ、特定用途向け集積回路（ＡＳＩＣ）、フィールド・プログラマブル・ゲートアレイ（ＦＰＧＡ）回路、任意の他のタイプの集積回路（ＩＣ）および／または状態マシンを含む。係るプロセッサは、処理されたハードウェア記述言語（ＨＤＬ）命令と、ネットリストを含む他の中間データ（例えばコンピュータ可読媒体上に格納されることが可能な命令）と、の結果を用いて製造プロセスを構成することによって、製造され得る。係る処理の結果は、マスクワークであってもよく、係るマスクワークは、次に、開示された実施形態の態様を実装するプロセッサを製造するための半導体製造プロセスにおいて使用される。
【００４６】
本明細書で提供される方法およびフローチャートは、汎用コンピュータまたはプロセッサによる実行のためのコンピュータ可読記憶媒体に組み込まれるコンピュータプログラム、ソフトウェアまたはファームウェアにおいて実装され得る。いくつかの実施形態では、コンピュータ可読記憶媒体は、非一時的（ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ）コンピュータ可読記憶媒体である。コンピュータ可読記憶媒体の例としては、リードオンリーメモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）、レジスタ、キャッシュメモリ、半導体メモリ装置、磁気媒体（例えば、内蔵式ハードディスクおよび着脱式ディスクなど）、磁気・光媒体、光媒体（例えば、ＣＤ−ＲＯＭディスクおよびデジタル汎用ディスク（ＤＶＤ）など）などが挙げられる。
【図１】
2015522878.tif 000003
【図２】
2015522878.tif 000004
【図３】
2015522878.tif 000005
【図４】
2015522878.tif 000006
【図５】
2015522878.tif 000007
【図６】
2015522878.tif 000008
【図７】
2015522878.tif 000009
【図８】
2015522878.tif 000010
【図９】
2015522878.tif 000011
【図１０】
2015522878.tif 000012
【手続補正書】
【提出日】平成27年3月6日(2015.3.6)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
要求に応答するための方法であって、
第１タイプの１つ以上のプロセッサが１つ以上の要求を受け取ることと、
前記１つ以上の要求を、前記第１タイプの前記１つ以上のプロセッサに関連付けられた第１メモリから、第２タイプの１つ以上のプロセッサに関連付けられた第２メモリへと移動させることと、
前記第２タイプの前記１つ以上のプロセッサが、前記１つ以上の要求の各々に対してポインタを決定することであって、前記ポインタは、前記要求内の情報に基づいて決定されることと、
決定されたポインタを、前記第１メモリへ移動させることと、
前記第１タイプの前記１つ以上のプロセッサが、前記決定されたポインタの各々に対して、前記決定されたポインタによってポイントされたデータを取得することであって、前記データは、前記第１メモリの第１データ構造から取得されることと、
前記第１タイプの前記１つ以上のプロセッサが、対応する前記取得されたデータを送ることによって、前記受け取った要求に応答することと、
を含む、方法。
【請求項２】
前記第１タイプの前記１つ以上のプロセッサは、１つ以上のＣＰＵコアを含み、前記第２タイプの前記１つ以上のプロセッサは、１つ以上のＧＰＵコアを含む、請求項１に記載の方法。
【請求項３】
前記１つ以上のＧＰＵコアは、前記１つ以上のＣＰＵコアが前記第２メモリにアクセスするよりも高速に前記第２メモリにアクセス可能であり、
前記１つ以上のＣＰＵコアの第１メモリの第１アクセス時間は、前記１つ以上のＧＰＵコアの前記第１メモリの第２アクセス時間よりも短い、請求項２に記載の方法。
【請求項４】
前記第２タイプの前記１つ以上のプロセッサがポインタを決定することは、
前記第２タイプの前記１つ以上のプロセッサが前記１つ以上の要求の各々に対してポインタを決定することであって、前記ポインタは、前記要求内の情報と、前記第２メモリの第２データ構造と、に基づいて決定されること、
をさらに含む、請求項１に記載の方法。
【請求項５】
セットされた要求を前記第２メモリに移動させることと、
前記第２タイプの前記１つ以上のプロセッサが、前記セットされた要求に基づいて、前記第２メモリの第２データ構造を変更することと、
をさらに含む、請求項４に記載の方法。
【請求項６】
前記第１タイプの前記１つ以上のプロセッサがセットされた要求を受け取り、前記第１タイプの前記１つ以上のプロセッサが前記セットされた要求に基づいて前記第１データ構造を変更すること、
をさらに含む、請求項１に記載の方法。
【請求項７】
前記１つ以上の要求が閾値数に達した場合に、前記１つ以上の要求を前記第１メモリから前記第２メモリへ転送すること、
をさらに含む、請求項１に記載の方法。
【請求項８】
要求に応答する方法であって、
コールバック関数を含む１つ以上の要求を受け取ることであって、前記１つ以上の要求は、１つ以上のＣＰＵコアに関連付けられた第１メモリにおいて受け取られることと、
前記１つ以上の要求を、１つ以上のＧＰＵコアに関連付けられた第２メモリに移動させることと、
前記１つ以上の要求の数が少なくとも閾値数となった場合に、１つ以上の持続的なＧＰＵスレッドが、前記１つ以上の要求の各々に対する結果を決定するために、前記１つ以上の要求を処理することと、
前記結果を前記第１メモリに移動させることと、
前記１つ以上のＣＰＵコアが、対応する結果を用いて、前記コールバック関数の各々を実行することと、
を含む、方法。
【請求項９】
前記１つ以上の要求を前記第２メモリに移動させることは、
前記１つ以上の要求を、前記第２メモリのインバウンドキューに移動させること、
をさらに含む、請求項８に記載の方法。
【請求項１０】
前記１つ以上の要求の前記数が少なくとも閾値数である場合に、
前記１つ以上のＧＰＵスレッドのうち１つのＧＰＵスレッドが、前記１つ以上の要求の前記数が少なくとも閾値数となるときを決定するために、第２メモリの前記インバウンドキューをチェックすること、
をさらに含み、
前記ＧＰＵスレッドは持続的なＧＰＵスレッドである、
請求項８に記載の方法。
【請求項１１】
要求に応答するためのシステムであって、
コールバック関数を含む１つ以上の要求を受け取るように構成された第１タイプの１つ以上のプロセッサであって、
前記１つ以上の要求は、前記第１タイプの前記１つ以上のプロセッサに関連付けられた第１メモリにおいて受け取られ、
前記第１タイプの前記１つ以上のプロセッサは、前記１つ以上の要求を第２メモリに移動させるように構成されており、
前記第２メモリは、第２タイプの１つ以上のプロセッサに関連付けられており、
前記第１タイプの前記１つ以上のプロセッサは、対応する結果を用いて前記１つ以上のコールバック関数の各々を実行するように構成されており、
前記第２タイプの前記１つ以上のプロセッサは、前記１つ以上の要求の数が少なくとも閾値数である場合に、前記１つ以上の要求を処理するための１つ以上のスレッドを実行して、前記１つ以上の要求の各々に対する前記結果を決定することと、前記決定された結果を前記第１メモリに移動させることと、を行うように構成されている、
システム。
【請求項１２】
前記第２タイプの前記１つ以上のプロセッサの前記第２メモリに対するアクセス時間は、前記第１タイプの前記１つ以上のプロセッサよりも短い、請求項１１に記載のシステム。
【請求項１３】
前記第１タイプの前記１つ以上のプロセッサは、前記１つ以上の要求を、前記第２メモリのインバウンドキューに移動させるようにさらに構成されている、請求項１１に記載のシステム。
【請求項１４】
前記第２タイプの前記１つ以上のプロセッサは、前記１つ以上の要求の前記数が少なくとも閾値数となるときを決定するために、前記第２のメモリのインバウンドキューをチェックするための前記１つ以上のスレッドのうち１つのスレッドを実行するようにさらに構成されており、前記スレッドは持続的なスレッドである、請求項１３に記載のシステム。
【請求項１５】
前記第２タイプの前記１つ以上のプロセッサは、前記決定された結果を前記第１メモリのアウトバウンドキューに移動させるようにさらに構成されている、請求項１１に記載のシステム。
【国際調査報告】
2015522878.tif 000013
2015522878.tif 000014
2015522878.tif 000015
2015522878.tif 000016