【文献】
野尻祐亮,並木美太郎,マイクロカーネル方式によるCell/B.E.向けOS構成法の提案とMINIX3による実現,情報処理学会研究報告,日本,社団法人情報処理学会,2009年 1月21日,Vol:2009,No:6, (2009-OS-110),Pages:91-98,特に、Page:95の右欄の4.3の項目を参照のこと。
【文献】
吉永一美、外8名,メニーコア混在型並列計算機におけるMPI通信基盤の提案,情報処理学会研究報告,日本,一般社団法人情報処理学会,2011年12月15日,Vol:2011-ARC-197,No:5,Pages:1-6,特に、Pages:2-3の2.の項目を参照のこと。
【文献】
下沢拓、外4名,メニーコア向けシステムソフトウェア開発のための実行環境の設計と実装,情報処理学会研究報告,日本,一般社団法人情報処理学会,2011年 8月15日,Vol:2011-OS-118, No:1,Pages:1-7,特に、Pages:1-5の1.の項目と2.の項目と3.の項目を参照のこと。
【文献】
川村竹弥,小野澤隆,SPOXのシステム・インターフェース,インターフェース,日本,CQ出版株式会社,1994年 9月 1日,Vol:20,No:9,Pages:139-154,特に、Pages:140-142の第1章と第2章を参照のこと。
【文献】
薦田登志矢,三輪忍,中村宏,OpenCLを用いたパイプライン並列プログラミングAPIの初期検討,情報処理学会研究報告,日本,一般社団法人情報処理学会,2011年12月15日,Vol:2011-ARC-197,No:10,Pages:1-7,特に、Pages:2-5の2.の項目と3.の項目と4.の項目を参照のこと。
(58)【調査した分野】(Int.Cl.,DB名)
【発明を実施するための形態】
【0015】
以下、図面を参照して本発明の実施の形態について説明する。
図1は、本発明の一実施の形態に係る計算機システムの機能ブロック図である。本実施の形態に係る計算機システム10は、ホスト手段110と、ホスト手段110に接続されそのホスト手段110の機能を拡張する拡張手段120と、ホスト手段110と拡張手段120との間でデータの受け渡しをする共通通信手段130と、を備えている。また、ホスト手段110及び拡張手段120は、夫々、データを格納する格納手段111、121と、その格納されたデータを処理する処理手段112、122と、を有している。
【0016】
さらに、共通通信手段130は、ホスト手段110内のスレッド間においてデータを受け渡す機能と、ホスト手段110上のスレッドと拡張手段120上のスレッドとの間においてデータを受け渡す機能と、を有している。これにより、計算機システム10のプログラムの簡素化を行うことで、その開発生産性を向上させることができる。
【0017】
実施の形態1.
図2は、本発明の実施の形態1に係る計算機システムの概略的なハードウェア構成の一例を示すブロック図である。本実施の形態1に係る計算機システム10は、ホストシステム(以下、ホストと称す)2と、アクセラレータ3と、ホスト2とアクセラレータ3間でデータを転送するデータ転送部4と、を備えている。ホスト2及びアクセラレータ3は、夫々、プロセッサ21、31及びメモリ22、32を有している。
【0018】
図3は、本実施の形態1に係る計算機システム上における概略的なソフトウェア構成の一例を示すブロック図である。本実施の形態1に係る計算機システム10において、ホスト2及びアクセラレータ3上で、夫々、OS(Operating System)5、6及びプロセス7、8が動作し、各プロセス7、8を共通通信部9が接続している。
【0019】
各OS5、6は、ホスト2とアクセラレータ3との間のデータ転送部4を用いて、ホスト2とアクセラレータ3間でデータを転送する機能を有している。各OS5、6は、そのデータ転送機能を、ユーザープログラムなどを介して利用可能となっている。なお、ホスト2上を動作するOS5とアクセラレータ3上を動作するOS6とは、異なるOSであるが、同一のOSであってもよい。
【0020】
ホスト2上のプロセス7は、処理を依頼する処理依頼部71と、処理を実行する処理実行部72と、データを格納するデータ格納部73と、データを送受信するデータ送受信部74と、を有している。ホスト2及びアクセラレータ3のデータ格納部73、83及びデータ送受信部74、84が、共通通信部9を構成する。
【0021】
処理依頼部71は、入力手段の一具体例であり、処理実行部72において処理対象となるデータを生成する機能を有している。また、処理依頼部71は、データ生成の際に、プロセス7外部からデータを受信する機能も有している。
【0022】
処理実行部72は、処理手段の一具体例であり、データに対して処理を実行する機能を有している。また、処理実行部72は、同時に複数のデータに対して処理を行う機能を有しているのが望ましい。典型的には、処理依頼部71及び処理実行部72は、夫々独立したスレッドとして実現されている。また、処理実行部72を複数のスレッドによって実現することで、複数のデータに対して同時に処理を行うことが可能となる。
【0023】
共通通信部9は、共通通信手段の一具体例であり、ホスト2上のデータ格納部73と、アクセラレータ3上のデータ格納部83と、ホスト2及びアクセラレータ3間のデータを転送するホストアクセラレータ間データ転送部(データ転送手段の一具体例)11と、から構成されている。また、ホストアクセラレータ間データ転送部11は、ホスト2上のデータ送受信部(データ送受信手段の一具体例)74と、アクセラレータ3上のデータ送受信部84と、から構成されている。
【0024】
データ格納部73、83は、格納手段の一具体例であり、プロセス7、8のメモリ空間上に構成されており、データ書込み機能、及び、データ読出し機能を有している。データ格納部73、83は、複数のデータを格納することができることが望ましい。
【0025】
ホスト2のデータ送受信部74は、データ格納部73からデータを読み出しOS5を呼び出すことによって、読み出したデータを、ホストアクセラレータ間データ転送部11を介して、アクセラレータ3に送信する機能と、アクセラレータ3のデータ送受信部84から送信されたデータを、データ格納部73に格納する機能と、を有している。
【0026】
アクセラレータ3上のプロセス8は、ホスト2上のプロセス7と同様に、処理実行部(処理手段の一具体例)82と、データ格納部83と、データ送受信部(データ送受信手段の一具体例)84と、を有している。これら処理実行部82、データ格納部83、及びデータ送受信部84の機能は、ホスト2上の対応する処理実行部72、データ格納部73、及びデータ送受信部74の機能と略同一であるため、その説明を省略する。なお、本実施の形態1において、処理はホスト2上から依頼されるため、アクセラレータ3上のプロセス8は処理依頼部を有していない構成となっている。
【0027】
次に、本実施の形態1に係る計算機システムの動作について詳細に説明する。まず、ホスト2上の処理依頼部71は、入力されるデータに基づいて、処理実行部72において処理対象となるデータを生成する。ここで、処理依頼部71にデータが入力される方法は、典型的に、計算機システム10の外部接続手段からデータが入力される場合や、ユーザによって指示入力される場合であるが、これに限らず、任意の方法が適用可能である。
【0028】
次に、ホスト2上の処理依頼部71は、生成した処理対象データをデータ格納部73に格納する。なお、処理対象データが複数存在する場合は、その複数の処理対象データを夫々データ格納部73に格納する。その後、処理実行部72は、データ格納部73に格納された処理対象データを読み出し処理を行う。なお、データ格納部73に処理対象データが複数格納されている場合は、処理実行部72は先に取り出した処理対象データに対する処理が終了する前に、新たな処理対象データを取り出し、処理を始めても良い。
【0029】
処理実行部72が実行した処理結果を処理依頼部71に対して返信する場合は、上記逆の動作によって行うことができる。このとき、データ格納部73に格納されたデータは、どこからどこへ送信されるか識別でき、正確な送信先に届くように構成されている。例えば、処理依頼部71がデータ格納部73に格納したデータは、処理実行部72またはデータ送受信部74のみが取り出すように構成され、処理実行部72またはデータ送受信部74がデータ格納部73に格納したデータは、処理依頼部71のみが取り出すように構成されている。
【0030】
ホスト2上のデータ送受信部74は、データ格納部73に格納されたデータを取り出す。データ送受信部74は、OS5を呼び出し、呼び出したOS5に対して、取り出したデータをアクセラレータ3に対し送信することを指示する。OS5は、ホスト2及びアクセラレータ3間のデータ転送部4を介して、アクセラレータ3上のOS6を呼び出し、呼び出したOS6に対し処理対象データを送信する。
【0031】
アクセラレータ3上のOS6は、受信したデータをアクセラレータ3上のデータ送受信部84に送信する。アクセラレータ3上のデータ送受信部84は、ホスト2のOS5からデータを受信し、アクセラレータ3上のデータ格納部83に格納する。アクセラレータ3上の処理実行部82は、データ格納部83に格納されたデータを読み出し、処理を実行する。
【0032】
なお、ホスト2上のデータ格納部73に複数のデータが格納されている場合、ホスト2上のデータ送受信部74は、格納された複数のデータを夫々アクセラレータ3に送信しても良い。また、アクセラレータ3上のデータ格納部83に複数のデータが格納されている場合、アクセラレータ3上の処理実行部82は、データ格納部83から先に取り出したデータに対する処理が終了する前に、新しいデータを取り出し処理を行ってもよい。さらに、ホスト2上の処理実行部72が処理を行う動作と、アクセラレータ3上の処理実行部82が処理を行う動作とは、同時に実行されることが望ましい。これにより、全体として同時に実行される処理実行部の数が増えるため、処理性能を向上させることができる。
【0033】
さらにまた、ホスト2上の処理実行部72のみがデータ格納部73に格納された特定のデータを取出し処理するようにする機能を、共通通信部9が有していても良い。これにより、ホスト2内の処理実行部72のみが特定のデータを実行できるようにすることができる。同様に、アクセラレータ3上の処理実行部82のみが特定のデータの処理を行うようにする機能を、共通通信部9が有していても良い。
【0034】
以上、本実施の形態1に係る計算機システム10によれば、ホスト2上の処理依頼部71からホスト2上の処理実行部72へデータを送信する場合と、ホスト2からアクセラレータ3上の処理実行部82へデータを送信する場合と、のいずれの場合においても、各データ格納部73、83へのデータの格納及び取出しによって行うことができる。したがって、処理依頼部71や処理実行部72、82がホストアクセラレータ間データ転送部11を直接用いる必要が無い為、プログラムをより簡潔に記述できる。すなわち、計算機システム10のプログラムの簡素化を行うことで、その開発生産性を向上させることができる。
【0035】
なお、上記実施の形態1において、アクセラレータ3が処理依頼部を更に備える構成であってもよい。アクセラレータ3が処理依頼部を備えることによって、アクセラレータ3上で新たな処理を開始することが可能になる。
【0036】
実施の形態2.
本発明の実施の形態2に係る計算機システム20のハードウェア構成は、上記実施の形態1に係る計算機システム10のハードウェア構成と略同一である。
図4は本実施の形態2に係る計算機システム上における概略的なソフトウェア構成の一例を示すブロック図である。本実施の形態2に係る計算機システム20は、ホスト2上に2つのプロセス7、12が存在すること、及び、共通通信部13がホスト内データ転送部14を更に有すること、が特徴である。
【0037】
ホスト内データ転送部14は、プロセス7上のデータ送受信部75とプロセス12上のデータ送受信部123と、から構成されている。ホスト内データ転送部14の各データ送受信部75、123は、ホストアクセラレータ間データ転送部11のデータ送受信部74、84と同様の機能を有しており、さらに、OS5、6の提供するプロセス間通信機能を利用してホスト2内の別プロセス中のデータ送受信部にデータを転送する機能を有している。本実施の形態2に係る計算機システム20において、他の構成は上記実施の形態1に係る計算機システム10と略同一であるため、詳細な説明は省略する。
【0038】
本実施の形態に係る計算機システム20によれば、ホスト2上の複数のプロセス7、12を用いて効率的に処理を行うことができる。また、ホスト2上のプロセス7、12とアクセラレータ3上のプロセス8とが利用するメモリ空間が異なるのと同様に、ホスト2上の各プロセス7、12が利用するメモリ空間も異なる。このため、複数のメモリ空間を利用した場合にプログラムが正確に動作するかを確認することができる。
【0039】
なお、上記実施の形態2において、ホスト2上に2つのプロセス7、12が存在する構成について説明したが、これに限らない。例えば、ホスト2上に3つ以上のプロセスが存在する構成、あるいは、アクセラレータ3上に複数のプロセスが存在する構成についても適用可能である。
【0040】
実施の形態3.
図5は、本発明の実施の形態3に係る計算機システム30の概略的ハードウェア構成の一例を示すブロック図である。本実施の形態3に係る計算機システム30は、複数のアクセラレータ3、15を備えることを特徴とする。
図6は、本発明の実施の形態3に係る計算機システム上におけるソフトウェア構成の一例を示すブロック図である。
【0041】
本実施の形態3に係る計算機システム30において、共通通信部17が複数のホストアクセラレータ間データ転送部11、18を有している。ホスト2上のデータ格納部73と各アクセラレータ3、15上のデータ格納部83、162とが、この複数のホストアクセラレータ間データ転送部11、18を介して相互に接続されている。これにより、例えば、ホスト2上の処理依頼部71が複数のアクセラレータ3、15上の処理実行部82、161に共通通信部17を介してデータを渡すことが可能となる。本実施の形態3に係る計算機システム30において、他の構成は上記実施の形態1に係る計算機システム10と略同一であるため、詳細な説明は省略する。
【0042】
本実施の形態3に係る計算機システム30によれば、複数のアクセラレータが利用可能であるため、より高い処理性能が得られる。
【0043】
なお、上記実施の形態3において、アクセラレータ3、15を2つ備える構成が適用されているが、これに限らず、例えば、アクセラレータを3つ以上備える構成も適用可能である。
【0044】
さらに、上記実施の形態3において、共通通信部17が2つのアクセラレータ3、15上のデータ格納部83、162間で直接的にデータを転送するアクセラレータ間データ転送部を有していても良い。これにより、ホスト2を介さずにアクセラレータ3、15間で直接データを送受信することも可能となる。
【0045】
実施の形態4.
図7は、本発明の実施の形態4に係る計算機システムの概略的な構成の一例を示すブロック図である。本実施の形態4に係る計算機システム40においては、ホスト2およびアクセラレータ3上のプロセス7、8を生成するための、プログラムのソースコード51をも含む構成となっている。なお、一般的に、このソースコード51をコンパイルし、オブジェクトの実行をOS5、6に対して指示することで、プロセス7、8が生成される。
【0046】
本実施の形態4に係るプロセス7、8のソースコード51は、依頼部52と、実行部53と、データ投入部54と、データ取出部55と、パイプライン構築指示部56と、を有している。
【0047】
依頼部52および実行部53は、例えば、プロセス7、8の処理依頼部71および処理実行部72、82の動作を記述したプログラムである。データ投入部54およびデータ取出部55は、例えば、共通通信部9のデータ格納部73、83へデータを投入する動作またはデータを取出す動作を記述したプログラムである。
【0048】
パイプライン構築指示部56は、パイプライン構築部57に対して、パイプラインの構築を指示する。パイプライン構築部57は、パイプライン構築手段の一具体例であり、依頼部52、実行部53、データ投入部54、データ取出部55などの構成要素を接続することによって、処理依頼部71、および処理実行部72、82を生成し、生成した処理依頼部71及び処理実行部72、82の間を、共通通信部9を介して接続することにより、パイプラインを構築する機能を有するプログラムである。なお、パイプライン構築部57は、ユーザの記述した設定ファイルと、ホスト2及びアクセラレータ3のハードウェア構成と、に基づいてパイプラインの構築を行う機能を有しているのが望ましい。
【0049】
また、本実施の形態4に係る計算機システム40は、パイプライン構築部57からの指示に応じて共通通信部9を生成する共通通信部生成部58を、更に備えている。共通通部信生成部58は、共通通信部9を構成するデータ格納部73、83およびホストアクセラレータ間データ転送部11を夫々生成する機能を有している。
【0050】
次に、本実施の形態4に係る計算機システムの特徴的な動作である、パイプライン構築部がパイプラインを構築する動作について詳細に説明する。
【0051】
まず、パイプライン構築部57は、共通通信部生成部58に対しデータ格納部73、83の生成を指示する。次に、パイプライン構築部57は、生成されたデータ格納部73、83に対し、データ投入部お54よびデータ取出部55を接続する。これにより、パイプライン中の処理間でデータ送受信が可能となる。その後、パイプライン構築部57は、ホストアクセラレータ間データ転送部11を生成し、生成したホストアクセラレータ間データ転送部11に、ホスト2及びアクセラレータ3上のデータ格納部73、83を接続する。これにより、ホスト2上とアクセラレータ3上におけるパイプラインの処理間において、データの送受信が可能となる。
【0052】
次に、パイプライン構築部による具体的なパイプラインの構成について説明する。
図8は、ソースコード51から生成されたプロセス7、8を含む、本実施の形態4に係る計算機システムのソフトウェア構成の一例を示すブロック図であり、ホスト上の構成を中心にして示したブロック図である。例えば、ホスト2上において、依頼部711がデータを生成、送信し、そのデータを実行部723、724で処理した後に最終的に依頼部712が受信するというデータフローのパイプライン処理が実行される。また、上記同様のパイプライン処理がアクセラレータ3上においても実行される。
【0053】
なお、本実施の形態4に係る計算機システム40のハードウェア構成は、上記第1の実施の形態に係る計算機システム10と同一であるため、詳細な説明は省略する。処理依頼部71は、依頼部711、依頼部712、データ投入部713、及びデータ取出部714、を有している。パイプライン構築部57は、
図8に示すような接続関係となるように、パイプラインを構築する。一方、処理実行部72は、実行部723と、実行部724と、実行部723、724に夫々接続されたデータ投入部725、726及びデータ取出部721、722と、を有している。パイプライン構築部57は、
図8に示すような接続関係となるように、パイプラインを構築する。
【0054】
パイプライン構築部57は、上述したようなデータフローでパイプライン処理が行われるように、共通通信部9のデータ格納部73として、
図8に示すように、ホスト上に3つの記憶部731、732、733を生成し、各記憶部731、732、733を接続する。各記憶部731、732、733はデータ格納部73に格納されたデータを夫々記憶する機能を有している。上述したような接続を行うことで、依頼部711、データ投入部713、記憶部731、データ取出部721、実行部723、データ投入部725、記憶部732、データ取出部722、実行部724、データ投入部726、記憶部733、データ取出部714、及び依頼部712の順番でデータが流れる。
【0055】
なお、各処理間のデータフローを明確に説明するために、複数の記憶部731、732、733を用いて、各記憶部731、732、733に、夫々、データ投入部713、725、726及びデータ取出部714、721、722を接続している。これにより、データがどこからどこへ流れるかを明確に区別することができる。
【0056】
本実施の形態4において、データ格納部73のデータフローを区別する方法は、これに限定されるわけではない。例えば、1つの記憶部を用いる場合において、この記憶部に格納する各データにタグを付けることによって、データフローの方向を区別してもよく、任意の方法が適用可能である。
【0057】
また、パイプライン構築部57は、ホストアクセラレータ間データ転送部11を記憶部732に接続する。これにより、実行部723の処理実行を終了したデータを、ホストアクセラレータ間データ転送部11を介してアクセラレータ3に転送することができる。また、パイプライン構築部57は、ホストアクセラレータ間データ転送部11から受信したデータが記憶部733に格納されるように、ホストアクセラレータ間データ転送部11を記憶部733に接続する。これにより、アクセラレータ3上の実行部で処理されたデータが、ホスト2上の記憶部733を介して依頼部712に渡されるようにしている。
【0058】
図9は、本実施の形態4に係る計算機システムのソフトウェア構成の一例を示すブロック図であり、アクセラレータ上の構成を中心にして示したブロック図である。アクセラレータ3上では実行部824のみが処理実行を行う。このため、パイプライン構築部57は、アクセラレータ3上で、処理依頼部が無く、処理実行部82が3つの(複数の)実行部824、825、826で構成され、かつ、データ格納部83が2つの記憶部831、832で構成されるように、パイプラインを構築する。
【0059】
なお、本実施の形態4において、パイプライン構築部57は、複数の実行部824、825、826を生成している。これにより、アクセラレータ3は複数の実行部824、825、826を並列に処理させることができ、処理性能を向上させることができる。各構成要素間の接続については、上記ホスト2上の接続と略同一であるため、説明は省略する。
【0060】
以上、本実施の形態4に係る計算機システム40によれば、データ処理実行時(プログラム実行時)に、パイプラインを同時に構築することができる。また、ホストプロセッサ21やアクセラレータプロセッサ31のコア数に応じて、適切なパイプライン構成要素をホスト2及びアクセラレータ3上に夫々構築し、それらパイプライン構成要素を共通通信部9によって接続することで、一つのパイプラインを構築することができる。したがって、ホストプロセッサ21やアクセラレータプロセッサ31のコア数などに依存したソースコードを記述する必要がないという効果が得られる。
【0061】
さらに、ホスト2のプロセッサ21とソースコード互換性のあるプロセッサ31を搭載したアクセラレータ3を用いることで、ホスト用プロセスのソースコードと、アクセラレータ用プロセスのソースコードと、を同一にすることが可能なる。したがって、単一のソースコードのホスト2及びアクセラレータ3を備えた計算機システム40を利用できるようになり、プログラム開発生産性を向上させることができるという効果が得られる。
【0062】
実施の形態5.
本発明の実施の形態5において、上記実施の形態1に係る計算機システム10の動作をより具体的な実施例を用いて説明する。
図10は、本実施の形態5に係る計算機システムのパイプライン処理の一例を説明するための図である。このパイプライン処理は、例えば、処理A、処理B、処理Cの3つの処理から構成されている。
【0063】
処理Aは継続的にパイプライン外部から入力データを受け付ける処理である。例えば、計算機システム10に接続されたカメラから定期的に画像データを読み出し、メモリ上に書き込むといった処理である。処理Bは、パイプライン処理の中核となる処理であり、複数の入力データを並列に実行できる処理である。例えば、入力された画像データに対して画像認識を行うといった処理である。処理Cは、処理Bの結果を受け取り、外部に出力する処理である。例えば、画像認識結果を計算機システムの表示装置に表示させるといった処理である。
【0064】
図11は、処理Aと処理Bとの間で渡されるデータ構造の一例を、C言語構造体で示した図である。本実施の形態において、例えば、データサイズを示すsizeメンバと、データが格納されたメモリ中のアドレスを示すaddrメンバと、を有する構造体が利用されている。処理Aと処理Bにおいてこの構造体へのポインタが渡される。なお、処理Bと処理Cとの間におけるデータの受け渡しについては、周知であるため説明は省略する。
【0065】
図12は、本実施の形態5で利用されるプログラムのソースコードの一例を示す図である。本実施の形態5において、ホスト2とアクセラレータ3とで同一のソースコードを利用し、処理間のデータ受渡しにキューを用いている。本実施の形態5に係るプログラムは、4つのモジュール57、61、62、63から構成されている。1つ目のモジュール61は、処理Aと、キューへデータ(上記構造体へのポインタ)を投入するキュー投入部611と、から構成されている。2つ目のモジュール62は、キューからデータを取り出すキュー取出部621と、処理Bと、キュー投入部622と、から構成されている。3つ目のモジュール63は、キュー取出部631と、処理Cと、から構成されている。4つ目のモジュール57は、上記3つのモジュールを組み合わせて、パイプラインを構成するパイプライン構築部57である。パイプライン構築部57は、スレッドを生成して、生成した各スレッドを上記3つのモジュール61、62、63に割り当てる機能を有している。なお、処理Aおよび処理Cを含む各モジュール61、63に、1つのスレッドを割り当て、処理Bを含むモジュール62に、複数の(2つの)スレッドを割り当てることで、処理Bが並列に実行される。典型的には、処理Bを含むモジュール62に割り当てるスレッド数は、ホストプロセッサ21またはアクセラレータプロセッサ31のコア数に応じて、決められる。なお、具体的なスレッドの生成方法や、スレッドに処理を割り当てる方法は、一般的なOSで使用される方法を用いても良い。
【0066】
図13は、本実施の形態5に係るホストおよびアクセラレータを説明するための図である。本実施の形態5において、アクセラレータ3は、ホストプロセッサ21とソースコード互換性を有するプロセッサ31と、ホスト2のスレッド生成部64とAPI(Application Program Interface)互換性を有するスレッド生成部65と、を備えている。ホスト2とアクセラレータ3は、PCIe(Peripheral Component Interconnect express)バス66で接続されている。
【0067】
図14は、本実施の形態5に係る共通通信部を説明するための図である。本実施の形態5に係る共通通信部9は、データ格納部73、83を構成するキューH1、H2、A1、A2と、データ転送部4を構成する送信スレッド61、64および受信スレッド62、63と、を有している。キューH1、H2、A1、A2は、プロセス7、8のメモリ空間上に生成され、処理間で受け渡すデータを記録する。なお、キューH1、H2、A1、A2のデータ構造は、周知であるため、その実装方法の説明は省略する。
【0068】
各データ格納部73、83は、夫々、2つのキューH1、H2、A1、A2を用いて、処理Aと処理Bとの間で受け渡すデータを格納し、処理Bと処理Cとの間でデータを受け渡す。また、上述の如く、キューH1、H2、A1、A2はプロセス7、8のメモリ空間上に作成される。このため、例えば、処理Aと処理Bとの間でデータを受け渡すためには、上記構造体へのポインタだけをキューH1、H2、A1、A2に格納すればよく、データ本体をキューH1、H2、A1、A2に格納する必要はない。これにより、プロセス7、8内においてデータを高速に受け渡すことができ、処理の高速化に繋がる。
【0069】
ホスト2上の送信スレッド61は、キューH1からデータを読み出し、OS5のホストアクセラレータ間通信機能を呼び出して、読み出したデータをアクセラレータ3上の受信スレッド63に対して送信する。アクセラレータ3上の受信スレッド63は、データを受信すると、受信したデータをキューA1に格納する。このとき、キューA1には上記構造体へのポインタが格納されているが、送信スレッド61はポインタを送信するのではなく、構造体メンバであるsizeと構造体メンバであるaddrで示されるアドレスとに基づいて、sizeバイトの範囲にあるデータ本体を送信する。この動作は、周知の、データのシリアライズと呼ばれる動作と同一である。一方、受信スレッド63は、sizeとデータ本体とを受信し、これを構造体に格納し、この構造体のポインタをキューA1に格納する。この動作は、周知のデータのデシリアライズと呼ばれる動作と同一である。
【0070】
このように、送信スレッド61、64がシリアライズを行い、受信スレッド62、63がデシリアライズを行うことで、ホスト2とアクセラレータ3とでデータ転送を行うときのみ、シリアライズ又はデシリアライズが行われる。このため、ホスト2やアクセラレータ3内でデータを送受信するときには、シリアライズ又はデシリアライズを行う必要がなく、データ送受信のオーバヘッドを低下させることができる。
【0071】
また、処理A、処理B、処理Cは、キューH1、H2、A1、A2へのデータの投入やキューH1、H2、A1、A2からのデータの取り出しによって、データを受け渡すことができる。このため、データ受渡先や、データ元が同一プロセス7、8上にあるのか、異なるプロセス7、8上にあるのかを使い分ける必要がなく、処理部のプログラムを簡潔化することができる。
【0072】
図15は、本実施の形態5に係るパイプライン構築部によってホスト上のプロセス中に構成されるパイプラインの一例を示す図である。本実施の形態5において、4つのスレッドを生成し、処理A及び処理Cを1つのスレッドに夫々割当て、処理Bを2つのスレッドに割り当てている。これは、処理Bを2つのスレッドで並列に実行するためである。また、処理Aと処理Bの間を、キューH1を介して接続し、処理Bと処理Cの間を、キューH2を介して接続している。
【0073】
図16は、アクセラレータ上のプロセス中に構築されるパイプラインの一例を示す図である。本実施の形態5において、処理Aおよび処理Cはホスト2上でのみ実行されるため、アクセラレータ3上のプロセス8において、処理Bを実行する3つのスレッドを生成している。
【0074】
図17は、本実施の形態5に係る計算機システムの全体の接続構成の一例を示す図である。
図17において、図が煩雑になるのを避けるため一部の自明な構成要素は省略されている。キューH1およびキューA1は、処理Aから処理Bへのデータ受渡しに利用されるように接続されている。キューH2およびキューA2は、処理Bから
処理Cへのデータ受渡しに利用されるように接続される。この様にそれぞれ2つのキューH1、H2、A1、A2を用いることで、データ格納部73、83は格納するデータがどこからどこへ流れるデータであるかを区別する機能を有する。
【0075】
次に、上述した本実施の形態5に係る計算機システムの特徴的動作について、より詳細に説明する。なお、キューへのデータ格納などの処理については周知であるため、その説明を省略する。
【0076】
まず、ホスト2とアクセラレータ3間におけるデータ転送について、処理Aから処理Bにデータが受け渡す場合の動作について説明する。本実施の形態5においては、以下のような手順で行われる。
【0077】
アクセラレータ3上の受信スレッド63は、キューA1に格納されているデータ個数を調べる。受信スレッド63は、キューA1に格納されているデータ個数が一定数以下の場合、ホスト3上の送信スレッド61に対しリクエストを送信する。受信スレッド63は、アクセラレータ3が備えるホストアクセラレータ間データ転送部11を用いて、上記リクエストを送ることができる。本実施の形態5において、上述の如く、ホスト2とアクセラレータ3は、PCIeバス66で接続されている。このため、典型的には、ホストアクセラレータ間データ転送部11は、PCIeバス66と、OSが備えるPCIeバス66のドライバソフトウェアと、それを呼び出すためのライブラリと、から構成される。
【0078】
ホスト2上の送信スレッド61は受信スレッド63からリクエストを受けとると、キューH1から予め決められた一定個数のデータを取り出す。なお、送信スレッド61は、キューH1に格納されているデータ個数が一定数以下の場合、格納されている個数だけデータを取り出す。また、送信スレッド61は、キューH1にデータが格納されていない場合、キューH1にデータが格納されるまで待つ。送信スレッド61は、キューH1から取り出したデータに対して、シリアライズを行う。送信スレッド61は、シリアライズしたデータを、ホストアクセラレータ間データ転送部11を用いてアクセラレータ3に転送する。受信スレッド63は、ホストアクセサレータ間データ転送部11からデータを受け取り、デシリアライズを行い、キューA1に格納する。なお、処理Bから処理Cへデータを受け渡す場合の動作も、上記処理Aから処理Bにデータを受け渡す動作と略同様であるため、その説明は省略する。
【0079】
上述した動作は、処理依頼部71および処理実行部72、
82とは完全に独立して行われる。このため、処理依頼部71や処理実行部72、
82はプロセス7、8内のスレッド間でデータを受け渡す場合と、ホスト2とアクセラレータ3間でデータを受け渡す場合と、で動作を変える必要がなく、どちらもキューへのデータ投入またはデータ取出しという同一動作となる。さらに、本実施の形態5において、アクセラレータ3のプロセッサ31は、ホストプロセッサ21とソースコード互換性を有する。このため、同一ソースコードを用いて、プロセス7、8内およびホスト2とアクセラレータ3間におけるデータ転送を記述することができ、プログラムの簡素化に繋がる。
【0080】
なお、上記実施の形態5において、受信スレッド62、63から送信スレッド61、64に対しリクエストを送ることによって、ホストアクセラレータ間のデータ転送を開始したが、これに限らず、ホストアクセラレータ間のデータ転送の動作を異なる動作としても良い。例えば、アクセラレータ3に送信したデータ数とアクセラレータ3から受信したデータ数をカウントし、常に一定数のデータがアクセラレータ3上で処理されるような動作にしても良い。これにより、受信スレッド62、63から送信スレッド61、64へのリクエストが不要になるため、実装を簡潔化でき、転送オーバヘッドを軽減できるといった効果も期待できる。
【0081】
次に、本実施の形態5における性能面での効果を示すため、処理Aを実行したスレッドがキューH1に5つのデータを投入する場合における典型的な動作について説明する。
本動作において、キューH1にデータが投入される時点で全てのキューは空であるとする。
【0082】
キューH1に対しデータが投入されると、ホスト2上の処理Bを備えたスレッドのうち1つのスレッドが、キューH1からデータを取り出し、そのデータに対して処理Bを開始する。なお、本実施の形態5において、処理Bの実行時間が長いため、1つのスレッドの処理が終了する前に、2つ目のスレッドも1つ目のスレッドと同様にキューH1からデータを取り出し処理Bを開始する。
【0083】
さらに、これらの2つの処理が終了する前に、上記ホスト2とアクセラレータ3間におけるデータ転送動作が行われ、キューH1に残っていた3つのデータがアクセラレータ3へ転送されキューA1に投入される。なお、アクセラレータ3上の処理Bを割り当てられたスレッドがキューA1からデータを取り出し処理を開始する動作は、上記ホスト2上と同様であるため、その説明は省略する。
【0084】
上述した動作を行うことで、5つのデータは、ホスト2上の2つのスレッドと、アクセラレータ3上の3つのスレッドと、によって並列処理される。したがって、
図18Aに示すように、5つのデータをホスト2のみにおける2つのスレッドで処理する場合と比較して、本実施の形態5では、
図18Bに示すように、5つのデータをホスト2及びアクセラレータ3における5つのスレッドで並列処理できる。これにより、その処理が終了するまでの時間を短縮でき、スループットを向上させることができる。
【0085】
なお、本実施の形態5において、ライブラリを用いて、共通通信部9を生成するようにしても良い。このライブラリは、上記実施の形態4の共通通信部生成部58に相当している。ライブラリは、パイプライン構築部57からの指示に基づいて、キューH1、H2、A1、A2、送信スレッド61、64、及び受信スレッド62、63を生成する機能と、パイプライン構築部57からの指示に基づいて、これら構成要素H1、H2、A1、A2、61、62、63、64を接続する機能と、を有している。
【0086】
また、キューH1、H2、A1、A2に格納されるデータ構造を、ライブラリのユーザープログラムが指定できるようにする場合、ライブラリは、シリアライズを行うシリアライザー、及びデシリアライズを行うデシリアライザーを、送信スレッド61、64または受信スレッド62、63の生成時に、ユーザープログラムから受け取る機能も有している。典型例では、ライブラリは、ユーザープログラムからコールバック関数を受けとる。共通通信部9をライブラリから生成する構成を取ることによって、パイプライン構成に応じた共通通信部9を、独自開発する場合と比較して、容易に作成することができる。
【0087】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
【0088】
また、上述の実施の形態において、各処理を、上述の如く、CPUにコンピュータプログラムを実行させることにより実現することが可能である。
【0089】
プログラムは、様々なタイプの非一時的なコンピュータ可読媒体(non-transitory computer readable medium)を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体(tangible storage medium)を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体(例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ)、光磁気記録媒体(例えば光磁気ディスク)、CD−ROM、CD−R、CD−R/W、半導体メモリ(例えば、マスクROM、PROM(Programmable ROM)、EPROM(Erasable PROM)、フラッシュROM、RAM)を含む。
【0090】
また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体(transitory computer readable medium)によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【0091】
さらに、上記実施の形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【0092】
(付記1)
データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有するホスト手段と、
前記ホスト手段に接続され該ホスト手段の機能を拡張すると共に、データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有する拡張手段と、
を備える計算機システムであって、
前記ホスト手段内のスレッド間においてデータを受け渡す機能と、前記ホスト手段上のスレッドと前記拡張手段上のスレッドとの間においてデータを受け渡す機能と、を有する共通通信手段を備える、ことを特徴とする計算機システム。
(付記2)
(付記1)記載の計算機システムであって、
前記共通通信手段は、
前記ホスト手段上におけるプロセスのメモリ空間上に構成された前記格納手段と、
前記拡張手段上におけるプロセスのメモリ空間上に構成された前記格納手段と、
前記ホスト手段の格納手段と前記拡張手段の格納手段とを接続するデータ転送手段と、
を有する、ことを特徴とする計算機システム。
(付記3)
(付記2)記載の計算機システムであって、
前記格納手段は、前記プロセスのメモリ空間上に生成され、各処理間で受け渡すデータを記録するキューで構成されている、ことを特徴とする計算機システム。
(付記4)
(付記2)又は(付記3)記載の計算機システムであって、
前記データ転送手段は、
前記ホスト手段上の格納手段とデータの送受信を行う前記ホスト手段上のデータ送受信手段と、
前記拡張手段の格納手段及び前記ホスト手段のデータ送受信手段と、データの送受信を行う前記拡張手段上のデータ送受信手段と、
を有している、ことを特徴とする計算機システム。
(付記5)
(付記1)乃至(付記4)のうちいずれか記載の計算機システムであって、
パイプライン処理における各処理間を前記共通通信手段で接続するパイプライン構築手段を更に備える、ことを特徴とする計算機システム。
(付記6)
(付記5)記載の計算機システムであって、
前記パイプライン構築手段は、データ処理実行時において、前記ホスト手段及び拡張手段のプロセッサコア数に応じて、前記各処理間を接続して前記処理手段及びデータ入力される入力手段を生成し、該生成した処理手段及び入力手段間を前記共通通信手段で接続することでパイプラインを構築する、ことを特徴とする計算機システム。
(付記7)
(付記6)記載の計算機システムであって、
パイプライン構築手段は、前記データ処理実行時において、前記ホスト手段及び拡張手段のプロセッサコア数に応じて、処理を依頼する依頼部と、処理を実行する実行部と、前記格納手段にデータを投入するデータ投入部と、前記格納手段からデータを取り出すデータ取出部と、を相互に接続することで、前記処理手段及び入力手段を生成し、該生成した処理手段及び入力手段間を前記共通通信手段で接続することでパイプラインを構築する、ことを特徴とする計算機システム。
(付記8)
(付記1)乃至(付記7)のうちいずれか記載の計算機システムであって、
前記拡張手段は、前記ホスト手段のプロセッサとソースコード互換性を有するプロセッサを有するアクセラレータである、ことを特徴とする計算機システム。
(付記9)
(付記8)記載の計算機システムであって、
前記拡張手段と前記ホスト手段は、同一ソースコードを用いる、ことを特徴とする計算機システム。
(付記10)
(付記5)記載の計算機システムであって、
前記パイプライン構築手段からの指示に応じて、前記格納手段及び前記データ転送手段を生成し、該生成した格納手段及びデータ転送手段に基づいて、前記共通通信手段を生成する共通通信生成手段を更に備える、ことを特徴とする計算機システム。
(付記11)
データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有するホスト手段と、
前記ホスト手段に接続され該ホスト手段の機能を拡張すると共に、データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有する拡張手段と、
を備える計算機システムの処理方法であって、
前記ホスト手段内のスレッド間においてデータを受け渡すステップと、
前記ホスト手段上のスレッドと前記拡張手段上のスレッドとの間においてデータを受け渡すステップと、を含む、ことを特徴とする計算機システムの処理方法。
(付記12)
(付記11)記載の計算機システムの処理方法であって、
前記ホスト手段上におけるプロセスのメモリ空間上に前記格納手段を構成するステップと、
前記拡張手段上におけるプロセスのメモリ空間上に前記格納手段を構成するステップと、
前記ホスト手段の格納手段と前記拡張手段の格納手段とを接続するステップと、
を含む、ことを特徴とする計算機システムの処理方法。
(付記13)
(付記12)記載の計算機システムの処理方法であって、
前記格納手段を前記プロセスのメモリ空間上に生成され、各処理間で受け渡すデータを記録するキューとして構成する、ことを特徴とする計算機システムの処理方法。
(付記14)
(付記12)又は(付記13)記載の計算機システムの処理方法であって、
前記ホスト手段上において、前記ホスト上の格納手段とデータの送受信を行うステップと、
前記拡張手段の格納手段及び前記ホスト手段と、データの送受信を行うステップと、
を含む、ことを特徴とする計算機システムの処理方法。
(付記15)
(付記11)乃至(付記14)のうちいずれか記載の計算機システムの処理方法であって、
パイプライン処理における各処理間を接続するステップを含む、ことを特徴とする計算機システムの処理方法。
(付記16)
(付記15)記載の計算機システムの処理方法であって、
データ処理実行時において、前記ホスト手段及び拡張手段のプロセッサコア数に応じて、前記各処理間を接続して前記処理手段及びデータ入力される入力手段を生成し、該生成した処理手段及び入力手段間を接続することでパイプラインを構築するステップを含む、ことを特徴とする計算機システムの処理方法。
(付記17)
(付記16)記載の計算機システムの処理方法であって、
前記データ処理実行時において、前記ホスト手段及び拡張手段のプロセッサコア数に応じて、処理を依頼する依頼部と、処理を実行する実行部と、前記格納手段にデータを投入するデータ投入部と、前記格納手段からデータを取り出すデータ取出部と、を相互に接続することで、前記処理手段及び入力手段を生成し、該生成した処理手段及び入力手段間を接続することでパイプラインを構築するステップを含む、ことを特徴とする計算機システムの処理方法。
(付記18)
データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有するホスト手段と、
前記ホスト手段に接続され該ホスト手段の機能を拡張すると共に、データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有する拡張手段と、
を備える計算機システムのプログラムであって、
前記ホスト手段内のスレッド間においてデータを受け渡す処理と、
前記ホスト手段上のスレッドと前記拡張手段上のスレッドとの間においてデータを受け渡す処理と、をコンピュータに実行させることを特徴とする計算機システムのプログラム。
【0093】
この出願は、2012年2月28日に出願された日本出願特願2012−041900を基礎とする優先権を主張し、その開示の全てをここに取り込む。