(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2024-03-18
(45)【発行日】2024-03-27
(54)【発明の名称】プロセッサおよびプログラム
(51)【国際特許分類】
G06F 9/38 20180101AFI20240319BHJP
G06F 15/80 20060101ALI20240319BHJP
G06F 9/48 20060101ALI20240319BHJP
G06F 9/50 20060101ALI20240319BHJP
G06F 9/46 20060101ALI20240319BHJP
【FI】
G06F9/38 370X
G06F15/80
G06F9/48 300C
G06F9/50 150Z
G06F9/46 410
(21)【出願番号】P 2021514865
(86)(22)【出願日】2020-04-01
(86)【国際出願番号】 JP2020014995
(87)【国際公開番号】W WO2020213396
(87)【国際公開日】2020-10-22
【審査請求日】2021-10-08
(31)【優先権主張番号】P 2019078291
(32)【優先日】2019-04-17
(33)【優先権主張国・地域又は機関】JP
(73)【特許権者】
【識別番号】000004260
【氏名又は名称】株式会社デンソー
(74)【代理人】
【識別番号】100113549
【氏名又は名称】鈴木 守
(74)【代理人】
【識別番号】100115808
【氏名又は名称】加藤 真司
(72)【発明者】
【氏名】石渡 一嘉
【審査官】坂東 博司
(56)【参考文献】
【文献】特開2005-284749(JP,A)
【文献】国際公開第2012/020478(WO,A1)
【文献】特開2004-287883(JP,A)
【文献】小野 徹行 Tetsuyuki Ono,マクロデータフロープリプロセッサの実装 Implementation of Macro data flow pre-processor,情報処理学会研究報告 Vol.2001 No.22 IPSJ SIG Notes,日本,社団法人情報処理学会 Information Processing Society of Japan,2001年03月08日,第2001巻,109-114頁
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
G06F 15/80
G06F 9/48
G06F 9/50
G06F 9/46
(57)【特許請求の範囲】
【請求項1】
複数のプロセッシングエレメント(PE)を有する実行コア(14)と、
複数のスレッドのうち実行すべきスレッドを指定する情報を蓄積するスレッドキュー(13)と、
前記スレッドキューから読み出した情報に基づいて実行すべきスレッドを決定し、決定された前記スレッドをメモリから取得し、前記プロセッシングエレメントに振り分ける制御プロセッサ(12)と、
を備え、
前記スレッドは、実行すべき処理内容とその実行結果に応じて次に実行すべきスレッドを指定する情報とを含み、前記複数のスレッドにより構成されるプログラムが実行する処理を動的に拡張でき、
前記プロセッシングエレメントは制御プロセッサによって振り分けられたスレッドの処理を行い、当該処理が完了すると当該スレッドの実行結果に応じて次に実行すべきスレッドを指定する情報を前記スレッドキューに書き込むプロセッサ(10)。
【請求項2】
前記プロセッシングエレメントは、次のスレッドとして、複数のスレッドを指定する情報を前記スレッドキューに蓄積する請求項1に記載のプロセッサ。
【請求項3】
前記スレッドキューは、実行すべきスレッドとして指定する情報が蓄積された回数を管理するカウンタを有し、
複数のスレッドの処理が完了したことを条件として実行されるスレッドについては、前記制御プロセッサは、前記回数が前記複数のスレッドの個数に達したときに、指定されたスレッドを処理待ち状態の前記プロセッシングエレメントに順次振り分ける請求項1または2に記載のプロセッサ。
【請求項4】
複数のプロセッシングエレメントを有するプロセッサに実行されるプログラムであって、前記プログラムは、
前記プログラムの処理を分割した個々の処理を定義した複数のスレッドを有し、
各スレッドは、実行すべき処理内容と、その実行結果に応じて次に実行すべきスレッドを指定する情報とを含
み、前記複数のスレッドにより構成されるプログラムが実行する処理を動的に拡張できるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、プロセッサおよびプログラムに関する。
【関連出願への相互参照】
【0002】
本出願は、2019年4月17日に日本国に出願した特願2019-078291号に基づくものであって、その優先権の利益を主張するものであり、その特許出願のすべての内容が、参照により本明細書に組み入れられる。
【背景技術】
【0003】
従来から、複数のプロセッサによって複数のタスクを並列処理するマルチコアシステムが知られていた。特許文献1に記載されたマルチコアシステムは、メインスレッドがタスクを生成し、タスクに指定情報を付加して、タスクキューに格納する。そして、プロセッサコアに割り当てられたワーカスレッドがタスクキューへアクセスし、各タスクに付加された指定情報を参照し、自己が指定されたタスクをタスクキューから読み出して処理する。
【先行技術文献】
【特許文献】
【0004】
【発明の概要】
【0005】
従来技術にかかるプロセッサでは、タスクを生成するときにタスクに指定情報が付加され、指定情報に従ってタスクが処理されるので、タスクが処理される順序及び対象のプロセッシングエレメント(PE)が固定されていた。従来技術では、すべての処理可能性を網羅して予め処理手順を決めておく必要があり、複雑な処理を構成することは難しい。また、すべての処理可能性を網羅して処理するプログラムは大きくなるため、メモリ容量が肥大してしまう。
【0006】
本開示は、上記背景に鑑み、処理結果に基づいて次に実行する処理と実行するプロセッシングエレメント(PE)を実行直前の状態をもとに変えることができるプロセッサを提供することでPEの稼働率を向上させることを目的とする。
【0007】
本開示は上記課題を解決するために以下の技術的手段を採用する。特許請求の範囲に記載した括弧内の符号は、ひとつの態様として後述する実施の形態に記載の具体的手段との対応関係を示す一例であって、本開示の技術的範囲を限定するものではない。
【0008】
本開示に係るプロセッサは、複数のプロセッシングエレメントを有する実行コアと、実行すべきスレッドを指定する情報を蓄積するスレッドキューと、前記スレッドキューから読み出した情報に基づいて実行すべきスレッドを決定し、決定された前記スレッドをメモリから取得し、前記プロセッシングエレメントに振り分ける制御プロセッサとを備え、前記プロセッシングエレメントは制御プロセッサによって振り分けられたスレッドの処理を行い、当該処理が完了すると当該スレッドの実行結果に応じて次に実行すべきスレッドを指定する情報を前記スレッドキューに書き込む。
【発明の効果】
【0009】
本開示によれば、プロセッシングエレメントがスレッドの実行結果に応じて次に実行すべきスレッドを指定するので、各スレッドの機能を定義しておけば、すべての処理可能性を網羅して予め処理手順を決めておく必要がなく、プログラムの冗長性を低減することができ、実行時に適当なプロセッシングエレメントで次の処理を実行できる。
このことでプロセッシングエレメントの実行効率を上げることができプロセッサ全体としても性能の向上となる。
【図面の簡単な説明】
【0010】
【
図1】
図1は、実施の形態に係るデータフロー型プロセッサを備えたデータ処理システムの構成を示す図である。
【
図2】
図2は、実施の形態に係るデータフロー型プロセッサの構成を示す図である。
【
図3A】
図3Aは、実施の形態のデータフロー型プロセッサによって実行されるプログラムの一例を示す図である。
【
図4】
図4は、実行すべきスレッドを指定する別の例を示す図である。
【
図5A】
図5Aは、実行条件を有するスレッドの例を示す図である。
【
図5B】
図5Bは、実行条件を有するスレッドを実行させるスレッドキューの構成を示す図である。
【
図6】
図6は、実施の形態のデータフロー型プロセッサによってプログラムの処理を行ったときの処理の流れを示す図である。
【発明を実施するための形態】
【0011】
以下、添付図面を参照しながら本実施形態について説明する。説明の理解を容易にするため、各図面において同一の構成要素に対しては可能な限り同一の符号を付して、重複する説明は省略する。
【0012】
図1は、実施の形態に係るプロセッサを含むデータ処理システム1の構成を示す図である。本実施の形態のプロセッサの一例は、出願人が開発を進めているデータフロー型プロセッサ10である。データフロー型プロセッサ10は、複数の処理を柔軟に組み立てて並列動作が可能なプロセッサである。以下、データフロー型プロセッサ10を例として、本実施の形態のプロセッサの説明をする。
【0013】
データ処理システム1は、ホストCPU21とデータフロー型プロセッサ10とイベントハンドラ20とROM22とRAM23と外部インターフェイス24とを備えている。ホストCPU21とデータフロー型プロセッサ10とプログラムを格納するROM22と演算バッファであるRAM23と外部インターフェイス24は、システムバス25に接続されており、システムバス25を通じて互いに情報の授受が可能である。
【0014】
ホストCPU21は、データ処理を行うと共に、データ処理システム1のOSをサポートする。ROM22は、読込専用のメモリである。RAM23は、読み書き用のメモリである。外部インターフェイス24は、例えば、カメラや超音波センサ等の外部機器と通信を行うためのインターフェイスである。
【0015】
データフロー型プロセッサ10は、データ処理システム1のホストCPU21の演算負荷に対処する個別マスタとしての役割を有する。データフロー型プロセッサ10は、独自に、命令フェッチを行うことが可能である。また、データフロー型プロセッサ10には、割込み処理を生成するイベントハンドラ20が接続されており、イベントハンドラ20が生成した割込みをサポートしている。
【0016】
図2は、データフロー型プロセッサ10の構成を示す図である。データフロー型プロセッサ10は、制御プロセッサ12と、スレッドキュー13と、実行コア14と、を備えている。データフロー型プロセッサ10はROMなどのプログラムメモリ11から処理コードを読み取り実行する構成となっている。
【0017】
スレッドキュー13は、実行すべきスレッドを指定する情報を蓄積する記憶部である。スレッドを指定する情報の一例は、スレッドを特定するスレッド番号である。以下では、スレッド番号を例として説明する。
【0018】
制御プロセッサ12は、スレッドキュー13に蓄積されたスレッド番号を読み出し、次に実行すべきスレッドを決定する。そして、制御プロセッサ12は、決定されたスレッドをプログラムメモリ11から取得し、実行コア14のN個のプロセッシングエレメントPE#0~PE#Nに振り分ける。
【0019】
実行コア14は、N個のプロセッシングエレメントPE#0~PE#Nを有している。以下、いずれかのプロセッシングエレメントPE#0~PE#Nを特定しないとき、あるいは総称するときには、「プロセッシングエレメントPE」という。本実施の形態ではプロセッシングエレメントPEの個数は限定されるものではない。
【0020】
複数のプロセッシングエレメントPEは、スカラー演算を行うプロセッシングエレメントPEと、ベクトル演算を行うプロセッシングエレメントPEを含んでいる。これにより、実行コアは、複雑な逐次処理と大量の並列処理の両方を行うことができる。実行コア14は、独立してスケジューリング可能な多数のパイプラインを有している。
【0021】
プロセッシングエレメントPEは、制御プロセッサ12によって振り分けられたスレッドの処理が完了すると、そのスレッドの実行結果に応じて次に実行すべきスレッドのスレッド番号をスレッドキュー13に書き込む。これにより、制御プロセッサ12は、スレッドの実行結果によって、異なるスレッドへと処理を遷移させることができる。
【0022】
図3A及び
図3Bは、本実施の形態のデータフロー型プロセッサ10によって実行されるプログラムの一例を示す図である。プログラムは、例えば、ROMなどのプログラムメモリ11に記憶されており、データフロー型プロセッサ10は、プログラムメモリ11からプログラムを構成するスレッドを読み込んで実行する。
【0023】
図3Aに示すように、プログラムは、複数のスレッドT0~スレッドTNを有している。複数のスレッドT0~TNを特定しないとき、あるいは総称するときは、「スレッドT」という。スレッドTは、各スレッドTが行う処理量がなるべく小さくなるように、処理が細分化されている。細分化された複数のスレッドTを並列処理することにより、各スレッドTがプロセッシングエレメントPEを長時間占有してしまうことがなく、処理効率を高めることができる。
【0024】
図3Bは、スレッドTの内容を示す図である。スレッドTには、実行すべき処理の内容と、次に実行すべきスレッド番号とを含んでいる。次に実行すべきスレッドは、予め静的に決められているのではなく、スレッドTの実行結果に応じて異なっている。この例では、実行結果Aの場合にはスレッドT1、実行結果Bの場合にはスレッドT4が、次に実行すべきスレッドとして規定されている。なお、実行結果Cの場合には「EOT」と規定されているが、これはスレッドの最後(End of Thread)であることを示し、EOTに該当した場合には、処理を終了する。プロセッシングエレメントPEは、スレッドTを実行し、その処理が完了すると、実行結果に応じて決まる実行すべきスレッドTのスレッド番号をスレッドキュー13に書き込む。
【0025】
図4は、スレッドTの別の例を示す図である。
図4に示す例は、実行結果Aの場合にはスレッドT1,T7と規定されているが、これはスレッドTの実行結果がAになった場合には、スレッドT1とスレッドT7の2つのスレッドを実行することを意味している。プロセッシングエレメントPEは、スレッドTを実行し、その実行結果がAであった場合には、スレッドT1,スレッドT7をスレッドキュー13に蓄積する。これにより、スレッドT1とスレッドT7が実行される。
【0026】
図5Aは、実行条件を有するスレッドTの例を示す図である。スレッドTの処理内容および次に実行すべきスレッドTについては、
図3Bに示す例と同じであるが、
図5Aに示す例では、スレッドTの実行条件として、スレッドT3,T5,T8が終了したことが定められている。つまり、スレッドT3、スレッドT5、スレッドT8の3つのスレッドが、次に実行すべきスレッドとして指定したときに、スレッドTは実行される。このような実行条件を有することにより、複数のスレッドの実行結果を利用して実行するスレッドを実現できる。
【0027】
図5Bは、実行条件を有するスレッドTに対応するスレッドキュー13の構成を示す図である。スレッドキュー13は、実行すべきスレッドTのスレッド番号に加えて、そのスレッドが何回登録されたかを示すカウンタCを有している。
図5Bに示す例では、スレッドT4は1回、スレッドT7は2回登録されている。つまり、次に実行すべきスレッドとして、スレッドキュー13に書き込まれた。
【0028】
例えば、スレッドT7の実行条件が、スレッドT3、スレッドT5、スレッドT8の3つのスレッドが終了したことであるとした場合、現時点では2回しか登録されていない(2つのスレッドしか処理が終了していない)ので、制御プロセッサ12は、スレッドT7をプロセッシングエレメントPEに振り分けることはしない。
【0029】
もう1回、次に実行すべきスレッドとしてスレッドキュー13に登録されて、スレッドT7のカウンタCが「3」になると、制御プロセッサ12は、プロセッシングエレメントPEが空き次第、スレッドTの振り分けを行う。この構成により、スレッドT7は、スレッドT3、スレッドT5、スレッドT8の3つのスレッドの終了という実行条件を満たしたときに、処理が実行されるように制御される。
【0030】
なお、
図4では1スレッドから複数スレッドへ遷移する処理の例、
図5Aでは複数スレッドから1スレッドへ遷移する処理の例を示したが、例えば、
図5Aに示す例で次に実行すべきスレッドとして複数のスレッドを指定すれば、複数スレッドから複数スレッドへ遷移する処理も実現することができる。
【0031】
図6は、本実施の形態のデータフロー型プロセッサ10によってプログラムの処理を行ったときの処理の流れを示す図である。
図6のフローは、中央の「開始」から処理がスタートする。処理の開始後、データフロー型プロセッサ10は、複数のプロセッシングエレメントPE#0~PE#Nで、処理#0、処理#1、処理#2、処理#3を同時に処理する。その後、各プロセッシングエレメントPE#0~PE#Nは、実行結果に基づいて、終了(EOT)を行うか、後続の処理を行うかを判断する。
【0032】
図6に示す例では、処理#0、処理#3については終了、処理#1、処理#2については処理#7、処理#4が次の処理として続く。その後の処理も同様に、各プロセッシングエレメントPEは、処理結果によって判断を行い、後続の処理を選択する。なお、
図6に示す遷移は、処理#0,処理#1,処理#2,処理#3に対する入力データに依存し、あくまでも一例である。
【0033】
本実施の形態のデータフロー型プロセッサ10は、例えば、次のような処理に用いることができる。マップなどの検索において東西南北の4つの方向で障害物検出処理を行う。もし障害物がない場合は、その方向にさらに進んで処理をしていくという処理内容である。本実施の形態によれば東西南北の方向に処理を行い、検索の必要な方向に動的に処理を拡張していくことができる。本実施の形態では、処理を実行するスレッドを定義しておき、実行結果に応じて、複数のスレッドが動的につながっていく。
【0034】
以上、本実施の形態のデータフロー型プロセッサ10について説明した。本実施の形態のデータフロー型プロセッサ10は、プロセッシングエレメントPEがスレッドTの実行結果に応じて次に実行すべきスレッドTのスレッド番号をスレッドキュー13に書き込み、制御プロセッサ12がスレッドキュー13に蓄積されたスレッド番号に基づいて、プロセッシングエレメントPEにスレッドTを振り分けるので、各スレッドの機能を定義しておけば、動的にスレッドTを実行できる。すべての処理可能性を網羅して予め処理手順を決めておかなくてもよいので、プログラムの冗長性を低減することができる。また、本実施の形態のデータフロー型プロセッサ10は、プロセッシングエレメントPEに処理を等価に実行させることができる場合に特に有効に働く。
【産業上の利用可能性】
【0035】
本開示にかかるプロセッサは、複数のスレッドを並列に処理するプロセッサとして有用である。