JP2020173870A - 中央処理装置(cpu)と補助プロセッサとの間の改善した関数コールバック機構 - Google Patents

中央処理装置(cpu)と補助プロセッサとの間の改善した関数コールバック機構 Download PDF

Info

Publication number
JP2020173870A
JP2020173870A JP2020128188A JP2020128188A JP2020173870A JP 2020173870 A JP2020173870 A JP 2020173870A JP 2020128188 A JP2020128188 A JP 2020128188A JP 2020128188 A JP2020128188 A JP 2020128188A JP 2020173870 A JP2020173870 A JP 2020173870A
Authority
JP
Japan
Prior art keywords
cpu
function
data
gpu
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2020128188A
Other languages
English (en)
Other versions
JP7087029B2 (ja
Inventor
ティー. ルイス,ブライアン
T Lewis Brian
ティー. ルイス,ブライアン
バリク,ラジキショア
Barik Rajkishore
シュペイスマン,タチアナ
Shpeisman Tatiana
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of JP2020173870A publication Critical patent/JP2020173870A/ja
Application granted granted Critical
Publication of JP7087029B2 publication Critical patent/JP7087029B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T1/00General purpose image data processing
    • G06T1/20Processor architectures; Processor configuration, e.g. pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/547Remote procedure calls [RPC]; Web services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Advance Control (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

【課題】一般的に、この開示は、第1のプロセッサ(例えば、GPU)と第2のプロセッサ(例えば、CPU)との間で関数コールバック要求を実現するためのシステム、デバイス、方法及びコンピュータ読み取り可能媒体を提供する。【解決手段】システムは、第1及び第2のプロセッサに結合された共有仮想メモリ(SVM)を含んでもよく、SVMは、少なくとも1つの両端キュー(Deque)を記憶するように構成される。第1のプロセッサの実行ユニット(EU)は、Dequeのうち第1のDequeに関連し、コールバック要求をその第1のDequeにプッシュするように構成されてもよい。第2のプロセッサ上で実行する要求ハンドラスレッドは、第1のDequeからコールバック要求の1つをポップし、ポップされたコールバック要求により指定された関数を実行し、関数の完了に応じてEUへの完了信号を生成するように構成されてもよい。【選択図】図1

Description

この開示は、補助プロセッサ(例えば、グラフィック処理装置(GPU:Graphics Processing Unit))から中央処理装置(CPU:Central Processing Unit)への関数コールバック要求に関し、より具体的にはこのようなコールバック要求のための効率的な改善に関する。
異種処理システム(例えば、チップ上にCPU及びGPU(又は補助プロセッサ若しくはアクセラレータ)を組み合わせたプロセッサ)は、ますます一般的になっている。グラフィック処理を実行することに加えて、GPUは、比較的並列インテンシブである計算タスクをCPUからオフロードするために使用されることがある。GPUアーキテクチャは、典型的には並列計算に向いているため、GPUは、CPUに比べて、これらの種類のタスクにより高い性能及びより低いエネルギー消費を提供することができる可能性がある。CPUからGPUへの関数呼び出しのサポートは、ハードウェア及びソフトウェアの双方において、まますます利用可能になってきている。
これらの異種プロセッサ及びプログラミングフレームワークは、CPUがGPUに作業をオフロードすることを可能にし得るが、GPUが作業をCPUにオフロードし戻すための対応する機構は典型的には存在しない。このような機能は、例えば、(1)GPU上で実行されないことがあるオペレーティングシステム関数の呼び出し、(2)GPUにまだ移植されていないコードの呼び出し、及び(3)並列の実行にあまり適していない比較的順次的なコード又は不規則な制御パスに従うコードの実行を含む多くの状況に有用になることがある。
特許請求の対象物の実施例の特徴及び利点は、以下の詳細な説明と共に明らかになる。図面を参照すると、同様の符号は同様の部分を示す。
この開示に従った例示的な実施例のトップレベルのシステム図を示す。 この開示に従った例示的な実施例のブロック図を示す。 この開示に従った例示的な実施例の動作のフローチャートを示す。 この開示に従った他の例示的な実施例の動作のフローチャートを示す。 この開示に従った他の例示的な実施例の動作のフローチャートを示す。 この開示に従った他の例示的な実施例の動作のフローチャートを示す。 この開示に従った他の例示的な実施例のプラットフォームのシステム図を示す。
以下の詳細な説明は、例示的な実施例を参照して行われるが、その多数の代案、変更及び変形が当業者に明らかになる。
一般的に、この開示は、低減した待ち時間を含む改善した効率を備えた、補助プロセッサ(例えば、GPU又は他の種類のアクセラレータ)と中央処理装置(CPU:Central Processing Unit)との間の関数呼び出し及びコールバックのためのシステム、デバイス、方法及びコンピュータ読み取り可能媒体を提供する。異種プロセッサは、共有仮想メモリ(SVM:shared virtual memory)にアクセスするように構成された1つ以上のGPU及びCPUを含んでもよい。CPUは、作業をGPUにオフロードするために、GPUへの関数呼び出し要求を生成してもよい。次に、GPUは、その作業負荷の選択された部分を実行するために、CPUへの関数コールバック要求を生成してもよい。以下に更に詳細に説明するように、コールバック要求は、SVMに記憶された両端キュー(double-ended queue)を通じて通信されてもよい。コールバック要求は、CPU上で実行されるためのコールバック関数へのポインタ(例えば、メモリアドレス)と、コールバック関数に提供されるデータ及び/コールバック関数により戻されるデータへのポインタと、シグナリングフラグ及び継続カーネル(continuation kernel)を含む1つ以上のコールバック完了機構に関する更なる情報とを含んでもよい。
図1は、この開示に従った1つの例示的な実施例のトップレベルのシステム図100を示している。1つ以上のGPU(又はGPUコア)102は、1つ以上のCPU104と仮想メモリ(SVM)106を共有するように構成される。GPU102及びCPU104は、異種プロセッサ又はシステム・オン・チップ(SoC:system on a chip)の一部でもよく、作業は、プロセッサの間で供給されてもよい。例えば、より汎用のプロセッサであるCPUは、比較的順次的(又は不規則)なフローで実行するタスクを扱うのにより適する可能性があり、より並列のアーキテクチャによって設計されたGPUは、並列計算タスクを扱うのにより適する可能性がある。CPU104は、GPUアーキテクチャに適した作業をGPUにオフロードするために、GPU102への関数呼び出し要求を生成するように構成されてもよい。GPU102は、CPUアーキテクチャにより適したその作業負荷の選択された部分を実行するために、CPU104への関数コールバック要求を生成するように構成されてもよい。コールバック要求の完了時に、CPU104は、要求を開始したGPU102への完了信号を生成してもよい。
SVM106は、GPUがCPUにより行われた更新を見ることができ、その逆も見ることができるように、CPU104及びGPU102がデータ構造を含むポインタをトランスペアレントに共有し、メモリ整合性を提供することを可能にするように構成されてもよい。SVM106はまた、共有メモリへのアクセスを連携させ、CPU104とGPU102との間の競合を妨げるために、アトミック操作及びフェンス操作を提供するように構成されてもよい。
コールバック要求及び完了信号は、SVM106に記憶された両端キュー(Deque)108を通じて通信されてもよい。キューは、複数のデータエレメントを保持するように構成された一種のデータ構造である。両端キュー(又はDeque)は、データエレメントがキューの先端又は末端のいずれかに追加又はいずれかから削除され得るように構成されたキューである。Dequeの先端は、「フロント」又は「トップ」エンドと呼ばれてもよく、末端は、「バック」又は「ボトム」エンドと呼ばれてもよい。先端及び末端の名称は、単にDequeの動作の記述における便宜的な基準点として使用されており、固定的な物理位置を示すものではない。言い換えると、先端及び末端という用語は、開示のいずれかの実施例の意味又は動作を変更することなく、以下の説明を通じて交換されてもよい。いくつかの実施例では、Dequeは、必要に応じてより効率的なサイズ調整を可能にするために、サーキュラバッファ又はリングバッファとして実現されてもよい。
データをDequeに追加(又は書き込む)動作は、データをDequeの一端に「プッシュ」することと呼ばれてもよい。Dequeからデータを削除(又は読み取る)動作は、Dequeの他端からデータを「ドロップ」することと呼ばれてもよい。以下に更に詳細に説明するように、GPU102は、Deque108にコールバック要求をプッシュしてもよく、CPUは、実行のためにこれらをポップしてもよい。
図2は、この開示に従った1つの例示的な実施例のブロック図200を示しており、図1のシステムがより詳細に示されている。GPU102は、いずれかの数のコア又は実行ユニット(EU:execution unit)102a、102bを含むように示されており、これらは、例えば、並列でタスクを実行するように構成されてもよい。これらのタスクは、作業をCPUからGPUにオフロードすることを意図するCPU104からの関数呼び出しに関連してもよい。次に、GPUコア又はEU102上で実行するタスクは、CPU104への関数コールバックを要求してもよい。
CPU104は、CPUプロセッサ上で実行するいずれかの数のコールバック要求ハンドラスレッド(コールバックワーカースレッドとも呼ばれる)202a、202bを含むように示されている。共有仮想メモリ(SVM)106は、いずれかの数のDeque108a、108bを記憶するように構成されてもよいが、競合を回避して待ち時間を低減するために、典型的には、GPUコア毎に1つのDequeが存在し、Deque毎に1つの要求ハンドラスレッドが存在する。いくつかの実施例では、SVM106はまた、完了フラグ206a、206bを記憶するように構成されてもよい。特定のコア(例えば、102a)上で実行するGPUタスクは、コールバック要求をそのコア108aに関連するDequeにプッシュすることにより、関数コールバックをCPU104に要求してもよい。コールバック要求は、CPU上で実行されるコールバック関数へのポインタと、関数の引数へのポインタとを含んでもよい。引数ポインタは、典型的には、CPUが戻り結果を書き込み得る1つ以上のメモリ位置を含む、複数のデータアイテム及びパラメータを含むデータ構造へのポインタでもよい。
CPU上の要求ハンドラスレッド202aは、そのDequeからコールバック要求を順次にポップし、そのコールバック要求に関連する関数を実行してもよい。そのコールバック要求関数の完了時に、要求ハンドラスレッドは、完了信号を生成してもよい。いくつかの実施例では、完了信号は、SVM106において完了フラグ206a(ブール変数)を設定するためのアトミック操作を実行することにより成されてもよい。完了フラグ206は、コールバック要求においてポインタにより指定されてもよい。GPUタスクは、例えば他のタスクを実行する間に、いつコールバック要求が完了したかを決定するために、定期的に(アトミック操作を使用して)完了フラグ206aを監視してもよい。したがって、GPUは、CPUによるコールバックの実行中にストールしない。
いくつかの実施例では、要求ハンドラスレッド202は、アイドルになったときに(例えば、自分のDequeが空になったときに)、相互に作業を奪い取ってもよい。これは、1つ以上のコールバック要求をポップするために、別のDequeをランダムに選択することにより成されてもよい。このような作業の奪い取り(work stealing)は、複数の要求ハンドラスレッドの間で作業をより効率的に分配し得る。
いくつかの実施例では、効率は、CPU又はGPUのいずれかによるページフォールトを回避するために、SVM106においてDeque108をピン又はロックダウンすることにより更に増加してもよい。Dequeのサイズが増加すると、更なるストレージもピンされる。さらに、作業のキューイングは、オペレーティングシステム(OS:operating system)又はGPUドライバへのリング遷移(ring transition)に関連するオーバーヘッドを回避するために、ユーザレベルで(例えば、SVMにおけるアトミック操作を通じて)実行されてもよい。
1つのDequeは、そのEU上で実行するタスクにより共有されるため、各GPUコア(又はEU)に割り当てられてもよい。Dequeのボトムエンドは、そのEUのみによりアクセスされるので、異なるEU(又はGPUサブスライス)がそのDequeに関連するキャッシュラインに対して競合することが妨げられるため、データの局所性が改善され、競合が低減される。
Deque当たり1つの専用の要求ハンドラスレッドを用いてCPUを構成することは、CPUコードを長期間動作することによりもたらされるDequeバックアップを回避するのに役立ち得る。Dequeは、残りのコールバック要求を含むが、このCPUスレッドは、実行を続ける。しかし、Dequeが空になった場合、CPUスレッドは、他のランダムに選択されたDequeからアイテムを奪い取ることを試みる。CPUスレッドが許可された数の奪い取りの試行の後にコールバック要求をうまく奪い取ることができない場合、更なる成功しない試行に関連するコストを回避するために、特定の期間だけ中断する。ユーザレベル(リング3)においてMonitor/Mwait命令が利用可能である場合、CPUスレッドは、新たなアイテムがDequeに追加されるまで待機するためにこれらを使用してもよい。そうでない場合、CPUスレッドは、ある期間だけスリープし、次にその通常動作(自分のコールバック要求の実行又は他のDequeからの奪い取り)を再開してもよい。
図3は、この開示に従った1つの例示的な実施例の動作300のフローチャートを示している。GPUコア又は実行ユニット(EU)102a、102bの動作が示されている。動作302において、GPUコアは、CPUコールバックを開始する。動作304において、コールバック要求は、GPUコアに関連するDequeに追加される。次に動作306において、任意選択で、GPUコアは、コールバックの完了を待機しつつ他のタスクを実行してもよい。動作308において、要求に関連する完了フラグ206が検査され、設定されていない場合、GPUは、他のタスクを実行し続けてもよく(306)、更なるコールバック要求を追加してもよく(304)、或いは単に完了フラグの再検査の前にある期間だけ待機/スリープしてもよい。完了フラグが設定された場合、次に動作310において、GPUコアは、CPUコールバックから提供された結果を読み取る。これらの結果は、例えば、コールバック要求においてポインタにより指定されたSVMにおけるメモリ位置で取得されてもよい。CPUコールバックは、動作312で完了する。
図4は、この開示に従った他の例示的な実施例の動作400のフローチャートを示している。CPUコールバックワーカースレッド202a、202bの動作は、動作402で始まるように示されている。動作404において、コールバック要求は、そのワーカースレッドに関連するDequeからポップされる。コールバック要求がうまくポップされた場合、次に動作416において、コールバック要求により指定された関数又はプロシージャは、コールバック要求により与えられたいずれかの引数で呼び出される/実行される。コールバック要求が完了した後に、動作418において、そのコールバック要求に関連する完了フラグが設定され、ワーカースレッドは、次のコールバック要求を扱うために動作404にループバックする。
しかし、ポップが失敗した場合、例えば、そのワーカースレッドに関連するDequeにもはやコールバック要求が存在しない場合、次に動作406において、奪い取り試行回数がインクリメントされる。動作408において、奪い取り試行回数が最大閾値を超えた場合、次に動作410において、ワーカースレッドは、他のポップを試行する前に或る指定の期間だけ待機してもよい。いくつかの実施例では、待機は、Sleep命令又はMonitor/Mwait命令を実行することにより成されてもよい。そうでなく、奪い取り試行回数が最大閾値未満である場合、動作412において、他のワーカースレッドに関連する他のDequeの中から、別のDequeがランダムに選択される(例えば、奪い取られる)。次に動作414において、コールバック要求は、別の(奪い取られた)Dequeからポップされ、手順は前述の動作416に続く。
図5は、この開示に従った他の例示的な実施例の動作500のフローチャートを示している。この実施例では、GPUがコールバック要求の完了を繰り返し検査することを要求することを回避するために、別の機構が提供される。これは、GPU効率及びエネルギー消費を改善し得る。この機構は、プログラムの所与の時点における計算の状態を表す「継続(continuation)」の使用を行う。コールバック要求は、CPUがコールバック要求を完了した後に呼び出す「継続カーネル(continuation kernel)」と呼ばれるGPUカーネルへのポインタ又はハンドルを含むように構成されてもよい。次に、GPU継続カーネルは、コールバック要求が行われた直後の時点の元のGPUタスク(又は呼び出しカーネル)の実行を論理的に再開する。したがって、GPU呼び出しカーネルはブロックされず、CPUコールバックが完了したか否かを繰り返し検査する必要はない。コールバック要求はまた、継続カーネルに戻されるデータポインタ(例えば、継続引数ポインタ)を含むように構成されてもよい。一般的に、コールバック要求を行うGPU呼び出しカーネルは、継続引数ポインタにより参照されるデータ構造におけるメモリ位置に基本変数の値を保存し、これにより、これらは後に継続カーネルにより使用されることができる。さらに、CPUコールバック関数が結果を戻す場合、そのデータ構造におけるメモリ位置に書き込むことにより、そうしてもよい。
GPUコア上の呼び出しカーネル502の動作を記述する図5(a)を次に参照すると、動作504において、呼び出しカーネルは、CPUコールバックを開始する。動作506において、スタック変数は、コールバック要求の継続引数ポインタにより参照されるデータ構造に保存される。これらのスタック変数は、中断された時点から呼び出しカーネルを再開するために、後に継続カーネルにより使用される。動作508において、コールバック要求は、GPUコア又は実行ユニットに関連するDequeに追加(プッシュ)される。次に動作510において、GPUコア上の呼び出しカーネルは終了してもよく、したがって、例えば、GPUコアが他の作業を実行することを可能にする。呼び出しカーネルはこの時点で終了しているが、継続カーネルは、後に、コールバック要求を行った後に生じることを意図する計算又はタスクを再開することができ、GPUが繰り返しのテストを待機又は実行する必要なく、それを直接行うことができる。
次に図5(b)を参照して、CPUコールバックワーカースレッド520の動作について説明する。動作522において、作業が選択され、前述の図4に関して説明したのと同様の方式で実行される。すなわち、コールバック要求がワーカースレッドに関連するDequeからポップされ、指定されたコールバック関数が実行される。完了時に、動作524において、CPUコールバックワーカースレッドは、そのコールバック要求に関連するGPU継続カーネルを呼び出す。
次に図5(c)を参照して、GPUコア継続カーネル530の動作について説明する。動作532において、呼び出された継続カーネルは、呼び出しカーネルにより前に保存されたスタック変数をロードし、動作534において、存在する場合にはCPUコールバックから結果を読み取る。動作536において、GPUコア呼び出しカーネルは、復旧したスタック変数を使用して再開される。
いくつかの実施例では、プログラマは、スタック変数の値を記憶する必要がある呼び出しカーネルのコードと、これらのスタック変数の値を再ロードするための継続カーネルのコードとを記述することにより、CPUコールバック要求を実現してもよい。しかし、他の実施例では、コンパイラ又は翻訳機は、このコードを出し、したがって、CPUコールバックを使用するために必要なプログラミング労力を簡略化するように構成されてもよい。関数コールバックの使用を更に簡略化するために、コンパイラは、CPUコールバックを含む単一のGPUカーネルを呼び出し及び継続カーネルの適切なシーケンス及び関連するスタック変数に翻訳し、コードを保存及び復旧するように更に構成されてもよい。
図6は、この開示に従った他の例示的な実施例の動作600のフローチャートを示している。動作は、第1のプロセッサと第2のプロセッサとの間で関数コールバックを要求するための方法を提供する。動作610において、コールバック要求は、第1のプロセッサの実行ユニット(EU)により第1の両端キュー(Deque)にプッシュされる。Dequeは、第1及び第2のプロセッサに結合された共有仮想メモリ(SVM)に記憶される。動作620において、コールバック要求の1つが、第2のプロセッサ上で実行する要求ハンドラスレッドにより、第1のDequeからポップされる。動作630において、要求ハンドラスレッドは、ポップされたコールバック要求により指定された関数を実行する。動作640において、要求ハンドラスレッドは、関数の完了に応じてEUへの完了信号を生成する。
図7は、この開示に従った1つの例示的な実施例のシステム図700を示している。システム700は、例えば、スマートフォン、スマートタブレット、パーソナルデジタルアシスタント(PDA)、モバイルインターネットデバイス(MID)、コンバーチブルタブレット、ノートブック若しくはラップトップコンピュータ、又は他の適切なデバイスのようなモバイルプラットフォーム710又はコンピューティングデバイスでもよい。しかし、ここに記載のシステムの実施例は、モバイルプラットフォームに限定されず、いくつかの実施例では、システム700は、ワークステーション又はデスクトップコンピュータでもよいことが分かる。デバイスは、一般的に、例えば、タッチスクリーン、液晶ディスプレイ(LCD)又は他の適切なディスプレイタイプのようなディスプレイエレメント760を介してユーザに様々なインタフェースを提示してもよい。
システム700は、例えば汎用プロセッサとして構成されてもよい第1のプロセッサ又はCPU104と、より高い効率で並列動作を実行するように構成されてもよい第2のプロセッサ又はGPU102とを含むように示されている。いくつかの実施例では、プロセッサ102及び104は、いずれかの数のプロセッサコアとして実現されてもよい。一般的に、プロセッサ(又はプロセッサコア)は、例えば、マイクロプロセッサ、埋め込みプロセッサ、デジタルシグナルプロセッサ(DSP)、グラフィックプロセッサ(GPU)、ネットワークプロセッサ、フィールドプログラマブルゲートアレイ、又はコードを実行するように構成された他のデバイスのようないずれかの種類のプロセッサでもよい。プロセッサは、コア当たり1つより多くのハードウェアスレッドコンテキスト(又は「論理プロセッサ」)を含んでもよいという点で、マルチスレッドコアでもよい。システム700はまた、前述のようにプロセッサの間で改善した関数コールバック要求を実現するように構成されたいずれかの数のDeque108を含むSVM106を含むように示されている。
システム700はまた、メモリ730を含むように示されている。メモリ730は、プロセッサに結合される。メモリ730は、既知の或いは当業者に利用可能な多種のメモリ(様々なレイヤのメモリ階層及び/又はメモリキャッシュを含む)のいずれかでもよい。プロセッサ及びメモリは、1つ以上のユーザアプリケーション又は他のソフトウェアモジュールを記憶、ホスト及び/又は実行するように構成されてもよい。これらのアプリケーションは、例えば、いずれかの種類の計算、通信、データ管理、データ記憶及び/又はユーザインタフェースタスクを含むが、これらに限定されない。いくつかの実施例では、これらのアプリケーションは、モバイルプラットフォーム710の他のコンポーネントを利用してもよく、或いは他のコンポーネントと相互作用してもよい。
システム700はまた、プロセッサ102、104とディスプレイエレメント760及び/又はシステム700の外部の他のエレメント(図示せず)を含むシステム700の他のエレメントとの間のデータ通信を可能又は管理するように構成されてもよい入出力(IO)システム又はコントローラ750を含むように示されている。
システム700はまた、プロセッサに結合され、プログラム、アプリケーション及び/又はデータを記憶するように構成されたストレージシステム740(例えば、ハードディスクドライブ(HDD)又はソリッドステートドライブ(SDD))を含むように示されている。
システム700はまた、無線通信機能(例えば、セルラ通信、WiFi(Wireless Fidelity)、Bluetooth(登録商標)及び/又は近距離無線通信(NFC:Near Field Communication)等)を含んでもよいネットワークインタフェースモジュール770を含むように示されている。無線通信は、Bluetooth(登録商標)、Wi-Fi及び移動電話通信標準の過去、現在及び将来のバージョンを含むいずれか既存又は開発予定の通信標準に従ってもよく、或いはそれに準拠してもよい。
いくつかの実施例では、システム700の様々なコンポーネントは、システム・オン・チップ(SoC)アーキテクチャで組み合わされてもよいことが分かる。いくつかの実施例では、コンポーネントは、ハードウェアコンポーネント、ファームウェアコンポーネント、ソフトウェアコンポーネント、又はハードウェア、ファームウェア若しくはソフトウェアのいずれか適切な組み合わせでもよい。
ここに記載の方法の実施例は、1つ以上のプロセッサにより実行された場合、方法を実行する命令を個別に或いは組み合わせで記憶した1つ以上の記憶媒体を含むシステムにおいて実現されてもよい。ここで、プロセッサは、例えば、システムCPU(例えば、コアプロセッサ)及び/又はプログラム可能回路を含んでもよい。したがって、ここに記載の方法に従った動作は、例えば、複数の異なる物理位置における処理構造のように、複数の物理デバイスの間に分散されてもよいことを意図する。また、当業者に理解できるように、方法の動作は、個別に或いはサブコンビネーションで実行されてもよいことを意図する。したがって、フローチャートのそれぞれの動作の全てが実行される必要はなく、この開示は、当業者に理解できるように、このような動作の全てのサブコンビネーションが可能になることを明確に意図する。
記憶媒体は、いずれかの種類の有形の媒体(例えば、フロッピーディスク、光ディスク、コンパクトディスク読み取り専用メモリ(CD-ROM)、再書き込み可能コンパクトディスク(CD-RW)、デジタル多用途ディスク(DVD)及び光磁気ディスクを含むいずれかの種類のディスク、読み取り専用メモリ(ROM)、ダイナミック及びスタティックRAMのようなランダムアクセスメモリ(RAM)、消去可能プログラム可能読み取り専用メモリ(EPROM)、電気的消去可能プログラム可能読み取り専用メモリ(EEPROM)、フラッシュメモリのような半導体デバイス、磁気若しくは光カード、又は電子命令を記憶するのに適したいずれかの種類の媒体)を含んでもよい。
ここでいずれかの実施例で使用される「回路」は、例えば、ハードウェア回路、プログラム可能回路、状態機械回路及び/又はプログラム可能回路により実行される命令を記憶するファームウェアを単独で或いはいずれかの組み合わせで含んでもよい。アプリケーションは、ホストプロセッサ又は他のプログラム可能回路のようなプログラム可能回路上で実行され得るコード又は命令として具現されてもよい。ここでいずれかの実施例で使用されるモジュールは、回路として具現されてもよい。回路は、集積回路チップのような集積回路として具現されてもよい。
したがって、この開示は、第1のプロセッサと第2のプロセッサとの間で関数コールバック要求を実現するためのシステム、デバイス、方法及びコンピュータ読み取り可能媒体を提供する。以下の例は更なる実施例に関する。
例1によれば、第1のプロセッサと第2のプロセッサとの間で関数コールバック要求を実現するためのシステムが提供される。システムは、第1及び第2のプロセッサに結合された共有仮想メモリ(SVM)を含んでもよく、SVMは、少なくとも1つの両端キュー(Deque)を記憶するように構成される。この例のシステムはまた、第1のプロセッサの実行ユニット(EU)を含んでもよく、EUは、Dequeのうち第1のDequeに関連し、コールバック要求を第1のDequeにプッシュするように構成される。この例のシステムは、第1のDequeからコールバック要求の1つをポップし、ポップされたコールバック要求により指定された関数を実行し、関数の完了に応じてEUへの完了信号を生成するように構成された、第2のプロセッサ上で実行する要求ハンドラスレッドを更に含んでもよい。
例2は、例1の対象物を含んでもよく、コールバック要求は、第2のプロセッサにより実行される関数を指定するための関数ポインタと、実行される関数に提供されるデータ及び実行された関数により生成されてEUに提供される結果についてSVMにおける位置を指定するための引数ポインタとを含む。
例3は、例1及び2の対象物を含んでもよく、要求ハンドラスレッドは、第1のDequeが空であることを検出したことに応じて、第2のDequeからコールバック要求の1つを更にポップし、第2のDequeは、第2のEUに関連する。
例4は、例1〜3の対象物を含んでもよく、Dequeは、EU及び要求ハンドラによるアクセス試行に応じてページフォールトを妨げるために、SVMにおいてピンされる。
例5は、例1〜4の対象物を含んでもよく、完了信号は、SVMにおいて完了フラグを設定し、EUは、完了フラグを更にポーリングする。
例6は、例1〜5の対象物を含んでもよく、完了信号は、EU上で継続カーネルをトリガーし、継続カーネルは、前に保存されたスタック変数を復旧する。
例7は、例1〜6の対象物を含んでもよく、要求ハンドラスレッドは、Dequeのいずれかからコールバック要求の1つをポップすることに失敗したことに応じて、更にスリープする。
例8は、例1〜7の対象物を含んでもよく、スリープは、Monitor/Mwait命令の実行を含む。
例9は、例1〜8の対象物を含んでもよく、第1のプロセッサは、グラフィック処理装置(GPU)であり、第2のプロセッサは、汎用中央処理装置(CPU)である。
例10によれば、第1のプロセッサと第2のプロセッサとの間での関数コールバック要求のための方法が提供される。方法は、第1のプロセッサの実行ユニット(EU)により、コールバック要求を第1の両端キュー(Deque)にプッシュするステップであり、Dequeは、第1及び第2のプロセッサに結合された共有仮想メモリ(SVM)に記憶されるステップと、第2のプロセッサ上で実行する要求ハンドラスレッドにより、第1のDequeからコールバック要求の1つをポップするステップと、要求ハンドラスレッドにより、ポップされたコールバック要求により指定された関数を実行するステップと、要求ハンドラスレッドにより、関数の完了に応じてEUへの完了信号を生成するステップとを含んでもよい。
例11は、例10の対象物を含んでもよく、コールバック要求は、第2のプロセッサにより実行される関数を指定するための関数ポインタと、実行される関数に提供されるデータ及び実行された関数により生成されてEUに提供される結果についてSVMにおける位置を指定するための引数ポインタとを含む。
例12は、例10及び11の対象物を含んでもよく、要求ハンドラスレッドにより、第1のDequeが空であることを検出したことに応じて、第2のDequeからコールバック要求の1つをポップするステップであり、第2のDequeは、第2のEUに関連するステップを更に含む。
例13は、例10〜12の対象物を含んでもよく、EU及び要求ハンドラによるアクセス試行に応じてページフォールトを妨げるために、SVMにおいてDequeをピンするステップを更に含む。
例14は、例10〜13の対象物を含んでもよく、完了信号を生成するステップは、EUによりポーリングするために、SVMにおいて完了フラグを設定するステップを更に含む。
例15は、例10〜14の対象物を含んでもよく、完了信号を生成するステップは、EU上で継続カーネルをトリガーするステップであり、継続カーネルは、前に保存されたスタック変数を復旧するステップを更に含む。
例16は、例10〜15の対象物を含んでもよく、要求ハンドラスレッドにより、Dequeのいずれかからコールバック要求の1つをポップすることに失敗したことに応じて、スリープするステップを更に含む。
例17は、例10〜16の対象物を含んでもよく、スリープするステップは、Monitor/Mwait命令を実行するステップを更に含む。
例18によれば、プロセッサにより実行された場合、第1のプロセッサと第2のプロセッサとの間での関数コールバック要求のための以下の動作を生じる命令を記憶した少なくとも1つのコンピュータ読み取り可能記憶媒体が提供される。動作は、第1のプロセッサの実行ユニット(EU)により、コールバック要求を第1の両端キュー(Deque)にプッシュするステップであり、Dequeは、第1及び第2のプロセッサに結合された共有仮想メモリ(SVM)に記憶されるステップと、第2のプロセッサ上で実行する要求ハンドラスレッドにより、第1のDequeからコールバック要求の1つをポップするステップと、要求ハンドラスレッドにより、ポップされたコールバック要求により指定された関数を実行するステップと、要求ハンドラスレッドにより、関数の完了に応じてEUへの完了信号を生成するステップとを含んでもよい。
例19は、例18の対象物を含んでもよく、コールバック要求は、第2のプロセッサにより実行される関数を指定するための関数ポインタと、実行される関数に提供されるデータ及び実行された関数により生成されてEUに提供される結果についてSVMにおける位置を指定するための引数ポインタとを含む。
例20は、例18及び19の対象物を含んでもよく、要求ハンドラスレッドにより、第1のDequeが空であることを検出したことに応じて、第2のDequeからコールバック要求の1つをポップするステップであり、第2のDequeは、第2のEUに関連するステップを更に含む。
例21は、例18〜20の対象物を含んでもよく、EU及び要求ハンドラによるアクセス試行に応じてページフォールトを妨げるために、SVMにおいてDequeをピンするステップを更に含む。
例22は、例18〜21の対象物を含んでもよく、完了信号を生成するステップは、EUによりポーリングするために、SVMにおいて完了フラグを設定するステップを更に含む。
例23は、例18〜22の対象物を含んでもよく、完了信号を生成するステップは、EU上で継続カーネルをトリガーするステップであり、継続カーネルは、前に保存されたスタック変数を復旧するステップを更に含む。
例24は、例18〜23の対象物を含んでもよく、要求ハンドラスレッドにより、Dequeのいずれかからコールバック要求の1つをポップすることに失敗したことに応じて、スリープするステップを更に含む。
例25は、例18〜24の対象物を含んでもよく、スリープするステップは、Monitor/Mwait命令を実行するステップを更に含む。
例26によれば、第1のプロセッサと第2のプロセッサとの間での関数コールバック要求のためのシステムが提供される。システムは、第1のプロセッサの実行ユニット(EU)により、コールバック要求を第1の両端キュー(Deque)にプッシュする手段であり、Dequeは、第1及び第2のプロセッサに結合された共有仮想メモリ(SVM)に記憶される手段と、第2のプロセッサ上で実行する要求ハンドラスレッドにより、第1のDequeからコールバック要求の1つをポップする手段と、要求ハンドラスレッドにより、ポップされたコールバック要求により指定された関数を実行する手段と、要求ハンドラスレッドにより、関数の完了に応じてEUへの完了信号を生成する手段とを含んでもよい。
例27は、例26の対象物を含んでもよく、コールバック要求は、第2のプロセッサにより実行される関数を指定するための関数ポインタと、実行される関数に提供されるデータ及び実行された関数により生成されてEUに提供される結果についてSVMにおける位置を指定するための引数ポインタとを含む。
例28は、例26及び27の対象物を含んでもよく、要求ハンドラスレッドにより、第1のDequeが空であることを検出したことに応じて、第2のDequeからコールバック要求の1つをポップする手段であり、第2のDequeは、第2のEUに関連する手段を更に含む。
例29は、例26〜28の対象物を含んでもよく、EU及び要求ハンドラによるアクセス試行に応じてページフォールトを妨げるために、SVMにおいてDequeをピンする手段を更に含む。
例30は、例26〜29の対象物を含んでもよく、完了信号を生成する手段は、EUによりポーリングするために、SVMにおいて完了フラグを設定する手段を更に含む。
例31は、例26〜30の対象物を含んでもよく、完了信号を生成する手段は、EU上で継続カーネルをトリガーする手段であり、継続カーネルは、前に保存されたスタック変数を復旧する手段を更に含む。
例32は、例26〜31の対象物を含んでもよく、要求ハンドラスレッドにより、Dequeのいずれかからコールバック要求の1つをポップすることに失敗したことに応じて、スリープする手段を更に含む。
例33は、例26〜32の対象物を含んでもよく、スリープする手段は、Monitor/Mwait命令を実行する手段を更に含む。
ここで使用されている用語及び表現は、限定ではなく、説明に関して使用されており、このような用語及び表現の使用において、図示及び記載した機能(又はその一部)のいずれかの均等物を除外する意図は存在せず、特許請求の範囲内において様々な変更が可能であることが分かる。したがって、特許請求の範囲は、全てのこのような均等物をカバーすることを意図する。様々な機能、態様及び実施例についてここで説明した。当業者により理解できるように、機能、態様及び実施例は、相互の組み合わせ並びに変更及び変形が可能である。したがって、この開示は、このような組み合わせ、変更及び変形を含むものと考えられるべきである。

Claims (20)

  1. 中央処理装置(CPU)と、
    グラフィック処理装置(GPU)と、
    前記CPUによりアクセス可能であり、前記GPUによりアクセス可能な共有仮想メモリと、
    前記CPUにより実行される関数に対応するデータを記憶するキューと
    を含み、
    前記キューは、データエレメントがバッファの一端に書き込まれること又はバッファの一端から読み取られることのうち少なくとも1つを可能にするように構成されたバッファにより実現され、
    前記GPUは、前記データを前記キューに書き込み、前記CPUに前記関数を実行させ、
    前記CPUは、前記関数を実行し、前記CPUによる前記関数の実行が完了したとき、前記GPUによりアクセス可能な完了フラグを設定する、プロセッサプラットフォーム。
  2. 前記データは、前記関数に関連する引数を指定する、請求項1に記載のプロセッサプラットフォーム。
  3. 前記データは、前記関数へのポインタを含む、請求項2に記載のプロセッサプラットフォーム。
  4. 前記キューは、前記共有仮想メモリにより実現される、請求項1に記載のプロセッサプラットフォーム。
  5. 前記GPUは、
    前記完了フラグが設定されることを検査し、
    前記完了フラグが設定されたとき、前記共有仮想メモリ内の位置から前記CPUによる前記関数の前記実行の結果を読み取り、
    前記位置は、前記データに含まれるポインタにより指定される、請求項1に記載のプロセッサプラットフォーム。
  6. 前記キューは、前記CPUから前記GPUに前記完了フラグを通信する、請求項1に記載のプロセッサプラットフォーム。
  7. 前記CPUは、スレッドを実行し、
    前記キューから前記データを読み取り、
    前記データに基づいて前記関数を実行し、
    前記CPUによる前記関数の実行が完了したとき、前記完了フラグを設定する、請求項1に記載のプロセッサプラットフォーム。
  8. マルチプロセッサシステムにおいて実行される関数を呼び出す方法であって、
    前記マルチプロセッサシステムのグラフィック処理装置(GPU)によって、データをキューに書き込むステップであり、前記キューは、データがバッファの一端に書き込まれること又はバッファの一端から読み取られることのうち少なくとも1つを可能にするように構成されたバッファにより実現され、前記データは前記関数に対応し、前記関数は、前記マルチプロセッサシステムの中央処理装置(CPU)により実行される、ステップと、
    前記CPUによって、前記キューから前記データを読み取るステップと、
    前記CPUによって、前記データに基づいて前記関数を実行するステップと、
    前記CPUによって、前記関数の実行が完了したとき、前記GPUによりアクセス可能な完了フラグを設定するステップと
    を含む方法。
  9. 前記データは、前記関数に関連する引数に対応する、請求項8に記載の方法。
  10. 前記データは、前記関数へのポインタを含む、請求項9に記載の方法。
  11. 前記キューは、共有仮想メモリにより実現される、請求項8に記載の方法。
  12. 前記GPUによって、前記完了フラグが設定されることを検査するステップと、
    前記GPUによって、前記完了フラグが設定されたとき、共有仮想メモリ内の位置から前記CPUによる前記関数の前記実行の結果を読み取るステップであり、前記位置は、前記データに含まれるポインタにより指定される、ステップと
    を更に含む、請求項8に記載の方法。
  13. 前記キューを通じて前記完了フラグを通信するステップを更に含む、請求項8に記載の方法。
  14. 前記CPUによってスレッドを実行するステップであり、前記スレッドは、
    前記キューから前記データを読み取る動作と、
    前記データに基づいて前記関数を実行する動作と、
    前記CPUによる前記関数の実行が完了したとき、前記完了フラグを設定する動作と
    を含む動作を実行する、ステップを更に含む、請求項8に記載の方法。
  15. 中央処理装置(CPU)と、
    グラフィック処理装置(GPU)と、
    前記CPUにより実行される関数に対応するデータを記憶する手段と
    を含み、
    前記データを記憶する手段は、データがバッファの一端に書き込まれること又はバッファの一端から読み取られることのうち少なくとも1つを可能にするように構成されたバッファを含み、
    前記GPUは、前記データを前記データを記憶する手段に書き込み、前記CPUに前記関数を実行させ、
    前記CPUは、前記関数を実行し、前記CPUによる前記関数の実行が完了したとき、前記GPUによりアクセス可能な完了フラグを設定する、プロセッサシステム。
  16. 前記データは、前記関数に関連する引数を指定する、請求項15に記載のプロセッサシステム。
  17. 前記データは、前記関数へのポインタを含む、請求項16に記載のプロセッサシステム。
  18. 前記データを記憶する手段は、共有仮想メモリを含む、請求項15に記載のプロセッサシステム。
  19. 前記GPUは、
    前記完了フラグが設定されることを検査し、
    前記完了フラグが設定されたとき、前記共有仮想メモリ内の位置から前記CPUによる前記関数の前記実行の結果を読み取り、
    前記位置は、前記データに含まれるポインタにより指定される、請求項18に記載のプロセッサシステム。
  20. 前記データを記憶する手段は、前記CPUから前記GPUに前記完了フラグを通信する、請求項15に記載のプロセッサシステム。
JP2020128188A 2014-12-18 2020-07-29 中央処理装置(cpu)と補助プロセッサとの間の改善した関数コールバック機構 Active JP7087029B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US14/574,545 2014-12-18
US14/574,545 US9342384B1 (en) 2014-12-18 2014-12-18 Function callback mechanism between a central processing unit (CPU) and an auxiliary processor

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2017526871A Division JP6800850B2 (ja) 2014-12-18 2015-11-24 中央処理装置(cpu)と補助プロセッサとの間の改善した関数コールバック機構

Publications (2)

Publication Number Publication Date
JP2020173870A true JP2020173870A (ja) 2020-10-22
JP7087029B2 JP7087029B2 (ja) 2022-06-20

Family

ID=55920108

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2017526871A Active JP6800850B2 (ja) 2014-12-18 2015-11-24 中央処理装置(cpu)と補助プロセッサとの間の改善した関数コールバック機構
JP2020128188A Active JP7087029B2 (ja) 2014-12-18 2020-07-29 中央処理装置(cpu)と補助プロセッサとの間の改善した関数コールバック機構

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2017526871A Active JP6800850B2 (ja) 2014-12-18 2015-11-24 中央処理装置(cpu)と補助プロセッサとの間の改善した関数コールバック機構

Country Status (7)

Country Link
US (3) US9342384B1 (ja)
EP (1) EP3234785A4 (ja)
JP (2) JP6800850B2 (ja)
KR (1) KR102466984B1 (ja)
CN (1) CN107004251A (ja)
SG (1) SG11201704042PA (ja)
WO (1) WO2016099820A1 (ja)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9342384B1 (en) 2014-12-18 2016-05-17 Intel Corporation Function callback mechanism between a central processing unit (CPU) and an auxiliary processor
RU2647627C1 (ru) * 2016-11-08 2018-03-16 Федеральное государственное бюджетное учреждение науки Федеральный исследовательский Центр "Карельский научный центр Российской академии наук" Способ управления памятью компьютерной системы
CN108052380B (zh) * 2017-12-07 2020-10-30 金蝶软件(中国)有限公司 业务功能对接方法、装置、计算机设备及存储介质
US10740163B2 (en) * 2018-06-28 2020-08-11 Advanced Micro Devices, Inc. Network packet templating for GPU-initiated communication
CN110688203B (zh) * 2018-07-05 2022-05-13 武汉斗鱼网络科技有限公司 一种任务执行方法和装置
US10853154B2 (en) * 2019-01-30 2020-12-01 Salesforce.Com, Inc. Orchestration of a sequence of computations by external systems
CN110347450B (zh) * 2019-07-15 2024-02-09 北京一流科技有限公司 多流并行控制系统及其方法
CN111158911A (zh) * 2019-12-27 2020-05-15 迈普通信技术股份有限公司 一种处理器配置方法、装置、处理器及网络设备
US11340942B2 (en) * 2020-03-19 2022-05-24 Raytheon Company Cooperative work-stealing scheduler
US11347488B2 (en) * 2020-05-18 2022-05-31 Fortinet, Inc. Compiling domain-specific language code to generate executable code targeting an appropriate type of processor of a network device
EP4195045A4 (en) * 2020-08-14 2023-09-27 Huawei Technologies Co., Ltd. METHOD FOR DATA INTERACTION BETWEEN MAIN CPU AND NPU, AND COMPUTER DEVICE
US11698816B2 (en) * 2020-08-31 2023-07-11 Hewlett Packard Enterprise Development Lp Lock-free work-stealing thread scheduler
US11960813B2 (en) 2021-08-02 2024-04-16 Advanced Micro Devices, Inc. Automatic redistribution layer via generation

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11175359A (ja) * 1997-12-17 1999-07-02 Nippon Telegr & Teleph Corp <Ntt> 異種プラットフォーム間のイベント監視部統合方法
JP2002510819A (ja) * 1998-04-08 2002-04-09 ジオワークス・コーポレーション マークアップ言語ベースのマンマンシンインタフェースを備えた無線通信装置
JP2005284749A (ja) * 2004-03-30 2005-10-13 Kyushu Univ 並列処理コンピュータ
JP2014531687A (ja) * 2011-09-30 2014-11-27 オラクル・インターナショナル・コーポレイション ミドルウェアマシン環境においてマルチノードアプリケーションのためのメッセージキューを提供および管理するためのシステムおよび方法

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0619785A (ja) * 1992-03-27 1994-01-28 Matsushita Electric Ind Co Ltd 分散共有仮想メモリーとその構成方法
US5826081A (en) * 1996-05-06 1998-10-20 Sun Microsystems, Inc. Real time thread dispatcher for multiprocessor applications
JPH09319580A (ja) * 1996-05-29 1997-12-12 Oki Electric Ind Co Ltd ネットワークマネージメント方法
US7539849B1 (en) * 2000-01-20 2009-05-26 Sun Microsystems, Inc. Maintaining a double-ended queue in a contiguous array with concurrent non-blocking insert and remove operations using a double compare-and-swap primitive
WO2001080015A2 (en) 2000-04-18 2001-10-25 Sun Microsystems, Inc. Concurrent shared object implemented using a linked-list with amortized node allocation
JP2002073332A (ja) * 2000-08-25 2002-03-12 Sanyo Electric Co Ltd 演算実行装置及び方法
MY147018A (en) 2001-01-04 2012-10-15 Thomson Licensing Sa A method and apparatus for acquiring media services available from content aggregators
US6938253B2 (en) * 2001-05-02 2005-08-30 Portalplayer, Inc. Multiprocessor communication system and method
US7213093B2 (en) * 2003-06-27 2007-05-01 Intel Corporation Queued locks using monitor-memory wait
US7308688B2 (en) * 2003-08-19 2007-12-11 Kabushiki Kaisha Toshiba System and method for shared memory based IPC queue template having event based notification
US7868891B2 (en) * 2004-09-16 2011-01-11 Nvidia Corporation Load balancing
US7346753B2 (en) * 2005-12-19 2008-03-18 Sun Microsystems, Inc. Dynamic circular work-stealing deque
CN100549942C (zh) * 2006-03-31 2009-10-14 应广科技股份有限公司 自我控制的多重微控制系统及方法
CN101295267B (zh) * 2008-05-30 2013-01-16 中兴通讯股份有限公司 队列管理方法和装置、计算机系统及计算机可读介质
CN101662300B (zh) * 2008-08-29 2013-09-25 深圳富泰宏精密工业有限公司 手机图片转换系统及方法
JP2010079622A (ja) * 2008-09-26 2010-04-08 Hitachi Ltd マルチコアプロセッサシステム、および、そのタスク制御方法
US8531471B2 (en) * 2008-11-13 2013-09-10 Intel Corporation Shared virtual memory
TWI434182B (zh) * 2009-06-21 2014-04-11 Ablaze Wireless Inc 外部記憶體快進快出裝置
US8959525B2 (en) * 2009-10-28 2015-02-17 International Business Machines Corporation Systems and methods for affinity driven distributed scheduling of parallel computations
US8868848B2 (en) * 2009-12-21 2014-10-21 Intel Corporation Sharing virtual memory-based multi-version data between the heterogenous processors of a computer platform
US10620988B2 (en) 2010-12-16 2020-04-14 Et International, Inc. Distributed computing architecture
US8745291B2 (en) * 2011-10-04 2014-06-03 Qualcomm Incorporated Inter-processor communication apparatus and method
US9170820B2 (en) * 2011-12-15 2015-10-27 Advanced Micro Devices, Inc. Syscall mechanism for processor to processor calls
US10255104B2 (en) * 2012-03-29 2019-04-09 Advanced Micro Devices, Inc. System call queue between visible and invisible computing devices
KR102086019B1 (ko) 2012-06-08 2020-04-14 어드밴스드 마이크로 디바이시즈, 인코포레이티드 이종 프로세서를 사용하여 애플리케이션에 낮은 레이턴시를 제공하는 시스템 및 방법
US9317339B2 (en) * 2013-03-13 2016-04-19 Oracle International Corporation Systems and methods for implementing work stealing using a configurable separation of stealable and non-stealable work items
US9298556B2 (en) * 2013-04-24 2016-03-29 Nintendo Co., Ltd. Graphics processing watchdog active reset
US9342384B1 (en) 2014-12-18 2016-05-17 Intel Corporation Function callback mechanism between a central processing unit (CPU) and an auxiliary processor

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11175359A (ja) * 1997-12-17 1999-07-02 Nippon Telegr & Teleph Corp <Ntt> 異種プラットフォーム間のイベント監視部統合方法
JP2002510819A (ja) * 1998-04-08 2002-04-09 ジオワークス・コーポレーション マークアップ言語ベースのマンマンシンインタフェースを備えた無線通信装置
JP2005284749A (ja) * 2004-03-30 2005-10-13 Kyushu Univ 並列処理コンピュータ
JP2014531687A (ja) * 2011-09-30 2014-11-27 オラクル・インターナショナル・コーポレイション ミドルウェアマシン環境においてマルチノードアプリケーションのためのメッセージキューを提供および管理するためのシステムおよび方法

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
"「結城浩のC#で学ぶアルゴリズムとデータ構造 第4回 配列と0記法」", C MAGAZINE, vol. Vol.17, No.8(2005年8月号), JPN6021036141, 1 August 2005 (2005-08-01), JP, pages 113 - 120, ISSN: 0004594325 *
JASON SANDERS(外1名)著,株式会社クイープ訳, 「CUDA BY EXAMPLE 汎用GPUプログラミング入門」, vol. 初版, JPN6021036139, 11 February 2011 (2011-02-11), JP, pages 183 - 203, ISSN: 0004594323 *
JEFF A. STUART, ET AL.: ""GPU-to-CPU Callbacks"", IN: EURO-PAR 2010, PARALLEL PROCESSING WORKSHOPS ("LECTURE NOTES IN COMPUTER SCIENCE (LNCS), VOLUME, JPN6021036138, 2011, pages 365 - 372, ISSN: 0004594322 *
磯部泰徳(外2名): "「ホモジニアスマルチコアCPUにおける異種OS間の連係機構の試作」", 情報処理学会研究報告, vol. Vol.2009-OS-111, No.17, JPN6021036140, 15 April 2009 (2009-04-15), JP, pages 1 - 8, ISSN: 0004594324 *

Also Published As

Publication number Publication date
JP6800850B2 (ja) 2020-12-16
US9342384B1 (en) 2016-05-17
EP3234785A4 (en) 2018-05-30
JP2017538212A (ja) 2017-12-21
EP3234785A1 (en) 2017-10-25
CN107004251A (zh) 2017-08-01
KR20170096103A (ko) 2017-08-23
US10255122B2 (en) 2019-04-09
SG11201704042PA (en) 2017-07-28
US20180267844A1 (en) 2018-09-20
JP7087029B2 (ja) 2022-06-20
WO2016099820A1 (en) 2016-06-23
US20190258533A1 (en) 2019-08-22
KR102466984B1 (ko) 2022-11-15
US10706496B2 (en) 2020-07-07

Similar Documents

Publication Publication Date Title
JP7087029B2 (ja) 中央処理装置(cpu)と補助プロセッサとの間の改善した関数コールバック機構
JP6430970B2 (ja) 異なる命令セットアーキテクチャを有するプロセッサ上におけるオペレーティングシステムの実行
JP6387571B2 (ja) 装置、方法、システム、プログラム、およびコンピュータ可読記録媒体
CN108139946B (zh) 用于在冲突存在时进行有效任务调度的方法
EP3140729B1 (en) Thread waiting in a multithreaded processor architecture
JP2020522797A (ja) Gpuタスクスケジューリングの継続分析タスク
JP2018534675A (ja) 再マッピング同期によるタスクサブグラフの加速化
US9959134B2 (en) Request processing using VM functions
EP3979072A1 (en) Firmware boot task distribution to enable low latency boot performance
JP2018528515A (ja) 効率的な並列コンピューティングのための簡略化されたタスクベースランタイムのための方法
US9606825B2 (en) Memory monitor emulation for virtual machines
JP2014085839A (ja) 並列実行機構及びその動作方法
US9053022B2 (en) Synchronous software interface for an accelerated compute engine
US11249777B2 (en) Virtual machine context management
US10127076B1 (en) Low latency thread context caching
US9268601B2 (en) API for launching work on a processor
US20180239635A1 (en) Suspend and restore processor operations
JP2009175960A (ja) 仮想マルチプロセッサシステム
US7996848B1 (en) Systems and methods for suspending and resuming threads
US10740150B2 (en) Programmable state machine controller in a parallel processing system
US20130166887A1 (en) Data processing apparatus and data processing method
JP2009223841A (ja) 命令ログ取得プログラム及び仮想計算機システム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20200729

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210914

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20211210

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20220510

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20220608

R150 Certificate of patent or registration of utility model

Ref document number: 7087029

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150