(57)【特許請求の範囲】
【請求項１】
第１データに対して一次推論ジョブを実行した後、前記第１データに対する前記一次推論ジョブの実行結果に応じた第１の数の推論タスクを、前記第１データに対して実行する第１の二次推論ジョブを実行する第１推論処理と、
第２データに対して前記一次推論ジョブを実行した後、前記第２データに対する前記一次推論ジョブの実行結果に応じた第２の数の前記推論タスクを、前記第２データに対して実行する第２の二次推論ジョブを実行する第２推論処理と、を並列して実行するとき、
１以上の第１推論装置のいずれかに前記第１データに対する前記一次推論ジョブを実行させ、前記第１データに対する前記一次推論ジョブの実行結果に基づいて前記第１の二次推論ジョブを、タスク単位に分割して前記第１の数の前記推論タスクを生成し、
前記１以上の第１推論装置のいずれかに前記第２データに対する前記一次推論ジョブを実行させ、前記第２データに対する前記一次推論ジョブの実行結果に基づいて前記第２の二次推論ジョブを、タスク単位に分割して前記第２の数の前記推論タスクを生成し、
前記第１の二次推論ジョブに基づく前記第１の数の前記推論タスクと、前記第２の二次推論ジョブに基づく前記第２の数の前記推論タスクと、を２以上の第２推論装置に分散させて実行させることにより、前記第１の二次推論ジョブと前記第２の二次推論ジョブの実行結果を取得する、処理部を有し、
前記第１の数は、前記第２の数以上の数であり、
前記処理部は、
前記第１の数の前記推論タスクと前記第２の数の前記推論タスクとを前記２以上の第２推論装置に処理負荷を分散させて実行させるとき、
前記第１の数と前記第２の数の差分の分だけ前記第１の二次推論ジョブに基づく前記推論タスクを先に実行させた後、前記第１の二次推論ジョブに基づく前記推論タスクと、前記第１の二次推論ジョブに基づく前記推論タスクとを交互に実行させるように実行順序を決定し、前記実行順序に基づいて前記２以上の第２推論装置に実行させる、
情報処理装置。
【請求項２】
１以上の第１推論装置と、
２以上の第２推論装置と、
第１データに対して一次推論ジョブを実行した後、前記第１データに対する前記一次推論ジョブの実行結果に応じた第１の数の推論タスクを、前記第１データに対して実行する第１の二次推論ジョブを実行する第１推論処理と、
第２データに対して前記一次推論ジョブを実行した後、前記第２データに対する前記一次推論ジョブの実行結果に応じた第２の数の前記推論タスクを、前記第２データに対して実行する第２の二次推論ジョブを実行する第２推論処理と、を並列して実行するとき、
前記１以上の第１推論装置のいずれかに前記第１データに対する前記一次推論ジョブを実行させ、前記第１データに対する前記一次推論ジョブの実行結果に基づいて前記第１の二次推論ジョブを、タスク単位に分割して前記第１の数の前記推論タスクを生成し、
前記１以上の第１推論装置のいずれかに前記第２データに対する前記一次推論ジョブを実行させ、前記第２データに対する前記一次推論ジョブの実行結果に基づいて前記第２の二次推論ジョブを、タスク単位に分割して前記第２の数の前記推論タスクを生成し、
前記第１の二次推論ジョブに基づく前記第１の数の前記推論タスクと、前記第２の二次推論ジョブに基づく前記第２の数の前記推論タスクとを前記２以上の第２推論装置に分散させて実行させることにより、前記第１の二次推論ジョブと前記第２の二次推論ジョブの実行結果を取得する、処理部を有する情報処理装置とを備え、
前記第１の数は、前記第２の数以上の数であり、
前記処理部は、
前記第１の数の前記推論タスクと前記第２の数の前記推論タスクとを前記２以上の第２推論装置に処理負荷を分散させて実行させるとき、
前記第１の数と前記第２の数の差分の分だけ前記第１の二次推論ジョブに基づく前記推論タスクを先に実行させた後、前記第１の二次推論ジョブに基づく前記推論タスクと、前記第１の二次推論ジョブに基づく前記推論タスクとを交互に実行させるように実行順序を決定し、前記実行順序に基づいて前記２以上の第２推論装置に実行させる、
情報処理システム。
【請求項３】
コンピュータに、
第１データに対して一次推論ジョブを実行した後、前記第１データに対する前記一次推論ジョブの実行結果に応じた第１の数の推論タスクを、前記第１データに対して実行する第１の二次推論ジョブを実行する第１推論処理と、
第２データに対して前記一次推論ジョブを実行した後、前記第２データに対する前記一次推論ジョブの実行結果に応じた第２の数の前記推論タスクを、前記第２データに対して実行する第２の二次推論ジョブを実行する第２推論処理と、を並列して実行するとき、
１以上の第１推論装置のいずれかに前記第１データに対する前記一次推論ジョブを実行させ、前記第１データに対する前記一次推論ジョブの実行結果に基づいて前記第１の二次推論ジョブを、タスク単位に分割して前記第１の数の前記推論タスクを生成し、
前記１以上の第１推論装置のいずれかに前記第２データに対する前記一次推論ジョブを実行させ、前記第２データに対する前記一次推論ジョブの実行結果に基づいて前記第２の二次推論ジョブを、タスク単位に分割して前記第２の数の前記推論タスクを生成し、
前記第１の二次推論ジョブに基づく前記第１の数の前記推論タスクと、前記第２の二次推論ジョブに基づく前記第２の数の前記推論タスクとを２以上の第２推論装置に分散させて実行させることにより、前記第１の二次推論ジョブと前記第２の二次推論ジョブの実行結果を取得し、
前記第１の数は、前記第２の数以上の数であり、
前記第１の数の前記推論タスクと前記第２の数の前記推論タスクとを前記２以上の第２推論装置に処理負荷を分散させて実行させるとき、
前記第１の数と前記第２の数の差分の分だけ前記第１の二次推論ジョブに基づく前記推論タスクを先に実行させた後、前記第１の二次推論ジョブに基づく前記推論タスクと、前記第１の二次推論ジョブに基づく前記推論タスクとを交互に実行させるように実行順序を決定し、前記実行順序に基づいて前記２以上の第２推論装置に実行させる、
処理を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理システム及びプログラムに関する。
【背景技術】
【０００２】
従来、複数の計算機（演算装置）を用いて並列計算を行う手法が知られており、例えば、イーサネット（登録商標）回線を用いて計算機間でデータのやりとりを行う情報処理システムが提案されている。
【０００３】
近年においては、パーソナルコンピュータ（以下、パソコン）の性能が向上し、切れ目が無いデータ（例えば、撮像画像）を外部から大量に取り込んで、処理（例えば、推論処理）を並列して行うことにも利用されるようになってきている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１９−００３２７１号公報
【特許文献２】特開２０１８−１２０５４７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、同系統の処理でも、実際の処理対象によって負荷が大きく異なる場合がある。例えば、カメラの撮像画像中に含まれる人物の年齢及び性別を推論する処理を行う場合、人通りの多い場所の撮像画像と、人通りの少ない場所の撮像画像とでは、推論する対象である人物の数が大きく異なる。そのため、人通りの多い場所の撮像画像に対して処理を行う場合と、人通りの少ない場所の撮像画像に対して処理を行う場合と、では、処理負荷が大きく異なることとなる。
【０００６】
したがって、並列して行う場合、いずれかの処理装置では、処理負荷が大きくなって処理遅延が発生しているにも拘わらず、他の処理装置では、待機状態が続くなどの虞があり、システム全体としては、非効率的となることがあった。
【０００７】
１つの側面では、本発明は、処理負荷の偏りを防止可能な情報処理装置、情報処理システム及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記課題を解決するために、情報処理装置が提供される。情報処理装置は、処理部を有する。処理部は、第１データに対して一次推論ジョブを実行した後、第１データに対する一次推論ジョブの実行結果に応じた第１の数の推論タスクを、第１データに対して実行する第１の二次推論ジョブを実行する第１推論処理と、第２データに対して一次推論ジョブを実行した後、第２データに対する一次推論ジョブの実行結果に応じた第２の数の推論タスクを、第２データに対して実行する第２の二次推論ジョブを実行する第２推論処理と、を並列して実行するとき、１以上の第１推論装置のいずれかに第１データに対する一次推論ジョブを実行させ、第１データに対する一次推論ジョブの実行結果に基づいて第１の二次推論ジョブを、タスク単位に分割して第１の数の推論タスクを生成し、１以上の第１推論装置のいずれかに第２データに対する一次推論ジョブを実行させ、第２データに対する一次推論ジョブの実行結果に基づいて第２の二次推論ジョブを、タスク単位に分割して第２の数の推論タスクを生成し、第１の二次推論ジョブに基づく第１の数の推論タスクと、第２の二次推論ジョブに基づく第２の数の推論タスクと、を２以上の第２推論装置に分散させて実行させることにより、第１の二次推論ジョブと第２の二次推論ジョブの実行結果を取得する。また、第１の数は、第２の数以上の数であり、処理部は、第１の数の推論タスクと第２の数の推論タスクとを２以上の第２推論装置に処理負荷を分散させて実行させるとき、第１の数と第２の数の差分の分だけ第１の二次推論ジョブに基づく推論タスクを先に実行させた後、第１の二次推論ジョブに基づく推論タスクと、第１の二次推論ジョブに基づく推論タスクとを交互に実行させるように実行順序を決定し、実行順序に基づいて２以上の第２推論装置に実行させる。
【０００９】
また、上記課題を解決するために、情報処理システムが提供される。情報処理システムは、１以上の第１推論装置、２以上の第２推論装置と、情報処理装置とを備える。情報処理装置は、処理部を有する。処理部は、第１データに対して一次推論ジョブを実行した後、第１データに対する一次推論ジョブの実行結果に応じた第１の数の推論タスクを、第１データに対して実行する第１の二次推論ジョブを実行する第１推論処理と、第２データに対して一次推論ジョブを実行した後、第２データに対する一次推論ジョブの実行結果に応じた第２の数の推論タスクを、第２データに対して実行する第２の二次推論ジョブを実行する第２推論処理と、を並列して実行するとき、１以上の第１推論装置のいずれかに第１データに対する一次推論ジョブを実行させ、第１データに対する一次推論ジョブの実行結果に基づいて第１の二次推論ジョブを、タスク単位に分割して第１の数の推論タスクを生成し、１以上の第１推論装置のいずれかに第２データに対する一次推論ジョブを実行させ、第２データに対する一次推論ジョブの実行結果に基づいて第２の二次推論ジョブを、タスク単位に分割して第２の数の推論タスクを生成し、第１の二次推論ジョブに基づく第１の数の推論タスクと、第２の二次推論ジョブに基づく第２の数の推論タスクとを２以上の第２推論装置に分散させて実行させることにより、第１の二次推論ジョブと第２の二次推論ジョブの実行結果を取得する。また、第１の数は、第２の数以上の数であり、処理部は、第１の数の推論タスクと第２の数の推論タスクとを２以上の第２推論装置に処理負荷を分散させて実行させるとき、第１の数と第２の数の差分の分だけ第１の二次推論ジョブに基づく推論タスクを先に実行させた後、第１の二次推論ジョブに基づく推論タスクと、第１の二次推論ジョブに基づく推論タスクとを交互に実行させるように実行順序を決定し、実行順序に基づいて２以上の第２推論装置に実行させる。
【００１０】
また、上記課題を解決するために、コンピュータに情報処理装置と同様の制御を実行させるプログラムが提供される。
【発明の効果】
【００１１】
１側面によれば、処理負荷の偏りを防止できる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施形態の情報処理装置の一例を説明するための図である。
【図２】第２の実施形態のエッジコンピューティングシステムの全体概要例を示す図である。
【図３】第２の実施形態の情報処理システムのハードウェア構成の一例を示す図である。
【図４】第２の実施形態のプラットフォームのハードウェア構成の一例を示す図である。
【図５】第２の実施形態のＰＣＩｅブリッジコントローラのハードウェア構成の一例を示す図である。
【図６】第２の実施形態の情報処理システムにおける各プラットフォームのソフトウェア構成の一例を示す図である。
【図７】第２の実施形態の情報処理システムにおけるプラットフォーム間における通信処理の一例を説明するための図である。
【図８】第２の実施形態の情報処理システムにおけるＰＣＩｅブリッジコントローラを介したプロセッサ間のデータ転送方法の一例を説明するための図である。
【図９】第２の実施形態の情報処理システムの機能構成の一例を示す図である。
【図１０】第２の実施形態の人物推定の全体の概要を説明するための図である。
【図１１】第２の実施形態の分類タスクの実行順序を説明するための図（その１）である。
【図１２】第２の実施形態の分類タスクの実行順序を説明するための図（その２）である。
【発明を実施するための形態】
【００１３】
以下、本実施の形態について図面を参照して説明する。
【００１４】
［第１の実施形態］
図１は、第１の実施形態の情報処理装置の一例を説明するための図である。情報処理装置１は、処理部２を有する。処理部２は、例えば情報処理装置１が有するＣＰＵ（Central Processing Unit）等のプロセッサとして実現される。なお、処理部２は、ＧＰＵ（Graphics Processing Unit）、ＭＰＵ（Micro Processing Unit）、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）、ＰＬＤ（Programmable Logic Device）等を含み得る。ここでいう「プロセッサ」には、複数のプロセッサの集合（マルチプロセッサ）も含まれ得る。
【００１５】
処理部２は、第１推論処理と第２推論処理とを並列して実行する。第１推論処理は、第１データ３に対して一次推論ジョブを実行した後に、さらに第１の二次推論ジョブを実行する処理である。第１データ３は、データ生成装置により生成されたデータである。第１データ３としては、例えば、カメラによって撮影された画像等がある。
【００１６】
一次推論ジョブは、データから所定の情報を推論するジョブである。一次推論ジョブは、例えば、データから検出対象である検出体（例えば、人物）を検出（推論ともいう）する検出ジョブである。
【００１７】
第１の二次推論ジョブは、第１データ３に対する一次推論ジョブの実行結果に応じた第１の数の推論タスクを、第１データ３に対して実行するジョブである。即ち、第１の二次推論ジョブは、第１データ３に対する一次推論ジョブで推論した所定の情報に対して追加の推論を行うジョブである。推論タスクは、例えば、検出体を分類するタスク（例えば、年齢、性別等の特徴を推論するタスク）である。第１の二次推論ジョブは、例えば、第１データ３から検出された検出体それぞれを分類するジョブ（検出体それぞれに対して検出体を分類するタスクを行うジョブともいう）である。
【００１８】
第２推論処理は、第２データ４に対して一次推論ジョブを実行した後に、さらに第２の二次推論ジョブを実行する処理である。第２データ４は、データ生成装置により生成されたデータである。第２データ４としては、例えば、カメラによって撮影された画像等がある。
【００１９】
第１の二次推論ジョブは、第２データ４に対する一次推論ジョブの実行結果に応じた第２の数の推論タスクを、第２データ４に対して実行するジョブである。即ち、第２の二次推論ジョブは、第２データ４に対する一次推論ジョブで推論した所定の情報に対して追加の推論を行うジョブである。第２の二次推論ジョブは、例えば、第２データ４から検出された検出体それぞれを分類するジョブである。
【００２０】
処理部２は、第１推論処理と第２推論処理とを並列して実行するとき、１以上の第１推論装置５（図１では代表して１台のみ表示）のいずれかに第１データ３に対する一次推論ジョブを実行させる（Ｐ１）。例えば、処理部２は、第１データ３から第１データ３に含まれる人物を検出する検出ジョブを１以上の第１推論装置５のいずれかに実行させる。
【００２１】
そして、処理部２は、第１データ３に対する一次推論ジョブの実行結果３ａに基づいて第１の二次推論ジョブを、タスク単位に分割して第１の数（図１においては１）の推論タスク（図１においては推論タスク３ａ１）を生成する（Ｐ２）。例えば、処理部２は、一次推論ジョブの実行結果３ａである第１データ３に含まれる人物の検出結果に基づいて、第１データ３から検出された人物それぞれに対して推論タスクを実行するジョブである第１の二次推論ジョブを、タスク単位に分割する。これにより、処理部２は、第１の二次推論ジョブから第１データ３に含まれる人物に応じた第１の数（図１においては１）の推論タスク（図１においては推論タスク３ａ１）を生成する。
【００２２】
また、処理部２は、１以上の第１推論装置５のいずれかに第２データ４に対する一次推論ジョブを実行させる（Ｐ３）。例えば、処理部２は、第２データ４から第２データ４に含まれる人物を検出する検出ジョブを１以上の第１推論装置５のいずれかに実行させる。
【００２３】
そして、処理部２は、第２データ４に対する一次推論ジョブの実行結果４ａに基づいて第２の二次推論ジョブを、タスク単位に分割して第２の数（図１においては３）の推論タスク（図１においては推論タスク４ａ１，４ａ２，４ａ３）を生成する（Ｐ４）。例えば、処理部２は、一次推論ジョブの実行結果４ａである第２データ４に含まれる人物の検出結果に基づいて、第２データ４から検出された人物それぞれに対して推論タスクを実行するジョブである第２の二次推論ジョブを、タスク単位に分割する。これにより、処理部２は、第２の二次推論ジョブから第２データ４に含まれる人物に応じた第２の数（図１においては３）の推論タスク（図１においては推論タスク４ａ１，４ａ２，４ａ３）を生成する。
【００２４】
処理部２は、第１の二次推論ジョブに基づく推論タスク３ａ１と、第２の二次推論ジョブに基づく推論タスク４ａ１，４ａ２，４ａ３と、を２以上の第２推論装置６−１〜６−ｎに分散させて実行させる（Ｐ５）。
【００２５】
そして、処理部２は、２以上の第２推論装置６−１〜６−ｎから各推論タスクの結果を取得することにより、第１の二次推論ジョブの実行結果３ｂと第２の二次推論ジョブの実行結果４ｂを取得する（Ｐ６）。例えば、処理部２は、推論タスク３ａ１の実行結果（女・２０歳）を受付ける。これにより、処理部２は、第１の二次推論ジョブの実行結果３ｂとして第１データ３には、性別が女であり、年齢が２０歳である人物が含まれるという情報を取得する。また、処理部２は、推論タスク４ａ１の実行結果（男・３０歳）と、推論タスク４ａ２の実行結果（女・２０歳）と、推論タスク４ａ３の実行結果（女・３０歳）と、を受付ける。これにより処理部２は、第２の二次推論ジョブの実行結果４ｂとして第２データ４には、性別が男であり、年齢が３０歳の人物と、性別が女であり、年齢が２０歳の人物と、性別が女であり、年齢が３０歳の人物と、が含まれるという情報を取得する。
【００２６】
ここで、第１の二次推論ジョブ及び第２の二次推論ジョブをジョブ単位で分散させて第２推論装置に実行させた場合（図１（ａ））と、タスク単位で分散させて第２推論装置に実行させた場合（図１（ｂ））について説明する。なお、ここでは第２推論装置は２台であり、各推論タスクの処理負荷（処理量または処理時間ともいう）は同じであるものとして説明する。
【００２７】
図１（ａ）に示すようにジョブ単位で分散させて、第１の二次推論ジョブを第２推論装置６−１に実行させ、第２の二次推論ジョブを第２推論装置６−２に実行させた場合、第２推論装置６−１は、推論タスクを１回行うこととなる。一方で、第２推論装置６−２は、推論タスクを３回行うこととなる。このように、第１の二次推論ジョブ及び第２の二次推論ジョブをジョブ単位で分散させて第２推論装置６−１と、第２推論装置６−２に実行させた場合、第１の二次推論ジョブと第２の二次推論ジョブとで推論タスクの回数が異なるとき処理負荷が偏ることとなる。その結果、推論タスクを多く実行する必要がある二次推論ジョブが割り当てられた第２推論装置における処理負荷が他の第２推論装置に比べて著しく大きくなり、処理遅延が発生し、推論処理のリアルタイム性が損なわれる場合があった。とりわけ、第１データ３専用の第２推論装置と第２データ４専用の第２推論装置を設け、一定の周期毎に第１データ３及び第２データ４を取得して推論処理を並列して行うような場合には、一方の第２推論装置だけ慢性的に処理遅延が発生してしまう場合があった。
【００２８】
これに対して、図１（ｂ）に示すように第１の二次推論ジョブ及び第２の二次推論ジョブをタスク単位に分割し、タスク単位で分散させて実行させる場合、第２推論装置６−１及び第２推論装置６−２は、推論タスクを２回行うこととなる。このように、第１の二次推論ジョブ及び第２の二次推論ジョブをタスク単位で分散させて第２推論装置６−１と、第２推論装置６−２に実行させた場合、推論タスクの回数が異なるときでも処理負荷の偏りを防止できる。
【００２９】
以上が第１の実施形態の情報処理装置１である。このような情報処理装置１によれば、一次推論ジョブの結果に基づいて第１の二次推論ジョブ及び第２の二次推論ジョブをタスク単位で分散させて実行させているため、推論タスクの回数（処理量ともいう）が異なるときでも処理負荷の偏りを防止できる。
【００３０】
このように処理負荷の偏りを防止することで、情報処理装置１は、安定的な推論処理の実行を実現できる。また、情報処理装置１は、処理遅延の発生を抑止（推論処理のリアルタイム性が損なわれることを抑止ともいう）でき、推論処理の効率的な実行を実現できる。
【００３１】
［第２の実施形態］
次により具体的な実施形態としてエッジコンピューティングシステムについて説明する。図２は、第２の実施形態のエッジコンピューティングシステムの全体概要例を示す図である。
【００３２】
エッジコンピューティングシステム１０は、データを収集するエッジ（またはフロント）に近いエリアでデータの処理を行うことで、通信遅延等を抑止してリアルタイム性を確保した処理を実現するシステムである。エッジコンピューティングシステム１０としては、例えば、小売店等におけるＡＩ（Artificial Intelligence）推論を用いた人物推定を行うシステム等がある。小売店等におけるＡＩ推論を用いた人物推定を行うシステムは、人物推定により得られた結果（推定結果ともいう）に基づいて個々の顧客に対して広告などを情報提供することにより、個々の顧客にあった情報提供を可能にするシステムである。なお、以下では、エッジコンピューティングシステム１０として、小売店等におけるＡＩ推論を用いた人物推定（具体的には、人物の性別・年齢の推定）を行うシステムを例として用いて説明する。
【００３３】
エッジコンピューティングシステム１０は、通信可能に接続するクラウドサーバ１００と、情報処理システム（例えば、エッジコンピュータ）２００と、エッジデバイス３００−１〜３００−ｎと、を備える。なお、以下では、エッジデバイス３００−１〜３００−ｎのうちの任意のエッジデバイスを指すときはエッジデバイス３００を用いることとする。
【００３４】
エッジデバイス３００は、データの収集・出力を行うデバイスであり、エッジ（即ち、ユーザに近い位置）に配置される。エッジデバイス３００としては、例えば、カメラ、マイク、スピーカ等がある。
【００３５】
情報処理システム２００は、エッジデバイス３００が収集したデータを集約し、集約したデータを処理するシステムである。情報処理システム２００は、エッジ（即ち、エッジデバイス３００）に近いエリアに設けられる。
【００３６】
クラウドサーバ１００は、情報処理システム２００がデータの処理に用いる学習データの作成、提供等を行う装置である。クラウドサーバ１００は、例えば、データセンタ等に設けられる。
【００３７】
なお、以下では、エッジコンピューティングシステム１０は、エッジデバイス３００としてカメラＡ、カメラＢ、カメラＣの３台のカメラを有しているものとして説明する。また、情報処理システム２００は、カメラＡ、カメラＢ、カメラＣそれぞれから定期的（例えば、一定のフレーム毎）に画像を取得し、周期的に取得した各画像に対する人物推定を並列して行うシステムであるものとして説明する。
【００３８】
次に情報処理システム２００のハードウェア構成について説明する。図３は、第２の実施形態の情報処理システムのハードウェア構成の一例を示す図である。
【００３９】
図３に示す情報処理システム２００は、ＰＣＩｅ（Peripheral Component Interconnect Express：登録商標）ブリッジコントローラ（中継装置ともいう）２３０と、プラットフォーム２１０，２２０−１〜２２０−６とを備える。プラットフォーム２１０は、第１の実施形態の情報処理装置１の一実施態様である。プラットフォーム２１０は、情報処理システム２００の制御部及びＧＵＩ（Graphical User Interface）として機能するホストＰＣであり、プラットフォーム２２０−１〜２２０−６は、ＡＩ推論処理や画像処理等を実行する演算部である。なお、プラットフォーム２１０，２２０−１〜２２０−６は、それぞれが異なるプラットフォームであってもよい。なお、以下では、プラットフォーム２１０，２２０−１〜２２０−６のうち任意のプラットフォームを指すときには符号を付さないで用いることとする。
【００４０】
プラットフォームは、ＰＣＩｅブリッジコントローラ２３０に通信可能に接続されている。具体的には、プラットフォーム２１０は、２つのＲＣ（Root Complex）を用いて（例えば、２つのＰＣＩｅインタフェース（接続部ともいう）をＲＣとして機能させて）ＰＣＩｅブリッジコントローラ２３０に搭載されている２つのＥＰ（End Point）と接続されている。ＥＰは、拡張バスの末端機器として認識されるスレイブ側の接続部であり、ＲＣは、ＥＰ側を末端機器として認識して拡張バスを介した通信を制御するマスター側の接続部である。
【００４１】
プラットフォーム２１０は、ホストＰＣとして機能するプラットフォームであるため、データの送受信量が大きくなることが想定されることから２つのＲＣを用いてＰＣＩｅブリッジコントローラ２３０と接続されている。このように２つのＲＣと２つのＥＰとが接続されているため、プラットフォーム２１０は、データの通信経路（即ち、いずれのＲＣ−ＥＰ間で通信するか決定することで）を適切に振り分けることで広い通信帯域の通信を行うことができる。
【００４２】
プラットフォーム２２０−１〜２２０−６は、１つのＲＣを用いてＰＣＩｅブリッジコントローラ２３０に搭載されている１つのＥＰと接続されている。
【００４３】
このように情報処理システム２００においては、プロットフォームがホスト側として動作可能なＲＣとなり、ＰＣＩｅブリッジコントローラ２３０がＥＰとなり、データ転送が行われる。
【００４４】
プラットフォーム２１０は、プロセッサ２１１を備える。プラットフォーム２２０−１〜２２０−６は、プロセッサ２２１−１〜２２１−６をそれぞれ備える。なお、以下では、プロセッサ２１１，２２１−１〜２２１−６のうち任意のプロセッサを指すときには符号を付さないで用いることとする。
【００４５】
プロセッサは、それぞれ違うメーカ（またはベンダ）から提供されてもよい。例えば、プロセッサ２１１は、Ａ社が提供するものであり、プロセッサ２２１−１は、Ｂ社が提供するものであり、プロセッサ２２１−２は、Ｃ社が提供するものであり、プロセッサ２２１−３は、Ｄ社が提供するものであるものとすることができる。また、プロセッサ２２１−４は、Ｅ社が提供するものであり、プロセッサ２２１−５は、Ｆ社が提供するものであり、プロセッサ２２１−６は、Ｇ社が提供するものであるものとすることができる。
【００４６】
プロセッサは、搭載されたプラットフォームを統括的に制御する。プロセッサは、マルチプロセッサであってもよい。プロセッサは、例えば、ＣＰＵ、ＧＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡまたはＰＬＤである。また、プロセッサは、ＣＰＵ、ＧＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＦＰＧＡ、ＰＬＤのうちの２以上の要素の組み合わせであってもよい。
【００４７】
ＰＣＩｅブリッジコントローラ２３０は、拡張バス（例えば、各プラットフォームの拡張バスとして機能するバス）を有し、拡張バスを介した通信を中継する。
【００４８】
次に、プラットフォームのハードウェア構成について説明する。図４は、第２の実施形態のプラットフォームのハードウェア構成の一例を示す図である。
【００４９】
プラットフォーム２１０は、プロセッサ２１１と、ディスプレイ２１２と、ＵＳＢ（Universal Serial Bus）インタフェース２１３と、イーサネットインタフェース２１４と、ＤＩＭＭ（Dual Inline Memory Module）２１５と、を備える。また、プラットフォーム２１０は、ＳＳＤ（Solid State Drive）２１６と、ＨＤＤ（Hard Disk Drive）２１７と、ＴＰＭ（Trusted Platform Module）２１８と、ＰＣＩｅインタフェース２１９ａ，２１９ｂと、を備える。プラットフォーム２１０が有する各構成要素は、バスを介して接続している。
【００５０】
プロセッサ２１１は、プラットフォーム２１０全体を統括的に制御する。ディスプレイ２１２は、各種の情報を表示する表示部として機能する。ＵＳＢインタフェース２１３は、ＵＳＢデバイスが接続可能であり、ＵＳＢデバイスとプロセッサ２１１との通信を媒介可能である。イーサネットインタフェース２１４は、イーサネットケーブルが接続可能であり、イーサネットケーブルを介した外部機器とプロセッサ２１１との通信を媒介可能である。
【００５１】
ＤＩＭＭ２１５は、各種の情報を一時記憶可能なＲＡＭ（Random Access Memory）等の揮発性の記憶媒体である。ＳＳＤ２１６及びＨＤＤ２１７は、各種の情報を電源断後も記憶可能な不揮発性の記憶媒体である。ＳＳＤ２１６及びＨＤＤ２１７は、プロセッサ２１１が実行する各種のプログラム等の各種の情報を記憶する。ＴＰＭ２１８は、システムのセキュリティ機能を実現するモジュールである。ＰＣＩｅインタフェース２１９ａ，２１９ｂは、拡張バスと接続するための通信インタフェース（即ち、接続インタフェース）である。情報処理システム２００においては、ＰＣＩｅインタフェース２１９ａ，２１９ｂは、ＰＣＩｅブリッジコントローラ２３０と接続され、ＰＣＩｅブリッジコントローラ２３０を介したプラットフォーム２２０−１〜２２０−６との通信を媒介する。なお、以下では、ＰＣＩｅインタフェース２１９ａ，２１９ｂのうち任意のＰＣＩｅインタフェースを指すときにはＰＣＩｅインタフェース２１９を用いることとする。
【００５２】
以上のハードウェア構成によってプラットフォーム２１０の処理機能が実現される。なお、プラットフォーム２２０−１〜２２０−６についても同様の構成により各プラットフォームで実行される処理機能を実現することができる。なお、以下では、プラットフォーム２２０−１〜２２０−６についても同様の構成を備えていることとし、プラットフォーム２２０−１〜２２０−６のプロセッサ以外の上記構成要素については上記と同様の符号を用いることとする。
【００５３】
次にＰＣＩｅブリッジコントローラ２３０のハードウェア構成について説明する。図５は、第２の実施形態のＰＣＩｅブリッジコントローラのハードウェア構成の一例を示す図である。
【００５４】
ＰＣＩｅブリッジコントローラ２３０は、８チャネルのＥＰとして機能する接続インタフェースを１チップ内に有する中継装置である。ＰＣＩｅブリッジコントローラ２３０は、ＣＰＵ２３１と、メモリ２３２と、インターコネクト２３３と、複数のスロット（即ち、接続インタフェース）２３４−１〜２３４−８とを備える。なお、以下では、スロット２３４−１〜２３４−８のうち任意のスロットを指すときにスロット２３４を用いることとする。
【００５５】
スロット２３４−１〜２３４−８にはそれぞれＰＣＩｅの規格を満たすよう構成されたデバイスが接続される。情報処理システム２００においては、スロット２３４−１，２３４−２にプラットフォーム２１０が接続され、スロット２３４−３〜２３４−８のそれぞれにプラットフォーム２２０−１〜２２０−６が接続される。このように、プラットフォーム２１０に対して２つのスロット２３４をアサインすることで、プラットフォーム２１０に広い通信帯域を用いた通信を行わせることを可能としている。
【００５６】
なお、以下では、Ｓｌｏｔ＃０にプラットフォーム２１０のＰＣＩｅインタフェース２１９ａが接続され、Ｓｌｏｔ＃１にプラットフォーム２１０のＰＣＩｅインタフェース２１９ｂが接続されているものとする。また、Ｓｌｏｔ＃２にプラットフォーム２２０−１が接続され、Ｓｌｏｔ＃３にプラットフォーム２２０−２が接続され、Ｓｌｏｔ＃４にプラットフォーム２２０−３が接続されているものとする。また、Ｓｌｏｔ＃５にプラットフォーム２２０−４が接続され、Ｓｌｏｔ＃６にプラットフォーム２２０−５が接続され、Ｓｌｏｔ＃７にプラットフォーム２２０−６が接続されていることとする。
【００５７】
各スロット２３４は、内部バス（Internal Busともいう）を介してインターコネクト２３３にそれぞれ接続されている。また、インターコネクト２３３にはＣＰＵ２３１及びメモリ２３２が接続されている。これにより、各スロット２３４とＣＰＵ２３１及びメモリ２３２はインターコネクト２３３を介して相互に通信可能に接続されている。
【００５８】
メモリ２３２は、例えば、ＲＯＭ（Read Only Memory）及びＲＡＭを含む記憶メモリ（物理メモリ）である。メモリ２３２のＲＯＭには、データ通信制御に係るソフトウェアプログラムやこのプログラム用のデータ類が書き込まれている。メモリ２３２上のソフトウェアプログラムは、ＣＰＵ２３１に適宜読み込まれて実行される。また、メモリ２３２のＲＡＭは、一次記憶メモリあるいはワーキングメモリとして利用される。
【００５９】
ＣＰＵ２３１は、ＰＣＩｅブリッジコントローラ２３０全体を制御する。ＣＰＵ２３１は、マルチプロセッサであってもよい。なお、ＣＰＵ２３１に代えてＧＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＰＬＤ、ＦＰＧＡのいずれか一つが用いられてもよい。また、ＣＰＵ２３１は、ＣＰＵ、ＧＰＵ、ＭＰＵ、ＤＳＰ、ＡＳＩＣ、ＰＬＤ、ＦＰＧＡのうちの２種類以上の要素の組み合わせであってもよい。
【００６０】
そして、ＣＰＵ２３１がメモリ２３２に格納されたソフトウェアプログラムを実行することで、ＰＣＩｅブリッジコントローラ２３０におけるプラットフォーム間（またはプロセッサ間）のデータ転送（即ち、データの送受信）を実現する。
【００６１】
ＰＣＩｅブリッジコントローラ２３０は、プラットフォーム間のデータ転送を高速化するためにＰＣＩｅを用い、各プラットフォームに備えられるプロセッサをそれぞれＲＣとして動作させ、デバイスとして動作するＥＰ間でデータ転送を実現している。
【００６２】
具体的には、情報処理システム２００においては、各プラットフォームのプロセッサを、データ転送インタフェースとしてＰＣＩｅのＲＣとして動作させている。また、各プラットフォーム（またはプロセッサ）に対して、ＰＣＩｅブリッジコントローラ２３０（例えば、各プラットフォームが接続されているスロット２３４）をＥＰとして動作させている。
【００６３】
なお、ＰＣＩｅブリッジコントローラ２３０をプロセッサに対してＥＰとして接続する手法としては、既知の種々の手法を用いて実現することができる。例えば、ＰＣＩｅブリッジコントローラ２３０は、プラットフォームとの接続時に、ＥＰとして機能することを示す信号を当該プロセッサに通知することで、ＥＰとしてプロセッサと接続することができる。
【００６４】
ＰＣＩｅブリッジコントローラ２３０においてはＥＰｔｏＥＰ（End Point to End Point）でデータをトンネリングさせて、複数のＲＣにデータを転送する。プロセッサ間の通信は、ＰＣＩｅのトランザクションが発生したときに論理的に接続され、１つのプロセッサにデータ転送が集中しないときは、それぞれのプロセッサ間で並行してデータ転送できる。
【００６５】
次に、情報処理システム２００のソフトウェア構成について図６を用いて説明する。図６は、第２の実施形態の情報処理システムにおける各プラットフォームのソフトウェア構成の一例を示す図である。なお、図６中においては、便宜上、プラットフォーム２１０，２２０−１，２２０−２のソフトウェア構成のみを図示する。なお、プラットフォーム２２０−１〜２２０−６は、同様の構成である。
【００６６】
まずプラットフォーム２１０について説明する。プラットフォーム２１０は、アプリケーション２１０ａと、ドライバ２１０ｂと、ＯＳ（Operating System）２１０ｅと、ＢＩＯＳ（Basic Input Output System）２１０ｆと、を有する。
【００６７】
アプリケーション２１０ａは、プラットフォーム２１０で行うＯＳ２１０ｅが提供する機能を利用して各種処理を実行する応用ソフトウェアまたは応用プログラムである。アプリケーション２１０ａは、ＯＳ２１０ｅ上で動作する。プラットフォーム２１０は、アプリケーション２１０ａの制御下で各種処理を行う。
【００６８】
ドライバ２１０ｂは、プラットフォーム２１０に搭載されているハードウェア等をＯＳ２１０ｅによって制御可能にするために用意されたソフトウェアである。
【００６９】
プラットフォーム２１０が有するドライバ２１０ｂとしては、ブリッジドライバ２１０ｃ１，２１０ｃ２と、仮想ＬＡＮ（Local Area Network）ドライバ２１０ｄ１，２１０ｄ２等がある。なお、以下では、ブリッジドライバ２１０ｃ１，２１０ｃ２のうち任意のブリッジドライバを指すときにブリッジドライバ２１０ｃを用いることとする。また、以下では、仮想ＬＡＮドライバ２１０ｄ１，２１０ｄ２のうち任意の仮想ＬＡＮドライバを指すときに仮想ＬＡＮドライバ２１０ｄを用いることとする。
【００７０】
ブリッジドライバ２１０ｃは、ＰＣＩｅブリッジコントローラ２３０を制御するためのドライバ（言い換えればＰＣＩｅブリッジコントローラ２３０に電気的にアクセスして他のプラットフォームと通信を行うためのドライバ）である。
【００７１】
プラットフォーム２１０は、２つのＲＣを用いてＰＣＩｅブリッジコントローラ２３０に搭載されている２つのＥＰと接続しているため、それぞれの接続として機能するＲＣに対応する２つのブリッジドライバ２１０ｃを有している。
【００７２】
なお、以下では、ブリッジドライバ２１０ｃ１がＰＣＩｅインタフェース２１９ａに対応するドライバであり、ブリッジドライバ２１０ｃ２がＰＣＩｅインタフェース２１９ｂに対応するドライバであることとする。
【００７３】
仮想ＬＡＮドライバ２１０ｄは、ブリッジドライバ２１０ｃと組み合わせることで他のプラットフォームとの間でトンネリングさせた仮想的なＬＡＮ回線を確立した通信を行うためのドライバである。
【００７４】
プラットフォーム２１０は、２つのＲＣを用いてＰＣＩｅブリッジコントローラ２３０に搭載されている２つのＥＰと接続するため、それぞれの接続として機能するＲＣを用いた通信を仮想的なＬＡＮ通信とするために２つの仮想ＬＡＮドライバ２１０ｄを有している。
【００７５】
例えば、プラットフォーム２１０は、セキュリティを強化する場合には仮想ＬＡＮドライバ２１０ｄ及びブリッジドライバ２１０ｃを用いて他のプラットフォームとの間で仮想的なＬＡＮ通信を行う。プラットフォーム２１０は、セキュリティを強化する必要がない場合にはブリッジドライバ２１０ｃだけを用いて他のプラットフォームとの間で通信を行う。
【００７６】
ＯＳ２１０ｅは、プラットフォーム２１０を動かすための基本ソフトウェアまたは基本プログラムである。ＢＩＯＳ２１０ｆは、プラットフォーム２１０におけるＯＳ２１０ｅの起動を制御するソフトウェアである。プラットフォーム２１０では、例えば、ＢＩＯＳ２１０ｆによってＢｏｏｔｌｏａｄｅｒが起動（または呼び出）され、ＢＩＯＳ２１０ｆによって起動されたＢｏｏｔｌｏａｄｅｒによりＯＳ２１０ｅを検出し、ＯＳ２１０ｅが起動する。
【００７７】
次にプラットフォーム２２０−１〜２２０−６について説明する。プラットフォーム２２０−１〜２２０−６は、同様の構成であるので、プラットフォーム２２０−１を例として用いて説明する。プラットフォーム２２０−１は、アプリケーション２２０−１ａと、ドライバ２２０−１ｂと、ＯＳ２２０−１ｅと、Ｂｏｏｔｌｏａｄｅｒ２２０−１ｆと、を有する。
【００７８】
アプリケーション２２０−１ａは、プラットフォーム２２０−１で行うＯＳ２２０−１ｅが提供する機能を利用して各種処理を実行する応用ソフトウェアまたは応用プログラムである。アプリケーション２２０−１ａは、ＯＳ２２０−１ｅ上で動作する。プラットフォーム２２０−１は、アプリケーション２２０−１ａの制御下で各種処理を行う。
【００７９】
ドライバ２２０−１ｂは、プラットフォーム２２０−１に搭載されているハードウェア等をＯＳ２２０−１ｅによって制御可能にするために用意されたソフトウェアである。
【００８０】
プラットフォーム２２０−１が有するドライバ２２０−１ｂとしては、ブリッジドライバ２２０−１ｃと、仮想ＬＡＮドライバ２２０−１ｄ等がある。
【００８１】
ブリッジドライバ２２０−１ｃは、ＰＣＩｅブリッジコントローラ２３０を制御するためのドライバである。プラットフォーム２２０−１は、１つのＲＣを用いてＰＣＩｅブリッジコントローラ２３０に搭載されている１つのＥＰと接続するため、１つのブリッジドライバ２２０−１ｃを有している。
【００８２】
仮想ＬＡＮドライバ２２０−１ｄは、ブリッジドライバ２２０−１ｃと組み合わせることで他のプラットフォームとの間で仮想的なＬＡＮ回線を確立した通信を行うためのドライバである。
【００８３】
プラットフォーム２２０−１は、１つのＲＣを用いてＰＣＩｅブリッジコントローラ２３０に搭載されている１つのＥＰと接続するため、１つの仮想ＬＡＮドライバ２２０−１ｄを有している。
【００８４】
例えば、プラットフォーム２２０−１は、セキュリティを強化する場合には仮想ＬＡＮドライバ２２０−１ｄ及びブリッジドライバ２２０−１ｃを用いて他のプラットフォームとの間で仮想的なＬＡＮ通信を行う。プラットフォーム２２０−１は、セキュリティを強化する必要がない場合にはブリッジドライバ２２０−１ｃだけを用いて他のプラットフォームとの間で通信を行う。
【００８５】
ＯＳ２２０−１ｅは、プラットフォーム２２０−１を動かすための基本ソフトウェアまたは基本プログラムである。Ｂｏｏｔｌｏａｄｅｒ２２０−１ｆは、プラットフォーム２２０−１の起動時に呼び出され、ＯＳ２２０−１ｅを起動するソフトウェアである。プラットフォーム２２０−１では、例えば、Ｂｏｏｔｌｏａｄｅｒ２２０−１ｆによりＯＳ２２０−１ｅを検出し、ＯＳ２２０−１ｅが起動する。
【００８６】
次にＰＣＩｅブリッジコントローラ２３０に接続されるプラットフォーム間における通信処理の一例について説明する。図７は、第２の実施形態の情報処理システムにおけるプラットフォーム間における通信処理の一例を説明するための図である。
【００８７】
ここではプラットフォーム２１０のプロセッサ２１１と、プラットフォーム２２０−１のプロセッサ２２１−１との間で通信を行う例を用いて説明する。
【００８８】
送信元のプラットフォーム２１０は、ＲＣであるプロセッサ２１１において生成したデータを、ソフトウェア、トランザクション層、データリンク層及び物理層（ＰＨＹ）に順次転送し、物理層においてＰＣＩｅブリッジコントローラ２３０の物理層に転送する。
【００８９】
ＰＣＩｅブリッジコントローラ２３０は、プラットフォーム２１０から転送されたデータを、物理層、データリンク層、トランザクション層及びソフトウェアに順次転送し、プラットフォーム２２０−１のＲＣに対応するＥＰにトンネリングにより転送する。即ち、ＰＣＩｅブリッジコントローラ２３０においては、ＥＰ間でデータをトンネリングさせることで、１つのＲＣ（またはプロセッサ）から他のＲＣ（またはプロセッサ）にデータが転送される。
【００９０】
送信先のプラットフォーム２２０−１は、ＰＣＩｅブリッジコントローラ２３０から転送されたデータを、物理層、データリンク層、トランザクション層及びソフトウェアに順次転送し、送信先のプラットフォーム２２０−１のプロセッサ２２１−１に転送する。情報処理システム２００では、プラットフォーム間の通信はＰＣＩｅのトランザクションが発生したときに論理的に接続される。
【００９１】
ＰＣＩｅブリッジコントローラ２３０が有する８スロットのうちの一つに接続された特定のプロセッサに対して複数の他のプロセッサからのデータ転送が集中しないときは、異なる任意の複数組のそれぞれのプロセッサ間で並行してデータ転送してもよい。例えば、プロセッサ２２１−１に対して、プロセッサ２２１−２及びプロセッサ２２１−３が通信する場合には、ＰＣＩｅブリッジコントローラ２３０は、プロセッサ２２１−２及びプロセッサ２２１−３による通信をシリアルに処理する。
【００９２】
一方、異なるプラットフォームのプロセッサ同士が通信し、特定のプラットフォームのプロセッサに通信が集中しない場合には、ＰＣＩｅブリッジコントローラ２３０は、プラットフォーム間の通信を並行して処理することも可能である。
【００９３】
次に、図８を用いて、情報処理システム２００におけるＰＣＩｅブリッジコントローラ２３０を介したプラットフォーム間のデータ転送方法を説明する。図８は、第２の実施形態の情報処理システムにおけるＰＣＩｅブリッジコントローラを介したプロセッサ間のデータ転送方法の一例を説明するための図である。
【００９４】
ここではＳｌｏｔ＃０，Ｓｌｏｔ＃１に接続されたプラットフォーム２１０のＳｌｏｔ＃０からＳｌｏｔ＃３に接続されたプラットフォーム２２０−２にデータを転送する場合を例に用いて説明する。
【００９５】
送信元のプラットフォーム２１０は、ソフトウェア等によって送信されるデータ（以下、送信データという）を、プラットフォーム２１０に備えられるＨＤＤ２１７等の記憶装置（即ち、ストレージ）からプラットフォーム２１０のＤＩＭＭ２１５等（即ち、物理メモリ）のメモリ領域２１５ａに格納する（Ｐ１０）。メモリ領域２１５ａは、転送されるデータが一時的に格納される通信バッファの一部であってもよい。
【００９６】
メモリ領域２１５ａは、プラットフォームそれぞれのＤＩＭＭ２１５等に、同じ大きさで設けられた領域である。メモリ領域２１５ａは、スロット２３４の数に応じて分割されている。メモリ領域２１５ａの分割された記憶領域は、いずれかのスロット２３４に対応付けられている。即ち、各プラットフォームのメモリ領域２１５ａには、Ｓｌｏｔ＃０〜＃７のそれぞれに対応する記憶領域が設けられている。
【００９７】
例えば、メモリ領域２１５ａ内のＳｌｏｔ＃０で示す記憶領域は、Ｓｌｏｔ＃０に接続されたプラットフォーム２１０に対応付けられ、Ｓｌｏｔ＃３で示す記憶領域は、Ｓｌｏｔ＃３に接続されたプラットフォーム２２０−２に対応付けられている。プラットフォーム２１０は、メモリ領域２１５ａのうち、送信先のスロット２３４に割り当てられた領域（ここでは、Ｓｌｏｔ＃３）に送信データを格納する。
【００９８】
ブリッジドライバ２１０ｃ１は、プラットフォームのメモリ領域２１５ａの記憶領域に基づいて、送信先のスロット２３４を示すスロット情報と、送信先のメモリ領域２１５ａにおける分割領域内におけるアドレスを示すアドレス情報とを取得または生成する（Ｐ１１）。
【００９９】
送信元ＥＰにおいて、ブリッジドライバ２１０ｃ１は、スロット情報と、アドレス情報と、送信データとを含む転送データをＰＣＩｅブリッジコントローラ２３０に渡す（Ｐ１２）。これにより、ＰＣＩｅブリッジコントローラ２３０は、スロット情報に基づいてＥＰｔｏＥＰにより送信元のスロット２３４と送信先のスロット２３４とを接続することにより、転送データを送信先のプラットフォーム２２０−２に転送する（Ｐ１３）。送信先のプラットフォーム２２０−２は、スロット情報及びアドレス情報に基づいて、送信先のプラットフォーム２２０−２のメモリ領域２１５ａのＳｌｏｔ＃３に対応する記憶領域内のアドレス情報が示す領域に送信データ（または転送データ）を格納する（Ｐ１４）。
【０１００】
送信先のプラットフォーム２２０−２において、例えば、プログラムが、メモリ領域２１５ａに格納された送信データを読み出して、ＤＩＭＭ２１５やＨＤＤ２１７に移動させる（Ｐ１５、Ｐ１６）。
【０１０１】
以上のようにして、送信元のプラットフォーム２１０から送信先のプラットフォーム２２０−２にデータが転送される。なお、仮想ＬＡＮ通信は、例えば、Ｐ１０において格納する送信データを、仮想ＬＡＮドライバが元のデータにヘッダ等を付与してカプセル化したデータとし、送信先の仮想ＬＡＮドライバが非カプセル化して元のデータを取り出すことで実現できる。
【０１０２】
このように情報処理システム２００においては、ＰＣＩｅブリッジコントローラ２３０において、当該ＰＣＩｅブリッジコントローラ２３０内のＥＰ間でデータ転送を媒介する。これにより、ＰＣＩｅブリッジコントローラ２３０に接続された複数のＲＣ間でのデータ転送を実現することができる。
【０１０３】
即ち、各プロセッサをＰＣＩｅのＲＣとして独立動作させ、ＰＣＩｅブリッジコントローラ２３０において、それぞれのプロセッサに接続するデバイスをＥＰとして接続し、ＥＰ間でデータ転送を行う。これにより、デバイスドライバに起因する問題を回避し、高速データ転送を１つのシステムとして動作させることができる。
【０１０４】
また、ＰＣＩｅの規格に適合したデータ通信機能を有してさえいれば異なるプロセッサ間でのデータ転送が可能となるため、デバイスドライバの有無や、サポートＯＳ等を気にすることなく使用するプロセッサの選択肢を広げることが可能となる。
【０１０５】
各プロセッサはＥＰとなるＰＣＩｅブリッジコントローラ２３０を介して接続されるため、ＥＰの先のＲＣのデバイスドライバを追加する必要がない。従って、デバイスドライバの開発が不要であるとともに、デバイスドライバを追加することに起因する不具合が発生することもない。
【０１０６】
情報処理システム２００においては、ＡＲＭプロセッサやＦＰＧＡ等の一般的なプロセッサはＲＣとして動作することが求められるため、情報処理システム２００のプロセッサとして容易に追加することができる。
【０１０７】
ＰＣＩｅブリッジコントローラ２３０においては、ＰＣＩｅでの接続及び通信がされるので、イーサネットでは実現できない高速転送を実現することができる。また、４Ｋ、８Ｋ等の高精細映像のプロセッサ間送受信、大規模なビッグデータの並列計算等も行うことができる。
【０１０８】
また、画像処理やデータ検索等の各機能に特化した専用プロセッサを接続することもできるので、安価に機能追加、性能向上を行うことができる。
【０１０９】
さらに、情報処理システム２００においては、システムの仮想化等を行う必要もなく、システムの仮想化を行うことで生じるシステム性能の低下が生じることもない。即ち、情報処理システム２００は、ＡＩ推論や画像処理といった高負荷な演算を用途とするシステムに適したシステムである。
【０１１０】
次に情報処理システム２００が備える機能について説明する。図９は、第２の実施形態の情報処理システムの機能構成の一例を示す図である。
【０１１１】
まず、プラットフォーム２１０について説明する。プラットフォーム２１０は、通信部２４０と、処理部２５０と、記憶部２６０と、を有する。
【０１１２】
通信部２４０は、他装置との間とのデータの送受信を制御する。具体的には、通信部２４０は、プラットフォーム２２０−１〜２２０−６との間とのデータの送受信、エッジデバイス３００−１〜３００−ｎとの間とのデータの送受信、及びクラウドサーバ１００との間とのデータの送受信を制御する。通信部２４０は、例えば、プロセッサ２１１によって実現される。
【０１１３】
処理部２５０は、記憶部２６０が記憶する各種プログラムを実行し、各種プログラム内で行われる各種処理を行う。処理部２５０は、例えば、プロセッサ２１１によって実現される。処理部２５０は、第１の実施形態の処理部２の一実施態様である。
【０１１４】
処理部２５０は、カメラＡ、カメラＢ、カメラＣから定期的（具体的には一定の周期毎）に取得する画像に対して行う人物推定の実行を統括的に制御する。
【０１１５】
具体的には、人物推定では、まず、処理部２５０は、取得した画像に基づいて画像から人物を検出する検出ジョブを生成し、プラットフォーム２２０−１〜２２０−６のうちの検出ジョブを実行するプラットフォーム（以下、検出プラットフォーム）に実行させる。
【０１１６】
また、処理部２５０は、検出ジョブの実行結果に基づいて、人物を分類する分類タスクを画像に含まれる人物それぞれに対して実行する分類ジョブを生成し、分類ジョブを分類タスク単位に分割する。
【０１１７】
そして、処理部２５０は、分類タスクの実行順序（実行スケジュールともいう）を決定する。処理部２５０は、実行順序に従って、プラットフォーム２２０−１〜２２０−６のうちの分類タスクを実行するプラットフォーム（以下、分類プラットフォーム）に、分類タスクを分散して実行させる。その後、処理部２５０は、各分類タスクの実行結果を取得することにより、分類ジョブの実行結果（人物推定結果ともいう）を取得する。
【０１１８】
記憶部２６０は、プラットフォーム２１０が有するソフトウェア、プログラム、及びソフトウェアやプログラムの動作に用いる各種情報を記憶する。記憶部２６０は、例えば、ＳＳＤ２１６やＨＤＤ２１７等によって実現される。
【０１１９】
記憶部２６０は、画像記憶部２６１と、画像情報テーブル２６２と、検出ジョブキュー２６３と、分類タスクキュー２６４ａ，２６４ｂ，２６４ｃと、実行順序テーブル２６５と、送信先リスト２６６と、を有する。
【０１２０】
画像記憶部２６１は、カメラＡ、カメラＢ、カメラＣから定期的に取得する画像を記憶する。画像情報テーブル２６２は、画像記憶部２６１に記憶された画像に関する情報を格納する。画像情報テーブル２６２には、例えば、画像の取得タイミング（周期を特定可能な情報）、画像を撮像したカメラの情報、画像から生成された検出ジョブの識別情報、画像から生成された分類タスクの識別情報、分類結果（分類タスクの結果ともいう）等が格納される。画像情報テーブル２６２には、処理部２５０が新たな画像の取得、検出ジョブの生成、検出結果（検出ジョブの結果ともいう）の取得、分類タスクの生成、分類結果（分類タスクの結果ともいう）の取得等をするたびに処理部２５０によって情報が格納される。これにより、画像情報テーブル２６２は、最新の状態に保たれる。
【０１２１】
検出ジョブキュー２６３は、カメラＡ、カメラＢ、カメラＣから取得した画像に基づいて生成された検出ジョブ（画像に基づく検出ジョブともいう）を格納する。検出ジョブキュー２６３は、先出し先入れ（ＦＩＦＯ：First In First Out）方式のキューである。したがって、検出ジョブキュー２６３からは所定の周期のカメラＡ、カメラＢ、カメラＣそれぞれの画像に基づく検出ジョブがデキューした後に、所定の周期の次の周期のカメラＡ、カメラＢ、カメラＣそれぞれの画像に基づく検出ジョブがデキューすることとなる。
【０１２２】
分類タスクキュー２６４ａは、カメラＡから取得した画像（カメラＡの画像ともいう）に基づいて生成された分類タスク（画像に基づく分類タスクともいう）を格納する。分類タスクキュー２６４ａは、先出し先入れ方式のキューである。したがって、分類タスクキュー２６４ａからは、所定の周期においてカメラＡから取得した画像に基づく分類タスクがデキューした後に、所定の周期の次の周期においてカメラＡから取得した画像に基づく分類タスクがデキューすることとなる。
【０１２３】
分類タスクキュー２６４ｂは、カメラＢから取得した画像（カメラＢの画像ともいう）に基づいて生成された分類タスクを格納する。分類タスクキュー２６４ｂは、先出し先入れ方式のキューである。したがって、分類タスクキュー２６４ｂからは、所定の周期においてカメラＢから取得した画像に基づく分類タスクがデキューした後に、所定の周期の次の周期においてカメラＢから取得した画像に基づく分類タスクがデキューすることとなる。
【０１２４】
分類タスクキュー２６４ｃは、カメラＣから取得した画像（カメラＣの画像ともいう）に基づいて生成された分類タスクを格納する。分類タスクキュー２６４ｃは、先出し先入れ方式のキューである。したがって、分類タスクキュー２６４ｃからは、所定の周期においてカメラＣから取得した画像に基づく分類タスクがデキューした後に、所定の周期の次の周期においてカメラＣから取得した画像に基づく分類タスクがデキューすることとなる。
【０１２５】
実行順序テーブル２６５は、分類タスクキュー２６４ａ，２６４ｂ，２６４ｃに格納中の分類タスクそれぞれの実行順序（デキューの順序または割当順序ともいう）を格納する。実行順序テーブル２６５は、処理部２５０が分類プラットフォームに分類タスクを実行させる際（割り当てる際ともいう）に、分類タスクキュー２６４ａ，２６４ｂ，２６４ｃのいずれから分類タスクをデキューするか決定するのに利用される。実行順序は、周期間の割り込みが発生しないように設定される。即ち、実行順序は、所定の周期において取得した画像に基づく分類タスクの全てを分類プラットフォームに割り当てた後に、所定の周期の次の周期において取得した画像に基づく分類タスクの分類プラットフォームへの割り当てが行われるように設定される。実行順序については、後で図１１、図１２を用いて詳細に説明する。
【０１２６】
送信先リスト２６６は、人物推定における推論処理（具体的には分類タスク及び検出ジョブ）を実行させるプラットフォーム２２０−１〜２２０−６に関する情報を格納する。送信先リスト２６６には、プラットフォームに割り当てられた処理内容、送信先情報（例えば、アドレス）、処理状態（具体的には、新規の処理を実行可能な状態（即ち、処理を実行中）であるか否かを示す情報）等が格納される。プラットフォームに割り当てられた処理内容は、各プラットフォームが検出プラットフォームであるか、分類プラットフォームであるかを識別するための情報である。
【０１２７】
送信先リスト２６６は、処理部２５０が検出ジョブを検出プラットフォームに割り当て可能なタイミングであるか否かを判定する際、及び検出ジョブを検出プラットフォームへ送信する際（割り当てる際ともいう）に利用される。また、送信先リスト２６６は、処理部２５０が分類タスクを分類プラットフォームに割り当て可能なタイミングであるか否かを判定する際、及び分類タスクを分類プラットフォームへ送信する際に利用される。処理状態は、処理部２５０が検出ジョブの割り当て、検出結果の取得、分類タスクの割り当て、分類結果の取得をするたびに処理部２５０によって情報が更新される。これにより、送信先リスト２６６は、最新の状態に保たれる。
【０１２８】
なお、以下では、プラットフォーム２２０−１，２２０−２は、検出ジョブを実行する検出プラットフォームであり、プラットフォーム２２０−３〜２２０−６は、分類タスクを実行する分類プラットフォームであるものとして説明する。
【０１２９】
次にプラットフォーム２２０−１〜２２０−６について説明する。プラットフォーム２２０−１〜２２０−６は、同様の構成であるので、プラットフォーム２２０−１を例として用いて説明する。
【０１３０】
プラットフォーム２２０−１は、通信部２７０−１と、処理部２８０−１と、記憶部２９０−１と、を有する。
【０１３１】
通信部２７０−１は、他装置との間でのデータの送受信を制御する。具体的には、通信部２７０−１は、プラットフォーム２１０との間とのデータの送受信を制御する。通信部２７０−１は、例えば、プロセッサ２２１−１によって実現される。
【０１３２】
処理部２８０−１は、記憶部２９０−１が記憶する各種プログラムを実行し、各種プログラム内で行われる各種処理を行う。処理部２８０−１は、例えば、プロセッサ２２１−１によって実現される。
【０１３３】
例えば、処理部２８０−１は、割り当てられた推論処理（具体的には、検出ジョブまたは分類タスク）を実行する。処理部２８０−１は、具体的には、検出ジョブを実行する。
【０１３４】
記憶部２９０−１は、プラットフォーム２２０−１が有するソフトウェア、プログラム、及びソフトウェアやプログラムの動作に用いる各種情報を記憶する。具体的には、記憶部２９０−１は、推論処理の実行に用いる学習データを記憶する。記憶部２９０−１は、ＳＳＤやＨＤＤ等によって実現される。
【０１３５】
次に情報処理システムにおける人物推定の全体の概要についてより具体的に説明する。図１０は、第２の実施形態の人物推定の全体の概要を説明するための図である。なお、画像４００ａが周期ｔにおけるカメラＡの画像、画像４００ｂが周期ｔにおけるカメラＢの画像、画像４００ｃが周期ｔにおけるカメラＣの画像を示している。また、画像４００ｎａが周期ｔ＋ｎにおけるカメラＡの画像、画像４００ｎｂが周期ｔ＋ｎにおけるカメラＢの画像、画像４００ｎｃが周期ｔ＋ｎにおけるカメラＣの画像を示している。図１０は、情報処理システム２００が周期毎（周期ｔ…周期ｔ＋ｎ）に各カメラから画像を取得している様子（ここでは、画像４００ａ、画像４００ｂ、画像４００ｃ、…、画像４００ｎａ、画像４００ｎｂ、画像４００ｎｃの順に取得している様子）を示している。なお、ここでは周期ｔのカメラＡの画像４００ａに対して行う人物推定の流れを中心に説明する。また、画像４００ａには６人の人物が含まれているものとして説明する。
【０１３６】
処理部２５０は、カメラＡの画像４００ａを取得する（Ｐ１）と、カメラＡの画像４００ａに基づいて検出ジョブを生成し（Ｐ２）、検出ジョブキュー２６３にエンキューする（Ｐ３）。なお、図１０のおいては、Ｊ（Ａ）はカメラＡの画像に基づく検出ジョブ、Ｊ（Ｂ）はカメラＢの画像に基づく検出ジョブ、Ｊ（Ｃ）はカメラＣの画像に基づく検出ジョブを示している。
【０１３７】
処理部２５０は、送信先リスト２６６を参照して検出プラットフォームのうち処理を実行可能（割当可能ともいう）なプラットフォームがあるか否かの判定を定期的に実行する。処理部２５０は、処理を実行可能な検出プラットフォームがあると判定した場合には、検出ジョブキュー２６３から検出ジョブを先入れ先出し方式に従ってデキューし、デキューした検出ジョブを送信して実行させる（Ｐ４）。図１０においては、周期ｔ−１のＪ（Ａ）、Ｊ（Ｂ）、Ｊ（Ｃ）が検出ジョブキュー２６３に格納されているため、画像４００ａに基づくＪ（Ａ）は、先に、周期ｔ−１のＪ（Ａ）、Ｊ（Ｂ）、Ｊ（Ｃ）がデキューされて実行された後にデキューされることとなる。
【０１３８】
処理部２５０は、検出プラットフォームから画像４００ａに対する検出ジョブの結果である人物検出結果を取得する（Ｐ５）。例えば、処理部２５０は、画像４００ａの人物検出結果として画像４００ａ内における人物の位置情報（座標情報ともいう）を画像に含まれる人数分（ここでは６人分）取得する。
【０１３９】
処理部２５０は、取得した人物検出結果に基づいて画像４００ａに含まれる人物（検出した人物）それぞれに対して分類タスクを実行する分類ジョブを生成する（Ｐ６）。処理部２５０は、生成した分類ジョブを分類タスク単位に分割して、画像４００ａに含まれる人物の数に応じた分類タスクを生成する（Ｐ７）。具体的には、処理部２５０は、画像４００ａに基づく分類ジョブを分類タスク単位に分割し、画像４００ａに基づく６個の分類タスク（具体的には、分類タスク４００ａ１〜４００ａ６）を生成する。なお、図１０においては、Ｌ（Ａ）はカメラＡの画像に基づく分類ジョブを示している。
【０１４０】
処理部２５０は、生成した分類タスク４００ａ１〜４００ａ６を、分類タスクキュー２６４ａにエンキューする（Ｐ８）。処理部２５０は、エンキューした分類タスク４００ａ１〜４００ａ６の実行順序を決定し、分類タスク実行順序テーブルに格納する（Ｐ９）。
【０１４１】
具体的には、処理部２５０は、一の分類タスクキューにエンキューした分類タスクの画像と同周期の画像に基づく分類タスク（以下、同周期の分類タスクとする）が他の分類タスクキューに存在するか否かを判定する。そして、処理部２５０は、存在しないと判定した場合、一の分類タスクキューにエンキューした分類タスクそれぞれの実行順序をエンキュー順に従って決定する。その後、処理部２５０は、決定した実行順序を実行順序テーブルに格納する。
【０１４２】
処理部２５０は、存在すると判定した場合には、エンキューした分類タスクと、同周期の分類タスクそれぞれの実行順序を所定の規則に従って決定する。その後、処理部２５０は、決定した実行順序を実行順序テーブルに格納する。即ち、処理部２５０は、同周期の分類タスクの実行順序について再決定する。所定の規則については、後で図１１、図１２を用いて詳細に説明する。
【０１４３】
図１０においては、分類タスクキューに周期ｔの画像に基づく分類タスクが存在しないため、分類タスク４００ａ１〜４００ａ６についての実行順序のみを決定し、実行順序テーブルに格納する。図１０においては、分類タスクキュー２６４ａ，２６４ｂ，２６４ｃに周期ｔ−１の分類タスクが合計で１２個存在する、即ち、１番から１２番の割当順序が割り当て済みである。
【０１４４】
したがって、処理部２５０は、周期間の割り込みが発生しないように前の周期の分類タスクが終了した後（具体的には１３番以降）の実行順序を分類タスク４００ａ１〜４００ａ６に割り当てる。即ち、処理部２５０は、エンキュー順に従って分類タスク４００ａ１〜４００ａ６に１３番〜１８番の実行順序を割り当て、実行順序テーブルに格納する。
【０１４５】
例えば、この状態で画像４００ｂに基づく分類タスクが２個エンキューされた場合、処理部２５０は、分類タスク４００ａ１〜４００ａ６と、画像４００ｂに基づく３個の分類タスクそれぞれの実行順序を所定の規則に従って決定する。即ち、処理部２５０は、分類タスク４００ａ１〜４００ａ６の実行順序について再決定する。具体的には、処理部２５０は、所定の規則に従って１３番〜２０番の実行順序を分類タスク４００ａ１〜４００ａ６及び画像４００ｂに基づく２個の分類タスクそれぞれに割り当て、実行順序テーブルに格納する。
【０１４６】
さらに、この状態で画像４００ｃに基づく分類タスクが８個エンキューされた場合、処理部２５０は、分類タスク４００ａ１〜４００ａ６と、画像４００ｂに基づく２個の分類タスクと、画像４００ｃに基づく８個の分類タスクそれぞれの実行順序を所定の規則に従って決定する。即ち、処理部２５０は、分類タスク４００ａ１〜４００ａ６の実行順序と、画像４００ｂに基づく２個の分類タスクの実行順序について再決定する。具体的には、処理部２５０は、所定の規則に従って１３番〜２８番の実行順序を分類タスク４００ａ１〜４００ａ６、画像４００ｂに基づいた２個の分類タスク、及び画像４００ｃに基づいた８個の分類タスクそれぞれに割り当て、実行順序テーブルに格納する。
【０１４７】
処理部２５０は、送信先リスト２６６を参照して分類プラットフォームのうち処理を実行可能なプラットフォームがあるか否かの判定を定期的に実行する。処理部２５０は、処理を実行可能な分類プラットフォームがあると判定した場合、実行順序テーブル２６５に従って分類タスクキュー２６４ａ，２６４ｂ，２６４ｃから分類タスクをデキューし、デキューした分類タスクを送信して実行させる（Ｐ１０）。
【０１４８】
処理部２５０は、分類プラットフォームから画像４００ａに基づく分類タスク４００ａ１〜４００ａ６の結果である分類結果を取得することにより、画像４００ａに基づく分類ジョブの実行結果（画像４００ａの人物推定結果ともいう）を取得する（Ｐ１１）。
【０１４９】
これによれば、プラットフォーム２１０は、検出ジョブの結果に基づいて分類ジョブを分類タスク単位で分散させて実行させているため、分類タスクの回数（処理量ともいう）が分類ジョブ毎に異なるときでも処理負荷の偏りを防止できる。
【０１５０】
このように処理負荷の偏りを防止することで、プラットフォーム２１０は、安定的な推論処理の実行を実現できる。また、プラットフォーム２１０は、処理遅延の発生を抑止（推論処理のリアルタイム性が損なわれることを抑止ともいう）でき、推論処理の効率的な実行を実現できる。
【０１５１】
次に、実行順序について図１１を用いて説明する。図１１は、第２の実施形態の分類タスクの実行順序を説明するための図（その１）である。
【０１５２】
図１１（ａ）は、周期ｔの画像に基づく分類タスク（以下、周期ｔの分類タスクとする）が分類タスクキュー２６４ａに６個格納され、分類タスクキュー２６４ｂに２個格納され、分類タスクキュー２６４ｃに８個格納されている状態を示す。なお、数字は処理部２５０によって割り当てられた実行順序を示している。
【０１５３】
処理部２５０は、各分類タスクキューの周期ｔの分類タスクができるだけ均等（処理量に偏りがでないようにともいう）に実行されるように、各分類タスクキューの周期ｔの分類タスクに対して順番に（ラウンドロビン方式で）実行順序を割り当てている。
【０１５４】
このような規則で分類タスクに対して実行順序を割り当てることで、プラットフォーム２１０は、人物が少ない画像に対する分類ジョブの処理速度（処理時間ともいう）を担保しつつも、人物が多い画像に対する分類ジョブの処理速度の高速化（処理時間の短縮化ともいう）ができる。これにより、プラットフォーム２１０は、処理遅延の発生を抑止できる。ここで具体的に処理の流れについて説明する。なお、以下では各分類タスクの処理時間は同じであり、分類タスク１回の処理に要する時間を１サイクルタイムとして説明する。
【０１５５】
図１１（ｂ）は、図１１（ａ）の状態から実行順序に従って分類プラットフォームそれぞれに（ここでは４台の分類プラットフォームに）分類タスクを割り当てた状態（１サイクル目の処理の状態ともいう）を示す。
【０１５６】
実行順序が１番〜４番の分類タスクを処理部２５０がデキューした結果、分類タスクキュー２６４ａからは周期ｔの分類タスクが２つデキューされ、分類タスクキュー２６４ａの周期ｔの分類タスクは、４個になっている。また、分類タスクキュー２６４ｂからは周期ｔの分類タスクが１つデキューされ、分類タスクキュー２６４ｂの周期ｔの分類タスクは、１個になっている。また、分類タスクキュー２６４ｃからは周期ｔの分類タスクが１つデキューされ、分類タスクキュー２６４ｃの周期ｔの分類タスクは、７個になっている。
【０１５７】
図１１（ｃ）は、図１１（ｂ）において割り当てた分類タスクを各分類プラットフォームが実行し終え、実行順序に従って分類プラットフォームそれぞれに次の分類タスクを割り当てた状態（２サイクル目の処理の状態ともいう）を示す。
【０１５８】
実行順序が５番〜８番の分類タスクを処理部２５０がデキューした結果、分類タスクキュー２６４ａからは周期ｔの分類タスクが１つデキューされ、分類タスクキュー２６４ａの周期ｔの分類タスクは、３個になっている。また、分類タスクキュー２６４ｂからは周期ｔの分類タスクが１つデキューされ、分類タスクキュー２６４ｂの周期ｔの分類タスクは、０個になっている。また、分類タスクキュー２６４ｃからは周期ｔの分類タスクが２つデキューされ、分類タスクキュー２６４ｃの周期ｔの分類タスクは、５個になっている。
【０１５９】
図１１（ｄ）は、図１１（ｃ）において割り当てた分類タスクを各分類プラットフォームが実行し終え、実行順序に従って分類プラットフォームそれぞれに次の分類タスクを割り当てた状態（３サイクル目の処理の状態ともいう）を示す。
【０１６０】
実行順序が９番〜１２番の分類タスクを処理部２５０がデキューした結果、分類タスクキュー２６４ａからは周期ｔの分類タスクが２つデキューされ、分類タスクキュー２６４ａの周期ｔの分類タスクは、１個になっている。また、分類タスクキュー２６４ｃからは周期ｔの分類タスクが２つデキューされ、分類タスクキュー２６４ｃの周期ｔの分類タスクは、３個になっている。
【０１６１】
図１１（ｅ）は、図１１（ｄ）において割り当てた分類タスクを各分類プラットフォームが実行し終え、実行順序に従って分類プラットフォームそれぞれに次の分類タスクを割り当てた状態（４サイクル目の処理の状態ともいう）を示す。
【０１６２】
実行順序が１３番〜１６番の分類タスクを処理部２５０がデキューした結果、分類タスクキュー２６４ａからは周期ｔの分類タスクが１つデキューされ、分類タスクキュー２６４ａの周期ｔの分類タスクは、０個になっている。また、分類タスクキュー２６４ｃからは周期ｔの分類タスクが３つデキューされ、分類タスクキュー２６４ｃの周期ｔの分類タスクは、０個になっている。
【０１６３】
これによれば、画像４００ｂに基づく分類ジョブは、分類ジョブ単位で実行させた場合と同様に２サイクルタイムで完了する。一方で、画像４００ａに基づく分類ジョブや画像４００ｃに基づく分類ジョブは、分類ジョブ単位で実行させた場合よりも早いサイクルタイムで完了する。
【０１６４】
このようにプラットフォーム２１０は、上記の規則で分類タスクに対して実行順序を割り当て、分散して実行させることにより人物が少ない画像に対する分類ジョブの処理速度を担保できる。また、プラットフォーム２１０は、人物が多い画像に対する分類ジョブの処理速度を分類ジョブ単位で実行させる場合よりも高速化ができる。
【０１６５】
次に、実行順序の変形例について図１２を用いて説明する。図１２は、第２の実施形態の分類タスクの実行順序を説明するための図（その２）である。
【０１６６】
図１２（ａ）は、周期ｔの分類タスクが分類タスクキュー２６４ａに６個格納され、分類タスクキュー２６４ｂに２個格納され、分類タスクキュー２６４ｃに８個格納されている状態を示す。なお、数字は処理部２５０によって割り当てられた実行順序を示している。
【０１６７】
処理部２５０は、分類タスクがデキューされるにしたがって各分類タスクキューに格納された周期ｔの分類タスクの数が均等に近づくように、各分類タスクキューの周期ｔの分類タスクに対して順番に実行順序を割り当てている。即ち、処理部２５０は、最も周期ｔの分類タスクが格納された分類タスクキューから周期ｔの分類タスクがデキューされるように実行順序を割り当てている。
【０１６８】
具体的には、まず、処理部２５０は、最も周期ｔの分類タスクが格納された分類タスクキュー２６４ｃの周期ｔの分類タスクと、２番目に周期ｔの分類タスクが格納された分類タスクキュー２６４ａの周期ｔの分類タスクとの差分の分だけ最も周期ｔの分類タスクが格納された分類タスクキュー２６４ｃの周期ｔの分類タスクに実行順序（具体的には、１番〜３番）を割り当てている。
【０１６９】
次に、処理部２５０は、分類タスクキュー２６４ｃの周期ｔの分類タスクの数と、２番目に周期ｔの分類タスクが格納された分類タスクキュー２６４ａの周期ｔの分類タスクの数が、３番目に周期ｔの分類タスクが格納された分類タスクキュー２６４ｂの周期ｔの分類タスクと同じ数になるまで実行されるように実行順序（具体的には４番〜１０番）を交互に割り当てている。
【０１７０】
そして、処理部２５０は、各分類タスクキューの周期ｔの分類タスクに対して順番に（ラウンドロビン方式で）実行順序（具体的には１１番〜１６番）を割り当てている。
【０１７１】
このような規則で分類タスクに対して実行順序を割り当てることで、プラットフォーム２１０は、各分類ジョブの処理速度（処理時間ともいう）のばらつきを抑えるとともに、人物が多い画像に対する分類ジョブの処理速度の高速化（処理時間の短縮化ともいう）ができる。このように各分類ジョブの処理速度のばらつきを抑えることで、プラットフォーム２１０は、システム全体の安定性を高めることができる。また、人物が多い画像に対する分類ジョブの処理速度の高速化をすることで、プラットフォーム２１０は、処理遅延の発生を抑止できる。ここで具体的に処理の流れについて説明する。
【０１７２】
図１２（ｂ）は、図１２（ａ）の状態から実行順序に従って分類プラットフォームそれぞれに分類タスクを割り当てた状態（１サイクル目の処理の状態ともいう）を示す。
【０１７３】
実行順序が１番〜４番の分類タスクを処理部２５０がデキューした結果、分類タスクキュー２６４ａからは周期ｔの分類タスクが１つデキューされ、分類タスクキュー２６４ａの周期ｔの分類タスクは、５個になっている。また、分類タスクキュー２６４ｂからは周期ｔの分類タスクが１つもデキューされず、分類タスクキュー２６４ｂの周期ｔの分類タスクは、２個のままになっている。また、分類タスクキュー２６４ｃからは周期ｔの分類タスクが３つデキューされ、分類タスクキュー２６４ｃの周期ｔの分類タスクは、５個になっている。
【０１７４】
図１２（ｃ）は、図１２（ｂ）において割り当てた分類タスクを各分類プラットフォームが実行し終え、実行順序に従って分類プラットフォームそれぞれに次の分類タスクを割り当てた状態（２サイクル目の処理の状態ともいう）を示す。
【０１７５】
実行順序が５番〜８番の分類タスクを処理部２５０がデキューした結果、分類タスクキュー２６４ａからは周期ｔの分類タスクが２つデキューされ、分類タスクキュー２６４ａの周期ｔの分類タスクは、３個になっている。また、分類タスクキュー２６４ｂからは周期ｔの分類タスクが１つもデキューされず、分類タスクキュー２６４ｂの周期ｔの分類タスクは、２個のままになっている。また、分類タスクキュー２６４ｃからは周期ｔの分類タスクが２つデキューされ、分類タスクキュー２６４ｃの周期ｔの分類タスクは、３個になっている。
【０１７６】
図１２（ｄ）は、図１２（ｃ）において割り当てた分類タスクを各分類プラットフォームが実行し終え、実行順序に従って分類プラットフォームそれぞれに次の分類タスクを割り当てた状態（３サイクル目の処理の状態ともいう）を示す。
【０１７７】
実行順序が９番〜１２番の分類タスクを処理部２５０がデキューした結果、分類タスクキュー２６４ａからは周期ｔの分類タスクが１つデキューされ、分類タスクキュー２６４ａの周期ｔの分類タスクは、２個になっている。また、分類タスクキュー２６４ｂからは周期ｔの分類タスクが１つデキューされ、分類タスクキュー２６４ｂの周期ｔの分類タスクは、１個になっている。また、分類タスクキュー２６４ｃからは周期ｔの分類タスクが２つデキューされ、分類タスクキュー２６４ｃの周期ｔの分類タスクは、１個になっている。
【０１７８】
図１２（ｅ）は、図１２（ｄ）において割り当てた分類タスクを各分類プラットフォームが実行し終え、実行順序に従って分類プラットフォームそれぞれに次の分類タスクを割り当てた状態（４サイクル目の処理の状態ともいう）を示す。
【０１７９】
実行順序が１３番〜１６番の分類タスクを処理部２５０がデキューした結果、分類タスクキュー２６４ａからは周期ｔの分類タスクが２つデキューされ、分類タスクキュー２６４ａの周期ｔの分類タスクは、０個になっている。また、分類タスクキュー２６４ｂからは周期ｔの分類タスクが１つデキューされ、分類タスクキュー２６４ｂの周期ｔの分類タスクは、０個になっている。また、分類タスクキュー２６４ｃからは周期ｔの分類タスクが１つデキューされ、分類タスクキュー２６４ｃの周期ｔの分類タスクは、０個になっている。
【０１８０】
これによれば、画像４００ａに基づく分類ジョブ、画像４００ｂに基づく分類ジョブ、及び画像４００ｃに基づく分類ジョブは、周期ｔの分類タスクの実行開始から４サイクルタイム（即ち、同じサイクルタイム）で完了する。また、画像４００ａに基づく分類ジョブや画像４００ｃに基づく分類ジョブは、分類ジョブ単位で実行させた場合よりも早いサイクルタイムで完了する。
【０１８１】
このようにプラットフォーム２１０は、上記の規則で分類タスクに対して実行順序を割り当て、分散して実行させることにより各分類ジョブの処理時間のばらつきを抑えるとともに、人物が多い画像に対する分類ジョブの処理速度の高速化（処理時間の短縮化ともいう）ができる。
【０１８２】
なお、この場合に、分類タスクが少ない分類ジョブが先に終了するように実行順序を割り当ててもよい。これによれば、プラットフォーム２１０は、各分類ジョブの処理時間のばらつきを抑えるとともに分類ジョブ単位で分散した場合に処理時間が短くなる分類ジョブの結果を早期に取得できるので、分類タスクが少ない分類ジョブの処理速度を担保できる。
【０１８３】
また、周期毎に先に全ての分類タスクが割り当てられる分類タスクキューを順番に異ならせてもよい。これによれば、プラットフォーム２１０は、各画像に基づく分類ジョブの処理時間のばらつきをさらに抑制することができる。
【０１８４】
上記で説明した本発明の情報処理システム及びプラットフォームの処理機能は、コンピュータによって実現することができる。この場合、情報処理システム及びプラットフォームが有すべき機能の処理内容を記述したプログラムが提供される。そのプログラムをコンピュータで実行することにより、上記処理機能がコンピュータ上で実現される。
【０１８５】
処理内容を記述したプログラムは、コンピュータで読み取り可能な記録媒体に記録しておくことができる。コンピュータで読み取り可能な記録媒体としては、磁気記憶装置、光ディスク、光磁気記録媒体、半導体メモリ等がある。磁気記憶装置には、ハードディスク装置（ＨＤＤ）、フレキシブルディスク（ＦＤ）、磁気テープ等がある。光ディスクには、ＣＤ−ＲＯＭ／ＲＷ等がある。光磁気記録媒体には、ＭＯ（Magneto Optical disk）等がある。
【０１８６】
プログラムを流通させる場合、例えば、そのプログラムが記録されたＣＤ−ＲＯＭ等の可搬型記録媒体が販売される。また、プログラムをサーバコンピュータの記憶装置に格納しておき、ネットワークを介して、サーバコンピュータから他のコンピュータにそのプログラムを転送することもできる。
【０１８７】
プログラムを実行するコンピュータは、例えば、可搬型記録媒体に記録されたプログラムもしくはサーバコンピュータから転送されたプログラムを、自己の記憶装置に格納する。そして、コンピュータは、自己の記憶装置からプログラムを読み取り、プログラムに従った処理を実行する。なお、コンピュータは、可搬型記録媒体から直接プログラムを読み取り、そのプログラムに従った処理を実行することもできる。
【０１８８】
また、コンピュータは、ネットワークを介して接続されたサーバコンピュータからプログラムが転送される毎に、逐次、受け取ったプログラムに従った処理を実行することもできる。また、上記の処理機能の少なくとも一部を、ＤＳＰ、ＡＳＩＣ、ＰＬＤ等の電子回路で実現することもできる。
【０１８９】
以上、実施の形態を例示したが、実施の形態で示した各部の構成は同様の機能を有する他のものに置換することができる。また、他の任意の構成物や工程が付加されてもよい。さらに、前述した実施の形態のうちの任意の２以上の構成（特徴）を組み合わせたものであってもよい。
【符号の説明】
【０１９０】
１  情報処理装置
２  処理部
３  第１データ
４  第２データ
３ａ，４ａ  一次推論ジョブの実行結果
３ａ１，４ａ１，４ａ２，４ａ３  推論タスク
３ｂ  第１の二次推論ジョブの実行結果
４ｂ  第２の二次推論ジョブの実行結果
５  第１推論装置
６−１〜６−ｎ  第２推論装置
【要約】
【課題】処理負荷の偏りを防止する。
【解決手段】情報処理装置１の処理部２は、１以上の第１推論装置５のいずれかに第１データ３に対する一次推論ジョブを実行させ（Ｐ１）、一次推論ジョブの実行結果３ａに基づいて第１の二次推論ジョブを、タスク単位に分割して第１の数の推論タスクを生成し（Ｐ２）、１以上の第１推論装置５のいずれかに第２データ４に対する一次推論ジョブを実行させ（Ｐ３）、一次推論ジョブの実行結果４ａに基づいて第２の二次推論ジョブを、タスク単位に分割して第２の数の推論タスクを生成し（Ｐ４）、推論タスク３ａ１と、推論タスク４ａ１，４ａ２，４ａ３と、を２以上の第２推論装置６−１〜６−ｎに分散させて実行させ（Ｐ５）、各推論タスクの結果を取得することにより、第１の二次推論ジョブの実行結果３ｂと第２の二次推論ジョブの実行結果４ｂを取得する（Ｐ６）。
【選択図】図１【図１】
0006810370.tif 000002
【図２】
0006810370.tif 000003
【図３】
0006810370.tif 000004
【図４】
0006810370.tif 000005
【図５】
0006810370.tif 000006
【図６】
0006810370.tif 000007
【図７】
0006810370.tif 000008
【図８】
0006810370.tif 000009
【図９】
0006810370.tif 000010
【図１０】
0006810370.tif 000011
【図１１】
0006810370.tif 000012
【図１２】
0006810370.tif 000013