JP2013156783A - プロセッサ・コア、およびマルチコア・プロセッサ・システム - Google Patents

プロセッサ・コア、およびマルチコア・プロセッサ・システム Download PDF

Info

Publication number
JP2013156783A
JP2013156783A JP2012015988A JP2012015988A JP2013156783A JP 2013156783 A JP2013156783 A JP 2013156783A JP 2012015988 A JP2012015988 A JP 2012015988A JP 2012015988 A JP2012015988 A JP 2012015988A JP 2013156783 A JP2013156783 A JP 2013156783A
Authority
JP
Japan
Prior art keywords
core
fifo
inter
cores
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2012015988A
Other languages
English (en)
Other versions
JP5842206B2 (ja
Inventor
Sukenori Matsumoto
祐教 松本
Hiroyuki Uchida
裕之 内田
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tops Systems Corp
Original Assignee
Tops Systems Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Tops Systems Corp filed Critical Tops Systems Corp
Priority to JP2012015988A priority Critical patent/JP5842206B2/ja
Priority to US13/718,796 priority patent/US9135210B2/en
Publication of JP2013156783A publication Critical patent/JP2013156783A/ja
Application granted granted Critical
Publication of JP5842206B2 publication Critical patent/JP5842206B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • G06F15/163Interprocessor communication
    • G06F15/167Interprocessor communication using a common memory, e.g. mailbox
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/20Handling requests for interconnection or transfer for access to input/output bus
    • G06F13/24Handling requests for interconnection or transfer for access to input/output bus using interrupt
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Multi Processors (AREA)

Abstract

【課題】マルチコア・プロセッサでFIFOを利用するオーバーヘッドを削減する。
【解決手段】FIFO200を利用するプロセス間通信を含む一連の命令実行プロセスを処理するための複数のコアを備えるプロセッサ1000において、プロセッサの少なくとも二つのコア100A、100Bにはコア間割込信号fintを伝達可能な信号路140が接続されている。少なくとも二つのコアそれぞれは、コア間割込みカウント設定レジスタ(ICSR)110A、110BとFIFOカウンタ120A、120Bとを有するとともに、コア間割込同期機能、コア間割込生成機能、FIFOカウンタ更新機能が処理可能である。
【選択図】図1

Description

本発明はプロセッサ・コア、およびマルチコア・プロセッサのハードウエア構成及びその上で実行するソフトウエアの動作方法に関する。
コンピュータや様々な電子機器に用いられているマイクロプロセッサやDSPなどの情報処理のためのプロセッサは、半導体微細加工技術等の進歩を背景に、クロック周波数を高めたり、高密度化したりする等の手法により演算処理能力の向上が図られている。特に高機能化や処理効率を高めるために、プロセッサにおける演算処理を担うプロセッサコア(以下、単に「コア」という)の回路規模を増大させ、より多数のトランジスタ素子を単一の半導体片つまりダイに集積することが指向されている。
その一方、単一片のダイに一つのコアを形成し、そのコア自体の回路規模を増大させるものとは異なるアプローチにより演算能力を高めることも近年指向されつつある。そのアプローチの一つが、単一片のダイに複数のコアを集積することなどにより、コアの個数を増大させて並列演算処理を行なったり、演算目的に併せた異なる種類のコアを連携させることである。その背景には、単一のコアの回路規模を増大させ複雑性を高めるばかりでは、例えばダイ面積(ダイサイズ)が2倍になっても、演算能力は21/2倍つまり1.4倍程度にしかならない、という技術的制約があるためである。すなわち、演算能力を高めるためにコアを高機能化したとしても、それによる演算能力の向上よりも、ダイの面積の増大がもたらす消費電力や発熱量の増大という弊害がむしろ顕在化してくる。なお、複数のコアを採用するプロセッサは、マルチコア・プロセッサやメニーコアプロセッサとも呼ばれる。
複数のコアを採用する開発動向は特にいくつかの応用目的のプロセッサにおいて顕著となっている。例えば、消費電力あたりの演算処理能力が重視されるモバイル機器用途、ハイパフォーマンスコンピューティングの用途などにおいて低消費電力化の要請が高まりマルチコア・プロセッサが一般的となりつつある。特許文献1(特開2007−316859号公報)には、マルチコア・プロセッサを実装するコンピュータアーキテクチャが開示されている。また、グラフィクス処理のためのGPU(Graphics Processing Unit)において整数演算や条件分岐を採用することにより、超並列処理を利用したより汎用性の高い演算を行ないうるGPGPU(General Purpose computations on Graphics Processing Unit)などと呼ばれる概念も注目を集めている。これらのマルチコア・プロセッサには、大別し、同一種のコアを集積したホモジニアスマルチコアと、異種のコアを集積したホモジニアスマルチコアが用いられる。
特開2007−316859号公報 特開2011−164525号公報
マルチコア・プロセッサにおいてプロセス間通信の有望な手段として、先入れ先出しバッファ(以下「FIFO」と呼ぶ)などのバッファを通じたプロセス間通信を利用するものが知られている。例えば、マルチコア・プロセッサ上での分散処理の効率を高めるためのプロセッサ間通信の動作モデルとして、FIFOを利用するKahn Process Networkの動作モデルが知られている。このFIFOは、例えば、少なくとも二つのコアのうちの二つのコアからアクセスされることによって一のコアにより処理した一連の命令実行プロセスを別のコアに処理を引き継ぐ受け渡しに利用され、プロセス間通信の手段として有用なものである。例えば、特許文献2(特開2011−164525号)には、FIFOを利用するマルチコア・プロセッサにおいて、マルチメディア・データを転送する手法が開示されている。
しかしながら、従来のマルチコア・プロセッサのアーキテクチャにおいて、FIFOを採用してプロセス間通信をする処理は、FIFOを通じて処理を引き継ぐ際のオーバーヘッドが大きい。具体的には、例えばFIFOを利用するためのAPI(Application Programming Interface)の実行には、FIFOのエントリーの状態取得、状態管理などのために複数の命令が必要になる。また、複数のコア(1つは書込み、1つは読出し)からのFIFOへのアクセスの同期のために、例えば、セマフォによる排他制御を行うための命令の実行も必要となる。ところが、FIFOを利用するためのAPIの実行に関わる上記のオーバーヘッドは、命令数で200〜300に相当し、200〜300クロックサイクル数(以下「サイクル」という)もの期間がFIFOを利用する毎に必要になることを意味している。さらに上記セマフォによる処理を採用すると、セマフォ関数の呼び出しやP操作やV操作とも呼ばれる操作が加わることとなる。このため、マルチコア・プロセッサを採用しFIFOを利用しようとしても、複数のコアを有するハードウエアを活かした処理能力は必ずしも発揮されない。
ソフトウエア上の観点からは、プロセス間通信に関わる同期の処理をソフトウエアで実現する必要があることが、プロセス間通信を含むシステムを構成する上で実用上の足枷となっている。
本発明は、上記課題の少なくともいずれかを解決するためになされたものである。本発明は、複数のコアを有するマルチコア・プロセッサにおいてFIFOなどのバッファを用いるプロセス間通信を実行する際のオーバーヘッドを削減する。これにより本発明は、マルチコア・プロセッサにより高い処理能力を得るために分散処理をするソフトウエアにおいて、プロセス間通信の処理速度を実効的に高め、消費電力あたりの演算効率を高めることが可能な実用的なマルチコア・プロセッサ・システムの実現に貢献するものである。
上記課題を吟味した結果、本願の発明者は、プロセス間通信にFIFOを採用してプロセス間通信に関わるオーバーヘッドを削減することができるマルチコア・プロセッサのためのプロセッサアーキテクチャを見出した。本発明は、そのようなプロセッサ・コア、そしてマルチコア・プロセッサのハードウエア構成及びその上で実行するソフトウエアの動作方法を提供するものである。
すなわち、本発明のある態様においては、プロセス間通信を含む一連の命令実行プロセスを処理するための複数のコアを備えるプロセッサであって、該複数のコアのうちの少なくとも二つのコアに接続されコア間割込信号fintを伝達可能な信号路を有しており、前記少なくとも二つのコアそれぞれが、FIFO深さ値を格納するためのコア間割込みカウント設定レジスタ(ICSR)と、ここで、前記FIFO深さ値は、当該コアが担うプロセスと別のコアが担うプロセスとの間のプロセス間通信のために用いられる先入れ先出しバッファ(FIFO)のエントリー数を表しているとともに、処理中のプロセス間通信を含む前記一連の命令実行プロセスの範囲における上限値となるものであり、前記FIFOの使用中のエントリー数を示す値を格納するためのFIFOカウンタとを有しており、前記少なくとも二つのコアそれぞれは、前記少なくとも二つのコアのうちの別のコアから受信したコア間割込信号fint、前記FIFOカウンタの値、および前記ICSRの値の少なくともいずれかに基づいて、当該コアと前記別のコアとの間でプロセス間通信を行うためのコア間割込同期機能と、当該コア自体による前記FIFOへのアクセスの完了時に、前記別のコアがそれ自体のプロセスの制御に利用するコア間割込信号fintを発行して送るコア間割込生成機能と、前記FIFOカウンタの値を、前記コア間割込信号fintの受信または当該コア自体によるコア間割込信号fintの発行に応じてインクリメントまたはデクリメントさせるFIFOカウンタ更新機能とが処理可能なように実装されているものであり、これにより、前記FIFOを利用するプロセス間通信を含む前記一連の命令実行プロセスを、前記少なくとも二つのコアのプロセスを同期させることにより実行するプロセッサが提供される。
また、本発明のある態様においては、プロセス間通信を含む一連の命令実行プロセスを処理するために複数のコアを備えるプロセッサのためのコアとして、上記コアの特徴を備えたプロセッサのコアが提供される。
そして、本発明のある態様においては、複数のコアを備えるプロセッサによりプロセス間通信を含む一連の命令実行プロセスを処理するためのプロセッサの動作方法であって、ここで、該複数のコアのうちの少なくとも二つのコアそれぞれは、当該コアが担うプロセスと別のコアが担うプロセスとの間のプロセス間通信のために用いられる先入れ先出しバッファ(FIFO)の使用中のエントリー数を示す値を格納するためのFIFOカウンタとFIFO深さ値を格納するためのコア間割込みカウント設定レジスタ(ICSR)とを有するとともに、コア間割込信号fintを伝達可能な信号路に接続されており、ここで、前記FIFO深さ値は、前記FIFOのエントリー数を表しているとともに、処理中のプロセス間通信を含む前記一連の命令実行プロセスの範囲における上限値となるものであり、前記少なくとも二つのコアそれぞれは、実装されている機能手段により、前記少なくとも二つのコアのうちの別のコアから受信したコア間割込信号fint、前記FIFOカウンタの値、および前記ICSRの値の少なくともいずれかに基づいて、当該コアと前記別のコアとの間でプロセス間通信を行うためのコア間割込同期ステップと、当該コア自体による前記FIFOへのアクセスの完了時に、前記別のコアがそれ自体のプロセスの制御に利用するコア間割込信号fintを発行して送るコア間割込生成ステップと、前記FIFOカウンタの値を、前記コア間割込信号fintの受信または当該コア自体によるコア間割込信号fintの発行に応じてインクリメントまたはデクリメントさせるFIFOカウンタ更新ステップとを実行し、これにより、前記FIFOを利用するプロセス間通信を含む前記一連の命令実行プロセスが、前記少なくとも二つのコアのプロセスを同期させることにより実行されるプロセッサの動作方法が提供される。
本発明の上記各態様により、複数のコアを有するプロセッサの動作において、プロセス間通信を含むプロセスのオーバーヘッドが抑制され、プロセス間通信のためにFIFOを実装するソフトウエアの実行に適する高い処理能力のプロセッサを提供することが可能となる。
なお、本出願を通じ、複数のコアを含むプロセッサは、一連の情報処理を実行する機能単位を、そこに含まれている複数のコアにより実行する任意のハードウエアを含んでいる。最も典型的には、半導体の単一片のダイに作製された複数のコアを含んでいるものが、上記プロセッサとなりうる。ただし、複数片のダイに渡って複数のコアが形成されており、これら複数のコアを連携させることにより、一連の情報処理を提供するようなプロセッサも、本出願の複数のコアを含むプロセッサとして実施することができる。また、上記複数のコアを含むプロセッサは、複数のコアに対して、可能な限り並行してそれぞれの演算処理を実行させるためのメモリアクセスの機能をも提供する。
また本出願におけるコアとは、それ自体に、デコーダ、命令実行部などの命令制御機構を一つ以上有し、独立して実行しうる機能単位のためのハードウエアを含んでいる。したがって、典型的には、各コアは、目的の機能を果たすための命令セットに応じた演算処理をそれ自体の命令制御機構により実行する。ただし、本出願のコアには、当該コア以外に形成されている命令制御機構の制御の下で各コアが演算処理を実行するものであっても、他のコアとは区別された処理を行なうものも含んでいる。
さらに、一連の命令実行プロセスとは、本出願においては、プロセスの集合を意味する。ここでプロセスとは、ADDやSUBのような一般的な命令をはじめとして、原子操作(atomic operation)をも含む、各コアにおいて処理される少なくとも一つの命令に対応したプロセスであり、各コアのプログラムカウンターの一つの状態に対応して利用して逐次処理により実行処理されるような処理を指す。したがって、一連の命令実行プロセスは、それを構成するプロセスの集合のうち、ある段階までは一のコアにより実行され、その後に、その余の段階の一部または全部が他のコアにより実行される。その一連の命令実行プロセスを適切に処理するために、FIFOによるプロセス間通信が利用される。
本出願におけるFIFOとは、典型的には、プロセス間通信のために利用される任意のハードウエア実装形式、あるいはソフトウエアでメモリ上に実装されるバッファであって、複数のエントリーを有し、そのエントリーのすべてまたはいくつかを利用して先入れ先出し動作を可能とするバッファとなる記憶装置のうち、複数のコアからアクセス可能なもの(多段のFIFO)を一般に含んでいる。ただし、1エントリーのみを有して単なる一時的なバッファとなる記憶装置(1段のFIFO)も、複数のコアからアクセス可能であれば本出願のFIFOに含んでいる。多段のFIFOでは、典型的には、順序づけされた各エントリーをなす記憶域、つまり相互に区別可能ないくつかの記憶領域に、先入れ先出しの順序を守って要素を格納させ出力させることにより、先入れ先出し動作を実現する。FIFOを実装するためのハードウエアは、コアが形成されている半導体ダイと同一のダイに形成される共有レジスタバンク、当該半導体ダイを内包するパッケージ(チップ)と同一のチップに含まれるオンチップメモリ、そして、当該チップとは別のチップのメモリを含んでいる。なお、オンチップメモリには、コアが形成されている半導体ダイと同一のダイのオンダイメモリや、同一パッケージであるものの内部で別の半導体ダイに形成されたオフダイのメモリを含む。これらのFIFOは、任意のバスを通じメモリアドレスによりアドレス指定されたり、レジスタであれば命令中のオペランドとして、また命令長を抑えるために例えばバンクを切り替えたりするなどの手法によって、少なくとも二つのコアから命令によってアクセス可能にされている。こうしてFIFOはそれらのコアに対してプロセス間通信のための要素を順序を保って一時的に格納するバッファとしての機能を提供する。
本出願において、ある機能が実装されているとは、その機能を提供する実体的な機能単位がハードウエアにより形成されていることを含んでいる。例えば、ロジック回路をハードワイアードにより構成し目的の機能を実行可能な論理回路要素を含む命令制御機構を実装する。そして、当該目的の機能を提供するための命令を例えばアセンブリ言語により記述されたソフトウエアにより与えることにより、その命令制御器個のALU(算術論理ユニット)がレジスタを利用し当該機能を提供することとなるマイクロコードを出力するように、デコーダを構成する。このような構成のものが実装の典型例である。
最も典型的な実施形態のプロセッサは、そこに備わる各コアが、それぞれのためのメモリを利用して、それぞれに備わるレジスタを対象に、それぞれの命令実行機能による実行をそれぞれのプログラムに従って実行する。そして、少なくとも二つのコアの間で、両コアがアクセスすることができるメモリか、両コアにて共有される共有レジスタバンクかをFIFOとして利用し、一連の命令実行プロセスを受け渡す。一方のコアがその一連の命令実行プロセスのある部分までを実行し、その部分より後の部分を、他方のコアが、上記FIFOから要素を受け取って引き継ぐのである。これらの両コアは、この受け渡しのための機能または処理ステップとして上述した態様に作製されている。
本発明のいずれかの態様において、プロセス間通信のオーバーヘッドを抑制した複数のコアの連携処理が可能になり、処理効率を高めたプロセッサ・コア、およびマルチコア・プロセッサのハードウエア構成及びその上で実行するソフトウエアの動作方法が提供される。
本発明のある実施形態におけるプロセッサの一例の構成を含むコンピュータの全体構成を示すブロック図である。 本発明のある実施形態におけるプロセッサにおいて、上流側コアと下流側コアとを用いてプロセス間通信およびコア間割込が生じる様子を示す説明図である。 本発明のある実施形態におけるプロセッサにおいて、上流側コアから下流側コアに一連の命令実行プロセスのための要素を、FIFOを通じ受け渡しする動作を示すフローチャートである。 本発明のある実施形態におけるプロセッサにおいて、各コアが有するICSRの典型的な構成を示す説明図である。 本発明のある実施形態におけるプロセッサにおいて、コア間割込信号fintを伝送するための信号路の具体的構成を示す接続図である。 本発明のある実施形態におけるプロセッサにおいてメモリを用いFIFOを実装する場合の例示のプログラムリストである。 本発明のある実施形態におけるプロセッサにおいてデータレジスタである共有レジスタバンクを利用しFIFOを実装する典型的な構成を示す説明図である。 本発明のある実施形態におけるプロセッサにおいて共有レジスタバンクを利用しFIFOを実装する場合に動作される例示のプログラムリストである。
以下、本発明に係るプロセッサの構成および処理の実施形態を図面に基づき説明する。当該説明に際し特に言及がない限り、全図にわたり共通する部分または要素には共通する参照符号が付されている。
<第1実施形態>
[1 構成]
以下図面を参照し本実施形態の複数のコアを含むプロセッサの構成について説明する。図1は、本実施形態のプロセッサ1000の一例の構成を含むコンピュータ1の全体構成を示すブロック図である。コンピュータ1はCPU(中央演算装置)2000を備えており、CPU2000は適当なバス3000を通じてプロセッサ1000と通信可能になっている。プロセッサ1000は一例として、複数の同様に構成されたものがコンピュータ1の構成の一部として接続されている。この構成では、プロセッサ1000はCPU2000と連携して動作する。ただし、このような利用方法がプロセッサ1000の唯一の利用方法ではない。例えばプロセッサ1000が単数のみ含まれている場合や、コンピュータ1がCPU2000を持たずにプロセッサ1000のみが含まれている場合もある。また、本実施形態のプロセッサは任意の電子機器に利用することができるものである。
プロセッサ1000は、プロセス間通信を含む一連の命令実行プロセスを処理するための複数のコア100を備えている。コア100は、それぞれが同種のコアである場合もあれば異種のコアである場合もある。ここでは、コア100のうちの少なくとも二つのコアそれぞれをコア100Aおよびコア100Bとして説明する。なお、典型的なプロセッサ1000は、すべてのコア100を単一片の半導体ダイに形成したものである。ただし、コア100のすべてを単一片のダイに集積することは本実施形態を実施する上で必須ではない。
[1−1 プロセッサの概略構成]
複数のコアのうちの少なくとも二つのコア100Aおよび100Bは、コア間割込信号fintを伝達可能であり各コアに接続されている信号路140を有している。そして、プロセッサ1000のコア100Aおよび100Bは、FIFO(先入れ先出しバッファ)200を利用しプロセス間通信を処理する。FIFO200は、コア100Aおよび100Bのいずれからもアクセス可能なハードウエアを利用して構成される。FIFO200の典型例は、一例として、当該チップと同一のチップのオンチップメモリ、あるいは、当該チップとは別のチップのメモリであり、別例としては、コア100Aおよび100Bを形成されている半導体チップと同一のチップのレジスタである。図1には、これらをいずれも含む構成として、FIFO200を機能ブロックにより示している。
[1−2 FIFOの動作の概要]
本実施形態のプロセッサ1000は、少なくとも二つのコア100Aおよび100Bを連携して一連の命令実行プロセスを進め、プロセス間通信を実行する。この異なるコアの間でプロセス間通信を実現するために、FIFO200を利用する。コア100Aおよび100Bの一連の命令実行プロセスの動作を大別すると、次の4ステップに分けることができる。第1ステップとして、コア100Aがある段階まで当該一連の命令実行プロセスを実行する。つまり、一連の命令実行プロセスをなすプロセスの集合のうち一部のプロセスまでをコア100Aが処理する。第2ステップとして、コア100Aが当該一連のプロセスの実行状態または結果をデータの要素(以下、単に「要素」ともいう)としてFIFO200に格納する。第3ステップとして、コア100Bは、FIFO200にアクセスし上記状態または結果を引き継ぐための上記要素を読み出す。そして第4ステップとして、コア100Bが、その上記要素を利用し引き継ぐべき状態または結果を使用して、それを初期状態として、上記一連の命令実行プロセスのうちの残りのプロセス、つまりその後に処理すべきプロセス行を処理する。FIFO200は、多段のFIFOであれば先入れ先出し動作を実行する。多段のFIFOを使用するため、コア100Aによる処理である上記第1および第2ステップと、コア100Bによる処理である上記第3および第4ステップとの間では、プロセスの処理時間のばらつき、即ちプロセス間の負荷のインバランスが許容される。また、FIFO200の先入れ先出しの動作により、プロセス間通信を含む一連の命令実行プロセスは、相互の順序は維持される。
[1−3 コアの構成]
上述したFIFO200を用いたプロセス間通信はFIFOを利用する一般的処理を説明したものである。本実施形態のプロセッサ1000においては、コア100Aおよび100Bに工夫が施されているために、FIFO200を利用したプロセス間通信にあたり、実行を可能な限り停止させない。そればかりか、プロセッサ1000では、FIFOを通じた受け渡しの処理のための命令を増大させない。すなわち、プロセス間通信を実行する少なくとも二つのコア100Aおよび100Bは、ハードウエア構成として、コア間割込みカウント設定レジスタ(ICSR)110とよぶレジスタと、FIFOカウンタ120とよぶレジスタとを備えていることができる。以下、コア100Aのものとコア100Bのものとを区別する説明においてはそれぞれに対応させてA、Bを付し、共通した説明となる場合においてはA、Bの記載を省略する。コアについても同様とする。
[1−3−1 コア間割込みカウント設定レジスタ(ICSR)]
コア間割込みカウント設定レジスタ(Interrupt Count Setting Register, ICSR)110は、FIFO深さ値を格納するためのレジスタである。ここで、FIFO深さ値は、当該コアが担うプロセスと、別のコアが担うプロセスとの間のプロセス間通信の受け渡し処理に用いられるFIFO200のエントリー数を表している。例えば、FIFO深さ値が「4」またはそれに対応する何らかの値であるとき、FIFO200は、第1エントリー202、第2エントリー目204、第3エントリー206、そして第4エントリー208という4段分のエントリーを利用することにより、演算に利用されるプロセスのための要素を一時記憶しうるものである。本実施形態における上記FIFO深さ値は、ICSR110に格納する値をプログラムにおいて指定することなどにより、プログラム上で可変であり明示的に指定することができる。こうしてFIFO200のエントリー数を、コア100Aおよび100Bを連携させる動作のために適切なエントリー数に調整しうることはプロセス間通信を処理する態様として好適なものとなる。なお、このICSR110は、典型的にはプロセス間通信を含む一連の命令実行プロセスの範囲で固定され、別のプロセスに切り換えるときに必要に応じて再度設定することが可能である。つまり、典型的なICSR110は、処理中のプロセス間通信を含む一連の命令実行プロセスの範囲において、FIFO200のエントリー数の上限値を示すものである。ただし、このFIFO深さ値は可変であり、FIFO200のための有限のリソースであるメモリまたはレジスタを割り当てる事情から、動的に、つまりプロセスの実行の途中において、プロセス間の負荷のインバランスを軽減するために調整されることもできる(この点については、「1−9 FIFOエントリー数の動的な調整」の欄にて詳述する)。
上述したように、FIFO200は、コア100Aからコア100Bに連係した動作を実現するためのプロセス間通信のために上記4ステップにより利用される。このように、プロセス貫通しの入力および出力という観点に基づき、FIFO200を、コア100Aからみた出力FIFO、コア100Bからみた入力FIFOと呼ぶことがある(詳細は「1−5−1 FIFOおよびコアの論理的区別」の欄)。
[1−3−2 FIFOカウンタ]
本実施形態のプロセッサ1000の各コア100におけるFIFOカウンタ120は、FIFO200の使用中のエントリー数を示す値を格納するためのカウンタレジスタである。FIFOカウンタ120の値により示されるFIFO200の使用中のエントリー数は、0以上の値であって、ICSR110により示されるFIFO200の処理中のプロセスの範囲における上限値を含みそれ以下の範囲の値のうちのいずれかの値である。特に、FIFOカウンタ120の値が0を示している場合、コア100は、FIFO200の使用されているエントリー数が0、つまりFIFO200が空(empty)であると判定することが可能となる。同様に、FIFOカウンタ120の値がICSR110と同一の値を示している場合、コア100は、FIFO200の使用されているエントリー数が上限、つまりFIFO200が満杯(full)であると判定することが可能となる。
[1−4 コアの機能]
次に、上述したICSR110およびFIFOカウンタ120を利用して上記少なくとも二つのコア100Aおよび100Bのそれぞれが実行する機能のうち、FIFO200に密接な関連を有する機能であるコア間割込同期機能、コア間割込生成機能、および、FIFOカウンタ更新機能の概要を説明する。コア100Aおよびコア100Bは、プログラム上の簡単な表現によりここに説明する各機能を実行可能なように実装されている。なお、コア100Aおよび100Bは、プロセスを処理するための演算機能としてここに説明しない算術演算機能を有している。
[1−4−1 コア間割込同期機能の概要]
一つのFIFO200に関するコア100Aの機能であるコア間割込同期機能は、端的には、少なくとも二つのコア100Aおよび100Bのうちの別のコア100Bから受信したコア間割込信号fint、FIFOカウンタの値、およびICSRの値の少なくともいずれかに基づいて、当該コアと別のコアとの間で一連の命令実行プロセスをなす各プロセス、つまり各コアにおいて処理させる各プロセスを互いに同期させる機能である。ここで、このコア間割込信号fintやコア間割込同期機能のために、「割込」との表現を含めているが、本実施形態にて説明するコア間割込は、一般的な割込みとは異なり、割込みはイベントの通知のみを行い、割込みによって割込み処理ルーチンに移行することはしない。すなわち、コンピュータ1のCPU2000に対する割込や、CPU2000からのプロセッサ1000に対する割込、プロセッサ1000同士の間におけるプロセッサ1000に対する割込などとは別のものである。本実施形態のFIFOカウンタの値、およびICSRの値は、本実施形態のコア間割込信号fintとともに、FIFO200を通じてコア100Aと100Bとを連携させてプロセス間通信を処理する目的のために用いられる。端的には、FIFOカウンタの値、およびICSRの値は、FIFO200の状態が空または満杯である際に、当該コア(例えばコア100A)を待機状態にするかそのまま処理を続行させるかの判断に利用される。また、本実施形態のコア間割込信号fintは、各コアの動作制御のためにコア間において発行して送られ、受信して一連の命令実行プロセスの進行の制御のために利用される。端的には、本実施形態のコア間割込信号fintは、当該コア(例えばコア100A)において、第1に、FIFO200の状態が空または満杯である際の待機状態からの解除のために用いられ、第2に、コア間割込信号fintを別のコア(例えばコア100B)から受信したコア100AにおけるFIFOカウンタの更新のために用いられる。
当該コア(例えばコア100A)と別のコア(例えばコア100B)との間で一連の命令実行プロセスをなす各プロセスを同期させるとは、当該コアと別のコアを連携して処理する一連の命令実行プロセスが目的通りの演算となるように各コアのプロセスの順序を保つことによって、ある段階まで処理された一連の命令実行プロセスを、次の段階から引き継ぐことである。本実施形態においては、受け渡される要素の順序はFIFO200の先入れ先出し動作により担保される。そして、そのFIFO200を利用する際のオーバーヘッドを可能な限り減少させるために、コア間割込信号fint、FIFOカウンタの値、ICSRの値が用いられる。そして、可能な限りオーバーヘッドが削減され、一連の命令実行プロセスの受け渡しが行なわれて一連の命令実行プロセスをなす各プロセスの同期が実行される。この同期により、各コアに分散して一連の命令実行プロセスが適切に処理される。
ただし、コア100は、通常のプロセッサ・コアと同様に、コア間割込以外の割込を、例えばCPU2000から受け付けてその処理が可能な通常の割込機能を有している。したがって、本実施形態におけるコア間割込信号fintに対処する割込み処理も、上記通常の割込機能を拡張した機能として提供することも可能である。また、このコア間割込同期機能は、プロセッサ1000の動作方法とみた場合のコア間割込同期ステップともなる。
[1−4−2 コア間割込生成機能の概要]
FIFO200に関するコア100Aのもう一つの機能であるコア間割込生成機能は、端的には、一連の命令実行プロセスのうちの、当該コア100A自体によるFIFO200の1エントリー分のプロセスのためのFIFO200へのアクセスの完了時に、別のコア100Bがコア100B自体の一連の命令実行プロセスの制御のために利用するコア間割込信号fintを発行して送る機能である。このコア間割込信号fintが、例えばコア100Aから送信されコア100Bにより受信される場合を例に説明する。仮に、FIFO200の状態がEmptyの場合、コア100Bの実行が待機状態になっており、そのコア間割込信号fintを受信することに応じて、コア100Bは待機状態を解除して実行を再開する。つまり、コア間割込信号fintは、各コア(例えばコア100A)がFIFOの1エントリー分の処理(書込み)を完了したことを、連携する別のコア(例えばコア100B)に対し通知する信号である。なお、ここでの「割込」との表現も、プロセス間通信を適切に処理するためのコア間割込を意味している。また、コア間割込信号fintが示すFIFO200へのアクセスの完了とは、例えばFIFO200に対するReadやWriteの処理が完了することを含んでいる。また、このコア間割込生成機能も、プロセッサ1000の動作方法とみた場合のコア間割込生成ステップともなる。
本実施形態のコア100における上記コア間割込生成機能は、実行される一の命令に割込生成用プリフィクスFINTを明示することにより、当該一の命令のプロセスのためのFIFOへのアクセス完了時に実行される。つまり、コア100は、割込生成用プリフィクスFINTを付された命令のためにFIFO200へのアクセスを行なったことに応じ、FIFO200へのアクセス完了を通知する信号としてのコア間割込信号fintを、FIFO200を通じて連携動作するコアに対し通知する。割込み生成用プリフィックスは、これを付された命令のデコードと同時にデコードされ、割込信号の発生は、これを付された命令の実行パイプラインの中で処理される。このため、その各コア100は、連携動作するコアに対する通知のためだけに実質的にサイクルを消費することはない。
なお、上記コア間割込生成機能は、通常のプロセッサに備わらないばかりか、バッファを利用し複数のコアの動作を同期させるために極めて有効な機能である。例えば、ここまでの説明においてFIFOとして説明したバッファが、実質的に先入れ先出し動作しない単なる一時的なバッファつまり1エントリーの1段のFIFOであるとする。この場合であっても、コア間割込生成機能をそれぞれが備える複数のコアは互いの動作を同期させることが可能となる。この観点から、本実施形態におけるFIFO200は、必ずしも複数のエントリーを利用した先入れ先出し動作をするものに限定されず、1エントリーのみのバッファとして構成されるものも含んでいる。
[1−4−3 FIFOカウンタ更新機能の概要]
そして、FIFOカウンタ更新機能について説明する。この機能は、端的には、FIFOカウンタの値を、コア間割込信号fintの受信または当該コア自体によるコア間割込信号fintの送信(発行)に応じてインクリメント(カウントアップ)またはデクリメント(カウントダウン)させる機能である。このため、FIFOカウンタ120の値には、FIFO200の使用中のエントリー数を示す値が反映されることとなる。
以上に述べたコア間割込同期機能、コア間割込生成機能、および、FIFOカウンタ更新機能については、FIFO200のより具体的な構成とともに、FIFO200の受け渡し動作と関連づけて、次の[1−5 FIFOを通じた受け渡し動作]の欄において詳述する。また、コア間割込信号fintについては、「1−8 コア間割込信号fintの接続構成」の欄において詳述する。
[1−5 FIFOを通じた受け渡し動作]
FIFOを通じた受け渡し動作は、プログラムにより、受け渡しの態様や実行のタイミングが制御される。そこで、まずFIFOやコアを受け渡しの向きの観点から整理した上で(1−5−1)、受け渡し動作の説明を行ない(1−5−2)、最後に、そのような動作のために必要となるコアの構成について上流側のコアと下流側のコアとに分けてまとめる(1−5−3、および−4)
[1−5−1 FIFOおよびコアの論理的区別]
FIFO200の動作面からの構成は、あるプロセスの範囲では一つのコアからみると、入力FIFOおよび出力FIFOとして整理される。これに対し、FIFOからの視点でみると、各コアは、そのFIFOに向けてプロセス間通信のためのプロセスの要素を出力する側の上流側コアと、そのFIFOから上記要素を受け付ける側の下流側コアとしても整理される。これらの入力および出力、ならびに、上流および下流という表現は、プロセス間通信における要素の受け渡しの向きを示すものである。本実施形態のプロセッサ1000におけるこの受け渡しの向きは、プログラムの制御により任意のタイミングで変更することが可能である。つまり、一つの向きは、図1に示したコア100Aがそれ自体が上流側コアとなり出力FIFOとなるFIFO200に要素を格納し、コア100Bが下流側コアとなり入力FIFOとなるFIFO200からその要素を受け取る、という向きである。これは逆の向きとすることもできる。ここでは、この受け渡しの概念を明確に説明するため、図1に示したハードウエア構成との関連を一旦離れ、受け渡しの向きを固定したプロセスおよびコアの表現により以下説明し、その代わりに図1に示したハードウエアの構成との関係を抽象化したものとする。なお、図1のハードウエア構成との対応付けの例は適宜併記する。
図2は、上流側コアとなるコアC0(以下「上流側コアC0」と記す)と、下流側コアであるコアC1(「下流側コアC1」)とを用いてプロセス間通信およびコア間割込が生じる一例の様子を示す説明図である。このうち、図2(a)は、ソフトウエア上の構成を示している。つまり、上流側コアC0におけるカーネルとなるプロセスP0および下流側コアC1におけるカーネルとなるプロセスP1と、これらのコアが、FIFO0、FIFO1、およびFIFO2を通じてプロセス間通信により受け渡す要素の入出力関係を図2(a)は示している。FIFO0、FIFO1、およびFIFO2は、それぞれ、2エントリー、3エントリー、4エントリーを持つ多段のFIFOとして図示されている。
ここに明示したように、プロセス間通信の要素は、典型的には、上流側コアC0から下流側コアC1へと紙面上左から右に向かう向きに受け渡される。そしてプロセスP0とプロセスP1とをこの順に処理する。図2(b)は、上流側コアC0および下流側コアC1におけるコア間割込信号fintによるコア間割込のやり取りの関係を示している。ここでのコア間割込信号fintは、入力FIFOのための入力方向コア間割込信号fiintと出力FIFOのための出力方向コア間割込信号fointとに分けられる。これらの入力方向コア間割込信号fiintおよび出力方向コア間割込信号fointを特定する際には、FIFO0、FIFO1、そしてFIFO2うちのいずれのFIFOに関するものであるかを区別するために、入力方向コア間割込信号fiint、出力方向コア間割込信号fointの末尾にその信号が対象とするFIFOのサフィックスを明示する。例えば、FIFO0についての入力方向コア間割込信号fiintはFIINT0と表現される。図2(b)においては、入力方向コア間割込信号fiintおよび出力方向コア間割込信号fointは、すべてが、それぞれ、左に向かう鎖線矢印および右に向かう鎖線矢印として明示されている。なお、ここに示した入力方向コア間割込信号fiintおよび出力方向コア間割込信号fointは、コア間割込信号fintの一例である。
なお、図1と図2の対応関係を、プログラムにおいて実現可能な範囲で例示すれば、コア100Aを上流側コアC0に対応させ、コア100Bを下流側コアC1に対応させる、という対応が一例である。また、FIFO200は、メモリや共有バンクレジスタを適宜構成することにより、図2のFIFO0〜2の間で相互に論理的に区別可能なように構成することが可能である。一例としては、FIFO0〜FIFO2をすべてメモリ上に確保する構成の場合がある。別例としては、FIFO0〜FIFO2のうちの少なくとも一つ、例えばFIFO1のみを共有バンクレジスタに、FIFO0とFIFO2をメモリ上に確保する構成の場合もある。加えて、コア間割込信号fintはいずれも信号路140(図1)を通じて通信される。なお、信号路140は、各コア間の信号路として図示したものであるが、コア間割込信号fintは、異なるプロセッサに属するコア間の割込信号として、図示しない任意の信号路を通じて必要なコアの間で送受信することが可能である。その意味において、本実施形態におけるコア間割込信号fintを伝達可能な信号路は、一のプロセッサの内部の信号路に限定されるものではない。
[1−5−2 プロセス間通信の方法]
図3を参照し、FIFO1を通じ上流側コアC0から下流側コアC1にプロセス間通信の要素を受け渡しする動作を説明する。ここでは、一例として、メモリによりFIFOを構成する場合を説明する。図3は、上流側コアC0から下流側コアC1にプロセス間通信のための要素がFIFO1を通じて受け渡される動作を示すフローチャートである。
上流側コアC0は、まずそれ自体の処理としてプロセスP0を実行する(S02)。そのために上流側コアC0は、あらかじめ、そのプロセスP0にて演算対象とするデータを、FIFO0(上流側コアC0に取っての入力FIFO)のその時点においてアクセスすべきエントリーから適当なデータレジスタにロードしておく。そしてそのデータレジスタを対象にしてプロセスP0が実行される。このプロセスP0は、それ自体が1以上の実行を含むプログラムによる処理である。そしてプロセスP0の完了時または完了間近のいずれかの実行の際に上流側コアC0がFIFO1の書き込むべきエントリーへ出力する出力処理(S04)が実行される。この際に出力される最も典型的なデータは、実行に利用されて値を格納しているデータレジスタの値である。この出力処理など、上流側コアC0におけるプロセスの結果出力処理を、本出願においてはストリームアウトとも呼ぶ。ここで、ストリームアウトの処理の目的は、プロセスP0の処理結果である要素をFIFO1に書き込むことである。ただし、FIFO1のすべてのエントリーが占有されて満杯となっている場合には、その要素を保持したまま待機する必要がある。
このような動作のため、上流側コアC0は、FIFO1のためのFIFOカウンタCNTとICSRとの大小比較を実行する(S0402)。例えば上流側コアC0がコア100A(図1)であるなら、FIFOカウンタ120AにおけるFIFO1のための値と、ICSR110Aの対応する値とを比較する。その結果、FIFO1が満杯でない場合にFIFO1への出力(S0404)が行なわれ、FIFO1が満杯の時には待機状態となる(S0406)。この待機状態は、下流側コアC1からのコア間割込信号fintの受信により解除され、その後にFIFO1への要素の出力処理(S0404)が行なわれる。コア間割込信号fintを下流側コアC1から受信することは、下流側コアC1がFIFO1の要素を利用することによりFIFO1に空きが生じたこととなるためである。そしてFIFO1への出力(S0404)の際にFIFO1へのアクセスが完了すると、上流側コアC0は、下流側コアC1に向けてコア間割込信号fint(出力方向コア間割込信号foint)を送信する(S0408)。そしてFIFO1のためのFIFOカウンタCNTがインクリメントされる(S0410)。この処理によりストリームアウトが終了する。なお、上流側コアC0は、下流側コアC1からのコア間割込信号fint(入力方向コア間割込信号fiint)を常時監視しており、上流側コアC0は、下流側コアC1からのコア間割込信号fintの受信時にFIFO1のためのFIFOカウンタCNTの値の更新処理を実行する(図示しない)。なお、FIFOカウンタCNTは典型的にはハードウエアとして実装されており、FIFOカウンタCNTの更新もハードウエアにより実行される。
これに対し、下流側コアC1には、上流側コアC0がプロセスP0の処理結果としての要素がFIFO1を通じて入力される(S12)。このように、上流のプロセスの実行結果を受け取る処理を、本出願を通じてストリームインと呼ぶ。ストリームインはFIFO1が空の場合には実行できないため、FIFO1が空でない場合にのみ実行される(S12)。FIFO1が空かどうかの判定のために下流側コアC1は、FIFO1のためのFIFOカウンタCNTを利用する。すなわち、FIFO1が空であることを示す値、例えば0とFIFOカウンタの値とを比較する(S1202)。
そしてFIFO1が空でない場合(正である場合)にはFIFO1を読み出して入力処理が行なわれ(S1204)、空である場合には待機状態になる(S1206)。この待機状態は、上流側コアC0からのコア間割込信号fintの受信により解除され、その後にFIFO1からの要素の入力処理が行なわれる(S1204)。コア間割込信号fintを上流側コアC0から受信することは、上流側コアC0がFIFO1に要素を出力し、処理に利用する要素がFIFO1から獲得できることを意味するためである。FIFO1からの入力処理(S1204)の際にFIFO1へのアクセスが完了すると、下流側コアC1は、上流側コアC0に向けてコア間割込信号fintを送信する(S1208)。そしてFIFOカウンタがデクリメントされる(S1210)。この処理によりストリームインを終了する。そして、下流側コアC1はFIFO1からの要素を、自らのプロセスP1に利用するための要素とする。最も典型的には、その要素は、下流側コアC1が処理のために利用するデータレジスタに格納される。その後、下流側コアC1は、プロセスP1を実行する(S14)。なお、下流側コアC1も、上流側コアC0からのコア間割込信号fintを常時監視しており、上流側コアC0からのコア間割込信号fintの受信時に下流側コアC1は、FIFO1のためのFIFOカウンタの値の更新処理を実行する(図示しない)。
ここに示した処理において、上流側コアC0と下流側コアC1との処理の進行状況は、FIFOの状態が適切である場合は互いの進行状況とは無関係に進行する。そして、FIFOの状態が適切でない場合に、つまりFIFO1が満杯または空である場合のみ、上流側コアC0と下流側コアC1の処理の進行を同期させる目的で、待機状態(S0406、S1206)となる。そして、他のコアからのコア間割込信号fintが常時監視され、その受信によりその待機状態が解除され、FIFOカウンタが更新される。さらに、各コアはそれ自体の処理においてFIFO1へのアクセスが完了すると、連携する他のコアのためにコア間割込信号fintを送信する。つまり、FIFOカウンタとICSRの値を利用することにより、FIFO1が満杯や空である場合の待機状態への移行もFIFOにアクセスすることなく決定することができる。また、その待機状態からの解除も、コア間割込信号fintによりFIFOにアクセスすることなく決定することができる。そのため、上流側コアC0と下流側コアC1の両プロセスを、少ないオーバーヘッドで同期することが可能となる。なお、一般的には、FIFO1のエントリー数が多い(FIFO深さ値が大きい)ほど、待機状態の発生頻度は少なくなる。本実施形態の上記動作では、FIFO1のエントリー数が限定されていたとしても、上流側コアC0と下流側コアC1が少ないオーバーヘッドでFIFO1を通じたプロセス間通信を適切に行いうることから、分散処理におけるプロセス間通信の効率を高めることが可能となる。
[1−5−3 出力FIFOを利用するコアの構成]
上記動作を実現するためにコア100(図1)は、それ自体が上流側コアC0として機能するための適切なハードウエアを備え、適切に動作することができる。この際、FIFO200は、上流側コアC0にとっての出力FIFOとなっている。つまり、FIFO200は、少なくとも二つのコア100Aおよび100Bのうちのいずれか一のコアである下流側コアC1により処理すべき要素として、下流側コアC1とは別のコアである上流側コアC0からの要素を受け付ける。
より具体的には、上流側コアC0となるコア(例えばコア100A)は、それ自体が備えるICSR110AおよびFIFOカウンタ120Aは、出力FIFOのための値を格納可能になっている。また、上流側コアC0となるコア(例えばコア100A)に実装されたFIFOカウンタ更新機能またはステップでは、出力FIFOのためのFIFOカウンタの値を、別のコアである下流側コアC1(例えばコア100B)からの入力方向コア間割込信号fiintを受信したときデクリメントし、下流側コアC1に対する出力方向コア間割込信号fointを送信したときインクリメントする機能またはステップを含んでいる。これは、FIFOカウンタの値がFIFOの使用中のエントリー数そのものを表している場合における典型的な処理である。
そして、本実施形態の上流側コアC1に実装されたコア間割込同期機能がさらに次のような待機制御機能またはステップを実行するようにすることも好適である。つまり、出力FIFOのためのFIFOカウンタの値とICSRの値とを比較し、出力FIFOが満杯である場合、上流側コア自体によるプロセスを待機状態にする。その後、下流側コアからの入力方向コア間割込信号fiintを上流側コアが受信することにより、待機状態を解除し、上流側コアによるプロセスを再開させる。逆に、コア100のうちこれらの処理を担うコアは、上流側コアC0として機能することが可能である。なお、上述したように、出力FIFOのための上流側コアC0のFIFOカウンタの値は入力方向コア間割込信号fiintの受信に応じてデクリメントされる。しかし、そのデクリメントを待たずに、入力方向コア間割込信号fiintの受信後即座に待機状態を解除することにより、カウンタを再度参照する分だけ待機時間を削減することが可能となる。
プログラムにおいては、本実施形態のコア100、例えばコア100Aなどの上流側コアC0に実装される上記待機制御機能は、実行される一の命令に待機制御用プリフィクスFOWAITを明示することにより、当該一の命令のプロセスを対象として作用すると好適である。つまり、上流側コアC0はそのFOWAITとともに記述された上記一の命令の実行をある条件が成立すると停止させて待機状態に遷移する。この条件は、FIFOカウンタの値によって示される出力FIFOの使用中のエントリー数と、ICSRの値によって示される出力FIFOの使用可能なエントリーの上限値とが等しい、というものである。例えば出力FIFOとして4つのエントリーを上限としており、上記上限値が4であることを示す値をICSRが格納しているとする。この場合、出力FIFOの使用中のエントリー数が4未満であることをFIFOカウンタの値が示していれば、FOWAITが付された上記一の命令は即座にそのまま実行される。これに対して、出力FIFOの使用中のエントリー数が4であることをFIFOカウンタの値が示していれば、FOWAITが付された上記一の命令は実行されず待機状態となる。このため、上流側コアC0は、このような機能を実現するプリフィクス命令としてFOWAITを解釈し実行しうるように実装されている。例えばコア100のデコード部に、プリフィクスをデコードするためのプリフィクスデコード部をハードウエアとして作製しておき、デコード部がそのプリフィクスデコード部からの指示に応じて、プリフィクスと同一行にて後続する命令を実行部に発行するかどうかを制御すればよい。その結果、上流側コアC0は、出力FIFOの状態を取得するため、あるいは、その状態を取得して動作を停止させたり再開させたりするために実質的にサイクルを消費することはない。通常は、FOWAITに同一行にて後続する命令は、出力FIFOを利用して下流側コアC1に対してプロセスの処理結果としての要素を出力する命令とされる。以下、本出願にて「後続する」とはプリフィクスと同一行にて後続すること、即ちプリフィックスが付されたこととする。
[1−5−4 入力FIFOを利用するコアの構成]
同様に、コア100(図1)は、それ自体が下流側コアC1として機能するために、適切なハードウエアを備えるとともに、適切に動作することができる。この際のFIFO200は、下流側コアC1にとっての入力FIFOとなっている。つまり、FIFO200は、少なくとも二つのコア100Aおよび100Bのうちのいずれか一のコアである下流側コアC1が処理すべき要素として、下流側コアC1とは別のコアである上流側コアC0からの要素を受け付ける。
具体的には、下流側コアC1となるコア100が備えるICSR、および、下流側コアC1が備えるFIFOカウンタが、入力FIFOのための値を格納可能になっている。また、下流側コアC1となるコア100に実装されたFIFOカウンタ更新機能またはステップは、入力FIFOのためのFIFOカウンタの値を、上流側コアC0からの出力方向コア間割込信号fointを受信したときインクリメントし、上流側コアC0に対する入力方向コア間割込信号fiintを送信したときデクリメントする機能またはステップを含んでいる。
そして、下流側コアC1に実装されたコア間割込同期機能がさらに次のような機能またはステップ(進行制御機能またはステップ)を実行するようにすることも好適である。つまり、入力FIFOのためのFIFOカウンタの値と入力FIFOが空であることを示す値とを比較し、入力FIFOが空である場合、下流側コアC1自体によるプロセスを待機状態にする。その後に、上流側コアからの出力方向コア間割込信号fointを下流側コアが受信することにより待機状態を解除し、下流側コアによるプロセスを再開させる。逆に、コア100のうちこれらの処理を担うコアは、下流側コアC1として機能することが可能である。なお、上述したように、入力FIFOのための下流側コアC1のFIFOカウンタの値は出力方向コア間割込信号fointの受信に応じてインクリメントされる。しかし、そのインクリメントを待たずに、出力方向コア間割込信号fointの受信後即座に待機状態を解除することで、カウンタを再度参照する分だけ待機時間を削減することが可能となる。
本実施形態のコア100、例えばコア100Bなどの下流側コアC1に実装される上記進行制御機能は、実行される一の命令に進行制御用プリフィクスFISYNCを明示することにより、当該一の命令のプロセスを対象として作用するものである。つまり、下流側コアC1は、ある条件が成立するときのみ、そのFISYNCとともに記述された上記一の命令を実行する。この条件は、FIFOカウンタの値によって示される入力FIFOの使用中のエントリー数が0よりも大きいというものである。つまり、FIFOカウンタの値は入力FIFOが空であることを示す値と比較される。例えば、入力FIFOの使用中のエントリー数が0より多いことをFIFOカウンタの値が示していれば、FISYNCが付された上記一の命令はそのまま実行される。これに対して、入力FIFOの使用中のエントリー数が0であることをFIFOカウンタの値が示していれば、FISYNCが付された上記一の命令は待機状態となる。このため、下流側コアC1は、このような機能を実現するプリフィクス命令としてFISYNCを解釈し実行しうるように実装されている。上述した待機制御機能(FOWAIT)の実装と同様に、FISYNCを解釈しうるプリフィクスデコーダ部をコア100に作製する。その結果、コア100は、入力FIFOの状態を取得するため、あるいは、その状態を取得して動作を停止させたり再開させたりするために実質的にサイクルを消費することはない。通常は、FISYNCに後続する命令は、入力FIFOを利用して上流側コアC0から要素を読み込む命令とされる。
[1−6 プリフィックスを利用する利点]
上述したように、上記コア間割込生成機能についての割込生成用プリフィクスFINT、ならびにコア間割込同期機能についてのFOWAITおよびFISYNCは、FIFOを利用したコア間割込および同期処理のために利用される。このプリフィクスを利用した制御を利用する利点は、プログラムが簡便であることと、処理効率が高いことである。
[1−6−1 プログラムが簡便であること]
上述したプリフィクスすなわち、FINT、FOWAITおよびFISYNCは、プログラムにおいて、それぞれに後続する命令の実行の完了時に、またはその命令を対象としてFIFOを利用するために明示される。これは、プロセス間の同期制御や排他制御を行なったり、FIFOを利用したりするプログラムとしては平易なものである。具体的には、上記コア間割込生成機能は、いわば、FIFOへのアクセスの完了を通知するための機能である。このため、端的には、FIFOの1エントリー分の処理を完了する命令に割込生成用プリフィクスFINTが付される。同様に、コア間割込同期機能は、FIFOに対するアクセスが必要なときにFIFOの状態を見る機能を含む。このため、FOWAITおよびFISYNCは、FIFOの状態が適切である条件を課すために、つまり、FIFOが満杯でないこと(FOWAIT)、および、空でないこと(FISYNC)を実行の条件とすべき各命令に付される。特に、プリフィクス以外の命令が処理目的のプログラムをそのまま記載する観点からは、プログラムや、そのプログラムを高級言語から生成するコンパイラーの構成が簡便となる利点が大きい。高級言語からアセンブリプログラムまたは機械語プログラムを生成するコンパイラーに対して、上述したようなコードを出力させることにも特段の困難性はない。
なお、プリフィクスを命令セットの一部に有する本実施形態の各コアは、このようなプリフィクスを解釈し、コア間割込生成機能およびコア間割込同期機能を実行させるように作製される。例えば上述したプリフィクスデコーダ部を有し、そのプリフィクスデコーダ部からの出力で命令の発行を停止または再開されるように、デコーダ部が設計される。
[1−6−2 処理効率が高いこと]
上記プリフィクスを用いるもう一つの利点は、オーバーヘッドが少なく、そのコア間割込のために必要となるサイクルが皆無またはごくわずかとなるため高い処理効率が得られることである。上記プリフィクスを用いるプログラムにおいては、FIFOを利用したプロセス間通信のためにFIFOの状態を確認したり、その状態による場合分けしたりする処理は、不要またはごくわずかである。このため、FIFOを利用するためにオーバーヘッドとなるサイクルを殆ど伴うことはない。しかも、コア間割込同期機能のためのFOWAITやFISYNCが明示されていたとしても、実行が待機状態になるのは、出力FIFOが満杯のときまたは入力FIFOが空のとき、つまり処理を進めることができないときのみである。つまり、もしFIFOの状態が処理に支障が無い場合には、FIFOを利用しながらも、あたかもFIFOの状態の確認を省略しているかのような高い処理効率で進行する。
[1−7 ICSRの実装]
図4は、本実施形態の各コアのICSRの典型的な構成を示す説明図である。図4に示すように、各ICSRは、適当なビット長(ここでは32ビット長)とされる。このうち、プロセッサ1000において、図2に示したFIFO0〜FIFO2のようなFIFOを合計8本使用する場合には、典型的には、各FIFOに4ビットが対応付けされる。そして、図4に示した構成のICSRでは、各FIFO(FIFOn、nは0〜7)に対応する4ビットのうち、下位3ビット(FIFOn(2:0))はFIFOnのFIFO深さ値を格納する。これに対し、当該4ビットのうちの最上位の1ビット(Fn)は、FIFOnの方向を格納する方向ビットである。ここで、FIFO深さ値が1であることは、そのFIFOが1エントリーのものあることを意味する。さらに、FIFO深さ値を示さない値、例えば0を、そのコアから見て当該FIFOがアクセスできないこと、または、そのFIFOに関するコア間割込信号fintを通信できないことを示すために採用することも有効である。さらに上記方向とは、そのICSRを有するコアから見て、当該FIFOが入力FIFOであるか出力FIFOであるかを意味している。このため、この方向とは図2(a)の左右方向に対応付けされる。例えば上記方向ビットの0および1を、それぞれ、関連するFIFOが入力FIFOであること、および出力FIFOであることに対応付けする。
このようなICSRの各コアでの実装は、簡単な構成でありながらも必要十分な機能を果たすレジスタの構成例といえる。例えば、図4(b)および図4(c)は、図2に対応させて示す上流側コアC0および下流側コアC1それぞれのICSRの例である。このICSRの表現により示されているのは、第1に、FIFO0〜2について、FIFO深さが、それぞれ2、3および4エントリーであることである。第2に、上流側コアC0および下流側コアC1それぞれにとっての方向つまり入力FIFOであるか出力FIFOであるの区別、そして第3に、下流側コアC1および上流側コアC0が、それぞれ、FIFO0、FIFO2にアクセスできないことも表現されている。このように、各FIFOがいずれのコアの演算に利用されるかは、各コアのICSRに値を格納することによって決定される。
[1−8 コア間割込信号fintの構成]
次に、コア間割込信号fintの典型的な構成について説明する。図2に示したように典型的なコア間割込信号fintは、出力方向コア間割込信号fointと入力方向コア間割込信号fiintにより構成される。また、図2において、FIFOのサフィックスにより、例えば「FOINT1」としてFIFO1に対応することが明示されるように、入力方向コア間割込信号fiintおよび出力方向コア間割込信号fointは、対象とするFIFOと対応付けすることができる。
図5は、コア間割込信号fintを伝送するための信号路の具体的構成を示す接続図である。この信号路の構成を本出願ではfバスと呼ぶ。fバスは、少なくとも論理的に区別される系統の信号路を複数含んでいる。図5においてf_fiint(7:0)と示した信号路は入力方向コア間割込信号fiintを、また、f_foint(7:0)と示した信号路は出力方向コア間割込信号fointを、それぞれ伝達する。特に、図4に示したICSRの例に対応させて説明すれば、入力方向コア間割込信号fiintは各FIFOn(nは0〜7)に対応した独立したビットを持つ。この構成は図5においてf_fiint(7:0)と明示している。これらの各系統の信号路は典型的には、コア100のうちの少なくとも二つのコアとして説明したコア100Aおよびコア100Bの双方に接続されている。図5には、図4のICSRの構成に対応させてコアC0〜C7の8つのコアを明示しておおり、これらのうちのいずれか二つのコアがコア100Aおよびコア100Bに対応付けられる。したがって、図5に示した複数の信号路のうち、f_foint(7:0)と示した信号路は、二つのコア100Aおよびコア100Bの双方にとっての入力FIFOに関する入力方向コア間割込信号fiintを伝達するものといえる。同様に、出力方向コア間割込信号fointは、二つのコア100Aおよびコア100Bの双方出力FIFOに関する出力方向コア間割込信号fointを伝達する。
ここで、入力方向コア間割込信号fiintや出力方向コア間割込信号fointの発行を司る命令(FINTプリフィクス命令)では、対象となるFIFOを特定するのみにて、入力方向コア間割込信号fiintや出力方向コア間割込信号fointのいずれを送信すればよいか判定できる。その理由は、FINTプリフィクス命令が実行される際には、例えば各コアのプリフィクスデコーダ部は、対象となるFIFOのための上記方向ビットFn(図4(a)のICSR)を参照しさえすれば、そのFIFOがそのコアにとっての入力FIFOであるか出力FIFOであるかを特定することができるためである。例えば、FIFOn(nは0〜7のうちのひとつの整数)における方向ビットFnが、そのコアにとってのFIFOnが入力FIFOであることを示すなら、f_fiint(7:0)におけるn番の信号により入力方向コア間割込信号fiintが発行される。そして、その入力方向コア間割込信号fiintは、そのFIFOnを出力FIFOとして利用するコア(下流側コア)において、その制御のために上述したように利用される。逆方向も同様である。
このような方向別の信号系統を用いる典型的な構成では、本実施形態において、プロセッサに備わる3つ以上のコアの間で、FIFOを利用した一連の命令実行プロセスの受け渡しの処理が任意のコアの組合せを許容する柔軟なものとなる。とりわけ、オフチップ、オンチップのいずれかのメモリを利用してFIFOを実装する場合には、各コアからFIFOへのアクセスを柔軟に行ないうることは、演算処理の自由度を大きく高めることになる。例えば図5において、コアC7が上流側コアとなり、コアC0が下流側コアとなって、FIFOを利用した動作も可能である。なお、競合状態(Racing Condition)を防止すべきとの要請を満たすために、最も典型的には、各FIFOは、一連の命令実行プロセスをなすプロセスの範囲において、原則として上流側コアとなるコア1つと、下流側コアとなるコア1つとに接続される。
[1−9 FIFOエントリー数の動的な調整]
再び図1および図2を参照して、二つのFIFOのエントリー数のバランスを動的に調整する構成について説明する。FIFO200は、プロセッサ1000の複数のコアがコア100Aおよび100Bに加えて三つ目のコア100Cを含んでおり、論理的に互いに区別される複数のFIFO、例えばFIFO1とFIFO2(図2)を利用する場合がある。なお、三つ目のコア100Cも、ICSR110CとFIFOカウンタ120Cとを有するとともに、コア間割込同期機能、コア間割込生成機能、およびFIFOカウンタ更新機能を処理可能なように実装されているとする。この場合、これら三つのコア100A、100Bおよび100Cに含まれる第1対のコアのうち、いずれかのコアのICSRである第1のICSRが、第1対のコアが担うプロセスの間のプロセス間通信のために用いられるFIFO1(第1のFIFO)のための値を含んでいる。FIFO2(第2のFIFO)に対しても、三つのコアに含まれる第2対のコアのうちのいずれかのコアのICSRが、第2対のコアが担うプロセスの間のプロセス間通信のために用いられる第2のICSRとなる。なお、第1対をなす二つのコアのうちの一つと、第2対をなす二つのコアのうちの一つは重複していてもよい。図1では、例えば、第1対をなすコアをコア100Aおよびコア100Bとし、第2対をなすコアをコア100Bおよびコア100Cとする。
上述したように可能な限り多くのエントリー数によりFIFO1やFIFO2を構成するほど、コア間の動作を同期させる分散処理の柔軟性を高めることができ、処理効率の観点からは理想的である。しかし、実際にはFIFO1とFIFO2とは、有限のリソース、例えばオンチップメモリを共有して構成されており、互いにリソースを取り合う関係にある。また、実際の処理ではコアの演算負荷にインバランスが生じる場合も多い。さらには、必ずしもFIFO1とFIFO2が同じエントリー数が占有されながら演算が進行するともいえない。これらの実際的な計算処理の状況に対応するためには、複数のコアを利用する全体としての処理効率を向上させるために、状況に応じFIFO1とFIFO2とのそれぞれのエントリーの数や、両者のエントリー数の相対的なバランスを変化させることが有効である。
上記計算処理の状況は、例えば、各FIFOを利用するコアの負荷状況により決定することができる。また、FIFO1が満杯になるか、または、FIFO2が空であるか、というFIFOの使用状況により上記計算処理の状況を決定することもできる。本実施形態のプロセッサ1000において上記バランスを調整するためには、あるコア(例えば下流側コアC1)にとっての入力FIFO(例えばFIFO1)では、そのコアの計算負荷がそれより上流側のコア(上流側コアC0)よりも大きい場合にはFIFOのエントリー数が増加され、小さい場合には、FIFOのエントリー数が削減される。負荷の関係が逆の場合には増減の関係は逆に調整される。また、FIFOの使用状況に基づいて上記バランスを調整するためには、例えばFIFO1が満杯になることが多い場合にFIFO1のエントリー数が増加され、FIFO2が空になることが多い場合FIFO2のエントリー数が減少される。本実施形態のプロセッサ1000ではICSR110の値によりFIFO深さ値としてFIFOの使用エントリー数の上限を決定するため、FIFO1やFIFO2のエントリー数の増減は、第1のICSRおよび第2のICSRの値を変化させることにより実施することができる。このバランスの調整のタイミングは、あらかじめ演算処理の特性に応じてプログラムにおいて指定することができる。別の構成としては、計算負荷をモニタすることも可能である。例えば、演算を担うコアとは別の管理用コア170(図1)により、上流側コアC0や下流側コアC1、追加のコアといった演算用コアの計算負荷をモニタする。また、管理用コア170が、演算用コアの上記第1のICSRや第2のICSRと比較されるFIFOカウンタをモニタしたり、当該管理用コア170がコア間割込信号fintを受信してFIFOの使用状況をモニタしたりすることも有効である。このようなFIFOのエントリー数のバランス調整によるコアの計算負荷の調整、特にコア間のインバランスの制御は、限定されたリソースを有効に利用しながら計算効率を高めることを可能にするため、高い実用性をもたらすものである。
[2 FIFO実装例]
次にFIFOのより具体的な実装形態について説明する。図2に示したフローチャートによって図3に示した受け渡しまたはそれに同等な受け渡しを実行するためのFIFO1のためのハードウエアは、上述したように二つの典型的な構成において実施することができる。一つはメモリを用いものであり、もう一つはコア間で共有される共有レジスタを用いるものである。ここでは、各構成についてのサンプルのプログラムを説明する。なお、以下の説明において、メモリか共有レジスタバンクかが変更されるのは、図2におけるFIFO1のみである。FIFO0およびFIFO2は、いずれもメモリであるとする。
[2−1 メモリによるFIFO実装例]
FIFO200をソフトウエア上にて実装するためにメモリを用いることは、FIFOとして、プロセッサとは別の半導体チップのメモリを利用するもの、および、プロセッサと同一の半導体チップのオンチップメモリを利用するもの、という典型的な二つの形態を含んでいる。いずれの場合であっても、FIFOは、アドレスを指定することによりアクセスすることができる。
[2−1−1 例示のプログラム]
図6は、FIFO200のすべてのFIFOをメモリ上に実装する場合の例示のプログラムリストである。ここでは、再び図2に示した上流側コアC0と下流側コアC1に実行させるプログラムとして説明する。図6に示すとおり、上流側コアC0と下流側コアC1にはそれぞれのプログラムが与えられる。つまり、一連の命令実行プロセスの一部として、上流側コアC0はプロセスP0を実行し、下流側コアC1はプロセスP1を実行する。本プログラムリストにおいては、「;」により開始する行はコメント行であり、「<」と「>」で囲んだ記載は本出願にて動作を説明するためのものである。また、上述した図3のフローチャートは、以下の上流側コアC0におけるプロセスP0、ストリームアウト、下流側コアC1におけるストリームインおよびプロセスP1に対応している。
[2−1−1−1 上流側コアC0のプログラム]
上流側コアC0が実行する処理は、順に、初期化、FIFO0を入力FIFO(メモリ)とするストリームイン、カーネルであるプロセスP0、そしてFIF01を出力FIFOとするストリームアウトである。初期化では、上流側コアC0にとっての入力FIFOであるFIFO0、および上流側コアC0にとっての出力FIFOであるFIFO1のためのベースアドレスを設定する。そして、ICSRの値としてFIFO0とFIFO1に対応する値を設定する。
ストリームインの最初の命令は、FISYNC0:FINT0:LDM D0x16,[R0]の行である。この行は、二つのプリフィクスFISYNC0およびFINT0がLDM(ロードマルチ)命令に付されて構成されている。なお、ここに記載されたLDM命令は、アドレスポインタであるR0が示すメモリ位置のデータをD0から始まる16本のデータレジスタにロードするための命令である。このうちFISYNC0は、FIFO0を対象とする進行制御用プリフィクスFISYNCであり、「1−5−4 入力FIFOを利用するコアの構成」の欄にて説明した進行制御機能を、後続するLDM命令に対して作用させるものである。具体的には、FISYNC0の作用は、二つに場合分けすることができる。一つは、FIFO0(図2)がreadyつまり空でないという第1条件が成立するときに後続するLDM命令を実行させるというものである。もう一つは、FIFO0がemptyつまり空であるという第2条件が成立するときFOINT0(図2)を待たせるというものである。このFOINT0は、さらに上流側コア(存在すれば)からの出力方向コア間割込信号fointである。第2条件は、第1条件と排他的に成立し、出力方向コア間割込信号fointの到来によりFIFO0がreadyとなるため、上記場合分けして説明したFISYNC0の動作は、上述した進行制御機能と同様の動作となる。
一方、FINT0は、後続するLDM命令の実行のためのFIFO0へのアクセスの完了時に、FIFO0を出力FIFOとするさらに上流側コアに対する入力方向コア間割込信号fiint(FIINT0、図2)を送信するためのプリフィクスである。FINT0の末尾の「0」は、FIFO0を特定するためのものである。ちなみに、FIFO0が上流側コアC0にとって入力FIFOであるか出力FIFOであるかはFINT0では明示的に特定されてはいない。これは、ICSRにおける方向ビットを参照すれば、接続される各FIFOが入力FIFOか出力FIFOであるかを上流側コアC0が特定できるためである。
なお、FIFO0が空か空でないかの判定は、FIFO0のためのFIFOカウンタの値(FIFO0.CNT)の値により判定される。この動作を可能にするため、FIFO0.CNTは、上流側コアに対する入力方向コア間割込信号fiintの送信によりデクリメントされ、上流側コアからの出力方向コア間割込信号fointの到来によりインクリメントされている(FIFOカウンタ更新機能)。
さらに、ストリームインの第2の命令として、ADD命令により、R0(FIFO0のアドレスをポインタとして格納するレジスタ)を、FIFO0_sizeつまりFIFO0の1エントリー分だけシフトする。これによりストリームインを完了する。
ストリームインののち、カーネルプロセスであるプロセスP0を実行する(図2、図3)。
そして、ストリームアウトは、今度はFIFO1を通じてデータレジスタの内容を下流側コアC1に渡す処理である(図2)。この処理は、FOWAIT1:FINT1:STM [R1],D16x16の行により実行される。これは、プリフィクスFOWAIT1およびFINT0がSTM(ストアマルチ)命令に付されて構成されている。STM命令は、アドレスポインタであるR1が示すメモリ位置に、D16から始まる16本のデータレジスタの値をストアするための命令である。
ストリームアウトにおけるプリフィクスFOWAIT1は、FIFO1を対象とする待機制御用プリフィクスFOWAITであり、上述した待機制御機能を後続するSTM命令に対して作用させるものである。FOWAIT1の作用も二つに場合分けすることができる。一つは、FIFO1(図2)がfullつまり満杯であるという第1条件が成立するときFIINT1(図2)、下流側コアC1からの入力方向コア間割込信号fiintの到来を待たせるというものである。もう一つは、FIFO1がnot fullつまり満杯でないという第2条件が成立するとき、後続するSTM命令を実行させるというものである。この場合にも、第2条件は、第1条件と排他的に成立し、入力方向コア間割込信号fiintの到来によりFIFO1がnot fullとなるため、上記場合分けして説明したFOWAIT1の動作は、上述した待機制御機能と同様の動作となる。
FINT1は、後続するSTM命令の実行のためのFIFO1へのアクセスの完了時に、下流側コアC1に対する出力方向コア間割込信号foint(FOINT1、図2)を送信するためのプリフィクスである。FINT1の末尾の「1」がFIFO1を特定していること、FIFO1が入力FIFOであるか出力FIFOであるかの特定が不要なことは、FISYNC0の場合と同様である。また、FIFO1が満杯か満杯でないかの判定のために、FIFO1のためのFIFOカウンタの値(FIFO1.CNT)の値が利用されることも同様である。さらに、FIFO1.CNTは、下流側コアC1に対する出力方向コア間割込信号fointの送信によりインクリメントされ、下流側コアC1からの入力方向コア間割込信号fiintの到来によりインクリメントされること(FIFOカウンタ更新機能)も同様である。
[2−1−1−2 下流側コアC1のプログラム]
下流側コアC1のプログラムにおける受け渡しのためのプログラムも、上述した上流側コアC0のプログラムと同様に、初期化、ストリームイン、プロセスP1、ストリームアウトという構成となっている。各命令に対するプリフィクスの作用も上述したものと同様である。下流側コアC1のプログラムを、上流側コアC0のプログラムとの違いのみ説明すれば、利用するFIFOがFIFO1とFIFO2になっていることの違いのみである。また、プロセスP1が一連の命令実行プロセスの最終のものであれば、最終のFOWAIT2、FINT2、STM[R2]、D7x16におけるFIFOに関するプリフィクスは不要となる。
[2−2 共有レジスタバンクによるFIFO実装例]
別の典型的な実施形態は、プロセッサのコア間にて共有される共有レジスタバンクを利用するものである。この共有レジスタバンクの各レジスタへのアクセスは、メモリアクセスのためのサイクル(例えばロード命令やストア命令)を消費することなく、即座に可能である。このため、FIFOを利用した演算を高速に行ないうる利点を有する。なお、本実施形態の共有レジスタバンクを実装するためには、共有レジスタバンクは、FIFO200の各エントリーを構成可能なものとされる。特に、FIFOの各エントリーを共有レジスタバンクの各バンクに割り当てると、各コアがアクセスするバンクを切り替える動作によって先入れ先出し動作するFIFO200を構成することも可能となる。このような負荷のない処理の結果、上記メモリアクセスレイテンシーの制約からの解放と併せて、極めて高い演算効率にてFIFOを利用する演算を実行することが可能となる。
この実装の場合には、プロセッサ1000は、コア間にて共有される共有レジスタバンクとともに、各コアは、バンク切り替えのための命令をデコードしうるように作製される。また、FIFOとして用いる共有レジスタバンクを共有するコアは、互いの構成が異なっていることもあり得る。例えば、ビット長の異なるコアであっても、互いの間において共有レジスタバンクを通じた一連の命令実行プロセスの受け渡しを実行することが可能である。
[2−2−1 リング型接続]
図7は、データレジスタである共有レジスタバンクを利用してFIFOを実装する典型的な構成を示す説明図である。図7(a)は、隣接するコアで互いに参照される共有レジスタバンクの参照関係を示しており、図7(b)は、共有レジスタバンクの参照・被参照時のレジスタバンクの対応関係を示す図である。本構成においては、隣接するコア間において互いに他のコアのレジスタバンクを参照することが可能となる。
本実施形態における複数のコアは、少なくとも二つのコアに少なくとも一つのコアを加えた少なくとも三つのコアを含んでいる。追加となる少なくとも一つのコアは、ICSRとFIFOカウンタとを有するとともに、コア間割込同期機能、コア間割込生成機能、およびFIFOカウンタ更新機能を処理可能なように実装されている。そして、図7(a)に示したように、少なくとも三つのコアの接続トポロジーは、各コアが順序づけされたリング型接続のコアの並びをなしている。この並びは、典型的には半導体ダイにおけるレイアウト上においても、例えばループ状の並びとして実現される。
そして、共有レジスタバンクは、コアの並びにおいて互いに隣接する一対のコアの間で、順序の昇順または降順の少なくともいずれか一の向きに一のコアから他のコアへ参照可能なものである。例えば、各コアが、レジスタバンクB0〜B15という16バンクの共有レジスタバンクを利用できるとする。その際、隣り合ったコアは互いにその一部のバンクを共有している。例えば、図7(b)に示したように、隣り合った三つのコアの中央のコア(参照コア)において、レジスタバンクB0〜B15を演算に用いるとする。この際、参照コアのレジスタバンクB12〜B15は、左隣のコア(第1の被参照コア)のレジスタバンクB4〜B7にマップされている。同様に、参照コアのレジスタバンクB8〜B11は、右隣のコア(第2の被参照コア)のレジスタバンクB0〜B3にマップされている。このため、第1の被参照コアが自らのレジスタバンクB4〜B7をFIFOのために使用する演算を進めながらそのFIFOに参照コアがアクセスするためには、参照コアは自らのレジスタバンクB12〜B15をアクセスするだけでよい。
[2−2−2 例示のプログラム]
図8は、共有レジスタバンクを利用しFIFO200を実装する場合に動作される例示のプログラムリストである。ここでは、再び図2に示した上流側コアC0と下流側コアC1に実行させるプログラムとして説明する。図8に示すとおり、上流側コアC0と下流側コアC1には、それぞれのプログラムが与えられる。メモリを利用したFIFOの場合と同様に、図3のフローチャートは、以下の上流側コアC0におけるプロセスP0、ストリームアウト、下流側コアC1におけるストリームインおよびプロセスP1に対応している。なお、以下のプログラムにおいては、FIFO1のみを共有レジスタバンクにより実現し、FIFO0およびFIFO2はメモリであるとする。以下、メモリを利用したFIFOの場合(図6)との違いを中心に説明する。また、共有レジスタバンクを用いる場合の処理は、図3に示したフローチャートの各ステップとは順序が前後しており、ストリームインおよびストリームアウトの範囲も図3のものとは異なっている。
[2−2−2−1 上流側コアC0のプログラム]
上流側コアC0が実行する処理は、順に、初期化、FIFO0を入力FIFO(メモリ)とするストリームイン、カーネルであるプロセスP0、そして共有レジスタバンクに構成されるFIF01を出力FIFOとするストリームアウトである。初期化では、上流側コアC0にとっての入力FIFOであるFIFO0のためのベースアドレスを設定する。そして、ICSRの値としてFIFO0とFIFO1に対応する値を設定する。
ストリームインは、その内容および機能はメモリの場合(図6)と同様である。つまり、最初の命令は、FISYNC0:FINT0:LDM D0x16,[R0]の行であり、ストリームインの第2の命令は、ADD命令によるFIFO0の1エントリー分だけシフトする。これによりストリームインを完了する。
ストリームインののち、カーネルプロセスであるプロセスP0を実行する(図2、図3)。ここで、プロセスP0の演算処理の前に、FOWAIT1:xxの行において、レジスタのFIFO1がnot fullつまり満杯でないことを条件にして命令xx(任意の命令)を実行する。その際には、FIFO1が満杯か満杯でないかの判定のためにFIFO1のためのFIFOカウンタの値(FIFO1.CNT)の値が利用される。
そして、BS10の行は、バンクスイッチ命令である。ここでは「10」という指定によって、ソースレジスタのためのバンク(ソースバンク)は不変のまま、共有レジスタバンクのデスティネーションレジスタのためのバンク(デスティネーションパンク)をB1に切り替える。これにより、上流側コアC0にとっての出力FIFOとなるFIFO1のエントリーが、演算に用いる要素の格納先として指定される。その後、プロセスP0の実体的な演算処理を実行する(プログラムにおいて「・・」とのみ表記)。その演算処理は、B1に指定したデスティネーションバンクの各レジスタに更新された値が格納されてゆく。
FINT1:の行は、下流側コアC1に対する出力方向コア間割込信号fointを送信し、FIFO1.CNTをインクリメントする命令である。この命令により、プロセスP0は完了する。
ストリームアウトは、FIFO1の書き込み先エントリーを変更するために、BS20の行により、デスティネーションパンクをB2に切り替える処理のみで完了する。
本プログラムでは、上述したカーネルプロセスであるプロセスP0とストリームアウトの処理を通じて、上記待機制御機能の動作が行なわれる。なお、FIFO1が共有レジスタバンクであることから、ICSRの値のうちFIFO1の値は利用されず、FIFOとして用いるレジスタバンクの方向(入力FIFOか出力FIFOか)は、ISCRの方向ビットではなく、BS10命令により特定される。
[2−2−2−2 下流側コアC1のプログラム]
下流側コアC1が実行する処理も、順に、初期化、ストリームイン、カーネルであるプロセスP1、そしてストリームアウトである。ストリームインは、共有レジスタバンクに構成されるFIF01を入力FIFOとするものであり、ストリームアウトは、FIFO2を出力FIFO(メモリ)とする。
ストリームインは、FISYNC1:xxの命令である。つまり、FIFO1であるレジスタバンクが空であるつまりreadyでなければ、FOINT1(図2)つまり上流側コアC0からの出力方向コア間割込信号fointの到来を待ち、その到来を条件に命令xxを実行する。この際、FIFO1が空かどうかの判定のためにFIFO1のためのFIFOカウンタの値(FIFO1.CNT)の値が利用される。
プロセスP1は、BS01命令により、デスティネーションバンクは不変のまま、ソースバンクを演算に用いるレジスタのための共有バンクレジスタのバンクであるB1に設定している。そのバンクB1のレジスタをソースレジスタとして演算処理が行なわれる。その後、FINT1:xxにより、命令xxのためのソースバンクB1へのアクセスが完了したときに、上流側コアC0に対する入力方向コア間割込信号fiintを送信し、FIFO1.CNTをデクリメントする。上記ストリームインとプロセスP1の処理をこの時点まで進めることにより、上記進行制御機能が実施される。そして、この際にも、FIFO1が共有レジスタバンクであることから、ICSRの値のうちFIFO1の値は利用されず、FIFOとして用いるレジスタバンクの方向(入力FIFOか出力FIFOか)は、ISCRの方向ビットではなく、BS01命令により特定される。
その後、ストリームアウトの処理が行なわれる。この処理は、メモリであるFIFO2を出力FIFOとする処理であり、メモリを利用するものと同様である。
[3 変形例]
上述した説明において、本実施形態は、プロセッサとしてその構成要素、機能、および動作を説明した。本実施形態は、上述した各構成要素、機能、および動作を実現するプロセッサに備わるコアとして、または、上述した各動作を実現する上記プロセッサの動作方法として実施することが可能である。
[3−1 FIFOの構成の変形例]
例えば、例示したプログラムにおいては、プロセッサ間通信のためのFIFOのエントリー数は3エントリー(図6)などとしているが、このエントリー数は、1エントリーまたは複数のエントリーのための任意の値とすることができる。本実施形態のプロセッサの複数のコアには、通常の演算コアに装備されないコア間割込信号fintを送信する機能があるため、FIFOとして必ずしも多段のFIFOを利用しなくとも、コア同士の連携を適切に実行することが可能となる。
[3−2 FIFOの構成の変形例]
さらに、例示したプログラムにおいては、ICSRの値は初期化の段階に設定している。本実施形態では、別の例として、ICSRの値、特にFIFOのエントリー数を指定する値を変更することにより、少なくとも三つのコアにおいて利用される二つのFIFOのエントリー数のバランスを動的に調整することが可能である。このような構成とすると、有限のメモリなどのリソースを適切に配分することが可能となり有用性が高いプロセッサを作成することが可能となる。
以上、本発明の実施形態を具体的に説明した。上述の各実施形態および実施例は、発明を説明するために記載されたものであり、本出願の発明の範囲は、特許請求の範囲の記載に基づいて定められるべきものである。また、各実施形態の他の組合せを含む本発明の範囲内に存在する変形例もまた、特許請求の範囲に含まれるものである。
本発明のプロセッサ、コアおよびプロセッサの動作方法は、プロセッサを利用する任意の電気・電子機器に利用可能である。
1 コンピュータ
2000 CPU(中央演算装置)
3000 バス
1000 プロセッサ
100 コア
100A、100B、100C コア
110、110A、110B、110C ICSR
120、120A、120B、120C FIFOカウンタ
140 信号路
170 管理用コア
200 FIFO(先入れ先出しバッファ)
202 第1エントリー
204 第2エントリー
206 第3エントリー
208 第4エントリー
C1 上流側コア
C2 下流側コア
P0、P1 プロセス
B0〜B15 レジスタバンク

Claims (17)

  1. プロセス間通信を含む一連の命令実行プロセスを処理するための複数のコアを備えるプロセッサであって、
    該複数のコアのうちの少なくとも二つのコアに接続されコア間割込信号fintを伝達可能な信号路を有しており、
    前記少なくとも二つのコアそれぞれが、
    FIFO深さ値を格納するためのコア間割込みカウント設定レジスタ(ICSR)と、ここで、前記FIFO深さ値は、当該コアが担うプロセスと別のコアが担うプロセスとの間のプロセス間通信のために用いられる先入れ先出しバッファ(FIFO)のエントリー数を表しているとともに、処理中のプロセス間通信を含む前記一連の命令実行プロセスの範囲における上限値となるものであり、
    前記FIFOの使用中のエントリー数を示す値を格納するためのFIFOカウンタと
    を有しており、
    前記少なくとも二つのコアそれぞれは、
    前記少なくとも二つのコアのうちの別のコアから受信したコア間割込信号fint、前記FIFOカウンタの値、および前記ICSRの値の少なくともいずれかに基づいて、当該コアと前記別のコアとの間でプロセス間通信を行なうためのコア間割込同期機能と、
    当該コア自体による前記FIFOへのアクセスの完了時に、前記別のコアがそれ自体のプロセスの制御に利用するコア間割込信号fintを発行して送るコア間割込生成機能と、
    前記FIFOカウンタの値を、前記コア間割込信号fintの受信または当該コア自体によるコア間割込信号fintの発行に応じてインクリメントまたはデクリメントさせるFIFOカウンタ更新機能と
    が処理可能なように実装されているものであり、
    これにより、前記FIFOを利用するプロセス間通信を含む前記一連の命令実行プロセスを、前記少なくとも二つのコアのプロセスを同期させることにより実行するプロセッサ。
  2. 前記FIFOが、前記少なくとも二つのコアのうちのいずれか一のコアである下流側コアが処理すべき要素として、前記少なくとも二つのコアのうちの該下流側コアとは別のコアである上流側コアからの要素を受け付ける、該上流側コアにとっての出力FIFOとなっており、
    前記上流側コアが備える前記ICSR、および、前記上流側コアが備える前記FIFOカウンタが、前記出力FIFOのための値を格納可能になっており、
    前記上流側コアに実装された前記FIFOカウンタ更新機能は、前記出力FIFOのための前記FIFOカウンタの値を、前記下流側コアからの入力方向コア間割込信号fiintを受信したときデクリメントし、該下流側コアに対する出力方向コア間割込信号fointを送信したときインクリメントする機能を含んでいるものである、請求項1に記載のプロセッサ。
  3. 前記上流側コアに実装された前記コア間割込同期機能は、前記出力FIFOのための前記FIFOカウンタの値と前記ICSRの値とを比較し、前記出力FIFOが満杯である場合、前記上流側コア自体によるプロセスを待機状態にするとともに、前記下流側コアからの入力方向コア間割込信号fiintを前記上流側コアがその後に受信することにより、前記待機状態を解除して前記上流側コアによるプロセスを再開させる待機制御機能を含んでいるものである、請求項2に記載のプロセッサ。
  4. 前記待機制御機能は、実行される一の命令に待機制御用プリフィクスFOWAITを明示することにより、当該一の命令のプロセスを対象として作用するものである、請求項3に記載のプロセッサ。
  5. 前記FIFOが、前記少なくとも二つのコアのうちのいずれか一のコアである下流側コアが処理すべき要素として、前記少なくとも二つのコアのうちの該下流側コアとは別のコアである上流側コアからの要素を受け付ける、該下流側コアにとっての入力FIFOとなっており、
    前記下流側コアが備える前記ICSR、および、前記下流側コアが備える前記FIFOカウンタが、前記入力FIFOのための値を格納可能になっており、
    前記下流側コアに実装された前記FIFOカウンタ更新機能は、前記入力FIFOのための前記FIFOカウンタの値を、前記上流側コアからの出力方向コア間割込信号fointを受信したときインクリメントし、該上流側コアに対する入力方向コア間割込信号fiintを送信したときデクリメントする機能を含んでいるものである、請求項1に記載のプロセッサ。
  6. 前記下流側コアに実装されたコア間割込同期機能は、前記入力FIFOのための前記FIFOカウンタの値と前記入力FIFOが空であることを示す値とを比較し、前記入力FIFOが空である場合、前記下流側コア自体によるプロセスを待機状態にするとともに、前記上流側コアからの出力方向コア間割込信号fointを前記下流側コアがその後に受信することにより、前記待機状態を解除して前記下流側コアによるプロセスを再開させる進行制御機能を含んでいるものである、請求項5に記載のプロセッサ。
  7. 前記進行制御機能は、実行される一の命令に進行制御用プリフィクスFISYNCを明示することにより、当該一の命令のプロセスを対象として作用するものである、請求項6に記載のプロセッサ。
  8. 前記コア間割込生成機能は、実行される一の命令に割込生成用プリフィクスFINTを明示することにより、当該一の命令のプロセスのための前記FIFOへのアクセス完了時に実行されるものである、請求項1に記載のプロセッサ。
  9. 前記複数のコアは、前記少なくとも二つのコアに少なくとも一つのコアを加えた少なくとも三つのコアを含んでおり、
    該少なくとも一つのコアは、前記ICSRと前記FIFOカウンタとを有するとともに、前記コア間割込同期機能、前記コア間割込生成機能、および前記FIFOカウンタ更新機能とを処理可能なように実装されており、
    前記少なくとも三つのコアに含まれる第1対のコアのうちのいずれかのコアの前記ICSRである第1のICSRが、該第1対のコアが担うプロセスの間のプロセス間通信のために用いられる第1のFIFOのための値を含んでおり、
    前記少なくとも三つのコアに含まれる第2対のコアのうちのいずれかのコアの前記ICSRである第2のICSRが、該第2対のコアが担うプロセスの間のプロセス間通信のために用いられる第2のFIFOのための値を含んでおり、
    前記第1のICSRの値を変化させて前記第1のFIFOのエントリー数が増加され、かつ、前記第2のICSRの値を変化させて前記第2のFIFOのエントリー数が削減される、請求項1に記載のプロセッサ。
  10. 各コアの前記ICSRが、当該コアがアクセスしうるFIFOのために、前記FIFO深さ値に対応させて、該FIFOが当該コアにとっての入力FIFOであるか出力FIFOであるかを示す方向ビットを有している、請求項1に記載のプロセッサ。
  11. 前記複数のコアは、前記少なくとも二つのコアに少なくとも一つのコアを加えた少なくとも三つのコアを含んでおり、
    該少なくとも一つのコアは、前記ICSRと前記FIFOカウンタとを有するとともに、前記コア間割込同期機能、前記コア間割込生成機能、および前記FIFOカウンタ更新機能とを処理可能なように実装されており、
    前記信号路が複数の系統の信号路を含んでおり、
    前記信号路の各系統が、前記少なくとも三つのコアのそれぞれに接続されており、
    前記信号路の一の系統が、前記少なくとも三つのコアそれぞれにとっての入力FIFOに関する入力方向コア間割込信号fiintを伝達するものであり、
    前記信号路の他の系統が、前記少なくとも三つのコアそれぞれにとっての出力FIFOに関する出力方向コア間割込信号fointを伝達するものである、請求項2または請求項5に記載のプロセッサ。
  12. 前記FIFOは、前記プロセッサとは別の半導体チップのメモリ、または、前記プロセッサと同一のオンチップメモリのいずれかを利用して構成されるものである、請求項1に記載のプロセッサ。
  13. 前記少なくとも二つのコアからアクセス可能な共有レジスタバンクをさらに備えており、
    該共有レジスタバンクの各バンクは、前記FIFOの各エントリーを構成可能なものである、請求項1に記載のプロセッサ。
  14. 前記複数のコアは、前記少なくとも二つのコアに少なくとも一つのコアを加えた少なくとも三つのコアを含んでおり、
    該少なくとも一つのコアは、前記ICSRと前記FIFOカウンタとを有するとともに、前記コア間割込同期機能、前記コア間割込生成機能、および前記FIFOカウンタ更新機能とを処理可能なように実装されており、
    前記少なくとも三つのコアが、各コアが順序づけされたリング型接続のコアの並びをなしており、
    前記共有レジスタバンクは、前記コアの並びにおいて互いに隣接する一対のコアの間で、前記順序の昇順または降順の少なくともいずれか一の向きに、一のコアから他のコアへ参照可能なものである、請求項13に記載のプロセッサ。
  15. 前記共有レジスタバンクは、前記リング型接続の前記コアの並びにおいて互いに隣接する一対のコアの間で相互に参照可能なものである、請求項14に記載のプロセッサ。
  16. プロセス間通信を含む一連の命令実行プロセスを処理するために複数のコアを備えるプロセッサのためのコアであって、
    該複数のコアのうちの少なくとも二つのコアは、前記プロセッサに備わるコア間割込信号fintを伝達可能な信号路に接続されており、
    前記少なくとも二つのコアそれぞれが、
    FIFO深さ値を格納するためのコア間割込みカウント設定レジスタ(ICSR)と、ここで、前記FIFO深さ値は、当該コアが担うプロセスと別のコアが担うプロセスとの間のプロセス間通信のために用いられる先入れ先出しバッファ(FIFO)のエントリー数を表しているとともに、処理中のプロセス間通信を含む前記一連の命令実行プロセスの範囲における上限値となるものであり、
    前記FIFOの使用中のエントリー数を示す値を格納するためのFIFOカウンタと
    を有しており、
    前記少なくとも二つのコアそれぞれは、
    前記少なくとも二つのコアのうちの別のコアから受信したコア間割込信号fint、前記FIFOカウンタの値、および前記ICSRの値の少なくともいずれかに基づいて、当該コアと前記別のコアとの間でプロセス間通信を行なうためのコア間割込同期機能と、
    当該コア自体による前記FIFOへのアクセスの完了時に、前記別のコアがそれ自体のプロセスの制御に利用するコア間割込信号fintを発行して送るコア間割込生成機能と、
    前記FIFOカウンタの値を、前記コア間割込信号fintの受信または当該コア自体によるコア間割込信号fintの発行に応じてインクリメントまたはデクリメントさせるFIFOカウンタ更新機能と
    が処理可能なように実装されているものであり、
    これにより、前記プロセッサが、前記FIFOを利用するプロセス間通信を含む前記一連の命令実行プロセスを、前記少なくとも二つのコアのプロセスにより実行するものである、前記少なくとも二つのコアのいずれかであるコア。
  17. 複数のコアを備えるプロセッサによりプロセス間通信を含む一連の命令実行プロセスを処理するためのプロセッサの動作方法であって、
    ここで、該複数のコアのうちの少なくとも二つのコアそれぞれは、当該コアが担うプロセスと別のコアが担うプロセスとの間のプロセス間通信のために用いられる先入れ先出しバッファ(FIFO)の使用中のエントリー数を示す値を格納するためのFIFOカウンタとFIFO深さ値を格納するためのコア間割込みカウント設定レジスタ(ICSR)とを有するとともに、コア間割込信号fintを伝達可能な信号路に接続されており、ここで、前記FIFO深さ値は、前記FIFOのエントリー数を表しているとともに、処理中のプロセス間通信を含む前記一連の命令実行プロセスの範囲における上限値となるものであり、
    前記少なくとも二つのコアそれぞれは、実装されている機能手段により、
    前記少なくとも二つのコアのうちの別のコアから受信したコア間割込信号fint、前記FIFOカウンタの値、および前記ICSRの値の少なくともいずれかに基づいて、当該コアと前記別のコアとの間でプロセス間通信を行なうためのコア間割込同期ステップと、
    当該コア自体による前記FIFOへのアクセスの完了時に、前記別のコアがそれ自体のプロセスの制御に利用するコア間割込信号fintを発行して送るコア間割込生成ステップと、
    前記FIFOカウンタの値を、前記コア間割込信号fintの受信または当該コア自体によるコア間割込信号fintの発行に応じてインクリメントまたはデクリメントさせるFIFOカウンタ更新ステップと
    を実行し、これにより、前記FIFOを利用するプロセス間通信を含む前記一連の命令実行プロセスが、前記少なくとも二つのコアのプロセスを同期させることにより実行される
    プロセッサの動作方法。
JP2012015988A 2012-01-27 2012-01-27 プロセッサ・コア、およびマルチコア・プロセッサ・システム Expired - Fee Related JP5842206B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2012015988A JP5842206B2 (ja) 2012-01-27 2012-01-27 プロセッサ・コア、およびマルチコア・プロセッサ・システム
US13/718,796 US9135210B2 (en) 2012-01-27 2012-12-18 Processor core and multi-core processor system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012015988A JP5842206B2 (ja) 2012-01-27 2012-01-27 プロセッサ・コア、およびマルチコア・プロセッサ・システム

Publications (2)

Publication Number Publication Date
JP2013156783A true JP2013156783A (ja) 2013-08-15
JP5842206B2 JP5842206B2 (ja) 2016-01-13

Family

ID=49051911

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012015988A Expired - Fee Related JP5842206B2 (ja) 2012-01-27 2012-01-27 プロセッサ・コア、およびマルチコア・プロセッサ・システム

Country Status (2)

Country Link
US (1) US9135210B2 (ja)
JP (1) JP5842206B2 (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104331388A (zh) * 2013-08-28 2015-02-04 威盛电子股份有限公司 微处理器及在微处理器的处理核间同步的方法
US9685219B2 (en) 2015-05-13 2017-06-20 Samsung Electronics Co., Ltd. Semiconductor memory device for deconcentrating refresh commands and system including the same
JP2019502201A (ja) * 2015-12-11 2019-01-24 ビバンテ コーポレーション マルチスレッドアクセスのためのソフトウェア定義のfifoバッファ
CN111026697A (zh) * 2019-11-21 2020-04-17 Oppo广东移动通信有限公司 核间通信方法、系统、电子器件以及电子设备
US10769004B2 (en) 2017-01-27 2020-09-08 Fujitsu Limited Processor circuit, information processing apparatus, and operation method of processor circuit

Families Citing this family (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8972923B2 (en) * 2011-02-08 2015-03-03 Maxeler Technologies Ltd. Method and apparatus and software code for generating a hardware stream processor design
US9792112B2 (en) 2013-08-28 2017-10-17 Via Technologies, Inc. Propagation of microcode patches to multiple cores in multicore microprocessor
US9465432B2 (en) 2013-08-28 2016-10-11 Via Technologies, Inc. Multi-core synchronization mechanism
US9507404B2 (en) 2013-08-28 2016-11-29 Via Technologies, Inc. Single core wakeup multi-core synchronization mechanism
US10136384B1 (en) * 2014-10-14 2018-11-20 Altera Corporation Methods and apparatus for performing buffer fill level controlled dynamic power scaling
US9779043B2 (en) * 2015-11-16 2017-10-03 International Business Machines Corporation Techniques for handling queued interrupts in a data processing system
RU2611337C1 (ru) * 2016-01-13 2017-02-21 Федеральное государственное учреждение "Федеральный научный центр Научно-исследовательский институт системных исследований Российской академии наук" (ФГУ ФНЦ НИИСИ РАН) Способ передачи сообщений между вычислительными устройствами
CN105843771A (zh) * 2016-04-11 2016-08-10 浪潮电子信息产业股份有限公司 一种多核dsp中edma不同带宽设备间通信的方法
EP3401784A1 (en) * 2017-05-11 2018-11-14 Tredzone SAS Multicore processing system
DE102017210076B4 (de) 2017-06-14 2023-08-24 Elektrobit Automotive Gmbh Verfahren und System zur Multikern-Kommunikation mit Sicherheitseigenschaften
JP2019053600A (ja) * 2017-09-15 2019-04-04 ルネサスエレクトロニクス株式会社 半導体集積回路装置及びデータ比較方法
CN107835318B (zh) * 2017-11-21 2021-02-02 Oppo广东移动通信有限公司 进程启动的管控方法、装置及存储介质和移动终端
CN111971663A (zh) 2018-04-16 2020-11-20 埃米尔·巴登霍斯特 处理器和操作处理器的方法
US11263043B1 (en) * 2019-07-19 2022-03-01 Marvell Asia Pte, Ltd. Managing processor core synchronization using interrupts
US20210409265A1 (en) * 2021-01-28 2021-12-30 Intel Corporation In-network multicast operations
US11886343B2 (en) * 2021-03-31 2024-01-30 Dreamworks Animation Llc Lock-free ring buffer
CN113886054B (zh) * 2021-12-03 2022-04-15 芯来科技(武汉)有限公司 一种中断处理装置、芯片和电子设备
CN114443322A (zh) * 2022-01-20 2022-05-06 Oppo广东移动通信有限公司 核间通信方法、装置、电子设备及存储介质
CN117331720B (zh) * 2023-11-08 2024-02-23 瀚博半导体(上海)有限公司 用于多核间通信的方法、寄存器组、芯片及计算机设备

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH06325565A (ja) 1993-05-14 1994-11-25 Nec Corp カウント機能付きfifoメモリ
US5841988A (en) * 1996-05-23 1998-11-24 Lsi Logic Corporation Interprocessor communications data transfer and error detection in a multiprocessing environment
US7228375B1 (en) * 2001-01-12 2007-06-05 Slt Logic, Llc System and method for efficient input/output of a computer system
US8843928B2 (en) 2010-01-21 2014-09-23 Qst Holdings, Llc Method and apparatus for a general-purpose, multiple-core system for implementing stream-based computations
US7734797B2 (en) * 2004-03-29 2010-06-08 Marvell International Ltd. Inter-processor communication link with manageability port
JP4439491B2 (ja) 2006-05-24 2010-03-24 株式会社ソニー・コンピュータエンタテインメント マルチグラフィックスプロセッサシステム、グラフィックスプロセッサおよびデータ転送方法
US8095816B1 (en) * 2007-04-05 2012-01-10 Marvell International Ltd. Processor management using a buffer
US8661458B2 (en) * 2008-03-11 2014-02-25 Nec Corporation Multiprocessor system, and method for shared use of devices among operating systems of multiprocessor system
US20100287320A1 (en) * 2009-05-06 2010-11-11 Lsi Corporation Interprocessor Communication Architecture
JP5375650B2 (ja) 2010-02-15 2013-12-25 日本電気株式会社 マルチコアシステム、マルチコアシステムの制御方法及びプログラム
JP5895840B2 (ja) 2010-05-26 2016-03-30 日本電気株式会社 マルチプロセッサシステム、実行制御方法、実行制御プログラム
US8745291B2 (en) * 2011-10-04 2014-06-03 Qualcomm Incorporated Inter-processor communication apparatus and method

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104331388A (zh) * 2013-08-28 2015-02-04 威盛电子股份有限公司 微处理器及在微处理器的处理核间同步的方法
CN104331388B (zh) * 2013-08-28 2018-09-11 威盛电子股份有限公司 微处理器及在微处理器的处理核间同步的方法
CN108984464A (zh) * 2013-08-28 2018-12-11 威盛电子股份有限公司 微处理器及在微处理器的处理核间同步的方法
CN108984464B (zh) * 2013-08-28 2022-01-28 威盛电子股份有限公司 微处理器及在微处理器的处理核间同步的方法
US9685219B2 (en) 2015-05-13 2017-06-20 Samsung Electronics Co., Ltd. Semiconductor memory device for deconcentrating refresh commands and system including the same
US10090038B2 (en) 2015-05-13 2018-10-02 Samsung Electronics Co., Ltd. Semiconductor memory device for deconcentrating refresh commands and system including the same
JP2019502201A (ja) * 2015-12-11 2019-01-24 ビバンテ コーポレーション マルチスレッドアクセスのためのソフトウェア定義のfifoバッファ
US10769004B2 (en) 2017-01-27 2020-09-08 Fujitsu Limited Processor circuit, information processing apparatus, and operation method of processor circuit
CN111026697A (zh) * 2019-11-21 2020-04-17 Oppo广东移动通信有限公司 核间通信方法、系统、电子器件以及电子设备

Also Published As

Publication number Publication date
US20140013021A1 (en) 2014-01-09
US9135210B2 (en) 2015-09-15
JP5842206B2 (ja) 2016-01-13

Similar Documents

Publication Publication Date Title
JP5842206B2 (ja) プロセッサ・コア、およびマルチコア・プロセッサ・システム
EP3400688B1 (en) Massively parallel computer, accelerated computing clusters, and two dimensional router and interconnection network for field programmable gate arrays, and applications
TWI628594B (zh) 用戶等級分叉及會合處理器、方法、系統及指令
JP5789072B2 (ja) マルチコアアーキテクチャにおけるリソース管理
US10268609B2 (en) Resource management in a multicore architecture
US7676588B2 (en) Programmable network protocol handler architecture
US8566828B2 (en) Accelerator for multi-processing system and method
US6829697B1 (en) Multiple logical interfaces to a shared coprocessor resource
US7802255B2 (en) Thread execution scheduler for multi-processing system and method
US7873816B2 (en) Pre-loading context states by inactive hardware thread in advance of context switch
JP2021529488A (ja) ゲートウェイ上のホストプロキシ
JP5895840B2 (ja) マルチプロセッサシステム、実行制御方法、実行制御プログラム
KR20130009746A (ko) 스트림 기반 계산을 구현하기 위한 범용 다중 코어 시스템을 위한 방법 및 장치
WO2022217823A1 (zh) 量子控制系统、量子控制处理器及量子指令集的执行方法
US20170147345A1 (en) Multiple operation interface to shared coprocessor
CN112540796B (zh) 一种指令处理装置、处理器及其处理方法
CN112199173A (zh) 双核cpu实时操作系统数据处理方法
JP2021528929A (ja) データ通過ゲートウェイ
CN116414464B (zh) 调度任务的方法和装置、电子设备和计算机可读介质
Govindarajan et al. Design and performance evaluation of a multithreaded architecture
Contini et al. Enabling Reconfigurable HPC through MPI-based Inter-FPGA Communication
US8171259B2 (en) Multi-cluster dynamic reconfigurable circuit for context valid processing of data by clearing received data with added context change indicative signal
Ginosar The plural many-core architecture-high performance at low power
Chadwick Communication centric, multi-core, fine-grained processor architecture
Cataldo et al. Subutai: Speeding Up Legacy Parallel Applications Through Data Synchronization

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20140827

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20150430

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20150512

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20150706

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20150924

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20151019

R150 Certificate of patent or registration of utility model

Ref document number: 5842206

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees