(57)【要約】  システムが備えるプロセッサのリソースを最大限に使用し、処理能力を向上させることができるプログラム変換装置を提供する。特定の処理について、第１のプロセッサが備える第１のリソースの第１の使用量と第２のプロセッサが備える第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式指定プログラムを含む対象プログラム中の、部分プログラムの範囲を判定する特定処理判定手段と、部分プログラムを、使用比率を第１の比率とは異なる第２の比率として併用して動作する第２の実行方式指定プログラムに変換する処理変換手段を備える。
2014002412.tif 000002
【特許請求の範囲】
【請求項１】
特定の処理について、第１のプロセッサが備える第１のリソースの第１の使用量と第２のプロセッサが備える第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式指定プログラムを含む対象プログラム中の、前記部分プログラムの範囲を判定する特定処理判定手段と、
前記部分プログラムを、前記使用比率を前記第１の比率とは異なる第２の比率として併用して動作する第２の実行方式指定プログラムに変換し、変換後プログラムを生成する処理変換手段
を備えることを特徴とするプログラム変換装置。
【請求項２】
前記変換後プログラムは、
前記第１の実行方式指定プログラムと、
前記第２の実行方式指定プログラムと、
外部からの指定に基づいて、前記第１の実行方式指定プログラム又は第２の実行方式指定プログラムを切り替える処理切替プログラムを含む
ことを特徴とする請求項１に記載のプログラム変換装置。
【請求項３】
特定の処理について、第１のプロセッサが備える第１のリソースの第１の使用量と第２のプロセッサが備える第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式指定プログラムを含む対象プログラム中の、前記部分プログラムの範囲を判定し、
前記部分プログラムを、前記使用比率を前記第１の比率とは異なる第２の比率として併用して動作する第２の実行方式指定プログラムに変換する
を備えることを特徴とするプログラム変換方法。
【請求項４】
外部からの指定に基づいて、特定の処理について、前記第１のプロセッサが備える第１のリソースの第１の使用量と第２のプロセッサが備える第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式による第１の処理手段と、又は前記使用比率を前記第１の比率とは異なる第２の比率として併用して動作する第２の実行方式による第２の処理手段を切り替える
ことを特徴とする処理切替方法。
【請求項５】
第１のプロセッサに、
特定の処理について、前記第１のプロセッサが備える第１のリソースの第１の使用量と第２のプロセッサが備える第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式による第１の処理手段と、
前記使用比率を前記第１の比率とは異なる第２の比率として併用して動作する第２の実行方式による第２の処理手段と、
外部からの指定に基づいて、前記第１の処理手段又は第２の処理手段を切り替える処理切替手段
として動作させるための実行方式決定プログラムを格納した非一時的な記憶媒体。
【請求項６】
特定の処理について、第１のプロセッサが備える第１のリソースの第１の使用量と第２のプロセッサが備える第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式、又は前記使用比率を前記第１の比率とは異なる第２の比率として併用して動作する第２の実行方式のいずれかを選択し、
前記選択結果に基づいて、前記第１の実行方式又は前記第２の実行方式を設定する
ことを特徴とする実行方式決定方法。
【請求項７】
前記第１のリソースの未使用量及び前記第２のリソースの未使用量が少なくなるように、前記第１の実行方式又は前記第２の実行方式のいずれかを選択する
ことを特徴とする請求項６に記載の実行方式決定方法。
【請求項８】
複数の入力データのうちの第１の配分数の入力データについて前記第１の実行方式を適用し、前記複数の入力データのうちの第２の配分数の入力データについて前記第２の実行方式を適用する
ことを特徴とする請求項６又は７に記載の実行方式決定方法。
【請求項９】
前記第１の実行方式及び前記第２の実行方式の優先度に基づいて、前記第１の配分数及び前記第２の配分数を決定する
ことを特徴とする請求項８に記載の実行方式決定方法。
【請求項１０】
前記第１の配分数及び前記第２の配分数を変化させたときの性能を計測し、
前記性能に基づいて、前記第１の配分数及び前記第２の配分数を決定し、
前記決定された配分数に基づいて、前記第１の実行方式及び前記第２の実行方式のいずれかを選択する
ことを特徴とする請求項８又は９に記載の実行方式決定方法。
【請求項１１】
第１のプロセッサに、
特定の処理について、前記第１のプロセッサが備える第１のリソースの第１の使用量と第２のプロセッサが備える第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式、又は前記使用比率を前記第１の比率とは異なる第２の比率として併用して動作する第２の実行方式のいずれかを選択する実行方式決定手段と、
前記選択結果に基づいて、前記第１の実行方式又は前記第２の実行方式を設定する実行方式設定手段
として動作させるためのプログラムを格納した非一時的な記憶媒体。
【請求項１２】
第１のリソースを具備する第１のプロセッサと、
第２のリソースを具備する第２のプロセッサを備え、
前記第１のプロセッサは、外部からの指定に基づいて、特定の処理について、前記第１のリソースの第１の使用量と前記第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式による第１の処理手段、又は前記使用比率を前記第１の比率とは異なる第２の比率として併用して動作する第２の実行方式による第２の処理手段を切り替える処理切替手段、並びに前記第１の処理手段及び前記第２の処理手段のうちの前記第１のリソースを使用する第１の部分処理手段として動作する
ことを特徴とするプロセッサシステム。
【請求項１３】
前記第２のプロセッサは、前記第１の処理手段及び前記第２の処理手段のうちの前記第２のリソースを使用する第２の部分処理手段として動作する
ことを特徴とする請求項１２に記載のプロセッサシステム。
【請求項１４】
第１のプロセッサを用いて、外部からの指定に基づいて、特定の処理について、前記第１のプロセッサの第１のリソースの第１の使用量と第２のプロセッサの第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式による第１の処理手段、又は前記使用比率を前記第１の比率とは異なる第２の比率として併用して動作する第２の実行方式による第２の処理手段を切り替え、前記第１の処理手段及び前記第２の処理手段のうちの前記第１のリソースを使用する第１の部分処理手段として動作し、
前記第２のプロセッサを用いて、前記第１の処理手段及び前記第２の処理手段のうちの前記第２のリソースを使用する第２の部分処理手段として動作する
ことを特徴とする並列実行方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メインプロセッサとサブプロセッサを含むプロセッサシステムにおいて、メインプロセッサ用プログラムの一部をサブプロセッサに実行させるプログラム変換装置及び方法、処理切替方法及びプログラム、実行方式決定方法及びプログラム、プロセッサシステム並びに並列実行方法に関する。
【背景技術】
【０００２】
メインプロセッサと、General Purpose Graphic Processing Units（ＧＰＧＰＵ）のようなサブプロセッサが搭載されたサーバシステムが普及している。このようなサーバシステムは、処理対象の単位となる単一あるいは一組の入力データを処理するときのプログラムの実行時間（以降、「レイテンシ」という。）の短縮という高性能化に利用されることが多い。【０００３】
このようなシステムでプログラムのレイテンシを短くするために、メインプロセッサ用プログラムの全体の中から一箇所以上の部分処理を、サブプロセッサに実行させる方式（以降、「オフロード方式」という。）が用いられることがある。メインプロセッサによって全てが実行されることが予定されているプログラムを「メインプログラム」という。メインプログラムのうち、オフロード方式を用いてサブプロセッサに実行させる部分プログラムを「オフロード部」、又は「オフロードプログラム」という。また、サブプロセッサにプログラムを実行させることを「オフロードする」という。そして、あるプログラムをオフロードするように指定すること、すなわち、オフロード部を指定することを、「オフロード指定する」という。【０００４】
「オフロード方式」は、一般に、次のような３つの手順によって実現される。【０００５】
１）ホストプロセッサからサブプロセッサへ、オフロード部の実行のためにデータを転送する。オフロード部のプログラムコードは、このとき同時に転送されるか、あるいは、事前にサブプロセッサ用プログラムとして所定の記憶装置に格納される。【０００６】
２）サブプロセッサでオフロード部が実行される。【０００７】
３）サブプロセッサからホストプロセッサへ、オフロード部の処理の結果が転送される。【０００８】
このため、オフロード方式を用いてプログラム全体のレイテンシを短くするためには、オフロード部のレイテンシが、ホストプロセッサで実行されたときよりもサブプロセッサで実行されたときの方が短くなければならない。一般的に、メインプログラム中のオフロード部の範囲の指定は、メインプログラムの開発者（以降、単に「プログラム開発者」という。）によって行われる。【０００９】
プログラム開発者は、レイテンシをより短くするために、サブプロセッサを利用したレイテンシ短縮効果とデータ転送にかかる時間を考慮し、オフロード部を決定する。【００１０】
メインプログラム中のオフロード部の指定は、オフロード部の範囲と転送されるデータを指示する指示文を挿入するという形で行われることが多い。転送されるデータの指定のためには、サブプロセッサがオフロード部を処理するために必要となるデータと、オフロード部の処理後にホストプロセッサへ書き戻されるデータの解析が必要になる。このようなデータ解析は一般的に困難であるため、メインプログラムの任意の範囲を、自由にオフロード部として指定することは困難である。ただし、プログラム実行のためにデータを受け取る入力処理や、プログラムの実行結果を書きだす出力処理のように、転送されるデータの解析が容易な処理も存在する。【００１１】
一方、オフロード方式を適用して、複数の入力データに対して複数のプログラムを同時に実行して並列処理を行う場合は、レイテンシだけでなく、単位時間あたりに処理されるデータの数（以降、「スループット」という。）が多いことが求められる。高いスループットを得るためには、メインプロセッサとサブプロセッサのリソースを十分に使い切ることが重要である。しかし、プロセッサのリソースを十分に使い切るためには、プログラムが使用するプロセッサごとのリソースの量の割合と、プロセッサごとの使用可能なリソースの量の割合を一致させなければならない。そのため、並列動作させることを考慮されて作成されていないプログラムを、複数のプロセッサに同時に実行させてもリソースを使い切ることができない。従って、そのようなプログラムを用いて並列動作を行っても、高いスループットを得ることができない。【００１２】
図１９に、プロセッサのリソースが余り、高いスループットを得ることができないという課題が発生する並列動作の例を示す。本例では、ホストプロセッサと、ホストプロセッサの処理を補助するサブプロセッサとしてのアクセラレータが備えられている。プロセッサのリソース量は、ホストプロセッサよりもアクセラレータの方が多いものとする。【００１３】
オフロード部として指定された部分プログラムの実行のためには、ホストプロセッサとアクセラレータの双方のリソースを必要とする。すなわち、一つの入力データに対してオフロード部を実行すると、ホストプロセッサとアクセラレータのリソースがある一定量ずつ使われる。このとき、ホストプロセッサとアクセラレータのリソース量に違いがあると、ホストプロセッサとアクセラレータについて同量のリソースを使用するプログラムを、複数の入力データに対して同時に実行すると、ホストプロセッサのリソースが先に使い切られる。そして、アクセラレータのプロセッサリソースが余ってしまう。このように、アクセラレータのリソースが余っているにもかかわらず、実行中の入力データ数以上の入力データに対するプログラム実行ができないという問題が発生する。【００１４】
一般に、オフロード部を含むプログラムを複数本、並列に実行したときに、プロセッサリソースを使い切ることは容易ではない。オフロード部の選択や、プログラムへのプロセッサリソースの配分について、各種の技術が開示されている。【００１５】
入力ソフトウェア内の各ループをどのプロセッサで実行するかを決定する方法がある（例えば、特許文献１参照。）。特許文献１記載の技術では、アクセラレータへのデータ転送時間を測定し、ホストプロセッサとアクセラレータのそれぞれについてテストプロセッサの実行時間の優劣を示す勝敗表を作成する。そしてその勝敗表に基づいてオフロードする対象のループを決定し、そのループがオフロードされるように入力ソフトウェアを変換する。【００１６】
また、複数のプログラムに対してプログラム種別ごとにプロセッサリソースを与える方法がある（例えば、特許文献２参照。）。この文献記載の技術では、リアルタイムプログラムと非リアルタイムプログラムに分けてリソースを与えることで、一つのプログラムでリソースを独占せずに複数のプログラムを動かすことができる。
【先行技術文献】
【特許文献】
【００１７】
【特許文献１】特開２０１１−２０４２０９号公報
【特許文献２】特開平１０−２８９１１６号公報
【発明の概要】
【発明が解決しようとする課題】
【００１８】
特許文献１の技術では、オフロードが効果的なループを発見し、そのループがオフロードされるように入力ソフトウェアが変換される。ところが、汎用プロセッサとアクセラレータのそれぞれについて、オフロードされるループの処理に必要なリソース量、その時点で使用可能なリソース量ともに考慮されない。そのため、アクセラレータのリソースが余ったり、リソース不足によりオフロードできなかったりする可能性がある。従って、システム全体としては、さらに高い性能を発揮できるリソースを備えている場合であっても、そのリソースを活用することができない。【００１９】
特許文献２の技術では、一つのプログラムでリソースを独占せずに複数のプログラムを動かすことができる。しかし、特許文献２の技術では、異なる種別の複数のプログラムが存在することが前提とされており、複数の入力のそれぞれに対して共通の一つのプログラムを、並列に実行することは想定されていない。従って、特許文献２の技術では、プロセッサのリソースが余っていたとしても、リソースを分けることによって、一つのプログラムを並列に実行することができない。
（発明の目的）
本発明は上記のような技術的課題に鑑みて行われたもので、システムが備えるプロセッサのリソースを最大限に使用し、処理能力を向上させることができる、プログラム変換装置及び方法、処理切替方法及びプログラム、実行方式決定方法及びプログラム、プロセッサシステム並びに並列実行方法を提供することを目的とする。
【課題を解決するための手段】
【００２０】
本発明のプログラム変換装置は、特定の処理について、第１のプロセッサが備える第１のリソースの第１の使用量と第２のプロセッサが備える第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式指定プログラムを含む対象プログラム中の、部分プログラムの範囲を判定する特定処理判定手段と、部分プログラムを、使用比率を第１の比率とは異なる第２の比率として併用して動作する第２の実行方式指定プログラムに変換する処理変換手段を備えることを特徴とする。【００２１】
本発明のプログラム変換方法は、特定の処理について、第１のプロセッサが備える第１のリソースの第１の使用量と第２のプロセッサが備える第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式指定プログラムを含む対象プログラム中の、部分プログラムの範囲を判定し、部分プログラムを、使用比率を第１の比率とは異なる第２の比率として併用して動作する第２の実行方式指定プログラムに変換することを特徴とする。【００２２】
本発明の処理切替方法は、外部からの指定に基づいて、特定の処理について、第１のプロセッサが備える第１のリソースの第１の使用量と第２のプロセッサが備える第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式による第１の処理手段と、又は使用比率を第１の比率とは異なる第２の比率として併用して動作する第２の実行方式による第２の処理手段を切り替えることを特徴とする。【００２３】
本発明の処理切替プログラム記憶媒体は、第１のプロセッサに、特定の処理について、第１のプロセッサが備える第１のリソースの第１の使用量と第２のプロセッサが備える第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式による第１の処理手段と、使用比率を第１の比率とは異なる第２の比率として併用して動作する第２の実行方式による第２の処理手段と、外部からの指定に基づいて、第１の処理手段又は第２の処理手段を切り替える処理切替手段として動作させるためのプログラムを格納することを特徴とする。【００２４】
本発明の実行方式決定方法は、特定の処理について、第１のプロセッサが備える第１のリソースの第１の使用量と第２のプロセッサが備える第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式、又は使用比率を第１の比率とは異なる第２の比率として併用して動作する第２の実行方式のいずれかを選択し、選択結果に基づいて、第１の実行方式又は第２の実行方式を設定することを特徴とする。【００２５】
本発明の実行方式決定プログラム記憶媒体は、第１のプロセッサに、特定の処理について、第１のプロセッサが備える第１のリソースの第１の使用量と第２のプロセッサが備える第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式、又は使用比率を第１の比率とは異なる第２の比率として併用して動作する第２の実行方式のいずれかを選択する実行方式決定手段と、選択結果に基づいて、第１の実行方式又は第２の実行方式を設定する実行方式設定手段として動作させるためのプログラムを格納することを特徴とする。【００２６】
本発明のプロセッサシステムは、第１のリソースを具備する第１のプロセッサと、第２のリソースを具備する第２のプロセッサを備え、第１のプロセッサは、外部からの指定に基づいて、特定の処理について、第１のリソースの第１の使用量と第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式による第１の処理手段、又は使用比率を第１の比率とは異なる第２の比率として併用して動作する第２の実行方式による第２の処理手段を切り替える処理切替手段、並びに第１の処理手段及び第２の処理手段のうちの第１のリソースを使用する第１の部分処理手段として動作することを特徴とする。【００２７】
本発明の並列実行方法は、第１のプロセッサを用いて、外部からの指定に基づいて、特定の処理について、第１のプロセッサの第１のリソースの第１の使用量と第２のプロセッサの第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式による第１の処理手段、又は使用比率を第１の比率とは異なる第２の比率として併用して動作する第２の実行方式による第２の処理手段を切り替え、第１の処理手段及び第２の処理手段のうちの第１のリソースを使用する第１の部分処理手段として動作し、第２のプロセッサを用いて、第１の処理手段及び第２の処理手段のうちの第２のリソースを使用する第２の部分処理手段として動作することを特徴とする。
【発明の効果】
【００２８】
本発明によると、一種類のプログラムについて、プロセッサリソースを使用する割合がプロセッサごとに異なる複数の実行方式を併用して実行することができる。そのため、一種類のプログラムを並列に実行したときにおいても、プロセッサリソースを使い切ることができる。従って、システムが備えるリソースを十分に使用し、処理能力を高めることができる。
【図面の簡単な説明】
【００２９】
【図１】本発明の第１の実施形態が対象とする計算機システムの構成を示すブロック図である。
【図２】本発明の第１の実施形態が対象とするプログラムの構成を示す。
【図３】本発明の第１の実施形態のプログラム実行システムの構成を示すブロック図である。
【図４】本発明の第１の実施形態の並列処理制御システムの動作を示すフローチャートである。
【図５】本発明の第１の実施形態によって、未使用のプロセッサリソースが利用される場合の例を示す図である。
【図６】本発明の第２の実施形態で設定される実行方式を示す図である。
【図７】本発明の第３の実施形態で設定される実行方式を示す図である。
【図８】本発明の第４の実施形態において実行方式を決定するときの動作を示すフローチャートである。
【図９】本発明の第５の実施形態において実行方式を決定するときの動作を示すフローチャートである。
【図１０】本発明の第６実施形態の実行方式決定手段の構成を示すブロック図である。
【図１１】本発明の第６の実施形態の実行方式決定手段の動作を示すフローチャートである。
【図１２】本発明の第６の実施形態の性能計測結果の管理テーブルの一例である。
【図１３】本発明の第７の実施形態の計算機システムの例を示すブロック図である。
【図１４】本発明の第７の実施形態のオフロード指定を含む画像処理プログラムの構成図である。
【図１５】本発明の第７の実施形態の実行方式併用システムで実現可能な実行方式の例を示す図である。
【図１６】本発明の第７の実施形態の実行方式併用システムにおいて実行されるプログラムの構成を示すブロック図である。
【図１７】本発明の第７の実施形態のホストプロセッサ内でスレッドとして動く各手段を示す。
【図１８】本発明の第７の実施形態の配分数決定アルゴリズムの処理フローを示すフローチャートである。
【図１９】プロセッサのリソースが余る並列動作の例を示す図である。
【発明を実施するための形態】
【００３０】
（第１の実施形態）
次に、本発明の第１の実施形態について図面を参照して詳細に説明する。
【００３１】
図１に、本実施形態が対象とする計算機システムの構成を示す。計算機システムは、複数の計算機１００が接続網１０４で接続されたシステムである。それぞれの計算機は、演算処理装置１０１、記憶装置１０２、通信装置１０３を備える。全ての計算機１００は接続網１０４で接続され、相互に通信が可能である。それぞれの演算処理装置１０１の構造、いわゆる、アーキテクチャや、処理性能は、同じでも、異なっていても良い。一つ以上の計算機１００がホストプロセッサの役割を果たし、その他の計算機１００が一つ以上のアクセラレータの役目を果たす。アクセラレータは一つであることに限定されない。アクセラレータのアーキテクチャ又は処理能力は全てが同一である必要はなく、Ｎ種類（Ｎは１以上の整数）のアーキテクチャ又は処理能力があるものとする。
【００３２】
アクセラレータは、「ホストプロセッサ」から受けた指示に従って処理を行う。従って、「ホストプロセッサ」と「アクセラレータ」は、それぞれ、前述の「メインプロセッサ」、「サブプロセッサ」に対応する。本実施形態では、計算機が担う役割を具体的に示す名称として、「ホストプロセッサ」と「アクセラレータ」を用いて説明する。
【００３３】
本実施形態の例として、複数のコンピュータがバスやネットワークで接続されたコンピュータシステムが挙げられる。バスとは、例えば、パーソナルコンピュータ等で用いられているような、一般的なシリアルやパラレルのバスである。ネットワークとは、例えば、有線や無線のＬＡＮ（Local Area Network）である。ただし、本実施形態の例は、これらに限定されない。
【００３４】
図２に、本実施形態が処理の対象とする対象プログラムの構成を示す。本対象プログラムは、入力処理部２０１、演算処理部２０２、出力処理部２０３を備える。
【００３５】
対象プログラムの例としては、Ｗｅｂサーバプログラムがある。Ｗｅｂサーバプログラムは、ネットワーク経由で送られてくるクライアントからの要求ごとに処理を行い、処理結果をクライアントに返す。このとき、要求ごとに、ＷｅｂサーバプログラムがＯＳ（Operating System）の標準機能を利用することによって、実行スレッド、又はインスタンスが生成される。このようなＷｅｂサーバプログラムの処理の一部は、サーバ内のアクセラレータで処理されるように、Ｗｅｂサーバプログラム中で指定されている。Ｗｅｂプログラムは対象プログラムの一例であり、対象プログラムはこれに限定されない。
【００３６】
演算処理部２０２中には、アクセラレータで実行される部分プログラムとして、オフロード部２０４が一つ以上指定されている。オフロード部２０４は、対象プログラム中で、オフロード開始指示文２０５とオフロード終了指示文２０６で囲まれた範囲である。本実施形態では、対象プログラム中に、Ｍ個（Ｍは１以上の整数）のオフロード部が指定されているものとする。
【００３７】
本実施形態では、図１の計算機システム上において、対象プログラムによる各プロセッサのプロセッサリソースの使用量が異なる、Ｌ種類（Ｌは１以上の整数）の実行方式があるものとする。これら複数の実行方式の例としては、以下のような方式が挙げられる。
【００３８】
１）ホストプロセッサのみで動作する実行方式
オフロード指定を無視することによって、全処理をホストプロセッサのみで動作する実行方式である。
【００３９】
２）入力処理から出力処理の範囲でオフロードする実行方式
入力処理から出力処理までの範囲に限り、オフロード対象とする実行方式である。
【００４０】
３）Ｍ箇所のオフロード指定部の一部のみをオフロードする実行方式
Ｍ箇所のオフロード指定部の一部のみをオフロードし、その他のオフロード指定を無視する実行方式である。
【００４１】
４）対象プログラム中の任意の部分をオフロードする実行方式
対象プログラム中の任意の部分をオフロードできるように、所定の変換ソフトウェアを用いて生成された、変換後プログラムを実行するための実行方式である。
【００４２】
図３に本実施形態のプログラム実行システムの構成を示す。本プログラム実行制御システムは、変換装置３１０と、ホストプロセッサ３２０、アクセラレータ３３０を含む計算機システム３００を備える。ホストプロセッサ３２０、アクセラレータ３３０の各々は、単体の演算装置であっても、一体の計算機の一部であってもよい。また、アクセラレータ３３０の個数は１以上であればよく、個数は限定されない。また、アクセラレータ３３０が複数個ある場合、それらのアーキテクチャは同一である必要はない。
【００４３】
変換装置３１０は、特定処理判定手段３１１と処理変換手段３１２を備える。
【００４４】
特定処理判定手段３０３は、対象プログラム３４０の中の、指定された所定の処理を行う部分（以降、「特定処理部」という。）を判別する。ここでは、全特定処理部がオフロードの対象であるものとする。従って、対象プログラム３４０の中に、Ｍ箇所の特定処理部が指定されている。
【００４５】
処理変換手段３１２は、対象プログラム３４０のＭ箇所の特定処理部を、複数の実行方式で実行可能となるように、変換後プログラム３４１に変換する。従って、変換後プログラム３４１は、内部に、Ｌ種類の実行方式のそれぞれに対応した実行方式指定プログラム３４２と、処理切替手段３４３を含む。処理切替手段３０９は、実行方式指定プログラム３１０に適用すべき実行手段を、Ｌ種類の実行方式の中で切り替える。
【００４６】
ホストプロセッサ３２０は、実行方式決定手段３２１、実行方式設定手段３２２を持つ。
【００４７】
アクセラレータ３３０は、ホストプロセッサ３２０から、実行方式指定プログラム３４２のうち、アクセラレータによる実行を含む実行方式に対応したアクセラレータ指定プログラム３４４を受け取る。なお、アクセラレータ３３０は、前述の「ホストプロセッサのみで動作する実行方式」に対応する実行方式指定プログラム３４２については、受け取る必要はない。
（第１の実施形態の動作）
これらの手段は、それぞれ、以下のように動作する。
【００４８】
特定処理判定手段３１１は、対象プログラム３４０を入力し、対象プログラム３４０から特定処理で囲まれた範囲を探し、対象プログラム３４０中のオフロード可能な範囲を調べる。そして、特定処理判定手段３１１は、対象プログラム３４０の複数の特定処理の位置を処理変換手段３１２へ通知する。
【００４９】
処理変換手段３１２は、特定処理判定手段３１１から通知された、複数の特定処理の位置を入力し、特定処理の位置で囲まれた範囲をオフロード可能な範囲とする。そして、処理変換手段３１２は、各オフロード可能な範囲に対して、オフロードをする場合と、オフロードしない場合の両方の実行方式の実行方式指定プログラム３４２を作成する。各々の実行方式指定プログラム３４２は、ホストプロセッサ３２０又はアクセラレータ３３０についてのプロセッサリソースの使用量が異なる。さらに、処理変換手段３１２は、両方式のプログラムを切り替える、処理切替手段３４３を有する変換後プログラム３４１を作成する。
【００５０】
ホストプロセッサの実行方式決定手段３２１は、変換後プログラム３４１を入力し、各プロセッサのプロセッサリソースを使い切ることができるように、一つの入力データに対するプログラムの実行方式を選択する。
【００５１】
実行方式設定手段３２２は、実行方式決定手段３２１から指示された実行方式を、変換後プログラム３４１の処理切替手段３４３に、通信手段（図示なし）を用いて通知する。通信手段は、ホストプロセッサの動作を管理するＯＳ等、計算機システム３００が備える機能である。
【００５２】
対象プログラム３４０は、対象プログラム３４０中にオフロード指定されたオフロード部を含むプログラムである。対象プログラム３４０は、特定処理判定手段３３３に入力され、処理変換手段３１２によって変換後プログラム３４１に変換される。
【００５３】
変換後プログラム３４１は、入力データごとにいずれかの実行方式で実行される。すなわち、変換後プログラム３４１は、実行方式設定手段３２２によって指定された実行方式に従って、処理切替手段３４３によって実行方式が切り替えられて動作する。
【００５４】
図４は、本発明の実施形態の並列処理制御システムの動作を示すフローチャートである。
【００５５】
初めに、変換装置３１０の特定処理判定手段３１１は、対象プログラム３４０中のオフロード可能な範囲を調べるために、対象プログラム３４０から特定処理部を探す。そして、特定処理判定手段３１１は、複数のこれら特定処理部の位置を処理変換手段３１２に通知する（ステップＳ４０１）。
【００５６】
次に、変換装置３１０の処理変換手段３１２は、特定処理判定手段３１１から通知された複数の特定処理部の位置からオフロード可能範囲を認知する。そして、処理変換手段３１２は、各オフロード可能範囲に対して、オフロードをする部分プログラム及びオフロードしない部分プログラムの両方を作成する。つまり、プロセッサリソースの使用量が異なる複数の実行方式指定プログラムを用意する。さらに、処理変換手段３１２は、オフロードを行う実行方式指定プログラム及びオフロードを行わない実行方式指定プログラムを切り替える、処理切替手段３４３を有する変換後プログラム３４１を作成する（ステップＳ４０２）。
【００５７】
次に、ホストプロセッサ３２０の実行方式決定手段３２１は、複数の入力データのうち、各実行方式でいくつを処理するかを判断する。そして、実行方式決定手段３２１は、各プロセッサのプロセッサリソースを使い切る、一つの入力データを処理する変換後プログラム３４１の実行方式を選択する（ステップＳ４０３）。
【００５８】
最後に、ホストプロセッサ３２０の実行方式設定手段３２２が、実行方式決定手段３２１から指示された実行方式を変換後プログラム３４１の処理切替手段３４３に通信手段を用いて通知する（ステップＳ４０４）。
【００５９】
以上のように、本実施形態の上記のフローによって、各プロセッサのプロセッサリソースの使用量が異なる複数の実行方式を有する変換後プログラム３４１が生成できる。さらに、入力データごとに実行方式を切り替えるプログラム実行手段が実現できる。そのため、未使用のプロセッサリソースを使用する実行方式を選択することによって、未使用のリソースを極力少なくすることができる。図５に、本実施形態によって、未使用のプロセッサリソースを利用して、より多くの入力データを処理することができる場合の例を示す。
【００６０】
このように、本実施形態によると、プロセッサリソースを有効に利用して、システムのスループットを向上させることができる。
【００６１】
第１の実施形態において、対象プログラムのオフロード可能な特定箇所の範囲は、種々に設定が可能である。第２の実施形態と第３の実施形態では、オフロード可能な範囲の設定の例を示す。具体的には、前述の実行方式の中から、２）入力処理から出力処理の範囲でオフロードする実行方式を第２の実施形態として、３）オフロード指定部の一部のみをオフロードする実行方式を第３の実施形態として示す。
（第２の実施形態）
第２の実施形態では、特定処理判定手段３１１は、対象プログラム３４０の「入力処理から出力処理までの範囲」を特定処理と判定し、オフロード可能な範囲として扱う。
【００６２】
入力処理から出力処理までの範囲がオフロード可能な範囲と扱われる場合、第１の並列処理制御システム上での、変換後プログラム３４１による各プロセッサのプロセッサリソースの使用量が異なる実行方式は（Ｎ＋２）種類ある。その内訳は、ホストプロセッサ３２０とＮ個のアクセラレータ３３０を所定の手順で併用する対象プログラム３４０の元の実行方式が１種類、入力処理から出力処理までの範囲をホストプロセッサ３２０が実行する実行方式が１種類、Ｎ種類のアクセラレータのいずれか１個で実行する実行方式がＮ種類である。本実施形態で設定される複数の実行方式の例を図６に示す。
【００６３】
特定処理を上記のように設定するために、第２の実施形態では、第１の実施形態のステップＳ４０１において、以下のように処理する。すなわち、特定処理判定手段３０３は、対象プログラム３４０中のオフロード可能な範囲を調べるために、対象プログラム３４０の入力処理から出力処理で囲まれた範囲を探し、その範囲を処理変換手段３０４に通知する。
【００６４】
第２の実施形態では、Ｎ個のアクセラレータのいずれかのみがオフロード部の処理を行うという実行方式を用いることができる。すなわち、各アクセラレータ上で独立に動作できる実行方式を有する。従って、いずれかのアクセラレータのプロセッサリソースのみが使い切れない場合でも、そのアクセラレータにオフロードすることによって、プロセッサリソースを使い切ることができる。
（第３の実施形態）
第３の実施形態では、特定処理判定手段３１１は、対象プログラム３４０の「オフロード指定がされた範囲」を特定処理部と判定し、オフロード可能な範囲として扱う。すなわち、既にオフロード指定がされた範囲がオフロード可能な範囲と扱う。
【００６５】
この場合、対象プログラム３４０がＭ箇所のオフロード指定部分を含むとすると、各プロセッサのプロセッサリソースの使用量が異なるプログラムの実行方式は（２＾Ｍ）種類ある。なぜなら、実行形式の組合せは、Ｍ箇所のオフロード指定部分の全てをオフロードする場合から、全くオフロードしない場合まであるからである。本実施形態で設定される複数の実行方式の例を図７に示す。
【００６６】
特定処理を上記のように設定するために、第３の実施形態では、第１の実施形態のステップＳ４０１において、以下のように処理する。すなわち、特定処理判定手段３１１は、対象プログラム３４０中のオフロード指定された範囲を調べるために、対象プログラム３４０のオフロードの開始が指定された位置とオフロードの終了が指定された位置の組を探し、これらの位置を処理変換手段３１２に通知する。
【００６７】
第３の実施形態では、対象プログラム３４０のＭ箇所のオフロード指定部分の一部を無視し、オフロードしないようにすることができる。あるオフロード指定部分を実際にオフロードしたときとオフロードしないときでは、プロセッサリソースの使用量は異なる。従って、Ｍ箇所のオフロード指定部分のうちのオフロードする部分の数を調整することによって、プロセッサリソースの使用量が異なる実行方式を複数種類用意することができる。そのため、適切なリソース使用量の実行方式を選択し、未使用のリソースを極力少なくすることにより、システムとしてのスループットを向上させることができる。
【００６８】
なお、第２の実施形態と第３の実施形態は組み合わせることができる。すなわち、対象プログラム３４０の元々のオフロードの実行形式に、ホストとＮ個のアクセラレータのいずれかのみがオフロード部の処理を行うという実行方式、及びＭ箇所のオフロード指定部分の一部のみをオフロードする実行方式を組み合わせることができる。
【００６９】
組合せにより実行方式の種類が増え、より柔軟に未使用のプロセッサリソースを使い切ることができ、よりスループットを向上させることができる。
【００７０】
ところで、第１乃至第３の実施形態において、スループットを向上させるために、実行方式ごとに扱う入力データの個数（以下、「配分数」という。）を変えることも可能である。第４乃至第６の実施形態として、配分数の決定方法の例を示す。
（第４の実施形態）
第４の実施形態では、各プロセッサのプロセッサリソースを使い切るように、各実行方式で同時に処理する配分数が決定される。そして、配分数を元にして、各入力データの実行方式が決定される。
【００７１】
配分数の決定方法の例としては、ユーザによる指定、システムのスペックとプログラムのプロファイル結果からの所定のアルゴリズムを用いた算出等、が挙げられる。ここでの「プロファイル」とは、実行時プロファイルと呼ばれるもので、プログラムの実行に関わる各種の情報である。この情報には、プログラムのある部分処理についての、必要な実行時間やプロセッサリソースの量などがある。なお、本発明において、配分数の決定方法は特に限定されない。
【００７２】
配分数を決定するために、第４の実施形態では、第１の実施形態のステップＳ４０３において、具体的には以下のように処理する。すなわち、実行方式決定手段３２１が、高いスループットで各プロセッサのプロセッサリソースを使い切るように、優先度の高い順に各実行方式の配分数を決定する。そして、実行方式決定手段３２１は、一つの入力データに対するプログラムの実行方式を決定する（ステップＳ４０３）。
【００７３】
実行方式決定手段３２１が、実行方式の配分数を決定した上で、一つの入力データに対する実行方式を決定するときの動作を示すフローチャートを図８に示す。
【００７４】
まず、実行方式決定手段３２１は、実行方式ごとに同時に処理が実行されている処理データの個数（以降、「同時処理データ数」という。）を取得する（ステップＳ８０１）。
【００７５】
次に、実行方式決定手段３２１は、優先度の高い実行方式から順番に、同時処理データ数が配分数に満たない実行方式を決定する（ステップＳ８０２）。
【００７６】
最後に、実行方式決定手段３２１は、高いスループットを得るために、各実行方式の配分数を決定し、決定された配分数と実行中の各実行方式の同時処理データ数から実行方式を決定し、実行方式設定手段３２２に決定した実行方式を通知する。
【００７７】
第４の実施形態では、配分数をプログラム実行前に決定する。そのため、プロセッサリソースを利用してプログラム実行中に配分数を決定する処理は不要である。配分数を決定する処理は、対象プログラムには含まれないものであり、実動作のスループットに影響を与える。すなわち、配分数を決定する処理は、オーバヘッドとなる。そこで、プログラム実行前に配分数を決定する。そのため、優先度の高い実行方式が扱うデータ数が理想より少ない状態や、優先度の低い実行方式が扱うデータ数が理想より多い状態にならずに、理想状態でプログラムを実行することができる。従って、複数の実行方式の組合せを用いてプログラムを実行したときに、最適なスループットが得られるという効果がある。
【００７８】
なお、配分数は、最もスループットが高くなるように、ユーザが変換後プログラム中で指定してもよい。
（第５の実施形態）
第５の実施形態では、プログラムとプロセッサのパラメータから実行方式ごとの配分数が決定される。実行方式決定手段３１１が配分数を決定するときの動作を示すフローチャートを図９に示す。
【００７９】
まず、実行方式決定手段３１１は、各実行方式の優先度、及び一つの入力データに対する各実行方式のプロセッサ使用率を算出し、各プロセッサの未使用率を初期化する（ステップＳ９０１）。
【００８０】
各実行方式の優先度の求め方の例として、各実行方式のレイテンシ、すなわち単一の入力データを処理するときのプログラムの実行時間の短い順に高い優先度をつけていく方法が挙げられる。一つの入力データに対する各実行方式のプロセッサ使用率の例として、単位時間あたりの各プロセッサでの実行時間の割合が挙げられる。各プロセッサの未使用率は１００パーセントを初期とする方法が挙げられる。
【００８１】
次に、実行方式決定手段３１１は、各プロセッサの未使用率と一つの入力データに対する各実行方式のプロセッサ使用率から、使用するプロセッサに空きがあることで実行可能と判定される実行方式の中で最も優先度の高い実行方式を選択する（ステップＳ９０２）。
【００８２】
次に、実行方式決定手段３０１は、選択された実行方式が同時に扱う入力データ数を決定する（ステップＳ９０３）。
【００８３】
入力データ数を決定する方法の例として、各プロセッサに対して未使用率を一つの入力データに対する実行方式のプロセッサ使用率で除算した結果の中で最小のものを、選択された実行方式が同時に扱う入力データ数とする方法が挙げられる。ただし、これに限定されるものではない。
【００８４】
次に、実行方式決定手段３１１は、各プロセッサの未使用率を更新する（ステップＳ９０４）。すなわち、実行方式決定手段３１１は、ステップＳ９０３で決定された入力データ数を選択された実行方式で扱ったときのプロセッサ使用率を算出する。実行方式決定手段３１１は、プロセッサの未使用率から算出したプロセッサ使用率を減算した結果を、更新後のプロセッサの未使用率とする。
【００８５】
最後に、実行方式決定手段３１１は、全てのプロセッサの未使用率がゼロとなっているかを判定する（ステップＳ９０５）。全てのプロセッサの未使用率がゼロならば、本配分数決定アルゴリズムは終了し、ゼロでなければステップＳ９０２に遷移する。
【００８６】
第５の実施形態では、プロセッサのパラメータと対象プログラムのパラメータから、配分数を自動で算出する。配分数の算出処理は、プログラム実行前に行うことができる。そのため、プロセッサリソースを利用してプログラム実行中に配分数を決定する処理は不要である。従って、第４の実施形態と同様に、複数の実行方式の組合せを用いてプログラムを実行したときに、最適なスループットが得られるという効果がある。
（第６の実施形態）
第６の実施形態では、仮の配分数を決定し、その配分数から実行方式を選択する。
【００８７】
図１０は、本実施形態の実行方式決定手段１００１の構成を示すブロック図である。
【００８８】
実行方式決定手段１００１は、性能計測手段１００２、配分数決定手段１００３、実行方式選択手段１００４を備える。そして、各手段の間でやりとりされる情報として、性能計測結果１０１１、実行方式の優先度情報１０１２、実行方式ごとに扱う入力データ数である配分数１０１３が存在する。
【００８９】
図１１は、本実施形態の実行方式決定手段１００１の動作を示すフローチャートである。図１２は、３種類の実行方式を用意した場合の動作において用いられる性能計測結果の管理テーブルの一例である。
【００９０】
まず、配分数決定手段１００３が配分数の初期値を決定する（ステップＳ１１０１）。実行方式選択手段１００４が、決定された現在の配分数から、入力に対する実行方式を選択する。そして、変換後プログラム３４１の実行が開始される。
【００９１】
次に、配分数決定手段１００３は、実行方式の優先度情報から配分数が未確定の実行方式を選択する（ステップＳ１１０２）。
【００９２】
配分数決定手段１００３は、選択した実行方式の配分数を増加させる（ステップＳ１１０３）。実行方式選択手段１００４は、増加された現在の配分数から、ある入力に対する実行方式を選択する。そして、変換後プログラム３４１に含まれる３種類の実行方式指定プログラム３４２のうちのいずれかが実行される。
【００９３】
性能計測手段２３０１が、単位時間あたりのスループット性能を計測し、結果を各実行方式の配分数とスループット性能の組で構成される管理テーブルに追加する（ステップＳ１１０４）。
【００９４】
配分数決定手段１００３が、配分数を確定するか否かを判定する（ステップＳ１１０５）。本実施形態では、配分数を確定するときの条件（以降、「配分数確定条件」という。）は、「対象の実行方式を増加させたときの性能計測結果が、増加させる前の性能計測結果より悪化したこと」とする。ただし、配分数確定条件は、性能計測結果の増減があったときであれば良い。従って、配分数確定条件は上記の条件には限定されない。
【００９５】
そして、性能計測結果が配分数確定条件を満たし、配分数の確定が決定されたときはステップＳ１１０６へ遷移し、配分数の確定が決定されなかったときはステップＳ１１０３へ遷移する。
【００９６】
次に、配分数決定手段１００３が、選択した実行方式の配分数を確定する（ステップＳ１１０６）。本実施形態では、配分数を増加させる前の性能計測結果になったときの配分数を、選択実行方式の配分数として確定する。
【００９７】
最後に、配分数決定手段１００３が、動的に配分数を決定するフローの終了を判定する（ステップＳ１１０７）。本実施形態では、全ての実行方式の配分数が確定した条件を満たしたときはフローを終了し、条件を満たさないときはステップＳ１１０２へ遷移する。
【００９８】
配分数決定手段１００３の以上の動作により、各実行方式の配分数が決定され、配分数に従ったプログラム実行ができる。
【００９９】
本実施形態の実行方式決定手段１００１の動作の理解のために、具体的数値を示して、図１１の処理フローを説明する。
【０１００】
まず、配分数決定手段１００３が配分数の初期値を決定する（ステップＳ１１０１）。本実施形態では、配分数の初期値として、実行方式１については”１５”、実行方式２については”０”、実行方式３については”０”を設定する。実行方式選択手段１００４は、設定された上記の配分数から、ある入力に対する実行方式を選択し、アプリケーションの実行が開始される。
【０１０１】
次に、配分数決定手段１００３は、実行方式の優先度情報から配分数が未確定の実行方式を選択する（ステップＳ１１０２）。本実施形態では、最も優先度の高い実行方式１の配分数を確定させるために、実行方式１を選択する。
【０１０２】
配分数決定手段１００３は、選択した実行方式１の配分数を増加させる（ステップＳ１１０３）。本実施形態では、各配分数を１ずつ増加させる。実行方式選択手段１００４は、増加された現在の配分数から、ある入力に対する実行方式を選択する。そして、アプリケーションが実行される。
【０１０３】
性能計測手段１００１が、単位時間あたりのスループット性能を計測し、結果を管理テーブルに追加する（ステップＳ１１０４）。本実施形態では、計測するスループット性能を、１秒あたりに出力されるデータの個数と定義する。ただし、計測される性能は、スループットには限定されない。本実施形態での管理テーブルでは、初期状態として、実行方式１、２、３の配分数をそれぞれ、”１５”、”０”、”０”として実行したときの性能値として、”１５０”が記載される。
【０１０４】
配分数決定手段１００３が、配分数を確定するか否かを判定する（ステップＳ１１０５）。本実施形態では、配分数確定条件は、対象の実行方式を増加させたときの性能計測結果が、増加させる前の性能計測結果より悪化したことである。
【０１０５】
配分数の確定が決定されたときはステップＳ１１０６へ遷移し、配分数の確定が決定されなかったときはステップＳ１１０３へ遷移する。本実施形態では、図１２の管理テーブルのように、結果番号５と結果番号６の間で、性能結果が”２００”から”１９０”へと低下する。従って、結果番号６の処理を行ったときに、ステップＳ１１０６へ遷移する。
【０１０６】
ステップＳ１１０６では、配分数決定手段１００３が、選択した実行方式の配分数を確定する。本実施形態では、配分数を増加させる前の性能計測結果が得られたときの配分数を、選択実行方式の配分数として確定する。本実施形態では、配分数決定手段１００３は、図１２の管理テーブルから、実行方式１の配分数を２０と確定させる。
【０１０７】
最後に、配分数決定手段１００３が、動的に配分数を決定するフローの終了を判定する（ステップＳ１１０７）。本実施形態では、全ての実行方式の配分数が確定した条件を満たしたときはフローを終了し、条件を満たさないときはステップＳ１１０２へ遷移する。
【０１０８】
第６の実施形態では、実行時に高いスループットを得るための配分数を探索する。従って、プロセッサや対象プログラムのパラメータがなくても配分数を決定することができる。
（第７の実施形態）
次に、第７の実施形態として、具体的な計算機システムの例を示す。
【０１０９】
図１３に、ホストプロセッサであるマルチコアとアクセラレータであるメニコアで構成された計算機システムの構成図を示す。
【０１１０】
本実施形態の計算機システムは、ホストプロセッサ１３０１と、ホストメモリ１３０２と、バスコントローラ１３０３と、アクセラレータ１３０４を備える。アクセラレータ１３０４は、内部にメニコア１３０５とメモリ１３０６を備える。
【０１１１】
ホストプロセッサ１３０１とメニコア１３０５とでは、内蔵されているＣＰＵ（Central Processing Unit）のアーキテクチャ及び個数が異なる。演算器の構造及び個数が異なるために、ホストプロセッサ１３０１とメニコア１３０５には、相対的に得意な処理と不得意な処理が存在する。
【０１１２】
本実施形態では、ホストプロセッサ１３０１とメニコア１３０５のＣＰＵ数は、ホストプロセッサ１３０１が８個、メニコア１３０５が４０個である。また、ホストプロセッサ１３０１とメニコア１３０５のそれぞれのＣＰＵの、スカラ演算とベクトル演算を実行するときの性能は異なる。例えば、スカラ演算については、ホストプロセッサ１３０１の１個のＣＰＵの性能を１とすると、メニコア１３０５の１個のＣＰＵの性能は０.２５であり、ホストプロセッサ１３０１のＣＰＵの性能の方が高い。ベクトル演算については、ホストプロセッサ１３０１の１個のＣＰＵの性能を１とすると、メニコア１３０５の１個のＣＰＵの性能は２であり、メニコア１３０５のＣＰＵの性能の方が高い。
【０１１３】
ホストプロセッサ１３０１とアクセラレータ１３０４は、バスコントローラ１３０３で接続される。
【０１１４】
ソフトウェアについては、ホスト用のＯＳとアクセラレータ用のＯＳが独立に動作している。ホストプロセッサ１３０１とアクセラレータ１３０４との間の通信は、ソケットなどの一般技術で実現される。
【０１１５】
オフロード実行の実現のために、ホストプロセッサ１３０１からアクセラレータ１３０４に、処理の開始を指示する機能がある。また、ホストプロセッサ１３０１とアクセラレータ１３０４は、各々固有のＩＰ（Internet Protocol）アドレスを持っている。
【０１１６】
図１４に、本実施形態において、一つの入力に対するオフロード指定を含む画像処理プログラムの構成図を示す。
【０１１７】
対象プログラム３４０は、入力処理ＡＰＩ（Application Program Interface）１４０３、演算処理Ａ１４０４、オフロード開始ＡＰＩ１４０５、演算処理Ｂ１４０６、オフロード終了ＡＰＩ１４０７、出力処理ＡＰＩ１４０８を含む。
【０１１８】
入力キュー１４０１には、対象プログラム３４０の実行開始までに画像データが格納される。設定ファイル１４０２には、コマンドライン引数等のプログラムの実行パラメータが指定されている。対象プログラム３４０は、入力キュー１４０１及び設定ファイル１４０２から必要な情報を読み出し、処理結果を出力キュー１４０９へ出力する。以下に、対象プログラム３４０に含まれる各構成要素の動作を説明する。
【０１１９】
入力処理ＡＰＩ１４０３は、設定ファイル１４０２からの実行パラメータ、及び入力キュー１４０１からの画像データを取得することによって、プログラムを実行するための情報を設定する。
【０１２０】
入力処理ＡＰＩ１４０３が入力キューからデータを取得する機構は以下の通りである。すなわち、ホストプロセッサ３２０上の入力キュー１４０１の管理スレッドが、ソケットを用いて入力キュー１４０１内のデータをプログラムに送信する。そして、プログラムスレッドで実行される入力処理ＡＰＩ１４０３が、ソケットでデータ受信を行う。
【０１２１】
入力処理ＡＰＩ１４０３は、コマンドライン引数を受け取ってプログラムを実行するためのデータを設定するよう規定される。そのため、実行のために必要となるデータはコマンドライン引数のみである。
【０１２２】
演算処理Ａ１４０４は、対象プログラム３４０の一部を構成するスカラ演算処理で、入力処理ＡＰＩ１４０３によって設定された情報を入力として処理を行う。
【０１２３】
オフロード開始ＡＰＩ１４０５は、ホストプロセッサ３２０からアクセラレータ３３０へのオフロードの開始位置、及びホストプロセッサ３２０からアクセラレータ３３０へと転送されるデータを指定する。
【０１２４】
演算処理Ｂ１４０６は、対象プログラム３４０の一部を構成するベクトル演算処理で、演算処理Ａ１４０４から得られる途中結果を使って処理を行う。
【０１２５】
オフロード終了ＡＰＩ１４０７は、ホストプロセッサ３２０からアクセラレータ３３０へのオフロードの終了位置、及びアクセラレータ３２０からホストプロセッサ３３０へ転送されるデータを指定する。
【０１２６】
出力処理ＡＰＩ１４０８は、演算処理Ｂ１４０６までを処理することで得られた結果を出力キュー１４０９に追加する。
【０１２７】
出力処理ＡＰＩ１４０８が出力キュー１４０９へのデータ追加をする機構は、以下の通りである。すなわち、プログラムスレッドである出力処理ＡＰＩ１４０８がソケットでデータ送信を行う。そして、ホスト上で実行されているスレッドがソケットでデータ受信を行い、データを出力キュー１４０９へ追加する。
【０１２８】
出力処理ＡＰＩ１４０８は、結果のデータのみを引数で受け取り、出力キューに書き出すよう規定される。そのため、出力処理ＡＰＩ１４０８自体が生成するデータはない。
【０１２９】
プログラム全体の実行時間に占める、各処理の実行時間の割合は、入力処理ＡＰＩと出力処理ＡＰＩについては無視できるほどに小さく、演算処理Ａ１４０４については４割、演算処理Ｂ１４０６については６割である。
【０１３０】
演算処理Ａと演算処理Ｂともに、ホストプロセッサ３２０とアクセラレータ３３０のいずれによっても実行が可能である。実施実施形態では、ホストプロセッサ３２０用のコンパイラとアクセラレータ３３０用のコンパイラの両方が用意される。そのため、１つのプログラムから、それを実行するプロセッサが異なる２種類の実行ファイルを生成することが可能である。
【０１３１】
入力処理ＡＰＩ１４０３は、入力キュー１４０１からのデータ取得をソケットで実現している。そのため、ホストプロセッサ３２０とアクセラレータ３３０のいずれによっても実行が可能である。
【０１３２】
出力処理ＡＰＩ１４０８は、出力キュー１４０９へのデータ出力をソケットで実現している。そのため、ホストプロセッサ３２０とアクセラレータ３３０のいずれによっても実行が可能である。
【０１３３】
本実施形態では、プログラムを実行するためのプロセッサの割り当てが指定された、元々の実行方式である実行方式１とは、割り当てが異なる実行方式２を用意する。実行方式が異なると、各プロセッサについてのリソース使用量が異なる。そのため、複数の入力データに対して複数の実行方式を併用することによって、余剰のリソースを極力、削減することができる。従って、システム全体としてのスループットを向上させることができる。以降、異なる実行方式を併用して実行するシステムを、「実行方式併用システム」という。また、ホストプロセッサ３２０、アクセラレータ３３０を、単に「ホスト」、「アクセラレータ」という。
【０１３４】
図１５に、実行方式併用システムで実現可能な、プログラムの複数の実行方式の例を示す。
【０１３５】
「実行方式１」は、元のオフロード指定付きプログラムの実行方式であり、プログラムの一部が、ホストからアクセラレータへオフロードされる。実行方式１では、次のようなフローで処理が行われる。
【０１３６】
まず、ホスト側で、入力ＡＰＩ及び演算処理Ａが実行される。そして、ホストがオフロード開始ＡＰＩを実行し、ホストからアクセラレータへデータを転送する。
【０１３７】
次に、アクセラレータ側で、演算処理Ｂが実行される。そして、アクセラレータがオフロード終了ＡＰＩを実行し、アクセラレータからホストへデータを転送する。
【０１３８】
最後に、ホスト側で、出力ＡＰＩが実行される。
【０１３９】
実行方式１では、１つの入力データに対して、ホストのプロセッサリソースとアクセラレータのプロセッサリソースの両方が使用される。なお、本実施形態において、「１つの入力データ」とは、処理対象の単位となる単一あるいは一組の入力データを意味する。
【０１４０】
次に、「実行方式２」は、プログラムの全てがホスト側で実行される実行方式である。実行方式２では、ホスト側で、入力ＡＰＩ、演算処理Ａ演算処理Ｂ、及び出力ＡＰＩの実行の全てが実行される。
【０１４１】
実行方式２は、コンパイラなどの一般技術で、プログラム中のオフロード指定部を無視することで実現される。実行方式２では、１つの入力データに対して、ホストのプロセッサリソースのみが使用される。
【０１４２】
最後に、「実行方式３」は、プログラムによる処理の全てがアクセラレータ側で実行される実行方式である。ただし、アクセラレータへの処理の開始の指示は、ホストプロセッサが実行する必要がある。実行方式３では、アクセラレータ側で、入力ＡＰＩ、演算処理Ａ、演算処理Ｂ、及び出力ＡＰＩの実行の全てが実行される。
【０１４３】
実行方式３は、コンパイラなど一般技術によって、オフロード指定部を無視し、変換装置３１０によって入力処理ＡＰＩから出力処理ＡＰＩまでをオフロード部として、実行方式指定プログラム３４２に変換することで実現される。入力処理ＡＰＩから出力処理ＡＰＩまでをオフロードするために必要なデータ転送情報は、規定されたＡＰＩを用いているために、コマンドライン引数のみであることが分かっている。実行方式３では１入力に対してアクセラレータのプロセッサリソースのみを使用する。これはオフロード先アクセラレータの指定を変えることで、複数種類のアクセラレータがあった場合も実現が可能である。
【０１４４】
図１６に、本実施形態の実行方式併用システムにおいて使用される各種のプログラム１６００（以降、「プログラム群」という。）の構成例と、プログラム群１６００に含まれる各プログラム間の関係を示す。
【０１４５】
プログラム群１６００に含まれる６つのプログラムは、以下の４つに分類される。
１）処理対象として入力されるプログラム
対象プログラム３４０は、本実行方式併用システムによって処理される対象のプログラムである。対象プログラム３４０は、ホストプロセッサ３２０によって、実行方式１でのオフロードが想定されたプログラムである。対象プログラム３４０は、変換装置３１０に入力され、変換後プログラム３４１に変換される。
２）変換装置３１０によって実行されるプログラム
変換プログラム１６０６は、変換装置３１０によって実行され、対象プログラム３４０を変換後プログラム３４１に変換する。
【０１４６】
変換プログラム１６０６は、特定処理判定手段３１１、処理変換手段３１２を備える。特定処理判定手段３１１と処理変換手段３１２は、プログラムを変換するソフトウェアの関数である。
【０１４７】
変換装置３１０は、変換プログラム１６０６を実行し、対象プログラム３４０にオフロードの有無又は形態が異なる３種類の実行方式のプログラムを追加し、変換後プログラム３４１を生成する。すなわち、変換装置３１０は、対象プログラム３４０を基に、オフロードの形態が異なる他の実行方式２、３で実行される実行方式指定プログラム３４２を含む、変換後プログラム３４１を生成する。実行方式指定プログラム３４２は、ホストプロセッサ３２０及びアクセラレータ３３０の一方又は両方によって実行される。
【０１４８】
さらに、変換後プログラム３４１は、内部に条件分岐で実現された処理切替手段３４３を含む。
３）ホストプロセッサ３２０によって実行されるプログラム
変換後プログラム３４１、複数実行プログラム１６０１、及び実行方式決定プログラム１６０７は、ホストプロセッサ３２０によって実行され、本実行方式併用システムのオフロードの全体を制御する。
【０１４９】
実行方式決定プログラム１６０７は、実行方式決定手段３２１と実行方式設定手段３２２を備える。実行方式決定手段３２１と実行方式設定手段３２２はデーモンスレッドの関数である。
【０１５０】
複数実行プログラム１６０１は、入力データ確認手段１６０２、実行方式問合せ手段１６０３、スレッド実行手段１６０４を備える。  スレッド実行手段１６０４は、複数実行プログラム１６０１の実行のために、一般的なＯＳが有するスレッド生成手段（図示なし）を用いてスレッドを生成する。複数実行プログラム１６０１と実行方式決定プログラム１６０７との間の情報交換は、一般的なＯＳが有する通信手段（図示なし）を用いて行われる。
【０１５１】
ホストプロセッサ３２０は、複数実行プログラム１６０１と実行方式決定プログラム１６０７を用いて、入力データごとに実行方式を選択する。そして、ホストプロセッサ３２０は、変換後プログラム３４１に含まれる実行方式指定プログラム３４２のうち、選択した実行方式に対応するプログラムを実行する。ホストプロセッサ３２０は、選択した実行方式がアクセラレータ３３０使用する方式であるときは、アクセラレータへのオフロード部である、アクセラレータ指定プログラム３４４をアクセラレータに実行させる。
４）アクセラレータ３３０によって実行されるプログラム
アクセラレータ指定プログラム３４４は、ホストプロセッサ３２０によってオフロードされ、アクセラレータ３３０によって実行されるプログラムである。
【０１５２】
次に、本実施形態の実行方式併用システムの動作を説明する。図１７に、ホストプロセッサ３２０内で、各手段がスレッドとして動く様子を示す。各スレッドの動作は、後述する。
【０１５３】
実行方式併用システム１６００の動作は、（１）対象プログラムから変換後プログラムを作成するフェーズと、（２）実行方式を切り替えながら変換後プログラムを実行するフェーズ、の２つのフェーズに分かれる。
（１）元プログラムから変換後プログラムを作成するフェーズ
特定処理判定手段と処理変換手段によって、対象プログラムから変換後プログラムが作成される。
【０１５４】
特定処理判定手段３１１は、対象プログラム３４０の入力処理ＡＰＩと出力処理ＡＰＩの位置をプログラムソース中から探し、入力処理ＡＰＩと出力処理ＡＰＩの位置を処理変換手段３１２に通知する（ステップＳ４０１）。
【０１５５】
処理変換手段３１２は、特定処理判定手段３１１から通知された入力処理ＡＰＩと出力処理ＡＰＩの位置から、入力処理ＡＰＩから出力処理ＡＰＩまでの範囲をオフロード可能範囲として設定する。そして、処理変換手段３１２は、前述の３種類の実行方式で実行される実行方式指定プログラム３４２を、オフロード可能範囲のプログラムのコピーとオフロード開始ＡＰＩとオフロード終了ＡＰＩの追加や削除によって生成する。
【０１５６】
具体的には、実行方式１の実行方式指定プログラム３４２は、対象プログラム３４０に含まれるオフロード開始ＡＰＩの直後の処理から、オフロード終了ＡＰＩの直前の処理までの範囲、すなわち、オフロード可能範囲に含まれているプログラムを削除することで実現する。
【０１５７】
実行方式２の実行方式指定プログラム３４２は、対象プログラム３４０のプログラムをそのまま利用することで実現する。なお、実行方式２の実行方式指定プログラム３４２は、実際にはオフロードは行われないが、他の実行方式のものと区別することなく、オフロードプログラムと呼ぶことにする。
【０１５８】
実行方式３の実行方式指定プログラム３４２の生成のために、まず、オフロード可能範囲に含まれるオフロード開始ＡＰＩとオフロード終了ＡＰＩを削除する。次に、入力処理ＡＰＩから出力処理ＡＰＩをオフロード指定するために、入力処理ＡＰＩで必要なデータの指定とともに、入力処理ＡＰＩの直前にオフロード開始ＡＰＩを追加する。さらに、出力処理ＡＰＩから出力されるデータの指定とともに、出力処理ＡＰＩの直後にオフロード終了ＡＰＩを追加する。以上の処理により、実行方式３が実現される。
【０１５９】
対象プログラム３４０から、上記の３種類の実行方式の実行方式指定プログラム３４２、及び３種類の実行方式を条件分岐で切り替える処理切替手段３４３を有する変換後プログラム３４１が生成される（ステップＳ４０２）。なお、条件分岐の条件は、変換後プログラム３４１の実行時に、実行方式設定手段３２１からソケット通信を用いて通知される。
（２）実行方式を切り替えながら変換後プログラムを実行するフェーズ
変換後プログラム３４１を含む複数実行プログラム１６０１は、実行方式決定手段３２１と実行方式設定手段３２２によって、実行方式が切り替えられながら、実行される。
【０１６０】
複数実行プログラム１６０１のスレッドと、実行方式併用用スレッドが実行状態になる。
【０１６１】
複数実行プログラム１６０１は、入力キュー１４０１にデータがあるか否かをチェックする。入力キュー１４０１にデータがない場合は、複数実行プログラムは１６０１入力キュー１４０１にデータが入ってくるまで待ち状態になる。
【０１６２】
実行方式問合せ手段１６０３は、処理する入力データに対する実行方式を決定するために、実行方式決定手段３２１に対して、実行方式併用用スレッドに対する問い合わせを行う。この問い合わせにはソケット通信が用いられる。
【０１６３】
まず、実行方式決定手段３２１は、プログラムとシステムのパラメータから、各実行方式の配分数を配分数決定アルゴリズムで決定する。
【０１６４】
次に、実行方式決定手段３２１は、実行方式の優先度順に、各実行方式の現在実行している入力データ数が既に決定した配分数に達していない実行方式を選択し、一つの入力データに対するプログラムの実行方式として決定する。配分数決定アルゴリズムについては後述する。
【０１６５】
実行方式設定手段３２２は、実行方式決定手段３２１から指示された実行方式を、実行方式問合せ手段１６０３に通知する。この通知にはソケット通信が用いられる。
【０１６６】
実行方式問合せ手段１６０３は、受け取った実行手段を変数として設定する。
【０１６７】
スレッド実行手段１６０４は、一つの入力データに対する変換後プログラム３４１を実行するためにスレッドを生成する。スレッド実行手段１６０４は、スレッド生成時に、実行方式問合せ手段１６０３によって設定された変数を引数として与える。
【０１６８】
変換後プログラム３４１のスレッドでは、スレッド実行手段１６０４から引数で通知された実行方式を示す変数と、条件分岐で実現された処理切替手段３４３から、指定された実行方式でオフロードプログラムが実行される。
【０１６９】
本実施形態では、実行方式ごとに、処理するデータ数の配分を決定し、各データに対する実行方式を、データ数の配分を基にして決定する。以下に、配分数決定アルゴリズムのフローを示す。
【０１７０】
図１８は、本アルゴリズムの処理フローを示すフローチャートである。
【０１７１】
全ての実行方式に対して、レイテンシが小さい順に優先度を設定し、全てのプロセッサリソースの未使用率を１００パーセントと設定する（ステップＳ１８０１）。
【０１７２】
本実施形態では、実行方式のレイテンシが小さい順に優先度を設定する。データ転送による時間が十分無視できるとして、各実行方式のレイテンシはプログラム全体の実行時間の４割を占めるスカラ演算である演算処理Ａのレイテンシとプログラム全体の実行時間の６割を占めるベクトル演算である演算処理Ｂのレイテンシの和とする。なお、スカラ演算処理については、ホストプロセッサ３２０の性能とアクセラレータ３３０の性能の比は、４：１である。ベクトル演算処理については、ホストプロセッサ３２０の性能とアクセラレータ３３０の性能の比は、１：２である。
【０１７３】
本実施形態では、ある実行方式の「レイテンシ」を、単一の入力データを処理するプログラムについて、その全体をホストが処理したときの実行時間に対する、その実行方式で処理したときの実行時間の比と定義する。このとき、実行方式１では、ホストによる実行時間は０.４÷１.０で０.４、アクセラレータによる実行時間は０.６÷２.０＝０.３となる。り従って、実行方式１のレイテンシはこれらの和であるから、０.７となる。
【０１７４】
実行方式２のレイテンシは、全てホストプロセッサ３２０が処理することから、１.０である。
【０１７５】
実行方式３のレイテンシは、０.４÷０.２５＋０.６÷２.０＝１.９となる。
【０１７６】
従って、優先度は高い順に実行方式１、実行方式２、実行方式３となる。
【０１７７】
次に、プロセッサリソースの未使用率がゼロ、すなわち全てのリソースが使用済みのプログラムを利用しない実行方式の中で、最も優先度が高い実行方式を選択する（ステップＳ１８０２）。ここでは、ホストとアクセラレータの両方のプロセッサリソース未使用率が１００パーセントであるため、実行方式１から実行方式３の全ての実行方式が対象となる。これらの実行方式の中で、最も優先度の高い実行方式は実行方式１であるため、実行方式１を選択する。
【０１７８】
選択された実行方式がホストのプロセッサリソースとアクセラレータのプロセッサリソースの両方を使う実行方式であるかを判断する（ステップＳ１８０３）。両方を使う実行方式のときはステップＳ１８０４へ、一方のみを使う実行方式であればステップＳ１８０６へ分岐する。実行方式１はホストとアクセラレータのプロセッサリソースを使うため、ステップＳ１８０４に進む。
【０１７９】
ホストとアクセラレータの各々について、プロセッサリソースを使い切るだけの入力データ数を求める（ステップＳ１８０４）。実行方式１では、ホストとアクセラレータを使用するため、それぞれのプロセッサリソースを使い切るだけの入力データ数（以降、「必要データ数」という。）を求める。は、（単位時間当たりに１コアで処理できる入力データ数）×コア数から求める。
【０１８０】
ここで、「単位時間」は、ホストによってプログラムの全体を実行した場合の処理時間とする。
【０１８１】
実行方式１では、ホストはプログラムの４割を占めるスカラ演算を実行するため、単位時間当たりでは１コアで１÷０.４＝２.５データが処理できる。本実施形態では、ホストの内蔵コア数が８であるので、ホストのプロセッサリソースを使い切るための必要データ数は、２.５×８＝２０となる。
【０１８２】
次に、実行方式１では、アクセラレータはプログラムの６割を占めるベクトル処理を実行するため、１コア当たりでは１.０÷（０.６÷２）より３.３３データが処理できる。コア数が４０であるので、アクセラレータのプロセッサリソースを使い切るための必要データ数は、３.３３×４０＝１３３.３３データとなる。
【０１８３】
ホストとアクセラレータのプロセッサリソース未使用量を使い切るための必要データ数のうちの、小さい方を当該の実行方式のデータ数に決定する（ステップＳ１８０５）。ステップＳ１８０４で得られた結果から、小さい方の必要データ数はホストの２０となるため、実行方式１では２０個の入力データを扱うと決定する。
【０１８４】
各計算機のプロセッサリソース未使用量を更新する（ステップＳ１８０７）。実行方式１では、２０個のデータを処理することによって、ホストのプロセッサリソースは全て使われるため、ホストのプロセッサリソース未使用量は０となる。アクセラレータを使い切るためには１３３.３３データが必要になることから、アクセラレータのプロセッサリソース使用量は２０÷１３３.３３から１５パーセントとなる。以上から、プロセッサリソース未使用量は、ホストが０パーセント、アクセラレータが８５パーセントに更新される。
【０１８５】
全ての計算機のプロセッサリソース余り量が０パーセントであれば、データ数決定フローは終了となり、そうでなければステップＳ１８０２へ進む（ステップＳ１８０８）。これまでの結果から、アクセラレータのプロセッサリソース余り量がゼロでないため、ステップＳ１８０２へ進む。
【０１８６】
ステップＳ１８０２では、プロセッサリソース余り量が０パーセントでない計算機がアクセラレータのみであるため、全ての処理がアクセラレータで実行される実行方式３が選択される。
【０１８７】
ステップＳ１８０３では、実行方式３がアクセラレータのみを使用するため、ステップＳ１８０６へ進む。
【０１８８】
使用されるプログラム、ここではアクセラレータのプロセッサリソースを使い切るために必要なデータ数を決定する（ステップＳ１８０６）。
【０１８９】
実行方式３で、アクセラレータの全プロセッサリソースを全て使い切るための必要データ数は１.０÷１.９×４０から２１.０５となる。アクセラレータのプロセッサリソース余り量が８５パーセントであるため、余ったアクセラレータのプロセッサリソースで扱うことができるデータの個数は２１.０５×０.８５から１７.９データと決定する。必要データ数が決定されると、ステップＳ１８０７へ進む。
【０１９０】
ステップＳ１８０７では、実行方式３で１７.９個のデータを処理することでアクセラレータのプロセッサリソースを使い切るために、アクセラレータのプロセッサリソース余り量はゼロとなる。
【０１９１】
以上の処理により、ホストとアクセラレータの各々について、プロセッサリソース未使用量はともにゼロとなり、実行方式配分数決定アルゴリズムは終了となる。
【０１９２】
以上の結果から、処理されるデータの個数は、実行方式１では２０個、実行方式２では０個、実行方式３では１７.９個と決定される。このように、本実施形態では、全てのプロセッサリソースを使用することにより、３７.９個のデータを処理することができる。
【０１９３】
本実施形態の効果を説明する。本実施形態では、図１７のようにプログラムを変換することで複数の実行方式を用意し、入力データごとに実行方式を切り替えることが可能になる。さらに、配分数を決定することで、通常のオフロードにおける実行方式である実行方式１の場合であれば単位時間あたり２０データしか扱えないところを、本実施形態では未使用のアクセラレータのプロセッサリソースを使い切ることができるので、単位時間あたり３７.９データを扱えるようになる。このように、システムのスループットを大幅に向上させることができるという効果がある。
【０１９４】
なお、プログラム中に、オフロード開始位置及びオフロード終了位置を示す、プラグマ等の指示文が挿入されることがある。そこで、そのような指示文をプログラム中で検索し、発見された場合には、その指示文の位置をオフロード開始位置やオフロード終了位置としてもよい。
【０１９５】
本発明の実施形態では、複数のプロセッサの例として、ホストプロセッサとアクセラレータの場合を示した。ホストプロセッサとアクセラレータは、それぞれ、複数のＣＰＵコアを内蔵しているものとした。また、ホストプロセッサとアクセラレータは、それぞれ、スカラ演算、ベクトル演算に適するものとした。しかし、本発明における複数のプロセッサの、アーキテクチャ、内蔵ＣＰＵの個数、適するアプリケーションは特に限定されない。
【０１９６】
各実施形態の説明から理解できるように、本発明におけるプロセッサは、以下のような条件を満たすものであればよい。
１）プロセッサの個数は２個以上である。
【０１９７】
本発明は、プログラムの全部又は一部をオフロードするシステムを対象とするため、プロセッサは複数個必要である。
２）各プロセッサは、所定の処理についての性能に影響を与えるリソースを保有する。
【０１９８】
本発明は、プログラムの全部又は一部について、オフロードの有無を選択することによって、未使用のリソースを極力なくし、システム全体の性能を向上させる。そのため、各プロセッサは、使用の有無によって、システム全体の処理性能が変化するようなリソース、例えばＣＰＵ使用時間、複数のＣＰＵコアなどを備える。
３）各プロセッサのアーキテクチャは任意である。
【０１９９】
アーキテクチャの違いによって、プロセッサにとって適した、すなわち、性能が最大限に発揮されるアプリケーションや演算処理等が異なる場合がある。しかし、各プロセッサは、オフロード部の処理が可能なものであればよく、プロセッサの内部の構造や処理方式は任意である。
４）各プロセッサの内蔵ＣＰＵコアの個数は１以上である。
【０２００】
本発明では、各プロセッサのリソースの未使用量が考慮される。しかし、ＣＰＵコアを１個のみ内蔵するプロセッサであっても、ＣＰＵ使用時間等、未使用のリソースの定義は可能であるから、内蔵ＣＰＵコアの個数は任意である。
【０２０１】
なお、本明細書における各種のプログラムは、ＲＯＭ（Read Only Memory）、ＲＡＭ（Random Access Memory）、フラッシュメモリ等の半導体記憶装置、光ディスク、磁気ディスク、光磁気ディスク等、非一時的な媒体に格納されてもよい。
【０２０２】
また、以上の実施形態は各々他の実施形態と組み合わせることができる。
【０２０３】
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
【０２０４】
この出願は、２０１２年６月２６日に出願された日本出願特願２０１２−１４２９０１を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【０２０５】
本発明は、例えば、映像監視、映像変換、画像変換、金融処理などのサービスをサブプロセッサ付きサーバで実現したシステムへの適用が可能である。また、入力ごとに所定の処理を行って結果を求めるアプリケーションであって、オフロード部が指定されたものを、計算機の性能が異なるようなクラスタで構成されたシステムで実現するような場合でも、本発明は適用可能である。
【符号の説明】
【０２０６】
１６００  プログラム群
【図１】
2014002412.tif 000003
【図２】
2014002412.tif 000004
【図３】
2014002412.tif 000005
【図４】
2014002412.tif 000006
【図５】
2014002412.tif 000007
【図６】
2014002412.tif 000008
【図７】
2014002412.tif 000009
【図８】
2014002412.tif 000010
【図９】
2014002412.tif 000011
【図１０】
2014002412.tif 000012
【図１１】
2014002412.tif 000013
【図１２】
2014002412.tif 000014
【図１３】
2014002412.tif 000015
【図１４】
2014002412.tif 000016
【図１５】
2014002412.tif 000017
【図１６】
2014002412.tif 000018
【図１７】
2014002412.tif 000019
【図１８】
2014002412.tif 000020
【図１９】
2014002412.tif 000021
【手続補正書】
【提出日】平成26年12月17日(2014.12.17)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
特定の処理について、第１のプロセッサが備える第１のリソースの第１の使用量と第２のプロセッサが備える第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式指定プログラムを含む対象プログラム中の、部分プログラムの範囲を判定する特定処理判定手段と、
前記部分プログラムを、前記使用比率を前記第１の比率とは異なる第２の比率として併用して動作する第２の実行方式指定プログラムに変換し、変換後プログラムを生成する処理変換手段
を備えることを特徴とするプログラム変換装置。
【請求項２】
前記変換後プログラムは、
前記第１の実行方式指定プログラムと、
前記第２の実行方式指定プログラムと、
外部からの指定に基づいて、前記第１の実行方式指定プログラム又は第２の実行方式指定プログラムを切り替える処理切替プログラムを含む
ことを特徴とする請求項１に記載のプログラム変換装置。
【請求項３】
特定の処理について、第１のプロセッサが備える第１のリソースの第１の使用量と第２のプロセッサが備える第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式指定プログラムを含む対象プログラム中の、部分プログラムの範囲を判定し、
前記部分プログラムを、前記使用比率を前記第１の比率とは異なる第２の比率として併用して動作する第２の実行方式指定プログラムに変換する
を備えることを特徴とするプログラム変換方法。
【請求項４】
外部からの指定に基づいて、特定の処理について、第１のプロセッサが備える第１のリソースの第１の使用量と第２のプロセッサが備える第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式による第１の処理手段と、又は前記使用比率を前記第１の比率とは異なる第２の比率として併用して動作する第２の実行方式による第２の処理手段を切り替える
ことを特徴とする処理切替方法。
【請求項５】
第１のプロセッサに、
特定の処理について、前記第１のプロセッサが備える第１のリソースの第１の使用量と第２のプロセッサが備える第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式による第１の処理手段と、
前記使用比率を前記第１の比率とは異なる第２の比率として併用して動作する第２の実行方式による第２の処理手段と、
外部からの指定に基づいて、前記第１の処理手段又は第２の処理手段を切り替える処理切替手段
として動作させるための実行方式決定プログラムを格納した非一時的な記憶媒体。
【請求項６】
特定の処理について、第１のプロセッサが備える第１のリソースの第１の使用量と第２のプロセッサが備える第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式、又は前記使用比率を前記第１の比率とは異なる第２の比率として併用して動作する第２の実行方式のいずれかを選択し、
前記選択結果に基づいて、前記第１の実行方式又は前記第２の実行方式を設定する
ことを特徴とする実行方式決定方法。
【請求項７】
前記第１のリソースの未使用量及び前記第２のリソースの未使用量が少なくなるように、前記第１の実行方式又は前記第２の実行方式のいずれかを選択する
ことを特徴とする請求項６に記載の実行方式決定方法。
【請求項８】
複数の入力データのうちの第１の配分数の入力データについて前記第１の実行方式を適用し、前記複数の入力データのうちの第２の配分数の入力データについて前記第２の実行方式を適用する
ことを特徴とする請求項６又は７に記載の実行方式決定方法。
【請求項９】
前記第１の実行方式及び前記第２の実行方式の優先度に基づいて、前記第１の配分数及び前記第２の配分数を決定する
ことを特徴とする請求項８に記載の実行方式決定方法。
【請求項１０】
前記第１の配分数及び前記第２の配分数を変化させたときの性能を計測し、
前記性能に基づいて、前記第１の配分数及び前記第２の配分数を決定し、
前記決定された配分数に基づいて、前記第１の実行方式及び前記第２の実行方式のいずれかを選択する
ことを特徴とする請求項８又は９に記載の実行方式決定方法。
【請求項１１】
第１のプロセッサに、
特定の処理について、前記第１のプロセッサが備える第１のリソースの第１の使用量と第２のプロセッサが備える第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式、又は前記使用比率を前記第１の比率とは異なる第２の比率として併用して動作する第２の実行方式のいずれかを選択する実行方式決定手段と、
前記選択結果に基づいて、前記第１の実行方式又は前記第２の実行方式を設定する実行方式設定手段
として動作させるためのプログラムを格納した非一時的な記憶媒体。
【請求項１２】
第１のリソースを具備する第１のプロセッサと、
第２のリソースを具備する第２のプロセッサを備え、
前記第１のプロセッサは、外部からの指定に基づいて、特定の処理について、前記第１のリソースの第１の使用量と前記第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式による第１の処理手段、又は前記使用比率を前記第１の比率とは異なる第２の比率として併用して動作する第２の実行方式による第２の処理手段を切り替える処理切替手段、並びに前記第１の処理手段及び前記第２の処理手段のうちの前記第１のリソースを使用する第１の部分処理手段として動作する
ことを特徴とするプロセッサシステム。
【請求項１３】
前記第２のプロセッサは、前記第１の処理手段及び前記第２の処理手段のうちの前記第２のリソースを使用する第２の部分処理手段として動作する
ことを特徴とする請求項１２に記載のプロセッサシステム。
【請求項１４】
第１のプロセッサを用いて、外部からの指定に基づいて、特定の処理について、前記第１のプロセッサの第１のリソースの第１の使用量と第２のプロセッサの第２のリソースの第２の使用量との使用比率を第１の比率として併用して動作する第１の実行方式による第１の処理手段、又は前記使用比率を前記第１の比率とは異なる第２の比率として併用して動作する第２の実行方式による第２の処理手段を切り替え、前記第１の処理手段及び前記第２の処理手段のうちの前記第１のリソースを使用する第１の部分処理手段として動作し、
前記第２のプロセッサを用いて、前記第１の処理手段及び前記第２の処理手段のうちの前記第２のリソースを使用する第２の部分処理手段として動作する
ことを特徴とする並列実行方法。
【国際調査報告】
2014002412.tif 000022
2014002412.tif 000023