(57)【要約】  本発明は、特に、複数の入力／出力コントローラと補助演算ユニットとを備えるマイクロプロセッサアーキテクチャを有するシステムにおけるソフトウェアアプリケーションの実行の最適化に関する。システムの接続形態を解明（３００）した後で、補助演算ユニットによって実行されるべき機能への呼び出しが傍受（３０５）される。前記呼び出しを生成した主プロセッサが特定（３１０）される。次いで、補助演算ユニットが、特定された主プロセッサおよび前記システムの接続形態に従って特定（３１５）される。好都合には、このようにして特定される補助演算ユニットが、特定された主プロセッサに最も近い補助演算ユニットである。次いで、呼び出しが、特定された補助演算ユニットにおける呼び出された機能の少なくとも一部の実行を強いるように変更（３２０）される。
2013506898.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも１つの複数の主プロセッサ（１０５、２０５）と、複数の補助演算ユニット（１２０、２２０）と、複数の入力／出力コントローラ（１１５、２１５）とを備えており、前記複数の入力／出力コントローラの各々の入力／出力コントローラが、前記複数の主プロセッサのうちの少なくとも１つの主プロセッサへ接続される、前記複数の補助演算ユニットの各々の補助演算ユニットが、前記複数の入力／出力コントローラのうちの入力／出力コントローラへ接続されているシステムにおいて実行され、補助演算ユニットによって実行されるべき少なくとも１つの機能への少なくとも１つの呼び出しを含んでいるソフトウェアアプリケーションの実行を最適化するための方法であって、
前記システムの接続形態を判定するステップ（３００）と、
少なくとも１つの補助演算ユニットによって実行されるべき前記少なくとも１つの機能への前記少なくとも１つの呼び出しを傍受するステップ（３０５）と、
前記少なくとも１つの呼び出しを生成した主プロセッサを特定するステップ（３１０）と、
前記特定された主プロセッサおよび前記システムの前記接続形態に従って特定する、前記複数の補助演算ユニットのうちの少なくとも１つの補助演算ユニットを特定するステップ（３１５）と、
前記少なくとも１つの特定された補助演算ユニットにおける前記少なくとも１つの機能の少なくとも一部の実行を強いるように、前記少なくとも１つの呼び出しを変更するステップ（３２０）と
を含むことを特徴とする方法。
【請求項２】
前記システムの前記接続形態を判定する前記ステップが、前記主プロセッサのうちの少なくとも１つに関する少なくとも１つのリストを制定するステップを含んでおり、前記リストが、前記補助演算ユニットのうちの少なくとも１つの少なくとも１つの識別子、ならびに前記主プロセッサのうちの前記少なくとも１つと前記少なくとも１つの識別子に対応する前記補助演算ユニットのうちの前記少なくとも１つとの間の距離の測定を含んでいる請求項１に記載の方法。
【請求項３】
前記少なくとも１つの特定された補助演算ユニットについて利用可能性をテストするステップ（４１０）をさらに備えている請求項１または２に記載の方法。
【請求項４】
前記少なくとも１つの特定された補助演算ユニットが、前記少なくとも１つの呼び出しを生成した前記主プロセッサに最も近い利用可能な補助演算ユニットである請求項３に記載の方法。
【請求項５】
前記接続形態が、前記システムに実装されたオペレーティングシステムに特有の情報に従って判定される請求項１から４のいずれか一項に記載の方法。
【請求項６】
前記接続形態を判定する前記ステップが、
前記複数の補助演算ユニットのうちの少なくとも１つの補助演算ユニットを特定するステップと、
前記接続形態を判定する前記ステップにおいて特定された前記少なくとも１つの補助演算ユニットが接続された少なくとも１つのバスを特定するステップと、
前記複数の主プロセッサのうちで、前記少なくとも１つの特定されたバスに接続された少なくとも１つの主プロセッサを特定するステップと
を含んでいる請求項５に記載の方法。
【請求項７】
前記少なくとも１つの呼び出しを変更する前記ステップが、前記少なくとも１つの呼び出しの処理動作の時点で実行される機能をオーバーロードするステップを含んでいる請求項１から６のいずれか一項に記載の方法。
【請求項８】
前記ステップが、前記ソフトウェア機能の実行に先立って動的にロードされるライブラリに実装される請求項１から７のいずれか一項に記載の方法。
【請求項９】
コンピュータ上で実行されたときに請求項１から８のいずれか一項に記載の方法の各ステップを実行するように構成されたインストラクションを含んでいるコンピュータプログラム。
【請求項１０】
請求項１から８のいずれか一項に記載の方法の各ステップを実行するように構成された手段を備えている装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチプロセッサアーキテクチャにおける演算の割り当てに関し、さらに詳しくは、複数の入力／出力コントローラと補助演算ユニット（グラフィックプロセッサなど）とを備えるマルチプロセッサアーキテクチャにおいてソフトウェアアプリケーションの実行を最適化するための方法および装置に関する。
【背景技術】
【０００２】
マイクロプロセッサに関する物理的な制約ゆえに、マイクロプロセッサの性能に限界があるため、並列演算の実行を可能にする複数のマイクロプロセッサの実装にもとづくアーキテクチャが、開発されてきている。これらのマルチプロセッサアーキテクチャは、大量の演算を使用して多数のアプリケーションおよび／または段階へ分割されたアプリケーションの実行を可能にする。
【０００３】
このようなアーキテクチャに実装されたプロセッサは、一般に、スレッドと称される複雑なプロセスの並列処理が可能である。
【０００４】
さらには、特定のプロセッサが、特にグラフィックデータの表示および操作の動作のために、特定のニーズに合致するように開発されている。これらのプロセッサは、グラフィック処理ユニットまたはＧＰＵと称されるが、並列にて大規模に動作し、特に多数の単純なプロセスを同時に処理することを可能にする。それらは、反復的な演算の処理にきわめて有効である。しかしながら、それらのプロセッサは、きわめて特定的なニーズに合致するように開発されてきているが、その一部は、今日では、非特定的な演算の実行も可能にしている。例として、ｎＶｉｄｉａ社によって開発されたＣＵＤＡテクノロジ（ＣＵＤＡは商標である）が、複雑な演算の問題に対する１つの回答である。
【０００５】
すなわち、ＨＰＣコンピュータ（ＨＰＣは、高性能演算（Ｈｉｇｈ−Ｐｅｒｆｏｒｍａｎｃｅ  Ｃｏｍｐｕｔｉｎｇ）を表わす）の性能を向上させるために、従来からのプロセッサをグラフィックプロセッサなどの特定のプロセッサと組み合わせるアーキテクチャが開発されてきている。
【０００６】
これらの異なる種類のプロセッサの実装は、それらおよびメモリの間の高品質なデータ転送を必要とする。したがって、入力／出力コントローラが使用される。入力／出力コントローラは、例えば、標準的なプロセッサの配線とＰＣＩ−ｅ型（ＰＣＩ−ｅは、ペリフェラルコンポーネントインターコネクトエクスプレスの略語である）のバスなどの入力／出力バスとの間のブリッジを提供するチップセット（プロセッサ、メモリ、および周辺機器の間のデジタルデータストリームを管理するための統合型の電子部品）という電子部品である。
【０００７】
図１は、複数の入力／出力コントローラおよびグラフィックプロセッサを備えているそのようなマルチプロセッサアーキテクチャの例を示している。
【０００８】
図示のとおり、このシステム１００は、参照符号１０５−１〜１０５−４（包括的には参照符号１０５）で示されている４つの主プロセッサ、例えば、Ｉｎｔｅｌ社によって開発されたＮｅｈａｌｅｍという型式（Ｎｅｈａｌｅｍは商標である）のプロセッサを備えている。ここで、これらのプロセッサの各々は、図式的に表わされている４つのコアを備えている（クアッドコアプロセッサ）。例として、プロセッサ１０５−１が、コア１１０−１１〜１１０−１４を備えている。
【０００９】
この例によれば、各々の主プロセッサが、例えばＱＰＩ方式のリンク（ＱＰＩは、クイックパスインターコネクトの略語である）などの高速通信リンクを介して他のすべての主プロセッサへ接続されている。
【００１０】
さらにシステム１００は、Ｉ／ＯハブまたはＩＯＨ（入力／出力ハブの略語である）とも称される２つの入力／出力コントローラ１１５−１および１１５−２を備えている。ここで、各々のＩＯＨが、２つの主プロセッサに接続されている。すなわち、ＩＯＨ１１５−１が、プロセッサ１０５−１および１０５−４へ接続される一方で、ＩＯＨ１１５−２が、プロセッサ１０５−２および１０５−３へ接続されている。ＩＯＨとプロセッサとの間の接続は、例えばＱＰＩ方式である。
【００１１】
さらに、各々のＩＯＨが、特に特有のカード上にまとめられていてもよい１つ以上のグラフィックプロセッサへ接続されている。ここでは、ＩＯＨ１１５−１および１１５−２が、それぞれグラフィックプロセッサ１２０−１および１２０−２へ接続されている。ＩＯＨと一式のグラフィックプロセッサとの間の通信リンクは、例えばＰＣＩ−ｅ型である。
【００１２】
このようにして、このようなアーキテクチャは、プロセッサ１０５−１および１０５−４がグラフィックプロセッサ１２０−１に直接アクセスすることを可能にし、プロセッサ１０５−２および１０５−３がグラフィックプロセッサ１２０−２に直接アクセスすることを可能にする。さらに、プロセッサ１０５−１および１０５−４が、プロセッサ１０５−２および１０５−３の相互接続を介してグラフィックプロセッサ１２０−２に間接的にアクセスすることができる。同様に、プロセッサ１０５−２および１０５−３が、プロセッサ１０５−１および１０５−４の相互接続を介してグラフィックプロセッサ１２０−１にアクセスすることができる。
【００１３】
このようなシステムが実装されるとき、主プロセッサによって実行されるアプリケーションからのグラフィックプロセッサによって実行される機能の呼び出しを管理するために、通常はライブラリが使用される。特に、このライブラリの目的は、それらの機能を実行すべきグラフィックプロセッサ（複数可）を決定することにある。
【００１４】
ここで、グラフィックプロセッサを、ユーザが、それらの性能またはバージョンなどといった特定の特徴に従って特定できることが明らかになっている。すなわち、グラフィックプロセッサによって実行される機能への呼び出しを管理するために使用されるライブラリを通じて、ユーザは、その情報を使用し、実行すべき機能に応じてそれらのグラフィックプロセッサを選択することができる。
【発明の概要】
【発明が解決しようとする課題】
【００１５】
これらの技術的解決策は、有効であることが明らかになっているが、それでもなお、特にシミュレーションの分野における幾多のアプリケーションが必要とするますます増大する演算の必要性を満たすために、それらを改善するというニーズが常に存在し、これを本発明が提供する。
【課題を解決するための手段】
【００１６】
本発明は、少なくとも１つの複数の主プロセッサと、複数の補助演算ユニットと、複数の入力／出力コントローラとを備えており、前記複数の入力／出力コントローラの各々の入力／出力コントローラが、前記複数の主プロセッサのうちの少なくとも１つの主プロセッサへ接続され、前記複数の補助演算ユニットの各々の補助演算ユニットが、前記複数の入力／出力コントローラのうちの入力／出力コントローラへ接続されているシステムにおいて実行される、補助演算ユニットによって実行されるべき少なくとも１つの機能への少なくとも１つの呼び出しを含んでいるソフトウェアアプリケーションの実行を最適化するための方法であって、
前記システムの接続形態を判定するステップと、
少なくとも１つの補助演算ユニットによって実行されるべき前記少なくとも１つの機能への前記少なくとも１つの呼び出しを傍受するステップと、
前記少なくとも１つの呼び出しを生成した主プロセッサを特定するステップと、
前記特定された主プロセッサおよび前記システムの前記接続形態に従って特定する、前記複数の補助演算ユニットのうちの少なくとも１つの補助演算ユニットを特定するステップと、
前記少なくとも１つの特定された補助演算ユニットにおける前記少なくとも１つの機能の少なくとも一部の実行を強いるように、前記少なくとも１つの呼び出しを変更するステップと
を含んでいる方法に関する。
【００１７】
このようにして、本発明による方法は、機能の実行の割り当てを最適にするために、呼び出された機能を実行すべき補助演算ユニットを、システムの接続形態およびそれらの呼び出しの起点に位置する主プロセッサの前記接続形態における場所に従って、選択することを可能にする。
【００１８】
特定の実施形態によれば、前記システムの前記接続形態を判定するステップが、前記主プロセッサのうちの少なくとも１つに関する少なくとも１つのリストを制定するステップを含み、前記リストが、前記補助演算ユニットのうちの少なくとも１つの少なくとも１つの識別子、ならびに前記主プロセッサのうちの前記少なくとも１つと、前記少なくとも１つの識別子に対応する前記補助演算ユニットのうちの前記少なくとも１つとの間の距離の測定を含む。そのようなリストは、補助演算ユニットを、特定の主プロセッサおよびこの主プロセッサと補助演算ユニットとの距離にもとづいて迅速に特定することを可能にする。
【００１９】
好都合には、この方法が、呼び出された機能の実行に利用することができる補助演算ユニットを選択するために、前記少なくとも１つの特定された補助演算ユニットについて利用可能性をテストするステップをさらに備える。
【００２０】
特定の実施形態によれば、前記少なくとも１つの特定された補助演算ユニットが、前記少なくとも１つの呼び出しを生成した前記主プロセッサに最も近い利用可能な補助演算ユニットである。これにより、主プロセッサと主プロセッサによって呼び出された機能を実行する補助演算ユニットとの間の距離によって引き起こされるレイテンシ時間が、最小にされる。
【００２１】
前記接続形態は、好ましくは、前記システムに実装されたオペレーティングシステムに特有の情報に従って判定される。これにより、システムの接続形態を、追加の情報を必要とせずに判定することができる。
【００２２】
特定の実施形態によれば、前記接続形態を判定する前記ステップが、
前記複数の補助演算ユニットのうちの少なくとも１つの補助演算ユニットを特定するステップと、
前記接続形態を判定する前記ステップにおいて特定された前記少なくとも１つの補助演算ユニットが接続された少なくとも１つのバスを特定するステップと、
前記複数の主プロセッサのうちで、前記少なくとも１つの特定されたバスに接続された少なくとも１つの主プロセッサを特定するステップと
を含む。
【００２３】
したがって、システムの接続形態を、ＬＩＮＵＸ（登録商標）などのオペレーティングシステムに特有の情報から判定することができる。
【００２４】
さらに特定の実施形態によれば、前記少なくとも１つの呼び出しを変更する前記ステップが、前記少なくとも１つの呼び出しの処理動作の時点で実行される機能をオーバーロード（ｏｖｅｒｌｏａｄｉｎｇ）するステップを含む。このようにして、本発明を、システムによって実行されるソフトウェアアプリケーションに関していかなる特定の変更も必要とせずに容易に実行することができる。
【００２５】
さらに特定の実施形態によれば、すでに述べたステップが、前記ソフトウェアアプリケーションの実行に先立って動的にロードされるライブラリに実装される。結果として、本発明が、きわめて単純に実現される。
【００２６】
さらに本発明は、コンピュータ上で実行されたときにすでに述べた方法の各々のステップを実行するように構成されたインストラクションを含んでいるコンピュータプログラム、ならびにすでに述べた方法の各々のステップを実施するように構成された手段を備えている装置に関する。
【００２７】
そのようなコンピュータプログラムおよび装置によってもたらされる利点は、上述した利点と同様である。
【００２８】
本発明の他の利点、目的、および特徴が、添付の図面に関連してあくまでも本発明を限定するものではない例として提示される以下の詳細な説明から、明らかになる。
【図面の簡単な説明】
【００２９】
【図１】複数の入力／出力コントローラおよびグラフィックプロセッサを備えている単純なマルチプロセッサアーキテクチャであって、本発明を実施することができるマルチプロセッサアーキテクチャの例を示している。
【図２】複数の入力／出力コントローラおよびグラフィックプロセッサを備えている複雑なマルチプロセッサアーキテクチャであって、本発明を実施することができるマルチプロセッサアーキテクチャの例を示している。
【図３】補助演算ユニットによって実行されるべき機能が呼び出されたときに特定の補助演算ユニットの選択を強いるように実行される方法の例について、特定の複数のステップを図式的に示している。
【図４】図３に示した補助演算ユニットを特定するステップをさらに詳しく示している。
【発明を実施するための形態】
【００３０】
ただ１つの入力／出力コントローラ（あるいは、入力／出力ハブ、略してＩＯＨ）が演算システムにおいて使用される場合、そのＩＯＨに接続された主プロセッサ（あるいは、中央演算ユニット、略してＣＰＵ）は、同じ速度でそれに接続された補助演算ユニット、例えばグラフィックプロセッサ（あるいは、グラフィクスプロセシングユニット、略してＧＰＵ）にアクセスする。しかしながら、複数のＩＯＨが存在する場合、演算システムの接続形態に応じて、複数の主プロセッサが所与の補助演算ユニットに同じ速度でアクセスしないことも可能である。
【００３１】
例えば、図１を参照すると、ＣＰＵ１０５−１および１０５−４の両方が、ＩＯＨ１１５−１を介して直接接続されたＧＰＵ１２０−１に同じ速度でアクセスし、さらにＣＰＵ１０５−２および１０５−３の両方が、ＩＯＨ１１５−１を介して間接的に接続されたＧＰＵ１２０−１に同じ速度でアクセスする場合、ＣＰＵ１０５−１および１０５−４は、ＣＰＵ１０５−２および１０５−３と同じ速度でＧＰＵ１２０−１にアクセスするわけではない。
【００３２】
したがって、演算システムの性能の低下を避けるために、ＩＯＨに直接接続された主プロセッサ上で実行されるアプリケーションまたはプロセスは、可能な限り、そのＩＯＨに接続された補助演算ユニットと通信しなければならないことが明らかである。この問題は、図２に示されているようなより大規模なシステムにはなおさら当てはまる。
【００３３】
図２に示されているように、ここでは、演算システムが、同じアーキテクチャを有する４つのサブシステムを備えており、各々のサブシステムが、複数の主プロセッサと、複数の補助演算ユニット（ここでは、グラフィクスプロセッサ）とを備えている。
【００３４】
例として、サブシステム２００−１が、参照符号２０５−１〜２０５−４で指し示されている４つの主プロセッサ、例えば、Ｎｅｈａｌｅｍという型式のプロセッサを備えている。ここでは、各々の主プロセッサが、例えばＱＰＩ方式のリンク（ＱＰＩは、クイックパスインターコネクトの略語である）などの高速通信リンクを介して自身のサブグループの残りのすべての主プロセッサへ接続されている。
【００３５】
サブシステム２００−１は、すべての主プロセッサ２０５−１〜２０５−４が接続され、さらに２つのＩＯＨ２１５−１および２１５−２も接続された通信コンポーネント２１０をさらに備えている。そのような通信コンポーネントは、例えばＢＣＳ型（ＢＣＳは、ブルコヒーレントスイッチの略語である）のコンポーネントである。
【００３６】
さらに、各々のＩＯＨは、１つ以上のグラフィクスプロセッサへ接続されている。ここでは、ＩＯＨ２１５−１および２１５−２が、グラフィクスプロセッサ２２０−１および２２０−２へそれぞれ接続されている。ＩＯＨとグラフィックプロセッサとの間の通信リンクは、例えばＰＣＩ−ｅ型（ＰＣＩ−ｅは、ペリフェラルコンポーネントインターコネクトエクスプレスの略語である）である。
【００３７】
さらに、ＢＣＳ型の複数のコンポーネントを、例えばＸＣＳＩ形式（ＸＣＳＩは、拡張コモンシステムインターフェイスの略語である）のポイントトゥポイント接続モードにてつなぎ合わせることができる。したがって、サブシステムをＸＣＳＩ形式のネットワーク２２５を介してつなぎ合わせることができる。
【００３８】
このように、このアーキテクチャによれば、各々のプロセッサが、各々のグラフィックプロセッサの機能を呼び出すことができる。
【００３９】
しかしながら、すでに述べたように、すべてのＣＰＵがすべてのＧＰＵに同じ速度でアクセスするわけではないことが、明らかである。例えば、４つのＣＰＵ２０５−１〜２０５−４のすべてが、ＩＯＨ２１５−１および２１５−２ならびに通信コンポーネント２１０を介して直接接続されたＧＰＵ２２０−１および２２０−２に同じ速度でアクセスする一方で、サブシステム２００−３のＣＰＵ２０５’−１は、通信コンポーネント２１０’およびネットワーク２２５によって持ち込まれるレイテンシゆえに、より低い速度でこれらのＧＰＵにアクセスする。
【００４０】
図１および図２に示されているような演算システムの主プロセッサにおいて実行されるプロセスまたはアプリケーションが、補助演算ユニットによって実行されるべき機能を呼び出すとき、そのようなシステムのオペレーティングシステムのカーネルが、例えば前もってロードされるライブラリを介して、この呼び出しを処理する。ライブラリの役割は、特に、呼び出しされた機能の実行を可能にするパラメータを決定することにあり、特にこの機能を実行すべき補助演算ユニット（複数可）を決定することにある。
【００４１】
本発明は、特に、呼び出された機能（複数可）を実行する補助演算ユニット（複数可）の選択を強いるべく、そのような呼び出しを傍受することに関する。換言すると、主プロセッサから到来する機能の呼び出しであって、その機能を実行するように補助演算ユニットを予約することに向けられた呼び出しが、そのような補助演算ユニットの選択を、呼び出し元の主プロセッサに可能な限り近い補助演算ユニットになり、好ましくは呼び出し元の主プロセッサに接続された同じ入力／出力コントローラに接続された補助演算ユニットになるように強いるために傍受される。
【００４２】
図３は、補助演算ユニットによって実行されるべき機能が呼び出されたときに特定の補助演算ユニットの選択を強いるように実行される方法の例について、特定の複数のステップを図式的に示している。
【００４３】
図示のとおり、第１のステップ（ステップ３００）は、特に主プロセッサ、補助演算ユニット、および入力／出力コントローラの間のリンクを判定するために、演算システムの接続形態を判定することからなる。
【００４４】
このステップの一部は、特に、ログファイルと一般に称される演算システムに実装されたオペレーティングシステムのカーネルの診断メッセージまたは実行ジャーナルの分析からなることができる。また、オペレーティングシステムのデータの階層構造（ファイルシステム）の特定のデータの調査からなることができる。
【００４５】
したがって、例えばＬＩＮＵＸオペレーティングシステム（ＬＩＮＵＸは商標である）のデータの階層構造において、特に／ｓｙｓおよび／ｐｒｏｃという名称で知られる場所、すなわちシステムについての情報を含んでいる疑似ファイルが存在する。それらは、オペレーティングシステムのカーネルによってもたらされ、演算システムの接続形態を判定することを可能にする。
【００４６】
例として、演算システムの接続形態を、
補助演算ユニットを特定し、
演算システムのバスを分析して補助演算ユニットが接続されたバス（および入力／出力コントローラ）を特定し、
補助演算ユニットが接続されたバスへ接続された主プロセッサを特定する
ことによって決定することができる。
【００４７】
ｎＶｉｄｉａの補助演算ユニットの特定を、例えば、ｎＶｉｄｉａ形式の各々の周辺機器の周辺機器ドライバに関し、したがってそれらの周辺機器そのものに関する表示が保存される以下の場所
／ｐｒｏｃ／ｄｒｉｖｅｒ／ｎｖｉｄｉａ／ｃａｒｄｓ／
へ供給される情報にもとづいて実行することができる。
【００４８】
ここで、ファイルシステム／ｐｒｏｃが、ハードウェア、カーネルの構成、および実行中のプロセスについての情報へのアクセスを可能にするカーネルの疑似ファイルシステムを含んでいるディレクトリであることが明らかである。
【００４９】
したがって、この種のディレクトリを調査することによって、演算システムのすべての補助演算ユニットを特定することが可能である。
【００５０】
同様に、演算システムのバスの構成にアクセスし、前もって特定された補助演算ユニットが接続されたバスを特定することが可能である。この分析を、例えば、使用されるバスに関し、したがって使用される入力／出力コントローラに関する情報が保存される以下の場所
／ｓｙｓ／ｂｕｓ／ｐｃｉ／ｄｅｖｉｃｅｓ／００００：ｘｘｘｘｘ
へ供給される情報にもとづいて実行することができる。
【００５１】
ここで、ファイルシステム／ｓｙｓが、カーネルのすべてのオブジェクトについての情報を得ることを可能にし、特に演算システムのすべての周辺機器についての情報を得ることを可能にする周辺機器マネージャのための疑似ファイルシステムを特に含んでいるディレクトリであることが明らかである。ファイルシステム／ｓｙｓは、ファイルシステム／ｐｒｏｃにより一般的に定義された特徴に特有の特定の情報を含んでいる。
【００５２】
最後に、前もって特定されたバスへ接続された主プロセッサを、例えば呼び出し元のアプリケーションによって使用されているプロセッサに関する情報が存在する以下の場所
／ｐｒｏｃ／ｓｅｌｆ／ｓｔａｔ
へ供給される情報にもとづいて決定することができる。
【００５３】
同様に、主プロセッサの間の接続を判定することができ、したがって各々の補助演算ユニットと各々の主プロセッサとの間の距離を表わす構造を確立することができる。そのような構造を、例えば表に保存することができる。そのような表の例が、付表（表１）に提示されている。この表は、図１に示した演算システムの接続形態に対応している。
【００５４】
すなわち、表に示されているように、主プロセッサ１０５−１が補助演算ユニット１２０−１に直接接続（距離がゼロ）されている一方で、この主プロセッサは、或る主プロセッサを介して補助演算ユニット１２０−２へ間接的に接続（１に等しい距離）されている。
【００５５】
好都合には、この表は、主プロセッサが選択されたときに最も近い補助演算ユニットを直接特定できるように、補助演算ユニットが距離の昇順によって分類されて順序付けされたリストの形態に構成される。表１にもとづくそのような分類されたリストの例が、付表（表２）に示されている。すなわち、この例によれば、ここで主プロセッサ１０５−１が選択されたとき、最も近い補助演算ユニットが補助演算ユニット１２０−１であり、次が補助演算ユニット１２０−２であることが、最初の行を読み取ることによって即座に明らかとなる。演算システムの接続形態を定めるために、他の方法も使用可能である。特に、その接続形態を、ファイルに静的に定めることができる。
【００５６】
次のステップ（ステップ３０５）は、ＧＰＵなどの補助演算ユニットによって実行されるべき機能について、主プロセッサによって実行されるプロセスまたはアプリケーションによる呼び出しを検出し、傍受することに関する。
【００５７】
そのような呼び出しが検出および傍受されたとき、呼び出し元の主プロセッサが特定される（ステップ３１０）。この特定は、特に、ファイル／ｐｒｏｃ／ｓｅｌｆ／ｓｔａｔに保存されたデータを参照することによって実行できる。
【００５８】
このステップに、呼び出しされた機能を実行するために利用することが可能であり、先に特定された主プロセッサから所定の距離に（好ましくは、できるだけ近くに）位置している少なくとも１つの補助演算ユニットのリストを決定するステップ（ステップ３１５）が続く。
【００５９】
たとえ一般論として、目的が、補助演算ユニットによって実行されるべき機能の呼び出し元の主プロセッサに最も近い利用可能な補助演算ユニットの特定であっても、複数の補助演算ユニットが必要とされてもよい。この場合、特定される補助演算ユニットの数は、呼び出された機能（複数可）の性質に依存することができ、すなわち機能（複数可）の実行に必要な補助演算ユニットの数に依存することができる。
【００６０】
さらに、最も近い補助演算ユニットを、後に呼び出される機能の実行に使用できるように残しておくために、所与の時点において選択しないことも可能であることは明らかである。
【００６１】
先に決定されたとおりの演算システムの接続形態が、呼び出し元の主プロセッサの識別子に従って、呼び出された機能（複数可）を実行するために使用されるべき補助演算ユニット（複数可）を特定するために使用される。
【００６２】
これらの目的のために、最初にまず主プロセッサが特定され、そこからその主プロセッサへ接続された補助演算ユニットが、それぞれの距離とともに導き出される。これには、補助演算ユニットの順序付けされたリストを含むことができる。この情報は、例えば付表に提示した表２と同様の表を使用して、決定された接続形態から直接得ることができる。好ましい実施形態によれば、補助演算ユニットが、例えば補助演算ユニットの順序付けされたリストの順番にしたがって分析され、最も近い利用可能な補助演算ユニット（複数可）が特定される。
【００６３】
このステップ３１５の実施の例が、図４に詳しく示されている。
【００６４】
補助演算ユニットのリストにおける指数を表わしている変数ｉをゼロに設定（ステップ４００）した後で、特定された主プロセッサにとってアクセスできる補助演算ユニットの順序付けされたリストが決定される（ステップ４０５）。そのようなリストは、好ましくは、付表に提示した表２を参照して説明したとおりにあらかじめ決定される。次いで、順序付けされたリストにおいて指数ｉを有する補助演算ユニットが利用可能であるか否かを判断するためのテストが実行される（ステップ４１０）。利用可能でない場合、指数ｉが１だけ増やされ（ステップ４１５）、先のテストが繰り返される。反対に、指数ｉを有する補助演算ユニットが利用可能である場合、その補助演算ユニットが、主プロセッサによって呼び出された機能を実行するために選択される。
【００６５】
複数の補助演算ユニットが必要である場合、必要な数の補助演算ユニットが得られるまで、ステップ４１０および４１５が繰り返される。
【００６６】
当然ながら、複数の補助演算ユニットを選択すべき場合、それらを、選択された主プロセッサに最も近くなるように選択でき、すべてが選択されたプロセッサに可能な限り近い同じ距離になるように選択でき、あるいは選択されたプロセッサからの同じ所定の距離になるように選択することができる。
【００６７】
例として、先に図１を参照して定めた接続形態によれば、呼び出し元のＣＰＵがＣＰＵ１０５−１である場合、ＧＰＵの順序付けされたリストが、１２０−１、１２０−２であると導き出される。このリストにもとづき、最初のＧＰＵ、すなわち最も近いＧＰＵ１２０−１について、利用可能であるか否かを判定するためのテストが実行される。否である場合、同様のテストが次の補助演算ユニットについて実行され、すなわち、ここでは補助演算ユニット１２０−２について実行される。利用可能である場合、その補助演算ユニットが選択される。
【００６８】
このようにして補助演算ユニット（複数可）が決定されると、呼び出しが、送信（ステップ３２５）の前に変更（ステップ３２０）される。
【００６９】
呼び出しの変更は、ここでは、例えば呼び出された機能を実行する補助演算ユニットを選択するように機能する関数ｃｕｄａＳｅｔＤｅｖｉｃｅ（）を呼び出すことによって補助演算ユニットの属性の呼び出し（ａｔｔｒｉｂｕｔｉｏｎ  ｃａｌｌ）をオーバーロードするライブラリのローディングからなる。
【００７０】
より詳しくは、ここでは関数ｃｕｄａＳｅｔＤｅｖｉｃｅ（）が傍受され、特定された補助演算ユニット、例えば、最も近い補助演算ユニットに帰することを可能にするパラメータで呼び出される。
【００７１】
すでに述べたステップ（ステップ３０５〜３２５）が、他の機能を他の補助演算ユニットにおいて実行させる後続の呼び出しを処理するために繰り返される（補助演算ユニットがプロセスに属する場合、図３を参照して説明した機能は、その補助演算ユニットへの各々の呼び出しについて再び実行されるわけではない）。このプロセスが、呼び出しが生成されうる限りにおいて繰り返される。
【００７２】
特定の実施形態によれば、図３を参照して説明したアルゴリズムを実行するように構成されたライブラリが、補助演算ユニットにおいて実行される機能を呼び出すアプリケーションの実行に先立って、例えば環境変数ＬＤ＿ＰＲＥＬＯＡＤを使用して動的に生成およびロードされる。ここで、環境変数ＬＤ＿ＰＲＥＬＯＡＤが、ソフトウェアアプリケーションの実行においてさらなるライブラリのローディングを強いることを可能にすることに注意すべきである。そのようなライブラリは、機能が補助演算ユニットにおいて実行されるべき場合に、実行される機能の呼び出しのオーバーロードを可能にする。
【００７３】
すなわち、補助演算ユニットによって実行される機能への呼び出しを傍受し、システムの接続形態に従ってそれらの機能の実行のための場所を強制するようにそれらの呼び出しを変更することを目的とするライブラリを使用することで、それらのソフトウェアアプリケーションの実行を、それらを変更することなく加速させることができる。
【００７４】
当然ながら、個々のニーズを満たすために、当業者であれば、以上の説明について変更を行うことが可能であろう。特に、補助演算ユニットが、特にグラフィックプロセッサであってもよい場合に、ＦＰＧＡ（フィールドプログラマブルゲートアレイの略語である）またはＡＳＩＣ（特定用途向け集積回路の略語である）などの特定の回路を使用することも可能である。
付表
【００７５】
【表１】
2013506898.tif 000003
【００７６】
【表２】
2013506898.tif 000004
【図１】
2013506898.tif 000005
【図２】
2013506898.tif 000006
【図３】
2013506898.tif 000007
【図４】
2013506898.tif 000008
【国際調査報告】
2013506898.tif 000009
2013506898.tif 000010
2013506898.tif 000011
2013506898.tif 000012
2013506898.tif 000013
2013506898.tif 000014