IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社Preferred Networksの特許一覧 ▶ 国立大学法人神戸大学の特許一覧

<>
  • 特開-プロセッサ及びプロセッサの制御方法 図1
  • 特開-プロセッサ及びプロセッサの制御方法 図2
  • 特開-プロセッサ及びプロセッサの制御方法 図3
  • 特開-プロセッサ及びプロセッサの制御方法 図4
  • 特開-プロセッサ及びプロセッサの制御方法 図5
  • 特開-プロセッサ及びプロセッサの制御方法 図6
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2024077426
(43)【公開日】2024-06-07
(54)【発明の名称】プロセッサ及びプロセッサの制御方法
(51)【国際特許分類】
   G06F 9/30 20180101AFI20240531BHJP
   G06F 9/312 20180101ALI20240531BHJP
   G06F 9/34 20180101ALI20240531BHJP
【FI】
G06F9/30 330D
G06F9/312 L
G06F9/34 350A
【審査請求】未請求
【請求項の数】9
【出願形態】OL
(21)【出願番号】P 2022189518
(22)【出願日】2022-11-28
(71)【出願人】
【識別番号】515130201
【氏名又は名称】株式会社Preferred Networks
(71)【出願人】
【識別番号】504150450
【氏名又は名称】国立大学法人神戸大学
(74)【代理人】
【識別番号】100107766
【弁理士】
【氏名又は名称】伊東 忠重
(74)【代理人】
【識別番号】100070150
【弁理士】
【氏名又は名称】伊東 忠彦
(72)【発明者】
【氏名】田形 健二
(72)【発明者】
【氏名】宮下 晴信
(72)【発明者】
【氏名】牧野 淳一郎
【テーマコード(参考)】
5B033
【Fターム(参考)】
5B033AA10
5B033BC00
5B033DB00
(57)【要約】
【課題】レジスタとアクセスレイテンシが一定でないメモリとの間でデータが移動される場合に、データの移動とデータが移動されるレジスタを使用する演算とをコアを使用する同期させる。
【解決手段】プロセッサは、演算命令を実行する演算器と、前記演算器で使用するデータを保持するレジスタと、データ移動命令に基づいて、第1メモリと前記レジスタとの間でデータを移動し、データの移動の完了情報を出力するデータ移動制御回路と、前記データ移動命令と前記データ移動命令に対応する演算命令とを含む命令列を受信し、前記データ移動命令を前記データ移動制御回路に出力し、前記完了情報の出力後に演算命令を前記演算器に発行する命令分配回路と、を有する。
【選択図】図1
【特許請求の範囲】
【請求項1】
演算命令を実行する演算器と、
前記演算器で使用するデータを保持するレジスタと、
データ移動命令に基づいて、第1メモリと前記レジスタとの間でデータを移動し、データの移動の完了情報を出力するデータ移動制御回路と、
前記データ移動命令と前記データ移動命令に対応する演算命令とを含む命令列を受信し、前記データ移動命令を前記データ移動制御回路に出力し、前記完了情報の出力後に前記演算命令を前記演算器に発行する命令分配回路と、
を有するプロセッサ。
【請求項2】
前記命令分配回路が受信する命令列は、互いに対応する前記データ移動命令とウェイト命令と前記演算命令とを含み、
前記命令分配回路は、前記ウェイト命令に続く1以上の前記演算命令の前記演算器への発行を、対応する前記完了情報が出力されるまで抑止する、
請求項1に記載のプロセッサ。
【請求項3】
前記命令分配回路は、前記データ移動命令と前記ウェイト命令との間にある演算命令を抑止することなく前記演算器に発行する、
請求項2に記載のプロセッサ。
【請求項4】
前記データ移動命令及び前記ウェイト命令は、前記データ移動命令及び前記ウェイト命令を対応付ける識別情報を含む、
請求項2に記載のプロセッサ。
【請求項5】
アクセスレイテンシが一定の第2メモリを有し、
前記第1メモリはアクセスレイテンシが一定ではなく、
前記データ移動制御回路は、前記データ移動命令に基づいて、前記第1メモリ又は前記第2メモリに対するデータの移動を制御し、
前記データ移動命令は、前記第1メモリと前記レジスタとの間でデータを移動する命令、前記第2メモリと前記レジスタとの間でデータを移動する命令、又は、前記第1メモリと前記第2メモリとの間でデータを移動する命令のいずれかである、
請求項1ないし請求項4のいずれか1項に記載のプロセッサ。
【請求項6】
ネットワークとの通信を制御するネットワークインタフェースを有し、
前記第1メモリはアクセスレイテンシが一定ではなく、
前記第1メモリは、前記ネットワークに配置される
請求項1ないし請求項4のいずれか1項に記載のプロセッサ。
【請求項7】
前記データ移動命令は、データの移動量を示す移動量情報を含む
請求項1ないし請求項4のいずれか1項に記載のプロセッサ。
【請求項8】
前記完了情報の受信に基づいて、前記完了情報に対応する演算命令の発行を許可する許可情報を前記命令分配回路に出力するデータ移動同期回路を有し、
前記命令分配回路は、前記許可情報の受信に基づいて前記許可情報に対応する演算命令を前記演算器に発行する、
請求項1ないし請求項4のいずれか1項に記載のプロセッサ。
【請求項9】
演算命令を実行する演算器と、前記演算器で使用するデータを保持するレジスタとを有するプロセッサの制御方法であって、
前記プロセッサが有するデータ移動制御回路が、データ移動命令に基づいて、第1メモリと前記レジスタとの間でデータを移動し、データの移動の完了情報を出力し、
前記プロセッサが有する命令分配回路が、前記データ移動命令と前記データ移動命令に対応する演算命令とを含む命令列を受信し、前記データ移動命令を前記データ移動制御回路に出力し、前記完了情報の出力後に演算命令を前記演算器に発行する
プロセッサの制御方法。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、プロセッサ及びプロセッサの制御方法に関する。
【背景技術】
【0002】
例えば、プロセッサは、ロード命令等のデータ移動命令に基づいてメモリから読み出したデータをレジスタに格納する。プロセッサは、レジスタに格納したデータを使用して演算命令に基づく演算を実行し、演算結果をレジスタに格納する。演算結果を保持しておく場合、又は、演算結果を他のプロセッサ又は他のプロセッサのコアで使用する場合、演算結果は、データ移動命令によりレジスタからメモリ等に待避される。
【0003】
アクセスレイテンシが一定のメモリに保持されたデータをレジスタに読み出して演算を実行する場合、データ移動命令の発行から演算命令の発行までに必要なサイクル数は一定である。このため、命令をコンパイルするコンパイラは、データ移動命令と演算命令との間で同期が取れる命令列を生成可能である。
【0004】
一方、アクセスレイテンシが一定でないメモリに保持されたデータをレジスタに読み出して演算を実行する場合、データ移動命令の発行から演算命令の発行までに必要なサイクル数は、データ移動命令の発行毎に異なるおそれがある。この場合、コンパイラは、データ移動命令と演算命令との間で同期が取れる命令列を生成できない。
【0005】
例えば、データを移動するDMA(Direct Memory Access)機能を起動する命令と、データの移動の完了を検出する命令とを、演算命令とともに命令列に記述することで、命令を実行するコアは、データの移動と演算の実行との同期を取ることができる。しかしながら、コアが実行する命令により同期を取る場合、演算の処理性能が低下する。
【発明の概要】
【発明が解決しようとする課題】
【0006】
本開示では、アクセスレイテンシが一定でないメモリに対するデータ移動命令と、データが移動されるレジスタを使用する演算命令とをコアを使用することなく同期させる。
【課題を解決するための手段】
【0007】
本発明の実施形態のプロセッサは、演算命令を実行する演算器と、前記演算器で使用するデータを保持するレジスタと、データ移動命令に基づいて、第1メモリと前記レジスタとの間でデータを移動し、データの移動の完了情報を出力するデータ移動制御回路と、前記データ移動命令と前記データ移動命令に対応する演算命令とを含む命令列を受信し、前記データ移動命令を前記データ移動制御回路に出力し、前記完了情報の出力後に前記演算命令を前記演算器に発行する命令分配回路と、を有する。
【図面の簡単な説明】
【0008】
図1】本発明の一実施形態におけるプロセッサの構成の一例を示すブロック図である。
図2図1のプロセッサ及び外部メモリが搭載されるボードの一例を示すブロック図である。
図3図1のプロセッサが実行する命令列の例を示す図である。
図4図1のプロセッサが実行する命令列の別の例を示す図である。
図5】他のプロセッサによるデータ移動命令と演算命令との同期制御の例を示す図である。
図6図1に示したプロセッサが搭載される計算機のハードウェア構成の一例を示すブロック図である。
【発明を実施するための形態】
【0009】
以下、本発明の実施形態について、図面を参照しながら詳細に説明する。特に限定されないが、以下で説明するプロセッサは、サーバ等のコンピュータに搭載され、プログラム(命令)を実行することで、ディープニューラルネットワークの訓練又は推論において畳み込み演算等を実行する。なお、以下で説明するプロセッサは、科学技術計算などに使用されてもよい。
【0010】
図1は、本発明の一実施形態におけるプロセッサの構成の一例を示すブロック図である。図1に示すプロセッサ100は、図示しないサーバ等のボードに外部メモリ200とともに搭載されてもよい。外部メモリ200は、アクセスレイテンシが一定でない第1メモリの一例である。ボードには、複数のプロセッサ100が搭載されてもよい。この場合、外部メモリ200は、複数のプロセッサ100毎に設けられてもよく、複数のプロセッサ100に共通に設けられてもよい。プロセッサ100は、ボードを介してホストシステム300に接続される。
【0011】
プロセッサ100は、例えば、SIMD(Single Instruction Multiple Data)型プロセッサ又はSIMT(Single Instruction Multiple Threads)型プロセッサでもよい。プロセッサ100は、外部インタフェース回路101、命令供給回路102、命令分配回路103、NoC(Network on Chip)104、データ移動同期回路105、ネットワークインタフェース106、共有メモリ107、メモリコントローラ108及び複数のコア110を有する。各コア110は、演算器111、レジスタファイル112、ローカルメモリ113及びNoCインタフェース114を有してもよい。
【0012】
外部インタフェース回路101は、例えば、PCIe(Peripheral Component Interconnect express)バス等を介してホストシステム300に接続され、ホストシステム300との間での通信を制御してもよい。外部インタフェース回路101は、ホストシステム300から供給される命令列ISを命令供給回路102に出力してもよい。
【0013】
命令供給回路102は、外部インタフェース回路101を介してホストシステム300のメインメモリ310に保持されている命令列ISを読み込んでもよく、読み込んだ命令列ISを命令分配回路103に供給してもよい。例えば、命令列ISは、データ移動命令mvと、加算命令又は乗算命令等の演算命令exと、後述するウェイト命令waitとを含む。
【0014】
命令分配回路103は、命令供給回路102から受ける命令列ISに含まれる命令からデータ移動命令mv及びウェイト命令waitと、演算命令exとを分割してもよい。命令分配回路103は、識別情報であるタグtag#を含むデータ移動命令mv及びウェイト命令waitをNoC104に供給してもよい。命令分配回路103は、命令供給回路102から受信した演算命令exの演算器111への発行を、データ移動同期回路105から許可を受けるまで抑止してもよい。
【0015】
後述するように、データ移動命令mvと演算命令exとは、タグtag#により相互に対応付けられてもよい。タグtag#を使用することで、図3及び図4で説明するように、複数のデータ移動命令mvが混在する場合にも、データ移動命令mvに基づくデータの移動と、データの移動に対応して実行される演算とをそれぞれ同期させることができる。
【0016】
例えば、命令分配回路103は、データ移動命令mvをNoC104に供給した後、データ移動命令mvに対応するタグtag#をデータ移動同期回路105から受けるまで、供給したデータ移動命令mvに対応する演算命令exの演算器111への供給を抑止する。
【0017】
NoC104は、命令分配回路103から受けるデータ移動命令mvに基づいて、共有メモリ107、外部メモリ200又はネットワークと、ローカルメモリ113又はレジスタファイル112との間でデータ転送を行ってもよい。このように、データ移動命令mvは、コア110を介さずに実行されてもよい。NoC104は、データ移動制御回路の一例である。
【0018】
NoC104は、データ移動命令mv毎に、データ移動命令mvに基づくデータの移動が完了した場合、データ移動命令mvに対応するタグtag#をデータ移動同期回路105に出力してもよい。NoC104からデータ移動同期回路105に出力されるタグtag#は、データ移動の完了を示す完了情報の一例である。なお、NoC104は、データの移動の完了に基づいて、タグtag#を含むデータ移動完了通知をデータ移動同期回路105に出力してもよい。
【0019】
データ移動同期回路105は、NoC104からタグtag#を受けるまで、データ移動命令mvに対応するタグtag#の命令分配回路103への出力を抑止してもよい。データ移動同期回路105は、NoC104からタグtag#を受けた場合、受けたタグtag#を命令分配回路103に出力してもよい。
【0020】
データ移動同期回路105から命令分配回路103に出力されるタグtag#は、タグtag#に対応する演算命令exの演算器111への発行を許可する許可情報の一例である。なお、データ移動同期回路105は、NoC104から受信するタグtag#に基づいて、タグtag#を含む演算の開始指示を命令分配回路103に出力してもよい。
【0021】
命令分配回路103は、データ移動同期回路105からのタグtag#の受信に基づいて、タグtag#に対応する演算命令exを複数のコア110に同時に発行してもよい。例えば、命令分配回路103は、タグtag#が付加されたウェイト命令waitに続く演算命令exをタグtag#に対応する演算命令exと判断する。複数のコア110の演算器111は、受信した演算命令exを並列に実行してもよい。これにより、例えば、複数の演算器111を使用してSIMD演算が実行されてもよい。このように、プロセッサ100は、コア110を使用することなく、データ移動命令mvによるデータの移動と演算命令exの実行とを同期させることができる。また、命令分配回路103は、データ移動同期回路105からのタグtag#の受信に基づいて、タグtag#に対応する演算命令exを一つのコア110に同時に発行するモードを備えていてもよい。なお、データ移動同期回路105の機能を命令分配回路103に持たせ、命令分配回路103をプロセッサ100から取り除き、NoC104から命令分配回路103にタグtag#を直接出力してもよい。
【0022】
ネットワークインタフェース106は、プロセッサ100をネットワークに接続してもよい。データ移動命令mvに含まれる移動元のアドレス又は移動先のアドレスが、ネットワークに配置される図示しないメモリの記憶領域を示す場合、NoC104は、ネットワークインタフェース106を介してネットワークにメモリアクセス要求を出力してもよい。ネットワークインタフェース106によるネットワークに接続されるメモリのアクセスは、固定のサイクル数でなく、メモリアクセス時間は一定でない。このため、NoC104は、ネットワークインタフェース106に発行したメモリアクセス要求の応答がいつ戻ってくるかを予測できない。
【0023】
共有メモリ107は、例えば、SRAM(Static Random Access Memory)であり、演算器111で使用するデータ及び演算器111の演算結果等を保持可能である。なお、共有メモリ107のアクセスレイテンシ(リードレイテンシ及びライトレイテンシ)は、一定(固定のサイクル数)である。NoC104は、共有メモリ107にアクセスする場合、共有メモリ107にメモリアクセス要求を出力してもよい。共有メモリ107は、第2メモリの一例である。
【0024】
共有メモリ107のリードレイテンシは、NoC104が読み出しアクセスコマンドを共有メモリ107に出力してから、読み出しアクセスコマンドに対応するデータを共有メモリ107から受信するまでのサイクル数である。共有メモリ107のライトレイテンシは、NoC104が書き込みアクセスコマンドを共有メモリ107に出力してから、書き込みアクセスコマンドに対応するデータが共有メモリ107に書き込まれるまでのサイクル数である。
【0025】
なお、共有メモリ107のアクセスレイテンシは一定であるが、例えば、NoC104がバックグラウンドで外部メモリ200のアクセス処理を行っている場合、共有メモリ107のメモリアクセスが待たされる場合がある。このため、プロセッサ100は、共有メモリ107にアクセスするデータ移動命令mvを実行する場合にも、タグtag#を使用したデータ移動命令mvと演算命令exとの同期制御を行ってもよい。
【0026】
メモリコントローラ108は、外部メモリ200のアクセスを制御してもよい。特に限定されないが、例えば、外部メモリ200は、DRAM(Dynamic Random Access Memory)である。なお、外部メモリ200は、フラッシュメモリ等の電気的に書き換え可能な不揮発性メモリでもよく、データを磁気又は抵抗値により記憶する記憶装置でもよい。
【0027】
例えば、メモリコントローラ108は、NoC104から受信するメモリアクセス要求を保持するキューを有し、キューに保持したメモリアクセス要求を外部メモリ200に順次発行する。このため、NoC104がメモリアクセス要求を出力してからメモリアクセス要求に対応するデータをメモリコントローラ108から受信するまでの時間(メモリアクセス時間)は一定ではない。
【0028】
以下では、外部メモリ200のリードレイテンシは、NoC104が読み出しアクセス要求をメモリコントローラ108に出力してから、読み出しアクセス要求に対応するデータをメモリコントローラ108から受信するまでのサイクル数であるとする。外部メモリ200のライトレイテンシは、NoC104が書き込みアクセス要求をメモリコントローラ108に出力してから、書き込みアクセス要求に対応するデータが外部メモリ200に書き込まれるまでのサイクル数であるとする。
【0029】
複数のコア110の各演算器111は、命令分配回路103から供給される演算命令exに従い、レジスタファイル112から演算対象のデータを読み出してもよい。各演算器111は、読み出したデータを使用して演算を行い、演算結果データをレジスタファイル112に格納してもよい。特に限定されないが、演算器111は、例えば、ALU(Arithmetic Logic Unit)及びFPU(Floating Point Unit)の一方又は両方を有する。また、演算器111は、加算器及び乗算器等の複数種の演算回路を含んでもよい。
【0030】
レジスタファイル112は、演算器111で使用する複数のレジスタを有してもよい。複数のレジスタの各々には、レジスタ番号又はアドレスが割り当てられ、各レジスタは、レジスタ番号又はアドレスにより識別されてもよい。
【0031】
ローカルメモリ113は、例えば、SRAMであり、演算器111で使用するデータ及び演算器111の演算結果等を、レジスタファイル112を介して保持可能である。ローカルメモリ113のアクセスレイテンシは一定(固定のサイクル数)であり、メモリアクセス時間は同じである。
【0032】
NoCインタフェース114は、レジスタファイル112又はローカルメモリ113と、NoC104との間でのデータの移動を制御してもよい。
【0033】
図2は、図1のプロセッサ100及び外部メモリ200が搭載されるボードの一例を示すブロック図である。図2に示すボード400には、図1のプロセッサ100と外部メモリ200とが搭載されてもよい。なお、複数のボード400がサーバ等のコンピュータに搭載され、複数のボード400に搭載される複数のプロセッサ100の複数のコア110が、1つのデータ転送命令を共通に実行し、1つの演算命令を共通に実行してもよい。
【0034】
プロセッサ100は、制御部120と、複数の第2ブロック140と、複数の第2ブロック140に共通に接続された第3メモリ151とを有してもよい。制御部120は、複数の第2ブロック140に共通に設けられ、プロセッサ100全体を制御してもよい。
【0035】
制御部120は、図1の外部インタフェース回路101、命令供給回路102、命令分配回路103、NoC104、データ移動同期回路105、ネットワークインタフェース106及びメモリコントローラ108を有してもよい。例えば、ホストシステム300は、命令列及び命令の実行に使用するデータを外部メモリ200に格納してもよく、各コア110による演算結果を外部メモリ200から取得してもよい。
【0036】
第3メモリ151は、バスBUSを介して外部メモリ200に接続されてもよい。各第2ブロック140は、複数の第1ブロック130と、複数の第1ブロック130に共通に接続された第2メモリ141とを有してもよい。各第1ブロック130は、複数のコア110と、複数のコア110に共通に接続された第1メモリ131とを有してもよい。このように、プロセッサ100は、外部メモリ200とコア110との間に、階層化された第3メモリ151、第2メモリ141及び第1メモリ131を有してもよい。なお、第3メモリ151、第2メモリ141及び第1メモリ131は、図1の共有メモリ107として使用されてもよい。
【0037】
図3及び図4は、図1のプロセッサ100が実行する命令列ISの例を示す図である。図3及び図4に示す命令列ISは、コンパイラ等で予め生成された後、ホストシステム300のメインメモリ310に格納されてもよい。そして、命令供給回路102がメインメモリ310から命令列ISを読み込んでもよく、読み込んだ命令列ISを命令分配回路103に供給することで、命令列ISに含まれる命令が順次処理されてもよい。命令列ISに含まれる命令を順次処理することでプロセッサ100の制御方法が実現されてもよい。
【0038】
図3及び図4に示す例では、単一のデータを移動するデータ移動命令mvと、記憶領域のアドレスが連続するデータを移動するデータ移動命令mvとが示される。特に限定されないが、例えば、単一のデータは4バイト又は8バイト等であり、レジスタファイル112の各レジスタのサイズに対応する。
【0039】
命令列ISに含まれる命令において、符号mvは、データ移動命令mvを示し、符号waitは、データ移動命令mvの完了を待つウェイト命令を示す。符号addは、加算命令を示し、符号multは、乗算命令を示す。符号<-は、データ又は演算結果が、右の要素から左の要素に移動することを示す。なお、図3及び図4では、演算命令exとして加算命令add及び乗算命令multが実行される例が示されるが、他の演算命令exとして例えば減算命令や除算命令が実行されてもよい。
【0040】
符号adrは、アドレスを示し、符号rは、レジスタファイル112のレジスタを示し、符号regは、レジスタファイル112を示す。例えば、各レジスタrのサイズは、4バイト又は8バイト等である。符号memは、外部メモリ200を示し、符号smは、共有メモリ107を示す。符号lmは、ローカルメモリ113を示す。符号lenは、データの移動量(例えば、バイト数)を示す移動量情報である。
【0041】
命令列IS1では、外部メモリ200からレジスタr0に移動されるデータを使用して加算命令addが実行される。命令列IS1では、まず、タグtag#=01が割り当てられたデータ移動命令mv及びウェイト命令waitと、加算命令add及び乗算命令multとが命令供給回路102から命令分配回路103に順次供給されてもよい。
【0042】
すなわち、データ移動命令mvと、データ移動命令mvにより移動されたデータを使用する演算命令exとは、ウェイト命令waitを挟んで記述される。あるいは、後述する命令列IS5に示すように、データ移動命令mvと、データ移動命令mvによりデータが待避されたレジスタを使用する演算命令exとは、ウェイト命令waitを挟んで記述される。データ移動命令mvと、データ移動命令mvに対応する演算命令exとがウェイト命令waitを挟んで記述される点は、図3及び図4に示す他の命令列でも同様である。
【0043】
命令分配回路103は、データ移動命令mv及びウェイト命令waitをNoC104に供給してもよい。命令分配回路103は、ウェイト命令waitに続いて受けた加算命令add及び乗算命令mult命令を、タグtag#=01に対応する演算命令として扱ってもよい。この時点で、命令分配回路103は、データ移動同期回路105からタグtag#=01を受けていないため、加算命令add及び乗算命令mult命令の演算器111への発行を抑止する。
【0044】
NoC104は、データ移動命令mvを実行し、外部メモリ200においてアドレスadr0が割り当てられた記憶領域からレジスタr0にデータを移動するメモリアクセスを開始してもよい。また、NoC104は、ウェイト命令wait(tag#=01)を受けたため、タグtag#=01が割り当てられたデータ移動命令mvの実行が完了するまで、タグtag#=01をデータ移動同期回路105に出力しなくてもよい。
【0045】
この後、NoC104は、外部メモリ200から読み出したデータを、NoCインタフェース114を介してレジスタr0に格納することで、データの移動を完了してもよい。NoC104は、データの移動の完了に基づいて、タグtag#=01をデータ移動同期回路105に出力してもよい。データ移動同期回路105は、受信したタグtag#=01を命令分配回路103に出力してもよい。
【0046】
命令分配回路103は、受信したタグtag#=01に対応するウェイト命令wait(tag#01)を検索してもよく、検索したウェイト命令wait(tag#01)に続く加算命令add及び乗算命令mult命令を演算器111に順次発行してもよい。
【0047】
例えば、命令分配回路103は、ウェイト命令waitに続く1つの演算命令ex又はウェイト命令waitに続く複数の連続する演算命令exを演算器111に順次発行する。換言すれば、命令分配回路103は、ウェイト命令waitと次のデータ移動命令mvとの間にある演算命令ex、又は、ウェイト命令waitと次のウェイト命令waitとの間にある演算命令exを演算器111に発行してもよい。そして、外部メモリ200からレジスタr0に移動されたデータを使用して加算命令addが実行され、この後、乗算命令multが実行されてもよい。
【0048】
命令列IS1の加算命令addでは、レジスタr0に保持されたデータとレジスタr1に保持された命令とが加算され、加算結果がレジスタr2に格納されてもよい。命令列IS1の乗算命令multでは、レジスタr3に保持されたデータとレジスタr4に保持されたデータとが乗算され、乗算結果がレジスタr5に格納されてもよい。
【0049】
命令列IS1では、ウェイト命令waitを使用してデータ移動同期回路105によりデータの移動の完了を待った後、レジスタr0に移動されたデータを使用して加算命令addを実行することができる。このため、リードレイテンシが一定でない外部メモリ200から読み出すデータを使用して加算命令addを実行する場合にも、プロセッサ100の誤動作を抑止することができる。
【0050】
命令列IS2では、外部メモリ200からレジスタファイル112に移動される複数のデータを使用して加算命令addが実行されてもよい。命令列IS1と同じ処理については、詳細な説明は省略する。なお、命令列IS2、IS4、IS6、IS8、IS10、IS12では、1024バイトのデータを移動する例が示されるが、データの移動量は、1024バイトに限定されない。
【0051】
命令列IS2では、まず、外部メモリ200のアドレスadr0が割り当てられた記憶領域を先頭とする1024バイトのデータを、レジスタファイル112のアドレスadr0が割り当てられたレジスタから順に移動するデータ移動命令mv(tag#=01)が、命令供給回路102から命令分配回路103に供給されてもよい。この後、ウェイト命令wait(tag#=01)と、加算命令add及び乗算命令multとが命令供給回路102から命令分配回路103に順次供給されてもよい。
【0052】
命令分配回路103は、命令列IS1と同様に、データ移動命令mv及びウェイト命令waitをNoC104に供給し、データ移動同期回路105からタグtag#=01を受けるまで加算命令add及び乗算命令mult命令を演算器111に発行しなくてもよい。
【0053】
NoC104は、データ移動命令mvを実行し、外部メモリ200のアドレスadr0から1024バイトのデータを読み出すメモリアクセスを開始してもよい。NoC104は、タグtag#=01が割り当てられたデータ移動命令mvによるデータのレジスタへの移動の完了に基づいてタグtag#=01をデータ移動同期回路105に出力してもよい。
【0054】
データ移動同期回路105は、タグtag#=01を受信した場合、受信したタグtag#=01を命令分配回路103に出力してもよい。命令分配回路103は、受信したタグtag#=01に対応するウェイト命令wait(tag#01)を検索し、検索したウェイト命令wait(tag#01)に続く加算命令add及び乗算命令mult命令を演算器111に順次発行してもよい。そして、外部メモリ200からレジスタr0に移動された1024バイトのデータを使用して加算命令addが実行されてもよく、この後、乗算命令multが実行されてもよい。
【0055】
命令列IS2の加算命令addでは、アドレスadr0が割り当てられたレジスタを先頭とする1024バイトのデータと、アドレスadr1が割り当てられたレジスタを先頭とする1024バイトのデータとが加算される。加算結果は、アドレスadr2が割り当てられたレジスタを先頭とする1024バイトの領域に格納されてもよい。
【0056】
命令列IS2の乗算命令multでは、アドレスadr3が割り当てられたレジスタを先頭とする1024バイトのデータと、アドレスadr4が割り当てられたレジスタを先頭とする1024バイトのデータとが乗算される。乗算結果は、アドレスadr5が割り当てられたレジスタを先頭とする1024バイトの領域に格納されてもよい。
【0057】
命令列IS2では、ウェイト命令waitを使用してデータ移動同期回路105により1024バイトのデータの移動の完了を待った後、レジスタに格納されたデータを使用して加算命令addを実行することができる。このため、リードレイテンシが一定でない外部メモリ200から読み出す複数のデータを使用して加算命令addを実行する場合にも、プロセッサ100を誤動作せずに動作させることができる。
【0058】
命令列IS3では、共有メモリ107からレジスタr0に移動されるデータを使用して加算命令addが実行される。命令列IS1と同じ処理については、詳細な説明は省略する。命令列IS3は、データ移動命令mvにより共有メモリ107からレジスタr0にデータが移動されることを除き、命令列IS1と同じである。
【0059】
共有メモリ107のアクセスレイテンシは、一定であるが、外部メモリ200のアクセスと競合する場合、共有メモリ107のアクセスが待たされる場合がある。このため、アクセスレイテンシが一定の共有メモリ107にリードアクセスする場合にも、データ移動命令mvと、データ移動命令mvで移動されるデータを使用する演算命令(この例では、加算命令add)との間に、ウェイト命令waitが挿入されてもよい。
【0060】
これにより、データ移動命令mvにより共有メモリ107からレジスタr0へのデータの移動が完了された後に、レジスタr0に格納されたデータを使用して加算命令addを実行する場合にも、プロセッサ100を誤動作させずに動作させることができる。
【0061】
命令列IS4では、共有メモリ107からレジスタファイル112に移動される1024バイトのデータを使用して加算命令が実行される。命令列IS2と同じ処理については、詳細な説明は省略する。命令列IS4は、データ移動命令mvにより共有メモリ107からレジスタにデータが移動されることを除き、命令列IS2と同じである。命令列IS4では、外部メモリ200のアクセスにより共有メモリ107のリードアクセスが待たされる場合、プロセッサ100を誤動作させずに動作させることができる。
【0062】
命令列IS5では、レジスタr2から共有メモリ107にデータが退避された後に、レジスタr2に加算結果を格納する加算命令addが実行される。命令列IS1と同じ処理については、詳細な説明は省略する。命令列IS5は、データ移動命令mvによりレジスタr2から共有メモリ107にデータが移動されることを除き、命令列IS1と同じである。
【0063】
命令列IS5のデータ移動命令mvにおいても、外部メモリ200のアクセスと競合する場合、共有メモリ107のアクセスが待たされる場合がある。このため、メモリアクセス時間が一定の共有メモリ107にライトアクセスする場合にも、データ移動命令mvと、データを待避するレジスタに演算結果を格納する演算命令(この例では、加算命令add)との間に、ウェイト命令waitが挿入されてもよい。
【0064】
これにより、データ移動命令mvによりレジスタr2から共有メモリ107へのデータの待避が完了された後、データを待避したレジスタr2に加算結果を格納する加算命令addを実行する場合、待避するデータの破壊を抑止することができる。この結果、プロセッサ100を誤動作させずに動作させることができる。
【0065】
命令列IS6では、レジスタから共有メモリ107に1024バイトのデータが退避された後に、データを待避したレジスタに加算結果を格納する加算命令addが実行される。命令列IS2、IS5と同じ処理については、詳細な説明は省略する。命令列IS6は、データ移動命令mvによりレジスタから共有メモリ107に複数のデータが移動されることを除き、命令列IS2と同じである。
【0066】
命令列IS6では、データ移動命令mvによりレジスタから共有メモリ107への複数のデータの待避が完了された後、データを待避したレジスタに加算結果を格納する加算命令addを実行する場合、待避するデータの破壊を抑止することができる。この結果、プロセッサ100を誤動作せずに動作させることができる。
【0067】
なお、命令列IS5及び命令列IS6は、レジスタから共有メモリ107にデータが退避されるデータ移動命令mvの代わりに、レジスタから外部メモリ200にデータを待避するデータ移動命令を含んでもよい。この場合にも、データ移動命令mvと加算命令addとを同期させることができ、待避するデータの破壊を抑止することができる。
【0068】
図4の命令列IS7では、図3の命令列IS5のデータ移動命令mv(tag#01)とウェイト命令wait(tag#01)との間に、乗算命令multとデータ移動命令mv(tag#02)とが挿入される。また、6行目の乗算命令multの後に、ウェイト命令wait(tag#02)と加算命令addとが追加される。命令列IS5と同じ処理については、詳細な説明は省略する。
【0069】
1行目のデータ移動命令mv(tag#01)によりデータが移動されるレジスタr2と、2行目の乗算命令multで使用するレジスタr3、r4、r5との間にデータの依存性はない。また、1行目のデータ移動命令mv(tag#01)によりデータが移動されるレジスタr2と、3行目のデータ移動命令mv(tag#02)によりデータが移動されるレジスタr3との間にデータの依存性はない。
【0070】
2行目の乗算命令multでは、レジスタr3に保持されたデータとレジスタr4に保持されたデータとが乗算され、乗算結果がレジスタr5に格納される。3行目のデータ移動命令mv(tag#02)では、レジスタr3に保持されたデータが、共有メモリ107のアドレスadr1が割り当てられた記憶領域に移動される。
【0071】
なお、3行目のデータ移動命令mv(tag#02)、7行目のウェイト命令wait(tag#02)及び8行目の加算命令addによるプロセッサ100の動作は、図3の命令列IS5の動作と同様に実行されてもよい。また、データ移動命令mv(tag#02)とウェイト命令wait(tag#02)との間に、データの依存性のない他のウェイト命令wait及び演算命令exを挿入することができる。
【0072】
このように、着目するデータ移動命令mvにより移動されるデータとの間でデータの依存性のない演算命令ex、他のデータ移動命令mv及び他のウェイト命令waitの1つ又は複数を、着目するデータ移動命令mvとウェイト命令waitとの間に挿入することができる。これにより、待避するデータの破壊を抑止しながら、データの移動効率及び演算命令exの実行効率を向上することができ、プロセッサ100の処理性能を向上することができる。
【0073】
命令列IS8では、図3の命令列IS6のデータ移動命令mv(tag#01)とウェイト命令wait(tag#01)との間に、乗算命令multと、レジスタから1024バイトのデータを共有メモリ107に移動するデータ移動命令mv(tag#=02)が挿入される。また、6行目の乗算命令multの後に、ウェイト命令wait(tag#02)と、加算命令addとが追加される。命令列IS6、IS7と同じ処理については、詳細な説明は省略する。
【0074】
1行目のデータ移動命令mv(tag#01)によりデータが移動されるレジスタと、2行目の乗算命令multで使用するレジスタとの間にデータの依存性はない。また、1行目のデータ移動命令mv(tag#01)によりデータが移動されるレジスタと、3行目のデータ移動命令mv(tag#02)によりデータが移動されるレジスタとの間にデータの依存性はない。
【0075】
2行目の乗算命令multでは、アドレスadr3が割り当てられたレジスタを先頭とする1024バイトのデータと、アドレスadr4が割り当てられたレジスタを先頭とする1024バイトのデータとが乗算される。乗算結果は、アドレスadr5が割り当てられたレジスタを先頭とする1024バイトの領域に格納される。3行目のデータ移動命令mv(tag#02)では、アドレスadr3が割り当てられたレジスタを先頭とする1024バイトのデータが、共有メモリ107のアドレスadr2を先頭とする記憶領域に移動される。
【0076】
なお、3行目のデータ移動命令mv(tag#02)、7行目のウェイト命令wait(tag#02)及び8行目の加算命令addによるプロセッサ100の動作は、図3の命令列IS6の動作と同様に実行されてもよい。また、データ移動命令mv(tag#02)とウェイト命令wait(tag#02)との間に、データの依存性のない他のウェイト命令wait及び演算命令exを挿入することができる。
【0077】
このように、命令列IS8においても、着目するデータ移動命令mvにより移動されるデータとの間でデータの依存性のない演算命令ex、他のデータ移動命令mv及び他のウェイト命令waitの1つ又は複数を、着目するデータ移動命令mvとウェイト命令waitとの間に挿入することができる。これにより、待避するデータの破壊を抑止しながら、データの移動効率及び演算命令exの実行効率を向上することができ、プロセッサ100の処理性能を向上することができる。
【0078】
命令列IS9では、レジスタr2に保持されたデータが、共有メモリ107を経由して外部メモリ200のアドレスadr0が割り当てられた記憶領域に移動される。例えば、命令列IS9では、レジスタr2から共有メモリ107にデータを移動するデータ移動命令mv(tag#01)の完了に同期して、移動したデータを共有メモリ107から外部メモリ200に移動するデータ移動命令mvが実行される。
【0079】
データ移動命令mv(tag#01)及びウェイト命令wait(tag#01)は、図3の命令列IS5のデータ移動命令mv(tag#01)及びウェイト命令wait(tag#01)と同じである。
【0080】
なお、レジスタr2に保持されたデータの外部メモリ200への移動は、共有メモリ107ではなくローカルメモリ113を経由して行われてもよい。また、1番目のデータ移動命令mvにより、外部メモリ200から共有メモリ107にデータが移動され、3番目のデータ移動命令mvにより、共有メモリ107からレジスタr2にデータが移動されてもよい。1番目のデータ移動命令mvにより、外部メモリ200からローカルメモリ113にデータが移動され、3番目のデータ移動命令mvにより、ローカルメモリ113からレジスタr2にデータが移動されてもよい。
【0081】
このように、2つのデータ移動命令mvの間でデータの依存性があり、データの移動元又は移動先にアクセスレイテンシが一定でない外部メモリ200等を含む場合、ウェイト命令waitを挿入することで、2つのデータ移動命令mvによるデータの移動を同期させることができる。
【0082】
さらに、1行目のデータ移動命令mv(tag#01)でレジスタr2からローカルメモリ113へのデータの移動が行われ、3行目のデータ移動命令mvでローカルメモリ113から共有メモリ107へのデータの移動が行われてもよい。また、1行目のデータ移動命令mv(tag#01)で共有メモリ107からローカルメモリ113へのデータの移動が行われ、3行目のデータ移動命令mvでローカルメモリ113からレジスタr2へのデータの移動が行われてもよい。これにより、バックグラウンドで外部メモリ200に対してデータが移動されている場合にも、プロセッサ100を誤動作させることなくデータの移動を行うことができる。
【0083】
命令列IS10では、アドレスadr2が割り当てられたレジスタを先頭とする1024バイトのデータが、共有メモリ107を経由して、外部メモリ200のアドレスadr0を先頭とする記憶領域に移動される。例えば、命令列IS10では、アドレスadr2が割り当てられたレジスタを先頭とする1024バイトのデータを共有メモリ107に移動するデータ移動命令mv(tag#01)の完了に同期して、移動したデータを共有メモリ107から外部メモリ200に移動するデータ移動命令mvが実行される。
【0084】
データ移動命令mv(tag#01)及びウェイト命令wait(tag#01)は、図3の命令列IS6のデータ移動命令mv(tag#01)及びウェイト命令wait(tag#01)と同じである。
【0085】
なお、1番目のデータ移動命令mvにより、外部メモリ200から共有メモリ107にデータが移動され、3番目のデータ移動命令mvにより、共有メモリ107からレジスタr2にデータが移動されてもよい。また、命令列IS9での説明と同様に、データの移動は、レジスタ、ローカルメモリ113及び外部メモリ200の間で行われてもよく、レジスタ、ローカルメモリ113及び共有メモリ107の間で行われてもよい。
【0086】
命令列IS10においても、2つのデータ移動命令mvの間でデータの依存性があり、データの移動元又は移動先にアクセスレイテンシが一定でない外部メモリ200等を含む場合、ウェイト命令waitを挿入することで、2つのデータ移動命令mvによるデータの移動を同期させることができる。あるいは、2つのデータ移動命令mvの間でデータの依存性があり、外部メモリ200に対するバックグラウンドでのデータの移動の影響を受ける可能性がある場合にも、ウェイト命令waitを挿入することで、2つのデータ移動命令mvによるデータの移動を同期させることができる。
【0087】
命令列IS11は、図3の命令列IS3のデータ移動命令mv(tag#01)とウェイト命令wait(tag#01)との間に、加算命令addが挿入されることを除き、命令列IS3と同じである。例えば、データ移動命令mv(tag#01)による共有メモリ107からレジスタr0にデータの移動が開始されるまでの最小サイクル数が分かっている場合、最小サイクル数が経過する前に、データが格納される前のレジスタr0を使用して演算を実行することができる。
【0088】
これにより、レジスタr0にデータを移動するデータ移動命令mv(tag#01)を、データを移動する前にレジスタr0に保持されているデータを使用する加算命令addより前に実行することができる。なお、データが移動されるまでにかかる最小サイクル数は、プロセッサ100及びプロセッサ100を含むシステムのアーキテクチャにより決めることができる。
【0089】
命令列IS11では、命令分配回路103は、NoC104にデータ移動命令mv(tag#01)を供給した後、ウェイト命令wait(tag#01)より前に記述された加算命令addを演算器111に供給する。そして、演算器111は、データ移動命令mv(tag#01)により共有メモリ107からレジスタr0にデータが移動される前に、レジスタr0に保持されたデータを使用して加算を実行する。
【0090】
これにより、データの移動を加算命令addの実行のバックグラウンドで行うことができ、データの移動と演算の実行とを同期させながら、データの移動にかかるレイテンシを隠蔽することができる。この結果、プロセッサ100の処理性能を向上することができる。なお、データ移動命令mv(tag#01)は、外部メモリ200からレジスタr0にデータを移動させる命令でもよい。
【0091】
これに対して、他のプロセッサでは、例えば、レジスタr0にデータを移動するロード命令等のデータ移動命令は、レジスタr0に保持されたデータを使用する演算命令より後に実行する必要がある。これは、データ移動命令を演算命令より先に実行すると、演算命令で使用するレジスタにデータが上書きされ、プロセッサが誤動作するためである。このため、他のプロセッサの処理性能は、プロセッサ100の処理性能より低くなる。
【0092】
命令列IS12では、図3の命令列IS4のデータ移動命令mv(tag#01)とウェイト命令wait(tag#01)との間に、加算命令addが挿入されることを除き、命令列IS4と同じである。命令列IS11と同様に、データ移動命令mv(tag#01)による共有メモリ107からレジスタに1024バイトのデータの移動が開始されるまでの最小サイクル数が分かっている場合、最小サイクル数が経過する前に、データが格納される前のレジスタを使用して演算を実行することができる。
【0093】
命令列IS12においても命令IS11と同様に、命令分配回路103は、NoC104にデータ移動命令mv(tag#01)を供給した後、ウェイト命令wait(tag#01)より前に記述された加算命令addを演算器111に供給する。そして、演算器111は、データ移動命令mv(tag#01)により共有メモリ107からの最初のデータがレジスタに格納する前に、データの格納対象のレジスタに保持されたデータを使用して加算を実行する。
【0094】
これにより、複数のデータの移動を加算命令addの実行のバックグラウンドで行うことができ、データの移動と演算の実行とを同期させながら、複数のデータの移動にかかるレイテンシを隠蔽することができる。この結果、プロセッサ100の処理性能を向上することができる。なお、データ移動命令mv(tag#01)は、外部メモリ200からレジスタに複数のデータを移動させる命令でもよい。
【0095】
なお、図3及び図4に示す命令列ISでは、共有メモリ107又は外部メモリ200に対するデータ移動命令mvが供給されるが、ネットワークに対するデータ移動命令mvが供給されてもよい。すなわち、図3及び図4に示す命令列ISに含まれる"mem.adr0"、"sm.adr0"、"sm.adr1"の代わりに、それぞれ"nw.adr0"、"nw.adr0"、"nw.adr1"が記述されてもよい。符号nwは、ネットワークを示す。この場合にも、上述した各命令列IS1-IS12の効果と同様の効果を得ることができる。
【0096】
図5は、他のプロセッサによるデータ移動命令と演算命令との同期制御の例を示す図である。図5において、符号ldは、ロード命令を示し、符号stは、ストア命令を示す。
【0097】
図5に示す同期制御の例1では、プロセッサのコアは、例えば、外部メモリのアドレスadr0が割り当てられた記憶領域からレジスタr0にデータを読み出すロード命令ldを実行する。ロード命令ldは、データ移動命令として機能する。次に、コアは、例えば、コアに搭載される同期制御回路を使用して、ロード命令ldによるデータの移動の完了を待つ。そして、同期制御回路によるデータの移動の完了の検出に基づいて、レジスタr0に格納されたデータを使用して加算命令addを実行する。
【0098】
図5に示す同期制御の例2では、コアは、例えば、アドレスadr1が割り当てられたレジスタに保持されたデータを、アドレスadr0が割り当てられたDMA転送用のレジスタdmaregに格納するストア命令stを実行する。例えば、レジスタdmaregに格納されるデータは、DMA転送のソースアドレス、ディスティネーションアドレス及びデータ転送サイズを含む。
【0099】
プロセッサに搭載されるDMAコントローラは、レジスタdmaregに格納された情報にしたがってDMA転送(すなわちデータの移動)を実行し、例えば、外部メモリからレジスタr0にデータを転送する。このように、ストア命令stは、DMA転送を起動するデータ移動命令として機能する。
【0100】
DMAコントローラは、DMA転送の完了時に図示しないレジスタdmaendをセットする。コアは、例えば、レジスタdmaendをポーリングするロード命令ldを、データの移動の完了を検出する命令として繰り返し実行する。そして、コアは、レジスタdmaendのセットをポーリングすることで、DMA転送の完了を検出する。なお、DMAコントローラは、DMA転送の完了時に割り込みを発行し、コアは割り込みに基づいて、DMA転送の完了を検出してもよい。そして、コアは、DMA転送の完了の検出に基づいて、レジスタr0に格納されたデータを使用して加算命令addを実行する。
【0101】
このように、他のプロセッサでは、データ移動命令と演算命令との同期制御は、プロセッサのコアに搭載されるハードウェア又はコアが実行するソフトウェアにより行われる。そして、データ移動命令と演算命令とは、リードレイテンシが一定でない外部メモリからレジスタr0へのデータの転送タイミングに応じて、別々の命令シーケンスで実行され、ポーリング又は割り込み等の手法を使用して互いに同期される。
【0102】
また、この種の他のプロセッサは、アウトオブオーダによる命令のスケジューリング機能、レジスタリネーミング又はマルチスレッディング機能等を有する場合がある。これら機能により、データ移動命令を発行後、演算命令を実行するまでに発生する空きのサイクルを抑制し、処理性能を向上することができるが、コアの回路規模が増大する。
【0103】
以上、この実施形態では、プロセッサ100は、アクセスレイテンシが一定でない外部メモリ200等と、演算に使用するレジスタとの間でデータを移動する場合に、データ移動命令mvに基づくデータの移動と、データの移動に対応して実行される演算とを同期させることができる。
【0104】
この際、プロセッサ100は、データ移動命令mvの実行と演算命令exの実行とを、コア110を使用することなく同期させることができる。例えば、コア110は、割り込み処理等によりデータ移動の完了を待つ処理を行わなくてもよい。したがって、コア110に負荷をかけることなく、アクセスレイテンシが一定でない外部メモリ200等に対するデータ移動命令mvの実行と演算命令exの実行とを同期させることができ、プロセッサ100の演算の処理性能を向上することができる。また、移動するデータを保持するバッファをコア110に設けなくてよいため、コア110の回路規模の増大を抑制することができる。回路規模の削減効果は、プロセッサ100に搭載されるコア110の数が多いほど大きい。
【0105】
互いに同期させるデータ移動命令mvと演算命令exとの間にウェイト命令waitが挿入されるため、命令分配回路103は、データの移動の完了と同期させるために発行を抑止する演算命令exを容易に判断できる。また、データ移動命令mvと同期させる複数の演算命令exの各々にタグtag#を付加しなくてよいため、命令列ISの記述を簡易にでき、命令列ISの記述のミスを抑制することができる。
【0106】
命令列IS7、IS8、IS11、IS12に示したように、プロセッサ100は、データ移動命令mvとウェイト命令waitとの間に挿入されたデータの依存性のない演算命令を抑止することなく実行可能である。これにより、データ移動命令mvによるデータの移動が完了するまでに、同期の対象でない演算命令exを実行することができる。
【0107】
この結果、演算器111の演算の実行効率を向上することができ、プロセッサ100の処理性能を向上することができる。この際、プロセッサ100は、命令スケジューリング機能、レジスタリネーミング又はマルチスレッディング機能等を持つことなく、演算の処理性能を向上することができる。換言すれば、コア110の回路規模を増大することなく、演算の処理性能を向上することができる。
【0108】
データ移動命令mvとウェイト命令waitとに共通のタグtag#が付加されるため、命令分配回路103は、データ移動命令mvとウェイト命令waitに続く演算命令exとが、同期の対象であることを容易に判断できる。例えば、命令列IS7、SI8に示したように、同期の対象のデータ移動命令mvと演算命令exとの間に、別のデータ移動命令mvが記述されている場合にも、命令分配回路103は、同期の対象のデータ移動命令mvと演算命令exとを容易に判断することができる。
【0109】
命令列IS11、IS12に示したように、プロセッサ100は、データ移動命令mvによるデータの移動が開始されるまでの間に、データが移動される前のレジスタを使用して演算命令exを実行することができる。これにより、データの移動を演算命令exの実行のバックグラウンドで行うことができ、データの移動にかかるレイテンシを隠蔽することができる。この結果、プロセッサ100の処理性能を向上することができる。
【0110】
また、NoC104によりアクセスされる共有メモリ107に対するデータ移動命令mvと、データ移動命令mvと同期させる演算命令exとの間にウェイト命令waitが挿入される。このため、外部メモリ200のアクセスと競合して共有メモリ107のアクセスが待たされる場合にも、共有メモリ107に対するデータ移動命令mvと演算命令exとを同期させることができる。
【0111】
命令列IS2、IS4、IS6、IS8、IS10、IS12に示したように、データ移動命令mvにデータの移動量を示す移動量情報lenが付加されるため、プロセッサ100は、多量のデータを移動する場合にも、データ移動命令mvの実行と演算命令exの実行とを同期させることができる。
【0112】
図6は、図1に示したプロセッサ100が搭載される計算機のハードウェア構成の一例を示すブロック図である。図6では、計算機は、一例として、プロセッサ100と、主記憶装置30(メモリ)と、補助記憶装置40(メモリ)と、ネットワークインタフェース50と、デバイスインタフェース60と、を備え、これらがバス510を介して接続されたコンピュータ500として実現されてもよい。例えば、主記憶装置30は、図1に示した外部メモリ200でもよい。
【0113】
図6のコンピュータ500は、各構成要素を一つ備えているが、同じ構成要素を複数備えていてもよい。また、図6では、1台のコンピュータ500が示されているが、ソフトウェアが複数台のコンピュータにインストールされて、当該複数台のコンピュータそれぞれがソフトウェアの同一の又は異なる一部の処理を実行してもよい。この場合、コンピュータそれぞれがネットワークインタフェース50等を介して通信して処理を実行する分散コンピューティングの形態であってもよい。つまり、1又は複数の記憶装置に記憶された命令を1台又は複数台のコンピュータ500が実行することで機能を実現するシステムが構成されてもよい。また、端末から送信された情報をクラウド上に設けられた1台又は複数台のコンピュータ500で処理し、この処理結果を端末に送信するような構成であってもよい。
【0114】
各種演算は、コンピュータ500に搭載される1又は複数のプロセッサ100を用いて、又はネットワークを介した複数台のコンピュータ500を用いて、並列処理で実行されてもよい。また、各種演算が、プロセッサ100内に複数ある演算コアに振り分けられて、並列処理で実行されてもよい。また、本開示の処理、手段等の一部又は全部は、ネットワークを介してコンピュータ500と通信可能なクラウド上に設けられたプロセッサ及び記憶装置の少なくとも一方により実現されてもよい。このように、前述した実施形態における各装置は、1台又は複数台のコンピュータによる並列コンピューティングの形態であってもよい。
【0115】
プロセッサ100は、少なくともコンピュータの制御又は演算のいずれかを行う電子回路(処理回路、Processing circuit、Processing circuitry、CPU、GPU、FPGA、ASIC等)であってもよい。また、プロセッサ100は、汎用プロセッサ、特定の演算を実行するために設計された専用の処理回路又は汎用プロセッサと専用の処理回路との両方を含む半導体装置のいずれであってもよい。また、プロセッサ100は、光回路を含むものであってもよいし、量子コンピューティングに基づく演算機能を含むものであってもよい。
【0116】
プロセッサ100は、コンピュータ500の内部構成の各装置等から入力されたデータやソフトウェアに基づいて演算処理を行ってもよく、演算結果や制御信号を各装置等に出力してもよい。プロセッサ100は、コンピュータ500のOS(Operating System)や、アプリケーション等を実行することにより、コンピュータ500を構成する各構成要素を制御してもよい。
【0117】
主記憶装置30は、プロセッサ100が実行する命令及び各種データ等を記憶してもよく、主記憶装置30に記憶された情報がプロセッサ100により読み出されてもよい。補助記憶装置40は、主記憶装置30以外の記憶装置である。なお、これらの記憶装置は、電子情報を格納可能な任意の電子部品を意味するものとし、半導体のメモリでもよい。半導体のメモリは、揮発性メモリ又は不揮発性メモリのいずれでもよい。コンピュータ500において各種データ等を保存するための記憶装置は、主記憶装置30又は補助記憶装置40により実現されてもよく、プロセッサ100に内蔵される内蔵メモリにより実現されてもよい。
【0118】
コンピュータ500が、少なくとも1つの記憶装置(メモリ)と、この少なくとも1つの記憶装置に接続(結合)される少なくとも1つのプロセッサ100で構成される場合、記憶装置1つに対して、少なくとも1つのプロセッサ100が接続されてもよい。また、1つのプロセッサ100に対して、少なくとも1つの記憶装置が接続されてもよい。また、複数のプロセッサ100のうち少なくとも1つのプロセッサ100が、複数の記憶装置のうち少なくとも1つの記憶装置に接続される構成を含んでもよい。また、複数台のコンピュータ500に含まれる記憶装置とプロセッサ100によって、この構成が実現されてもよい。さらに、記憶装置がプロセッサ100と一体になっている構成(例えば、L1キャッシュ、L2キャッシュを含むキャッシュメモリ)を含んでもよい。
【0119】
ネットワークインタフェース50は、無線又は有線により、通信ネットワーク600に接続するためのインタフェースである。ネットワークインタフェース50は、既存の通信規格に適合したもの等、適切なインタフェースを用いればよい。ネットワークインタフェース50により、通信ネットワーク600を介して接続された外部装置710と情報のやり取りが行われてもよい。なお、通信ネットワーク600は、WAN(Wide Area Network)、LAN(Local Area Network)、PAN(Personal Area Network)等の何れか又はそれらの組み合わせであってもよく、コンピュータ500と外部装置710との間で情報のやり取りが行われるものであればよい。WANの一例としてインターネット等があり、LANの一例としてIEEE802.11やイーサネット(登録商標)等があり、PANの一例としてBluetooth(登録商標)やNFC(Near Field Communication)等がある。
【0120】
デバイスインタフェース60は、外部装置720と直接接続するUSB等のインタフェースである。
【0121】
外部装置710はコンピュータ500とネットワークを介して接続されている装置である。外部装置720はコンピュータ500と直接接続されている装置である。
【0122】
外部装置710又は外部装置720は、一例として、入力装置であってもよい。入力装置は、例えば、カメラ、マイクロフォン、モーションキャプチャ、各種センサ、キーボード、マウス、タッチパネル等のデバイスであり、取得した情報をコンピュータ500に与える。また、パーソナルコンピュータ、タブレット端末、スマートフォン等の入力部とメモリとプロセッサを備えるデバイスであってもよい。
【0123】
また、外部装置710又は外部装置720は、一例として、出力装置でもよい。出力装置は、例えば、LCD(Liquid Crystal Display)、有機EL(Electro Luminescence)パネル等の表示装置であってもよいし、音声等を出力するスピーカ等であってもよい。また、パーソナルコンピュータ、タブレット端末又はスマートフォン等の出力部とメモリとプロセッサを備えるデバイスであってもよい。
【0124】
また、外部装置710又は外部装置720は、記憶装置(メモリ)であってもよい。例えば、外部装置710はネットワークストレージ等であってもよく、外部装置720はHDD等のストレージであってもよい。
【0125】
また、外部装置710又は外部装置720は、コンピュータ500の構成要素の一部の機能を有する装置でもよい。つまり、コンピュータ500は、外部装置710又は外部装置720に処理結果の一部又は全部を送信してもよいし、外部装置710又は外部装置720から処理結果の一部又は全部を受信してもよい。
【0126】
本明細書(請求項を含む)において、「a、b及びcの少なくとも1つ(一方)」又は「a、b又はcの少なくとも1つ(一方)」の表現(同様な表現を含む)が用いられる場合は、a、b、c、a-b、a-c、b-c又はa-b-cのいずれかを含む。また、a-a、a-b-b、a-a-b-b-c-c等のように、いずれかの要素について複数のインスタンスを含んでもよい。さらに、a-b-c-dのようにdを有する等、列挙された要素(a、b及びc)以外の他の要素を加えることも含む。
【0127】
本明細書(請求項を含む)において、「データを入力として/を用いて/データに基づいて/に従って/に応じて」等の表現(同様な表現を含む)が用いられる場合は、特に断りがない場合、データそのものを用いる場合や、データに何らかの処理を行ったもの(例えば、ノイズ加算したもの、正規化したもの、データから抽出した特徴量、データの中間表現等)を用いる場合を含む。また、「データを入力として/を用いて/データに基づいて/に従って/に応じて」何らかの結果が得られる旨が記載されている場合(同様な表現を含む)、特に断りがない場合、当該データのみに基づいて当該結果が得られる場合や、当該データ以外の他のデータ、要因、条件及び/又は状態にも影響を受けて当該結果が得られる場合を含む。また、「データを出力する」旨が記載されている場合(同様な表現を含む)、特に断りがない場合、データそのものを出力として用いる場合や、データに何らかの処理を行ったもの(例えば、ノイズ加算したもの、正規化したもの、データから抽出した特徴量、各種データの中間表現等)を出力として用いる場合を含む。
【0128】
本明細書(請求項を含む)において、「接続される(connected)」及び「結合される(coupled)」との用語が用いられる場合は、直接的な接続/結合、間接的な接続/結合、電気的(electrically)な接続/結合、通信的(communicatively)な接続/結合、機能的(operatively)な接続/結合、物理的(physically)な接続/結合等のいずれをも含む非限定的な用語として意図される。当該用語は、当該用語が用いられた文脈に応じて適宜解釈されるべきであるが、意図的に或いは当然に排除されるのではない接続/結合形態は、当該用語に含まれるものして非限定的に解釈されるべきである。
【0129】
本明細書(請求項を含む)において、「AがBするよう構成される(A configured to B)」との表現が用いられる場合は、要素Aの物理的構造が、動作Bを実行可能な構成を有するとともに、要素Aの恒常的(permanent)又は一時的(temporary)な設定(setting/configuration)が、動作Bを実際に実行するように設定(configured/set)されていることを含んでよい。例えば、要素Aが汎用プロセッサである場合、当該プロセッサが動作Bを実行可能なハードウェア構成を有するとともに、恒常的(permanent)又は一時的(temporary)なプログラム(命令)の設定により、動作Bを実際に実行するように設定(configured)されていればよい。また、要素Aが専用プロセッサ、専用演算回路等である場合、制御用命令及びデータが実際に付属しているか否かとは無関係に、当該プロセッサの回路的構造等が動作Bを実際に実行するように構築(implemented)されていればよい。
【0130】
本明細書(請求項を含む)において、含有又は所有を意味する用語(例えば、「含む(comprising/including)」、「有する(having)」等)が用いられる場合は、当該用語の目的語により示される対象物以外の物を含有又は所有する場合を含む、open-endedな用語として意図される。これらの含有又は所有を意味する用語の目的語が数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)である場合は、当該表現は特定の数に限定されないものとして解釈されるべきである。
【0131】
本明細書(請求項を含む)において、ある箇所において「1つ又は複数(one or more)」、「少なくとも1つ(at least one)」等の表現が用いられ、他の箇所において数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)が用いられているとしても、後者の表現が「1つ」を意味することを意図しない。一般に、数量を指定しない又は単数を示唆する表現(a又はanを冠詞とする表現)は、必ずしも特定の数に限定されないものとして解釈されるべきである。
【0132】
本明細書において、ある実施形態の有する特定の構成について特定の効果(advantage/result)が得られる旨が記載されている場合、別段の理由がない限り、当該構成を有する他の1つ又は複数の実施形態についても当該効果が得られると理解されるべきである。但し、当該効果の有無は、一般に種々の要因、条件及び/又は状態に依存し、当該構成により必ず当該効果が得られるものではないと理解されるべきである。当該効果は、種々の要因、条件及び/又は状態が満たされたときに実施形態に記載の当該構成により得られるものに過ぎず、当該構成又は類似の構成を規定したクレームに係る発明において、当該効果が必ずしも得られるものではない。
【0133】
本明細書(請求項を含む)において、複数のハードウェアが所定の処理を行う場合、各ハードウェアが協働して所定の処理を行ってもよいし、一部のハードウェアが所定の処理の全てを行ってもよい。また、一部のハードウェアが所定の処理の一部を行い、別のハードウェアが所定の処理の残りを行ってもよい。本明細書(請求項を含む)において、「1又は複数のハードウェアが第1の処理を行い、前記1又は複数のハードウェアが第2の処理を行う」等の表現(同様な表現を含む)が用いられている場合、第1の処理を行うハードウェアと第2の処理を行うハードウェアは同じものであってもよいし、異なるものであってもよい。つまり、第1の処理を行うハードウェア及び第2の処理を行うハードウェアが、前記1又は複数のハードウェアに含まれていればよい。なお、ハードウェアは、電子回路、電子回路を含む装置等を含んでよい。
【0134】
本明細書(請求項を含む)において、複数の記憶装置(メモリ)がデータの記憶を行う場合、複数の記憶装置のうち個々の記憶装置は、データの一部のみを記憶してもよいし、データの全体を記憶してもよい。また、複数の記憶装置のうち一部の記憶装置がデータを記憶する構成を含んでもよい。
【0135】
以上、本開示の実施形態について詳述したが、本開示は上記した個々の実施形態に限定されるものではない。特許請求の範囲に規定された内容及びその均等物から導き出される本発明の概念的な思想と趣旨を逸脱しない範囲において、種々の追加、変更、置き換え、部分的削除等が可能である。例えば、前述した実施形態において、数値又は数式を説明に用いている場合、これらは例示的な目的で示されたものであり、本開示の範囲を限定するものではない。また、実施形態で示した各動作の順序も例示的なものであり、本開示の範囲を限定するものではない。
【符号の説明】
【0136】
30 主記憶装置
40 補助記憶装置
50 ネットワークインタフェース
60 デバイスインタフェース
100 プロセッサ
101 外部インタフェース回路
102 命令供給回路
103 命令分配回路
104 NoC
105 データ移動同期回路
106 ネットワークインタフェース
107 共有メモリ
108 メモリコントローラ
110 コア
111 演算器
112 レジスタファイル
113 ローカルメモリ
114 NoCインタフェース
120 制御部
130 第1ブロック
131 第1メモリ
140 第2ブロック
141 第2メモリ
151 第3メモリ
200 外部メモリ
300 ホストシステム
310 メインメモリ
400 ボード
500 コンピュータ
510 バス
600 通信ネットワーク
710、720 外部装置
BUS バス
EN イネーブル情報
ex 演算命令
IS 命令列
mv データ移動命令
tag# タグ
wait ウェイト命令
図1
図2
図3
図4
図5
図6