(57)【特許請求の範囲】
【請求項１】
中央処理ユニット上の第一のスレッド及びライブラリを用いて、前記中央処理ユニット上の第二のスレッドを生成するステップであり、前記第二のスレッドは、前記第一のスレッドと画像処理ユニット上の第三のスレッドを同期させるために適合する、ステップ、及び
前記第二のスレッドを用いて、前記画像処理ユニット上の前記第三のスレッドと前記中央処理ユニット上の前記第一のスレッドを同期させるステップ、
を含む、方法。
【請求項２】
前記中央処理ユニット上で作動する前記第二のスレッドを用いて、前記画像処理ユニット上のスレッドのためのミューテックスをロック及びロック解除することを含む、請求項１記載の方法。
【請求項３】
前記第二のスレッドを用いて、前記画像処理ユニット上のスレッドのためのミューテックスのロック又はロック解除を要求することを含む、請求項１記載の方法。
【請求項４】
ミューテックスが利用可能な場合に、前記中央処理ユニットが前記画像処理ユニットに通知することを可能にすることを含む、請求項３記載の方法。
【請求項５】
前記中央処理ユニット及び前記画像処理ユニットと共に、共有された仮想記憶装置を使用することを含む、請求項１記載の方法。
【請求項６】
コンピュータにより実行されるプログラムであって、該コンピュータが、
中央処理ユニット上の第一のスレッド及びライブラリを用いて、前記第一のスレッドと画像処理ユニット上の第三のスレッドを同期させるために適合する前記中央処理ユニット上の第二のスレッドを生成し、
前記第二のスレッドを用いて、前記画像処理ユニット上の前記第三のスレッドと前記中央処理ユニット上の前記第一のスレッドを同期させる、
ことを可能にする、命令を含むプログラム。
【請求項７】
前記中央処理ユニット上で作動する前記第二のスレッドを用いて、前記画像処理ユニット上のスレッドのためのミューテックスをロックするための命令を更に含む、請求項６記載のプログラム。
【請求項８】
前記中央処理ユニット上で作動する前記第二のスレッドを用いて、前記画像処理ユニット上のスレッドのためのミューテックスをロック解除するための命令を更に含む、請求項７記載のプログラム。
【請求項９】
前記第二のスレッドを用いて、前記画像処理ユニット上のスレッドのためのミューテックスのロック又はロック解除を要求するための命令を更に含む、請求項７記載のプログラム。
【請求項１０】
ミューテックスが利用可能な場合に、前記中央処理ユニットが前記画像処理ユニットに通知することを可能にするための命令を更に含む、請求項９記載のプログラム。
【請求項１１】
前記中央処理ユニット及び前記画像処理ユニットと共に、共有された仮想記憶装置を使用するための命令を更に含む、請求項６記載のプログラム。
【請求項１２】
画像処理ユニット、
該画像処理ユニットに接続された中央処理ユニット、及び、
前記画像処理ユニット及び前記中央処理ユニットによって共有された記憶装置、を有する機器であって、
前記中央処理ユニットは、前記中央処理ユニット上の第一のスレッド及びライブラリを提供して、前記第一のスレッドと画像処理ユニット上の第三のスレッドを同期させるために適合する前記中央処理ユニット上の第二のスレッドを生成し、前記第二のスレッドを用いて、前記画像処理ユニット上の前記第三のスレッドと前記中央処理ユニット上の前記第一のスレッドを同期させる、
機器。
【請求項１３】
前記中央処理ユニット上に画像処理ユニットドライバーを有する、請求項１２記載の機器。
【請求項１４】
前記第二のスレッドは、前記画像処理ユニット上のスレッドのためのミューテックスをロック又はロック解除する、請求項１２記載の機器。
【請求項１５】
ミューテックスが利用可能な場合に、前記中央処理ユニットは前記画像処理ユニットに通知する、請求項１４記載の機器。
【請求項１６】
前記記憶装置は共有された仮想記憶装置である、請求項１２記載の機器。
【請求項１７】
中央処理ユニット、及び、
該中央処理ユニットに接続された記憶装置、を有する機器であって、
前記中央処理ユニットは、画像処理ユニット上のスレッドと前記中央処理ユニット上の第一のスレッドとの間の同期を可能にするための第二のスレッドを立ち上げ、前記第二のスレッドは前記第一のスレッドによって生成される、
機器。
【請求項１８】
前記中央処理ユニットは、前記第二のスレッドを用いて、前記画像処理ユニット上で作動するスレッドのためのミューテックスをロック又はロック解除する、請求項１７記載の機器。
【請求項１９】
ミューテックスが利用可能な場合に、前記中央処理ユニットは前記画像処理ユニットに通知する、請求項１８記載の機器。
【請求項２０】
前記中央処理ユニットに接続された画像処理装置を有する、請求項１７記載の機器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は概して汎用処理装置及び画像処理装置を持つ電子計算機に関する。
【背景技術】
【０００２】
汎用処理ユニット上又は中央処理ユニット（CPU）上で作動しているユーザーアプリケーションによって使用される記憶装置（memory）及び画像処理ユニット（GPU）によって使用される記憶装置は、典型的に別個のものとされる。画像処理ユニットドライバーは、画像処理ユニット上での処理のために使用者スペースからドライバー記憶装置へデータをコピーする。共有仮想記憶装置モデルにおいて、データは画像処理ユニットへコピーされず、代わりに、それは画像処理ユニットと中央処理ユニットの間で共有される。
【０００３】
一般に、マルチスレッドアプリケーションにおいて、共有されたデータはミューテックス（相互排除、mutexes）と呼ばれるロックによって保護される。共有データにアクセスする必要があるそれぞれのスレッドは、他のスレッドがそのミューテックスにアクセスすることを阻止するため、第一にそれぞれの対応するミューテックスをロックしなければならない。このロックは、ロック上での“スピニング”を通じて行うことができるが、この技術は消費電力及び性能の点から効率的ではない。
【０００４】
中央処理ユニットを最適化するため、オペレーティングシステムは、ミューテックスが取得可能となるまでスレッドが休眠状態になることを許可するシステムコールを与え、次にミューテックスがロック解除されたときに他のスレッドに通知する。しかし、この機構は、中央処理装置のコア上で作動するスレッドにのみ機能する。
【図面の簡単な説明】
【０００５】
【図１】図１は本発明の一つの実施形態の模式図である。
【図２】図２は本発明の一つの実施形態によるスレッド及びメモリのモデルの拡大である。
【図３】図３は本発明の一つの実施形態によるページフォールト対処のためのフローチャートである。
【図４】図４は一つの実施形態のシステム図である。
【発明を実施するための形態】
【０００６】
一つの実施形態において、画像処理装置上で作動しているそれぞれのスレッド群のために、中央処理装置上で作動する補助的なシャドウスレッドが生み出されてもよい。画像処理ユニット上で作動しているスレッドがミューテックスをロックする必要があるとき、そのスレッドが他のタスクから解放されるまで待機する必要があるならば、画像処理ユニットは中央処理ユニット上のシャドウスレッドへの要求を送信する。中央処理ユニット上のシャドウスレッドは、オペレーティングシステムへ呼び出された対応するシステムを発する。オペレーティングシステムがシャドウスレッドにロックを与えた場合に、シャドウスレッドは画像処理ユニット上のスレッドに通知を送信する。
【０００７】
本出願において「画像処理ユニット」の語句が用いられているが、画像処理ユニットは単独の集積回路でもよく、また、そうでなくともよいことが理解されるべきである。本発明は画像処理ユニット及び中央処理ユニットが一つの集積回路に統合されている状況に適用可能である。本明細書において使用される、処理装置又は処理ユニットは処理装置（processor）、制御装置（controller）又は副処理装置（coprocessor）であってもよい。
【０００８】
図１を参照すると、ホスト／中央処理ユニット１６は、処理装置を基礎とするシステム１０内の画像処理ユニット１８と通信する。ホスト／中央処理ユニット１６は、ハードウェア組込み型のデバイス又は携帯型のデバイスを含む、如何なる処理装置を基礎とするシステムの一部であってもよい。いくつかの例に言及するならば、携帯型のデバイスの例は携帯電話、ラップトップコンピュータ、タブレットコンピュータ、及び携帯型インターネットデバイスを含む。ホスト／中央処理ユニット１６は、シャドウスレッド２２に制御情報を与えるユーザーアプリケーション２０を含む。シャドウスレッド２２は、次いで同期信号と制御信号の同期を画像処理ユニットドライバー２６と通信する。シャドウスレッド２２はまた、ホストオペレーティングシステム２４と通信する。
【０００９】
図１に示されるように、ユーザーレベル１２はシャドウスレッド２２及びユーザーアプリケーション２０を含む。一方、カーネルレベル１４はホストオペレーティングシステム２４、及び画像処理ユニットドライバー２６を含む。画像処理ユニットドライバー２６は、中央処理ユニット１６内にあるが、画像処理ユニットのドライバーである。
【００１０】
画像処理ユニット１８は、ユーザーレベル１２において、gスレッド（gthread）２８を有する。gスレッド２８は、オペレーティングシステム（pOS）３０に制御メッセージ及び同期メッセージを送信し、オペレーティングシステム３０からメッセージを受信する。gスレッドは画像処理ユニット上で作動するユーザーコードであり、中央処理ユニット上で作動している親スレッドと仮想記憶装置を共有する。オペレーティングシステム３０は、画像処理ユニット上で作動する比較的小さなオペレーティングシステムでよく、画像処理ユニットのエクセプション（例外）に関与している。オペレーティングシステム３０は、一つの例として、ホストオペレーティングシステム２４よりも小さい。
【００１１】
ユーザーアプリケーション２０は、中央処理ユニット１６上で作動するあらゆるユーザープロセスである。ユーザーアプリケーション２０は画像処理ユニット１８上にスレッドを発生させる。
【００１２】
拡張スレッドライブラリ（eXtended  Threaded  Library）又はXTLは画像処理ユニット上のユーザースレッドを作り出し、管理するための拡張機能である。このライブラリは、それぞれのgスレッドのためのシャドウスレッドを作り出し、かつ、同期のためのライブラリ機能を持つ。
【００１３】
ユーザーアプリケーションは、従来のマルチスレッドモデルの拡張機能（例えば、「xthread_create（thread,  attr,  gpu_worker,arg）」）を使用して画像処理ユニットに計算を負荷させる（offload）。
【００１４】
画像処理ユニット上で作り出されたgスレッド又はワーカースレッドは、親スレッドと仮想記憶装置を共有する。それは、全ての標準的なプロセス間の同期機構、例えばミューテックス（Mutex）及びセマフォ（semaphore）における通常のスレッドと同じ様に振る舞う。同時に、新たなシャドウスレッドがホスト／中央処理ユニット１６上に作り出される。このシャドウスレッドは、例外処理ユニットのためのプロキシとして、及び中央処理ユニット上のスレッドと画像処理ユニット上のスレッドの同期ためのプロキシとして働く。
【００１５】
いくつかの実施形態において、親スレッド、ホストシャドウスレッド及び画像処理ユニットのワーカースレッドは、図２に示されるように仮想記憶装置を共有する。ホスト／中央処理ユニット１６は、シャドウスレッド２２のために「xthread_create()」を作り出す親スレッド３２を有する。シャドウスレッド２２は、処理アドレス空間３６内の専用アドレス空間であるシャドウスタックに接続する。親スレッド３２もまた、記憶装置記述子３４、及び処理アドレス空間３６内の専用アドレス空間であるメイン（主）スタックに接続する。記憶装置記述子３４もまた、gスレッドワーカー２８と交信してもよい。gスレッドワーカー２８は、処理アドレス空間３６内のgスレッドコードにも、共有されたデータセクション及び専用のgスレッドスタックにも接続することができる。上段に記載された要素は処理モデル３８に対応し、下段に記載された要素は記憶装置モデルに対応する。
【００１６】
図３を参照して、同期アルゴリズムはハードウェア、ソフトウェア及び／又はファームウェア内に実装されてもよい。ソフトウェアの実施形態において、アルゴリズムは、一時的でない、コンピュータが読み込み可能な媒体例えば光学的、半導体又は磁気的記憶装置に保存された、コンピュータで実行可能な命令として実装されてもよい。図３において、ホストオペレーティングシステム２４、シャドウスレッド２２、中央処理ユニット１６のドライバー２６、及びオペレーティングシステム３０及び画像処理ユニット１８のリング３  ５７が複数の平行かつ鉛直な流路（flow  paths）として示されている。それらの間の相互作用は、概して水平な矢印によって指し示されている。
【００１７】
続いて図３において、カラム５７のブロック６０に指し示されているように、一つの実施形態において、リング３で、gスレッド２８は短い時間区分のスピニングによってユーザースペースからミューテックスを取得することを試みる。ひし形６１で決定されるようにミューテックスが正常に取得された場合、ブロック６２に示されるようにプログラムは継続する。ミューテックスが既に他のスレッドによってロックされたためにミューテックスが取得されなかった場合、オペレーティングシステム３０への信号（“SYSCALL”）が「取得（ACQUIRE）」操作コードと共に生成される。
【００１８】
オペレーティングシステム３０において、信号（SYSCALL）は受信される。オペレーティングシステム３０は、パスホストコマンド（PassHostCommand）と呼ばれるメッセージをドライバーに送信する。ブロック５０に示されるように、パスホストコマンドは「SYSCALL」の操作コード及び「アドレス＋オペレーション」のデータ（a  data  address  plus  operation）を有している。次いで、ブロック５４に示されるように、オペレーティングシステム３０は信号を発しているスレッドを休眠（スリープ）状態に置く。ブロック５６に示されるように、その信号を発しているスレッドはその後アイドル状態となる。
【００１９】
中央処理ユニット１６内のドライバー２６は、転送コマンドを使用してそのメッセージをXスレッド２２に転送する。Xスレッド２２において、転送コマンドは受信される。ブロック４４に示されるように、Xスレッドはドライバーからのこのメッセージを待機している。ブロック４６に示されるように、次いでXスレッドはミューテックスのロックを行い、またホストオペレーティングシステム２４への信号（SYSCALL）を含んでもよい。ブロック４２に示されるように、ホストオペレーティングシステム２４はミューテックスが取得されるまで待機する（すなわち、コンテキストスイッチが存在する）。ミューテックスが取得された後に、Xスレッドは再開実行コマンドをドライバー２６に送信し、それからブロック４８に示されるように、ドライバーからの次のメッセージを受けるまで待機する。
【００２０】
ドライバー２６は再開実行コマンドを受信し、そしてパスGpuコマンド（PassGpuCommand）を画像処理ユニット内のオペレーティングシステム３０へ送信する。ブロック５２に示されるように、パスGpuコマンドはデータを持たず、再開実行の操作コードを含んでもよい。
【００２１】
オペレーティングシステム３０は、ブロック５８に示されるように、スレッドを休眠状態から起こし、再開をSYSCALからgスレッド２８へ送信する。結果として、ブロック６２に示されるように、gスレッド２８は稼働を続ける。シャドウスレッドはまた、ミューテックスを解放するために使用されてもよい。
【００２２】
図４に示されるコンピュータシステム１３０は、ハードドライブ１３４、及び母線（bus）１０４によってチップセットコアロジック１１０に接続された取り外し可能な媒体１３６を有してもよい。キーボード及びマウス１２０、又はその他の従来の構成要素は、母線１０８を介してチップセットコアロジックに接続されてもよい。一つの実施形態において、コアロジックは、母線１０５を介して画像処理装置１１２に接続してもよく、また、中央処理装置１００に接続してもよい。画像処理装置１１２はまた、母線１０６によってフレームバッファー１１４に接続されてもよい。フレームバッファー１１４は、母線１０７によって表示画面１１８に接続されてもよい。一つの実施形態において、画像処理装置１１２は、単一命令複数データ（SIMD）アーキテクチャーを使用するマルチスレッド、マルチコアの並列プロセッサーであってもよい。
【００２３】
ソフトウェアへの実装の場合、関連するコードが、あらゆる適切な半導体、磁気的、又は光学的な記憶装置に保存されてもよい。その適切な記憶装置は、主記憶装置１３２（１３９に指し示されている）又はあらゆる画像処理装置に適用可能な記憶装置を含む。従って、一つの実施形態において、図３のシークエンスを行うためのコードは、一時的でない機器又はコンピュータが読み込み可能な媒体、例えば記憶装置１３２、及び／又は画像処理装置１１２、及び／又は中央処理装置１００に保存されてもよい。また、一つの実施形態において、コードは、処理装置１００、及び／又は画像処理装置１１２によって実行されてもよい。
【００２４】
図３はフローチャートである。いくつかの実施形態において、このフローチャートに記述されたシークエンスはハードウェア、ソフトウェア、又はファームウェアに実装することができる。ソフトウェアの実施形態において、コンピュータが読み込み可能な一時的でない媒体、例えば半導体記憶装置、磁気的記憶装置、又は光学的記憶装置が、命令を保存するために使用することができ、また、図３のシークエンスを実施するために処理装置によって実行されることができる。
【００２５】
本明細書において記述された画像処理技術は、様々なハードウェアアーキテクチャーにおいて実施されてもよい。例えば、画像機能性は一つのチップセットに統合されてもよい。代替的に、別個の画像処理装置が使用されてもよい。更に他の実施形態として、画像機能はマルチコア処理装置を含む汎用処理装置によって実施されてもよい。
【００２６】
本明細書を通じて、「一つの実施形態」又は「ある実施形態」についての参照は、実施形態との関係において記述された特定の特徴、構造又は特性が、少なくとも一つの本発明の範囲内の実施方法に含まれることを意味する。従って、「一つの実施形態」又は「ある実施形態」の語句の出現は必ずしも同一の実施形態を参照するものではない。さらに、特定の特徴、構造又は特性は、例示された特定の実施形態以外の他の適切な形式において設けることができ。全てのそのような形式は本発明の特許請求範囲の範囲内でありうる。
【００２７】
本発明は限られた数の実施形態に関して記述されたが、当業者はそれから多くの改良及び変更を理解することであろう。添付の特許請求の範囲が、本発明の本来の精神及び範囲に含まれるような全ての改良及び変更を包含することが意図されている。
【図１】
0005933000.tif 000002
【図２】
0005933000.tif 000003
【図３】
0005933000.tif 000004
【図４】
0005933000.tif 000005