(57)【要約】  プロセッサシステムであって、アクセラレータは、命令領域に記憶されたタスクに従って動作し、プロセッサによる処理の完了を示すフラグが同期フラグ領域に書き込まれたことを確認すると、プロセッサが他の処理を実行中であっても、フラグに対応するアクセラレーション処理を開始し、アクセラレーション処理の完了後に、アクセラレーション処理の完了を示すフラグを同期フラグ領域に書き込み、プロセッサは、アクセラレーション処理の完了を示すフラグが同期フラグ領域に書き込まれたことを確認すると、アクセラレータが他の処理を実行中であっても、フラグに対応する処理を開始する。
2013065687.tif 000002
【特許請求の範囲】
【請求項１】
演算処理を行うプロセッサと、メモリと、前記プロセッサ及び前記メモリに結合網を介して接続されたアクセラレータとを有するプロセッサコアを半導体チップ上に備えたプロセッサシステムであって、
前記メモリは、前記プロセッサ及び前記アクセラレータが実行するタスクを予め記憶する命令領域と、前記プロセッサと前記アクセラレータとの間で各々の動作を同期させるためのフラグを記憶する同期フラグ領域と、前記プロセッサ及び前記アクセラレータが処理に用いるデータ及び処理後のデータが格納されるデータ領域とを有し、
前記アクセラレータは、
前記命令領域に記憶されたタスクに従って動作し、
前記プロセッサによる所定の処理の完了を示すフラグが前記同期フラグ領域に書き込まれたことを確認すると、前記プロセッサが他の処理を実行中であっても、前記データ領域に書き込まれたデータを読み込んで当該フラグに対応するタスクを実行することによってアクセラレーション処理を開始し、
前記アクセラレーション処理の完了後に、前記アクセラレーション処理後のデータを前記データ領域に格納し、さらに当該アクセラレーション処理の完了を示すフラグを前記同期フラグ領域に書き込み、
前記プロセッサは、
前記アクセラレーション処理の完了を示すフラグが前記同期フラグ領域に書き込まれたことを確認すると、前記アクセラレータが他の処理を実行中であっても、当該フラグに対応するタスクを開始することを特徴とするプロセッサシステム。
【請求項２】
請求項１に記載のプロセッサシステムであって、
前記アクセラレータ及び前記プロセッサの各々は、自身が実行する処理の進行状況に応じて、後続して実行すべきタスクがそれぞれ対応する異なる複数のフラグを、前記同期フラグ領域に書き込み、後続してタスクを実行する前記アクセラレータ及び前記プロセッサの各々が前記同期フラグ領域に書き込まれたフラグを確認し、前記対応するタスクを実行することを特徴とするプロセッサシステム。
【請求項３】
請求項１又は２に記載のプロセッサシステムであって、
前記メモリは、前記アクセラレータ及び前記プロセッサがアクセス可能なローカルメモリ、及び他のプロセッサコアもアクセス可能な分散共有メモリの少なくとも一方を含み、
前記プロセッサコアは、前記メモリ間でデータを転送するデータ転送ユニットをさらに有し、
前記同期フラグ領域は、データ転送ユニットと、プロセッサ及びアクセラレータとの間でも各々の動作を同期させるためのフラグを記憶する領域を含み、
前記命令領域は、データ転送ユニットが実行するタスクをあらかじめ記憶する領域を含み
前記アクセラレータは、
前記データ転送ユニットによる所定のデータ転送処理の完了を示すフラグが前記同期フラグ領域に書き込まれたことを確認すると、前記データ転送ユニットが他のデータ転送処理を実行中であっても、前記データ領域に書き込まれたデータを読み込んで、当該フラグに対応するタスクを実行することによってアクセラレーション処理を開始し、
前記アクセラレーション処理の完了後に、前記アクセラレーション処理後のデータを前記データ領域に格納し、さらに当該アクセラレーション処理の完了を示すフラグを前記同期フラグ領域に書き込み、
前記データ転送ユニットは、
前記アクセラレーション処理の完了を示すフラグが前記同期フラグ領域に書き込まれたことを確認すると、前記アクセラレータが他の処理を実行中であっても、当該フラグに対応するタスクを実行することによってデータ転送処理を開始することを特徴とするプロセッサシステム。
【請求項４】
演算処理を行うプロセッサと、メモリと、前記メモリ間でデータを転送するデータ転送ユニットと、前記プロセッサ、前記メモリ及び前記データ転送ユニットに結合網を介して接続されたアクセラレータとを構成要素として有するプロセッサコアを半導体チップ上に備えたプロセッサシステムであって、
前記メモリは、前記プロセッサ及び前記データ転送ユニット及び前記アクセラレータの各構成要素が実行するタスクを予め記憶する命令領域と、前記各構成要素間で各々の動作を同期させるためのフラグを記憶する同期フラグ領域と、前記各構成要素が処理に用いるデータ及び処理後のデータが格納されるデータ領域とを有し、
前記各構成要素は、前記命令領域に記憶された前記各構成要素に対応したタスクに従って動作し、
前記プロセッサ、前記データ転送ユニット及び前記アクセラレータのいずれか一つの構成要素が所定の処理を完了すると、処理後のデータを前記データ領域に格納し、さらに当該処理の完了を示すフラグを前記同期フラグ領域に書き込み、前記フラグが書き込まれたことを前記一つの構成要素以外の他の構成要素が確認すると、前記一つの構成要素が他の処理を実行中であっても、前記他の構成要素が前記データ領域に格納された前記処理後のデータを読み込んで当該フラグに対応するタスクを開始し、前記当該フラグに対応するタスクの完了後に、前記当該フラグに対応するタスクの実行後のデータを前記データ領域に格納し、さらに前記当該フラグに対応するタスクの完了を示すフラグを前記同期フラグ領域に書き込み、
前記プロセッサ、前記データ転送ユニット及び前記アクセラレータのうちの前記他の構成要素以外の構成要素は、
前記当該フラグに対応するタスクの完了を示すフラグが前記同期フラグ領域に書き込まれたことを確認すると、前記他の構成要素が他の処理を実行中であっても、当該フラグに対応するタスクの実行を開始することを特徴とするプロセッサシステム。
【請求項５】
請求項１から４のいずれか一つに記載に記載のプロセッサシステムであって、
前記各構成要素が実行するタスクは、前記プロセッサシステムで実行されるプログラムの解析によって得られる情報を参照して、前記プログラムから生成されたもので、前記生成されたタスクは前記フラグと対応付けられていることを特徴とするプロセッサシステム。
【請求項６】
請求項１から５のいずれか一つに記載に記載のプロセッサシステムであって、
前記アクセラレータは、アクセラレーション処理を実行する処理部と、前記処理部によって処理されるデータを一時的に格納する内部記憶領域と、前記内部記憶領域と前記メモリとの間でデータ転送を実行するロード・ストアユニットとを有し、
前記ロード・ストアユニットは、前記内部記憶領域と前記メモリとの間におけるデータ転送の実行状況に応じて、前記同期フラグ領域にフラグを書き込む及び前記同期フラグ領域にフラグが書き込まれたことを確認するロード・ストアユニット側フラグ書込・確認器を有することを特徴とするプロセッサシステム。
【請求項７】
請求項１から５のいずれか一つに記載に記載のプロセッサシステムであって、
前記アクセラレータは、アクセラレーション処理を実行する処理部と、前記処理部によって処理されるデータを一時的に格納する内部記憶領域とを有し、
前記処理部は、前記内部記憶領域と前記処理部との間におけるデータ転送の実行状況に応じて、前記同期フラグ領域にフラグを書き込む及び前記同期フラグ領域にフラグが書き込まれたことを確認する処理部側フラグ書込・確認器を有することを特徴とするプロセッサシステム。
【請求項８】
請求項１から５のいずれか一つに記載に記載のプロセッサシステムであって、
前記アクセラレータは、アクセラレーション処理を実行する処理部と、前記処理部によって処理されるデータを一時的に格納する内部記憶領域と、前記内部記憶領域と前記メモリとの間でデータ転送を実行するロード・ストアユニットとを備え、
前記処理部は、当該処理部による処理の実行状況に応じて、前記同期フラグ領域にフラグを書き込む及び前記同期フラグ領域にフラグが書き込まれたことを確認する処理部側フラグ書込・確認器を有し、
前記ロード・ストアユニットは、当該ロード・ストアユニットによる処理の実行状況に応じて、前記同期フラグ領域にフラグを書き込む及び前記同期フラグ領域にフラグが書き込まれたことを確認するロード・ストアユニット側フラグ書込・確認器を有することを特徴とするプロセッサシステム。
【請求項９】
請求項１から５のいずれか一つに記載に記載のプロセッサシステムであって、
前記アクセラレータは、アクセラレーション処理を実行する処理部と、前記処理部によって処理されるデータを一時的に格納する内部記憶領域と、前記内部記憶領域と前記メモリとの間でデータ転送を実行するロード・ストアユニットと、前記処理部と前記ロード・ストアユニットとの動作を同期させるためのフラグを記憶するフラグ授受レジスタとを備え、
前記処理部は、当該処理部による処理の実行状況に応じて、前記同期フラグ領域又は前記フラグ授受レジスタにフラグを書き込む、及び、前記同期フラグ領域又は前記フラグ授受レジスタにフラグが書き込まれたことを確認する処理部側フラグ書込・確認器を有し、
前記ロード・ストアユニットは、当該ロード・ストアユニットによる処理の実行状況に応じて、前記同期フラグ領域又は前記フラグ授受レジスタにフラグを書き込む、及び、前記同期フラグ領域又は前記フラグ授受レジスタにフラグが書き込まれたことを確認するロード・ストアユニット側フラグ書込・確認器を有することを特徴とするプロセッサシステム。
【請求項１０】
請求項１から５のいずれか一つに記載に記載のプロセッサシステムであって、
前記プロセッサシステムは、複数の前記プロセッサコアを備えることを特徴とするプロセッサシステム。
【請求項１１】
請求項１０に記載に記載のプロセッサシステムであって、
前記プロセッサシステムは、複数の前記プロセッサコアによって共有される前記半導体チップ上のオンチップ集中共有メモリ、及び、複数の前記プロセッサコアによって共有される前記半導体チップ外部のオフチップ集中共有メモリのうち少なくとも一方を備えることを特徴とするプロセッサシステム。
【請求項１２】
請求項１から６のいずれか一つに記載に記載のプロセッサシステムであって、
前記アクセラレータは、当該アクセラレータに対する供給電圧や動作周波数を決定し、及び、電源を制御するためのＦＶレジスタを備え、
前記アクセラレータは、前記同期フラグ領域にフラグが書き込まれたことを確認後、前記ＦＶレジスタに設定された値に応じて、当該アクセラレータのクロック周波数の増減、電源電圧の増減及び電源の入切の少なくとも一つを実行することを特徴とするプロセッサシステム。
【請求項１３】
請求項３又は４に記載のプロセッサシステムであって、
前記メモリは、さらに、前記アクセラレータ内に設けられたメモリ及びレジスタの少なくとも一方を含み、
前記データ転送ユニットは、
前記アクセラレーション処理の完了を示すフラグが前記同期フラグ領域に書き込まれたことを確認すると、前記プロセッサ又は前記アクセラレータが他の処理を実行中であっても、前記アクセラレータによるアクセラレーション処理の計算結果のデータを、前記アクセラレータから前記メモリに格納し、
前記アクセラレータによる次回のアクセラレーション処理で用いられるデータを、前記プロセッサ又は前記アクセラレータが他の処理を実行中であっても、前記メモリから前記アクセラレータに前もって読み込むロード処理を実行し、
前記ロード処理の完了を示すフラグを前記同期フラグ領域に書き込むことを特徴とするプロセッサシステム。
【請求項１４】
演算処理を行うプロセッサと、データを記憶するメモリとに結合網を介して接続されるアクセラレータとで構成されるプロセッサシステムに含まれるアクセラレータであって、
前記メモリは、前記プロセッサ及び前記アクセラレータが実行するタスクを予め記憶する命令領域と、前記プロセッサと前記アクセラレータとの間で各々の動作を同期させるためのフラグを記憶する同期フラグ領域と、前記プロセッサ及び前記アクセラレータが処理に用いるデータ及び処理後のデータが格納されるデータ領域とを有し、
前記アクセラレータは、
アクセラレーション処理を実行する処理部と、前記処理部によって処理されるデータを一時的に格納する内部記憶領域とを備え、
前記命令領域に記憶されたタスクに従って動作し、
前記プロセッサによる所定の処理の完了を示すフラグが前記同期フラグ領域に書き込まれたことを確認すると、前記プロセッサが他の処理を実行中であっても、前記処理部によって当該フラグに対応するタスクを実行することによってアクセラレーション処理を開始し、
前記アクセラレーション処理の完了後に、前記アクセラレーション処理の計算結果のデータを前記内部記憶領域に書き込むとともに、当該アクセラレーション処理の完了を示すフラグを前記同期フラグ領域に書き込むことを特徴とするアクセラレータ。
【請求項１５】
請求項１４に記載のアクセラレータであって、
前記プロセッサ及び前記アクセラレータが実行するタスクは、前記プロセッサシステムで実行されるプログラムの解析によって得られる情報を参照して、前記プログラムから生成されたもので、前記生成されたタスクは前記フラグと対応付けられていることを特徴とするアクセラレータ。
【請求項１６】
請求項１４又は１５に記載のアクセラレータであって、
前記アクセラレータは、自身が実行する処理の進行状況に応じて、後続して実行すべきタスクがそれぞれ対応する異なる複数のフラグを、前記同期フラグ領域に書き込むことを特徴とするアクセラレータ。
【請求項１７】
請求項１３から１６のいずれか一つに記載のアクセラレータであって、
前記アクセラレータは、当該アクセラレータに対する供給電圧や動作周波数を決定し、及び、電源を制御するためのＦＶレジスタを備え、
前記アクセラレータは、前記同期フラグ領域にフラグが書き込まれたことを確認後、前記ＦＶレジスタに設定された値に応じて、当該アクセラレータへのクロック周波数の増減、電源電圧の増減及び電源の入切の少なくとも一つを実行することを特徴とするアクセラレータ。
【請求項１８】
請求項１３から１７のいずれか一つに記載のアクセラレータであって、
前記アクセラレータは、前記内部記憶領域と前記メモリとの間でデータ転送を実行するロード・ストアユニットとを備え、
前記ロード・ストアユニットは、前記内部記憶領域と前記メモリとの間におけるデータ転送の実行状況に応じて、前記同期フラグ領域にフラグを書き込む及び前記同期フラグ領域にフラグが書き込まれたことを確認するロード・ストアユニット側フラグ書込・確認器を有することを特徴とするアクセラレータ。
【請求項１９】
請求項１８に記載のアクセラレータであって、
前記処理部は、当該処理部による処理の実行状況に応じて、前記同期フラグ領域にフラグを書き込む及び前記同期フラグ領域にフラグが書き込まれたことを確認する処理部側フラグ書込・確認器を有することを特徴とするアクセラレータ。
【請求項２０】
請求項１９に記載のアクセラレータであって、
前記アクセラレータは、前記処理部と前記ロード・ストアユニットとの動作を同期させるためのフラグを記憶するフラグ授受レジスタを備え、
前記処理部側フラグ書込・確認器は、当該処理部による処理の実行状況に応じて、前記フラグ授受レジスタにフラグを書き込む及び前記フラグ授受レジスタにフラグが書き込まれたことを確認し、
前記ロード・ストアユニット側フラグ書込・確認器は、当該ロード・ストアユニットによる処理の実行状況に応じて、前記フラグ授受レジスタにフラグを書き込む及び前記フラグ授受レジスタにフラグが書き込まれたことを確認することを特徴とするアクセラレータ。
【請求項２１】
請求項１３から１７のいずれか一つに記載のアクセラレータであって、
前記処理部は、前記内部記憶領域と前記処理部との間におけるデータ転送の実行状況に応じて、前記同期フラグ領域にフラグを書き込む及び前記同期フラグ領域にフラグが書き込まれたことを確認する処理部側フラグ書込・確認器を有することを特徴とするアクセラレータ。
【発明の詳細な説明】
【参照による取り込み】
【０００１】
本出願は、平成２３年（２０１１年）１１月４日に出願された日本出願である特願２０１１−２４２８２４の優先権を主張し、その内容を参照することにより、本出願に取り込む。
【技術分野】
【０００２】
本発明は、アクセラレータ及びそれを含むプロセッサシステムに関する。
【背景技術】
【０００３】
プロセッサシステム、特にマルチコアプロセッサシステムを構成要素として含む計算機（コンピュータ）の特定機能の処理能力を向上させると共に消費電力を低く抑えるために、アクセラレータ（以下、「ＡＣＣ」という。）と呼ばれるハードウェアモジュールがプロセッサシステムに組み込まれる。ＡＣＣとは、例えばグラフィック表示を高速化するためのグラフィックアクセラレータ、三次元表示を高速化するための３Ｄアクセラレータ等である。【０００４】
このようなＡＣＣをプロセッサシステムに接続する方式として、従来密結合型の接続方式と、疎結合型の接続方式とがある。【０００５】
密結合型の接続方式とは、ＡＣＣとＣＰＵ（Central Processing Unit、汎用プロセッサ、以下「プロセッサ」という。）とを一体化させる又は一体化に近い態様で接続させる方式である。この密結合型の接続方式では、ＡＣＣとプロセッサとが密接に連係して機能し、ＡＣＣを起動・制御するためのオーバーヘッドが低いという利点がある。これにより、ショートベクタ処理（処理データ量が比較的少ないアクセラレーション処理）等、ＡＣＣにおける実行時間が短い場合でも、ＡＣＣを効率良く使用できるという利点がある。【０００６】
しかし、この密結合型の接続方式では、新たにプロセッサにＡＣＣを接続する場合、接続されるＡＣＣに応じてプロセッサの命令セットを拡張する必要があるという問題がある。この拡張された命令セットには、例えば、非特許文献１に開示されるような、Streaming SIMD Extensions（ＳＳＥ）等がある。【０００７】
また、密結合型の接続方式の範疇に入る技術として、コプロセッサのようにプロセッサに直接ＡＣＣを接続する接続方式に関する技術が、例えば非特許文献２に開示されている。この方式は、命令セットの拡張を必要としないが、処理単位（アクセラレータ命令）ごとのコプロセッサ呼び出しが必要で、そのためにより大きなオーバーヘッドが必要となり、全体として演算速度向上に障害となるという問題がある。【０００８】
一方、疎結合型の接続方式とは、例えば、非特許文献３に開示されるような、ＡＣＣをプロセッサの外部バスに接続させるGraphics Processing Unit（ＧＰＵ）のような方式、また、非特許文献４に開示されるような、ＡＣＣをプロセッサの内部バスに接続させるOpen Multimedia Application Platform（ＯＭＡＰ）のような方式である。この疎結合型の接続方式では、ＡＣＣとプロセッサとが別個に設けられるので、外部バス接続方式か、内部バス接続方式かで差はあるものの、ＡＣＣ用の演算器やメモリを潤沢に確保でき、巨大なデータに対する規則的な演算処理に適しているという利点がある。【０００９】
また、疎結合型の接続方式では、命令セットの拡張も必要としない。【００１０】
しかし、疎結合型の接続方式では、処理単位（アクセラレータ命令）ごとのＡＣＣ呼び出しやデータ転送が必要で、そのためにより大きなオーバーヘッドが必要となり、全体として演算速度が向上できないという問題がある。そのため、規則的でない演算処理には適していない。【００１１】
また、上記のマルチコアプロセッサシステムとは複数のプロセッサコアから構成されたプロセッサシステムであり、各プロセッサコアはプロセッサ及び必要な場合には上記のＡＣＣを備える。【００１２】
マルチコアプロセッサシステムでは、複数のプロセッサコアで処理を並列化することによって消費電力の低減とともに演算処理能力を向上させている。そのために、一つのプロセッサからなるプロセッサシステム上でのみ動作可能な逐次処理プログラムを、複数のプロセッサコアより成るいわゆるマルチコアプロセッサ上で並列動作できる並列処理プログラムに変換する並列化コンパイラが、逐次処理の入力プログラムを解析し、当該入力プログラム中から並列に動作可能な部分を抽出し、当該部分の演算処理を複数のプロセッサに割り当てることによって、上述のように一つのプロセッサから成るプロセッサシステムに比べて処理能力を向上させている。【００１３】
このようなマルチコアプロセッサシステム、特に汎用プロセッサと特定用途プロセッサ（本願におけるＡＣＣなど）を含むプロセッサコアを複数持つマルチコアプロセッサシステムのアーキテクチャおよびマルチコアプロセッサ上で並列動作できる並列処理プログラムを生成する並列化コンパイラに関連する技術として、特許文献１〜４に開示された技術等が知られている。【００１４】
特許文献１には、多様な種類のプロセッサコアを搭載するマルチコアプロセッサシステムにおいて、処理対象となる逐次処理の入力プログラムから自動的に並列性を持つタスクを抽出し、各プロセッサコアの特性に合わせて当該タスクを配置することで当該プロセッサコアを効率よく動かし、さらに当該プロセッサコアの処理量を見積もることで動作周波数や電源電圧を最適化するコードを生成し、目的プログラムに付加するコンパイラ及びその最適化を可能とするマルチプロセッサシステムに関する技術が開示されている。【００１５】
特許文献２には、命令セット及び構成の異なるプロセッサエレメント（プロセッサ等）を複数備えたヘテロジニアス・マルチプロセッサシステムにおいて、特定のプロセッサエレメントのリソースが不足するのを防いで、マルチプロセッサシステム全体の処理能力を向上させる技術が開示されている。【００１６】
特許文献３には、多様なプロセッサコアを集積するマルチプロセッサシステムにおいて、当該プロセッサコアを効率よく動作させるプログラムの分割配置および制御コードを生成する複数コンパイラ連携プログラム並列化手法により、当該プロセッサシステムの性能を最大限生かしつつ、低電力にて効率よく処理することを可能とする技術が開示されている。【００１７】
特許文献４には、複数のプロセッサコアにそれぞれデータ転送機構を備えたマルチコアプロセッサにおいて、プロセッサコア間でのデータ転送のオーバーヘッドを低減し、同時にコンパイラによるデータ転送最適化を行いやすくすることにより、プロセッサ全体の処理能力を向上させる技術が開示されている。
【先行技術文献】
【特許文献】
【００１８】
【特許文献１】特開２００６−２９３７６８号公報
【特許文献２】特開２００７−３２８４１５号公報
【特許文献３】特開２００７−３２８４１６号公報
【特許文献４】特許４４７６２６７号公報
【非特許文献】
【００１９】
【非特許文献１】S.Thakkar,T.Huff,"The Internet Streaming SIMD Extensions", Intel Technology Journal Q2,1999.
【非特許文献２】M.Awaga, H.Takahashi,"The uVP 64-Bit Vector Coprocessor: A New Implementation of High Performance Numerical Computation", IEEE Micro, Vol.13, No.5, October 1993.
【非特許文献３】"NVIDIA CUDA C Programming Guide Version 3.2",2010.
【非特許文献４】"OMAP-L137 Application Processor System Reference Guide", Texas Instruments, March,2010.
【発明の概要】
【発明が解決しようとする課題】
【００２０】
しかしながら、前述のヘテロジニアス・マルチコアプロセッサは、汎用プロセッサコアを有する一又は複数のプロセッサコアとＡＣＣなど特定用途プロセッサを含む一又は複数のプロセッサコアにより構成される。しかし、このヘテロジニアス・マルチコアプロセッサよりもさらに消費電力および演算処理能力を向上させるためには、プロセッサコアの中に汎用プロセッサとＡＣＣなどの特定用途プロセッサとを併存させ、そのように構成されたプロセッサコアを複数有するマルチコアプロセッサを構成することが必要である。【００２１】
このようなマルチコアプロセッサシステムに搭載される各プロセッサコア内部又は外部に上記ＡＣＣを備える場合においても、前述の密結合型及び疎結合型のいずれかの方式を採用することとなる。【００２２】
しかし、前述の従来の密結合型あるいは疎結合型の接続方式では、前述したように命令セットの拡張が必要となることやデータ転送などに伴う処理オーバーヘッドの増加などいくつかの問題があった。【００２３】
例えば、上記の密結合の接続方式では、ＡＣＣを新たに接続する場合、接続されるＡＣＣに応じて、プロセッサの命令セットを拡張する必要があった（例えば、Streaming SIMD Extensions等）。また、特にプロセッサがＲＩＳＣ（Reduced Instruction Set Computer）型プロセッサである場合、限られた命令長による命令エンコーディングが困難であった。特に、新たに命令セットを拡張する場合には、命令セットの拡張とそのためのハードウェア（例えば、命令解読部やプロセッサ制御部など）の大幅な拡張が必要であった。【００２４】
また密結合の接続方式では、プロセッサとＡＣＣとが一体化されるので、一度に多くのデータを要求するＡＣＣに対して十分な量のデータを供給するためのレジスタをＡＣＣ用に確保できないという問題があった。そのため、ＡＣＣに絶えずデータを投入することができず演算器の使用効率が低かった。【００２５】
なお、コプロセッサのようにプロセッサに直接接続する接続方式では、プロセッサの命令セットを拡張する必要はない。しかしながら、命令の処理単位毎にコプロセッサを呼び出すため、制御オーバーヘッドが大きかった。【００２６】
一方、上記の疎結合の接続方式では、密結合の接続方式に比べて、ＡＣＣとプロセッサとの間の物理的距離が遠いので、ＡＣＣの制御のオーバーヘッドやＡＣＣへのデータ転送のオーバーヘッドが著しく大きかった。【００２７】
本発明は、上述した課題を考慮したものであって、ＡＣＣを新たにプロセッサに接続する際にプロセッサに対して命令セットを拡張することなく、かつＡＣＣに十分なデータ供給能力を確保し、さらにＡＣＣの制御オーバーヘッドを低減可能にするＡＣＣ及びＡＣＣを含むプロセッサコアを内外に有するマルチコアプロセッサシステムを提供することを目的とする。
【課題を解決するための手段】
【００２８】
上記課題を解決するために、例えば特許請求の範囲に記載の構成を採用する。【００２９】
本願は上記課題を解決する手段を複数含んでいるが、その一例を挙げるならば、演算処理を行うプロセッサと、メモリと、前記プロセッサ及び前記メモリに結合網を介して接続されたアクセラレータ（ＡＣＣ）とを有するプロセッサコアを半導体チップ上に備えたプロセッサシステムであって、前記メモリは、前記プロセッサ及び前記アクセラレータが実行するタスクを予め記憶する命令領域と、前記プロセッサと前記アクセラレータとの間で各々の動作を同期させるためのフラグを記憶する同期フラグ領域と、前記プロセッサ及び前記アクセラレータが処理に用いるデータ及び処理後のデータが格納されるデータ領域とを有し、前記アクセラレータは、前記命令領域に記憶されたタスクに従って動作し、前記プロセッサによる所定の処理の完了を示すフラグが前記同期フラグ領域に書き込まれたことを確認すると、前記プロセッサが他の処理を実行中であっても、前記データ領域に書き込まれたデータを読み込んで当該フラグに対応するタスクを実行することによってアクセラレーション処理を開始し、前記アクセラレーション処理の完了後に、前記アクセラレーション処理後のデータを前記データ領域に格納し、さらに当該アクセラレーション処理の完了を示すフラグを前記同期フラグ領域に書き込み、前記プロセッサは、前記アクセラレーション処理の完了を示すフラグが前記同期フラグ領域に書き込まれたことを確認すると、前記アクセラレータが他の処理を実行中であっても、当該フラグに対応するタスクを開始することを特徴とする。
【発明の効果】
【００３０】
本発明の一実施形態によれば、プロセッサ及びＡＣＣが互いの同期制御に時間を費やすことなく、それぞれ自律的に動作することができるので、ＡＣＣを新たに接続する際にプロセッサに対して命令セットを拡張することなく、かつＡＣＣに十分なデータ供給能力を確保し、さらにＡＣＣの制御オーバーヘッドを低減可能にすることができる。
【図面の簡単な説明】
【００３１】
【図１】本発明の実施形態のマルチコアプロセッサシステムの構成例を示す図である。
【図２】本発明の実施形態のＡＣＣの第１の構成例及びＡＣＣを含むプロセッサコアの構成例を示す図である。
【図３】本発明の実施形態のＡＣＣの第２の構成例及びＡＣＣを含むプロセッサコアの構成例を示す図である。
【図４】本発明の実施形態のＡＣＣの第３の構成例及びＡＣＣを含むプロセッサコアの構成例を示す図である。
【図５】本発明の実施形態のＡＣＣの第４の構成例及びＡＣＣを含むプロセッサコアの構成例を示す図である。
【図６】本発明の実施形態のフラグ書込・確認器の構成例を示す図である。
【図７】本発明の実施形態のフラグ書込・確認器によるフラグセット・チェックの動作の概要を示す図である。
【図８】本発明の実施形態のマルチコアプロセッサシステムにおいて実行されるプログラムの参考例を示す図である。
【図９】参考例に係るプログラムを実行時の処理の流れを示す図である。
【図１０】本発明の実施形態のマルチコアプロセッサシステムにおいて実行されるプログラムの第１の例を示す図である。
【図１１】第１の例に係るプログラムの実行時の処理の流れを示す図である。
【図１２】第１の例に係るプログラムの実行時の処理の流れの変形例を示す図である。
【図１３】本発明の実施形態のマルチコアプロセッサシステムにおいて実行されるプログラムの第２の例を示す図である。
【図１４】第２の例に係るプログラムの実行時の処理の流れを示す図である。
【図１５】本発明の実施形態のマルチコアプロセッサシステムにおいて実行されるプログラムの第３の例を示す図である。
【図１６】第３の例に係るプログラムの実行時の処理の流れを示す図である。
【図１７】本発明の実施形態のマルチコアプロセッサシステムにおいて実行されるプログラムの第４の例の実行時の処理の流れを示す図である。
【図１８】本発明の実施形態のマルチコアプロセッサシステムにおいて実行されるプログラムの第５の例の実行時の処理の流れを示す図である。
【図１９】本発明の実施形態の並列化コンパイラが実行する処理のフローチャートである。
【発明を実施するための形態】
【００３２】
以下、本発明の実施の形態について図面を参照して説明する。
【００３３】
図１は、本発明の実施形態のマルチコアプロセッサシステム（プロセッサシステム）１の構成例を示す図である。
【００３４】
図１に示すマルチコアプロセッサシステム１は、１枚の半導体チップ２上に設けられ汎用プロセッサ、ＤＴＵ、メモリ以外にＡＣＣを含む複数のプロセッサコア１０−１〜１０−ｎ、ＡＣＣ２０、データ転送ユニット（Data Transfer Unit：ＤＴＵ）３０、及びオンチップ集中共有メモリ４０と、半導体チップ２外部のオフチップ集中共有メモリ５０とを備える。各プロセッサコア１０−１〜１０−ｎは、共有バス等のプロセッサコア間結合網（バス）によって接続される。なお、オンチップ集中共有メモリ４０と、オフチップ集中共有メモリ５０とのいずれか一方又は両方を備えてもよい。
【００３５】
本実施形態では、各プロセッサコア１０−１〜１０−ｎの構成が同一のホモジニアス・マルチコアプロセッサシステム１の構成例を示す。このため、プロセッサコア１０−１の構成についてのみ説明し、他のプロセッサコア１０−２〜１０−ｎについての説明を省略する。なお、本発明は、ホモジニアス・マルチコアプロセッサシステムだけでなく、ヘテロジニアス・マルチコアプロセッサシステムにも適用可能である。
【００３６】
プロセッサコア１０−１は、プロセッサ１１、アクセラレータ（ＡＣＣ）１２、ＤＴＵ１３、分散共有メモリ（Distributed Shared Memory：ＤＳＭ）１４、ローカルメモリ（Local Memory：ＬＭ）１５、バスインターフェース１６、ＦＶレジスタ（Frequency/Voltage control Register：ＦＶＲ）１７を備える。
【００３７】
プロセッサ１１は、各種演算処理を実行する中央処理装置である。
【００３８】
ＡＣＣ１２は、特定機能を高速且つ低消費電力で処理できるＡＣＣである。本実施形態のＡＣＣ１２は、プロセッサ１１からの指示がなくても、自律的に動作する。このＡＣＣ１２の詳細については後述する。
【００３９】
ＤＴＵ１３は、後述する同期フラグチェックによる命令列の実行、同期フラグの書き込み等の機能を持つ一種のDirect Memory Access Controller（ＤＭＡＣ）であり、ＡＣＣ１２、ＤＳＭ１４、ＬＭ１５又は他のプロセッサコア１０−２〜１０−ｎのＤＳＭ１４との間でデータの転送を実行するデータ転送装置である。本実施形態のＤＴＵ１３は、プロセッサ１１からの単一の指示によって動作を開始し、その後は自律的に動作する。このＤＴＵ１３の詳細についても後述する。ローカルメモリ１５は、一つのプロセッサのみで使用されるデータを格納し、分散共有メモリ１４は、複数のプロセッサで共有されるデータを格納する。
【００４０】
ＤＳＭ１４は、全てのプロセッサコア１０−１〜１０−ｎからアクセス可能な分散共有メモリである。プロセッサコア１０−１〜１０−ｎの持つ各々のＤＳＭ１４は、全プロセッサコア１０−１〜１０−ｎが共有する一つのメモリマップに配置され、このメモリマップを通して、全プロセッサ１０−１〜１０−ｎは各プロセッサコア１０−１〜１０−ｎの持つＤＳＭ１４にアクセスする。このＤＳＭ１４は、自又は他のプロセッサ１１或いはＤＴＵ１３により計算結果を受け渡すために使用される。このＤＳＭ１４は、命令領域１４−１、同期フラグ領域１４−２、データ領域１４−３を備える。
【００４１】
また、例えばプロセッサコア１０−１内のＬＭ１５は、プロセッサコア１０−１のプロセッサ１１、ＡＣＣ１２、ＤＴＵ１３によってのみアクセス可能で、他のプロセッサコア１０−２〜１０−ｎからアクセス不可能なローカルメモリである。このＬＭ１５は、命令領域１５−１、同期フラグ領域１５−２、データ領域１５−３を備える。
【００４２】
バスインターフェース１６は、他のプロセッサコア１０−２〜１０−ｎ、ＡＣＣ２０、ＤＴＵ３０、オンチップ集中共有メモリ４０、オフチップ集中共有メモリ５０との間でデータを通信するためのインターフェースである。
【００４３】
ＦＶＲ１７は、プロセッサ１１に対する供給電圧や動作周波数を決定する周波数及び／又は電源電圧制御を実行するためのレジスタである。
【００４４】
ＡＣＣ２０は、各プロセッサコア１０−１〜１０−ｎのプロセッサ１１の外部バスに接続され、プロセッサ１１の処理を代行するＧＰＵ等のアクセラレータである。
【００４５】
ＤＴＵ３０は、各プロセッサコア１０−１〜１０−ｎのプロセッサ１１の外部バスに接続され、各プロセッサコア１０−１〜１０−ｎのＬＭ１５とＤＳＭ１４、他プロセッサコア上のＤＳＭ１４、オンチップ集中共有メモリ４０、オフチップ集中共有メモリ５０との間でのデータの転送及び各プロセッサコア１０−１〜１０−ｎのＤＳＭ１４、ＡＣＣ２０、オンチップ集中共有メモリ４０、オフチップ集中共有メモリ５０との間でのデータの転送を実行するオプショナルなデータ転送装置である。
【００４６】
オンチップ集中共有メモリ４０は、各プロセッサコア１０−１〜１０−ｎに接続され、全てのプロセッサコア１０−１〜１０−ｎによって共有される半導体チップ２上のメモリである。このオンチップ集中共有メモリ４０は、命令領域４０−１、同期フラグ領域４０−２、データ領域４０−３を有する。オンチップ集中共有メモリ４０は、ＤＳＭに格納できない共有データや、ダイナミックスケジューリングに必要なタスクキューなどの情報を格納する。
【００４７】
オフチップ集中共有メモリ５０は、各プロセッサコア１０−１〜１０−ｎに接続され、全てのプロセッサコア１０−１〜１０−ｎによって共有される半導体チップ２外部のオプショナルなメモリである。このオフチップ集中共有メモリ５０は、命令領域、同期フラグ領域、データ領域（いずれも不図示）を必要に応じて有してもよい。また、オフチップ集中共有メモリ５０は、オンチップ集中共有メモリ４０、ＤＳＭ１４とともに他のマルチコアプロセッサシステム（マルチプロセッサチップ）が共存している場合には、他のマルチコアプロセッサからもアクセスできるように構成することが可能である。オフチップ集中共有メモリ５０は、オンチップ集中共有メモリ４０に収まりきらないデータを格納する。
【００４８】
以上に示す構成において、命令領域１４−１、１５−１、４０−１には、後述する並列化コンパイラによって生成されるプロセッサ１１、ＡＣＣ１２、ＤＴＵ１３用の命令（プログラム）が格納される。ＡＣＣ１２用の命令とは、例えばＡＣＣ１２に対する加算、乗算のような各種演算命令、フラグセット命令、フラグチェック命令及びフラグチェックに基づく命令列実行開始命令である。またＤＴＵ１３用の命令とは、例えばＤＴＵ１３に対するデータ転送の命令、フラグセット命令、フラグチェック命令及びフラグチェックに基づく命令列実行開始命令である。
【００４９】
なお、プロセッサコア１０−１で実行される命令は、原則的に、プロセッサコア１０−１の命令領域１４−１、１５−１に配置される。但し、命令のサイズが大きい場合は、オンチップ集中共有メモリ４０の命令領域４０−１に配置される。この場合、プロセッサコア１０−１は、命令領域４０−１に配置された命令を読み込む（ロードする）。一方、ＡＣＣ２０、ＤＴＵ３０用の命令は、オンチップ集中共有メモリ４０の命令領域４０−１あるいはオフチップ集中共有メモリ５０の命令領域（不図示）に配置される。
【００５０】
同様に、同期フラグ領域１４−２、１５−２、４０−２には、並列化コンパイラによって生成されるプロセッサ１１、ＡＣＣ１２、ＤＴＵ１３用の同期フラグが格納される。同期フラグとは、プロセッサ１１、ＡＣＣ１２、ＤＴＵ１３がお互いに同期を取りながら連係して動作するために用いられるフラグ（データ）である。同期フラグ領域１４−２、１５−２、４０−２には、プロセッサコア１０−１で実行される処理の纏まり（例えばタスク）毎の同期フラグが配置される。処理の纏まりがループ処理である場合には、ループ処理の回転回数に応じて、バージョン番号を付した同期フラグを配置してもよい。詳細は後述する。一方、ＡＣＣ２０、ＤＴＵ３０用の同期フラグは、オンチップ集中共有メモリ４０の同期フラグ領域４０−２又はオフチップ集中共有メモリ５０の同期フラグ領域（不図示）に配置される。
【００５１】
データ領域１４−３、１５−３、４０−３には、プロセッサ１１、ＡＣＣ１２、ＤＴＵ１３が処理に用いるデータ及び処理後のデータが格納される。一方、ＡＣＣ２０、ＤＴＵ３０が処理に用いるデータ及び処理後のデータは、オンチップ集中共有メモリ４０のデータ領域４０−３あるいはオフチップ集中共有メモリ５０の同期フラグ領域（不図示）に格納される。
【００５２】
以上のように、プロセッサコア１０−１上のプロセッサ１１、ＡＣＣ１２、ＤＴＵ１３は、自プロセッサコア１０−１上のＤＳＭ１４、及びＬＭ１５を共有している。
【００５３】
また、各プロセッサコア１０−１〜１０−ｎ上のプロセッサ１１、ＡＣＣ１２、ＤＴＵ１３は、各プロセッサコア１０−１〜１０−ｎ上のＤＳＭ１４、オンチップ集中共有メモリ４０を共有している。
【００５４】
なお、マルチコアプロセッサシステム１は、自システムの用途に応じて、ＤＳＭ１４、ＬＭ１５、オンチップ集中共有メモリ４０、オフチップ集中共有メモリ５０のうちの必要なメモリのみ有してもよい。
【００５５】
また、マルチコアプロセッサシステム１は、１個のプロセッサコアのみからなる場合もあり、その場合には、ＡＣＣ２０、ＤＴＵ３０などは不要である。さらに、マルチコアプロセッサシステム１における複数のプロセッサコア１０−１〜１０−ｎの中にはＡＣＣ１２を有しない汎用プロセッサコアを含むこともある。
【００５６】
図２は、本発明の実施形態のＡＣＣ１２の第１の構成例及びＡＣＣ１２を含むプロセッサコアの構成例を示す図である。なお、以下では図１と同様の構成要素には同一の符号を付して重複する説明を適宜省略する。図２において、黒矢印は、同期フラグの通信を示す。白矢印は、同期フラグを除く命令およびデータの伝送のための通信を示す。各矢印の太さは、通信速度の度合いを示す。
【００５７】
図２において、ＡＣＣ１２は、ＡＣＣ本体１２１、ＡＣＣレジスタ／ローカルメモリ１２２（以下、単に「ＡＣＣレジスタ１２２」という。）、ロード・ストアユニット１２３、制御レジスタファイル１２４、ＦＶＲ１２５を備え、プロセッサコア内結合網（バスやスイッチングネットワーク等）１８を介して、プロセッサ１１、ＬＭ１５、ＤＳＭ１４、ＤＴＵ１３、ＦＶＲ１７と接続される。
【００５８】
ＡＣＣ本体１２１は、ＬＭ１５又はＤＳＭ１４に格納されたＡＣＣ命令列を使用して、特定の処理のみを実行するＡＣＣ本体である。なお、ＡＣＣ命令列とは、予め並列化コンパイラによって生成されたＡＣＣ１２用のプログラム（複数の命令列を順次実行するプログラム）である。
【００５９】
ＡＣＣレジスタ１２２は、ＡＣＣ本体１２１に対してデータを供給するためのレジスタ等の記憶部である。特に、ＡＣＣがＡＣＣ２０（ＧＰＵ等、図１参照）である場合には、ＡＣＣレジスタはＡＣＣ２０が独自に有するローカルメモリを指す。このＡＣＣレジスタ１２２は、ＡＣＣ本体１２１及びロード・ストアユニット１２３によってのみアクセス可能であって、プロセッサコア内結合網１８を介して接続されるプロセッサ１１等からはアクセス不可能である。なお、ＡＣＣレジスタ１２２は、ＡＣＣ１２外部の構成（例えば、ＤＴＵ１３）によって直接アクセス可能でもよい。
【００６０】
このＡＣＣレジスタ１２２は、ＡＣＣ本体１２１に高速にデータを供給するベクトルレジスタ等の高速レジスタであることが好ましい。
【００６１】
ロード・ストアユニット１２３は、ＡＣＣレジスタ１２２と、ＤＳＭ１４、ＬＭ１５との間でデータの転送を実行するデータ転送装置である。このロード・ストアユニット１２３は、ベクトルロードと呼ばれる命令によって、ＬＭ１５又はＤＳＭ１４内の連続したデータを、ＡＣＣレジスタ１２２に読み込む。また、ベクトルストアと呼ばれる命令によって、ＡＣＣレジスタ１２２内の連続したデータを、ＬＭ１５又はＤＳＭ１４に格納する（ストアする）。このロード・ストアユニット１２３は、フラグ書込・確認器１２３Ａを備える。フラグ書込・確認器１２３Ａは、ＬＭ１５又はＤＳＭ１４等のメモリ上の所定（任意）の領域（アドレス空間）のアドレス（以下、「所定のアドレス」という。）に同期フラグを書き込む（セットする）又はメモリ上の所定のアドレスに書き込まれた同期フラグを確認する（チェックする）機能部である。
【００６２】
制御レジスタファイル１２４は、複数の制御レジスタから構成されるレジスタ群である。この制御レジスタファイル１２４は、ＡＣＣ本体１２１を制御するための制御レジスタ、ロード・ストアユニット１２３を制御するための制御レジスタを含む。
【００６３】
ＦＶＲ１２５は、ＡＣＣ本体１２１に対する供給電圧やクロック周波数を決定し、また電源遮断機能を有する周波数・電源電圧（ＦＶ）制御を行うためのオプショナルなレジスタである。ＡＣＣ１２は、フラグチェックの開始後、ＦＶＲ１２５に設定された値に応じて、ＡＣＣ１２への供給電圧やクロック周波数を低減又は遮断する。これにより電力制御が可能になる。
【００６４】
以上に示す構成のＡＣＣ１２は、プロセッサ１１、ＤＴＵ１３と連係して動作する。この連係動作について簡単に説明する。
【００６５】
（ＡＣＣ１２とプロセッサ１１との連係動作）
まず、ＡＣＣ１２とプロセッサ１１との連係動作の一例として、ロード・ストアユニット１２３がＬＭ１５又はＤＳＭ１４にデータを格納すると、プロセッサ１１が格納されたデータを用いた処理を開始する動作を説明する。
【００６６】
ロード・ストアユニット１２３は、ＡＣＣ本体１２１によってＡＣＣレジスタ１２２に格納されたアクセラレーション処理後のデータを、ＬＭ１５のデータ領域１５−３又はＤＳＭ１４のデータ領域１４−３に格納する。そうすると、フラグ書込・確認器１２３Ａは、当該ストア処理に対応する同期フラグ（データ）を、ＬＭ１５又はＤＳＭ１４の所定のアドレス、すなわち１５−２又は１４−２に書き込む。同期フラグがＬＭ１５又はＤＳＭ１４の所定のアドレスに書き込まれるまでの間、プロセッサ１１は、繰り返しＬＭ１５又はＤＳＭ１４の同期フラグに割り当てられた所定のアドレス（１５−２又は１４−２）をチェックする。プロセッサ１１は、書き込まれた同期フラグを確認（検出）すると、１５−３又は１４−３に格納されたデータを用いて、自身の処理を開始する。このようにして、ＡＣＣ１２とプロセッサ１１とは連係動作する。
【００６７】
次に、ＡＣＣ１２とプロセッサ１１との連係動作の別の例として、プロセッサ１１がＬＭ１５又はＤＳＭ１４にデータを格納すると、ロード・ストアユニット１２３が格納されたデータのＡＣＣレジスタ１２２への読み込みを開始する動作を説明する。
【００６８】
プロセッサ１１は処理後のデータを、ＬＭ１５のデータ領域１５−３又はＤＳＭ１４のデータ領域１４−３に格納する。そうすると、プロセッサ１１は、当該格納処理に対応する同期フラグ（データ）を、ＬＭ１５又はＤＳＭ１４の所定のアドレス、すなわち１５−２又は１４−２に書き込む。同期フラグがＬＭ１５又はＤＳＭ１４の所定のアドレスに書き込まれるまでの間、フラグ書込・確認器１２３Ａは、繰り返しＬＭ１５又はＤＳＭ１４の同期フラグに割り当てられた所定のアドレス（１５−２又は１４−２）をチェックする。フラグ書込・確認器１２３Ａは、書き込まれた同期フラグを確認（検出）すると、１５−３又は１４−３に格納されたデータをＡＣＣレジスタ１２２に格納する。なお、ＡＣＣ本体１２１は、ＡＣＣレジスタ１２２に格納されたデータを用いて自身の処理を開始する。このようにして、ＡＣＣ１２とプロセッサ１１とは連係動作する。
【００６９】
（ＡＣＣ１２とＤＴＵ１３との連係動作）
まず、ＡＣＣ１２とＤＴＵ１３との連係動作の一例として、ＤＴＵ１３がＬＭ１５又はＤＳＭ１４へのデータ転送処理を終了すると、ロード・ストアユニット１２３が転送されたデータのＡＣＣレジスタ１２２への読み込みを開始する動作を説明する。
【００７０】
ＤＴＵ１３は（例えばオンチップ集中共有メモリ４０から）ＬＭ１５のデータ領域１５−３へのデータ転送を終了すると、当該データ転送処理に対応する同期フラグを、ＬＭ１５又はＤＳＭ１４の所定のアドレス或いは命令で指定されるアドレス、すなわち１５−２又は１４−２に書き込む。同期フラグがＬＭ１５又はＤＳＭ１４の所定のアドレスに書き込まれるまでの間、フラグ書込・確認器１２３Ａは、繰り返しＬＭ１５又はＤＳＭ１４の同期フラグに割り当てられた所定のアドレス（１５−２又は１４−２）をチェックする。フラグ書込・確認器１２３Ａが書き込まれた同期フラグを確認すると、ロード・ストアユニット１２３は、ＬＭ１５のデータ領域１５−３に転送されたデータのＡＣＣレジスタ１２２への読み込みを開始する。その後、ＡＣＣ本体１２１は、アクセレーション処理を実行する。具体的には、ＡＣＣ１２用のプログラムに含まれるフラグチェック命令、データロード命令、アクセラレーション処理命令が順に実行される。このようにして、ＡＣＣ１２とＤＴＵ１３とは連係動作する。
【００７１】
次に、ＡＣＣ１２とＤＴＵ１３との連係動作の別の例として、ロード・ストアユニット１２３がＬＭ１５又はＤＳＭ１４にデータを格納すると、ＤＴＵ１３が格納されたデータを用いた処理を開始する動作を説明する。
【００７２】
ロード・ストアユニット１２３は、ＡＣＣ本体１２１によってＡＣＣレジスタ１２２に格納されたアクセラレーション処理後のデータを、ＬＭ１５のデータ領域１５−３又はＤＳＭ１４のデータ領域１４−３に格納する。そうすると、フラグ書込・確認器１２３Ａは、当該ストア処理に対応する同期フラグ（データ）を、ＬＭ１５又はＤＳＭ１４の所定のアドレス、すなわち１５−２又は１４−２に書き込む。同期フラグがＬＭ１５又はＤＳＭ１４の所定のアドレスに書き込まれるまでの間、ＤＴＵ１３は、繰り返しＬＭ１５又はＤＳＭ１４の同期フラグに割り当てられた所定のアドレス（１５−２又は１４−２）をチェックする。ＤＴＵ１３は、書き込まれた同期フラグを確認（検出）すると、１５−３又は１４−３に格納されたデータを用いて、データ転送処理を開始する。このようにして、ＡＣＣ１２とＤＴＵ１３とは連係動作する。
【００７３】
また、プロセッサ１１とＤＴＵ１３との連係動作について説明する。ＤＴＵ１３は、プロセッサコアにおいて処理に必要なデータを他のプロセッサコアの分散共有メモリ１４、他のプロセッサコアのオンチップ集中共有メモリ４０又はオフチップ集中共有メモリ５０から自プロセッサコアのローカルメモリ１５あるいは分散共有メモリ１４に読み込んだり、また自プロセッサコアのローカルメモリ１５あるいは分散共有メモリ１４に格納されているデータを他のメモリに転送したりするが、その動作はプロセッサ１１が最初のデータ転送指示をＤＴＵ１３にすることにより、ＤＴＵ１３の自律的動作に必要なプログラムをローカルメモリ１５などから読み込み実行する。このデータ転送におけるプロセッサ１１とＤＴＵ１３との連携動作については、特許文献４に詳述されている。
【００７４】
以上に示すように、第１の構成例のＡＣＣ１２と、プロセッサ１１と、ＤＴＵ１３とは、ＬＭ１５又はＤＳＭ１４に対するフラグセット・チェックによって、同期を取って連係動作する。
【００７５】
図３は、本発明の実施形態のＡＣＣ１２の第２の構成例及びＡＣＣ１２を含むプロセッサコアの構成例を示す図である。なお、以下では図１及び図２と同様の構成要素には同一の符号を付して重複する説明を適宜省略する。
【００７６】
図３に示すＡＣＣ１２は、ロード・ストアユニットを持たず、従ってフラグ書込・確認器１２１Ａ（図２における１２３Ａに相当）をＡＣＣ本体１２１に備えている点において、図２に示すＡＣＣ１２と異なる。なお、フラグ書込・確認器１２１Ａは、フラグ書込・確認器１２３Ａと同様に、ＬＭ１５又はＤＳＭ１４等のメモリ上の所定のアドレスに同期フラグを書き込む又はメモリ上の所定のアドレスに書き込まれた同期フラグを確認する機能を有する。また、プロセッサ１１やＤＴＵ１３がＡＣＣレジスタ１２２にデータを読み書きすることによって、図２のロード・ストアユニット１２３の機能を代替する。
【００７７】
以上に示す構成のＡＣＣ１２は、プロセッサ１１、ＤＴＵ１３と連係して動作する。この連係動作について簡単に説明する。
【００７８】
（ＡＣＣ１２とプロセッサ１１との連係動作）
まず、ＡＣＣ１２とプロセッサ１１との連係動作の一例として、プロセッサ１１が所定の処理を終了すると、ＡＣＣ１２が処理を開始する動作を説明する。
【００７９】
プロセッサ１１が所定の処理を終了すると、処理結果のデータをＡＣＣレジスタ１２２に格納する。その後、プロセッサ１１は、当該所定の処理に対応する同期フラグを、ＬＭ１５又はＤＳＭ１４の所定のアドレス、すなわち１５−２又は１４−２に書き込む。同期フラグがＬＭ１５又はＤＳＭ１４の所定のアドレスに書き込まれるまでの間、フラグ書込・確認器１２１Ａは、繰り返しＬＭ１５又はＤＳＭ１４の同期フラグに割り当てられた所定のアドレス（１５−２又は１４−２）をチェックする。フラグ書込・確認器１２１Ａが書き込まれた同期フラグを確認すると、ＡＣＣ本体１２１は、ＡＣＣレジスタ１２２に格納されたプロセッサ１１の処理結果のデータを用いて、自身の処理を開始する。具体的には、ＡＣＣ１２用のプログラムに含まれるフラグチェック命令、データロード命令、アクセラレーション処理命令が順に実行される。このようにして、ＡＣＣ１２とプロセッサ１１とは連係動作する。
【００８０】
次に、ＡＣＣ１２とプロセッサ１１との連係動作の別の例として、ＡＣＣ１２が所定の処理を終了すると、プロセッサ１１が処理を開始する動作を説明する。
【００８１】
ＡＣＣ本体１２１が処理を終了すると、処理結果のデータをＡＣＣレジスタ１２２に書き込む。その後、フラグ書込・確認器１２１Ａは当該所定の処理に対応する同期フラグを、ＬＭ１５又はＤＳＭ１４の所定のアドレス、すなわち１５−２又は１４−２に書き込む。同期フラグがＬＭ１５又はＤＳＭ１４の所定のアドレスに書き込まれるまでの間、プロセッサ１１は、繰り返しＬＭ１５又はＤＳＭ１４の同期フラグに割り当てられた所定のアドレス（１５−２又は１４−２）をチェックする。プロセッサ１１は、書き込まれた同期フラグを確認すると、ＡＣＣレジスタ１２２に格納された処理結果のデータを読み込んで、自身の処理を開始する。このようにして、ＡＣＣ１２とプロセッサ１１とは連係動作する。
【００８２】
（ＡＣＣ１２とＤＴＵ１３との連係動作）
次に、ＡＣＣ１２とＤＴＵ１３との連係動作の一例として、ＡＣＣ本体１２１が処理を終了すると、ＤＴＵ１３がデータ転送を開始する動作を説明する。
【００８３】
ＡＣＣ本体１２１が所定の処理を終了すると、処理結果のデータをＡＣＣレジスタ１２２に送信する。その後、フラグ書込・確認器１２１Ａは当該所定の処理に対応する同期フラグを、ＬＭ１５又はＤＳＭ１４の所定のアドレス、すなわち１５−２又は１４−２に書き込む。同期フラグがＬＭ１５又はＤＳＭ１４の所定のアドレスに書き込まれるまでの間、ＤＴＵ１３は他のデータ転送処理が終わった後に、繰り返しＬＭ１５又はＤＳＭ１４の同期フラグに割り当てられた所定のアドレス（１５−２又は１４−２）をチェックする。ＤＴＵ１３は、書き込まれた同期フラグを確認すると、ＡＣＣレジスタ１２２に格納されたデータを読み込んで、ＬＭ１５又はＤＳＭ１４に転送する処理を開始する。このようにして、ＡＣＣ１２とＤＴＵ１３とは連係動作する。
【００８４】
次に、ＡＣＣ１２とＤＴＵ１３との連係動作の一例として、ＤＴＵ１３がデータ転送を終了すると、ＡＣＣ本体１２１が処理を開始する動作を説明する。
【００８５】
ＤＴＵ１３は所定のデータ転送処理によってＡＣＣレジスタ１２２にデータを書き込む。その後、ＤＴＵ１３は、当該所定の処理に対応する同期フラグを、ＬＭ１５又はＤＳＭ１４の所定のアドレス、すなわち１５−２又は１４−２に書き込む。同期フラグがＬＭ１５又はＤＳＭ１４の所定のアドレスに書き込まれるまでの間、フラグ書込・確認器１２１Ａは、繰り返しＬＭ１５又はＤＳＭ１４の同期フラグに割り当てられた所定のアドレス（１５−２又は１４−２）をチェックする。フラグ書込・確認器１２１Ａが書き込まれた同期フラグを確認すると、ＡＣＣ本体１２１は、ＡＣＣレジスタ１２２に書き込まれたデータを用いて、自身の処理を開始する。具体的には、ＡＣＣ１２用のプログラムに含まれるフラグチェック命令、データロード命令、アクセラレーション処理命令が順に実行される。このようにして、ＡＣＣ１２とＤＴＵ１３とは連係動作する。
【００８６】
以上に示すように、第２の構成例のＡＣＣ１２と、プロセッサ１１と、ＤＴＵ１３とは、ＬＭ１５又はＤＳＭ１４に対するフラグセット・チェックによって、同期を取って連係動作する。
【００８７】
図４は、本発明の実施形態のＡＣＣ１２の第３の構成例及びＡＣＣ１２を含むプロセッサコアの構成例を示す図である。なお、以下では図１〜図３に示した構成要素と同一の構成要素には同一の符号を付して重複する説明を適宜省略する。
【００８８】
図４に示すＡＣＣ１２は、フラグ書込・確認器１２１Ａを備えたＡＣＣ本体１２１、及び、フラグ書込・確認器１２３Ａを備えたロード・ストアユニット１２３の両方を有する。
【００８９】
以上に示す構成のＡＣＣ１２では、ＡＣＣ本体１２１と、ロード・ストアユニット１２３とはそれぞれ自律的に、且つ、互いに連係して動作する。また、ＡＣＣ本体１２１、ロード・ストアユニット１２３は、プロセッサ１１、ＤＴＵ１３とも連係して動作する。この連係動作について簡単に説明する。
【００９０】
（ＡＣＣ本体１２１とロード・ストアユニット１２３の連係動作１）
まず、ＡＣＣ本体１２１とロード・ストアユニット１２３の連係動作の第１の例として、ロード・ストアユニット１２３がＬＭ１５内のデータをＡＣＣレジスタ１２２に読み込む処理を終了すると、ＡＣＣ本体１２１が処理を開始する動作を説明する。
【００９１】
ロード・ストアユニット１２３は、ＬＭ１５内のデータをＡＣＣレジスタ１２２に読み込む処理を実行する。その後、フラグ書込・確認器１２３Ａは、当該ロード処理に対応する同期フラグを、ＬＭ１５又はＤＳＭ１４の所定のアドレスに書き込む。その間、フラグ書込・確認器１２１Ａは、繰り返しＬＭ１５又はＤＳＭ１４へ同期フラグが書き込まれたかをチェックする。その後、フラグ書込・確認器１２１Ａが書き込まれた同期フラグを確認すると、ＡＣＣ本体１２１は、ＡＣＣレジスタ１２２に格納されたデータを用いて、自身の処理を開始する。このようにして、ＡＣＣ本体１２１とロード・ストアユニット１２３とは連係動作する。
【００９２】
（ＡＣＣ本体１２１とロード・ストアユニット１２３の連係動作２）
次に、ＡＣＣ本体１２１とロード・ストアユニット１２３の連係動作の第２の例として、ＡＣＣ本体１２１が処理を終了すると、ロード・ストアユニット１２３が処理後のデータをＬＭ１５に格納する動作を説明する。
【００９３】
ＡＣＣ本体１２１が所定の処理を終了すると、処理結果のデータをＡＣＣレジスタ１２２に送信する。その後、フラグ書込・確認器１２１Ａは当該所定の処理に対応する同期フラグを、ＬＭ１５又はＤＳＭ１４の所定のアドレスに書き込む。その間、フラグ書込・確認器１２３Ａは、繰り返しＬＭ１５又はＤＳＭ１４へ同期フラグが書き込まれたかをチェックする。フラグ書込・確認器１２３Ａが書き込まれた同期フラグを確認すると、ロード・ストアユニット１２３は、ＡＣＣレジスタ１２２に格納されたデータを、ＬＭ１５又はＤＳＭ１４に転送する処理を開始する。その後、フラグ書込・確認器１２３Ａは、命令で指定されたＬＭ１５、自プロセッサコア又は他プロセッサコア上のＤＳＭ１４の所定のアドレスに、同期フラグを書き込む。このようにして、ＡＣＣ本体１２１とロード・ストアユニット１２３とは連係動作する。
【００９４】
以上に示すように、第３の構成例のＡＣＣ１２では、ＡＣＣ本体１２１とロード・ストアユニット１２３が、ＬＭ１５又はＤＳＭ１４を介したフラグセット・チェックによって、互いに同期を取って連係動作する。もちろん、プロセッサ１１、ＤＴＵ１３と同期を取って連係動作することも可能である。これにより、ＡＣＣ本体１２１がアクセラレーション処理を実行中に、ロード・ストアユニット１２３がデータを読み込み・格納することができる。また、プロセッサ１１、ＤＴＵ１３、ＡＣＣ本体１２１、ロード・ストアユニット１２３毎の独立した周波数・電源制御（ＦＶ制御）も可能である。
【００９５】
図５は、本発明の実施形態のＡＣＣ１２の第４の構成例及びＡＣＣ１２を含むプロセッサコアの構成例を示す図である。なお、以下では図４に示した構成要素と同一の構成要素には同一の符号を付して重複する説明を適宜省略する。
【００９６】
図５に示すＡＣＣ１２は、ＡＣＣ内フラグ授受レジスタ１２６を有する点において、図４に示すＡＣＣ１２と異なる。
【００９７】
ＡＣＣ内フラグ授受レジスタ１２６は、フラグ書込・確認器１２１Ａ、１２３Ａが同期フラグをセット及びチェックするためのＡＣＣ１２内部のレジスタである。
【００９８】
以上に示す構成のＡＣＣ１２では、ＡＣＣ本体１２１と、ロード・ストアユニット１２３とはそれぞれ自律的に、且つ、互いに連係して動作する。また、ＡＣＣ本体１２１、ロード・ストアユニット１２３は、プロセッサ１１、ＤＴＵ１３とも連係して動作する。この連係動作について簡単に説明する。
【００９９】
（ＡＣＣ本体１２１とロード・ストアユニット１２３の連係動作１）
まず、ＡＣＣ本体１２１とロード・ストアユニット１２３の連係動作の第１の例として、ロード・ストアユニット１２３がＬＭ１５内のデータをＡＣＣレジスタ１２２に読み込む処理を終了すると、ＡＣＣ本体１２１が処理を開始する動作を説明する。
【０１００】
ロード・ストアユニット１２３は、ＬＭ１５内のデータをＡＣＣレジスタ１２２に読み込む処理を実行する。その後、フラグ書込・確認器１２３Ａは、当該ロード処理に対応する同期フラグを、ＡＣＣ内フラグ授受レジスタ１２６に書き込む。その間、ＡＣＣ本体１２１は命令で指定された他の処理を実行し、他の処理が終了するとフラグチェック命令を実行する。具体的には、フラグ書込・確認器１２１Ａが、繰り返しＡＣＣ内フラグ授受レジスタ１２６へ同期フラグが書き込まれたかをチェックする。その後、フラグ書込・確認器１２１Ａが書き込まれた同期フラグを確認すると、ＡＣＣ本体１２１は、ＡＣＣレジスタ１２２に格納されたデータを用いて、自身の処理を開始する。自身の処理が終了すると、処理結果をＡＣＣレジスタ１２２に格納する。その後、フラグセット命令が実行される時に命令で指定された値を、ＡＣＣ内フラグ授受レジスタ１２６の命令で指定された位置（アドレス）に書き込む。このようにして、ＡＣＣ本体１２１とロード・ストアユニット１２３とは連係動作する。
【０１０１】
（ＡＣＣ本体１２１とロード・ストアユニット１２３の連係動作２）
次に、ＡＣＣ本体１２１とロード・ストアユニット１２３の連係動作の第２の例として、ＡＣＣ本体１２１が処理を終了すると、ロード・ストアユニット１２３が処理後のデータをＬＭ１５に格納する動作を説明する。
【０１０２】
ＡＣＣ本体１２１が所定の処理を終了すると、処理結果のデータをＡＣＣレジスタ１２２に送信する。その後、フラグ書込・確認器１２１Ａは、当該所定の処理に対応する同期フラグを、ＡＣＣ内フラグ授受レジスタ１２６に書き込む。その間、フラグ書込・確認器１２３Ａは、繰り返しＡＣＣ内フラグ授受レジスタ１２６へ同期フラグが書き込まれたかをチェックする。フラグ書込・確認器１２３Ａが書き込まれた同期フラグを確認すると、ロード・ストアユニット１２３は、ＡＣＣレジスタ１２２に格納されたデータを、ＬＭ１５又はＤＳＭ１４に転送する処理を開始する。このようにして、ＡＣＣ本体１２１とロード・ストアユニット１２３とは連係動作する。
【０１０３】
以上に示すように、第４の構成例のＡＣＣ１２では、ＡＣＣ本体１２１とロード・ストアユニット１２３が、ＡＣＣ内フラグ授受レジスタ１２６を介したフラグセット・チェックによって、互いに同期を取って連係動作する。そのため、前述の第１〜第３の構成例のＬＭ１５又はＤＳＭ１４を介したフラグセット・チェックと比較して、フラグセット・チェックに係るオーバーヘッドを低減することができる。
【０１０４】
図６は、本発明の実施形態のフラグ書込・確認器１２１Ａ（１２３Ａ）の構成例を示す図である。図６に示すように、フラグ書込・確認器１２１Ａは、アドレスレジスタ２１、フラグ値レジスタ２２、バスインターフェース２３、条件値レジスタ２４、比較器２５、２６、シーケンサ２７を備える。
【０１０５】
このフラグ書込・確認器１２１Ａ（１２３Ａ）の動作は、同期フラグを書き込む動作（フラグセット）と、同期フラグを確認する動作（フラグチェック）とに分けられるので、これらの動作の各々について説明する。
【０１０６】
（フラグセット）
フラグ書込・確認器１２１Ａは、ＬＭ１５又はＤＳＭ１４等のメモリ上の所定のアドレスに同期フラグを書き込む。具体的には、プロセッサ１１が、フラグ書込・確認器１２１Ａに、フラグアドレス（同期フラグを書き込むべきメモリ上のアドレス）、フラグ値（書き込むべき同期フラグの値）、及びフラグセットの指示を入力し、フラグ書込・確認器１２１Ａは当該指示に従って動作する。
【０１０７】
そうすると、アドレスレジスタ２１、フラグ値レジスタ２２には、フラグアドレス、フラグ値がそれぞれ書き込まれる。また、シーケンサ２７には、フラグセットの指示が書き込まれる。バスインターフェース２３は、これら入力された情報に基づいて、バスリクエストを発行し、指定されたメモリ上のアドレスに、指定された同期フラグの値を書き込む。
【０１０８】
（フラグチェック）
一方、フラグ書込・確認器１２１Ａは、ＬＭ１５又はＤＳＭ１４等のメモリ上の所定のアドレスにセットされた同期フラグを確認する。具体的には、まずフラグ書込・確認器１２１Ａは、フラグアドレス（確認すべきメモリ上のアドレス）、フラグ値（確認すべき同期フラグの値）、及びフラグチェックの指示を入力する。
【０１０９】
そうすると、アドレスレジスタ２１、フラグ値レジスタ２２には、フラグアドレス、フラグ値がそれぞれ書き込まれる。また、シーケンサ２７には、フラグチェックの指示が書き込まれる。バスインターフェース２３は、これら入力された情報のうちのフラグアドレス及びフラグチェック指示に基づいて、バスリクエストを発行し、指定されたメモリ上のアドレスに格納された同期フラグの値を読み取る。
【０１１０】
バスインターフェース２３によって読み取られたフラグ値（以下、「読取フラグ値」という。）は、比較器２６に送られる。比較器２６は、読取フラグ値と、フラグ値レジスタ２２のフラグ値とを比較する。両者が一致する場合、一致する旨をシーケンサ２７に出力し、両者が不一致である場合、不一致である旨をシーケンサ２７に出力する。シーケンサ２７は、比較器２６の出力結果が不一致である場合には、バスインターフェース２３に再読み取りを要求する。一方、比較器２６の出力結果が一致である場合には、処理完了を通知する。
【０１１１】
一方、同期フラグの値が所定の条件値と一致するか否かを確認する場合には、プロセッサ１１は、フラグ書込・確認器１２１Ａに、さらに同期フラグの条件値を入力する。条件値を指定することによって、特定処理の指示を通知可能となる。ここでいう特定処理とは、同期フラグの値が条件値である場合に実行される処理であって、例えば図２の制御レジスタファイル１２４の値に応じた処理である。そうすると、条件値レジスタ２４には、同期フラグの条件値が書き込まれる。この場合、バスインターフェース２３によって読み取られた読取フラグ値は、比較器２５に送られる。比較器２５は、読み取られたフラグ値と、条件値レジスタ２４に格納された条件値とを比較する。両者が一致する場合、一致する旨をシーケンサ２７に出力する。また、両者が不一致である場合、不一致である旨をシーケンサ２７に出力する。シーケンサ２７は、比較器２５の出力結果が不一致である場合には、バスインターフェース２３に再読み取りを要求する。一方、比較器２５の出力結果が一致である場合には、特定処理の指示を通知する。
【０１１２】
補足すると、フラグ書込・確認器１２１Ａは、ＬＭ１５又はＤＳＭ１４等のメモリ上の所定のアドレスに同期フラグを書き込む場合、書き込まれるアドレスを変更することによって、多数の同期フラグを書き込むことができる。すなわち、ＡＣＣ１２の実行する処理の進行状況に応じて、進行経過を示す異なる複数のフラグを同期フラグ領域に書き込む（出力する）ことができる。各フラグには、ＡＣＣ１２が実行する処理に後続してプロセッサ１１やＤＴＵ１３によって実行すべき処理が対応付けられている。これにより、例えばプロセッサ１１は、ＡＣＣ１２によって同期フラグ領域に書き込まれたフラグに対応付けられている後続して実行すべき処理を開始することができる。なお、プロセッサ１１やＤＴＵ１３も同様に、自身の実行する処理の進行状況に応じて、進行経過を示す異なる複数のフラグを同期フラグ領域に書き込むことができる。
【０１１３】
図７は、本発明の実施形態のフラグ書込・確認器１２１Ａ（１２３Ａ）によるフラグセット・チェックの動作の概要を示す図である。ここでは、フラグセット・チェックの動作を７段階に分けて説明する。
【０１１４】
段階（０）は、初期設定の段階である。すなわち、ＬＭ１５の同期フラグ領域１５−２には、フラグ変数Ａ、フラグ変数Ｂ用のメモリ領域が確保されている。フラグ変数Ａ、Ｂの値は、ｉ（ｉ＝０等）で予め初期化される。
【０１１５】
段階（１）において、プロセッサ１１は、フラグ変数Ａの値に（ｉ＋１）を書き込む。段階（２）において、段階（１）と前後して、ＤＴＵ１３は、フラグ変数Ａの値が（ｉ＋１）に変化したかを、繰り返しチェックする。
【０１１６】
段階（３）において、ＤＴＵ１３は、フラグ変数Ａの値が（ｉ＋１）に変化した場合、データ転送を実行する。段階（４）において、ＤＴＵ１３は、データ転送を終了すると、フラグ変数Ｂの値に（ｉ＋１）を書き込む。
【０１１７】
段階（５）において、段階（４）と前後して、ＡＣＣ１２は、フラグ変数Ｂの値が（ｉ＋１）に変化したかを、繰り返しチェックする。段階（６）において、ＡＣＣ１２は、フラグ変数Ｂの値が（ｉ＋１）に変化した場合、自身が実行すべきアクセラレーション処理を実行する。
【０１１８】
以上に示すように、プロセッサ１１とＤＴＵ１３とは、フラグ変数Ａを介して連係動作する。同様に、ＤＴＵ１３とＡＣＣ１２とは、フラグ変数Ｂを介して連係動作する。すなわち、プロセッサ１１とＡＣＣ１２とＤＴＵ１３は、ＬＭ１５の同期フラグ領域１５−２に格納されたフラグ変数Ａ、Ｂを介して連係動作する。
【０１１９】
なお、フラグ変数Ａ、Ｂは、ＬＭ１５以外に、ＤＳＭ１４、オンチップ集中共有メモリ４０、オフチップ集中共有メモリ５０に格納されてもよい。例えば、プロセッサコア１０−１のＤＴＵ１３がオンチップ集中共有メモリ４０の同期フラグ領域４０−２に同期フラグを書き込んでもよい。この場合、他のプロセッサコア１０−２〜１０−ｎのＤＴＵ１３は、同期フラグ領域４０−２に書き込まれた同期フラグを確認する。これにより、異なるプロセッサコア１０−１〜１０−ｎ同士が、フラグ変数を介して連係して動作する。
【０１２０】
図８は、本発明の実施形態のマルチコアプロセッサシステム１において実行されるプログラムの参考例を示す図である。ここでは、まず従来の手法によって実行されるプログラムを説明する。
【０１２１】
図８に示すプログラム８０において、外側ｆｏｒ文は、ＤＴＵ１３がデータを読み込む、及び内側ｆｏｒ文の処理結果データを格納するためのループ文である。一方、内側ｆｏｒ文は、外側ｆｏｒ文によって読み込まれたデータに対して、ＡＣＣ１２がアクセラレーション処理を実行するためのループ文である。
【０１２２】
外側ｆｏｒ文内のＤＴＵロード文は、ＤＴＵ１３が、オフチップ集中共有メモリ５０からＡＣＣ１２の処理可能な量のデータを、ＬＭ１５に読み込むための命令文である。内側ｆｏｒ文内のアクセラレータロード文は、ＡＣＣ１２が、ＬＭ１５に読み込まれたデータの一部を、ＡＣＣレジスタ１２２に読み込むための命令文である。演算文は、ＡＣＣ１２が、アクセラレータロード文によって読み込まれたデータを用いて演算するための命令文である。アクセラレータストア文は、ＡＣＣ１２が演算文の演算結果を、ＬＭ１５に格納するための命令文である。次繰り返しの準備文は、次ループの準備処理（次データのベースアドレス計算、ループカウンタ演算等）のための命令文である。外側ｆｏｒ文内のＤＴＵストア文は、ＤＴＵ１３が、ＬＭ１５に格納された演算結果のデータを、オフチップ集中共有メモリ５０に格納するための命令文である。図８のプログラムでは、ＡＣＣが処理すべきデータおよびＡＣＣによって処理されたデータを格納するメモリとしてＬＭ１５を用いることとしているが、もちろんＬＭ１５の代わりにＤＳＭ１４を用いてもよい。具体的には、ＬＭ１５を所有するプロセッサコア（例えばプロセッサコア１０−１）がローカルで利用するデータの場合にはＬＭ１５を、他のプロセッサコア１０−１〜１０−ｎと共有するデータの場合にはＤＳＭ１４を用いることができる。なお、ＬＭ１５とＤＳＭ１４とはコンパイラによって使い分けられる。
【０１２３】
図９は、参考例に係るプログラムを実行時の処理の流れを示す図である。
【０１２４】
まずステップ９０１において、プロセッサ１１は、ＤＴＵ１３に対して駆動命令を出す（９０１）。そうすると、ステップ９０２において、ＤＴＵ１３は駆動開始し、ＡＣＣ１２の処理可能な量のデータを、オフチップ集中共有メモリ５０からＬＭ１５に読み込む（９０２）。ＤＴＵ１３は、ロード処理を終了すると、ロード処理の終了をプロセッサ１１に通知する。
【０１２５】
ステップ９０３において、ＤＴＵ１３から当該通知を受けたプロセッサ１１は、ＡＣＣ１２に対して駆動命令を出す（９０３）。そうすると、ステップ９０４において、ＡＣＣ１２は駆動開始し、ステップ９０２で読み込まれたデータの一部を用いて演算し、演算結果をＬＭ１５に格納する（９０４）。ＡＣＣ１２は、一連の処理を終了すると、処理終了をプロセッサ１１に通知する。
【０１２６】
ステップ９０５において、ＡＣＣ１２から当該通知を受けたプロセッサ１１は、次の繰り返し処理の準備を実行する（９０５）。その後ステップ９０６において、ＡＣＣ１２に対して駆動命令を出す（９０６）。その後ステップ９０３〜９０６の処理を、内側ｆｏｒ文のループの回数だけ繰り返す。
【０１２７】
内側ｆｏｒ文のループ処理を終了すると、ステップ９０７において、プロセッサ１１は、ＤＴＵ１３に対して駆動命令を出す（９０７）。そうすると、ステップ９０８において、ＤＴＵ１３は駆動開始し、ＬＭ１５に格納された演算結果のデータを、オフチップ集中共有メモリ５０に格納する。その後ステップ９０１〜９０８の処理を、外側ｆｏｒ文のループの回数だけ繰り返す。
【０１２８】
以上説明してきたように、従来の手法によれば、プロセッサ１１の処理とＤＴＵ１３の処理とＡＣＣ１２の処理は、重複することなく逐次的に実行される。また、ＤＴＵ１３とＡＣＣ１２の動作は、プロセッサ１１によって制御される。
【０１２９】
図１０は、本発明の実施形態のマルチコアプロセッサシステム１において実行されるプログラムの第１の例を示す図である。
【０１３０】
図１０に示すように、第１の例に係るプログラムは、プロセッサ１１で実行されるプログラム１００、ＤＴＵ１３で実行されるプログラム１０１、１０３、ＡＣＣ１２で実行されるプログラム１０２を含む。すなわち、図８に示す従来の手法によって実行されるプログラム８０を、本発明の実施形態のプロセッサコア用に変換した（フラグセット文、フラグチェック文等を追加した）上で、プロセッサ１１で実行されるプログラム１００、ＤＴＵ１３で実行されるプログラム１０１、１０３、ＡＣＣ１２で実行されるプログラム１０２に分割したものである。
【０１３１】
なお、各プログラム１００、１０１、１０２、１０３は、フラグセット文及びフラグチェック文を含む。フラグチェック文は、ＬＭ１５又はＤＳＭ１４等のメモリ上の所定のアドレスに書き込まれた同期フラグ変数（例えばＡ）の値が、予め設定された比較値と一致するまで繰り返し確認する命令文である。同期フラグ変数にフラグが書き込まれた場合、当該フラグに対応する以降の命令文に進む。一方、フラグセット文は、ＬＭ１５又はＤＳＭ１４等のメモリ上の所定のアドレスにフラグを書き込む、具体的には同期フラグ変数にデータを書き込む（同期フラグ変数に書き込まれたデータを更新する）ための命令文である。フラグを書き込んだ後、以降の命令文に進む。
【０１３２】
また、各プログラム１００、１０１、１０２、１０３は、後述する並列化コンパイラによって予め生成され、ＬＭ１５、ＤＳＭ１４等のメモリ上の所定のアドレス、すなわち１５−１、１４−１等に配置される。
【０１３３】
なお、ＤＴＵ１３及びＡＣＣ１２は、プロセッサ１１による制御レジスタファイル１２４へのデータの書込みや、マルチコアプロセッサシステム１の起動に応じて起動される。その後、プロセッサ１１とは独立して自律的にプログラムを実行する。例えばＡＣＣ１２は、プログラム１０２に従って、まずフラグチェック文を実行し、フラグ変数Ｃにフラグが書き込まれると、書き込まれたフラグに対応する以降の命令文を実行する。
【０１３４】
図１１は、第１の例に係るプログラムを実行時の処理の流れを示す図である。
【０１３５】
まずステップ１１０１において、プロセッサ１１は、プログラム１００に従って動作し、外側ｆｏｒ文のループに入り、フラグ変数Ａにフラグを書き込む（１１０１）。その後ステップ１１０２において、フラグ変数Ｂを確認する（１１０２）。
【０１３６】
一方、ステップ１１０３において、ＤＴＵ１３は、プログラム１０１に従って動作し、フラグ変数Ａを確認する（１１０３）。ステップ１１０１によってフラグ変数Ａにフラグが書き込まれると、ＤＴＵ１３はデータの読み込みを開始し、データの読み込みが終了すると、フラグ変数Ｂにフラグを書き込む（１１０４）。このとき、フラグ変数Ａに書き込まれたフラグを初期状態に戻す（リセットする）。
【０１３７】
ステップ１１０５において、プロセッサ１１は、ステップ１１０４によってフラグ変数Ｂにフラグが書き込まれると、そのフラグ値が所定の値になっていることを確認し、内側ｆｏｒ文のループに入り、フラグ変数Ｃにフラグを書き込む（１１０５）。その後、次繰り返しの準備を実行し（１１０６）、フラグ変数Ｄを確認する（１１０７）。
【０１３８】
一方、ステップ１１０８において、ＡＣＣ１２は、プログラム１０２に従って動作し、フラグ変数Ｃを確認する（１１０８）。ステップ１１０５によってフラグ変数Ｃにフラグが書き込まれると、ＡＣＣ１２はそのフラグ値が所定の値になっていることを確認し、アクセラレーション処理の実行を開始し、アクセラレーション処理が終了すると、フラグ変数Ｄにフラグを書き込む（１１０９）。このとき、フラグ変数Ｃに書き込まれたフラグを初期状態に戻す。
【０１３９】
ステップ１１１０において、プロセッサ１１は、ステップ１１０９の処理によってフラグ変数Ｄにフラグが書き込まれると、内側ｆｏｒ文の次のループに入り、フラグ変数Ｃにフラグを書き込む（１１１０）。このとき、フラグ変数Ｄに書き込まれたフラグを初期状態に戻す。以降、ステップ１１０６〜１１１０の処理を繰り返す。
【０１４０】
ステップ１１１１において、プロセッサ１１は、内側ｆｏｒ文のループ処理が終了すると、フラグ変数Ｅにフラグを書き込む（１１１１）。その後、フラグ変数Ｆを確認する（１１１２）。一方、ステップ１１１３において、ＤＴＵ１３は、プログラム１０３に従って動作し、フラグ変数Ｅを確認する（１１１３）。ステップ１１１１によってフラグ変数Ｅにフラグが書き込まれると、データの格納を開始し、データの格納が終了すると、フラグ変数Ｆにフラグを書き込む（１１１４）。このとき、フラグ変数Ｅに書き込まれたフラグを初期状態に戻す。
【０１４１】
ステップ１１１５において、プロセッサ１１は、ステップ１１１４によってフラグ変数Ｆにフラグが書き込まれると、外側ｆｏｒ文の次のループに入り、フラグ変数Ａにフラグを書き込む（１１１５）。このとき、フラグ変数Ｆに書き込まれたフラグを初期状態に戻す。以降、ステップ１１０２〜１１１５の処理を繰り返す。
【０１４２】
以上の処理に示すように、プロセッサ１１とＡＣＣ１２とＤＴＵ１３とは、フラグセット及びフラグチェックを介してお互いに同期を取り、且つ、各々自律的に動作する。この第１の例のプログラムによれば、プロセッサ１１は、ステップ１１０９に示すＡＣＣ１２の処理中に、ステップ１１０６の処理を実行することができる。すなわち、プロセッサ１１の処理と、ＡＣＣ１２の処理とをオーバーラップしている。そのため、次繰り返しの準備（ステップ１１０６の処理）の開始時間を前倒しすることができる。すなわち、プロセッサ１１によるＡＣＣ１２の制御のオーバーヘッドを隠蔽することができる。
【０１４３】
また、ＡＣＣ１２は、ＬＭ１５又はＤＳＭ１４に格納されたプログラム１０２に従って動作するので、命令セットを拡張する必要がない。すなわち、任意のプロセッサ１１に対して、命令セットを拡張することなく任意のＡＣＣ１２を追加することができる。
【０１４４】
なお、第１の例のプログラムは、外側ｆｏｒ文及び内側ｆｏｒ文のループ処理を繰り返すものである。そこで、ループ処理の繰り返し毎に、繰り返し回数に応じたフラグ値を書き込むようプログラムを構成してもよい。例えば内側ｆｏｒ文で示すループ処理のｎ回目の繰り返しでは、同期フラグ変数Ｃ、Ｄに、番号ｎを付したフラグ値（例えばＣｎ、Ｄｎ）を書き込み、確認する。これにより、フラグ値を初期状態に戻すオーバーヘッドを低減することができる。
【０１４５】
また、フラグチェック文を実行時には、ＦＶＲ１２４に設定された値に応じて、所定の時間が経過するまでの期間は、クロック周波数を低周波数に変化させる又は遮断する等のようにプログラムを構成してもよい。これにより、フラグチェックに係る消費電力を削減することができる。
【０１４６】
図１２は、第１の例に係るプログラムを実行時の処理の流れの変形例を示す図である。
【０１４７】
ここでは、図１１に示す処理の流れの変形例として、プロセッサ１１が所定の条件を満たす場合（条件分岐やループ回数が一定数に達した場合）に、フラグ変数Ｃ'にフラグを書き込み、一方でＡＣＣ１２が、フラグ変数Ｃ'に書き込まれたフラグに応じた動作を実行する処理を説明する。なお、このような処理を実行するためのプロセッサ１１、ＡＣＣ１２用のプログラムは、後述する並列化コンパイラによって予め生成され、ＬＭ１５、ＤＳＭ１４等のメモリ上の所定のアドレスに配置される。
【０１４８】
ステップ１１１６において、プロセッサ１１は、内側ｆｏｒ文のループ処理の実行中に所定の条件を満たす場合（条件分岐やループ回数が一定数に達した場合）、フラグ変数Ｃ'にフラグとして条件値を書き込む（１１１６）。条件値は、前述した様に、特定処理の指示を通知するものである。一方、ＡＣＣ１２は、フラグ変数Ｃ'を確認する（１１１７）。ステップ１１１５によってフラグ変数Ｃ'に条件値が書き込まれると、ＡＣＣ１２は、特別な動作を開始する。特別な動作とは、例えば制御レジスタファイル１２４を読み取り、読み取られた値が示す次タスクを実行する動作である。
【０１４９】
以上の処理に示すように、プロセッサ１１とＡＣＣ１２とＤＴＵ１３とは、フラグセット及びフラグチェックを介してお互いに同期を取り、且つ、各々自律的に動作する。さらに、この変形例に係るプログラムによれば、ＡＣＣ１２がアクセラレーション処理を実行中であっても、プロセッサ１１が所定の条件を満たす場合には、ＡＣＣ１２に特別な動作をさせるよう変更することができる。すなわち、ダイナミックなスケジューリングが可能になる。
【０１５０】
図１３は、本発明の実施形態のマルチコアプロセッサシステム１において実行されるプログラムの第２の例を示す図である。
【０１５１】
図１３に示すように、第２の例に係るプログラムは、プロセッサ１１で実行されるプログラム１３０、及びＤＴＵ１３で実行されるプログラム１３１、１３３、ＡＣＣ１２で実行されるプログラム１３２を含む。すなわち、図８に示すプログラム８０を、本発明の実施形態のプロセッサコア用に変換した（フラグセット文、フラグチェック文等を追加した）上で、プロセッサ１１で実行されるプログラム１３０と、ＤＴＵ１３で実行されるプログラム１３１、１３３、ＡＣＣ１２で実行されるプログラム１３２とに分割したものである。
【０１５２】
なお、各プログラム１３０、１３１、１３２、１３３は、図１０に示す形態と異なるフラグセット文及びフラグチェック文を含む。すなわち、プロセッサ１１による内側ｆｏｒ文の処理の終了（フラグセット（Ｈ））が、ＡＣＣ１２によるアクセラレーション処理の実行開始（フラグチェック（Ｈ））を決定する。一方、ＡＣＣ１２によるアクセラレーション処理の終了（フラグセット（Ｇ））が、プロセッサ１１による内側ｆｏｒ文の処理の実行開始（フラグチェック（Ｇ））を決定する。
【０１５３】
このような各プログラム１３０、１３１、１３２、１３３は、後述する並列化コンパイラによって予め生成され、ＬＭ１５、ＤＳＭ１４等のメモリ上の所定のアドレスに配置される。
【０１５４】
図１４は、第２の例に係るプログラムの実行時の処理の流れを示す図である。
【０１５５】
まずステップ１４０１において、プロセッサ１１は、プログラム１３０に従って動作し、外側ｆｏｒ文のループに入り、フラグ変数Ａにフラグを書き込む（１４０１）。その後ステップ１４０２において、フラグ変数Ｂを確認する（１４０２）。
【０１５６】
一方、ステップ１４０３において、ＤＴＵ１３は、プログラム１３１に従って動作し、フラグ変数Ａをチェックする（１４０３）。ステップ１４０１によってフラグ変数Ａにフラグが書き込まれそれを確認すると、ＤＴＵ１３はデータの読み込みを開始し、データの読み込みが終了すると、フラグ変数Ｂにフラグを書き込む（１４０４）。このとき、フラグ変数Ａに書き込まれたフラグを初期状態に戻す（リセットする）。
【０１５７】
プロセッサ１１は、ステップ１４０４によってフラグ変数Ｂにフラグが書き込まれると、内側ｆｏｒ文のループに入り、フラグ変数Ｇを確認する（１４０５）。ここでは、フラグ変数Ｇには、初期設定としてフラグが書き込まれているものとする。その後、次繰り返しの準備を実行し（１４０６）、フラグ変数Ｈにフラグを書き込む（１４０７）。このとき、フラグ変数Ｇに書き込まれたフラグを初期状態に戻す。その後、外側ｆｏｒ文の次のループに入り、フラグ変数Ｇを確認する（１４０８）。以降、ステップ１４０６〜１４０８の処理を繰り返す。
【０１５８】
一方、ステップ１４０９において、ＡＣＣ１２は、プログラム１３２に従って動作し、フラグ変数Ｂを確認する（１４０９）。ステップ１４０４によってフラグ変数Ｂにフラグが書き込まれると、フラグ変数Ｈを確認する（１４１０）。ここでは、フラグ変数Ｈには、初期設定としてフラグが書き込まれているものとする。その後、アクセラレーション処理の実行を開始し、アクセラレーション処理が終了すると、フラグ変数Ｇにフラグを書き込む（１４１１）。このとき、フラグ変数Ｈに書き込まれたフラグを初期状態に戻す。以降、ステップ１４１０〜１４１１の処理を繰り返す。
【０１５９】
ステップ１４１２において、プロセッサ１１は、内側ｆｏｒ文のループ処理が終了すると、フラグ変数Ｅにフラグを書き込む（１４１２）。その後、フラグ変数Ｆを確認する（１４１３）。一方、ステップ１４１４において、ＤＴＵ１３は、プログラム１３３に従って動作し、フラグ変数Ｅを確認する（１４１４）。ステップ１４１２によってフラグ変数Ｅにフラグが書き込まれると、データの格納を開始し、データの格納が終了すると、フラグ変数Ｆにフラグを書き込む（１４１５）。このとき、フラグ変数Ｅに書き込まれたフラグを初期状態に戻す。
【０１６０】
ステップ１４１６において、プロセッサ１１は、ステップ１４１５によってフラグ変数Ｆにフラグが書き込まれると、外側ｆｏｒ文の次のループに入り、フラグ変数Ａにフラグを書き込む（１４１６）。このとき、フラグ変数Ｆ、Ｂに書き込まれたフラグを初期状態に戻す。以降、ステップ１４０２〜１４１６の処理を繰り返す。
【０１６１】
以上の処理に示すように、プロセッサ１１とＡＣＣ１２とＤＴＵ１３とは、フラグセット及びフラグチェックを介してお互いに同期を取り、且つ、各々自律的に動作する。この第２の例のプログラムによれば、プロセッサ１１は、ステップ１４１１に示すＡＣＣ１２の処理中に、ステップ１４０６の処理を実行することができる。すなわち、プロセッサ１１の処理と、ＡＣＣ１２の処理とがオーバーラップしている。
【０１６２】
また、ステップ１４０７の処理によって、ＡＣＣ１２によるステップ１４１７、１４１８の処理に先立って、プロセッサ１１からＡＣＣ１２の制御のトリガをかけることができる。そのため、プロセッサ１１によるフラグチェック・セットの分だけ次繰り返しの準備（ステップ１４０６）の開始時間を前倒しすることができる。すなわち、プロセッサ１１によるＡＣＣ１２の制御のオーバーヘッドを隠蔽することができる。
【０１６３】
なお、第２の例のプログラムは、第１の例のプログラムと同様に、外側ｆｏｒ文、内側ｆｏｒ文のループ処理を繰り返すものである。そこで、ループ処理の繰り返し毎に、繰り返し回数に応じたフラグ値を書き込むようプログラムを構成してもよい。例えば内側ｆｏｒ文で示すループ処理のｎ回目の繰り返しでは、同期フラグ変数Ｈに、番号ｎを付したフラグ値（例えばＨｎ）を書き込み、確認する。これにより、フラグ値を初期状態に戻すオーバーヘッドを低減することができる。
【０１６４】
また、フラグチェック文を実行時には、ＦＶＲ１２４に設定された値に応じて、所定の時間が経過するまでの期間は、クロック周波数を低周波数に変化させる又は遮断する等のようにプログラムを構成してもよい。これにより、フラグチェックに係る消費電力を削減することができる。
【０１６５】
図１５は、本発明の実施形態のマルチコアプロセッサシステム１において実行されるプログラムの第３の例を示す図である。
【０１６６】
図１５に示すように、第３の例に係るプログラムは、プロセッサ１１で実行されるプログラム１５０、ＤＴＵ１３で実行されるプログラム１５１、１５３、ＡＣＣ１２で実行されるプログラム１５２、１５４を含む。すなわち、図８に示すプログラム８０を、本発明の実施形態のプロセッサコア用に変換した（フラグセット文、フラグチェック文等を追加した）上で、プロセッサ１１で実行されるプログラム１５０、ＤＴＵ１３で実行されるプログラム１５１、ＤＴＵ１３で実行されるプログラム１５３、ＡＣＣ１２で実行されるプログラム１５２及びＡＣＣ１２で実行されるプログラム１５４に分割したものである。
【０１６７】
また、プロセッサ１１用のプログラム１５０は、内側ｆｏｒ文が複数に分けられている点（図１５では、外側ｆｏｒ文の奇数回転目（２ｎ＋１回転目、以下、単に「奇数回転目」という。）、及び偶数回転目（２ｎ回転目、以下、単に「偶数回転目」という。）において、図１０に示すプログラム１００と異なる。
【０１６８】
同様に、ＤＴＵ１３用のプログラムも複数（図１５では、プログラム１５１及び１５３）に分けられている。プログラム１５１は、ＬＭ１５に格納された偶数回転目の計算結果を格納し、且つ、次の偶数回転目の計算用のデータを、ＬＭ１５に読み込むためのプログラムである。一方、プログラム１５３は、ＬＭ１５に格納された奇数回転目の計算結果を格納し、且つ、次の奇数回転目の計算用のデータを、ＬＭ１５に読み込むためのプログラムである。なお、ＬＭ１５に計算結果が格納されていない場合には、計算結果の格納を実行しない。
【０１６９】
また、ＡＣＣ１２用のプログラムも複数（図１５では、プログラム１５２、１５４）に分けられている。プログラム１５２は、奇数回転目のアクセラレーション処理を実行するためのプログラムである。一方、プログラム１５４は、偶数回転目のアクセラレーション処理を実行するためのプログラムである。
【０１７０】
なお、各プログラム１５０、１５１、１５２、１５３、１５４は、図１０に示す形態と異なるフラグセット文及びフラグチェック文を含む。このような各プログラム１５０、１５１、１５２、１５３、１５４は、後述する並列化コンパイラによって予め生成され、ＬＭ１５、ＤＳＭ１４等のメモリ上の所定のアドレスに配置される。
【０１７１】
図１６は、第３の例に係るプログラムの実行時の処理の流れを示す図である。
【０１７２】
まずステップ１６０１において、プロセッサ１１は、プログラム１５０に従って動作し、外側ｆｏｒ文のループに入り、フラグ変数Ａ１へのフラグの書き込み、フラグ変数Ｂ０の確認を実行する（１６０１）。
【０１７３】
その後ステップ１６０２において、プロセッサ１１は、外側ｆｏｒ文の奇数回転目（説明の便宜上、１回転目とする。）のループに入り、フラグ変数Ｇ０の確認、次繰り返しの準備、及びフラグ変数Ｈ０へのフラグの書き込みを繰り返す（１６０２）。このステップ１６０２の処理は、図１４のステップ１４０５〜１４０７の処理の繰り返しと同一なので、ここでは説明を省略する。なお、フラグ変数Ｂ０に書き込まれたフラグを初期状態に戻す（リセットする）。
【０１７４】
一方、ステップ１６０３において、ＤＴＵ１３は、プログラム１５１に従って動作し、フラグ変数Ａ１の確認、データの格納、データの読み込み、及びフラグ変数Ｂ１へのフラグの書き込みを実行する（１６０３）。このステップ１６０３の処理では、格納すべきデータが存在しないので、ＤＴＵ１３は、次の偶数回転目である２回転目のアクセラレーション処理（ステップ１６０８）用のデータを、ＬＭ１５に読み込む。
【０１７５】
一方、ステップ１６０４において、ＡＣＣ１２は、プログラム１５２に従って動作し、フラグ変数Ｂ０の確認、フラグ変数Ｈ０の確認、及び１回転目のアクセラレーション処理を実行する（１６０４）。このとき、フラグ変数Ｂ０、Ｈ０に書き込まれたフラグを初期状態に戻す。
【０１７６】
以上のステップ１６０１〜１６０４の処理に示すように、プロセッサ１１とＡＣＣ１２とＤＴＵ１３とは、フラグセット及びフラグチェックを介してお互いに同期を取り、且つ、各々自律的に動作する。特に、ＡＣＣ１２が１回転目のアクセラレーション処理を実行中に、ＤＴＵ１３は前回のアクセラレーション処理（ここでは存在しない）の計算結果のデータを格納するとともに、２回転目のアクセラレーション処理に用いるデータを読み込むことができる。すなわち、プロセッサ１１の処理と、ＡＣＣ１２の処理と、ＤＴＵ１３の処理とをオーバーラップさせることができる。
【０１７７】
その後ステップ１６０５において、プロセッサ１１は、フラグ変数Ａ０へのフラグの書き込み、フラグ変数Ｂ１の確認を実行する（１６０５）。
【０１７８】
その後ステップ１６０６において、プロセッサ１１は、外側ｆｏｒ文の２回転目のループに入り、フラグ変数Ｇ１の確認、次繰り返しの準備、及びフラグ変数Ｈ１へのフラグの書き込みを繰り返す（１６０６）。このステップ１６０６の処理も、図１４のステップ１４０５〜１４０７の処理の繰り返しと同一なので、ここでは説明を省略する。なお、フラグ変数Ｂ１に書き込まれたフラグを初期状態に戻す。以降、プロセッサ１１は、ステップ１６０１、１６０２、１６０５及び１６０６の処理を繰り返す。
【０１７９】
一方、ステップ１６０７において、ＤＴＵ１３は、プログラム１５３に従って動作し、フラグ変数Ａ０の確認、データの格納、データの読み込み、及びフラグ変数Ｂ０へのフラグの書き込みを実行する（１６０７）。このステップ１６０６の処理では、ステップ１６０４で示す１回転目のアクセラレーション処理の計算結果を、ＬＭ１５に格納し、且つ、次の奇数回転目である３回転目のアクセラレーション処理用のデータを、ＬＭ１５に読み込む。以降、ＤＴＵ１３は、ステップ１６０３及び１６０７の処理を繰り返す。
【０１８０】
また、ステップ１６０８において、ＡＣＣ１２は、プログラム１５４に従って動作し、フラグ変数Ｂ１の確認、フラグ変数Ｈ１の確認、及び２回転目のアクセラレーション処理を実行する（１６０８）。このステップ１６０８の処理では、ステップ１６０３によって読み込まれた２回転目のアクセラレーション処理用のデータに対するアクセラレーション処理を実行する。このとき、フラグ変数Ｂ１、Ｈ１に書き込まれたフラグを初期状態に戻す。以降、ＡＣＣ１２は、ステップ１６０４及び１６０８の処理を繰り返す。
【０１８１】
以上のステップ１６０５〜１６０８の処理に示すように、プロセッサ１１とＡＣＣ１２とＤＴＵ１３とは、フラグセット及びフラグチェックを介してお互いに同期を取り、且つ、各々自律的に動作する。特に、ＡＣＣ１２が２回転目のアクセラレーション処理を実行中に、ＤＴＵ１３は１回転目のアクセラレーション処理の計算結果のデータを格納するとともに、３回転目のアクセラレーション処理に用いるデータを読み込むことができる。すなわち、プロセッサ１１の処理と、ＡＣＣ１２の処理と、ＤＴＵ１３の処理とをオーバーラップさせることができる。
【０１８２】
以上の処理に示すように、プロセッサ１１とＡＣＣ１２とＤＴＵ１３とは、フラグセット及びフラグチェックを介してお互いに同期を取り、且つ、各々自律的に動作する。この第３の例のプログラムによれば、ＡＣＣ１２がアクセラレーション処理（例えば奇数回転目の処理）を実行中に、ＤＴＵ１３は前回のアクセラレーション処理（偶数回転目の処理）の計算結果のデータを格納するとともに、次回のアクセラレーション処理（偶数回転目の処理）に用いるデータを読み込むことができる。
【０１８３】
また、ＡＣＣ１２の処理用のデータ領域と、ＤＴＵ１３のデータストア用のデータ領域と、ＤＴＵ１３のデータロード用のデータ領域とを分け（トリプルバッファリング）、且つ、プロセッサ１１の処理と、ＡＣＣ１２の処理と、ＤＴＵ１３の処理とをオーバーラップさせることによって、データ転送のオーバーヘッドを隠蔽し、処理を高速化することができる。また、前述の第２の例のプログラムと比べた場合、このデータ転送のオーバーヘッドの分だけさらに計算時間を短縮することができる。
【０１８４】
なお、第３の例のプログラムは、第１の例及び第２の例のプログラムと同様に、外側ｆｏｒ文、内側ｆｏｒ文のループ処理を繰り返すものである。そこで、ループ処理の繰り返し毎に、繰り返し回数に応じたフラグ値を書き込むようプログラムを構成してもよい。例えば内側ｆｏｒ文で示すループ処理のｎ回目の繰り返しでは、フラグ変数Ｈ０、Ｈ１に、番号ｎを付したフラグ値（例えばＨ０ｎ、Ｈ１ｎ）を書き込み、確認する。これにより、フラグ値を初期状態に戻すオーバーヘッドを低減することができる。
【０１８５】
また、フラグチェック文を実行時には、ＦＶＲ１２４に設定された値に応じて、所定の時間が経過するまでの期間は、クロック周波数を低周波数に変化させる又は遮断する等のようにプログラムを構成してもよい。これにより、フラグチェックに係る消費電力を削減することができる。
【０１８６】
図１７は、本発明の実施形態のマルチコアプロセッサシステム１において実行されるプログラムの第４の例の実行時の処理の流れを示す図である。
【０１８７】
第４の例に係るプログラムは、プロセッサ１１で実行されるプログラム１７０１〜１７０３、ＤＴＵ１３で実行されるプログラム１７０４〜１７１０及びＡＣＣ１２で実行されるプログラム１７１１〜１７２５を含む。
【０１８８】
なお、プログラム１７０１〜１７０３は、マルチコアプロセッサシステム１で実行されるプログラムによる一連の処理を、ＬＭ１５等のメモリサイズを考慮して複数のループ処理に分割した場合において、各ループ処理に対応するプロセッサ１１用のプログラムである。同様に、プログラム１７０４〜１７１０、プログラム１７１１〜１７２５は、それぞれ上記の場合におけるＤＴＵ１３用のプログラム、ＡＣＣ１２用のプログラムである。
【０１８９】
これらプログラム１７０１〜１７２５は、後述する並列化コンパイラによって予め生成され、ＬＭ１５、ＤＳＭ１４等のメモリ上の所定のアドレスに配置される。
【０１９０】
なお、プログラム１７０１は、プログラム１７０４の処理と連係するためのフラグを書き込むプログラム、プログラム１７１２の処理と連係するためのフラグを書き込むプログラム、及びプロセッサ１１がＬＭ１５、ＤＳＭ１４等からデータを読み込んで演算処理を行うプログラム（すなわちＡＣＣ１２等と並列動作を行うことが可能なプロセッサ１１のプログラム）を含む。同様に、プログラム１７０２及び１７０３は、ＤＴＵ１３又はＡＣＣ１２による処理と連係するためのフラグを書き込むプログラムを含む。
【０１９１】
プログラム１７０４は、プログラム１７１６においてＡＣＣ１２がアクセラレーション処理で用いるデータを、前もってＤＴＵ１３が、ＬＭ１５又はＤＳＭ１４に読み込む（プレロードする）プログラムである。このプログラム１７０４は、後述する並列化コンパイラによって最適化されたサイズのデータを、ＬＭ１５又はＤＳＭ１４にプレロードする。このプログラム１７０４は、プログラム１７１５の処理と連係するためのフラグを書き込むプログラムを含む。
【０１９２】
プログラム１７０５は、プログラム１７０２の処理で書き込まれたフラグを確認するプログラムである。
【０１９３】
プログラム１７０６は、プログラム１７２２においてＡＣＣ１２がアクセラレーション処理で用いるデータを、前もってＤＴＵ１３が、ＬＭ１５又はＤＳＭ１４にプレロードするプログラムである。このプログラム１７０６は、プログラム１７０４と同様に、後述する並列化コンパイラによって最適化されたサイズのデータを、ＬＭ１５又はＤＳＭ１４にプレロードする。このプログラム１７０６は、プログラム１７２１の処理と連係するためのフラグを書き込むプログラムを含む。
【０１９４】
プログラム１７０７は、プログラム１７１３においてＡＣＣ１２がＬＭ１５又はＤＳＭ１４等のメモリに格納したデータを、オンチップ集中共有メモリ４０又はオフチップ集中共有メモリ５０に格納（ポストストア）するプログラムである。このプログラム１７０７は、プログラム１７１３で書き込まれたフラグを確認するプログラムを含む。プログラム１７０８〜１７１０は、プログラム１７０５〜１７０７と同一なので、ここでは説明を省略する。
【０１９５】
プログラム１７１１は、プログラム１７０１の処理で書き込まれたフラグを確認するプログラムである。プログラム１７１２は、ＡＣＣ１２が、プロセッサ１１と連係して、定常的に繰り返しアクセラレーション処理を実行するプログラムである。なお、説明の便宜上、ここでアクセラレーション処理を実行する際に用いられるデータは、既にプレロードされているものとする。プログラム１７１３は、プログラム１７１２によるアクセラレーション処理の計算結果のデータを、ＬＭ１５又はＤＳＭ１４等のメモリに格納するプログラムである。
【０１９６】
プログラム１７１４は、プログラム１７０４の処理で書き込まれたフラグを確認するプログラムである。プログラム１７１５は、プログラム１７０４の処理においてＤＴＵ１３によってＬＭ１５又はＤＳＭ１４にプレロードされたデータを、ＡＣＣレジスタ１２２に読み込むプログラムである。プログラム１７１６は、ＡＣＣ１２が、ＡＣＣレジスタ１２２に読み込まれたデータに対して、アクセラレーション処理を実行するプログラムである。
【０１９７】
プログラム１７１７〜１７２５は、プログラム１７１１〜１７１６と同一なので、ここでは説明を省略する。
【０１９８】
以上の処理に示すように、プロセッサ１１とＡＣＣ１２とＤＴＵ１３とは、フラグセット及びフラグチェックを介してお互いに同期を取り、且つ、各々自律的に動作する。この第４の例のプログラムによれば、ＡＣＣ１２の処理を、ＤＴＵ１３と連係（チェイニング）して処理を実行する部分（例えばプログラム１７１６）と、プロセッサ１１と連係して繰り返し処理を実行する部分（例えばプログラム１７１８）とに分けた上で、処理を実行することができる。そのため、例えばＤＴＵ１３との間での連係処理では、プロセッサ１１を介さずにアクセラレーション処理を実行するので、プロセッサ１１による制御のオーバーヘッドを隠蔽することができる。
【０１９９】
また、プレロード処理によって、ＤＴＵ１３は、ＡＣＣ１２がアクセラレーション処理を実行中に、予め並列化コンパイラによって最適に分割されたサイズのＡＣＣ１２の次回の処理用のデータを、ＬＭ１５等に読み込んでいる。そのため、ＡＣＣ１２に連続してデータを供給することができる。一方、ポストストア処理によって、ＤＴＵ１３は、ＡＣＣ１２のアクセラレーション処理を実行中に、ＡＣＣ１２のアクセラレーション処理の計算結果のデータを、ＬＭ１５等から格納することができる。
【０２００】
図１８は、本発明の実施形態のマルチコアプロセッサシステム１において実行されるプログラムの第５の例の実行時の処理の流れを示す図である。ここでは、複数の異なるプロセッサコア１０−１、１０−２上のＤＴＵ１３−１、ＡＣＣ１２−１、ＤＴＵ１３−２が、フラグセット・チェックを介して連係する動作を説明する。
【０２０１】
第５の例に係るプログラムは、プロセッサコア１０−１のプロセッサ１１−１で実行されるプログラム１８０１、１８０２、ＤＴＵ１３−１で実行されるプログラム１８０３、１８０４、ＡＣＣ１２−１で実行されるプログラム１８０５、１８０６を含む。また、プロセッサコア１０−２のプロセッサ１１−２で実行されるプログラム１８１１、ＤＴＵ１３−２で実行されるプログラム１８１２、１８１３を含む。
【０２０２】
プロセッサコア１０−１用のプログラム１８０１〜１８０６は、後述する並列化コンパイラによって予め生成され、プロセッサコア１０−１のＬＭ１５、ＤＳＭ１４等のメモリ上の所定のアドレスに配置される。一方、プロセッサコア１０−２用のプログラム１８０７〜１８０９は、プロセッサコア１０−２のＬＭ１５、ＤＳＭ１４等のメモリ上の所定のアドレスに配置される。
【０２０３】
なお、プログラム１８０１は、プロセッサ１１−１がタスク１を実行するプログラムである。このプログラム１８０１は、タスク１を実行時に、ＤＴＵ１３−１によるプログラム１８０３の処理と連係するためのフラグを、プロセッサコア１０−１のＬＭ１５等に書き込むプログラムを含む。プログラム１８０２は、プロセッサ１１−１がタスク２を実行するプログラムである。
【０２０４】
プログラム１８０３は、プロセッサ１１−１によるプログラム１８０１の処理で書き込まれたフラグを確認するプログラムである。プログラム１８０４は、ＤＴＵ１３−１が、ＬＭ１５又はＤＳＭ１４に格納されたプロセッサ１１−１の計算結果のデータを、オフチップ集中共有メモリ５０に格納するプログラムである。このプログラム１８０４は、ＤＴＵ１３−２によるプログラム１８１２の処理と連係するためのフラグを、プロセッサコア１０−２のＤＳＭ１４に書き込むプログラムを含む。
【０２０５】
プログラム１８０５は、ＡＣＣ１２−１が、ＤＴＵ１３−２によるプログラム１８１２の処理で書き込まれたフラグを確認するプログラムである。プログラム１８０６は、ＡＣＣ１２−１が、ＤＴＵ１３−２によるプログラム１８１３によって転送されたデータに対して、アクセラレーション処理を実行するプログラムである。
【０２０６】
プログラム１８１１は、プロセッサ１１−２がタスク３を実行するプログラムである。プログラム１８１２は、ＤＴＵ１３−２が、ＤＴＵ１３−１によるプログラム１８０４の処理で書き込まれたフラグを確認するプログラムである。プログラム１８１３は、ＤＴＵ１３−２が、ＬＭ１５又はＤＳＭ１４に格納されたプロセッサ１１−２の計算結果のデータを、プロセッサコア１０−１のＤＳＭ１４に格納するプログラムである。このプログラム１８１３は、ＡＣＣ１２−１によるプログラム１８０５の処理と連係するためのフラグを、プロセッサコア１０−１のＤＳＭ１４に書き込むプログラムを含む。
【０２０７】
以上の処理に示すように、複数の異なるプロセッサコア１０−１、１０−２上のプロセッサ１１とＡＣＣ１２とＤＴＵ１３とは、フラグセット及びフラグチェックを介してお互いに同期を取り、且つ、各々自律的に動作することができる。
【０２０８】
本発明に関するこれまでの説明からわかるように、プロセッサコア１０−１、１０−２のように２つのプロセッサコア間のみならず、全てのプロセッサコア１０−１〜１０−ｎ（におけるプロセッサ１１、ＡＣＣ１２、ＤＴＵ１３）が、逐次処理プログラムから並列化コンパイラにより生成された各プロセッサコア用のプログラムを並行的に実行する場合にその処理の同期化を自律的に行うことを可能とする。そしてそのことによって、ＡＣＣ１２を追加しても新たに命令セットを拡張する必要もなく、しかも同期化に伴うプロセッサ１１、ＡＣＣ１２、ＤＴＵ１３の関与、つまりオーバーヘッドを大幅に減らすことにより、効率的な演算処理を実行することができる。
【０２０９】
図１９は、本発明の実施形態の並列化コンパイラが実行する処理のフローチャートである。ここでは、本発明の実施形態のＡＣＣを含むプロセッサシステム上で実行処理される並列化プログラムを逐次処理プログラムから生成される並列化コンパイラが計算機上で実行する処理を説明する。コンパイラとは、一般的にはコンパイル対象のソースプログラムを、いわゆる計算機が実行可能なプログラム（機械語のプログラム等）に変換するソフトウェアであるが、本発明で述べる並列化コンパイラは前述のように逐次処理プログラムのソースコードから並列化プログラムを生成するコンパイラを意味する。
【０２１０】
まず、並列化コンパイラは、ソースプログラムの字句を解析し、プログラムの構文を解析する（１９０１）。なお、本実施形態では、コンパイラがプログラムを解析しているが、プログラマ（人）がプログラムを解析してもよい。また、プログラムの作成時に、本実施形態で必要なプログラムの情報を作成してもよい。
【０２１１】
次に、並列化コンパイラは、構文の解析結果に基づいて、階層的なタスク、すなわち、プログラムの階層的マクロタスクによる表現を生成する（１９０２）。ここでは、プロセッサ１１用のタスク、ＡＣＣ１２用のタスク等からなる粗粒度タスク（マクロタスク）を生成する。なお、生成されたマクロタスクがループイタレーションレベルの並列処理や逐次処理が可能な場合、ＬＭ１５等のメモリサイズを考慮して、異なる複数のマクロタスクに分割する（ループ整合分割）。
【０２１２】
その後、生成されたタスク間の依存関係（制御フロー）を解析し（１９０３）、タスク間のデータ依存を解析し（１９０４）、各タスクによってアクセスされるデータの範囲を解析する（１９０５）。
【０２１３】
その後、プログラムの解析結果を使用して、プログラムが最も早く実行できる条件を解析し（１９０６）、最早実行条件の解析結果を使用して、並列処理区間やタスクが割り当てられるプロセッサ数を決定し、マクロタスクグラフを生成する。
【０２１４】
その後、各タスクの実行順序を決定するタスクスケジューリングを実行する（１９０７）。ここで実行されるタスクスケジューリングは、メモリ管理・タスクスケジューリング、データ転送スケジューリング、及び低消費電力スケジューリングを実行する。
【０２１５】
メモリ管理・タスクスケジューリングとは、各プロセッサコア１０−１〜１０−ｎのＬＭ１５を介した効率的なデータの授受を実行するためのスケジューリングである。
【０２１６】
データ転送スケジューリングとは、図１７の例に示すプレロードやポストストアのように、各プロセッサコア１０−１〜１０−ｎにおけるデータ転送、及びマルチコアプロセッサシステム１全体におけるデータ転送の最適化を実現するためのスケジューリングである。
【０２１７】
低消費電力スケジューリングとは、プロセッサ１１、ＡＣＣ１２、ＤＴＵ１３が待ち状態になる場合に、待ち時間に応じてクロック周波数を低周波数に変化させたり、電源を遮断させたりする電力制御を実現するためのスケジューリングである。
【０２１８】
その後、ステップ１９０７によって実行されたタスクスケジューリングに基づいて、マルチコアプロセッサシステム１において実行可能な並列プログラムを生成する（１９０８）。この並列プログラムはプロセッサ１１用のタスク、ＡＣＣ１２用のタスク、ＤＴＵ１３用のタスクの命令文を含む。ここで生成される並列プログラムでは、互いに依存のあるプロセッサ１１用のタスク、ＡＣＣ１２用のタスク、及びＤＴＵ１３用のタスクの命令文には、フラグセット文、フラグチェック文が挿入される。これらＡＣＣ１２用のタスク、ＤＴＵ１３用のタスクの命令文、及びフラグ領域はＤＳＭ１４、ＬＭ１５、オンチップ集中共有メモリ４０、オフチップ集中共有メモリのうちの少なくともいずれか一以上のメモリに配置される。
【０２１９】
なお、フラグの値に特定の動作を関連付け、フラグチェック後の動作を指定することもできる。例えば、ＡＣＣ１２用のフラグチェック文を、チェックしたフラグの値が特定の値である場合、制御レジスタファイル１２４の値を確認し、プロセッサ１１によって指定される命令列（タスク）を実行するように構成する。
【０２２０】
以上に示すように、並列化コンパイラは、各プロセッサ１１、ＡＣＣ１２、ＤＴＵ１３用に別々のプログラムを生成する。その後、並列化コンパイラは、生成されたプログラムを、各プロセッサコア１０−１〜１０−ｎのＬＭ１５、ＤＳＭ１４、オンチップ集中共有メモリ４０、オフチップ集中共有メモリ５０上の所定のアドレスに格納する。
【０２２１】
以上、本発明の実施形態について説明したが、上記実施形態は本発明の適用例の一つを示したものであり、本発明の技術的範囲を上記実施形態の具体的構成に限定する趣旨ではない。本発明の要旨を逸脱しない範囲において種々変更可能である。
【０２２２】
例えば、本発明の実施形態では、プロセッサ１１と、ＡＣＣ１２と、ＤＴＵ１３とがフラグセット・チェックを介して互いに同期する動作について説明してきたが、この場合に限らない。各装置は、フラグセット・チェック以外の方法、すなわち自装置の処理の完了を示す通知を発行及び確認することによって、互いに同期してもよい。
【図１】
2013065687.tif 000003
【図２】
2013065687.tif 000004
【図３】
2013065687.tif 000005
【図４】
2013065687.tif 000006
【図５】
2013065687.tif 000007
【図６】
2013065687.tif 000008
【図７】
2013065687.tif 000009
【図８】
2013065687.tif 000010
【図９】
2013065687.tif 000011
【図１０】
2013065687.tif 000012
【図１１】
2013065687.tif 000013
【図１２】
2013065687.tif 000014
【図１３】
2013065687.tif 000015
【図１４】
2013065687.tif 000016
【図１５】
2013065687.tif 000017
【図１６】
2013065687.tif 000018
【図１７】
2013065687.tif 000019
【図１８】
2013065687.tif 000020
【図１９】
2013065687.tif 000021
【手続補正書】
【提出日】平成25年9月4日(2013.9.4)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
演算処理を行うプロセッサと、メモリと、前記プロセッサ及び前記メモリに結合網を介して接続されたアクセラレータとを有するプロセッサコアを半導体チップ上に備えたプロセッサシステムであって、
前記メモリは、前記プロセッサ及び前記アクセラレータが実行するタスクを予め記憶する命令領域と、前記プロセッサと前記アクセラレータとの間で各々の動作を同期させるためのフラグを記憶する同期フラグ領域と、前記プロセッサ及び前記アクセラレータが処理に用いるデータ及び処理後のデータが格納されるデータ領域とを有し、
前記アクセラレータは、
前記プロセッサシステムの起動時に、前記命令領域に記憶された前記アクセラレータが実行するタスク中の命令を読み込み、
当該読み込んだ命令に従って動作し、
当該読み込んだ命令がフラグチェック命令である場合には、当該フラグチェック命令が前記プロセッサによる所定の処理の完了を示すフラグが前記同期フラグ領域に書き込まれたことを確認すると、前記プロセッサが他の処理を実行中であっても、前記データ領域に書き込まれたデータを読み込んで当該フラグに対応して、当該読み込んだ命令を実行することによってアクセラレーション処理を開始し、
前記アクセラレーション処理の完了後に、前記アクセラレータが読み込んだ命令が、前記アクセラレーション処理後のデータを前記データ領域に格納し、さらに前記アクセラレータが読み込んだフラグセット命令が当該アクセラレーション処理の完了を示すフラグを前記同期フラグ領域に書き込み、
前記プロセッサは、
前記プロセッサシステムの起動時に、前記命令領域に記憶された前記プロセッサが実行するタスク中の命令を読み込み、
当該読み込んだ命令に従って動作し、
当該読み込んだ命令がフラグチェック命令である場合には、当該フラグチェック命令が前記アクセラレーション処理の完了を示すフラグが前記同期フラグ領域に書き込まれたことを確認すると、前記アクセラレータが他の処理を実行中であっても、当該フラグに対応して、当該読み込んだ命令を開始することを特徴とするプロセッサシステム。
【請求項２】
請求項１に記載のプロセッサシステムであって、
前記アクセラレータ及び前記プロセッサの各々は、自身が実行する処理の進行状況に応じて、後続して実行すべき命令がそれぞれ対応する異なる複数のフラグを、前記同期フラグ領域に書き込み、後続して命令を実行する前記アクセラレータ及び前記プロセッサの各々が前記同期フラグ領域に書き込まれたフラグを確認し、前記対応する命令を実行することを特徴とするプロセッサシステム。
【請求項３】
請求項１又は２に記載のプロセッサシステムであって、
前記メモリは、前記アクセラレータ及び前記プロセッサがアクセス可能なローカルメモリ、及び他のプロセッサコアもアクセス可能な分散共有メモリの少なくとも一方を含み、
前記プロセッサコアは、前記メモリ間でデータを転送するデータ転送ユニットをさらに有し、
前記同期フラグ領域は、データ転送ユニットと、プロセッサ及びアクセラレータとの間でも各々の動作を同期させるためのフラグを記憶する領域を含み、
前記命令領域は、データ転送ユニットが実行するタスクをあらかじめ記憶する領域を含み
前記アクセラレータは、
前記データ転送ユニットによる所定のデータ転送処理の完了を示すフラグが前記同期フラグ領域に書き込まれたことを確認すると、前記データ転送ユニットが他のデータ転送処理を実行中であっても、前記データ領域に書き込まれたデータを読み込んで、当該フラグに対応する命令を実行することによってアクセラレーション処理を開始し、
前記アクセラレーション処理の完了後に、前記アクセラレーション処理後のデータを前記データ領域に格納し、さらに当該アクセラレーション処理の完了を示すフラグを前記同期フラグ領域に書き込み、
前記データ転送ユニットは、
前記アクセラレーション処理の完了を示すフラグが前記同期フラグ領域に書き込まれたことを確認すると、前記アクセラレータが他の処理を実行中であっても、当該フラグに対応する命令を実行することによってデータ転送処理を開始することを特徴とするプロセッサシステム。
【請求項４】
演算処理を行うプロセッサと、メモリと、前記メモリ間でデータを転送するデータ転送ユニットと、前記プロセッサ、前記メモリ及び前記データ転送ユニットに結合網を介して接続されたアクセラレータとを構成要素として有するプロセッサコアを半導体チップ上に備えたプロセッサシステムであって、
前記メモリは、前記プロセッサ及び前記データ転送ユニット及び前記アクセラレータの各構成要素がそれぞれ実行するタスクを予め記憶する命令領域と、前記各構成要素間で各々の動作を同期させるためのフラグを記憶する同期フラグ領域と、前記各構成要素が処理に用いるデータ及び処理後のデータが格納されるデータ領域とを有し、
前記各構成要素は、前記プロセッサシステムの起動時に、前記命令領域に記憶された前記各構成要素に対応したタスク中の命令を読み込み、当該読み込んだ命令に従って動作し、
前記各構成要素のうちの一構成要素は、前記一構成要素が読み込んだ命令により、所定の処理を完了するとともに、処理後のデータを前記データ領域に格納し、さらに当該処理の完了を示すフラグを前記同期フラグ領域に書き込み、
前記一構成要素とは異なる他の構成要素は、前記他の構成要素が読み込んだ命令により、当該フラグが書き込まれたことを確認すると、前記他の構成要素以外の構成要素が他の処理を実行中であっても、前記他の構成要素が前記データ領域に格納された前記処理後のデータを読み込んで当該フラグに対応して、前記他の構成要素が読み込んだ命令の実行を開始し、当該命令の実行完了後に、当該命令の実行後のデータを前記データ領域に格納し、さらに当該命令の完了を示すフラグを前記同期フラグ領域に書き込みむようにした動作を、各構成要素に対応したタスクに従って各構成要素が実行することを特徴とするプロセッサシステム。
【請求項５】
請求項１から４のいずれか一つに記載に記載のプロセッサシステムであって、
前記プロセッサ、前記アクセラレータ、前記データ転送ユニットの各構成要素が実行する命令は、前記プロセッサシステムで実行されるべきプログラムの解析によって得られる情報を参照して、前記プログラムから生成されたもので、前記生成された命令は前記フラグと対応付けられていることを特徴とするプロセッサシステム。
【請求項６】
請求項１から５のいずれか一つに記載に記載のプロセッサシステムであって、
前記アクセラレータは、アクセラレーション処理を実行する処理部と、前記処理部によって処理されるデータを一時的に格納する内部記憶領域と、前記内部記憶領域と前記メモリとの間でデータ転送を実行するロード・ストアユニットとを有し、
前記ロード・ストアユニットは、前記内部記憶領域と前記メモリとの間におけるデータ転送の実行状況に応じて、前記同期フラグ領域にフラグを書き込む及び前記同期フラグ領域にフラグが書き込まれたことを確認するロード・ストアユニット側フラグ書込・確認器を有することを特徴とするプロセッサシステム。
【請求項７】
請求項１から５のいずれか一つに記載に記載のプロセッサシステムであって、
前記アクセラレータは、アクセラレーション処理を実行する処理部と、前記処理部によって処理されるデータを一時的に格納する内部記憶領域とを有し、
前記処理部は、前記内部記憶領域と前記処理部との間におけるデータ転送の実行状況に応じて、前記同期フラグ領域にフラグを書き込む及び前記同期フラグ領域にフラグが書き込まれたことを確認する処理部側フラグ書込・確認器を有することを特徴とするプロセッサシステム。
【請求項８】
請求項１から５のいずれか一つに記載に記載のプロセッサシステムであって、
前記アクセラレータは、アクセラレーション処理を実行する処理部と、前記処理部によって処理されるデータを一時的に格納する内部記憶領域と、前記内部記憶領域と前記メモリとの間でデータ転送を実行するロード・ストアユニットとを備え、
前記処理部は、当該処理部による処理の実行状況に応じて、前記同期フラグ領域にフラグを書き込む及び前記同期フラグ領域にフラグが書き込まれたことを確認する処理部側フラグ書込・確認器を有し、
前記ロード・ストアユニットは、当該ロード・ストアユニットによる処理の実行状況に応じて、前記同期フラグ領域にフラグを書き込む及び前記同期フラグ領域にフラグが書き込まれたことを確認するロード・ストアユニット側フラグ書込・確認器を有することを特徴とするプロセッサシステム。
【請求項９】
請求項１から５のいずれか一つに記載に記載のプロセッサシステムであって、
前記アクセラレータは、アクセラレーション処理を実行する処理部と、前記処理部によって処理されるデータを一時的に格納する内部記憶領域と、前記内部記憶領域と前記メモリとの間でデータ転送を実行するロード・ストアユニットと、前記処理部と前記ロード・ストアユニットとの動作を同期させるためのフラグを記憶するフラグ授受レジスタとを備え、
前記処理部は、当該処理部による処理の実行状況に応じて、前記同期フラグ領域又は前記フラグ授受レジスタにフラグを書き込む、及び、前記同期フラグ領域又は前記フラグ授受レジスタにフラグが書き込まれたことを確認する処理部側フラグ書込・確認器を有し、
前記ロード・ストアユニットは、当該ロード・ストアユニットによる処理の実行状況に応じて、前記同期フラグ領域又は前記フラグ授受レジスタにフラグを書き込む、及び、前記同期フラグ領域又は前記フラグ授受レジスタにフラグが書き込まれたことを確認するロード・ストアユニット側フラグ書込・確認器を有することを特徴とするプロセッサシステム。
【請求項１０】
請求項１から５のいずれか一つに記載に記載のプロセッサシステムであって、
前記プロセッサシステムは、複数の前記プロセッサコアを備えることを特徴とするプロセッサシステム。
【請求項１１】
請求項１０に記載に記載のプロセッサシステムであって、
前記プロセッサシステムは、複数の前記プロセッサコアによって共有される前記半導体チップ上のオンチップ集中共有メモリ、及び、複数の前記プロセッサコアによって共有される前記半導体チップ外部のオフチップ集中共有メモリのうち少なくとも一方を備えることを特徴とするプロセッサシステム。
【請求項１２】
（削除）
【請求項１３】
請求項３又は４に記載のプロセッサシステムであって、
前記メモリは、さらに、前記アクセラレータ内に設けられたメモリ及びレジスタの少なくとも一方を含み、
前記データ転送ユニットは、
前記アクセラレーション処理の完了を示すフラグが前記同期フラグ領域に書き込まれたことを確認すると、前記プロセッサ又は前記アクセラレータが他の処理を実行中であっても、前記アクセラレータによるアクセラレーション処理の計算結果のデータを、前記アクセラレータから前記メモリに格納し、
前記アクセラレータによる次回のアクセラレーション処理で用いられるデータを、前記プロセッサ又は前記アクセラレータが他の処理を実行中であっても、前記メモリから前記アクセラレータに前もって読み込むロード処理を実行し、
前記ロード処理の完了を示すフラグを前記同期フラグ領域に書き込むことを特徴とするプロセッサシステム。
【請求項１４】
演算処理を行うプロセッサと、データを記憶するメモリとに結合網を介して接続されるアクセラレータとで構成されるプロセッサシステムに含まれるアクセラレータであって、
前記メモリは、前記プロセッサ及び前記アクセラレータが実行するタスクを予め記憶する命令領域と、前記プロセッサと前記アクセラレータとの間で各々の動作を同期させるためのフラグを記憶する同期フラグ領域と、前記プロセッサ及び前記アクセラレータが処理に用いるデータ及び処理後のデータが格納されるデータ領域とを有し、
前記アクセラレータは、
アクセラレーション処理を実行する処理部と、前記処理部によって処理されるデータを一時的に格納する内部記憶領域とを備え、
前記プロセッサシステムの起動時に、前記命令領域に記憶された前記アクセラレータが実行するタスク中の命令を読み込み、
当該読み込んだ命令に従って動作し、
当該読み込んだ命令がフラグチェック命令である場合には、当該フラグチェック命令が前記プロセッサによる所定の処理の完了を示すフラグが前記同期フラグ領域に書き込まれたことを確認すると、前記プロセッサが他の処理を実行中であっても、前記処理部によって当該フラグに対応して、当該読み込んだ命令を実行することによってアクセラレーション処理を開始し、
前記アクセラレーション処理の完了後に、当該読み込んだ命令が、前記アクセラレーション処理の計算結果のデータを前記内部記憶領域に書き込むとともに、当該アクセラレーション処理の完了を示すフラグを前記同期フラグ領域に書き込むことを特徴とするアクセラレータ。
【請求項１５】
請求項１４に記載のアクセラレータであって、
前記プロセッサ及び前記アクセラレータが実行するタスクは、前記プロセッサシステムで実行されるべきプログラムの解析によって得られる情報を参照して、前記プログラムから生成されたもので、前記生成された命令は前記フラグと対応付けられていることを特徴とするアクセラレータ。
【請求項１６】
請求項１４又は１５に記載のアクセラレータであって、
前記アクセラレータは、自身が実行する処理の進行状況に応じて、後続して実行すべき命令がそれぞれ対応する異なる複数のフラグを、前記同期フラグ領域に書き込むことを特徴とするアクセラレータ。
【請求項１７】
（削除）
【請求項１８】
請求項１３から１６のいずれか一つに記載のアクセラレータであって、
前記アクセラレータは、前記内部記憶領域と前記メモリとの間でデータ転送を実行するロード・ストアユニットとを備え、
前記ロード・ストアユニットは、前記内部記憶領域と前記メモリとの間におけるデータ転送の実行状況に応じて、前記同期フラグ領域にフラグを書き込む及び前記同期フラグ領域にフラグが書き込まれたことを確認するロード・ストアユニット側フラグ書込・確認器を有することを特徴とするアクセラレータ。
【請求項１９】
請求項１８に記載のアクセラレータであって、
前記処理部は、当該処理部による処理の実行状況に応じて、前記同期フラグ領域にフラグを書き込む及び前記同期フラグ領域にフラグが書き込まれたことを確認する処理部側フラグ書込・確認器を有することを特徴とするアクセラレータ。
【請求項２０】
請求項１９に記載のアクセラレータであって、
前記アクセラレータは、前記処理部と前記ロード・ストアユニットとの動作を同期させるためのフラグを記憶するフラグ授受レジスタを備え、
前記処理部側フラグ書込・確認器は、当該処理部による処理の実行状況に応じて、前記フラグ授受レジスタにフラグを書き込む及び前記フラグ授受レジスタにフラグが書き込まれたことを確認し、
前記ロード・ストアユニット側フラグ書込・確認器は、当該ロード・ストアユニットによる処理の実行状況に応じて、前記フラグ授受レジスタにフラグを書き込む及び前記フラグ授受レジスタにフラグが書き込まれたことを確認することを特徴とするアクセラレータ。
【請求項２１】
請求項１３から１６のいずれか一つに記載のアクセラレータであって、
前記処理部は、前記内部記憶領域と前記処理部との間におけるデータ転送の実行状況に応じて、前記同期フラグ領域にフラグを書き込む及び前記同期フラグ領域にフラグが書き込まれたことを確認する処理部側フラグ書込・確認器を有することを特徴とするアクセラレータ。
【手続補正２】
【補正対象書類名】明細書
【補正対象項目名】０００６
【補正方法】変更
【補正の内容】
【０００６】
るマルチコアプロセッサシステムを提供することを目的とする。
課題を解決するための手段
［００２８］
上記課題を解決するために、例えば特許請求の範囲に記載の構成を採用する。
［００２９］
本願は上記課題を解決する手段を複数含んでいるが、その一例を挙げるならば、演算処理を行うプロセッサと、メモリと、前記プロセッサ及び前記メモリに結合網を介して接続されたアクセラレータ（ＡＣＣ）とを有するプロセッサコアを半導体チップ上に備えたプロセッサシステムであって、前記メモリは、前記プロセッサ及び前記アクセラレータが実行するタスクを予め記憶する命令領域と、前記プロセッサと前記アクセラレータとの間で各々の動作を同期させるためのフラグを記憶する同期フラグ領域と、前記プロセッサ及び前記アクセラレータが処理に用いるデータ及び処理後のデータが格納されるデータ領域とを有し、前記アクセラレータは、前記プロセッサシステムの起動時に、前記命令領域に記憶された前記アクセラレータが実行するタスク中の命令を読み込み、当該読み込んだ命令に従って動作し、当該読み込んだ命令がフラグチェック命令である場合には、当該フラグチェック命令が前記プロセッサによる所定の処理の完了を示すフラグが前記同期フラグ領域に書き込まれたことを確認すると、前記プロセッサが他の処理を実行中であっても、前記データ領域に書き込まれたデータを読み込んで当該フラグに対応して、当該読み込んだ命令を実行することによってアクセラレーション処理を開始し、前記アクセラレーション処理の完了後に、前記アクセラレータが読み込んだ命令が前記アクセラレーション処理後のデータを前記データ領域に格納し、さらに前記アクセラレータが読み込んだフラグセット命令が当該アクセラレーション処理の完了を示すフラグを前記同期フラグ領域に書き込み、前記プロセッサは、前記プロセッサシステムの起動時に、前記命令領域に記憶された前記プロセッサが実行するタスク中の命令を読み込み、当該読み込んだ命令に従って動作し、当該読み込んだ命令がフラグチェック命令である場合には、当該フラグチェック命令が前記アクセラレーション処理の完了を示すフラグが前記同期フラグ領域に書き込まれたことを確認すると、前記アクセラレータが他の処理を実行中であっても、当該フラグに対応して、当該読み込んだ命令の実行を開始することを特徴とする。
発明の効果
［００３０］
本発明の一実施形態によれば、プロセッサ及びＡＣＣが互いの同期制御に時間を費やすことなく、それぞれ自律的に動作することができるので、ＡＣＣを新たに接続する際にプロセッサに対して命令セットを拡張することなく
【国際調査報告】
2013065687.tif 000022
2013065687.tif 000023
2013065687.tif 000024
2013065687.tif 000025
2013065687.tif 000026
2013065687.tif 000027
2013065687.tif 000028
2013065687.tif 000029