(57)【要約】計算機システム１０は、データを格納する格納手段１１２と、格納されたデータを処理する処理手段１１１と、を有するホスト手段１１０と、ホスト手段１１０に接続されホスト手段１１０の機能を拡張すると共に、データを格納する格納手段１２２と、格納されたデータを処理する処理手段１２１と、を有する拡張手段１２０と、ホスト手段１１０内のスレッド間においてデータを受け渡す機能と、ホスト手段１１０上のスレッドと拡張手段１２０上のスレッドとの間においてデータを受け渡す機能と、を有する共通通信手段１３０を備えている。
2013128531.tif 000002
【特許請求の範囲】
【請求項１】
データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有するホスト手段と、
前記ホスト手段に接続され該ホスト手段の機能を拡張すると共に、データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有する拡張手段と、
を備える計算機システムであって、
前記ホスト手段内のスレッド間においてデータを受け渡す機能と、前記ホスト手段上のスレッドと前記拡張手段上のスレッドとの間においてデータを受け渡す機能と、を有する共通通信手段を備える、ことを特徴とする計算機システム。
【請求項２】
請求項１記載の計算機システムであって、
前記共通通信手段は、
前記ホスト手段上におけるプロセスのメモリ空間上に構成された前記格納手段と、
前記拡張手段上におけるプロセスのメモリ空間上に構成された前記格納手段と、
前記ホスト手段の格納手段と前記拡張手段の格納手段とを接続するデータ転送手段と、
を有する、ことを特徴とする計算機システム。
【請求項３】
請求項２記載の計算機システムであって、
前記格納手段は、前記プロセスのメモリ空間上に生成され、各処理間で受け渡すデータを記録するキューで構成されている、ことを特徴とする計算機システム。
【請求項４】
請求項２又は３記載の計算機システムであって、
前記データ転送手段は、
前記ホスト手段上の格納手段とデータの送受信を行う前記ホスト手段上のデータ送受信手段と、
前記拡張手段の格納手段及び前記ホスト手段のデータ送受信手段と、データの送受信を行う前記拡張手段上のデータ送受信手段と、
を有している、ことを特徴とする計算機システム。
【請求項５】
請求項１乃至４のうちいずれか１項記載の計算機システムであって、
パイプライン処理における各処理間を前記共通通信手段で接続するパイプライン構築手段を更に備える、ことを特徴とする計算機システム。
【請求項６】
請求項５記載の計算機システムであって、
前記パイプライン構築手段は、データ処理実行時において、前記ホスト手段及び拡張手段のプロセッサコア数に応じて、前記各処理間を接続して前記処理手段及びデータ入力される入力手段を生成し、該生成した処理手段及び入力手段間を前記共通通信手段で接続することでパイプラインを構築する、ことを特徴とする計算機システム。
【請求項７】
請求項６記載の計算機システムであって、
パイプライン構築手段は、前記データ処理実行時において、前記ホスト手段及び拡張手段のプロセッサコア数に応じて、処理を依頼する依頼部と、処理を実行する実行部と、前記格納手段にデータを投入するデータ投入部と、前記格納手段からデータを取り出すデータ取出部と、を相互に接続することで、前記処理手段及び入力手段を生成し、該生成した処理手段及び入力手段間を前記共通通信手段で接続することでパイプラインを構築する、ことを特徴とする計算機システム。
【請求項８】
請求項１乃至７のうちいずれか１項記載の計算機システムであって、
前記拡張手段は、前記ホスト手段のプロセッサとソースコード互換性を有するプロセッサを有するアクセラレータである、ことを特徴とする計算機システム。
【請求項９】
データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有するホスト手段と、
前記ホスト手段に接続され該ホスト手段の機能を拡張すると共に、データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有する拡張手段と、
を備える計算機システムの処理方法であって、
前記ホスト手段内のスレッド間においてデータを受け渡し、
前記ホスト手段上のスレッドと前記拡張手段上のスレッドとの間においてデータを受け渡す、ことを特徴とする計算機システムの処理方法。
【請求項１０】
データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有するホスト手段と、
前記ホスト手段に接続され該ホスト手段の機能を拡張すると共に、データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有する拡張手段と、
を備える計算機システムのプログラムを格納したコンピュータ可読媒体であって、
前記ホスト手段内のスレッド間においてデータを受け渡す処理と、
前記ホスト手段上のスレッドと前記拡張手段上のスレッドとの間においてデータを受け渡す処理と、をコンピュータに実行させる計算機システムのプログラムを格納したコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラムの簡素化を行うことで、その開発生産性を向上させた計算機システム、その処理方法、及びプログラムに関するものである。
【背景技術】
【０００２】
ソフトウェアによって画像処理などを行う場合の処理方式として、複数の処理をパイプライン状に接続して、次々にデータを流しながら処理を行うパイプライン処理がある。パイプライン処理では、先行する処理と後続する処理を異なるデータに対して同時に行うことや、同一の処理を複数の異なるデータに対して同時に行うことが可能である。したがって、パイプライン処理では、複数のプロセッサコアを備えたマルチコアプロセッサを用いることで、これらの同時に実行可能な処理を並列に行い、その処理性能を向上させることができる。【０００３】
現在、主流である共有メモリ型マルチコアプロセッサにおいては、並列処理を行う方法としてスレッドが利用されている。この方法では、一つのプロセス中の複数のスレッドは、それぞれ異なるプロセッサコア上で動作することが可能となっている。しかしながら、メモリ空間を共有するため、並列処理のためのプログラミングが比較的に容易なことが知られている。上記パイプライン処理では、パイプライン中の各処理を異なるスレッドによって実行することで、並列処理を行うことができる。【０００４】
このような複数のスレッドで並列処理を行うプログラムとしては、一般にプロセッサの備えるコア数が多いほど高性能となる。したがって、処理性能を向上させるためには、よりコア数の多いプロセッサを搭載した計算機に置き換えるという方法を取ることができる。しかしながら、この方法では計算機の置き換えに伴う作業が必要であるなどの問題が生じるため、計算機を置き換えずに処理性能向上を図る方法も必要とされる。【０００５】
一方、既存の計算機を置き換えたり、複数の計算機を用いたりすることなく、計算機システムの処理性能を向上させる方法として、プロセッサを搭載した拡張カードを、計算機の拡張バスに接続するという方法が存在する（例えば、特許文献１参照）。この方法においては、計算機システムが元々備えるプロセッサに加えて、拡張カード上のプロセッサを効果的に利用することで、全体としての処理性能を向上させることが可能となる。本明細書において、このような拡張カードをアクセラレータと称し、このアクセラレータに対して、元々の計算機システムをホストシステム（または単にホスト）と称す。【０００６】
一般に、アクセラレータを用いる場合は、プログラム開発が困難になることが知られている。このため、パイプライン処理を、アクセラレータを用いて高性能化することが困難となっている。従来のアクセラレータは、浮動小数点演算やグラフィック処理などの特定の処理の高速化に主眼が置かれている。このため、アクセラレータ用のプログラムは、ホスト上のプログラムとは異なる特別なプログラミング言語で記述する必要があり、そのことがプログラム開発を困難化する要因となっている。【０００７】
これに対し、近年、より汎用的なプロセッサコアを複数搭載することで高性能を発揮するマルチコア型アクセラレータなどが利用されるようになっている。この様なアクセラレータにおいては、ホストプロセッサとプログラミング言語の互換性が高いといった特徴がある。【０００８】
一方、アクセラレータを利用する場合に、プログラム開発を困難にするもう一つの要因として、ホストとアクセラレータ間のデータ転送に起因する課題が存在する。一般に、アクセラレータを接続する拡張バスのデータ転送速度は、プロセッサとメモリを接続するメモリバスに比べて低速である。このため、通常、アクセラレータは、自身のプロセッサが利用するための独自メモリを備えている（例えば、特許文献２及び３参照）。したがって、アクセラレータを搭載したシステムにおいては、ホストプロセッサとアクセラレータプロセッサがそれぞれ異なるメモリ空間を利用することになる。このため、ホストとアクセラレータ上で動くプログラム間では、共有メモリ型マルチコアのようにメモリを介して直接データを送受信することができず、専用のデータ転送手段を利用する必要がある。例えば、プロセス内の複数のスレッドを用いたパイプライン処理を行う場合、各処理間のデータは共有メモリを介して転送される。これに対し、ホストとアクセラレータ間では、専用のデータ転送手段が利用されることになる。
【先行技術文献】
【特許文献】
【０００９】
【特許文献１】特開２０１１−２４３０５５号公報
【特許文献２】特開２０１１−０６５６５０号公報
【特許文献３】特開２０１０−０６１６４８号公報
【発明の概要】
【発明が解決しようとする課題】
【００１０】
ここで、例えば、図１９に示すように、処理Ａ、処理Ｂ、及び処理Ｃの３つの処理で構成されるパイプライン処理のうち、処理Ｂをホスト内の複数のスレッドとアクセラレータを用いて実行する場合を想定する。また、キューを用いて各処理間を接続し、アクセラレータ用の言語拡張を用いてアクセラレータを呼び出す場合を想定する。この場合、図１９で示されるように、ホスト上の処理Ａと処理Ｂの間はキューを用いてデータが送受信されているのに対して、ホスト上の処理Ａ及びＣとアクセラレータ上の処理Ｂとの間では専用のデータ転送部が利用される。このように、データ並列処理を、ホストとアクセラレータとを用いて行う場合は、ホスト内と、ホストとアクセラレータ間で、データを送受信する手段が異なることになる。これはプログラムを複雑化させ、その開発生産性を悪化させるという問題を生じさせている。【００１１】
本発明は、このような問題点を解決するためになされたものであり、プログラムの簡素化を行うことで、その開発生産性を向上させた計算機システム、その処理方法、及びプログラムを提供することを主たる目的とする。
【課題を解決するための手段】
【００１２】
上記目的を達成するための本発明の一態様は、データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有するホスト手段と、前記ホスト手段に接続され該ホスト手段の機能を拡張すると共に、データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有する拡張手段と、を備える計算機システムであって、前記ホスト手段内のスレッド間においてデータを受け渡す機能と、前記ホスト手段上のスレッドと前記拡張手段上のスレッドとの間においてデータを受け渡す機能と、を有する共通通信手段を備える、ことを特徴とする計算機システムである。
また、上記目的を達成するための本発明の一態様は、データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有するホスト手段と、前記ホスト手段に接続され該ホスト手段の機能を拡張すると共に、データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有する拡張手段と、を備える計算機システムの処理方法であって、前記ホスト手段内のスレッド間においてデータを受け渡すステップと、前記ホスト手段上のスレッドと前記拡張手段上のスレッドとの間においてデータを受け渡すステップと、を含む、ことを特徴とする計算機システムの処理方法であってもよい。
さらに、上記目的を達成するための本発明の一態様は、データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有するホスト手段と、前記ホスト手段に接続され該ホスト手段の機能を拡張すると共に、データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有する拡張手段と、を備える計算機システムのプログラムであって、前記ホスト手段内のスレッド間においてデータを受け渡す処理と、前記ホスト手段上のスレッドと前記拡張手段上のスレッドとの間においてデータを受け渡す処理と、をコンピュータに実行させることを特徴とする計算機システムのプログラムであってもよい。
【発明の効果】
【００１３】
本発明によれば、プログラムの簡素化を行うことで、その開発生産性を向上させた計算機システム、その処理方法、及びプログラムを提供することができる。
【図面の簡単な説明】
【００１４】
【図１】本発明の一実施の形態に係る計算機システムの機能ブロック図である。
【図２】本発明の実施の形態１に係る計算機システムの概略的なハードウェア構成の一例を示すブロック図である。
【図３】本発明の実施の形態１に係る計算機システム上における概略的なソフトウェア構成の一例を示すブロック図である。
【図４】本発明の実施の形態２に係る計算機システム上における概略的なソフトウェア構成の一例を示すブロック図である。
【図５】本発明の実施の形態３に係る計算機システムの概略的ハードウェア構成を示すブロック図である。
【図６】本発明の実施の形態３に係る計算機システム上におけるソフトウェア構成の一例を示すブロック図である。
【図７】本発明の実施の形態４に係る計算機システムの概略的な構成の一例を示すブロック図である。
【図８】ソースコードから生成されたプロセスを含む、本発明の実施の形態４に係る計算機システムのソフトウェア構成の一例を示すブロック図であり、ホスト上の構成を中心にして示したブロック図である。
【図９】本発明の実施の形態４に係る計算機システムのソフトウェア構成の一例を示すブロック図であり、アクセラレータ上の構成を中心にして示したブロック図である。
【図１０】本発明の実施の形態５に係る計算機システムのパイプライン処理の一例を説明するための図である。
【図１１】処理Ａと処理Ｂとの間で渡されるデータ構造の一例を、Ｃ言語構造体で示した図である。
【図１２】本発明の実施の形態５で利用されるプログラムのソースコードの一例を示す図である。
【図１３】本発明の実施の形態５に係るホストおよびアクセラレータを説明するための図である。
【図１４】本発明の実施の形態５に係る共通通信部を説明するための図である。
【図１５】本発明の実施の形態５に係るパイプライン構築部によってホスト上のプロセス中に構成されるパイプラインの一例を示す図である。
【図１６】アクセラレータ上のプロセス中に構築されるパイプラインの一例を示す図である。
【図１７】本発明の実施の形態５に係る計算機システムの全体の接続構成の一例を示す図である。
【図１８Ａ】ホスト上のスレッドのみで処理した場合の一例を示す図である。
【図１８Ｂ】ホスト及びアクセラレータ上のスレッドで並列処理した場合の一例を示す図である。
【図１９】従来のホストアクセラレータ間の処理の一例を示す図である。
【発明を実施するための形態】
【００１５】
以下、図面を参照して本発明の実施の形態について説明する。図１は、本発明の一実施の形態に係る計算機システムの機能ブロック図である。本実施の形態に係る計算機システム１０は、ホスト手段１１０と、ホスト手段１１０に接続されそのホスト手段１１０の機能を拡張する拡張手段１２０と、ホスト手段１１０と拡張手段１２０との間でデータの受け渡しをする共通通信手段１３０と、を備えている。また、ホスト手段１１０及び拡張手段１２０は、夫々、データを格納する格納手段１１１、１２１と、その格納されたデータを処理する処理手段１１２、１２２と、を有している。
【００１６】
さらに、共通通信手段１３０は、ホスト手段１１０内のスレッド間においてデータを受け渡す機能と、ホスト手段１１０上のスレッドと拡張手段１２０上のスレッドとの間においてデータを受け渡す機能と、を有している。これにより、計算機システム１０のプログラムの簡素化を行うことで、その開発生産性を向上させることができる。
【００１７】
実施の形態１．
図２は、本発明の実施の形態１に係る計算機システムの概略的なハードウェア構成の一例を示すブロック図である。本実施の形態１に係る計算機システム１０は、ホストシステム（以下、ホストと称す）２と、アクセラレータ３と、ホスト２とアクセラレータ３間でデータを転送するデータ転送部４と、を備えている。ホスト２及びアクセラレータ３は、夫々、プロセッサ２１、３１及びメモリ２２、３２を有している。
【００１８】
図３は、本実施の形態１に係る計算機システム上における概略的なソフトウェア構成の一例を示すブロック図である。本実施の形態１に係る計算機システム１０において、ホスト２及びアクセラレータ３上で、夫々、ＯＳ（Operating System）５、６及びプロセス７、８が動作し、各プロセス７、８を共通通信部９が接続している。
【００１９】
各ＯＳ５、６は、ホスト２とアクセラレータ３との間のデータ転送部４を用いて、ホスト２とアクセラレータ３間でデータを転送する機能を有している。各ＯＳ５、６は、そのデータ転送機能を、ユーザープログラムなどを介して利用可能となっている。なお、ホスト２上を動作するＯＳ５とアクセラレータ３上を動作するＯＳ６とは、異なるＯＳであるが、同一のＯＳであってもよい。
【００２０】
ホスト２上のプロセス７は、処理を依頼する処理依頼部７１と、処理を実行する処理実行部７２と、データを格納するデータ格納部７３と、データを送受信するデータ送受信部７４と、を有している。ホスト２及びアクセラレータ３のデータ格納部７３、８３及びデータ送受信部７４、８４が、共通通信部９を構成する。
【００２１】
処理依頼部７１は、入力手段の一具体例であり、処理実行部７２において処理対象となるデータを生成する機能を有している。また、処理依頼部７１は、データ生成の際に、プロセス７外部からデータを受信する機能も有している。
【００２２】
処理実行部７２は、処理手段の一具体例であり、データに対して処理を実行する機能を有している。また、処理実行部７２は、同時に複数のデータに対して処理を行う機能を有しているのが望ましい。典型的には、処理依頼部７１及び処理実行部７２は、夫々独立したスレッドとして実現されている。また、処理実行部７２を複数のスレッドによって実現することで、複数のデータに対して同時に処理を行うことが可能となる。
【００２３】
共通通信部９は、共通通信手段の一具体例であり、ホスト２上のデータ格納部７３と、アクセラレータ３上のデータ格納部８３と、ホスト２及びアクセラレータ３間のデータを転送するホストアクセラレータ間データ転送部（データ転送手段の一具体例）１１と、から構成されている。また、ホストアクセラレータ間データ転送部１１は、ホスト２上のデータ送受信部（データ送受信手段の一具体例）７４と、アクセラレータ３上のデータ送受信部８４と、から構成されている。
【００２４】
データ格納部７３、８３は、格納手段の一具体例であり、プロセス７、８のメモリ空間上に構成されており、データ書込み機能、及び、データ読出し機能を有している。データ格納部７３、８３は、複数のデータを格納することができることが望ましい。
【００２５】
ホスト２のデータ送受信部７４は、データ格納部７３からデータを読み出しＯＳ５を呼び出すことによって、読み出したデータを、ホストアクセラレータ間データ転送部１１を介して、アクセラレータ３に送信する機能と、アクセラレータ３のデータ送受信部８４から送信されたデータを、データ格納部７３に格納する機能と、を有している。
【００２６】
アクセラレータ３上のプロセス８は、ホスト２上のプロセス７と同様に、処理実行部（処理手段の一具体例）８２と、データ格納部８３と、データ送受信部（データ送受信手段の一具体例）８４と、を有している。これら処理実行部８２、データ格納部８３、及びデータ送受信部８４の機能は、ホスト２上の対応する処理実行部７２、データ格納部７３、及びデータ送受信部７４の機能と略同一であるため、その説明を省略する。なお、本実施の形態１において、処理はホスト２上から依頼されるため、アクセラレータ３上のプロセス８は処理依頼部を有していない構成となっている。 
【００２７】
次に、本実施の形態１に係る計算機システムの動作について詳細に説明する。まず、ホスト２上の処理依頼部７１は、入力されるデータに基づいて、処理実行部７２において処理対象となるデータを生成する。ここで、処理依頼部７１にデータが入力される方法は、典型的に、計算機システム１０の外部接続手段からデータが入力される場合や、ユーザによって指示入力される場合であるが、これに限らず、任意の方法が適用可能である。
【００２８】
次に、ホスト２上の処理依頼部７１は、生成した処理対象データをデータ格納部７３に格納する。なお、処理対象データが複数存在する場合は、その複数の処理対象データを夫々データ格納部７３に格納する。その後、処理実行部７２は、データ格納部７３に格納された処理対象データを読み出し処理を行う。なお、データ格納部７３に処理対象データが複数格納されている場合は、処理実行部７２は先に取り出した処理対象データに対する処理が終了する前に、新たな処理対象データを取り出し、処理を始めても良い。
【００２９】
処理実行部７２が実行した処理結果を処理依頼部７１に対して返信する場合は、上記逆の動作によって行うことができる。このとき、データ格納部７３に格納されたデータは、どこからどこへ送信されるか識別でき、正確な送信先に届くように構成されている。例えば、処理依頼部７１がデータ格納部７３に格納したデータは、処理実行部７２またはデータ送受信部７４のみが取り出すように構成され、処理実行部７２またはデータ送受信部７４がデータ格納部７３に格納したデータは、処理依頼部７１のみが取り出すように構成されている。
【００３０】
ホスト２上のデータ送受信部７４は、データ格納部７３に格納されたデータを取り出す。データ送受信部７４は、ＯＳ５を呼び出し、呼び出したＯＳ５に対して、取り出したデータをアクセラレータ３に対し送信することを指示する。ＯＳ５は、ホスト２及びアクセラレータ３間のデータ転送部４を介して、アクセラレータ３上のＯＳ６を呼び出し、呼び出したＯＳ６に対し処理対象データを送信する。
【００３１】
アクセラレータ３上のＯＳ６は、受信したデータをアクセラレータ３上のデータ送受信部８４に送信する。アクセラレータ３上のデータ送受信部８４は、ホスト２のＯＳ５からデータを受信し、アクセラレータ３上のデータ格納部８３に格納する。アクセラレータ３上の処理実行部８２は、データ格納部８３に格納されたデータを読み出し、処理を実行する。
【００３２】
なお、ホスト２上のデータ格納部７３に複数のデータが格納されている場合、ホスト２上のデータ送受信部７４は、格納された複数のデータを夫々アクセラレータ３に送信しても良い。また、アクセラレータ３上のデータ格納部８３に複数のデータが格納されている場合、アクセラレータ３上の処理実行部８２は、データ格納部８３から先に取り出したデータに対する処理が終了する前に、新しいデータを取り出し処理を行ってもよい。さらに、ホスト２上の処理実行部７２が処理を行う動作と、アクセラレータ３上の処理実行部８２が処理を行う動作とは、同時に実行されることが望ましい。これにより、全体として同時に実行される処理実行部の数が増えるため、処理性能を向上させることができる。
【００３３】
さらにまた、ホスト２上の処理実行部７２のみがデータ格納部７３に格納された特定のデータを取出し処理するようにする機能を、共通通信部９が有していても良い。これにより、ホスト２内の処理実行部７２のみが特定のデータを実行できるようにすることができる。同様に、アクセラレータ３上の処理実行部８２のみが特定のデータの処理を行うようにする機能を、共通通信部９が有していても良い。
【００３４】
以上、本実施の形態１に係る計算機システム１０によれば、ホスト２上の処理依頼部７１からホスト２上の処理実行部７２へデータを送信する場合と、ホスト２からアクセラレータ３上の処理実行部８２へデータを送信する場合と、のいずれの場合においても、各データ格納部７３、８３へのデータの格納及び取出しによって行うことができる。したがって、処理依頼部７１や処理実行部７２、８２がホストアクセラレータ間データ転送部１１を直接用いる必要が無い為、プログラムをより簡潔に記述できる。すなわち、計算機システム１０のプログラムの簡素化を行うことで、その開発生産性を向上させることができる。
【００３５】
なお、上記実施の形態１において、アクセラレータ３が処理依頼部を更に備える構成であってもよい。アクセラレータ３が処理依頼部を備えることによって、アクセラレータ３上で新たな処理を開始することが可能になる。
【００３６】
実施の形態２．
本発明の実施の形態２に係る計算機システム２０のハードウェア構成は、上記実施の形態１に係る計算機システム１０のハードウェア構成と略同一である。図４は本実施の形態２に係る計算機システム上における概略的なソフトウェア構成の一例を示すブロック図である。本実施の形態２に係る計算機システム２０は、ホスト２上に２つのプロセス７、１２が存在すること、及び、共通通信部１３がホスト内データ転送部１４を更に有すること、が特徴である。
【００３７】
ホスト内データ転送部１４は、プロセス７上のデータ送受信部７５とプロセス１２上のデータ送受信部１２３と、から構成されている。ホスト内データ転送部１４の各データ送受信部７５、１２３は、ホストアクセラレータ間データ転送部１１のデータ送受信部７４、８４と同様の機能を有しており、さらに、ＯＳ５、６の提供するプロセス間通信機能を利用してホスト２内の別プロセス中のデータ送受信部にデータを転送する機能を有している。本実施の形態２に係る計算機システム２０において、他の構成は上記実施の形態１に係る計算機システム１０と略同一であるため、詳細な説明は省略する。
【００３８】
本実施の形態に係る計算機システム２０によれば、ホスト２上の複数のプロセス７、１２を用いて効率的に処理を行うことができる。また、ホスト２上のプロセス７、１２とアクセラレータ３上のプロセス８とが利用するメモリ空間が異なるのと同様に、ホスト２上の各プロセス７、１２が利用するメモリ空間も異なる。このため、複数のメモリ空間を利用した場合にプログラムが正確に動作するかを確認することができる。
【００３９】
なお、上記実施の形態２において、ホスト２上に２つのプロセス７、１２が存在する構成について説明したが、これに限らない。例えば、ホスト２上に３つ以上のプロセスが存在する構成、あるいは、アクセラレータ３上に複数のプロセスが存在する構成についても適用可能である。
【００４０】
実施の形態３．
図５は、本発明の実施の形態３に係る計算機システム３０の概略的ハードウェア構成の一例を示すブロック図である。本実施の形態３に係る計算機システム３０は、複数のアクセラレータ３、１５を備えることを特徴とする。図６は、本発明の実施の形態３に係る計算機システム上におけるソフトウェア構成の一例を示すブロック図である。
【００４１】
本実施の形態３に係る計算機システム３０において、共通通信部１７が複数のホストアクセラレータ間データ転送部１１、１８を有している。ホスト２上のデータ格納部７３と各アクセラレータ３、１５上のデータ格納部８３、１６２とが、この複数のホストアクセラレータ間データ転送部１１、１８を介して相互に接続されている。これにより、例えば、ホスト２上の処理依頼部７１が複数のアクセラレータ３、１５上の処理実行部８２、１６１に共通通信部１７を介してデータを渡すことが可能となる。本実施の形態３に係る計算機システム３０において、他の構成は上記実施の形態１に係る計算機システム１０と略同一であるため、詳細な説明は省略する。
【００４２】
本実施の形態３に係る計算機システム３０によれば、複数のアクセラレータが利用可能であるため、より高い処理性能が得られる。
【００４３】
なお、上記実施の形態３において、アクセラレータ３、１５を２つ備える構成が適用されているが、これに限らず、例えば、アクセラレータを３つ以上備える構成も適用可能である。
【００４４】
さらに、上記実施の形態３において、共通通信部１７が２つのアクセラレータ３、１５上のデータ格納部８３、１６２間で直接的にデータを転送するアクセラレータ間データ転送部を有していても良い。これにより、ホスト２を介さずにアクセラレータ３、１５間で直接データを送受信することも可能となる。
【００４５】
実施の形態４．
図７は、本発明の実施の形態４に係る計算機システムの概略的な構成の一例を示すブロック図である。本実施の形態４に係る計算機システム４０においては、ホスト２およびアクセラレータ３上のプロセス７、８を生成するための、プログラムのソースコード５１をも含む構成となっている。なお、一般的に、このソースコード５１をコンパイルし、オブジェクトの実行をＯＳ５、６に対して指示することで、プロセス７、８が生成される。
【００４６】
本実施の形態４に係るプロセス７、８のソースコード５１は、依頼部５２と、実行部５３と、データ投入部５４と、データ取出部５５と、パイプライン構築指示部５６と、を有している。
【００４７】
依頼部５２および実行部５３は、例えば、プロセス７、８の処理依頼部７１および処理実行部７２、８２の動作を記述したプログラムである。データ投入部５４およびデータ取出部５５は、例えば、共通通信部９のデータ格納部７３、８３へデータを投入する動作またはデータを取出す動作を記述したプログラムである。
【００４８】
パイプライン構築指示部５６は、パイプライン構築部５７に対して、パイプラインの構築を指示する。パイプライン構築部５７は、パイプライン構築手段の一具体例であり、依頼部５２、実行部５３、データ投入部５４、データ取出部５５などの構成要素を接続することによって、処理依頼部７１、および処理実行部７２、８２を生成し、生成した処理依頼部７１及び処理実行部７２、８２の間を、共通通信部９を介して接続することにより、パイプラインを構築する機能を有するプログラムである。なお、パイプライン構築部５７は、ユーザの記述した設定ファイルと、ホスト２及びアクセラレータ３のハードウェア構成と、に基づいてパイプラインの構築を行う機能を有しているのが望ましい。
【００４９】
また、本実施の形態４に係る計算機システム４０は、パイプライン構築部５７からの指示に応じて共通通信部９を生成する共通通信部生成部５８を、更に備えている。共通通部信生成部５８は、共通通信部９を構成するデータ格納部７３、８３およびホストアクセラレータ間データ転送部１１を夫々生成する機能を有している。
【００５０】
次に、本実施の形態４に係る計算機システムの特徴的な動作である、パイプライン構築部がパイプラインを構築する動作について詳細に説明する。
【００５１】
まず、パイプライン構築部５７は、共通通信部生成部５８に対しデータ格納部７３、８３の生成を指示する。次に、パイプライン構築部５７は、生成されたデータ格納部７３、８３に対し、データ投入部お５４よびデータ取出部５５を接続する。これにより、パイプライン中の処理間でデータ送受信が可能となる。その後、パイプライン構築部５７は、ホストアクセラレータ間データ転送部１１を生成し、生成したホストアクセラレータ間データ転送部１１に、ホスト２及びアクセラレータ３上のデータ格納部７３、８３を接続する。これにより、ホスト２上とアクセラレータ３上におけるパイプラインの処理間において、データの送受信が可能となる。
【００５２】
次に、パイプライン構築部による具体的なパイプラインの構成について説明する。図８は、ソースコード５１から生成されたプロセス７、８を含む、本実施の形態４に係る計算機システムのソフトウェア構成の一例を示すブロック図であり、ホスト上の構成を中心にして示したブロック図である。例えば、ホスト２上において、依頼部７１１がデータを生成、送信し、そのデータを実行部７２３、７２４で処理した後に最終的に依頼部７１２が受信するというデータフローのパイプライン処理が実行される。また、上記同様のパイプライン処理がアクセラレータ３上においても実行される。
【００５３】
なお、本実施の形態４に係る計算機システム４０のハードウェア構成は、上記第１の実施の形態に係る計算機システム１０と同一であるため、詳細な説明は省略する。処理依頼部７１は、依頼部７１１、依頼部７１２、データ投入部７１３、及びデータ取出部７１４、を有している。パイプライン構築部５７は、図８に示すような接続関係となるように、パイプラインを構築する。一方、処理実行部７２は、実行部７２３と、実行部７２４と、実行部７２３、７２４に夫々接続されたデータ投入部７２５、７２６及びデータ取出部７２１、７２２と、を有している。パイプライン構築部５７は、図８に示すような接続関係となるように、パイプラインを構築する。
【００５４】
パイプライン構築部５７は、上述したようなデータフローでパイプライン処理が行われるように、共通通信部９のデータ格納部７３として、図８に示すように、ホスト上に３つの記憶部７３１、７３２、７３３を生成し、各記憶部７３１、７３２、７３３を接続する。各記憶部７３１、７３２、７３３はデータ格納部７３に格納されたデータを夫々記憶する機能を有している。上述したような接続を行うことで、依頼部７１１、データ投入部７１３、記憶部７３１、データ取出部７２１、実行部７２３、データ投入部７２５、記憶部７３２、データ取出部７２２、実行部７２４、データ投入部７２６、記憶部７３３、データ取出部７１４、及び依頼部７１２の順番でデータが流れる。
【００５５】
なお、各処理間のデータフローを明確に説明するために、複数の記憶部７３１、７３２、７３３を用いて、各記憶部７３１、７３２、７３３に、夫々、データ投入部７１３、７２５、７２６及びデータ取出部７１４、７２１、７２２を接続している。これにより、データがどこからどこへ流れるかを明確に区別することができる。
【００５６】
本実施の形態４において、データ格納部７３のデータフローを区別する方法は、これに限定されるわけではない。例えば、１つの記憶部を用いる場合において、この記憶部に格納する各データにタグを付けることによって、データフローの方向を区別してもよく、任意の方法が適用可能である。
【００５７】
また、パイプライン構築部５７は、ホストアクセラレータ間データ転送部１１を記憶部７３２に接続する。これにより、実行部７２３の処理実行を終了したデータを、ホストアクセラレータ間データ転送部１１を介してアクセラレータ３に転送することができる。また、パイプライン構築部５７は、ホストアクセラレータ間データ転送部１１から受信したデータが記憶部７３３に格納されるように、ホストアクセラレータ間データ転送部１１を記憶部７３３に接続する。これにより、アクセラレータ３上の実行部で処理されたデータが、ホスト２上の記憶部７３３を介して依頼部７１２に渡されるようにしている。
【００５８】
図９は、本実施の形態４に係る計算機システムのソフトウェア構成の一例を示すブロック図であり、アクセラレータ上の構成を中心にして示したブロック図である。アクセラレータ３上では実行部８２４のみが処理実行を行う。このため、パイプライン構築部５７は、アクセラレータ３上で、処理依頼部が無く、処理実行部８２が３つの（複数の）実行部８２４、８２５、８２６で構成され、かつ、データ格納部８３が２つの記憶部８３１、８３２で構成されるように、パイプラインを構築する。
【００５９】
なお、本実施の形態４において、パイプライン構築部５７は、複数の実行部８２４、８２５、８２６を生成している。これにより、アクセラレータ３は複数の実行部８２４、８２５、８２６を並列に処理させることができ、処理性能を向上させることができる。各構成要素間の接続については、上記ホスト２上の接続と略同一であるため、説明は省略する。
【００６０】
以上、本実施の形態４に係る計算機システム４０によれば、データ処理実行時（プログラム実行時）に、パイプラインを同時に構築することができる。また、ホストプロセッサ２１やアクセラレータプロセッサ３１のコア数に応じて、適切なパイプライン構成要素をホスト２及びアクセラレータ３上に夫々構築し、それらパイプライン構成要素を共通通信部９によって接続することで、一つのパイプラインを構築することができる。したがって、ホストプロセッサ２１やアクセラレータプロセッサ３１のコア数などに依存したソースコードを記述する必要がないという効果が得られる。
【００６１】
さらに、ホスト２のプロセッサ２１とソースコード互換性のあるプロセッサ３１を搭載したアクセラレータ３を用いることで、ホスト用プロセスのソースコードと、アクセラレータ用プロセスのソースコードと、を同一にすることが可能なる。したがって、単一のソースコードのホスト２及びアクセラレータ３を備えた計算機システム４０を利用できるようになり、プログラム開発生産性を向上させることができるという効果が得られる。 
【００６２】
実施の形態５．
本発明の実施の形態５において、上記実施の形態１に係る計算機システム１０の動作をより具体的な実施例を用いて説明する。図１０は、本実施の形態５に係る計算機システムのパイプライン処理の一例を説明するための図である。このパイプライン処理は、例えば、処理Ａ、処理Ｂ、処理Ｃの３つの処理から構成されている。
【００６３】
処理Ａは継続的にパイプライン外部から入力データを受け付ける処理である。例えば、計算機システム１０に接続されたカメラから定期的に画像データを読み出し、メモリ上に書き込むといった処理である。処理Ｂは、パイプライン処理の中核となる処理であり、複数の入力データを並列に実行できる処理である。例えば、入力された画像データに対して画像認識を行うといった処理である。処理Ｃは、処理Ｂの結果を受け取り、外部に出力する処理である。例えば、画像認識結果を計算機システムの表示装置に表示させるといった処理である。
【００６４】
図１１は、処理Ａと処理Ｂとの間で渡されるデータ構造の一例を、Ｃ言語構造体で示した図である。本実施の形態において、例えば、データサイズを示すsizeメンバと、データが格納されたメモリ中のアドレスを示すaddrメンバと、を有する構造体が利用されている。処理Ａと処理Ｂにおいてこの構造体へのポインタが渡される。なお、処理Ｂと処理Ｃとの間におけるデータの受け渡しについては、周知であるため説明は省略する。 
【００６５】
図１２は、本実施の形態５で利用されるプログラムのソースコードの一例を示す図である。本実施の形態５において、ホスト２とアクセラレータ３とで同一のソースコードを利用し、処理間のデータ受渡しにキューを用いている。本実施の形態５に係るプログラムは、４つのモジュール５７、６１、６２、６３から構成されている。１つ目のモジュール６１は、処理Ａと、キューへデータ（上記構造体へのポインタ）を投入するキュー投入部６１１と、から構成されている。２つ目のモジュール６２は、キューからデータを取り出すキュー取出部６２１と、処理Ｂと、キュー投入部６２２と、から構成されている。３つ目のモジュール６３は、キュー取出部６３１と、処理Ｃと、から構成されている。４つ目のモジュール５７は、上記３つのモジュールを組み合わせて、パイプラインを構成するパイプライン構築部５７である。パイプライン構築部５７は、スレッドを生成して、生成した各スレッドを上記３つのモジュール６１、６２、６３に割り当てる機能を有している。なお、処理Ａおよび処理Ｃを含む各モジュール６１、６３に、１つのスレッドを割り当て、処理Ｂを含むモジュール６２に、複数の（２つの）スレッドを割り当てることで、処理Ｂが並列に実行される。典型的には、処理Ｂを含むモジュール６２に割り当てるスレッド数は、ホストプロセッサ２１またはアクセラレータプロセッサ３１のコア数に応じて、決められる。なお、具体的なスレッドの生成方法や、スレッドに処理を割り当てる方法は、一般的なＯＳで使用される方法を用いても良い。
【００６６】
図１３は、本実施の形態５に係るホストおよびアクセラレータを説明するための図である。本実施の形態５において、アクセラレータ３は、ホストプロセッサ２１とソースコード互換性を有するプロセッサ３１と、ホスト２のスレッド生成部６４とＡＰＩ（Application Program Interface）互換性を有するスレッド生成部６５と、を備えている。ホスト２とアクセラレータ３は、ＰＣＩｅ（Peripheral Component Interconnect express）バス６６で接続されている。
【００６７】
図１４は、本実施の形態５に係る共通通信部を説明するための図である。本実施の形態５に係る共通通信部９は、データ格納部７３、８３を構成するキューＨ１、Ｈ２、Ａ１、Ａ２と、データ転送部４を構成する送信スレッド６１、６４および受信スレッド６２、６３と、を有している。キューＨ１、Ｈ２、Ａ１、Ａ２は、プロセス７、８のメモリ空間上に生成され、処理間で受け渡すデータを記録する。なお、キューＨ１、Ｈ２、Ａ１、Ａ２のデータ構造は、周知であるため、その実装方法の説明は省略する。
【００６８】
各データ格納部７３、８３は、夫々、２つのキューＨ１、Ｈ２、Ａ１、Ａ２を用いて、処理Ａと処理Ｂとの間で受け渡すデータを格納し、処理Ｂと処理Ｃとの間でデータを受け渡す。また、上述の如く、キューＨ１、Ｈ２、Ａ１、Ａ２はプロセス７、８のメモリ空間上に作成される。このため、例えば、処理Ａと処理Ｂとの間でデータを受け渡すためには、上記構造体へのポインタだけをキューＨ１、Ｈ２、Ａ１、Ａ２に格納すればよく、データ本体をキューＨ１、Ｈ２、Ａ１、Ａ２に格納する必要はない。これにより、プロセス７、８内においてデータを高速に受け渡すことができ、処理の高速化に繋がる。 
【００６９】
ホスト２上の送信スレッド６１は、キューＨ１からデータを読み出し、ＯＳ５のホストアクセラレータ間通信機能を呼び出して、読み出したデータをアクセラレータ３上の受信スレッド６３に対して送信する。アクセラレータ３上の受信スレッド６３は、データを受信すると、受信したデータをキューＡ１に格納する。このとき、キューＡ１には上記構造体へのポインタが格納されているが、送信スレッド６１はポインタを送信するのではなく、構造体メンバであるsizeと構造体メンバであるaddrで示されるアドレスとに基づいて、sizeバイトの範囲にあるデータ本体を送信する。この動作は、周知の、データのシリアライズと呼ばれる動作と同一である。一方、受信スレッド６３は、sizeとデータ本体とを受信し、これを構造体に格納し、この構造体のポインタをキューＡ１に格納する。この動作は、周知のデータのデシリアライズと呼ばれる動作と同一である。
【００７０】
このように、送信スレッド６１、６４がシリアライズを行い、受信スレッド６２、６３がデシリアライズを行うことで、ホスト２とアクセラレータ３とでデータ転送を行うときのみ、シリアライズ又はデシリアライズが行われる。このため、ホスト２やアクセラレータ３内でデータを送受信するときには、シリアライズ又はデシリアライズを行う必要がなく、データ送受信のオーバヘッドを低下させることができる。
【００７１】
また、処理Ａ、処理Ｂ、処理Ｃは、キューＨ１、Ｈ２、Ａ１、Ａ２へのデータの投入やキューＨ１、Ｈ２、Ａ１、Ａ２からのデータの取り出しによって、データを受け渡すことができる。このため、データ受渡先や、データ元が同一プロセス７、８上にあるのか、異なるプロセス７、８上にあるのかを使い分ける必要がなく、処理部のプログラムを簡潔化することができる。
【００７２】
図１５は、本実施の形態５に係るパイプライン構築部によってホスト上のプロセス中に構成されるパイプラインの一例を示す図である。本実施の形態５において、４つのスレッドを生成し、処理Ａ及び処理Ｃを１つのスレッドに夫々割当て、処理Ｂを２つのスレッドに割り当てている。これは、処理Ｂを２つのスレッドで並列に実行するためである。また、処理Ａと処理Ｂの間を、キューＨ１を介して接続し、処理Ｂと処理Ｃの間を、キューＨ２を介して接続している。
【００７３】
図１６は、アクセラレータ上のプロセス中に構築されるパイプラインの一例を示す図である。本実施の形態５において、処理Ａおよび処理Ｃはホスト２上でのみ実行されるため、アクセラレータ３上のプロセス８において、処理Ｂを実行する３つのスレッドを生成している。
【００７４】
図１７は、本実施の形態５に係る計算機システムの全体の接続構成の一例を示す図である。図１７において、図が煩雑になるのを避けるため一部の自明な構成要素は省略されている。キューＨ１およびキューＡ１は、処理Ａから処理Ｂへのデータ受渡しに利用されるように接続されている。キューＨ２およびキューＡ２は、処理Ｂから処理Ａへのデータ受渡しに利用されるように接続される。この様にそれぞれ２つのキューＨ１、Ｈ２、Ａ１、Ａ２を用いることで、データ格納部７３、８３は格納するデータがどこからどこへ流れるデータであるかを区別する機能を有する。
【００７５】
次に、上述した本実施の形態５に係る計算機システムの特徴的動作について、より詳細に説明する。なお、キューへのデータ格納などの処理については周知であるため、その説明を省略する。
【００７６】
まず、ホスト２とアクセラレータ３間におけるデータ転送について、処理Ａから処理Ｂにデータが受け渡す場合の動作について説明する。本実施の形態５においては、以下のような手順で行われる。
【００７７】
アクセラレータ３上の受信スレッド６３は、キューＡ１に格納されているデータ個数を調べる。受信スレッド６３は、キューＡ１に格納されているデータ個数が一定数以下の場合、ホスト３上の送信スレッド６１に対しリクエストを送信する。受信スレッド６３は、アクセラレータ３が備えるホストアクセラレータ間データ転送部１１を用いて、上記リクエストを送ることができる。本実施の形態５において、上述の如く、ホスト２とアクセラレータ３は、ＰＣＩｅバス６６で接続されている。このため、典型的には、ホストアクセラレータ間データ転送部１１は、ＰＣＩｅバス６６と、ＯＳが備えるＰＣＩｅバス６６のドライバソフトウェアと、それを呼び出すためのライブラリと、から構成される。
【００７８】
ホスト２上の送信スレッド６１は受信スレッド６３からリクエストを受けとると、キューＨ１から予め決められた一定個数のデータを取り出す。なお、送信スレッド６１は、キューＨ１に格納されているデータ個数が一定数以下の場合、格納されている個数だけデータを取り出す。また、送信スレッド６１は、キューＨ１にデータが格納されていない場合、キューＨ１にデータが格納されるまで待つ。送信スレッド６１は、キューＨ１から取り出したデータに対して、シリアライズを行う。送信スレッド６１は、シリアライズしたデータを、ホストアクセラレータ間データ転送部１１を用いてアクセラレータ３に転送する。受信スレッド６３は、ホストアクセサレータ間データ転送部１１からデータを受け取り、デシリアライズを行い、キューＡ１に格納する。なお、処理Ｂから処理Ｃへデータを受け渡す場合の動作も、上記処理Ａから処理Ｂにデータを受け渡す動作と略同様であるため、その説明は省略する。
【００７９】
上述した動作は、処理依頼部７１および処理実行部７２、８３とは完全に独立して行われる。このため、処理依頼部７１や処理実行部７２、８３はプロセス７、８内のスレッド間でデータを受け渡す場合と、ホスト２とアクセラレータ３間でデータを受け渡す場合と、で動作を変える必要がなく、どちらもキューへのデータ投入またはデータ取出しという同一動作となる。さらに、本実施の形態５において、アクセラレータ３のプロセッサ３１は、ホストプロセッサ２１とソースコード互換性を有する。このため、同一ソースコードを用いて、プロセス７、８内およびホスト２とアクセラレータ３間におけるデータ転送を記述することができ、プログラムの簡素化に繋がる。
【００８０】
なお、上記実施の形態５において、受信スレッド６２、６３から送信スレッド６１、６４に対しリクエストを送ることによって、ホストアクセラレータ間のデータ転送を開始したが、これに限らず、ホストアクセラレータ間のデータ転送の動作を異なる動作としても良い。例えば、アクセラレータ３に送信したデータ数とアクセラレータ３から受信したデータ数をカウントし、常に一定数のデータがアクセラレータ３上で処理されるような動作にしても良い。これにより、受信スレッド６２、６３から送信スレッド６１、６４へのリクエストが不要になるため、実装を簡潔化でき、転送オーバヘッドを軽減できるといった効果も期待できる。 
【００８１】
次に、本実施の形態５における性能面での効果を示すため、処理Ａを実行したスレッドがキューＨ１に５つのデータを投入する場合における典型的な動作について説明する。
本動作において、キューＨ１にデータが投入される時点で全てのキューは空であるとする。
【００８２】
キューＨ１に対しデータが投入されると、ホスト２上の処理Ｂを備えたスレッドのうち１つのスレッドが、キューＨ１からデータを取り出し、そのデータに対して処理Ｂを開始する。なお、本実施の形態５において、処理Ｂの実行時間が長いため、１つのスレッドの処理が終了する前に、２つ目のスレッドも１つ目のスレッドと同様にキューＨ１からデータを取り出し処理Ｂを開始する。
【００８３】
さらに、これらの２つの処理が終了する前に、上記ホスト２とアクセラレータ３間におけるデータ転送動作が行われ、キューＨ１に残っていた３つのデータがアクセラレータ３へ転送されキューＡ１に投入される。なお、アクセラレータ３上の処理Ｂを割り当てられたスレッドがキューＡ１からデータを取り出し処理を開始する動作は、上記ホスト２上と同様であるため、その説明は省略する。
【００８４】
上述した動作を行うことで、５つのデータは、ホスト２上の２つのスレッドと、アクセラレータ３上の３つのスレッドと、によって並列処理される。したがって、図１８Aに示すように、５つのデータをホスト２のみにおける２つのスレッドで処理する場合と比較して、本実施の形態５では、図１８Bに示すように、５つのデータをホスト２及びアクセラレータ３における５つのスレッドで並列処理できる。これにより、その処理が終了するまでの時間を短縮でき、スループットを向上させることができる。
【００８５】
なお、本実施の形態５において、ライブラリを用いて、共通通信部９を生成するようにしても良い。このライブラリは、上記実施の形態４の共通通信部生成部５８に相当している。ライブラリは、パイプライン構築部５７からの指示に基づいて、キューＨ１、Ｈ２、Ａ１、Ａ２、送信スレッド６１、６４、及び受信スレッド６２、６３を生成する機能と、パイプライン構築部５７からの指示に基づいて、これら構成要素Ｈ１、Ｈ２、Ａ１、Ａ２、６１、６２、６３、６４を接続する機能と、を有している。
【００８６】
また、キューＨ１、Ｈ２、Ａ１、Ａ２に格納されるデータ構造を、ライブラリのユーザープログラムが指定できるようにする場合、ライブラリは、シリアライズを行うシリアライザー、及びデシリアライズを行うデシリアライザーを、送信スレッド６１、６４または受信スレッド６２、６３の生成時に、ユーザープログラムから受け取る機能も有している。典型例では、ライブラリは、ユーザープログラムからコールバック関数を受けとる。共通通信部９をライブラリから生成する構成を取ることによって、パイプライン構成に応じた共通通信部９を、独自開発する場合と比較して、容易に作成することができる。
【００８７】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。
【００８８】
また、上述の実施の形態において、各処理を、上述の如く、ＣＰＵにコンピュータプログラムを実行させることにより実現することが可能である。
【００８９】
プログラムは、様々なタイプの非一時的なコンピュータ可読媒体（non-transitory computer readable medium）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（tangible storage medium）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ、ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Programmable ROM）、ＥＰＲＯＭ（Erasable PROM）、フラッシュＲＯＭ、ＲＡＭ）を含む。
【００９０】
また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（transitory computer readable medium）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００９１】
さらに、上記実施の形態の一部又は全部は、以下の付記のようにも記載されうるが、以下には限られない。
【００９２】
（付記１）
データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有するホスト手段と、
前記ホスト手段に接続され該ホスト手段の機能を拡張すると共に、データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有する拡張手段と、
を備える計算機システムであって、
前記ホスト手段内のスレッド間においてデータを受け渡す機能と、前記ホスト手段上のスレッドと前記拡張手段上のスレッドとの間においてデータを受け渡す機能と、を有する共通通信手段を備える、ことを特徴とする計算機システム。
（付記２）
（付記１）記載の計算機システムであって、
前記共通通信手段は、
前記ホスト手段上におけるプロセスのメモリ空間上に構成された前記格納手段と、
前記拡張手段上におけるプロセスのメモリ空間上に構成された前記格納手段と、
前記ホスト手段の格納手段と前記拡張手段の格納手段とを接続するデータ転送手段と、
を有する、ことを特徴とする計算機システム。
（付記３）
（付記２）記載の計算機システムであって、
前記格納手段は、前記プロセスのメモリ空間上に生成され、各処理間で受け渡すデータを記録するキューで構成されている、ことを特徴とする計算機システム。
（付記４）
（付記２）又は（付記３）記載の計算機システムであって、
前記データ転送手段は、
前記ホスト手段上の格納手段とデータの送受信を行う前記ホスト手段上のデータ送受信手段と、
前記拡張手段の格納手段及び前記ホスト手段のデータ送受信手段と、データの送受信を行う前記拡張手段上のデータ送受信手段と、
を有している、ことを特徴とする計算機システム。
（付記５）
（付記１）乃至（付記４）のうちいずれか記載の計算機システムであって、
パイプライン処理における各処理間を前記共通通信手段で接続するパイプライン構築手段を更に備える、ことを特徴とする計算機システム。
（付記６）
（付記５）記載の計算機システムであって、
前記パイプライン構築手段は、データ処理実行時において、前記ホスト手段及び拡張手段のプロセッサコア数に応じて、前記各処理間を接続して前記処理手段及びデータ入力される入力手段を生成し、該生成した処理手段及び入力手段間を前記共通通信手段で接続することでパイプラインを構築する、ことを特徴とする計算機システム。
（付記７）
（付記６）記載の計算機システムであって、
パイプライン構築手段は、前記データ処理実行時において、前記ホスト手段及び拡張手段のプロセッサコア数に応じて、処理を依頼する依頼部と、処理を実行する実行部と、前記格納手段にデータを投入するデータ投入部と、前記格納手段からデータを取り出すデータ取出部と、を相互に接続することで、前記処理手段及び入力手段を生成し、該生成した処理手段及び入力手段間を前記共通通信手段で接続することでパイプラインを構築する、ことを特徴とする計算機システム。
（付記８）
（付記１）乃至（付記７）のうちいずれか記載の計算機システムであって、
前記拡張手段は、前記ホスト手段のプロセッサとソースコード互換性を有するプロセッサを有するアクセラレータである、ことを特徴とする計算機システム。
（付記９）
（付記８）記載の計算機システムであって、
前記拡張手段と前記ホスト手段は、同一ソースコードを用いる、ことを特徴とする計算機システム。
（付記１０）
（付記５）記載の計算機システムであって、
前記パイプライン構築手段からの指示に応じて、前記格納手段及び前記データ転送手段を生成し、該生成した格納手段及びデータ転送手段に基づいて、前記共通通信手段を生成する共通通信生成手段を更に備える、ことを特徴とする計算機システム。
（付記１１）
データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有するホスト手段と、
前記ホスト手段に接続され該ホスト手段の機能を拡張すると共に、データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有する拡張手段と、
を備える計算機システムの処理方法であって、
前記ホスト手段内のスレッド間においてデータを受け渡すステップと、
前記ホスト手段上のスレッドと前記拡張手段上のスレッドとの間においてデータを受け渡すステップと、を含む、ことを特徴とする計算機システムの処理方法。
（付記１２）
（付記１１）記載の計算機システムの処理方法であって、
前記ホスト手段上におけるプロセスのメモリ空間上に前記格納手段を構成するステップと、
前記拡張手段上におけるプロセスのメモリ空間上に前記格納手段を構成するステップと、
前記ホスト手段の格納手段と前記拡張手段の格納手段とを接続するステップと、
を含む、ことを特徴とする計算機システムの処理方法。
（付記１３）
（付記１２）記載の計算機システムの処理方法であって、
前記格納手段を前記プロセスのメモリ空間上に生成され、各処理間で受け渡すデータを記録するキューとして構成する、ことを特徴とする計算機システムの処理方法。
（付記１４）
（付記１２）又は（付記１３）記載の計算機システムの処理方法であって、
前記ホスト手段上において、前記ホスト上の格納手段とデータの送受信を行うステップと、
前記拡張手段の格納手段及び前記ホスト手段と、データの送受信を行うステップと、
を含む、ことを特徴とする計算機システムの処理方法。
（付記１５）
（付記１１）乃至（付記１４）のうちいずれか記載の計算機システムの処理方法であって、
パイプライン処理における各処理間を接続するステップを含む、ことを特徴とする計算機システムの処理方法。
（付記１６）
（付記１５）記載の計算機システムの処理方法であって、
データ処理実行時において、前記ホスト手段及び拡張手段のプロセッサコア数に応じて、前記各処理間を接続して前記処理手段及びデータ入力される入力手段を生成し、該生成した処理手段及び入力手段間を接続することでパイプラインを構築するステップを含む、ことを特徴とする計算機システムの処理方法。
（付記１７）
（付記１６）記載の計算機システムの処理方法であって、
前記データ処理実行時において、前記ホスト手段及び拡張手段のプロセッサコア数に応じて、処理を依頼する依頼部と、処理を実行する実行部と、前記格納手段にデータを投入するデータ投入部と、前記格納手段からデータを取り出すデータ取出部と、を相互に接続することで、前記処理手段及び入力手段を生成し、該生成した処理手段及び入力手段間を接続することでパイプラインを構築するステップを含む、ことを特徴とする計算機システムの処理方法。
（付記１８）
データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有するホスト手段と、
前記ホスト手段に接続され該ホスト手段の機能を拡張すると共に、データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有する拡張手段と、
を備える計算機システムのプログラムであって、
前記ホスト手段内のスレッド間においてデータを受け渡す処理と、
前記ホスト手段上のスレッドと前記拡張手段上のスレッドとの間においてデータを受け渡す処理と、をコンピュータに実行させることを特徴とする計算機システムのプログラム。
【００９３】
この出願は、２０１２年２月２８日に出願された日本出願特願２０１２−０４１９００を基礎とする優先権を主張し、その開示の全てをここに取り込む。
【産業上の利用可能性】
【００９４】
本発明は、例えば、複数のカメラから入力される画像データに対して連続的に画像処理を行うような処理を、高性能かつ低コストで実行する計算機システムに適用可能である。
【符号の説明】
【００９５】
２    ホスト
３    アクセラレータ
４    データ転送部
５、６    ＯＳ
７、８    プロセス
９    共通通信部
１０、２０、３０、４０    計算機システム
１１    ホストアクセラレータ間データ転送部
７１    処理依頼部
７２、８２    処理実行部
７３、８３    データ格納部
７４、８４    データ送受信部
１１０    ホスト手段１１０
１１１、１２１    格納手段
１１２、１２２    処理手段
１２０    拡張手段
１３０    共通通信手段
【図１】
2013128531.tif 000003
【図２】
2013128531.tif 000004
【図３】
2013128531.tif 000005
【図４】
2013128531.tif 000006
【図５】
2013128531.tif 000007
【図６】
2013128531.tif 000008
【図７】
2013128531.tif 000009
【図８】
2013128531.tif 000010
【図９】
2013128531.tif 000011
【図１０】
2013128531.tif 000012
【図１１】
2013128531.tif 000013
【図１２】
2013128531.tif 000014
【図１３】
2013128531.tif 000015
【図１４】
2013128531.tif 000016
【図１５】
2013128531.tif 000017
【図１６】
2013128531.tif 000018
【図１７】
2013128531.tif 000019
【図１８Ａ】
2013128531.tif 000020
【図１８Ｂ】
2013128531.tif 000021
【図１９】
2013128531.tif 000022
【手続補正書】
【提出日】平成26年7月25日(2014.7.25)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有するホスト手段と、
前記ホスト手段に接続され該ホスト手段の機能を拡張すると共に、データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有する拡張手段と、
を備える計算機システムであって、
前記ホスト手段内のスレッド間においてデータを受け渡す機能と、前記ホスト手段上のスレッドと前記拡張手段上のスレッドとの間においてデータを受け渡す機能と、を有する共通通信手段を備える、ことを特徴とする計算機システム。
【請求項２】
請求項１記載の計算機システムであって、
前記共通通信手段は、
前記ホスト手段上におけるプロセスのメモリ空間上に構成された前記格納手段と、
前記拡張手段上におけるプロセスのメモリ空間上に構成された前記格納手段と、
前記ホスト手段の格納手段と前記拡張手段の格納手段とを接続するデータ転送手段と、
を有する、ことを特徴とする計算機システム。
【請求項３】
請求項２記載の計算機システムであって、
前記格納手段は、前記プロセスのメモリ空間上に生成され、各処理間で受け渡すデータを記録するキューで構成されている、ことを特徴とする計算機システム。
【請求項４】
請求項２又は３記載の計算機システムであって、
前記データ転送手段は、
前記ホスト手段上の格納手段とデータの送受信を行う前記ホスト手段上のデータ送受信手段と、
前記拡張手段の格納手段及び前記ホスト手段のデータ送受信手段と、データの送受信を行う前記拡張手段上のデータ送受信手段と、
を有している、ことを特徴とする計算機システム。
【請求項５】
請求項１乃至４のうちいずれか１項記載の計算機システムであって、
パイプライン処理における各処理間を前記共通通信手段で接続するパイプライン構築手段を更に備える、ことを特徴とする計算機システム。
【請求項６】
請求項５記載の計算機システムであって、
前記パイプライン構築手段は、データ処理実行時において、前記ホスト手段及び拡張手段のプロセッサコア数に応じて、前記各処理間を接続して前記処理手段及びデータ入力される入力手段を生成し、該生成した処理手段及び入力手段間を前記共通通信手段で接続することでパイプラインを構築する、ことを特徴とする計算機システム。
【請求項７】
請求項６記載の計算機システムであって、
パイプライン構築手段は、前記データ処理実行時において、前記ホスト手段及び拡張手段のプロセッサコア数に応じて、処理を依頼する依頼部と、処理を実行する実行部と、前記格納手段にデータを投入するデータ投入部と、前記格納手段からデータを取り出すデータ取出部と、を相互に接続することで、前記処理手段及び入力手段を生成し、該生成した処理手段及び入力手段間を前記共通通信手段で接続することでパイプラインを構築する、ことを特徴とする計算機システム。
【請求項８】
請求項１乃至７のうちいずれか１項記載の計算機システムであって、
前記拡張手段は、前記ホスト手段のプロセッサとソースコード互換性を有するプロセッサを有するアクセラレータである、ことを特徴とする計算機システム。
【請求項９】
データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有するホスト手段と、
前記ホスト手段に接続され該ホスト手段の機能を拡張すると共に、データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有する拡張手段と、
を備える計算機システムの処理方法であって、
前記ホスト手段内のスレッド間においてデータを受け渡すステップと、
前記ホスト手段上のスレッドと前記拡張手段上のスレッドとの間においてデータを受け渡すステップと、を含む、ことを特徴とする計算機システムの処理方法。
【請求項１０】
データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有するホスト手段と、
前記ホスト手段に接続され該ホスト手段の機能を拡張すると共に、データを格納する格納手段と、該格納されたデータを処理する処理手段と、を有する拡張手段と、
を備える計算機システムのプログラムであって、
前記ホスト手段内のスレッド間においてデータを受け渡す処理と、
前記ホスト手段上のスレッドと前記拡張手段上のスレッドとの間においてデータを受け渡す処理と、をコンピュータに実行させることを特徴とする計算機システムのプログラム。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００７４
【補正方法】変更
【補正の内容】
【００７４】
図１７は、本実施の形態５に係る計算機システムの全体の接続構成の一例を示す図である。図１７において、図が煩雑になるのを避けるため一部の自明な構成要素は省略されている。キューＨ１およびキューＡ１は、処理Ａから処理Ｂへのデータ受渡しに利用されるように接続されている。キューＨ２およびキューＡ２は、処理Ｂから処理Ｃへのデータ受渡しに利用されるように接続される。この様にそれぞれ２つのキューＨ１、Ｈ２、Ａ１、Ａ２を用いることで、データ格納部７３、８３は格納するデータがどこからどこへ流れるデータであるかを区別する機能を有する。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】００７９
【補正方法】変更
【補正の内容】
【００７９】
上述した動作は、処理依頼部７１および処理実行部７２、８２とは完全に独立して行われる。このため、処理依頼部７１や処理実行部７２、８２はプロセス７、８内のスレッド間でデータを受け渡す場合と、ホスト２とアクセラレータ３間でデータを受け渡す場合と、で動作を変える必要がなく、どちらもキューへのデータ投入またはデータ取出しという同一動作となる。さらに、本実施の形態５において、アクセラレータ３のプロセッサ３１は、ホストプロセッサ２１とソースコード互換性を有する。このため、同一ソースコードを用いて、プロセス７、８内およびホスト２とアクセラレータ３間におけるデータ転送を記述することができ、プログラムの簡素化に繋がる。
【手続補正５】
【補正対象書類名】図面
【補正対象項目名】図１
【補正方法】変更
【補正の内容】
【図１】
2013128531.tif 000023
【国際調査報告】
2013128531.tif 000024
2013128531.tif 000025
2013128531.tif 000026
2013128531.tif 000027
2013128531.tif 000028