(57)【特許請求の範囲】
【請求項１】
プロセス間通信を含む一連の命令実行プロセスを処理するための複数のコアを備えるプロセッサであって、
該複数のコアのうちの少なくとも二つのコアに接続されコア間割込信号ｆｉｎｔを伝達可能な信号路を有しており、
前記少なくとも二つのコアそれぞれが、
ＦＩＦＯ深さ値を格納するためのコア間割込みカウント設定レジスタ（ＩＣＳＲ）と、ここで、前記ＦＩＦＯ深さ値は、当該コアが担うプロセスと別のコアが担うプロセスとの間のプロセス間通信のために用いられる先入れ先出しバッファ（ＦＩＦＯ）のエントリー数を表しているとともに、処理中のプロセス間通信を含む前記一連の命令実行プロセスの範囲における上限値となるものであり、
前記ＦＩＦＯの使用中のエントリー数を示す値を格納するためのＦＩＦＯカウンタと
を有しており、
前記少なくとも二つのコアそれぞれは、
前記少なくとも二つのコアのうちの別のコアから受信したコア間割込信号ｆｉｎｔ、前記ＦＩＦＯカウンタの値、および前記ＩＣＳＲの値の少なくともいずれかに基づいて、当該コアと前記別のコアとの間でプロセス間通信を行なうためのコア間割込同期機能と、
当該コア自体による前記ＦＩＦＯへのアクセスの完了時に、前記別のコアがそれ自体のプロセスの制御に利用するコア間割込信号ｆｉｎｔを発行して送るコア間割込生成機能と、
前記ＦＩＦＯカウンタの値を、前記コア間割込信号ｆｉｎｔの受信または当該コア自体によるコア間割込信号ｆｉｎｔの発行に応じてインクリメントまたはデクリメントさせるＦＩＦＯカウンタ更新機能と
が処理可能なように実装されているものであり、
前記ＦＩＦＯが、前記少なくとも二つのコアのうちのいずれか一のコアである下流側コアが処理すべき要素として、前記少なくとも二つのコアのうちの該下流側コアとは別のコアである上流側コアからの要素を受け付ける、該上流側コアにとっての出力ＦＩＦＯとなっており、
前記上流側コアが備える前記ＩＣＳＲ、および、前記上流側コアが備える前記ＦＩＦＯカウンタが、前記出力ＦＩＦＯのための値を格納可能になっており、
前記上流側コアに実装された前記ＦＩＦＯカウンタ更新機能は、前記出力ＦＩＦＯのための前記ＦＩＦＯカウンタの値を、前記下流側コアからの入力方向コア間割込信号ｆｉｉｎｔを受信したときデクリメントし、該下流側コアに対する出力方向コア間割込信号ｆｏｉｎｔを送信したときインクリメントする機能を含んでいるものであり、
前記上流側コアに実装された前記コア間割込同期機能は、前記出力ＦＩＦＯのための前記ＦＩＦＯカウンタの値と前記ＩＣＳＲの値とを比較し、前記出力ＦＩＦＯが満杯である場合、前記上流側コア自体によるプロセスを待機状態にするとともに、前記下流側コアからの入力方向コア間割込信号ｆｉｉｎｔを前記上流側コアがその後に受信することにより、前記待機状態を解除して前記上流側コアによるプロセスを再開させる待機制御機能を含んでいるものであり、  
これにより、前記ＦＩＦＯを利用するプロセス間通信を含む前記一連の命令実行プロセスを、前記少なくとも二つのコアのプロセスを同期させることにより実行するプロセッサ。
【請求項２】
前記待機制御機能は、実行される一の命令に待機制御用プリフィクスＦＯＷＡＩＴを明示することにより、当該一の命令のプロセスを対象として作用するものである、請求項１に記載のプロセッサ。
【請求項３】
プロセス間通信を含む一連の命令実行プロセスを処理するための複数のコアを備えるプロセッサであって、
該複数のコアのうちの少なくとも二つのコアに接続されコア間割込信号ｆｉｎｔを伝達可能な信号路を有しており、
前記少なくとも二つのコアそれぞれが、
ＦＩＦＯ深さ値を格納するためのコア間割込みカウント設定レジスタ（ＩＣＳＲ）と、ここで、前記ＦＩＦＯ深さ値は、当該コアが担うプロセスと別のコアが担うプロセスとの間のプロセス間通信のために用いられる先入れ先出しバッファ（ＦＩＦＯ）のエントリー数を表しているとともに、処理中のプロセス間通信を含む前記一連の命令実行プロセスの範囲における上限値となるものであり、
前記ＦＩＦＯの使用中のエントリー数を示す値を格納するためのＦＩＦＯカウンタと
を有しており、
前記少なくとも二つのコアそれぞれは、
前記少なくとも二つのコアのうちの別のコアから受信したコア間割込信号ｆｉｎｔ、前記ＦＩＦＯカウンタの値、および前記ＩＣＳＲの値の少なくともいずれかに基づいて、当該コアと前記別のコアとの間でプロセス間通信を行なうためのコア間割込同期機能と、
当該コア自体による前記ＦＩＦＯへのアクセスの完了時に、前記別のコアがそれ自体のプロセスの制御に利用するコア間割込信号ｆｉｎｔを発行して送るコア間割込生成機能と、
前記ＦＩＦＯカウンタの値を、前記コア間割込信号ｆｉｎｔの受信または当該コア自体によるコア間割込信号ｆｉｎｔの発行に応じてインクリメントまたはデクリメントさせるＦＩＦＯカウンタ更新機能と
が処理可能なように実装されているものであり、
前記ＦＩＦＯが、前記少なくとも二つのコアのうちのいずれか一のコアである下流側コアが処理すべき要素として、前記少なくとも二つのコアのうちの該下流側コアとは別のコアである上流側コアからの要素を受け付ける、該下流側コアにとっての入力ＦＩＦＯとなっており、
前記下流側コアが備える前記ＩＣＳＲ、および、前記下流側コアが備える前記ＦＩＦＯカウンタが、前記入力ＦＩＦＯのための値を格納可能になっており、
前記下流側コアに実装された前記ＦＩＦＯカウンタ更新機能は、前記入力ＦＩＦＯのための前記ＦＩＦＯカウンタの値を、前記上流側コアからの出力方向コア間割込信号ｆｏｉｎｔを受信したときインクリメントし、該上流側コアに対する入力方向コア間割込信号ｆｉｉｎｔを送信したときデクリメントする機能を含んでいるものであり、
前記下流側コアに実装されたコア間割込同期機能は、前記入力ＦＩＦＯのための前記ＦＩＦＯカウンタの値と前記入力ＦＩＦＯが空であることを示す値とを比較し、前記入力ＦＩＦＯが空である場合、前記下流側コア自体によるプロセスを待機状態にするとともに、前記上流側コアからの出力方向コア間割込信号ｆｏｉｎｔを前記下流側コアがその後に受信することにより、前記待機状態を解除して前記下流側コアによるプロセスを再開させる進行制御機能を含んでいるものであり、
これにより、前記ＦＩＦＯを利用するプロセス間通信を含む前記一連の命令実行プロセスを、前記少なくとも二つのコアのプロセスを同期させることにより実行するプロセッサ。
【請求項４】
前記進行制御機能は、実行される一の命令に進行制御用プリフィクスＦＩＳＹＮＣを明示することにより、当該一の命令のプロセスを対象として作用するものである、請求項３に記載のプロセッサ。
【請求項５】
前記コア間割込生成機能は、実行される一の命令に割込生成用プリフィクスＦＩＮＴを明示することにより、当該一の命令のプロセスのための前記ＦＩＦＯへのアクセス完了時に実行されるものである、請求項１または請求項３に記載のプロセッサ。
【請求項６】
前記複数のコアは、前記少なくとも二つのコアに少なくとも一つのコアを加えた少なくとも三つのコアを含んでおり、
該少なくとも一つのコアは、前記ＩＣＳＲと前記ＦＩＦＯカウンタとを有するとともに、前記コア間割込同期機能、前記コア間割込生成機能、および前記ＦＩＦＯカウンタ更新機能とを処理可能なように実装されており、
前記少なくとも三つのコアに含まれる第１対のコアのうちのいずれかのコアの前記ＩＣＳＲである第１のＩＣＳＲが、該第１対のコアが担うプロセスの間のプロセス間通信のために用いられる第１のＦＩＦＯのための値を含んでおり、
前記少なくとも三つのコアに含まれる第２対のコアのうちのいずれかのコアの前記ＩＣＳＲである第２のＩＣＳＲが、該第２対のコアが担うプロセスの間のプロセス間通信のために用いられる第２のＦＩＦＯのための値を含んでおり、
前記第１のＩＣＳＲの値を変化させて前記第１のＦＩＦＯのエントリー数が増加され、かつ、前記第２のＩＣＳＲの値を変化させて前記第２のＦＩＦＯのエントリー数が削減される、請求項１または請求項３に記載のプロセッサ。
【請求項７】
各コアの前記ＩＣＳＲが、当該コアがアクセスしうるＦＩＦＯのために、前記ＦＩＦＯ深さ値に対応させて、該ＦＩＦＯが当該コアにとっての入力ＦＩＦＯであるか出力ＦＩＦＯであるかを示す方向ビットを有している、請求項１または請求項３に記載のプロセッサ。
【請求項８】
前記複数のコアは、前記少なくとも二つのコアに少なくとも一つのコアを加えた少なくとも三つのコアを含んでおり、
該少なくとも一つのコアは、前記ＩＣＳＲと前記ＦＩＦＯカウンタとを有するとともに、前記コア間割込同期機能、前記コア間割込生成機能、および前記ＦＩＦＯカウンタ更新機能とを処理可能なように実装されており、
前記信号路が複数の系統の信号路を含んでおり、
前記信号路の各系統が、前記少なくとも三つのコアのそれぞれに接続されており、
前記信号路の一の系統が、前記少なくとも三つのコアそれぞれにとっての入力ＦＩＦＯに関する入力方向コア間割込信号ｆｉｉｎｔを伝達するものであり、
前記信号路の他の系統が、前記少なくとも三つのコアそれぞれにとっての出力ＦＩＦＯに関する出力方向コア間割込信号ｆｏｉｎｔを伝達するものである、請求項１または請求項３に記載のプロセッサ。
【請求項９】
前記ＦＩＦＯは、前記プロセッサとは別の半導体チップのメモリ、または、前記プロセッサと同一のオンチップメモリのいずれかを利用して構成されるものである、請求項１または請求項３に記載のプロセッサ。
【請求項１０】
プロセス間通信を含む一連の命令実行プロセスを処理するための複数のコアを備えるプロセッサであって、
該複数のコアのうちの少なくとも二つのコアに接続されコア間割込信号ｆｉｎｔを伝達可能な信号路を有しており、
前記少なくとも二つのコアそれぞれが、
ＦＩＦＯ深さ値を格納するためのコア間割込みカウント設定レジスタ（ＩＣＳＲ）と、ここで、前記ＦＩＦＯ深さ値は、当該コアが担うプロセスと別のコアが担うプロセスとの間のプロセス間通信のために用いられる先入れ先出しバッファ（ＦＩＦＯ）のエントリー数を表しているとともに、処理中のプロセス間通信を含む前記一連の命令実行プロセスの範囲における上限値となるものであり、
前記ＦＩＦＯの使用中のエントリー数を示す値を格納するためのＦＩＦＯカウンタと
を有しており、
前記少なくとも二つのコアそれぞれは、
前記少なくとも二つのコアのうちの別のコアから受信したコア間割込信号ｆｉｎｔ、前記ＦＩＦＯカウンタの値、および前記ＩＣＳＲの値の少なくともいずれかに基づいて、当該コアと前記別のコアとの間でプロセス間通信を行なうためのコア間割込同期機能と、
当該コア自体による前記ＦＩＦＯへのアクセスの完了時に、前記別のコアがそれ自体のプロセスの制御に利用するコア間割込信号ｆｉｎｔを発行して送るコア間割込生成機能と、
前記ＦＩＦＯカウンタの値を、前記コア間割込信号ｆｉｎｔの受信または当該コア自体によるコア間割込信号ｆｉｎｔの発行に応じてインクリメントまたはデクリメントさせるＦＩＦＯカウンタ更新機能と
が処理可能なように実装されているものであり、
前記少なくとも二つのコアそれぞれが共有レジスタバンクをさらに備え、一のコアの共有レジスタバンクが他のコアの共有レジスタバンクを参照しており、
該共有レジスタバンクの各バンクが前記ＦＩＦＯの各エントリーを構成可能なものであり、
これにより、プロセス間通信を含む前記一連の命令実行プロセスが、前記共有レジスタバンクによる前記ＦＩＦＯを利用し、前記少なくとも二つのコアのプロセスを同期させることにより実行されるプロセッサ。
【請求項１１】
前記複数のコアは、前記少なくとも二つのコアに少なくとも一つのコアを加えた少なくとも三つのコアを含んでおり、
該少なくとも一つのコアは、前記ＩＣＳＲと前記ＦＩＦＯカウンタとを有するとともに、前記コア間割込同期機能、前記コア間割込生成機能、および前記ＦＩＦＯカウンタ更新機能とを処理可能なように実装されており、
前記共有レジスタバンクは、前記少なくとも三つのコアそれぞれの共有レジスタバンクが他の二つのコアの共有レジスタバンクを参照しており、
各コアの共有レジスタバンクのバンクが、区別されるバンクを通じて、区別される他のコアの共有レジスタバンクを参照するものである、請求項１０に記載のプロセッサ。
【請求項１２】
前記少なくとも三つのコアの各コアの前記共有レジスタバンクの参照がループ状をなしており、
前記共有レジスタバンクは、互いに隣接する一対のコアの間で相互に参照可能なものである、請求項１１に記載のプロセッサ。
【請求項１３】
前記ＦＩＦＯが、前記少なくとも二つのコアのうちのいずれか一のコアである下流側コアが処理すべき要素として、前記少なくとも二つのコアのうちの該下流側コアとは別のコアである上流側コアからの要素を受け付ける、該上流側コアにとっての出力ＦＩＦＯとなっており、
前記上流側コアが備える前記ＩＣＳＲ、および、前記上流側コアが備える前記ＦＩＦＯカウンタが、前記出力ＦＩＦＯのための値を格納可能になっており、
前記上流側コアに実装された前記ＦＩＦＯカウンタ更新機能は、前記出力ＦＩＦＯのための前記ＦＩＦＯカウンタの値を、前記下流側コアからの入力方向コア間割込信号ｆｉｉｎｔを受信したときデクリメントし、該下流側コアに対する出力方向コア間割込信号ｆｏｉｎｔを送信したときインクリメントする機能を含んでいるものであり、
前記上流側コアに実装された前記コア間割込同期機能は、前記出力ＦＩＦＯのための前記ＦＩＦＯカウンタの値と前記ＩＣＳＲの値とを比較し、前記出力ＦＩＦＯが満杯である場合、前記上流側コア自体によるプロセスを待機状態にするとともに、前記下流側コアからの入力方向コア間割込信号ｆｉｉｎｔを前記上流側コアがその後に受信することにより、前記待機状態を解除して前記上流側コアによるプロセスを再開させる待機制御機能を含んでいるものである、請求項１０〜１２のいずれか１項に記載のプロセッサ。
【請求項１４】
前記ＦＩＦＯが、前記少なくとも二つのコアのうちのいずれか一のコアである下流側コアが処理すべき要素として、前記少なくとも二つのコアのうちの該下流側コアとは別のコアである上流側コアからの要素を受け付ける、該下流側コアにとっての入力ＦＩＦＯとなっており、
前記下流側コアが備える前記ＩＣＳＲ、および、前記下流側コアが備える前記ＦＩＦＯカウンタが、前記入力ＦＩＦＯのための値を格納可能になっており、
前記下流側コアに実装された前記ＦＩＦＯカウンタ更新機能は、前記入力ＦＩＦＯのための前記ＦＩＦＯカウンタの値を、前記上流側コアからの出力方向コア間割込信号ｆｏｉｎｔを受信したときインクリメントし、該上流側コアに対する入力方向コア間割込信号ｆｉｉｎｔを送信したときデクリメントする機能を含んでいるものであり、
前記下流側コアに実装されたコア間割込同期機能は、前記入力ＦＩＦＯのための前記ＦＩＦＯカウンタの値と前記入力ＦＩＦＯが空であることを示す値とを比較し、前記入力ＦＩＦＯが空である場合、前記下流側コア自体によるプロセスを待機状態にするとともに、前記上流側コアからの出力方向コア間割込信号ｆｏｉｎｔを前記下流側コアがその後に受信することにより、前記待機状態を解除して前記下流側コアによるプロセスを再開させる進行制御機能を含んでいるものである、請求項１０〜１２のいずれか１項に記載のプロセッサ。
【請求項１５】
プロセス間通信を含む一連の命令実行プロセスを処理するために複数のコアを備えるプロセッサのためのコアであって、
該複数のコアのうちの少なくとも二つのコアは、前記プロセッサに備わるコア間割込信号ｆｉｎｔを伝達可能な信号路に接続されており、
前記少なくとも二つのコアそれぞれが、
ＦＩＦＯ深さ値を格納するためのコア間割込みカウント設定レジスタ（ＩＣＳＲ）と、ここで、前記ＦＩＦＯ深さ値は、当該コアが担うプロセスと別のコアが担うプロセスとの間のプロセス間通信のために用いられる先入れ先出しバッファ（ＦＩＦＯ）のエントリー数を表しているとともに、処理中のプロセス間通信を含む前記一連の命令実行プロセスの範囲における上限値となるものであり、
前記ＦＩＦＯの使用中のエントリー数を示す値を格納するためのＦＩＦＯカウンタと
を有しており、
前記少なくとも二つのコアそれぞれは、
前記少なくとも二つのコアのうちの別のコアから受信したコア間割込信号ｆｉｎｔ、前記ＦＩＦＯカウンタの値、および前記ＩＣＳＲの値の少なくともいずれかに基づいて、当該コアと前記別のコアとの間でプロセス間通信を行なうためのコア間割込同期機能と、
当該コア自体による前記ＦＩＦＯへのアクセスの完了時に、前記別のコアがそれ自体のプロセスの制御に利用するコア間割込信号ｆｉｎｔを発行して送るコア間割込生成機能と、
前記ＦＩＦＯカウンタの値を、前記コア間割込信号ｆｉｎｔの受信または当該コア自体によるコア間割込信号ｆｉｎｔの発行に応じてインクリメントまたはデクリメントさせるＦＩＦＯカウンタ更新機能と
が処理可能なように実装されているものであり、
前記ＦＩＦＯが、前記少なくとも二つのコアのうちのいずれか一のコアである下流側コアが処理すべき要素として、前記少なくとも二つのコアのうちの該下流側コアとは別のコアである上流側コアからの要素を受け付ける、該上流側コアにとっての出力ＦＩＦＯとなっており、
前記上流側コアが備える前記ＩＣＳＲ、および、前記上流側コアが備える前記ＦＩＦＯカウンタが、前記出力ＦＩＦＯのための値を格納可能になっており、
前記上流側コアに実装された前記ＦＩＦＯカウンタ更新機能は、前記出力ＦＩＦＯのための前記ＦＩＦＯカウンタの値を、前記下流側コアからの入力方向コア間割込信号ｆｉｉｎｔを受信したときデクリメントし、該下流側コアに対する出力方向コア間割込信号ｆｏｉｎｔを送信したときインクリメントする機能を含んでいるものであり、
前記上流側コアに実装された前記コア間割込同期機能は、前記出力ＦＩＦＯのための前記ＦＩＦＯカウンタの値と前記ＩＣＳＲの値とを比較し、前記出力ＦＩＦＯが満杯である場合、前記上流側コア自体によるプロセスを待機状態にするとともに、前記下流側コアからの入力方向コア間割込信号ｆｉｉｎｔを前記上流側コアがその後に受信することにより、前記待機状態を解除して前記上流側コアによるプロセスを再開させる待機制御機能を含んでいるものであり、
これにより、前記プロセッサが、前記ＦＩＦＯを利用するプロセス間通信を含む前記一連の命令実行プロセスを、前記少なくとも二つのコアのプロセスにより実行するものである、前記少なくとも二つのコアのいずれかであるコア。
【請求項１６】
プロセス間通信を含む一連の命令実行プロセスを処理するために複数のコアを備えるプロセッサのためのコアであって、
該複数のコアのうちの少なくとも二つのコアは、前記プロセッサに備わるコア間割込信号ｆｉｎｔを伝達可能な信号路に接続されており、
前記少なくとも二つのコアそれぞれが、
ＦＩＦＯ深さ値を格納するためのコア間割込みカウント設定レジスタ（ＩＣＳＲ）と、ここで、前記ＦＩＦＯ深さ値は、当該コアが担うプロセスと別のコアが担うプロセスとの間のプロセス間通信のために用いられる先入れ先出しバッファ（ＦＩＦＯ）のエントリー数を表しているとともに、処理中のプロセス間通信を含む前記一連の命令実行プロセスの範囲における上限値となるものであり、
前記ＦＩＦＯの使用中のエントリー数を示す値を格納するためのＦＩＦＯカウンタと
を有しており、
前記少なくとも二つのコアそれぞれは、
前記少なくとも二つのコアのうちの別のコアから受信したコア間割込信号ｆｉｎｔ、前記ＦＩＦＯカウンタの値、および前記ＩＣＳＲの値の少なくともいずれかに基づいて、当該コアと前記別のコアとの間でプロセス間通信を行なうためのコア間割込同期機能と、
当該コア自体による前記ＦＩＦＯへのアクセスの完了時に、前記別のコアがそれ自体のプロセスの制御に利用するコア間割込信号ｆｉｎｔを発行して送るコア間割込生成機能と、
前記ＦＩＦＯカウンタの値を、前記コア間割込信号ｆｉｎｔの受信または当該コア自体によるコア間割込信号ｆｉｎｔの発行に応じてインクリメントまたはデクリメントさせるＦＩＦＯカウンタ更新機能と
が処理可能なように実装されているものであり、
前記ＦＩＦＯが、前記少なくとも二つのコアのうちのいずれか一のコアである下流側コアが処理すべき要素として、前記少なくとも二つのコアのうちの該下流側コアとは別のコアである上流側コアからの要素を受け付ける、該下流側コアにとっての入力ＦＩＦＯとなっており、
前記下流側コアが備える前記ＩＣＳＲ、および、前記下流側コアが備える前記ＦＩＦＯカウンタが、前記入力ＦＩＦＯのための値を格納可能になっており、
前記下流側コアに実装された前記ＦＩＦＯカウンタ更新機能は、前記入力ＦＩＦＯのための前記ＦＩＦＯカウンタの値を、前記上流側コアからの出力方向コア間割込信号ｆｏｉｎｔを受信したときインクリメントし、該上流側コアに対する入力方向コア間割込信号ｆｉｉｎｔを送信したときデクリメントする機能を含んでいるものであり、
前記下流側コアに実装されたコア間割込同期機能は、前記入力ＦＩＦＯのための前記ＦＩＦＯカウンタの値と前記入力ＦＩＦＯが空であることを示す値とを比較し、前記入力ＦＩＦＯが空である場合、前記下流側コア自体によるプロセスを待機状態にするとともに、前記上流側コアからの出力方向コア間割込信号ｆｏｉｎｔを前記下流側コアがその後に受信することにより、前記待機状態を解除して前記下流側コアによるプロセスを再開させる進行制御機能を含んでいるものであり、
これにより、前記プロセッサが、前記ＦＩＦＯを利用するプロセス間通信を含む前記一連の命令実行プロセスを、前記少なくとも二つのコアのプロセスにより実行するものである、前記少なくとも二つのコアのいずれかであるコア。
【請求項１７】
複数のコアを備えるプロセッサによりプロセス間通信を含む一連の命令実行プロセスを処理するためのプロセッサの動作方法であって、
ここで、該複数のコアのうちの少なくとも二つのコアそれぞれは、当該コアが担うプロセスと別のコアが担うプロセスとの間のプロセス間通信のために用いられる先入れ先出しバッファ（ＦＩＦＯ）の使用中のエントリー数を示す値を格納するためのＦＩＦＯカウンタとＦＩＦＯ深さ値を格納するためのコア間割込みカウント設定レジスタ（ＩＣＳＲ）とを有するとともに、コア間割込信号ｆｉｎｔを伝達可能な信号路に接続されており、ここで、前記ＦＩＦＯ深さ値は、前記ＦＩＦＯのエントリー数を表しているとともに、処理中のプロセス間通信を含む前記一連の命令実行プロセスの範囲における上限値となるものであり、前記ＦＩＦＯが、前記少なくとも二つのコアのうちのいずれか一のコアである下流側コアが処理すべき要素として、前記少なくとも二つのコアのうちの該下流側コアとは別のコアである上流側コアからの要素を受け付ける、該上流側コアにとっての出力ＦＩＦＯとなっており、前記上流側コアが備える前記ＩＣＳＲ、および、前記上流側コアが備える前記ＦＩＦＯカウンタが、前記出力ＦＩＦＯのための値を格納可能になっており、
前記少なくとも二つのコアそれぞれは、実装されている機能手段により、
前記少なくとも二つのコアのうちの別のコアから受信したコア間割込信号ｆｉｎｔ、前記ＦＩＦＯカウンタの値、および前記ＩＣＳＲの値の少なくともいずれかに基づいて、当該コアと前記別のコアとの間でプロセス間通信を行なうためのコア間割込同期ステップと、
当該コア自体による前記ＦＩＦＯへのアクセスの完了時に、前記別のコアがそれ自体のプロセスの制御に利用するコア間割込信号ｆｉｎｔを発行して送るコア間割込生成ステップと、
前記ＦＩＦＯカウンタの値を、前記コア間割込信号ｆｉｎｔの受信または当該コア自体によるコア間割込信号ｆｉｎｔの発行に応じてインクリメントまたはデクリメントさせるＦＩＦＯカウンタ更新ステップと
を実行するものであり、
前記上流側コアにて実行される前記ＦＩＦＯカウンタ更新ステップは、前記出力ＦＩＦＯのための前記ＦＩＦＯカウンタの値を、前記下流側コアからの入力方向コア間割込信号ｆｉｉｎｔを受信したときデクリメントし、該下流側コアに対する出力方向コア間割込信号ｆｏｉｎｔを送信したときインクリメントするステップを含んでいるものであり、
前記上流側コアにて実行される前記コア間割込同期ステップは、前記出力ＦＩＦＯのための前記ＦＩＦＯカウンタの値と前記ＩＣＳＲの値とを比較し、前記出力ＦＩＦＯが満杯である場合、前記上流側コア自体によるプロセスを待機状態にするとともに、前記下流側コアからの入力方向コア間割込信号ｆｉｉｎｔを前記上流側コアがその後に受信することにより、前記待機状態を解除して前記上流側コアによるプロセスを再開させる待機制御ステップを含んでいるものであり、
これにより、前記ＦＩＦＯを利用するプロセス間通信を含む前記一連の命令実行プロセスが、前記少なくとも二つのコアのプロセスを同期させることにより実行される
プロセッサの動作方法。
【請求項１８】
複数のコアを備えるプロセッサによりプロセス間通信を含む一連の命令実行プロセスを処理するためのプロセッサの動作方法であって、
ここで、該複数のコアのうちの少なくとも二つのコアそれぞれは、当該コアが担うプロセスと別のコアが担うプロセスとの間のプロセス間通信のために用いられる先入れ先出しバッファ（ＦＩＦＯ）の使用中のエントリー数を示す値を格納するためのＦＩＦＯカウンタとＦＩＦＯ深さ値を格納するためのコア間割込みカウント設定レジスタ（ＩＣＳＲ）とを有するとともに、コア間割込信号ｆｉｎｔを伝達可能な信号路に接続されており、ここで、前記ＦＩＦＯ深さ値は、前記ＦＩＦＯのエントリー数を表しているとともに、処理中のプロセス間通信を含む前記一連の命令実行プロセスの範囲における上限値となるものであり、前記ＦＩＦＯが、前記少なくとも二つのコアのうちのいずれか一のコアである下流側コアが処理すべき要素として、前記少なくとも二つのコアのうちの該下流側コアとは別のコアである上流側コアからの要素を受け付ける、該下流側コアにとっての入力ＦＩＦＯとなっており、前記下流側コアが備える前記ＩＣＳＲ、および、前記下流側コアが備える前記ＦＩＦＯカウンタが、前記入力ＦＩＦＯのための値を格納可能になっており、
前記少なくとも二つのコアそれぞれは、実装されている機能手段により、
前記少なくとも二つのコアのうちの別のコアから受信したコア間割込信号ｆｉｎｔ、前記ＦＩＦＯカウンタの値、および前記ＩＣＳＲの値の少なくともいずれかに基づいて、当該コアと前記別のコアとの間でプロセス間通信を行なうためのコア間割込同期ステップと、
当該コア自体による前記ＦＩＦＯへのアクセスの完了時に、前記別のコアがそれ自体のプロセスの制御に利用するコア間割込信号ｆｉｎｔを発行して送るコア間割込生成ステップと、
前記ＦＩＦＯカウンタの値を、前記コア間割込信号ｆｉｎｔの受信または当該コア自体によるコア間割込信号ｆｉｎｔの発行に応じてインクリメントまたはデクリメントさせるＦＩＦＯカウンタ更新ステップと
を実行するものであり、
前記下流側コアにて実行される前記ＦＩＦＯカウンタ更新ステップは、前記入力ＦＩＦＯのための前記ＦＩＦＯカウンタの値を、前記上流側コアからの出力方向コア間割込信号ｆｏｉｎｔを受信したときインクリメントし、該上流側コアに対する入力方向コア間割込信号ｆｉｉｎｔを送信したときデクリメントするステップを含んでいるものであり、
前記下流側コアにて実行されるコア間割込同期ステップは、前記入力ＦＩＦＯのための前記ＦＩＦＯカウンタの値と前記入力ＦＩＦＯが空であることを示す値とを比較し、前記入力ＦＩＦＯが空である場合、前記下流側コア自体によるプロセスを待機状態にするとともに、前記上流側コアからの出力方向コア間割込信号ｆｏｉｎｔを前記下流側コアがその後に受信することにより、前記待機状態を解除して前記下流側コアによるプロセスを再開させる進行制御ステップを含んでいるものであり、
これにより、前記ＦＩＦＯを利用するプロセス間通信を含む前記一連の命令実行プロセスが、前記少なくとも二つのコアのプロセスを同期させることにより実行される
プロセッサの動作方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はプロセッサ・コア、およびマルチコア・プロセッサのハードウエア構成及びその上で実行するソフトウエアの動作方法に関する。
【背景技術】
【０００２】
コンピュータや様々な電子機器に用いられているマイクロプロセッサやＤＳＰなどの情報処理のためのプロセッサは、半導体微細加工技術等の進歩を背景に、クロック周波数を高めたり、高密度化したりする等の手法により演算処理能力の向上が図られている。特に高機能化や処理効率を高めるために、プロセッサにおける演算処理を担うプロセッサコア（以下、単に「コア」という）の回路規模を増大させ、より多数のトランジスタ素子を単一の半導体片つまりダイに集積することが指向されている。
【０００３】
その一方、単一片のダイに一つのコアを形成し、そのコア自体の回路規模を増大させるものとは異なるアプローチにより演算能力を高めることも近年指向されつつある。そのアプローチの一つが、単一片のダイに複数のコアを集積することなどにより、コアの個数を増大させて並列演算処理を行なったり、演算目的に併せた異なる種類のコアを連携させることである。その背景には、単一のコアの回路規模を増大させ複雑性を高めるばかりでは、例えばダイ面積（ダイサイズ）が２倍になっても、演算能力は２１／２倍つまり１．４倍程度にしかならない、という技術的制約があるためである。すなわち、演算能力を高めるためにコアを高機能化したとしても、それによる演算能力の向上よりも、ダイの面積の増大がもたらす消費電力や発熱量の増大という弊害がむしろ顕在化してくる。なお、複数のコアを採用するプロセッサは、マルチコア・プロセッサやメニーコアプロセッサとも呼ばれる。
【０００４】
複数のコアを採用する開発動向は特にいくつかの応用目的のプロセッサにおいて顕著となっている。例えば、消費電力あたりの演算処理能力が重視されるモバイル機器用途、ハイパフォーマンスコンピューティングの用途などにおいて低消費電力化の要請が高まりマルチコア・プロセッサが一般的となりつつある。特許文献１（特開２００７−３１６８５９号公報）には、マルチコア・プロセッサを実装するコンピュータアーキテクチャが開示されている。また、グラフィクス処理のためのＧＰＵ（Graphics Processing Unit）において整数演算や条件分岐を採用することにより、超並列処理を利用したより汎用性の高い演算を行ないうるＧＰＧＰＵ（General Purpose computations on Graphics Processing Unit）などと呼ばれる概念も注目を集めている。これらのマルチコア・プロセッサには、大別し、同一種のコアを集積したホモジニアスマルチコアと、異種のコアを集積したヘテロジニアスマルチコアとが用いられる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−３１６８５９号公報
【特許文献２】特開２０１１−１６４５２５号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
マルチコア・プロセッサにおいてプロセス間通信の有望な手段として、先入れ先出しバッファ（以下「ＦＩＦＯ」と呼ぶ）などのバッファを通じたプロセス間通信を利用するものが知られている。例えば、マルチコア・プロセッサ上での分散処理の効率を高めるためのプロセッサ間通信の動作モデルとして、ＦＩＦＯを利用するＫａｈｎ  Ｐｒｏｃｅｓｓ  Ｎｅｔｗｏｒｋの動作モデルが知られている。このＦＩＦＯは、例えば、少なくとも二つのコアのうちの二つのコアからアクセスされることによって一のコアにより処理した一連の命令実行プロセスを別のコアに処理を引き継ぐ受け渡しに利用され、プロセス間通信の手段として有用なものである。例えば、特許文献２（特開２０１１−１６４５２５号）には、ＦＩＦＯを利用するマルチコア・プロセッサにおいて、マルチメディア・データを転送する手法が開示されている。
【０００７】
しかしながら、従来のマルチコア・プロセッサのアーキテクチャにおいて、ＦＩＦＯを採用してプロセス間通信をする処理は、ＦＩＦＯを通じて処理を引き継ぐ際のオーバーヘッドが大きい。具体的には、例えばＦＩＦＯを利用するためのＡＰＩ（Application Programming Interface）の実行には、ＦＩＦＯのエントリーの状態取得、状態管理などのために複数の命令が必要になる。また、複数のコア（１つは書込み、１つは読出し）からのＦＩＦＯへのアクセスの同期のために、例えば、セマフォによる排他制御を行うための命令の実行も必要となる。ところが、ＦＩＦＯを利用するためのＡＰＩの実行に関わる上記のオーバーヘッドは、命令数で２００〜３００に相当し、２００〜３００クロックサイクル数（以下「サイクル」という）もの期間がＦＩＦＯを利用する毎に必要になることを意味している。さらに上記セマフォによる処理を採用すると、セマフォ関数の呼び出しやＰ操作やＶ操作とも呼ばれる操作が加わることとなる。このため、マルチコア・プロセッサを採用しＦＩＦＯを利用しようとしても、複数のコアを有するハードウエアを活かした処理能力は必ずしも発揮されない。
【０００８】
ソフトウエア上の観点からは、プロセス間通信に関わる同期の処理をソフトウエアで実現する必要があることが、プロセス間通信を含むシステムを構成する上で実用上の足枷となっている。
【０００９】
本発明は、上記課題の少なくともいずれかを解決するためになされたものである。本発明は、複数のコアを有するマルチコア・プロセッサにおいてＦＩＦＯなどのバッファを用いるプロセス間通信を実行する際のオーバーヘッドを削減する。これにより本発明は、マルチコア・プロセッサにより高い処理能力を得るために分散処理をするソフトウエアにおいて、プロセス間通信の処理速度を実効的に高め、消費電力あたりの演算効率を高めることが可能な実用的なマルチコア・プロセッサ・システムの実現に貢献するものである。
【課題を解決するための手段】
【００１０】
上記課題を吟味した結果、本願の発明者は、プロセス間通信にＦＩＦＯを採用してプロセス間通信に関わるオーバーヘッドを削減することができるマルチコア・プロセッサのためのプロセッサアーキテクチャを見出した。本発明は、そのようなプロセッサ・コア、そしてマルチコア・プロセッサのハードウエア構成及びその上で実行するソフトウエアの動作方法を提供するものである。
【００１１】
すなわち、本発明のある態様においては、プロセス間通信を含む一連の命令実行プロセスを処理するための複数のコアを備えるプロセッサであって、該複数のコアのうちの少なくとも二つのコアに接続されコア間割込信号ｆｉｎｔを伝達可能な信号路を有しており、前記少なくとも二つのコアそれぞれが、ＦＩＦＯ深さ値を格納するためのコア間割込みカウント設定レジスタ（ＩＣＳＲ）と、ここで、前記ＦＩＦＯ深さ値は、当該コアが担うプロセスと別のコアが担うプロセスとの間のプロセス間通信のために用いられる先入れ先出しバッファ（ＦＩＦＯ）のエントリー数を表しているとともに、処理中のプロセス間通信を含む前記一連の命令実行プロセスの範囲における上限値となるものであり、前記ＦＩＦＯの使用中のエントリー数を示す値を格納するためのＦＩＦＯカウンタとを有しており、前記少なくとも二つのコアそれぞれは、前記少なくとも二つのコアのうちの別のコアから受信したコア間割込信号ｆｉｎｔ、前記ＦＩＦＯカウンタの値、および前記ＩＣＳＲの値の少なくともいずれかに基づいて、当該コアと前記別のコアとの間でプロセス間通信を行うためのコア間割込同期機能と、当該コア自体による前記ＦＩＦＯへのアクセスの完了時に、前記別のコアがそれ自体のプロセスの制御に利用するコア間割込信号ｆｉｎｔを発行して送るコア間割込生成機能と、前記ＦＩＦＯカウンタの値を、前記コア間割込信号ｆｉｎｔの受信または当該コア自体によるコア間割込信号ｆｉｎｔの発行に応じてインクリメントまたはデクリメントさせるＦＩＦＯカウンタ更新機能とが処理可能なように実装されているものであり、これにより、前記ＦＩＦＯを利用するプロセス間通信を含む前記一連の命令実行プロセスを、前記少なくとも二つのコアのプロセスを同期させることにより実行するプロセッサが提供される。
【００１２】
また、本発明のある態様においては、プロセス間通信を含む一連の命令実行プロセスを処理するために複数のコアを備えるプロセッサのためのコアとして、上記コアの特徴を備えたプロセッサのコアが提供される。
【００１３】
そして、本発明のある態様においては、複数のコアを備えるプロセッサによりプロセス間通信を含む一連の命令実行プロセスを処理するためのプロセッサの動作方法であって、ここで、該複数のコアのうちの少なくとも二つのコアそれぞれは、当該コアが担うプロセスと別のコアが担うプロセスとの間のプロセス間通信のために用いられる先入れ先出しバッファ（ＦＩＦＯ）の使用中のエントリー数を示す値を格納するためのＦＩＦＯカウンタとＦＩＦＯ深さ値を格納するためのコア間割込みカウント設定レジスタ（ＩＣＳＲ）とを有するとともに、コア間割込信号ｆｉｎｔを伝達可能な信号路に接続されており、ここで、前記ＦＩＦＯ深さ値は、前記ＦＩＦＯのエントリー数を表しているとともに、処理中のプロセス間通信を含む前記一連の命令実行プロセスの範囲における上限値となるものであり、前記少なくとも二つのコアそれぞれは、実装されている機能手段により、前記少なくとも二つのコアのうちの別のコアから受信したコア間割込信号ｆｉｎｔ、前記ＦＩＦＯカウンタの値、および前記ＩＣＳＲの値の少なくともいずれかに基づいて、当該コアと前記別のコアとの間でプロセス間通信を行うためのコア間割込同期ステップと、当該コア自体による前記ＦＩＦＯへのアクセスの完了時に、前記別のコアがそれ自体のプロセスの制御に利用するコア間割込信号ｆｉｎｔを発行して送るコア間割込生成ステップと、前記ＦＩＦＯカウンタの値を、前記コア間割込信号ｆｉｎｔの受信または当該コア自体によるコア間割込信号ｆｉｎｔの発行に応じてインクリメントまたはデクリメントさせるＦＩＦＯカウンタ更新ステップとを実行し、これにより、前記ＦＩＦＯを利用するプロセス間通信を含む前記一連の命令実行プロセスが、前記少なくとも二つのコアのプロセスを同期させることにより実行されるプロセッサの動作方法が提供される。
【００１４】
本発明の上記各態様により、複数のコアを有するプロセッサの動作において、プロセス間通信を含むプロセスのオーバーヘッドが抑制され、プロセス間通信のためにＦＩＦＯを実装するソフトウエアの実行に適する高い処理能力のプロセッサを提供することが可能となる。
【００１５】
なお、本出願を通じ、複数のコアを含むプロセッサは、一連の情報処理を実行する機能単位を、そこに含まれている複数のコアにより実行する任意のハードウエアを含んでいる。最も典型的には、半導体の単一片のダイに作製された複数のコアを含んでいるものが、上記プロセッサとなりうる。ただし、複数片のダイに渡って複数のコアが形成されており、これら複数のコアを連携させることにより、一連の情報処理を提供するようなプロセッサも、本出願の複数のコアを含むプロセッサとして実施することができる。また、上記複数のコアを含むプロセッサは、複数のコアに対して、可能な限り並行してそれぞれの演算処理を実行させるためのメモリアクセスの機能をも提供する。
【００１６】
また本出願におけるコアとは、それ自体に、デコーダ、命令実行部などの命令制御機構を一つ以上有し、独立して実行しうる機能単位のためのハードウエアを含んでいる。したがって、典型的には、各コアは、目的の機能を果たすための命令セットに応じた演算処理をそれ自体の命令制御機構により実行する。ただし、本出願のコアには、当該コア以外に形成されている命令制御機構の制御の下で各コアが演算処理を実行するものであっても、他のコアとは区別された処理を行なうものも含んでいる。
【００１７】
さらに、一連の命令実行プロセスとは、本出願においては、プロセスの集合を意味する。ここでプロセスとは、ＡＤＤやＳＵＢのような一般的な命令をはじめとして、原子操作（ａｔｏｍｉｃ  ｏｐｅｒａｔｉｏｎ）をも含む、各コアにおいて処理される少なくとも一つの命令に対応したプロセスであり、各コアのプログラムカウンターの一つの状態に対応して逐次処理により実行処理されるような処理を指す。したがって、一連の命令実行プロセスは、それを構成するプロセスの集合のうち、ある段階までは一のコアにより実行され、その後に、その余の段階の一部または全部が他のコアにより実行される。その一連の命令実行プロセスを適切に処理するために、ＦＩＦＯによるプロセス間通信が利用される。
【００１８】
本出願におけるＦＩＦＯとは、典型的には、プロセス間通信のために利用される任意のハードウエア実装形式、あるいはソフトウエアでメモリ上に実装されるバッファであって、複数のエントリーを有し、そのエントリーのすべてまたはいくつかを利用して先入れ先出し動作を可能とするバッファとなる記憶装置のうち、複数のコアからアクセス可能なもの（多段のＦＩＦＯ）を一般に含んでいる。ただし、１エントリーのみを有して単なる一時的なバッファとなる記憶装置（１段のＦＩＦＯ）も、複数のコアからアクセス可能であれば本出願のＦＩＦＯに含んでいる。多段のＦＩＦＯでは、典型的には、順序づけされた各エントリーをなす記憶域、つまり相互に区別可能ないくつかの記憶領域に、先入れ先出しの順序を守って要素を格納させ出力させることにより、先入れ先出し動作を実現する。ＦＩＦＯを実装するためのハードウエアは、コアが形成されている半導体ダイと同一のダイに形成される共有レジスタバンク、当該半導体ダイを内包するパッケージ（チップ）と同一のチップに含まれるオンチップメモリ、そして、当該チップとは別のチップのメモリを含んでいる。なお、オンチップメモリには、コアが形成されている半導体ダイと同一のダイのオンダイメモリや、同一パッケージであるものの内部で別の半導体ダイに形成されたオフダイのメモリを含む。これらのＦＩＦＯは、任意のバスを通じメモリアドレスによりアドレス指定されたり、レジスタであれば命令中のオペランドとして、また命令長を抑えるために例えばバンクを切り替えたりするなどの手法によって、少なくとも二つのコアから命令によってアクセス可能にされている。こうしてＦＩＦＯはそれらのコアに対してプロセス間通信のための要素を順序を保って一時的に格納するバッファとしての機能を提供する。
【００１９】
本出願において、ある機能が実装されているとは、その機能を提供する実体的な機能単位がハードウエアにより形成されていることを含んでいる。例えば、ロジック回路をハードワイアードにより構成し目的の機能を実行可能な論理回路要素を含む命令制御機構を実装する。そして、当該目的の機能を提供するための命令を例えばアセンブリ言語により記述されたソフトウエアにより与えることにより、その命令制御器個々のＡＬＵ（算術論理ユニット）がレジスタを利用し当該機能を提供することとなるマイクロコードを出力するように、デコーダを構成する。このような構成のものが実装の典型例である。
【００２０】
最も典型的な実施形態のプロセッサは、そこに備わる各コアが、それぞれのためのメモリを利用して、それぞれに備わるレジスタを対象に、それぞれの命令実行機能による実行をそれぞれのプログラムに従って実行する。そして、少なくとも二つのコアの間で、両コアがアクセスすることができるメモリか、両コアにて共有される共有レジスタバンクかをＦＩＦＯとして利用し、一連の命令実行プロセスを受け渡す。一方のコアがその一連の命令実行プロセスのある部分までを実行し、その部分より後の部分を、他方のコアが、上記ＦＩＦＯから要素を受け取って引き継ぐのである。これらの両コアは、この受け渡しのための機能または処理ステップとして上述した態様に作製されている。
【発明の効果】
【００２１】
本発明のいずれかの態様において、プロセス間通信のオーバーヘッドを抑制した複数のコアの連携処理が可能になり、処理効率を高めたプロセッサ・コア、およびマルチコア・プロセッサのハードウエア構成及びその上で実行するソフトウエアの動作方法が提供される。
【図面の簡単な説明】
【００２２】
【図１】本発明のある実施形態におけるプロセッサの一例の構成を含むコンピュータの全体構成を示すブロック図である。
【図２】本発明のある実施形態におけるプロセッサにおいて、上流側コアと下流側コアとを用いてプロセス間通信およびコア間割込が生じる様子を示す説明図である。
【図３】本発明のある実施形態におけるプロセッサにおいて、上流側コアから下流側コアに一連の命令実行プロセスのための要素を、ＦＩＦＯを通じ受け渡しする動作を示すフローチャートである。
【図４】本発明のある実施形態におけるプロセッサにおいて、各コアが有するＩＣＳＲの典型的な構成を示す説明図である。
【図５】本発明のある実施形態におけるプロセッサにおいて、コア間割込信号ｆｉｎｔを伝送するための信号路の具体的構成を示す接続図である。
【図６】本発明のある実施形態におけるプロセッサにおいてメモリを用いＦＩＦＯを実装する場合の例示のプログラムリストである。
【図７】本発明のある実施形態におけるプロセッサにおいてデータレジスタである共有レジスタバンクを利用しＦＩＦＯを実装する典型的な構成を示す説明図である。
【図８】本発明のある実施形態におけるプロセッサにおいて共有レジスタバンクを利用しＦＩＦＯを実装する場合に動作される例示のプログラムリストである。
【発明を実施するための形態】
【００２３】
以下、本発明に係るプロセッサの構成および処理の実施形態を図面に基づき説明する。当該説明に際し特に言及がない限り、全図にわたり共通する部分または要素には共通する参照符号が付されている。
【００２４】
＜第１実施形態＞
［１  構成］
以下図面を参照し本実施形態の複数のコアを含むプロセッサの構成について説明する。図１は、本実施形態のプロセッサ１０００の一例の構成を含むコンピュータ１の全体構成を示すブロック図である。コンピュータ１はＣＰＵ（中央演算装置）２０００を備えており、ＣＰＵ２０００は適当なバス３０００を通じてプロセッサ１０００と通信可能になっている。プロセッサ１０００は一例として、複数の同様に構成されたものがコンピュータ１の構成の一部として接続されている。この構成では、プロセッサ１０００はＣＰＵ２０００と連携して動作する。ただし、このような利用方法がプロセッサ１０００の唯一の利用方法ではない。例えばプロセッサ１０００が単数のみ含まれている場合や、コンピュータ１がＣＰＵ２０００を持たずにプロセッサ１０００のみが含まれている場合もある。また、本実施形態のプロセッサは任意の電子機器に利用することができるものである。
【００２５】
プロセッサ１０００は、プロセス間通信を含む一連の命令実行プロセスを処理するための複数のコア１００を備えている。コア１００は、それぞれが同種のコアである場合もあれば異種のコアである場合もある。ここでは、コア１００のうちの少なくとも二つのコアそれぞれをコア１００Ａおよびコア１００Ｂとして説明する。なお、典型的なプロセッサ１０００は、すべてのコア１００を単一片の半導体ダイに形成したものである。ただし、コア１００のすべてを単一片のダイに集積することは本実施形態を実施する上で必須ではない。
【００２６】
［１−１  プロセッサの概略構成］
複数のコアのうちの少なくとも二つのコア１００Ａおよび１００Ｂは、コア間割込信号ｆｉｎｔを伝達可能であり各コアに接続されている信号路１４０を有している。そして、プロセッサ１０００のコア１００Ａおよび１００Ｂは、ＦＩＦＯ（先入れ先出しバッファ）２００を利用しプロセス間通信を処理する。ＦＩＦＯ２００は、コア１００Ａおよび１００Ｂのいずれからもアクセス可能なハードウエアを利用して構成される。ＦＩＦＯ２００の典型例は、一例として、当該チップと同一のチップのオンチップメモリ、あるいは、当該チップとは別のチップのメモリであり、別例としては、コア１００Ａおよび１００Ｂを形成されている半導体チップと同一のチップのレジスタである。図１には、これらをいずれも含む構成として、ＦＩＦＯ２００を機能ブロックにより示している。
【００２７】
［１−２  ＦＩＦＯの動作の概要］
本実施形態のプロセッサ１０００は、少なくとも二つのコア１００Ａおよび１００Ｂを連携して一連の命令実行プロセスを進め、プロセス間通信を実行する。この異なるコアの間でプロセス間通信を実現するために、ＦＩＦＯ２００を利用する。コア１００Ａおよび１００Ｂの一連の命令実行プロセスの動作を大別すると、次の４ステップに分けることができる。第１ステップとして、コア１００Ａがある段階まで当該一連の命令実行プロセスを実行する。つまり、一連の命令実行プロセスをなすプロセスの集合のうち一部のプロセスまでをコア１００Ａが処理する。第２ステップとして、コア１００Ａが当該一連のプロセスの実行状態または結果をデータの要素（以下、単に「要素」ともいう）としてＦＩＦＯ２００に格納する。第３ステップとして、コア１００Ｂは、ＦＩＦＯ２００にアクセスし上記状態または結果を引き継ぐための上記要素を読み出す。そして第４ステップとして、コア１００Ｂが、その上記要素を利用し引き継ぐべき状態または結果を使用して、それを初期状態として、上記一連の命令実行プロセスのうちの残りのプロセス、つまりその後に処理すべきプロセス行を処理する。ＦＩＦＯ２００は、多段のＦＩＦＯであれば先入れ先出し動作を実行する。多段のＦＩＦＯを使用するため、コア１００Ａによる処理である上記第１および第２ステップと、コア１００Ｂによる処理である上記第３および第４ステップとの間では、プロセスの処理時間のばらつき、即ちプロセス間の負荷のインバランスが許容される。また、ＦＩＦＯ２００の先入れ先出しの動作により、プロセス間通信を含む一連の命令実行プロセスは、相互の順序は維持される。
【００２８】
［１−３  コアの構成］
上述したＦＩＦＯ２００を用いたプロセス間通信はＦＩＦＯを利用する一般的処理を説明したものである。本実施形態のプロセッサ１０００においては、コア１００Ａおよび１００Ｂに工夫が施されているために、ＦＩＦＯ２００を利用したプロセス間通信にあたり、実行を可能な限り停止させない。そればかりか、プロセッサ１０００では、ＦＩＦＯを通じた受け渡しの処理のための命令を増大させない。すなわち、プロセス間通信を実行する少なくとも二つのコア１００Ａおよび１００Ｂは、ハードウエア構成として、コア間割込みカウント設定レジスタ（ＩＣＳＲ）１１０とよぶレジスタと、ＦＩＦＯカウンタ１２０とよぶレジスタとを備えていることができる。以下、コア１００Ａのものとコア１００Ｂのものとを区別する説明においてはそれぞれに対応させてＡ、Ｂを付し、共通した説明となる場合においてはＡ、Ｂの記載を省略する。コアについても同様とする。
【００２９】
［１−３−１  コア間割込みカウント設定レジスタ（ＩＣＳＲ）］
コア間割込みカウント設定レジスタ（Interrupt Count Setting Register, ＩＣＳＲ）１１０は、ＦＩＦＯ深さ値を格納するためのレジスタである。ここで、ＦＩＦＯ深さ値は、当該コアが担うプロセスと、別のコアが担うプロセスとの間のプロセス間通信の受け渡し処理に用いられるＦＩＦＯ２００のエントリー数を表している。例えば、ＦＩＦＯ深さ値が「４」またはそれに対応する何らかの値であるとき、ＦＩＦＯ２００は、第１エントリー２０２、第２エントリー２０４、第３エントリー２０６、そして第４エントリー２０８という４段分のエントリーを利用することにより、演算に利用されるプロセスのための要素を一時記憶しうるものである。本実施形態における上記ＦＩＦＯ深さ値は、ＩＣＳＲ１１０に格納する値をプログラムにおいて指定することなどにより、プログラム上で可変であり明示的に指定することができる。こうしてＦＩＦＯ２００のエントリー数を、コア１００Ａおよび１００Ｂを連携させる動作のために適切なエントリー数に調整しうることはプロセス間通信を処理する態様として好適なものとなる。なお、このＩＣＳＲ１１０の値は、典型的にはプロセス間通信を含む一連の命令実行プロセスの範囲で固定され、別のプロセスに切り換えるときに必要に応じて再度設定することが可能である。つまり、典型的なＩＣＳＲ１１０は、処理中のプロセス間通信を含む一連の命令実行プロセスの範囲において、ＦＩＦＯ２００のエントリー数の上限値を示すものである。ただし、このＦＩＦＯ深さ値は可変であり、ＦＩＦＯ２００のための有限のリソースであるメモリまたはレジスタを割り当てる事情から、動的に、つまりプロセスの実行の途中において、プロセス間の負荷のインバランスを軽減するために調整されることもできる（この点については、「１−９  ＦＩＦＯエントリー数の動的な調整」の欄にて詳述する）。
【００３０】
上述したように、ＦＩＦＯ２００は、コア１００Ａからコア１００Ｂに連係した動作を実現するためのプロセス間通信のために上記４ステップにより利用される。このように、プロセス間通信の入力および出力という観点に基づき、ＦＩＦＯ２００を、コア１００Ａからみた出力ＦＩＦＯ、コア１００Ｂからみた入力ＦＩＦＯと呼ぶことがある（詳細は「１−５−１  ＦＩＦＯおよびコアの論理的区別」の欄）。
【００３１】
［１−３−２  ＦＩＦＯカウンタ］
本実施形態のプロセッサ１０００の各コア１００におけるＦＩＦＯカウンタ１２０は、ＦＩＦＯ２００の使用中のエントリー数を示す値を格納するためのカウンタレジスタである。ＦＩＦＯカウンタ１２０の値により示されるＦＩＦＯ２００の使用中のエントリー数は、０以上の値であって、ＩＣＳＲ１１０により示されるＦＩＦＯ２００の処理中のプロセスの範囲における上限値を含みそれ以下の範囲の値のうちのいずれかの値である。特に、ＦＩＦＯカウンタ１２０の値が０を示している場合、コア１００は、ＦＩＦＯ２００の使用されているエントリー数が０、つまりＦＩＦＯ２００が空（empty）であると判定することが可能となる。同様に、ＦＩＦＯカウンタ１２０の値がＩＣＳＲ１１０と同一の値を示している場合、コア１００は、ＦＩＦＯ２００の使用されているエントリー数が上限、つまりＦＩＦＯ２００が満杯（full）であると判定することが可能となる。
【００３２】
［１−４  コアの機能］
次に、上述したＩＣＳＲ１１０およびＦＩＦＯカウンタ１２０を利用して上記少なくとも二つのコア１００Ａおよび１００Ｂのそれぞれが実行する機能のうち、ＦＩＦＯ２００に密接な関連を有する機能であるコア間割込同期機能、コア間割込生成機能、および、ＦＩＦＯカウンタ更新機能の概要を説明する。コア１００Ａおよびコア１００Ｂは、プログラム上の簡単な表現によりここに説明する各機能を実行可能なように実装されている。なお、コア１００Ａおよび１００Ｂは、プロセスを処理するための演算機能としてここに説明しない算術演算機能を有している。
【００３３】
［１−４−１  コア間割込同期機能の概要］
一つのＦＩＦＯ２００に関するコア１００Ａの機能であるコア間割込同期機能は、端的には、少なくとも二つのコア１００Ａおよび１００Ｂのうちの別のコア１００Ｂから受信したコア間割込信号ｆｉｎｔ、ＦＩＦＯカウンタの値、およびＩＣＳＲの値の少なくともいずれかに基づいて、当該コアと別のコアとの間で一連の命令実行プロセスをなす各プロセス、つまり各コアにおいて処理させる各プロセスを互いに同期させる機能である。ここで、このコア間割込信号ｆｉｎｔやコア間割込同期機能のために、「割込」との表現を含めているが、本実施形態にて説明するコア間割込は、一般的な割込みとは異なり、割込みはイベントの通知のみを行い、割込みによって割込み処理ルーチンに移行することはしない。すなわち、コンピュータ１のＣＰＵ２０００に対する割込や、ＣＰＵ２０００からのプロセッサ１０００に対する割込、プロセッサ１０００同士の間におけるプロセッサ１０００に対する割込などとは別のものである。本実施形態のＦＩＦＯカウンタの値、およびＩＣＳＲの値は、本実施形態のコア間割込信号ｆｉｎｔとともに、ＦＩＦＯ２００を通じてコア１００Ａと１００Ｂとを連携させてプロセス間通信を処理する目的のために用いられる。端的には、ＦＩＦＯカウンタの値、およびＩＣＳＲの値は、ＦＩＦＯ２００の状態が空または満杯である際に、当該コア（例えばコア１００Ａ）を待機状態にするかそのまま処理を続行させるかの判断に利用される。また、本実施形態のコア間割込信号ｆｉｎｔは、各コアの動作制御のためにコア間において発行して送られ、受信して一連の命令実行プロセスの進行の制御のために利用される。端的には、本実施形態のコア間割込信号ｆｉｎｔは、当該コア（例えばコア１００Ａ）において、第１に、ＦＩＦＯ２００の状態が空または満杯である際の待機状態からの解除のために用いられ、第２に、コア間割込信号ｆｉｎｔを別のコア（例えばコア１００Ｂ）から受信したコア１００ＡにおけるＦＩＦＯカウンタの更新のために用いられる。
【００３４】
当該コア（例えばコア１００Ａ）と別のコア（例えばコア１００Ｂ）との間で一連の命令実行プロセスをなす各プロセスを同期させるとは、当該コアと別のコアを連携して処理する一連の命令実行プロセスが目的通りの演算となるように各コアのプロセスの順序を保つことによって、ある段階まで処理された一連の命令実行プロセスを、次の段階から引き継ぐことである。本実施形態においては、受け渡される要素の順序はＦＩＦＯ２００の先入れ先出し動作により担保される。そして、そのＦＩＦＯ２００を利用する際のオーバーヘッドを可能な限り減少させるために、コア間割込信号ｆｉｎｔ、ＦＩＦＯカウンタの値、ＩＣＳＲのいずれかの値が用いられる。そして、可能な限りオーバーヘッドが削減され、一連の命令実行プロセスの受け渡しが行なわれて一連の命令実行プロセスをなす各プロセスの同期が実行される。この同期により、各コアに分散して一連の命令実行プロセスが適切に処理される。
【００３５】
ただし、コア１００は、通常のプロセッサ・コアと同様に、コア間割込以外の割込を、例えばＣＰＵ２０００から受け付けてその処理が可能な通常の割込機能を有している。したがって、本実施形態におけるコア間割込信号ｆｉｎｔに対処する割込み処理も、上記通常の割込機能を拡張した機能として提供することも可能である。また、このコア間割込同期機能は、プロセッサ１０００の動作方法とみた場合のコア間割込同期ステップともなる。
【００３６】
［１−４−２  コア間割込生成機能の概要］
ＦＩＦＯ２００に関するコア１００Ａのもう一つの機能であるコア間割込生成機能は、端的には、一連の命令実行プロセスのうちの、当該コア１００Ａ自体によるＦＩＦＯ２００の１エントリー分のプロセスのためのＦＩＦＯ２００へのアクセスの完了時に、別のコア１００Ｂがコア１００Ｂ自体の一連の命令実行プロセスの制御のために利用するコア間割込信号ｆｉｎｔを発行して送る機能である。このコア間割込信号ｆｉｎｔが、例えばコア１００Ａから送信されコア１００Ｂにより受信される場合を例に説明する。仮に、ＦＩＦＯ２００の状態がEmptyの場合、コア１００Ｂの実行が待機状態になっており、そのコア間割込信号ｆｉｎｔを受信することに応じて、コア１００Ｂは待機状態を解除して実行を再開する。つまり、コア間割込信号ｆｉｎｔは、各コア（例えばコア１００Ａ）がＦＩＦＯの１エントリー分の処理（書込み）を完了したことを、連携する別のコア（例えばコア１００Ｂ）に対し通知する信号である。なお、ここでの「割込」との表現も、プロセス間通信を適切に処理するためのコア間割込を意味している。また、コア間割込信号ｆｉｎｔが示すＦＩＦＯ２００へのアクセスの完了とは、例えばＦＩＦＯ２００に対するReadやWriteの処理が完了することを含んでいる。また、このコア間割込生成機能も、プロセッサ１０００の動作方法とみた場合のコア間割込生成ステップともなる。
【００３７】
本実施形態のコア１００における上記コア間割込生成機能は、実行される一の命令に割込生成用プリフィクスＦＩＮＴを明示することにより、当該一の命令のプロセスのためのＦＩＦＯへのアクセス完了時に実行される。つまり、コア１００は、割込生成用プリフィクスＦＩＮＴを付された命令のためにＦＩＦＯ２００へのアクセスを行なったことに応じ、ＦＩＦＯ２００へのアクセス完了を通知する信号としてのコア間割込信号ｆｉｎｔを、ＦＩＦＯ２００を通じて連携動作するコアに対し通知する。割込み生成用プリフィックスは、これを付された命令のデコードと同時にデコードされ、割込信号の発生は、これを付された命令の実行パイプラインの中で処理される。このため、その各コア１００は、連携動作するコアに対する通知のためだけに実質的にサイクルを消費することはない。
【００３８】
なお、上記コア間割込生成機能は、通常のプロセッサに備わらないばかりか、バッファを利用し複数のコアの動作を同期させるために極めて有効な機能である。例えば、ここまでの説明においてＦＩＦＯとして説明したバッファが、実質的に先入れ先出し動作しない単なる一時的なバッファつまり１エントリーの１段のＦＩＦＯであるとする。この場合であっても、コア間割込生成機能をそれぞれが備える複数のコアは互いの動作を同期させることが可能となる。この観点から、本実施形態におけるＦＩＦＯ２００は、必ずしも複数のエントリーを利用した先入れ先出し動作をするものに限定されず、１エントリーのみのバッファとして構成されるものも含んでいる。
【００３９】
［１−４−３  ＦＩＦＯカウンタ更新機能の概要］
そして、ＦＩＦＯカウンタ更新機能について説明する。この機能は、端的には、ＦＩＦＯカウンタの値を、コア間割込信号ｆｉｎｔの受信または当該コア自体によるコア間割込信号ｆｉｎｔの送信（発行）に応じてインクリメント（カウントアップ）またはデクリメント（カウントダウン）させる機能である。このため、ＦＩＦＯカウンタ１２０の値には、ＦＩＦＯ２００の使用中のエントリー数を示す値が反映されることとなる。
【００４０】
以上に述べたコア間割込同期機能、コア間割込生成機能、および、ＦＩＦＯカウンタ更新機能については、ＦＩＦＯ２００のより具体的な構成とともに、ＦＩＦＯ２００の受け渡し動作と関連づけて、次の［１−５  ＦＩＦＯを通じた受け渡し動作］の欄において詳述する。また、コア間割込信号ｆｉｎｔについては、「１−８  コア間割込信号ｆｉｎｔの接続構成」の欄において詳述する。
【００４１】
［１−５  ＦＩＦＯを通じた受け渡し動作］
ＦＩＦＯを通じた受け渡し動作は、プログラムにより、受け渡しの態様や実行のタイミングが制御される。そこで、まずＦＩＦＯやコアを受け渡しの向きの観点から整理した上で（１−５−１）、受け渡し動作の説明を行ない（１−５−２）、最後に、そのような動作のために必要となるコアの構成について上流側のコアと下流側のコアとに分けてまとめる（１−５−３、および−４）
【００４２】
［１−５−１  ＦＩＦＯおよびコアの論理的区別］
ＦＩＦＯ２００の動作面からの構成は、あるプロセスの範囲では一つのコアからみると、入力ＦＩＦＯおよび出力ＦＩＦＯとして整理される。これに対し、ＦＩＦＯからの視点でみると、各コアは、そのＦＩＦＯに向けてプロセス間通信のためのプロセスの要素を出力する側の上流側コアと、そのＦＩＦＯから上記要素を受け付ける側の下流側コアとしても整理される。これらの入力および出力、ならびに、上流および下流という表現は、プロセス間通信における要素の受け渡しの向きを示すものである。本実施形態のプロセッサ１０００におけるこの受け渡しの向きは、プログラムの制御により任意のタイミングで変更することが可能である。つまり、一つの向きは、図１に示したコア１００Ａがそれ自体が上流側コアとなり出力ＦＩＦＯとなるＦＩＦＯ２００に要素を格納し、コア１００Ｂが下流側コアとなり入力ＦＩＦＯとなるＦＩＦＯ２００からその要素を受け取る、という向きである。これは逆の向きとすることもできる。ここでは、この受け渡しの概念を明確に説明するため、図１に示したハードウエア構成との関連を一旦離れ、受け渡しの向きを固定したプロセスおよびコアの表現により以下説明し、その代わりに図１に示したハードウエアの構成との関係を抽象化したものとする。なお、図１のハードウエア構成との対応付けの例は適宜併記する。
【００４３】
図２は、上流側コアとなるコアＣ０（以下「上流側コアＣ０」と記す）と、下流側コアであるコアＣ１（「下流側コアＣ１」）とを用いてプロセス間通信およびコア間割込が生じる一例の様子を示す説明図である。このうち、図２（ａ）は、ソフトウエア上の構成を示している。つまり、上流側コアＣ０におけるカーネルとなるプロセスＰ０および下流側コアＣ１におけるカーネルとなるプロセスＰ１と、これらのコアが、ＦＩＦＯ０、ＦＩＦＯ１、およびＦＩＦＯ２を通じてプロセス間通信により受け渡す要素の入出力関係を図２（ａ）は示している。ＦＩＦＯ０、ＦＩＦＯ１、およびＦＩＦＯ２は、それぞれ、２エントリー、３エントリー、４エントリーを持つ多段のＦＩＦＯとして図示されている。
【００４４】
ここに明示したように、プロセス間通信の要素は、典型的には、上流側コアＣ０から下流側コアＣ１へと紙面上左から右に向かう向きに受け渡される。そしてプロセスＰ０とプロセスＰ１とをこの順に処理する。図２（ｂ）は、上流側コアＣ０および下流側コアＣ１におけるコア間割込信号ｆｉｎｔによるコア間割込のやり取りの関係を示している。ここでのコア間割込信号ｆｉｎｔは、入力ＦＩＦＯのための入力方向コア間割込信号ｆｉｉｎｔと出力ＦＩＦＯのための出力方向コア間割込信号ｆｏｉｎｔとに分けられる。これらの入力方向コア間割込信号ｆｉｉｎｔおよび出力方向コア間割込信号ｆｏｉｎｔを特定する際には、ＦＩＦＯ０、ＦＩＦＯ１、そしてＦＩＦＯ２うちのいずれのＦＩＦＯに関するものであるかを区別するために、入力方向コア間割込信号ｆｉｉｎｔ、出力方向コア間割込信号ｆｏｉｎｔの末尾にその信号が対象とするＦＩＦＯのサフィックスを明示する。例えば、ＦＩＦＯ０についての入力方向コア間割込信号ｆｉｉｎｔはＦＩＩＮＴ０と表現される。図２（ｂ）においては、入力方向コア間割込信号ｆｉｉｎｔおよび出力方向コア間割込信号ｆｏｉｎｔは、すべてが、それぞれ、左に向かう鎖線矢印および右に向かう鎖線矢印として明示されている。なお、ここに示した入力方向コア間割込信号ｆｉｉｎｔおよび出力方向コア間割込信号ｆｏｉｎｔは、コア間割込信号ｆｉｎｔの一例である。
【００４５】
なお、図１と図２の対応関係を、プログラムにおいて実現可能な範囲で例示すれば、コア１００Ａを上流側コアＣ０に対応させ、コア１００Ｂを下流側コアＣ１に対応させる、という対応が一例である。また、ＦＩＦＯ２００は、メモリや共有バンクレジスタを適宜構成することにより、図２のＦＩＦＯ０〜２の間で相互に論理的に区別可能なように構成することが可能である。一例としては、ＦＩＦＯ０〜ＦＩＦＯ２をすべてメモリ上に確保する構成の場合がある。別例としては、ＦＩＦＯ０〜ＦＩＦＯ２のうちの少なくとも一つ、例えばＦＩＦＯ１のみを共有バンクレジスタに、ＦＩＦＯ０とＦＩＦＯ２をメモリ上に確保する構成の場合もある。加えて、コア間割込信号ｆｉｎｔはいずれも信号路１４０（図１）を通じて通信される。なお、信号路１４０は、各コア間の信号路として図示したものであるが、コア間割込信号ｆｉｎｔは、異なるプロセッサに属するコア間の割込信号として、図示しない任意の信号路を通じて必要なコアの間で送受信することが可能である。その意味において、本実施形態におけるコア間割込信号ｆｉｎｔを伝達可能な信号路は、一のプロセッサの内部の信号路に限定されるものではない。
【００４６】
［１−５−２  プロセス間通信の方法］
図３を参照し、ＦＩＦＯ１を通じ上流側コアＣ０から下流側コアＣ１にプロセス間通信の要素を受け渡しする動作を説明する。ここでは、一例として、メモリによりＦＩＦＯを構成する場合を説明する。図３は、上流側コアＣ０から下流側コアＣ１にプロセス間通信のための要素がＦＩＦＯ１を通じて受け渡される動作を示すフローチャートである。
【００４７】
上流側コアＣ０は、まずそれ自体の処理としてプロセスＰ０を実行する（Ｓ０２）。そのために上流側コアＣ０は、あらかじめ、そのプロセスＰ０にて演算対象とするデータを、ＦＩＦＯ０（上流側コアＣ０に取っての入力ＦＩＦＯ）のその時点においてアクセスすべきエントリーから適当なデータレジスタにロードしておく。そしてそのデータレジスタを対象にしてプロセスＰ０が実行される。このプロセスＰ０は、それ自体が１以上の実行を含むプログラムによる処理である。そしてプロセスＰ０の完了時または完了間近のいずれかの実行の際に上流側コアＣ０がＦＩＦＯ１の書き込むべきエントリーへ出力する出力処理（Ｓ０４）が実行される。この際に出力される最も典型的なデータは、実行に利用されて値を格納しているデータレジスタの値である。この出力処理など、上流側コアＣ０におけるプロセスの結果出力処理を、本出願においてはストリームアウトとも呼ぶ。ここで、ストリームアウトの処理の目的は、プロセスＰ０の処理結果である要素をＦＩＦＯ１に書き込むことである。ただし、ＦＩＦＯ１のすべてのエントリーが占有されて満杯となっている場合には、その要素を保持したまま待機する必要がある。
【００４８】
このような動作のため、上流側コアＣ０は、ＦＩＦＯ１のためのＦＩＦＯカウンタＣＮＴとＩＣＳＲとの大小比較を実行する（Ｓ０４０２）。例えば上流側コアＣ０がコア１００Ａ（図１）であるなら、ＦＩＦＯカウンタ１２０ＡにおけるＦＩＦＯ１のための値と、ＩＣＳＲ１１０Ａの対応する値とを比較する。その結果、ＦＩＦＯ１が満杯でない場合にＦＩＦＯ１への出力（Ｓ０４０４）が行なわれ、ＦＩＦＯ１が満杯の時には待機状態となる（Ｓ０４０６）。この待機状態は、下流側コアＣ１からのコア間割込信号ｆｉｎｔの受信により解除され、その後にＦＩＦＯ１への要素の出力処理（Ｓ０４０４）が行なわれる。コア間割込信号ｆｉｎｔを下流側コアＣ１から受信することは、下流側コアＣ１がＦＩＦＯ１の要素を利用することによりＦＩＦＯ１に空きが生じたこととなるためである。そしてＦＩＦＯ１への出力（Ｓ０４０４）の際にＦＩＦＯ１へのアクセスが完了すると、上流側コアＣ０は、下流側コアＣ１に向けてコア間割込信号ｆｉｎｔ（出力方向コア間割込信号ｆｏｉｎｔ）を送信する（Ｓ０４０８）。そしてＦＩＦＯ１のためのＦＩＦＯカウンタＣＮＴがインクリメントされる（Ｓ０４１０）。この処理によりストリームアウトが終了する。なお、上流側コアＣ０は、下流側コアＣ１からのコア間割込信号ｆｉｎｔ（入力方向コア間割込信号ｆｉｉｎｔ）を常時監視しており、上流側コアＣ０は、下流側コアＣ１からのコア間割込信号ｆｉｎｔの受信時にＦＩＦＯ１のためのＦＩＦＯカウンタＣＮＴの値の更新処理を実行する（図示しない）。なお、ＦＩＦＯカウンタＣＮＴは典型的にはハードウエアとして実装されており、ＦＩＦＯカウンタＣＮＴの更新もハードウエアにより実行される。
【００４９】
これに対し、下流側コアＣ１には、上流側コアＣ０がプロセスＰ０の処理結果としての要素がＦＩＦＯ１を通じて入力される（Ｓ１２）。このように、上流のプロセスの実行結果を受け取る処理を、本出願を通じてストリームインと呼ぶ。ストリームインはＦＩＦＯ１が空の場合には実行できないため、ＦＩＦＯ１が空でない場合にのみ実行される（Ｓ１２）。ＦＩＦＯ１が空かどうかの判定のために下流側コアＣ１は、ＦＩＦＯ１のためのＦＩＦＯカウンタＣＮＴを利用する。すなわち、ＦＩＦＯ１が空であることを示す値、例えば０とＦＩＦＯカウンタの値とを比較する（Ｓ１２０２）。
【００５０】
そしてＦＩＦＯ１が空でない場合（正である場合）にはＦＩＦＯ１を読み出して入力処理が行なわれ（Ｓ１２０４）、空である場合には待機状態になる（Ｓ１２０６）。この待機状態は、上流側コアＣ０からのコア間割込信号ｆｉｎｔの受信により解除され、その後にＦＩＦＯ１からの要素の入力処理が行なわれる（Ｓ１２０４）。コア間割込信号ｆｉｎｔを上流側コアＣ０から受信することは、上流側コアＣ０がＦＩＦＯ１に要素を出力し、処理に利用する要素がＦＩＦＯ１から獲得できることを意味するためである。ＦＩＦＯ１からの入力処理（Ｓ１２０４）の際にＦＩＦＯ１へのアクセスが完了すると、下流側コアＣ１は、上流側コアＣ０に向けてコア間割込信号ｆｉｎｔを送信する（Ｓ１２０８）。そしてＦＩＦＯカウンタがデクリメントされる（Ｓ１２１０）。この処理によりストリームインを終了する。そして、下流側コアＣ１はＦＩＦＯ１からの要素を、自らのプロセスＰ１に利用するための要素とする。最も典型的には、その要素は、下流側コアＣ１が処理のために利用するデータレジスタに格納される。その後、下流側コアＣ１は、プロセスＰ１を実行する（Ｓ１４）。なお、下流側コアＣ１も、上流側コアＣ０からのコア間割込信号ｆｉｎｔを常時監視しており、上流側コアＣ０からのコア間割込信号ｆｉｎｔの受信時に下流側コアＣ１は、ＦＩＦＯ１のためのＦＩＦＯカウンタの値の更新処理を実行する（図示しない）。
【００５１】
ここに示した処理において、上流側コアＣ０と下流側コアＣ１との処理の進行状況は、ＦＩＦＯの状態が適切である場合は互いの進行状況とは無関係に進行する。そして、ＦＩＦＯの状態が適切でない場合に、つまりＦＩＦＯ１が満杯または空である場合のみ、上流側コアＣ０と下流側コアＣ１の処理の進行を同期させる目的で、待機状態（Ｓ０４０６、Ｓ１２０６）となる。そして、他のコアからのコア間割込信号ｆｉｎｔが常時監視され、その受信によりその待機状態が解除され、ＦＩＦＯカウンタが更新される。さらに、各コアはそれ自体の処理においてＦＩＦＯ１へのアクセスが完了すると、連携する他のコアのためにコア間割込信号ｆｉｎｔを送信する。つまり、ＦＩＦＯカウンタとＩＣＳＲの値を利用することにより、ＦＩＦＯ１が満杯や空である場合の待機状態への移行もＦＩＦＯにアクセスすることなく決定することができる。また、その待機状態からの解除も、コア間割込信号ｆｉｎｔによりＦＩＦＯにアクセスすることなく決定することができる。そのため、上流側コアＣ０と下流側コアＣ１の両プロセスを、少ないオーバーヘッドで同期することが可能となる。なお、一般的には、ＦＩＦＯ１のエントリー数が多い（ＦＩＦＯ深さ値が大きい）ほど、待機状態の発生頻度は少なくなる。本実施形態の上記動作では、ＦＩＦＯ１のエントリー数が限定されていたとしても、上流側コアＣ０と下流側コアＣ１が少ないオーバーヘッドでＦＩＦＯ１を通じたプロセス間通信を適切に行いうることから、分散処理におけるプロセス間通信の効率を高めることが可能となる。
【００５２】
［１−５−３  出力ＦＩＦＯを利用するコアの構成］
上記動作を実現するためにコア１００（図１）は、それ自体が上流側コアＣ０として機能するための適切なハードウエアを備え、適切に動作することができる。この際、ＦＩＦＯ２００は、上流側コアＣ０にとっての出力ＦＩＦＯとなっている。つまり、ＦＩＦＯ２００は、少なくとも二つのコア１００Ａおよび１００Ｂのうちのいずれか一のコアである下流側コアＣ１により処理すべき要素として、下流側コアＣ１とは別のコアである上流側コアＣ０からの要素を受け付ける。
【００５３】
より具体的には、上流側コアＣ０となるコア（例えばコア１００Ａ）は、それ自体が備えるＩＣＳＲ１１０ＡおよびＦＩＦＯカウンタ１２０Ａは、出力ＦＩＦＯのための値を格納可能になっている。また、上流側コアＣ０となるコア（例えばコア１００Ａ）に実装されたＦＩＦＯカウンタ更新機能またはステップでは、出力ＦＩＦＯのためのＦＩＦＯカウンタの値を、別のコアである下流側コアＣ１（例えばコア１００Ｂ）からの入力方向コア間割込信号ｆｉｉｎｔを受信したときデクリメントし、下流側コアＣ１に対する出力方向コア間割込信号ｆｏｉｎｔを送信したときインクリメントする機能またはステップを含んでいる。これは、ＦＩＦＯカウンタの値がＦＩＦＯの使用中のエントリー数そのものを表している場合における典型的な処理である。
【００５４】
そして、本実施形態の上流側コアＣ１に実装されたコア間割込同期機能がさらに次のような待機制御機能またはステップを実行するようにすることも好適である。つまり、出力ＦＩＦＯのためのＦＩＦＯカウンタの値とＩＣＳＲの値とを比較し、出力ＦＩＦＯが満杯である場合、上流側コア自体によるプロセスを待機状態にする。その後、下流側コアからの入力方向コア間割込信号ｆｉｉｎｔを上流側コアが受信することにより、待機状態を解除し、上流側コアによるプロセスを再開させる。逆に、コア１００のうちこれらの処理を担うコアは、上流側コアＣ０として機能することが可能である。なお、上述したように、出力ＦＩＦＯのための上流側コアＣ０のＦＩＦＯカウンタの値は入力方向コア間割込信号ｆｉｉｎｔの受信に応じてデクリメントされる。しかし、そのデクリメントを待たずに、入力方向コア間割込信号ｆｉｉｎｔの受信後即座に待機状態を解除することにより、カウンタを再度参照する分だけ待機時間を削減することが可能となる。
【００５５】
プログラムにおいては、本実施形態のコア１００、例えばコア１００Ａなどの上流側コアＣ０に実装される上記待機制御機能は、実行される一の命令に待機制御用プリフィクスＦＯＷＡＩＴを明示することにより、当該一の命令のプロセスを対象として作用すると好適である。つまり、上流側コアＣ０はそのＦＯＷＡＩＴとともに記述された上記一の命令の実行をある条件が成立すると停止させて待機状態に遷移する。この条件は、ＦＩＦＯカウンタの値によって示される出力ＦＩＦＯの使用中のエントリー数と、ＩＣＳＲの値によって示される出力ＦＩＦＯの使用可能なエントリーの上限値とが等しい、というものである。例えば出力ＦＩＦＯとして４つのエントリーを上限としており、上記上限値が４であることを示す値をＩＣＳＲが格納しているとする。この場合、出力ＦＩＦＯの使用中のエントリー数が４未満であることをＦＩＦＯカウンタの値が示していれば、ＦＯＷＡＩＴが付された上記一の命令は即座にそのまま実行される。これに対して、出力ＦＩＦＯの使用中のエントリー数が４であることをＦＩＦＯカウンタの値が示していれば、ＦＯＷＡＩＴが付された上記一の命令は実行されず待機状態となる。このため、上流側コアＣ０は、このような機能を実現するプリフィクス命令としてＦＯＷＡＩＴを解釈し実行しうるように実装されている。例えばコア１００のデコード部に、プリフィクスをデコードするためのプリフィクスデコード部をハードウエアとして作製しておき、デコード部がそのプリフィクスデコード部からの指示に応じて、プリフィクスと同一行にて後続する命令を実行部に発行するかどうかを制御すればよい。その結果、上流側コアＣ０は、出力ＦＩＦＯの状態を取得するため、あるいは、その状態を取得して動作を停止させたり再開させたりするために実質的にサイクルを消費することはない。通常は、ＦＯＷＡＩＴに同一行にて後続する命令は、出力ＦＩＦＯを利用して下流側コアＣ１に対してプロセスの処理結果としての要素を出力する命令とされる。以下、本出願にて「後続する」とはプリフィクスと同一行にて後続すること、即ちプリフィックスが付されたこととする。
【００５６】
［１−５−４  入力ＦＩＦＯを利用するコアの構成］
同様に、コア１００（図１）は、それ自体が下流側コアＣ１として機能するために、適切なハードウエアを備えるとともに、適切に動作することができる。この際のＦＩＦＯ２００は、下流側コアＣ１にとっての入力ＦＩＦＯとなっている。つまり、ＦＩＦＯ２００は、少なくとも二つのコア１００Ａおよび１００Ｂのうちのいずれか一のコアである下流側コアＣ１が処理すべき要素として、下流側コアＣ１とは別のコアである上流側コアＣ０からの要素を受け付ける。
【００５７】
具体的には、下流側コアＣ１となるコア１００が備えるＩＣＳＲ、および、下流側コアＣ１が備えるＦＩＦＯカウンタが、入力ＦＩＦＯのための値を格納可能になっている。また、下流側コアＣ１となるコア１００に実装されたＦＩＦＯカウンタ更新機能またはステップは、入力ＦＩＦＯのためのＦＩＦＯカウンタの値を、上流側コアＣ０からの出力方向コア間割込信号ｆｏｉｎｔを受信したときインクリメントし、上流側コアＣ０に対する入力方向コア間割込信号ｆｉｉｎｔを送信したときデクリメントする機能またはステップを含んでいる。
【００５８】
そして、下流側コアＣ１に実装されたコア間割込同期機能がさらに次のような機能またはステップ（進行制御機能またはステップ）を実行するようにすることも好適である。つまり、入力ＦＩＦＯのためのＦＩＦＯカウンタの値と入力ＦＩＦＯが空であることを示す値とを比較し、入力ＦＩＦＯが空である場合、下流側コアＣ１自体によるプロセスを待機状態にする。その後に、上流側コアからの出力方向コア間割込信号ｆｏｉｎｔを下流側コアが受信することにより待機状態を解除し、下流側コアによるプロセスを再開させる。逆に、コア１００のうちこれらの処理を担うコアは、下流側コアＣ１として機能することが可能である。なお、上述したように、入力ＦＩＦＯのための下流側コアＣ１のＦＩＦＯカウンタの値は出力方向コア間割込信号ｆｏｉｎｔの受信に応じてインクリメントされる。しかし、そのインクリメントを待たずに、出力方向コア間割込信号ｆｏｉｎｔの受信後即座に待機状態を解除することで、カウンタを再度参照する分だけ待機時間を削減することが可能となる。
【００５９】
本実施形態のコア１００、例えばコア１００Ｂなどの下流側コアＣ１に実装される上記進行制御機能は、実行される一の命令に進行制御用プリフィクスＦＩＳＹＮＣを明示することにより、当該一の命令のプロセスを対象として作用するものである。つまり、下流側コアＣ１は、ある条件が成立するときのみ、そのＦＩＳＹＮＣとともに記述された上記一の命令を実行する。この条件は、ＦＩＦＯカウンタの値によって示される入力ＦＩＦＯの使用中のエントリー数が０よりも大きいというものである。つまり、ＦＩＦＯカウンタの値は入力ＦＩＦＯが空であることを示す値と比較される。例えば、入力ＦＩＦＯの使用中のエントリー数が０より多いことをＦＩＦＯカウンタの値が示していれば、ＦＩＳＹＮＣが付された上記一の命令はそのまま実行される。これに対して、入力ＦＩＦＯの使用中のエントリー数が０であることをＦＩＦＯカウンタの値が示していれば、ＦＩＳＹＮＣが付された上記一の命令は待機状態となる。このため、下流側コアＣ１は、このような機能を実現するプリフィクス命令としてＦＩＳＹＮＣを解釈し実行しうるように実装されている。上述した待機制御機能（ＦＯＷＡＩＴ）の実装と同様に、ＦＩＳＹＮＣを解釈しうるプリフィクスデコーダ部をコア１００に作製する。その結果、コア１００は、入力ＦＩＦＯの状態を取得するため、あるいは、その状態を取得して動作を停止させたり再開させたりするために実質的にサイクルを消費することはない。通常は、ＦＩＳＹＮＣに後続する命令は、入力ＦＩＦＯを利用して上流側コアＣ０から要素を読み込む命令とされる。
【００６０】
［１−６  プリフィックスを利用する利点］
上述したように、上記コア間割込生成機能についての割込生成用プリフィクスＦＩＮＴ、ならびにコア間割込同期機能についてのＦＯＷＡＩＴおよびＦＩＳＹＮＣは、ＦＩＦＯを利用したコア間割込および同期処理のために利用される。このプリフィクスを利用した制御を利用する利点は、プログラムが簡便であることと、処理効率が高いことである。
【００６１】
［１−６−１  プログラムが簡便であること］
上述したプリフィクスすなわち、ＦＩＮＴ、ＦＯＷＡＩＴおよびＦＩＳＹＮＣは、プログラムにおいて、それぞれに後続する命令の実行の完了時に、またはその命令を対象としてＦＩＦＯを利用するために明示される。これは、プロセス間の同期制御や排他制御を行なったり、ＦＩＦＯを利用したりするプログラムとしては平易なものである。具体的には、上記コア間割込生成機能は、いわば、ＦＩＦＯへのアクセスの完了を通知するための機能である。このため、端的には、ＦＩＦＯの１エントリー分の処理を完了する命令に割込生成用プリフィクスＦＩＮＴが付される。同様に、コア間割込同期機能は、ＦＩＦＯに対するアクセスが必要なときにＦＩＦＯの状態を見る機能を含む。このため、ＦＯＷＡＩＴおよびＦＩＳＹＮＣは、ＦＩＦＯの状態が適切である条件を課すために、つまり、ＦＩＦＯが満杯でないこと（ＦＯＷＡＩＴ）、および、空でないこと（ＦＩＳＹＮＣ）を実行の条件とすべき各命令に付される。特に、プリフィクス以外の命令が処理目的のプログラムをそのまま記載する観点からは、プログラムや、そのプログラムを高級言語から生成するコンパイラーの構成が簡便となる利点が大きい。高級言語からアセンブリプログラムまたは機械語プログラムを生成するコンパイラーに対して、上述したようなコードを出力させることにも特段の困難性はない。
【００６２】
なお、プリフィクスを命令セットの一部に有する本実施形態の各コアは、このようなプリフィクスを解釈し、コア間割込生成機能およびコア間割込同期機能を実行させるように作製される。例えば上述したプリフィクスデコーダ部を有し、そのプリフィクスデコーダ部からの出力で命令の発行を停止または再開されるように、デコーダ部が設計される。
【００６３】
［１−６−２  処理効率が高いこと］
上記プリフィクスを用いるもう一つの利点は、オーバーヘッドが少なく、そのコア間割込のために必要となるサイクルが皆無またはごくわずかとなるため高い処理効率が得られることである。上記プリフィクスを用いるプログラムにおいては、ＦＩＦＯを利用したプロセス間通信のためにＦＩＦＯの状態を確認したり、その状態による場合分けしたりする処理は、不要またはごくわずかである。このため、ＦＩＦＯを利用するためにオーバーヘッドとなるサイクルを殆ど伴うことはない。しかも、コア間割込同期機能のためのＦＯＷＡＩＴやＦＩＳＹＮＣが明示されていたとしても、実行が待機状態になるのは、出力ＦＩＦＯが満杯のときまたは入力ＦＩＦＯが空のとき、つまり処理を進めることができないときのみである。つまり、もしＦＩＦＯの状態が処理に支障が無い場合には、ＦＩＦＯを利用しながらも、あたかもＦＩＦＯの状態の確認を省略しているかのような高い処理効率で進行する。
【００６４】
［１−７  ＩＣＳＲの実装］
図４は、本実施形態の各コアのＩＣＳＲの典型的な構成を示す説明図である。図４に示すように、各ＩＣＳＲは、適当なビット長（ここでは３２ビット長）とされる。このうち、プロセッサ１０００において、図２に示したＦＩＦＯ０〜ＦＩＦＯ２のようなＦＩＦＯを合計８本使用する場合には、典型的には、各ＦＩＦＯに４ビットが対応付けされる。そして、図４に示した構成のＩＣＳＲでは、各ＦＩＦＯ（ＦＩＦＯｎ、ｎは０〜７）に対応する４ビットのうち、下位３ビット（ＦＩＦＯｎ（２：０））はＦＩＦＯｎのＦＩＦＯ深さ値を格納する。これに対し、当該４ビットのうちの最上位の１ビット（Ｆｎ）は、ＦＩＦＯｎの方向を格納する方向ビットである。ここで、ＦＩＦＯ深さ値が１であることは、そのＦＩＦＯが１エントリーのものあることを意味する。さらに、ＦＩＦＯ深さ値を示さない値、例えば０を、そのコアから見て当該ＦＩＦＯがアクセスできないこと、または、そのＦＩＦＯに関するコア間割込信号ｆｉｎｔを通信できないことを示すために採用することも有効である。さらに上記方向とは、そのＩＣＳＲを有するコアから見て、当該ＦＩＦＯが入力ＦＩＦＯであるか出力ＦＩＦＯであるかを意味している。このため、この方向とは図２（ａ）の左右方向に対応付けされる。例えば上記方向ビットの０および１を、それぞれ、関連するＦＩＦＯが入力ＦＩＦＯであること、および出力ＦＩＦＯであることに対応付けする。
【００６５】
このようなＩＣＳＲの各コアでの実装は、簡単な構成でありながらも必要十分な機能を果たすレジスタの構成例といえる。例えば、図４（ｂ）および図４（ｃ）は、図２に対応させて示す上流側コアＣ０および下流側コアＣ１それぞれのＩＣＳＲの例である。このＩＣＳＲの表現により示されているのは、第１に、ＦＩＦＯ０〜２について、ＦＩＦＯ深さが、それぞれ２、３および４エントリーであることである。第２に、上流側コアＣ０および下流側コアＣ１それぞれにとっての方向つまり入力ＦＩＦＯであるか出力ＦＩＦＯであるの区別、そして第３に、下流側コアＣ１および上流側コアＣ０が、それぞれ、ＦＩＦＯ０、ＦＩＦＯ２にアクセスできないことも表現されている。このように、各ＦＩＦＯがいずれのコアの演算に利用されるかは、各コアのＩＣＳＲに値を格納することによって決定される。
【００６６】
［１−８  コア間割込信号ｆｉｎｔの構成］
次に、コア間割込信号ｆｉｎｔの典型的な構成について説明する。図２に示したように典型的なコア間割込信号ｆｉｎｔは、出力方向コア間割込信号ｆｏｉｎｔと入力方向コア間割込信号ｆｉｉｎｔにより構成される。また、図２において、ＦＩＦＯのサフィックスにより、例えば「ＦＯＩＮＴ１」としてＦＩＦＯ１に対応することが明示されるように、入力方向コア間割込信号ｆｉｉｎｔおよび出力方向コア間割込信号ｆｏｉｎｔは、対象とするＦＩＦＯと対応付けすることができる。
【００６７】
図５は、コア間割込信号ｆｉｎｔを伝送するための信号路の具体的構成を示す接続図である。この信号路の構成を本出願ではｆバスと呼ぶ。ｆバスは、少なくとも論理的に区別される系統の信号路を複数含んでいる。図５においてｆ＿ｆｉｉｎｔ（７：０）と示した信号路は入力方向コア間割込信号ｆｉｉｎｔを、また、ｆ＿ｆｏｉｎｔ（７：０）と示した信号路は出力方向コア間割込信号ｆｏｉｎｔを、それぞれ伝達する。特に、図４に示したＩＣＳＲの例に対応させて説明すれば、入力方向コア間割込信号ｆｉｉｎｔは各ＦＩＦＯｎ（ｎは０〜７）に対応した独立したビットを持つ。この構成は図５においてｆ＿ｆｉｉｎｔ（７：０）と明示している。これらの各系統の信号路は典型的には、コア１００のうちの少なくとも二つのコアとして説明したコア１００Ａおよびコア１００Ｂの双方に接続されている。図５には、図４のＩＣＳＲの構成に対応させてコアＣ０〜Ｃ７の８つのコアを明示しておおり、これらのうちのいずれか二つのコアがコア１００Ａおよびコア１００Ｂに対応付けられる。したがって、図５に示した複数の信号路のうち、ｆ＿ｆｏｉｎｔ（７：０）と示した信号路は、二つのコア１００Ａおよびコア１００Ｂの双方にとっての入力ＦＩＦＯに関する入力方向コア間割込信号ｆｉｉｎｔを伝達するものといえる。同様に、出力方向コア間割込信号ｆｏｉｎｔは、二つのコア１００Ａおよびコア１００Ｂの双方出力ＦＩＦＯに関する出力方向コア間割込信号ｆｏｉｎｔを伝達する。
【００６８】
ここで、入力方向コア間割込信号ｆｉｉｎｔや出力方向コア間割込信号ｆｏｉｎｔの発行を司る命令（ＦＩＮＴプリフィクス命令）では、対象となるＦＩＦＯを特定するのみにて、入力方向コア間割込信号ｆｉｉｎｔや出力方向コア間割込信号ｆｏｉｎｔのいずれを送信すればよいか判定できる。その理由は、ＦＩＮＴプリフィクス命令が実行される際には、例えば各コアのプリフィクスデコーダ部は、対象となるＦＩＦＯのための上記方向ビットＦｎ（図４（ａ）のＩＣＳＲ）を参照しさえすれば、そのＦＩＦＯがそのコアにとっての入力ＦＩＦＯであるか出力ＦＩＦＯであるかを特定することができるためである。例えば、ＦＩＦＯｎ（ｎは０〜７のうちのひとつの整数）における方向ビットＦｎが、そのコアにとってのＦＩＦＯｎが入力ＦＩＦＯであることを示すなら、ｆ＿ｆｉｉｎｔ（７：０）におけるｎ番の信号により入力方向コア間割込信号ｆｉｉｎｔが発行される。そして、その入力方向コア間割込信号ｆｉｉｎｔは、そのＦＩＦＯｎを出力ＦＩＦＯとして利用するコア（下流側コア）において、その制御のために上述したように利用される。逆方向も同様である。
【００６９】
このような方向別の信号系統を用いる典型的な構成では、本実施形態において、プロセッサに備わる３つ以上のコアの間で、ＦＩＦＯを利用した一連の命令実行プロセスの受け渡しの処理が任意のコアの組合せを許容する柔軟なものとなる。とりわけ、オフチップ、オンチップのいずれかのメモリを利用してＦＩＦＯを実装する場合には、各コアからＦＩＦＯへのアクセスを柔軟に行ないうることは、演算処理の自由度を大きく高めることになる。例えば図５において、コアＣ７が上流側コアとなり、コアＣ０が下流側コアとなって、ＦＩＦＯを利用した動作も可能である。なお、競合状態（Racing Condition）を防止すべきとの要請を満たすために、最も典型的には、各ＦＩＦＯは、一連の命令実行プロセスをなすプロセスの範囲において、原則として上流側コアとなるコア１つと、下流側コアとなるコア１つとに接続される。
【００７０】
［１−９  ＦＩＦＯエントリー数の動的な調整］
再び図１および図２を参照して、二つのＦＩＦＯのエントリー数のバランスを動的に調整する構成について説明する。ＦＩＦＯ２００は、プロセッサ１０００の複数のコアがコア１００Ａおよび１００Ｂに加えて三つ目のコア１００Ｃを含んでおり、論理的に互いに区別される複数のＦＩＦＯ、例えばＦＩＦＯ１とＦＩＦＯ２（図２）を利用する場合がある。なお、三つ目のコア１００Ｃも、ＩＣＳＲ１１０ＣとＦＩＦＯカウンタ１２０Ｃとを有するとともに、コア間割込同期機能、コア間割込生成機能、およびＦＩＦＯカウンタ更新機能を処理可能なように実装されているとする。この場合、これら三つのコア１００Ａ、１００Ｂおよび１００Ｃに含まれる第１対のコアのうち、いずれかのコアのＩＣＳＲである第１のＩＣＳＲが、第１対のコアが担うプロセスの間のプロセス間通信のために用いられるＦＩＦＯ１（第１のＦＩＦＯ）のための値を含んでいる。ＦＩＦＯ２（第２のＦＩＦＯ）に対しても、三つのコアに含まれる第２対のコアのうちのいずれかのコアのＩＣＳＲが、第２対のコアが担うプロセスの間のプロセス間通信のために用いられる第２のＩＣＳＲとなる。なお、第１対をなす二つのコアのうちの一つと、第２対をなす二つのコアのうちの一つは重複していてもよい。図１では、例えば、第１対をなすコアをコア１００Ａおよびコア１００Ｂとし、第２対をなすコアをコア１００Ｂおよびコア１００Ｃとする。
【００７１】
上述したように可能な限り多くのエントリー数によりＦＩＦＯ１やＦＩＦＯ２を構成するほど、コア間の動作を同期させる分散処理の柔軟性を高めることができ、処理効率の観点からは理想的である。しかし、実際にはＦＩＦＯ１とＦＩＦＯ２とは、有限のリソース、例えばオンチップメモリを共有して構成されており、互いにリソースを取り合う関係にある。また、実際の処理ではコアの演算負荷にインバランスが生じる場合も多い。さらには、必ずしもＦＩＦＯ１とＦＩＦＯ２が同じエントリー数が占有されながら演算が進行するともいえない。これらの実際的な計算処理の状況に対応するためには、複数のコアを利用する全体としての処理効率を向上させるために、状況に応じＦＩＦＯ１とＦＩＦＯ２とのそれぞれのエントリーの数や、両者のエントリー数の相対的なバランスを変化させることが有効である。
【００７２】
上記計算処理の状況は、例えば、各ＦＩＦＯを利用するコアの負荷状況により決定することができる。また、ＦＩＦＯ１が満杯になるか、または、ＦＩＦＯ２が空であるか、というＦＩＦＯの使用状況により上記計算処理の状況を決定することもできる。本実施形態のプロセッサ１０００において上記バランスを調整するためには、あるコア（例えば下流側コアＣ１）にとっての入力ＦＩＦＯ（例えばＦＩＦＯ１）では、そのコアの計算負荷がそれより上流側のコア（上流側コアＣ０）よりも大きい場合にはＦＩＦＯのエントリー数が増加され、小さい場合には、ＦＩＦＯのエントリー数が削減される。負荷の関係が逆の場合には増減の関係は逆に調整される。また、ＦＩＦＯの使用状況に基づいて上記バランスを調整するためには、例えばＦＩＦＯ１が満杯になることが多い場合にＦＩＦＯ１のエントリー数が増加され、ＦＩＦＯ２が空になることが多い場合ＦＩＦＯ２のエントリー数が減少される。本実施形態のプロセッサ１０００ではＩＣＳＲ１１０の値によりＦＩＦＯ深さ値としてＦＩＦＯの使用エントリー数の上限を決定するため、ＦＩＦＯ１やＦＩＦＯ２のエントリー数の増減は、第１のＩＣＳＲおよび第２のＩＣＳＲの値を変化させることにより実施することができる。このバランスの調整のタイミングは、あらかじめ演算処理の特性に応じてプログラムにおいて指定することができる。別の構成としては、計算負荷をモニタすることも可能である。例えば、演算を担うコアとは別の管理用コア１７０（図１）により、上流側コアＣ０や下流側コアＣ１、追加のコアといった演算用コアの計算負荷をモニタする。また、管理用コア１７０が、演算用コアの上記第１のＩＣＳＲや第２のＩＣＳＲと比較されるＦＩＦＯカウンタをモニタしたり、当該管理用コア１７０がコア間割込信号ｆｉｎｔを受信してＦＩＦＯの使用状況をモニタしたりすることも有効である。このようなＦＩＦＯのエントリー数のバランス調整によるコアの計算負荷の調整、特にコア間のインバランスの制御は、限定されたリソースを有効に利用しながら計算効率を高めることを可能にするため、高い実用性をもたらすものである。
【００７３】
［２  ＦＩＦＯ実装例］
次にＦＩＦＯのより具体的な実装形態について説明する。図２に示したフローチャートによって図３に示した受け渡しまたはそれに同等な受け渡しを実行するためのＦＩＦＯ１のためのハードウエアは、上述したように二つの典型的な構成において実施することができる。一つはメモリを用いものであり、もう一つはコア間で共有される共有レジスタを用いるものである。ここでは、各構成についてのサンプルのプログラムを説明する。なお、以下の説明において、メモリか共有レジスタバンクかが変更されるのは、図２におけるＦＩＦＯ１のみである。ＦＩＦＯ０およびＦＩＦＯ２は、いずれもメモリであるとする。
【００７４】
［２−１  メモリによるＦＩＦＯ実装例］
ＦＩＦＯ２００をソフトウエア上にて実装するためにメモリを用いることは、ＦＩＦＯとして、プロセッサとは別の半導体チップのメモリを利用するもの、および、プロセッサと同一の半導体チップのオンチップメモリを利用するもの、という典型的な二つの形態を含んでいる。いずれの場合であっても、ＦＩＦＯは、アドレスを指定することによりアクセスすることができる。
【００７５】
［２−１−１  例示のプログラム］
図６は、ＦＩＦＯ２００のすべてのＦＩＦＯをメモリ上に実装する場合の例示のプログラムリストである。ここでは、再び図２に示した上流側コアＣ０と下流側コアＣ１に実行させるプログラムとして説明する。図６に示すとおり、上流側コアＣ０と下流側コアＣ１にはそれぞれのプログラムが与えられる。つまり、一連の命令実行プロセスの一部として、上流側コアＣ０はプロセスＰ０を実行し、下流側コアＣ１はプロセスＰ１を実行する。本プログラムリストにおいては、「；」により開始する行はコメント行であり、「＜」と「＞」で囲んだ記載は本出願にて動作を説明するためのものである。また、上述した図３のフローチャートは、以下の上流側コアＣ０におけるプロセスＰ０、ストリームアウト、下流側コアＣ１におけるストリームインおよびプロセスＰ１に対応している。
【００７６】
［２−１−１−１  上流側コアＣ０のプログラム］
上流側コアＣ０が実行する処理は、順に、初期化、ＦＩＦＯ０を入力ＦＩＦＯ（メモリ）とするストリームイン、カーネルであるプロセスＰ０、そしてＦＩＦ０１を出力ＦＩＦＯとするストリームアウトである。初期化では、上流側コアＣ０にとっての入力ＦＩＦＯであるＦＩＦＯ０、および上流側コアＣ０にとっての出力ＦＩＦＯであるＦＩＦＯ１のためのベースアドレスを設定する。そして、ＩＣＳＲの値としてＦＩＦＯ０とＦＩＦＯ１に対応する値を設定する。
【００７７】
ストリームインの最初の命令は、ＦＩＳＹＮＣ０：ＦＩＮＴ０：ＬＤＭ  Ｄ０ｘ１６，［Ｒ０］の行である。この行は、二つのプリフィクスＦＩＳＹＮＣ０およびＦＩＮＴ０がＬＤＭ（ロードマルチ）命令に付されて構成されている。なお、ここに記載されたＬＤＭ命令は、アドレスポインタであるＲ０が示すメモリ位置のデータをＤ０から始まる１６本のデータレジスタにロードするための命令である。このうちＦＩＳＹＮＣ０は、ＦＩＦＯ０を対象とする進行制御用プリフィクスＦＩＳＹＮＣであり、「１−５−４  入力ＦＩＦＯを利用するコアの構成」の欄にて説明した進行制御機能を、後続するＬＤＭ命令に対して作用させるものである。具体的には、ＦＩＳＹＮＣ０の作用は、二つに場合分けすることができる。一つは、ＦＩＦＯ０（図２）がreadyつまり空でないという第１条件が成立するときに後続するＬＤＭ命令を実行させるというものである。もう一つは、ＦＩＦＯ０がemptyつまり空であるという第２条件が成立するときＦＯＩＮＴ０（図２）を待たせるというものである。このＦＯＩＮＴ０は、さらに上流側コア（存在すれば）からの出力方向コア間割込信号ｆｏｉｎｔである。第２条件は、第１条件と排他的に成立し、出力方向コア間割込信号ｆｏｉｎｔの到来によりＦＩＦＯ０がreadyとなるため、上記場合分けして説明したＦＩＳＹＮＣ０の動作は、上述した進行制御機能と同様の動作となる。
【００７８】
一方、ＦＩＮＴ０は、後続するＬＤＭ命令の実行のためのＦＩＦＯ０へのアクセスの完了時に、ＦＩＦＯ０を出力ＦＩＦＯとするさらに上流側コアに対する入力方向コア間割込信号ｆｉｉｎｔ（ＦＩＩＮＴ０、図２）を送信するためのプリフィクスである。ＦＩＮＴ０の末尾の「０」は、ＦＩＦＯ０を特定するためのものである。ちなみに、ＦＩＦＯ０が上流側コアＣ０にとって入力ＦＩＦＯであるか出力ＦＩＦＯであるかはＦＩＮＴ０では明示的に特定されてはいない。これは、ＩＣＳＲにおける方向ビットを参照すれば、接続される各ＦＩＦＯが入力ＦＩＦＯか出力ＦＩＦＯであるかを上流側コアＣ０が特定できるためである。
【００７９】
なお、ＦＩＦＯ０が空か空でないかの判定は、ＦＩＦＯ０のためのＦＩＦＯカウンタの値（ＦＩＦＯ０．ＣＮＴ）の値により判定される。この動作を可能にするため、ＦＩＦＯ０．ＣＮＴは、上流側コアに対する入力方向コア間割込信号ｆｉｉｎｔの送信によりデクリメントされ、上流側コアからの出力方向コア間割込信号ｆｏｉｎｔの到来によりインクリメントされている（ＦＩＦＯカウンタ更新機能）。
【００８０】
さらに、ストリームインの第２の命令として、ＡＤＤ命令により、Ｒ０（ＦＩＦＯ０のアドレスをポインタとして格納するレジスタ）を、ＦＩＦＯ０＿ｓｉｚｅつまりＦＩＦＯ０の１エントリー分だけシフトする。これによりストリームインを完了する。
【００８１】
ストリームインののち、カーネルプロセスであるプロセスＰ０を実行する（図２、図３）。
【００８２】
そして、ストリームアウトは、今度はＦＩＦＯ１を通じてデータレジスタの内容を下流側コアＣ１に渡す処理である（図２）。この処理は、ＦＯＷＡＩＴ１：ＦＩＮＴ１：ＳＴＭ  ［Ｒ１］，Ｄ１６ｘ１６の行により実行される。これは、プリフィクスＦＯＷＡＩＴ１およびＦＩＮＴ０がＳＴＭ（ストアマルチ）命令に付されて構成されている。ＳＴＭ命令は、アドレスポインタであるＲ１が示すメモリ位置に、Ｄ１６から始まる１６本のデータレジスタの値をストアするための命令である。
【００８３】
ストリームアウトにおけるプリフィクスＦＯＷＡＩＴ１は、ＦＩＦＯ１を対象とする待機制御用プリフィクスＦＯＷＡＩＴであり、上述した待機制御機能を後続するＳＴＭ命令に対して作用させるものである。ＦＯＷＡＩＴ１の作用も二つに場合分けすることができる。一つは、ＦＩＦＯ１（図２）がfullつまり満杯であるという第１条件が成立するときＦＩＩＮＴ１（図２）、下流側コアＣ１からの入力方向コア間割込信号ｆｉｉｎｔの到来を待たせるというものである。もう一つは、ＦＩＦＯ１がnot fullつまり満杯でないという第２条件が成立するとき、後続するＳＴＭ命令を実行させるというものである。この場合にも、第２条件は、第１条件と排他的に成立し、入力方向コア間割込信号ｆｉｉｎｔの到来によりＦＩＦＯ１がnot fullとなるため、上記場合分けして説明したＦＯＷＡＩＴ１の動作は、上述した待機制御機能と同様の動作となる。
【００８４】
ＦＩＮＴ１は、後続するＳＴＭ命令の実行のためのＦＩＦＯ１へのアクセスの完了時に、下流側コアＣ１に対する出力方向コア間割込信号ｆｏｉｎｔ（ＦＯＩＮＴ１、図２）を送信するためのプリフィクスである。ＦＩＮＴ１の末尾の「１」がＦＩＦＯ１を特定していること、ＦＩＦＯ１が入力ＦＩＦＯであるか出力ＦＩＦＯであるかの特定が不要なことは、ＦＩＳＹＮＣ０の場合と同様である。また、ＦＩＦＯ１が満杯か満杯でないかの判定のために、ＦＩＦＯ１のためのＦＩＦＯカウンタの値（ＦＩＦＯ１．ＣＮＴ）の値が利用されることも同様である。さらに、ＦＩＦＯ１．ＣＮＴは、下流側コアＣ１に対する出力方向コア間割込信号ｆｏｉｎｔの送信によりインクリメントされ、下流側コアＣ１からの入力方向コア間割込信号ｆｉｉｎｔの到来によりインクリメントされること（ＦＩＦＯカウンタ更新機能）も同様である。
【００８５】
［２−１−１−２  下流側コアＣ１のプログラム］
下流側コアＣ１のプログラムにおける受け渡しのためのプログラムも、上述した上流側コアＣ０のプログラムと同様に、初期化、ストリームイン、プロセスＰ１、ストリームアウトという構成となっている。各命令に対するプリフィクスの作用も上述したものと同様である。下流側コアＣ１のプログラムを、上流側コアＣ０のプログラムとの違いのみ説明すれば、利用するＦＩＦＯがＦＩＦＯ１とＦＩＦＯ２になっていることの違いのみである。また、プロセスＰ１が一連の命令実行プロセスの最終のものであれば、最終のＦＯＷＡＩＴ２、ＦＩＮＴ２、ＳＴＭ［Ｒ２］、Ｄ７ｘ１６におけるＦＩＦＯに関するプリフィクスは不要となる。
【００８６】
［２−２  共有レジスタバンクによるＦＩＦＯ実装例］
別の典型的な実施形態は、プロセッサのコア間にて共有される共有レジスタバンクを利用するものである。この共有レジスタバンクの各レジスタへのアクセスは、メモリアクセスのためのサイクル（例えばロード命令やストア命令）を消費することなく、即座に可能である。このため、ＦＩＦＯを利用した演算を高速に行ないうる利点を有する。なお、本実施形態の共有レジスタバンクを実装するためには、共有レジスタバンクは、ＦＩＦＯ２００の各エントリーを構成可能なものとされる。特に、ＦＩＦＯの各エントリーを共有レジスタバンクの各バンクに割り当てると、各コアがアクセスするバンクを切り替える動作によって先入れ先出し動作するＦＩＦＯ２００を構成することも可能となる。このような負荷のない処理の結果、上記メモリアクセスレイテンシーの制約からの解放と併せて、極めて高い演算効率にてＦＩＦＯを利用する演算を実行することが可能となる。
【００８７】
この実装の場合には、プロセッサ１０００は、コア間にて共有される共有レジスタバンクとともに、各コアは、バンク切り替えのための命令をデコードしうるように作製される。また、ＦＩＦＯとして用いる共有レジスタバンクを共有するコアは、互いの構成が異なっていることもあり得る。例えば、ビット長の異なるコアであっても、互いの間において共有レジスタバンクを通じた一連の命令実行プロセスの受け渡しを実行することが可能である。
【００８８】
［２−２−１  リング型接続］
図７は、データレジスタである共有レジスタバンクを利用してＦＩＦＯを実装する典型的な構成を示す説明図である。図７（ａ）は、隣接するコアで互いに参照される共有レジスタバンクの参照関係を示しており、図７（ｂ）は、共有レジスタバンクの参照・被参照時のレジスタバンクの対応関係を示す図である。本構成においては、隣接するコア間において互いに他のコアのレジスタバンクを参照することが可能となる。
【００８９】
本実施形態における複数のコアは、少なくとも二つのコアに少なくとも一つのコアを加えた少なくとも三つのコアを含んでいる。追加となる少なくとも一つのコアは、ＩＣＳＲとＦＩＦＯカウンタとを有するとともに、コア間割込同期機能、コア間割込生成機能、およびＦＩＦＯカウンタ更新機能を処理可能なように実装されている。そして、図７（ａ）に示したように、少なくとも三つのコアにおけるコア間の共有レジスタバンクの参照トポロジーは、各コアが順序づけされたリング型の並びをなしている。この並びは、典型的には半導体ダイにおけるレイアウト上においても、例えばループ状の並びとして実現される。
【００９０】
そして、共有レジスタバンクは、コアの並びにおいて互いに隣接する一対のコアの間で、順序の昇順または降順の少なくともいずれか一の向きに一のコアから他のコアへ参照可能なものである。例えば、各コアが、レジスタバンクＢ０〜Ｂ１５という１６バンクの共有レジスタバンクを利用できるとする。その際、隣り合ったコアは互いにその一部のバンクを共有している。例えば、図７（ｂ）に示したように、隣り合った三つのコアの中央のコア（参照コア）において、レジスタバンクＢ０〜Ｂ１５を演算に用いるとする。この際、参照コアのレジスタバンクＢ１２〜Ｂ１５は、左隣のコア（第１の被参照コア）のレジスタバンクＢ４〜Ｂ７にマップされている。同様に、参照コアのレジスタバンクＢ８〜Ｂ１１は、右隣のコア（第２の被参照コア）のレジスタバンクＢ０〜Ｂ３にマップされている。このため、第１の被参照コアが自らのレジスタバンクＢ４〜Ｂ７をＦＩＦＯのために使用する演算を進めながらそのＦＩＦＯに参照コアがアクセスするためには、参照コアは自らのレジスタバンクＢ１２〜Ｂ１５をアクセスするだけでよい。
【００９１】
［２−２−２  例示のプログラム］
図８は、共有レジスタバンクを利用しＦＩＦＯ２００を実装する場合に動作される例示のプログラムリストである。ここでは、再び図２に示した上流側コアＣ０と下流側コアＣ１に実行させるプログラムとして説明する。図８に示すとおり、上流側コアＣ０と下流側コアＣ１には、それぞれのプログラムが与えられる。メモリを利用したＦＩＦＯの場合と同様に、図３のフローチャートは、以下の上流側コアＣ０におけるプロセスＰ０、ストリームアウト、下流側コアＣ１におけるストリームインおよびプロセスＰ１に対応している。なお、以下のプログラムにおいては、ＦＩＦＯ１のみを共有レジスタバンクにより実現し、ＦＩＦＯ０およびＦＩＦＯ２はメモリであるとする。以下、メモリを利用したＦＩＦＯの場合（図６）との違いを中心に説明する。また、共有レジスタバンクを用いる場合の処理は、図３に示したフローチャートの各ステップとは順序が前後しており、ストリームインおよびストリームアウトの範囲も図３のものとは異なっている。
【００９２】
［２−２−２−１  上流側コアＣ０のプログラム］
上流側コアＣ０が実行する処理は、順に、初期化、ＦＩＦＯ０を入力ＦＩＦＯ（メモリ）とするストリームイン、カーネルであるプロセスＰ０、そして共有レジスタバンクに構成されるＦＩＦ０１を出力ＦＩＦＯとするストリームアウトである。初期化では、上流側コアＣ０にとっての入力ＦＩＦＯであるＦＩＦＯ０のためのベースアドレスを設定する。そして、ＩＣＳＲの値としてＦＩＦＯ０とＦＩＦＯ１に対応する値を設定する。
【００９３】
ストリームインは、その内容および機能はメモリの場合（図６）と同様である。つまり、最初の命令は、ＦＩＳＹＮＣ０：ＦＩＮＴ０：ＬＤＭ  Ｄ０ｘ１６，［Ｒ０］の行であり、ストリームインの第２の命令は、ＡＤＤ命令によるＦＩＦＯ０の１エントリー分だけシフトする。これによりストリームインを完了する。
【００９４】
ストリームインののち、カーネルプロセスであるプロセスＰ０を実行する（図２、図３）。ここで、プロセスＰ０の演算処理の前に、ＦＯＷＡＩＴ１：ｘｘの行において、レジスタのＦＩＦＯ１がnot fullつまり満杯でないことを条件にして命令ｘｘ（任意の命令）を実行する。その際には、ＦＩＦＯ１が満杯か満杯でないかの判定のためにＦＩＦＯ１のためのＦＩＦＯカウンタの値（ＦＩＦＯ１．ＣＮＴ）の値が利用される。
【００９５】
そして、ＢＳ１０の行は、バンクスイッチ命令である。ここでは「１０」という指定によって、ソースレジスタのためのバンク（ソースバンク）は不変のまま、共有レジスタバンクのデスティネーションレジスタのためのバンク（デスティネーションパンク）をＢ１に切り替える。これにより、上流側コアＣ０にとっての出力ＦＩＦＯとなるＦＩＦＯ１のエントリーが、演算に用いる要素の格納先として指定される。その後、プロセスＰ０の実体的な演算処理を実行する（プログラムにおいて「・・」とのみ表記）。その演算処理は、Ｂ１に指定したデスティネーションバンクの各レジスタに更新された値が格納されてゆく。
【００９６】
ＦＩＮＴ１：の行は、下流側コアＣ１に対する出力方向コア間割込信号ｆｏｉｎｔを送信し、ＦＩＦＯ１．ＣＮＴをインクリメントする命令である。この命令により、プロセスＰ０は完了する。
【００９７】
ストリームアウトは、ＦＩＦＯ１の書き込み先エントリーを変更するために、ＢＳ２０の行により、デスティネーションパンクをＢ２に切り替える処理のみで完了する。
【００９８】
本プログラムでは、上述したカーネルプロセスであるプロセスＰ０とストリームアウトの処理を通じて、上記待機制御機能の動作が行なわれる。なお、ＦＩＦＯ１が共有レジスタバンクであることから、ＩＣＳＲの値のうちＦＩＦＯ１の値は利用されず、ＦＩＦＯとして用いるレジスタバンクの方向（入力ＦＩＦＯか出力ＦＩＦＯか）は、ＩＳＣＲの方向ビットではなく、ＢＳ１０命令により特定される。
【００９９】
［２−２−２−２  下流側コアＣ１のプログラム］
下流側コアＣ１が実行する処理も、順に、初期化、ストリームイン、カーネルであるプロセスＰ１、そしてストリームアウトである。ストリームインは、共有レジスタバンクに構成されるＦＩＦ０１を入力ＦＩＦＯとするものであり、ストリームアウトは、ＦＩＦＯ２を出力ＦＩＦＯ（メモリ）とする。
【０１００】
ストリームインは、ＦＩＳＹＮＣ１：ｘｘの命令である。つまり、ＦＩＦＯ１であるレジスタバンクが空であるつまりreadyでなければ、ＦＯＩＮＴ１（図２）つまり上流側コアＣ０からの出力方向コア間割込信号ｆｏｉｎｔの到来を待ち、その到来を条件に命令ｘｘを実行する。この際、ＦＩＦＯ１が空かどうかの判定のためにＦＩＦＯ１のためのＦＩＦＯカウンタの値（ＦＩＦＯ１．ＣＮＴ）の値が利用される。
【０１０１】
プロセスＰ１は、ＢＳ０１命令により、デスティネーションバンクは不変のまま、ソースバンクを演算に用いるレジスタのための共有バンクレジスタのバンクであるＢ１に設定している。そのバンクＢ１のレジスタをソースレジスタとして演算処理が行なわれる。その後、ＦＩＮＴ１：ｘｘにより、命令ｘｘのためのソースバンクＢ１へのアクセスが完了したときに、上流側コアＣ０に対する入力方向コア間割込信号ｆｉｉｎｔを送信し、ＦＩＦＯ１．ＣＮＴをデクリメントする。上記ストリームインとプロセスＰ１の処理をこの時点まで進めることにより、上記進行制御機能が実施される。そして、この際にも、ＦＩＦＯ１が共有レジスタバンクであることから、ＩＣＳＲの値のうちＦＩＦＯ１の値は利用されず、ＦＩＦＯとして用いるレジスタバンクの方向（入力ＦＩＦＯか出力ＦＩＦＯか）は、ＩＳＣＲの方向ビットではなく、ＢＳ０１命令により特定される。
【０１０２】
その後、ストリームアウトの処理が行なわれる。この処理は、メモリであるＦＩＦＯ２を出力ＦＩＦＯとする処理であり、メモリを利用するものと同様である。
【０１０３】
［３  変形例］
上述した説明において、本実施形態は、プロセッサとしてその構成要素、機能、および動作を説明した。本実施形態は、上述した各構成要素、機能、および動作を実現するプロセッサに備わるコアとして、または、上述した各動作を実現する上記プロセッサの動作方法として実施することが可能である。
【０１０４】
［３−１  ＦＩＦＯの構成の変形例］
例えば、例示したプログラムにおいては、プロセッサ間通信のためのＦＩＦＯのエントリー数は３エントリー（図６）などとしているが、このエントリー数は、１エントリーまたは複数のエントリーのための任意の値とすることができる。本実施形態のプロセッサの複数のコアには、通常の演算コアに装備されないコア間割込信号ｆｉｎｔを送信する機能があるため、ＦＩＦＯとして必ずしも多段のＦＩＦＯを利用しなくとも、コア同士の連携を適切に実行することが可能となる。
【０１０５】
［３−２  ＦＩＦＯの構成の変形例］
さらに、例示したプログラムにおいては、ＩＣＳＲの値は初期化の段階に設定している。本実施形態では、別の例として、ＩＣＳＲの値、特にＦＩＦＯのエントリー数を指定する値を変更することにより、少なくとも三つのコアにおいて利用される二つのＦＩＦＯのエントリー数のバランスを動的に調整することが可能である。このような構成とすると、有限のメモリなどのリソースを適切に配分することが可能となり有用性が高いプロセッサを作成することが可能となる。
【０１０６】
以上、本発明の実施形態を具体的に説明した。上述の各実施形態および実施例は、発明を説明するために記載されたものであり、本出願の発明の範囲は、特許請求の範囲の記載に基づいて定められるべきものである。また、各実施形態の他の組合せを含む本発明の範囲内に存在する変形例もまた、特許請求の範囲に含まれるものである。
【産業上の利用可能性】
【０１０７】
本発明のプロセッサ、コアおよびプロセッサの動作方法は、プロセッサを利用する任意の電気・電子機器に利用可能である。
【符号の説明】
【０１０８】
１  コンピュータ
２０００  ＣＰＵ（中央演算装置）
３０００  バス
１０００  プロセッサ
１００  コア
１００Ａ、１００Ｂ、１００Ｃ  コア
１１０、１１０Ａ、１１０Ｂ、１１０Ｃ  ＩＣＳＲ
１２０、１２０Ａ、１２０Ｂ、１２０Ｃ  ＦＩＦＯカウンタ
１４０  信号路
１７０  管理用コア
２００  ＦＩＦＯ（先入れ先出しバッファ）
２０２  第１エントリー
２０４  第２エントリー
２０６  第３エントリー
２０８  第４エントリー
Ｃ１  上流側コア
Ｃ２  下流側コア
Ｐ０、Ｐ１  プロセス
Ｂ０〜Ｂ１５  レジスタバンク
【図１】
0005842206.tif 000002
【図２】
0005842206.tif 000003
【図３】
0005842206.tif 000004
【図４】
0005842206.tif 000005
【図５】
0005842206.tif 000006
【図６】
0005842206.tif 000007
【図７】
0005842206.tif 000008
【図８】
0005842206.tif 000009