(57)【要約】【課題】サブプロセッサによる命令の実行開始を早める。【解決手段】演算処理装置は、命令を記憶する記憶部と、発行された命令の実行が完了すると更新される計数部と、計数部のカウント値に基づいて生成されるフェッチアドレスに基づき、フェッチした命令を発行する発行部と、発行部が発行した命令を実行する演算部と、他の演算処理装置から転送された複数の転送命令の転送情報に基づいて、他の演算処理装置に接続される記憶装置が記憶する命令を、前記記憶部のポインタの位置に送信する転送制御部と、複数の転送命令のうちいずれかの転送命令の転送情報が実行指示を有する場合、計数部のカウント動作を開始させ、命令のフェッチアドレスまたは計数部の値がポインタに追いつくと計数部のカウント動作を停止させ、ポインタがフェッチアドレスまたは計数部の値より先を指すと計数部のカウント動作を再開させる実行制御部とを有する。【選択図】図１
2020038502.tif 000002
【特許請求の範囲】
【請求項１】
命令を記憶する記憶部と、
発行された命令の実行が完了すると更新される計数部と、
前記計数部のカウント値に基づいて生成されるフェッチアドレスに基づき、フェッチした命令を発行する発行部と、
前記発行部が発行した命令を実行する演算部と、
他の演算処理装置から転送された複数の転送命令の転送情報に基づいて、前記他の演算処理装置に接続される記憶装置が記憶する命令を、前記記憶部のポインタの位置に送信する転送制御部と、
前記複数の転送命令のうちいずれかの転送命令の転送情報が実行指示を示す場合、前記計数部のカウント動作を開始させ、前記命令のフェッチアドレスまたは前記計数部の値が前記ポインタに追いつくと前記計数部のカウント動作を停止させ、前記ポインタが前記フェッチアドレスまたは前記計数部の値より先を指すと前記計数部のカウント動作を再開させる実行制御部とを有する、演算処理装置。
【請求項２】
前記実行制御部は、前記計数部のカウント動作を開始及び再開する場合、前記記憶部からの命令フェッチ動作を開始及び再開し、前記計数部のカウント動作を停止するとき、前記記憶部からの命令フェッチ動作を停止する、請求項１に記載の演算処理装置。
【請求項３】
前記転送命令の前記転送情報は、前記記憶装置の転送元アドレスと、前記記憶部の転送先アドレスと、転送長と、前記実行指示とを有し、
前記転送制御部は、前記転送先アドレスに前記転送長を加算して前記ポインタを更新する、請求項１に記載の演算処理装置。
【請求項４】
前記実行制御部は、前記計数部の値が前記ポインタから所定の減算値を減じた修正ポインタに追いつくと、前記カウント動作を停止し、前記修正ポインタが前記計数部の値より先を指すと、前記カウント動作を再開する、請求項１に記載の演算処理装置。
【請求項５】
複数の演算ユニットを有し、
前記複数の演算ユニットそれぞれは、前記記憶部と、前記計数部と、前記発行部と、前記演算部と、前記実行制御部とを有し、
更に、前記転送制御部は、前記複数の演算ユニットに共通に設けられた第１の転送制御部と、前記複数の演算ユニットそれぞれに設けられた第２の転送制御部とを有し、
前記第１の転送制御部は、前記複数の転送命令に応答して、転送先の演算ユニット内の前記記憶部に前記命令を転送し、
前記第２の転送制御部は、前記ポインタを更新する、請求項１に記載の演算処理装置。
【請求項６】
演算処理装置と、他の演算処理装置とを有する情報処理装置において、
前記演算処理装置は、
命令を記憶する記憶部と、
発行された命令の実行が完了すると更新される計数部と、
前記計数部のカウント値に基づいて生成されるフェッチアドレスに基づき、フェッチした命令を発行する発行部と、
前記発行部が発行した命令を実行する演算部と、
他の演算処理装置から転送された複数の転送命令の転送情報に基づいて、前記他の演算処理装置に接続される記憶装置が記憶する命令を、前記記憶部のポインタの位置に送信する転送制御部と、
前記複数の転送命令のうちいずれかの転送命令の転送情報が実行指示を示す場合、前記計数部のカウント動作を開始させ、前記命令のフェッチアドレスまたは前記計数部の値が前記ポインタに追いつくと前記計数部のカウント動作を停止させ、前記ポインタが前記フェッチアドレスまたは前記計数部の値より先を指すと前記計数部のカウント動作を再開させる実行制御部とを有する、情報処理装置。
【請求項７】
命令を記憶する記憶部と、発行された命令の実行が完了すると更新される計数部と、
前記計数部のカウント値に基づいて生成されるフェッチアドレスに基づき、フェッチした命令を発行する発行部と、前記発行部が発行した命令を実行する演算部とを有する演算処理装置の制御方法において、
前記演算処理装置が有する転送制御部が、他の演算処理装置から転送された複数の転送命令の転送情報に基づいて、前記他の演算処理装置に接続される記憶装置が記憶する命令を、前記記憶部のポインタの位置に送信し、
前記演算処理装置が有する実行制御部が、前記複数の転送命令のうちいずれかの転送命令の転送情報が実行指示を示す場合、前記計数部のカウント動作を開始させ、前記命令のフェッチアドレスまたは前記計数部の値が前記ポインタに追いつくと前記計数部のカウント動作を停止させ、前記ポインタが前記フェッチアドレスまたは前記計数部の値より先を指すと前記計数部のカウント動作を再開させる、演算処理装置の制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は，演算処理装置、情報処理装置及び情報処理装置の制御方法に関する。
【背景技術】
【０００２】
演算処理装置、またはCPU（Central Processing Unit）、プロセッサ（以下、代表してプロセッサと称する）は、プログラム内の様々な命令を実行するために、様々な算術論理演算器（ALU：Arithmetic Logical Unit）を有する。
【０００３】
一方で、画像処理や暗号処理など特定の演算処理を実行するアクセラレータと呼ばれるプロセッサが、サブプロセッサ又はコプロセッサとしてメインプロセッサに付設される。メインプロセッサは、プログラム内の様々な命令を実行し、画像処理や暗号処理など特定の演算処理を行う場合、サブプロセッサにその演算処理を実行させる。サブプロセッサ又はコプロセッサは、メインプロセッサよりも高速に特定の演算処理を行うことができるため、メインプロセッサのアクセラレータと称される。
【０００４】
プロセッサとアクセラレータの組合せ以外でも、メインのサーバのCPUが、サーバからネットワークで通信可能サブのサーバのCPUに、メインサーバのCPUが実行するプログラムの一部の処理を実行させるような組み合わせでも、サブサーバのCPUは、メインサーバのCPUのアクセラレータとして動作し、メインサーバのCPUによるプログラム処理を高速化する。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００４−３４８３２７号公報
【特許文献２】特開平３−１５４９１９号公報
【特許文献３】特開平２−２５５９２７号公報
【特許文献４】特開昭６３−３７４５７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
メインプロセッサは、プログラム内の一部の命令とその命令の処理に必要なデータをサブプロセッサに転送し、転送完了後にサブプロセッサに転送した命令の実行を依頼する。転送される命令とデータの容量が大きい場合、命令とデータの転送が完了するまでの時間が長くなり、サブプロセッサによる命令の実行開始が遅くなる。その結果、サブプロセッサによる命令の実行完了までの時間が長くなり、サブプロセッサはアクセラレータとしての役割を十分に果たすことができない。
【０００７】
そこで，本実施の形態の第1の側面の目的は，サブプロセッサによる命令の実行開始を早めた演算処理装置、演算処理装置を有する情報処理装置及び情報処理装置の制御方法を提供することにある。
【課題を解決するための手段】
【０００８】
本実施の形態の第１の側面は，命令を記憶する記憶部と、
発行された命令の実行が完了すると更新される計数部と、
前記計数部のカウント値に基づいて生成されるフェッチアドレスに基づき、フェッチした命令を発行する発行部と、
前記発行部が発行した命令を実行する演算部と、
他の演算処理装置から転送された複数の転送命令の転送情報に基づいて、前記他の演算処理装置に接続される記憶装置が記憶する命令を、前記記憶部のポインタの位置に送信する転送制御部と、
前記複数の転送命令のうちいずれかの転送命令の転送情報が実行指示を有する場合、前記計数部のカウント動作を開始させ、前記命令のフェッチアドレスまたは前記計数部の値が前記ポインタに追いつくと前記計数部のカウント動作を停止させ、前記ポインタが前記フェッチアドレスまたは前記計数部の値より先を指すと前記計数部のカウント動作を再開させる実行制御部とを有する、演算処理装置である。
【発明の効果】
【０００９】
第１の側面によれば，サブプロセッサによる命令の実行開始を早めることができる。
【図面の簡単な説明】
【００１０】
【図１】本実施の形態におけるサブプロセッサとメインプロセッサの構成を示す図である。
【図２】転送命令の一例を示す図である。
【図３】DMA転送制御部の転送ポインタの更新処理を説明する図である。
【図４】内部メモリの転送ポインタとフェッチアドレスとの関係を示す図である。
【図５】メインプロセッサとサブプロセッサの動作を示すフローチャート図である。
【図６】メインプロセッサとサブプロセッサの動作例１，２を示すタイミングチャート図である。
【図７】メインプロセッサとサブプロセッサの動作例１，２を示すタイミングチャート図である。
【図８】第２の実施の形態におけるメインプロセッサとサブプロセッサとを示す図である。
【図９】第３の実施の形態における演算処理装置の構成例を示す図である。
【図１０】第３の実施の形態におけるプログラムカウンタPCと転送ポインタTRNS_PTRとの関係を示す図である。
【図１１】プログラムカウンタPCと、転送ポインタから減算ポイントを減算した値TRNS_PTR-SUB_PTRの関係を示す図である。
【図１２】第４の実施の形態における演算処理装置の構成例を示す図である。
【発明を実施するための形態】
【００１１】
［第１の実施の形態］
図１は、本実施の形態におけるサブプロセッサとメインプロセッサの構成を示す図である。図１において、ホストコンピュータ１０は、メインプロセッサ（CPU、他の演算処理装置）１１と、メインメモリ（他の演算処理装置に接続される記憶装置）１４と、サブプロセッサ（演算処理装置）２０との通信をインターフェースするインターフェース制御部１２とを有する。一方、サブプロセッサ２０は、内部メモリ（記憶部）３０と、命令発行部（発行部）２１及び算術論理演算器（演算部）２９と、DMA（Direct Memory Access）転送ユニット（転送制御部）２２とを有する。
【００１２】
命令発行部２１と算術論理演算器２９は、一般的なプロセッサの構成要素である。命令発行部（発行部）２１は、内部メモリ（記憶部）３０に記憶された命令をフェッチする命令フェッチ回路２６と、フェッチされた命令を一時的に蓄積しながら順番にデコードし、デコードした命令を算術論理演算器（演算部）２９に発行する命令デコーダ２７と、フェッチアドレス生成部２８とを有する。
【００１３】
算術論理演算器（演算部）２９は、例えば、データを内部メモリ（記憶部）から読み出すアクセス制御、論理演算回路、算術演算回路などを有する。また、算術論理演算器２９が実行する命令の命令番号（または命令アドレス）を保持するプログラムカウンタ（計数部）PCが設けられ、算術論理演算器が命令を実行完了する度にプログラムカウンタ（計数部）の命令番号（カウント値）が更新される。そして、フェッチアドレス生成部２８が、プログラムカウンタ（計数部）PCの命令番号（カウント番号）に基づいて、次にフェッチする命令のフェッチアドレスを生成する。生成された命令フェッチアドレスに基づいて、命令フェッチ回路２６が、内部メモリ内の命令をフェッチする。
【００１４】
プログラムカウンタPCのカウント動作は、プログラムカウンタ制御回路（図示せず）により制御される。プログラムカウンタ制御回路は、例えば、算術論理演算器からの命令実行終了通知に応答して、プログラム順に命令の演算結果のデータを結果レジスタに格納するなどの完了処理の一つとして、プログラムカウンタPCをカウントアップする。
【００１５】
命令フェッチアドレスは、プログラムカウンタPCの命令番号に対応するアドレスより先行する命令のアドレスである。つまり、命令デコーダ２７はフェッチされた命令を一時的に蓄積する。また、命令フェッチ回路２６から算術論理演算器２９までの回路はパイプライン構成になっている。そのため、算術論理演算器が処理完了のたびに更新するプログラムカウンタPCに対応する命令のアドレスより、命令フェッチ回路２６がフェッチする命令フェッチアドレスのほうが、先行するアドレスである。但し、一般に、命令フェッチアドレスF_ADDは、プログラムカウンタPCより所定アドレス先までしか先行しないように、プログラムカウンタPCに対するフェッチアドレスの先行幅の上限が定められている。
【００１６】
一方、DMA転送ユニット２２は、ホストコンピュータ１０のメインメモリ１４と内部メモリ３０との間でインターフェース制御部１２を経由するDMA転送の制御と、命令フェッチ回路２６の命令フェッチの実行の制御を行う。DMA転送ユニット２２は、ホストのメインプロセッサ１１から送信される転送命令（転送命令の記述子）を記憶する転送記述子バッファ２３と、転送命令に基づいてメインメモリ１４内の命令を内部メモリ３０にDMA転送するDMA転送制御部（転送制御部）２４とを有する。
【００１７】
メインプロセッサ１１は、プログラムを実行中に特定の処理をサブプロセッサに実行させるために、サブプロセッサに実行させる命令列（特定の処理を行うプログラム）を、メインメモリ１４に書き込み、複数の転送命令をサブプロセッサに送信する。サブプロセッサ２０のDMA転送ユニット２２は、複数の転送命令に基づいて、メインメモリ１４内の命令列（特定の処理を行うプログラム）を自身の内部メモリ３０にDMA転送する。一度のDMA転送で転送されるデータ量が限られているので、メインプロセッサ１１は、複数の転送命令を生成してサブプロセッサに送信し、サブプロセッサのDMA転送ユニット２２にDMA転送を複数回実行させる。
【００１８】
DMA転送ユニット２２内のDMA転送制御部２４は、転送記述子バッファ２３内に記憶された複数の転送命令に対応するDMA転送を順番に実行し、メインメモリ１４内の命令列を内部メモリ３０にDMA転送する。そして、命令フェッチ回路２６が、内部メモリ３０に記憶された命令列を順次フェッチし、命令デコーダ２７に入力する。命令デコーダは、フェッチされる命令を一時的にバッファし、順番にデコードし、算術論理演算器２９に発行する。これにより、サブプロセッサ２０は、メインプロセッサ１１がメインメモリ１４に書き込んだ命令列（プログラム）を順次実行する。
【００１９】
メインメモリから内部メモリに転送される命令列は大容量の場合がある。また、メインメモリから内部メモリには、命令列に加えて、命令列が処理するデータもDMA転送される。従来は、大容量の命令列とそのデータが全て内部メモリにDMA転送された後に、サブプロセッサが命令列の実行を開始していた。そのため、サブプロセッサによる処理開始が遅くなり、サブプロセッサのアクセラレータとしての性能を十分に利用できなくなる場合がある。
【００２０】
そこで、本実施の形態では、サブプロセッサ２０のDMA転送制御部２４が、転送記述子バッファ２３内の複数の転送命令（転送記述子）に基づいて順番にメインメモリ１４内の命令列を内部メモリ３０に順番にDMA転送する。そして、命令実行制御回路（実行制御部）２５が、各転送命令（転送記述子）に基づいてDMA転送するたびに、各転送命令（転送記述子）内の命令の実行を指示する命令実行フラグ（実行指示）をチェックする。このチェックで命令実行フラグが有効であること（実行を指示すること）を検出すると、命令実行制御回路（実行制御部）２５は、プログラムカウンタPCのカウント動作の開始と、命令フェッチ回路２６による内部メモリ３０内の命令のフェッチの開始とを指示する。
【００２１】
これによりサブプロセッサは転送された命令列の実行を開始する。このように、メインプロセッサ１１は、複数の転送命令（転送記述子）中の任意の転送命令に有効な命令実行フラグを設定し、命令列のDMA転送中の任意のタイミングで、サブプロセッサ２０による特定の処理の命令の実行を開始させることができる。
【００２２】
さらに、サブプロセッサが特定の処理の命令の実行を開始した後、メインメモリ１４内の命令列の内部メモリ３０へのDMA転送が継続して行われる。そして、命令実行制御回路２５が、DMA転送制御部２４が管理する転送ポインタTRNS_PTRと、命令フェッチ回路２６が管理する命令フェッチアドレスF_ADDとを比較し、命令フェッチアドレスが転送ポインタに追いついていないか否かをチェックする。転送ポインタTRNS_PTRは、DMA転送制御部２４が命令列を格納する内部メモリ３０内の転送先アドレスを示す。また、命令フェッチアドレスF_ADDは、命令フェッチ回路２６が命令列を読み出す内部メモリの読み出し先アドレスを示す。
【００２３】
命令フェッチアドレスF_ADDが転送ポインタTRNS_PTRに追いついた場合（F_ADD=TRNS_PTR）、転送済み命令は全てフェッチされたことを意味するので、命令実行制御回路２５は、プログラムカウンタPCのカウント動作を停止すると共に、命令フェッチ回路２６による命令フェッチも停止する。この結果、サブプロセッサ２０は、命令発行部２１と算術論理演算器２９によるフェッチ済み命令を処理する動作（命令デコード、命令発行、命令実行）を停止し、さらに、命令フェッチ回路２６による新たな命令の内部メモリ３０からのフェッチ動作も停止する。
【００２４】
その後、命令列のDMA転送が継続して行われ、命令実行制御回路２５は、上記の比較により、転送ポインタが命令フェッチアドレスを追い越したか否かをチェックする。転送ポインタが命令フェッチアドレスを追い越した状態では、内部メモリ内の転送済みの命令をフェッチすることができる。その場合、命令実行制御回路２５は、プログラムカウンタのカウント動作と、命令フェッチ回路２６による命令列のフェッチを再開する。
【００２５】
これにより、全命令列がメインメモリから内部メモリに転送を完了する前に、サブプロセッサが、転送済みの命令列の実行を開始することができる。また、転送完了する前に転送済み命令列の実行を開始しても、命令フェッチが未転送の命令の前まで行われると、命令フェッチを一時停止し、その後、命令列のDMA転送が進むと、命令フェッチを再開することができる。これにより、命令列のDMA転送完了前にサブプロセッサが命令列の実行を開始しても、未転送の命令列の命令フェッチは抑止される。
【００２６】
図２は、転送命令の一例を示す図である。図２中、左側に示した転送命令TRNS_INSTは、転送元アドレスSADDと、転送先アドレスDADDと、転送長LNGと、実行フラグEX_FLGと、チェインフラグCH_FLGと、次のディスクリプタアドレスN_DIS_ADDとを有する記述子（ディスクリプタ）である。本実施の形態では、転送元アドレスは、メインプロセッサ１１のメインメモリ１４の転送対象命令等のアドレスであり、転送先アドレスは、内部メモリ３０内の転送先のアドレスである。また、転送長は、この転送命令で転送するデータ長を示す。
【００２７】
チェインフラグCH_FLGは、後続の転送命令が存在するか否かを示すフラグであり、このチェインフラグが有効の場合、DMA転送制御部２４が、次のディスクリプタアドレスの転送命令を転送記述子バッファ２３から読み出し、転送命令に基づくDMA転送を実行する。
【００２８】
また、実行フラグEX_FLGは、DMA転送しているサブプロセッサが命令列の実行を開始すべきか否かを示すフラグであり、実行フラグEX_FLGが有効の場合、命令実行制御回路２５がプログラムカウンタPCのカウント動作と、命令フェッチ回路２６に命令列のフェッチを開始させ、サブプロセッサに命令列の実行を開始させる。
【００２９】
図２には、右側に、チェイン接続された３つの転送命令４０，４１，４２が示される。転送命令４０、４１は、チェインフラグCH_FLGが有効「１」であるので、それぞれ後続する転送命令４１，４２が存在することが示されている。一方、転送命令４１は、実行フラグEX_FLGが有効「１」であるので、転送命令４１でDMA転送されるときに、命令実行制御回路２５が、プログラムカウンタPCにカウントの開始と、命令フェッチ回路２６に命令フェッチの開始とを指示し、サブプロセッサに命令の実行を開始させる。このように、メインプロセッサ１１は、複数の連結された転送命令（転送記述子）の中の任意の転送命令の実行フラグEX_FLGを有効「１」に設定することで、命令列のDMA転送の任意のタイミングでサブプロセッサ２０に命令の実行開始を行わせることができる。
【００３０】
図３は、DMA転送制御部の転送ポインタの更新処理を説明する図である。図３には、内部メモリ３０に対する転送ポインタTRNS_PTRの更新動作が示される。CASE1は、内部メモリ３０の先頭の転送先アドレスが0000で、8回のDMA転送が連続するアドレスに対して行われる例である。この場合、DMA転送制御部２４は、毎回転送完了するたびに、転送命令（転送記述子）内の転送先アドレスに転送長LNGを加算して、転送ポインタTRNS_PTRを更新する。即ち、１回目の転送完了時の転送ポインタTRNS_PTR_1は、転送先アドレス「0000」+転送長「256」＝256に更新される。つまり、転送ポインタTRNS_PTR_1は、転送済み命令列の次のアドレスを指している。
【００３１】
その後、２回目から８回目までの更新された転送ポインタTRNS_PTR_2〜TRNS_PTR_8は、以下のとおりとなる。
TRNS_PTR_2 =転送先アドレス「256」+転送長「256」＝512
TRNS_PTR_3 =転送先アドレス「512」+転送長「256」＝768
TRNS_PTR_4 =転送先アドレス「768」+転送長「256」＝1024
TRNS_PTR_5 =転送先アドレス「1024」+転送長「256」＝1280
TRNS_PTR_6 =転送先アドレス「1280」+転送長「256」＝1536
TRNS_PTR_7 =転送先アドレス「1536」+転送長「256」＝1792
TRNS_PTR_8 =転送先アドレス「1792」+転送長「256」＝2048
CASE2は、内部メモリ３０の先頭の転送先アドレスが1000で、8回の転送が連続する転送先アドレスに対して行われる例である。この場合も、DMA転送制御部２４は、毎回転送完了するたびに、転送命令（転送記述子）内の転送先アドレスに転送長を加算して、転送ポインタTRNS_PTRを更新する。従って、１回目の転送完了時から８回目の転送完了時に更新された転送ポインタTRNS_PTR_1〜TRNS_PTR_8は、以下のとおりとなる。
TRNS_PTR_1 =転送先アドレス「1000」+転送長「256」＝1256
TRNS_PTR_2 =転送先アドレス「1256」+転送長「256」＝1512
TRNS_PTR_3 =転送先アドレス「1512」+転送長「256」＝1768
TRNS_PTR_4 =転送先アドレス「1768」+転送長「256」＝2024
TRNS_PTR_5 =転送先アドレス「2024」+転送長「256」＝2280
TRNS_PTR_6 =転送先アドレス「2280」+転送長「256」＝2536
TRNS_PTR_7 =転送先アドレス「2536」+転送長「256」＝2792
TRNS_PTR_8 =転送先アドレス「2792」+転送長「256」＝3048
CASE3は、内部メモリ３０の先頭の転送先アドレスが1000で、8回の転送が４回目から５回目で不連続な転送先アドレスに対して行われ、それ以外は連続するアドレスに対して行われる例である。この場合も、DMA転送制御部２４は、毎回転送完了するたびに、転送命令（転送記述子）内の転送先アドレスに転送長を加算して、転送ポインタTRNS_PTRを更新する。従って、１回目の転送完了時から８回目の転送完了時に更新された転送ポインタTRNS_PTR_1〜TRNS_PTR_8は、以下のとおりとなる。
TRNS_PTR_1 =転送先アドレス「1000」+転送長「256」＝1256
TRNS_PTR_2 =転送先アドレス「1256」+転送長「256」＝1512
TRNS_PTR_3 =転送先アドレス「1512」+転送長「256」＝1768
TRNS_PTR_4 =転送先アドレス「1768」+転送長「256」＝2024
TRNS_PTR_5 =転送先アドレス「4000」+転送長「256」＝4256
TRNS_PTR_6 =転送先アドレス「4256」+転送長「256」＝4512
TRNS_PTR_7 =転送先アドレス「4512」+転送長「256」＝4768
TRNS_PTR_8 =転送先アドレス「4768」+転送長「256」＝5048
図４は、内部メモリの転送ポインタとフェッチアドレスとの関係を示す図である。内部メモリ３０には、DMA転送制御部２４により管理される転送ポインタTRNS_PTRの位置にDMA転送された命令列が格納される。上記の転送ポインタの動作から明らかなとおり、転送ポインタTRNS_PTRのアドレスには未だ命令列は格納されていない。
【００３２】
図４の（１）は、転送ポインタTRNS_PTR＞フェッチアドレスF_ADDの状態であり、フェッチアドレスF_ADDには転送済命令INST1が格納されている。この場合、命令実行制御回路２５は、転送命令の実行フラグEX_FLGが有効「１」の場合、プログラムカウンタPCのカウント動作の開始と、命令フェッチ回路２６への命令フェッチの実行開始とを指示する。また、命令の実行が一時停止中に、転送ポインタTRNS_PTR＞フェッチアドレスF_ADDの状態になると、命令実行制御回路２５は、プログラムカウンタPCのカウント動作の再開と、命令フェッチ回路２６への命令フェッチの実行再開とを指示する。
【００３３】
図４の（２）は、転送ポインタTRNS_PTR＝フェッチアドレスF_ADDの状態であり、フェッチアドレスF_ADDが転送ポインタTRNS_PTRに追いついた状態である。この場合、フェッチアドレスF_ADDには転送済命令は未だ格納されていないので、命令実行制御回路２５は、プログラムカウンタPCのカウント動作の停止と、命令フェッチ回路２６の命令フェッチの停止を指示する。これにより、サブプロセッサによる命令列の実行が一時停止になる。その後、DMA転送が継続して行われると、やがて、図４の（１）のように転送ポインタTRNS_PTRがフェッチアドレスF_ADDを追い越した状態になる。追い越した状態になると、上記したとおり、命令実行制御回路２５は、プログラムカウンタPCのカウント動作と命令フェッチ回路２６の命令フェッチの実行の再開を指示する。
【００３４】
図５は、メインプロセッサとサブプロセッサの動作を示すフローチャート図である。図６，図７は、メインプロセッサとサブプロセッサの動作例１，２を示すタイミングチャート図である。図５に沿ってメインプロセッサとサブプロセッサの動作を説明する。
【００３５】
まず、メインプロセッサ１１が、サブプロセッサに実行させる命令列をメインメモリ１４内に格納する（S0）。このとき、命令列の実行に必要なデータもメインメモリ１４に格納してもよい。
【００３６】
次に、メインプロセッサ１１がインターフェース制御部１２を経由して、複数の転送命令（転送記述子）をサブプロセッサ２０のDMA転送ユニット２２内の転送記述子バッファ２３内に格納してセットする（S1）。そして、メインプロセッサがインターフェース制御部１２を経由して、サブプロセッサ２０のDMA転送ユニット２２に転送開始指示を送信する（S2）。
【００３７】
この転送開始指示S2に応答して、サブプロセッサ２０のDMA転送制御部２４が、転送記述子バッファ２３から先頭の転送命令である転送記述子を読み出し（S3）、転送命令の転送情報に基づいて、メインメモリ１４内の命令列を内部メモリ３０の転送先アドレスの位置にDMA転送する（S5）。１回のDMA転送の転送長は、例えば、図３の例のように２５６バイトである。DMA転送制御部２４は、１回分のDMA転送が完了すると転送ポインタを更新する（S6）。転送ポインタの更新処理は、図３で説明したとおりである。
【００３８】
１回のDMA転送が完了すると、DMA転送制御部２４は、その転送命令（転送記述子）のチェインフラグCH_FLGが有効「１」か否かチェックする（S7）。チェインフラグが有効「１」の場合（S7のYES）、DMA転送制御部２４は、転送記述子バッファ２３から次ディスクリプトアドレスN_DIS_ADDに記憶されている次の転送記述子を読み出し（S3）、同様の処理S4-S7を実行する。
【００３９】
図６，図７には、上記の１回のDMA転送が、サブプロセッサ２０のDMA転送ユニット２２がメインメモリ１４の命令（データ）を読み出し（read）、読み出した命令（データdata）を内部メモリ３０に書き込む処理で示される。このメインメモリ１４の命令の読み出しreadと、読み出した命令（データdata）を内部メモリ３０に書き込む処理が、各DMA転送TRNS_1〜TRNS_8に対応する。
【００４０】
また、命令実行制御回路２５は、DMA転送制御部２４により転送記述子バッファから読み出された転送記述子の実行フラグEX_FLGが有効「１」か否か判定する（S4）。実行フラグEX_FLGが有効「１」の場合（S4のYES）、命令実行制御回路２５は、プログラムカウンタPCのカウント動作と、命令フェッチ回路２６の命令フェッチの開始を指示する（S10）。この開始指示に応答して、命令発行部２１内の命令フェッチ回路２６が内部メモリ３０内の命令をフェッチし、命令デコーダ２７に入力し、命令デコーダがデコードした命令を算術論理演算器２９に発行する。更に、算術論理演算器の命令の実行終了に応答して、プログラムカウンタPCがカウント値を更新し、命令の実行完了処理を行う。また、更新されたPCに基づいてフェッチアドレス生成部２８が次のフェッチアドレスを生成する。これにより、サブプロセッサ２０は命令列の実行を開始する（S11）。
【００４１】
図６、図７では、５回目のDMA転送TRNS_5のための転送命令内の有効な実行フラグEX_FLGに基づいて、５回目のDMA転送のメインメモリへの読み出しreadのタイミングで、サブプロセッサ２０の命令発行部２１の命令フェッチ回路が命令のフェッチを開始し、サブプロセッサによる命令の実行が開始されている。
【００４２】
図５に戻り、サブプロセッサ２０の命令発行部２１と算術論理演算器２９は、命令フェッチ、命令デコード、算術論理演算器の演算、プログラムカウンタPCのカウント動作による命令実行S11を命令列の実行が完了するまで繰り返す（S12のNO）。この命令実行S11の繰り返し中、命令実行制御回路２５は、転送ポインタTRNS_PTRとフェッチアドレスF_ADDとを比較して、転送ポインタTRNS_PTR＞フェッチアドレスF_ADDか否かの判定を繰り返す（S13）。転送ポインタTRNS_PTR＞フェッチアドレスF_ADD（フェッチアドレスが転送ポインタに追いついていない状態）であれば（S13のYES）、命令実行制御回路２５は、プログラムカウンタPCのカウント動作と命令フェッチ回路２６の命令フェッチの実行S11を継続させる。一方、転送ポインタTRNS_PTR＝フェッチアドレスF_ADD（フェッチアドレスが転送ポインタに追いついた状態）場合（S13のNO）、命令実行制御回路２５は、プログラムカウンタPCの停止と命令フェッチ回路の命令フェッチの停止をそれぞれ指示する。
【００４３】
その後、DMA転送が行われ、再度転送ポインタTRNS_PTR＞フェッチアドレスF_ADD（転送ポインタがフェッチアドレスを追い越した状態）となれば（S13のYES）、命令実行制御回路２５は、プログラムカウンタPCのカウント動作の再開と、命令フェッチ回路２６による命令フェッチの実行S11の再開を指示する。
【００４４】
図７の例では、サブプロセッサによる命令の実行が一時的に停止し中断している。そして、その後、サブプロセッサによる命令の実行が再開されている。
【００４５】
図５に戻り、サブプロセッサ２０のDMA転送ユニット２２のDMA転送制御部２４は、転送命令のチェインフラグCH_FLGが無効「０」になると（S7のNO）、DMA転送が完了したことをメインプロセッサに通知する。また、サブプロセッサ２０は、一連の命令列による命令が完了すると（S12のYES、S8のYES）、メインプロセッサに特定処理の命令の実行完了を通知する。この命令の実行完了通知に応答して、メインプロセッサは、サブプロセッサ内の内部メモリ３０に記憶されている演算結果を読み出し、メインメモリ１４に演算結果のデータを転送する（S9）。この演算結果の回収は、メインプロセッサ１１による内部メモリ３０からメインメモリ１４へのDMA転送処理である。
【００４６】
上記の第１の実施の形態では、命令の実行と再開をプログラムカウンタのカウント動作の開始と命令フェッチ回路の命令フェッチ動作の開始により行い、命令の一時停止を両動作の一時停止により行った。但し、命令の実行と再開をプログラムカウンタのカウント動作の開始により行い、命令の一時停止をプログラムカウンタのカウント動作の一時停止により行うようにしても良い。プログラムカウンタが開始または停止することで、命令フェッチ動作も開始または停止することができる。
【００４７】
［第２の実施の形態］
図８は、第２の実施の形態におけるメインプロセッサとサブプロセッサとを示す図である。メインプロセッサ１１は、メインメモリ１４にアクセス可能に接続される。メインプロセッサ１１は、メインメモリ１４内に記憶されている命令列をフェッチし、命令列に対応する処理を実行する。また、メインプロセッサ１１は、メインメモリ１４内に特定の命令列を書き込み、サブプロセッサ２０に実行させる。
【００４８】
サブプロセッサ２０は、複数のコア（演算ユニット）CORE_0〜CORE_2と、メインメモリ１４内の特定の命令列の各コアへの転送を制御するデータ転送制御部（第１の転送制御部）３４を有する。データ転送制御部（第１の転送制御部）３４は、メインメモリ１４内のデータ（命令やデータ）を各コアに転送制御し、逆に、各コアが命令実行により生成したデータをメインメモリ１４に転送制御する。
【００４９】
例えば、上記のコアCOREとメインメモリ１４間での命令またはデータの転送制御は、メインプロセッサ１１が命令またはデータの転送命令を、命令制御部３６内の転送記述子バッファ３７に設定することで行われる。この転送命令は、第１の実施の形態の転送記述子と同様である。そして、メインプロセッサ１１は、複数の転送命令を転送記述子バッファ３７に設定する。但し、第２の実施の形態では、サブプロセッサ内の複数のコアのうちどのコアの内部メモリ３０に転送すべきかの情報が、転送先アドレスDADDに含められる。
【００５０】
そして、メインプロセッサが、命令制御部３６に転送開始指示を送信すると、それに応答して、サブプロセッサ２０内の命令制御部３６が、データ転送制御部（第１の転送制御部）３４に転送記述子バッファ３７内の転送命令の実行を指示する。データ転送制御部３４は、転送記述子バッファ３７内の転送命令を順番に実行し、メモリコントローラ３５を介して、メインメモリ１４内の転送元アドレスの命令列を読み出し、転送先コアのインターフェース回路３１を経由して、転送先コアの内部メモリ３０内の転送先アドレスに命令列を送信する。
【００５１】
この転送される命令列には、図８中に示されるとおり、転送先アドレスDADDと、転送命令（転送記述子）に付加されている実行フラグEX_FLGとが付加される。
【００５２】
命令発行部２１内の命令実行制御回路２５は、転送対象の命令列に付加された実行フラグEX_FLGをチェックする。命令実行制御回路２５は、実行フラグEX_FLGが有効の場合、プログラムカウンタPCのカウント動作の開始と命令フェッチ回路２６の命令フェッチの開始をそれぞれ指示する。これにより、命令フェッチ回路２６は、複数の転送命令による命令列の転送が全て完了する前の段階で、サブプロセッサ２０による内部メモリ３０内に格納済みの命令列の実行を開始させることができる。
【００５３】
また、インターフェース回路（第２の転送制御部）３１は、転送命令に基づく命令列の転送が完了するたびに、内部メモリ３０内の転送ポインタTRNS_PTRを更新する。転送ポインタの更新処理は、第１の実施の形態と同様である。転送ポインタTRNS_PTRを更新するために、データ転送制御部３４から転送される命令列に、転送先アドレスDADDに加えて転送長LNGを付加してもよい。
【００５４】
そして、命令発行部２１内の命令実行制御回路（実行制御部）２５は、更新された転送ポインタTRNS_PTRと命令フェッチアドレスF_ADDとを比較する。命令フェッチ制御部は、TRNS_PTR＞F_ADDであれば、プログラムカウンタPCのカウント動作と、命令フェッチ回路２６による命令フェッチを許可し、TRNS_PTR＝F_ADDになれば、プログラムカウンタPCのカウント動作と命令フェッチとを停止するよう制御する。プログラムカウンタPCのカウント動作が停止することで特定命令の命令列の実行が停止し、更に、命令フェッチが停止することで未転送命令をフェッチすることが回避される。命令フェッチアドレスと転送ポインタとの比較に基づくプログラムカウンタPCのカウント動作の許可と停止及び命令フェッチの許可と停止の制御は、第１の実施の形態と同じである。
【００５５】
図８中の各コア内の命令発行部２１内の命令フェッチ回路２６、命令デコーダ２７、フェッチアドレス生成部２８、命令実行制御回路２５と、算術論理演算器２９とプログラムカウンタPCは、図１の第１の実施の形態の命令発行部２１内の命令フェッチ回路２６、命令デコーダ２７、フェッチアドレス生成部２８、命令実行制御回路２５と、算術論理演算器２９とプログラムカウンタPCと同様の構成である。図８の第２の実施の形態では、メインプロセッサ１１から設定される転送命令を格納する転送記述子バッファ３７を有する命令制御部３６と、データ転送制御部３４とが、コアの外側に設けられていることが、図１の例と異なる。
【００５６】
［第３の実施の形態］
図９は、第３の実施の形態における演算処理装置の構成例を示す図である。図９のサブプロセッサ２０は、図１のサブプロセッサと異なり、命令実行制御回路２５が、プログラムカウンタPCのカウント値と転送ポインタTRNS_PTRとを比較し、サブプロセッサの命令実行を開始、停止、再開の制御を行う。
【００５７】
プロセッサ２０の命令発行部２１と算術論理演算器２９とプログラムカウンタPCの動作は、前述したとおり、以下のとおりである。プログラムカウンタPCが更新されると、更新されたプログラムカウンタPCのカウント値（命令のアドレス）に基づいて、フェッチアドレス生成部２８がフェッチアドレスF_ADDを生成する。フェッチアドレスF_ADDは、最悪プログラムカウンタPCと同じアドレスでも良いが、命令発行部２１や算術論理演算器２９のパイプライン構成を考慮して、プログラムカウンタPCより所定アドレスだけ先のアドレスになる。
【００５８】
そして、フェッチされた命令が命令デコーダ２７でデコードされ、算術論理演算器２９がデコードされた命令を実行する。命令の実行が完了すると、プログラムカウンタPCが更新される。プログラムカウンタPCの更新処理は、例えば、命令発行部２１内の図示しない命令完了処理部により行われる。その後の処理は、上記の通りである。
【００５９】
このように、プログラムカウンタPCのカウント値（アドレス）は、プロセッサが実行中の命令のうち最先にフェッチされた命令のアドレスである。したがって、プログラムカウンタPCのカウント値が転送ポインタTRNS_PTRより小さい値であれば、最先の実行中の命令（プログラムカウンタPCが指し示す命令）は、転送済み命令である。
【００６０】
そこで、図９のサブプロセッサ２０の命令実行制御回路２５は、プログラムカウンタPCのカウント値と転送ポインタTRNS_PTRとを比較し、PC＜TRNS_PTRであれば、プログラムカウンタPCのカウント動作と命令フェッチ動作を許可して算術論理演算を実行させ、一方、PC＝TRNS_PTRになれば、プログラムカウンタPCのカウント動作と命令フェッチ動作を停止して算術論理演算を停止させる。
【００６１】
図１０は、第３の実施の形態におけるプログラムカウンタPCと転送ポインタTRNS_PTRとの関係を示す図である。図１０の（１）は、PC＜TRNS_PTRの状態であり、プログラムカウンタPCは転送済み命令INST1を指し示し、転送ポインタTRNS_PTRは未転送命令INST2を指し示す。一方、図１０の（２）は、PC＝TRNS_PTRとプログラムカウンタPCが転送ポインタTRNS_PTRに追いついた状態であり、プログラムカウンタPCも転送ポインタTRNS_PTRも未転送命令INST2を指し示す。この状態でプロセッサを命令発行部２１と算術論理演算器２９の動作を許可すると、算術論理演算器２９は未転送の命令を実行することになり、禁止すべきである。
【００６２】
そこで、図９のサブプロセッサ２０では、転送記述子バッファ２３から読み出した転送記述子内の実行フラグEX_FLGが有効になっている場合、PC＜TRNS_PTRであれば、命令実行制御回路２５が、プログラムカウンタPCのカウント動作と命令フェッチ回路の命令フェッチ動作とを開始させ、転送済み命令の実行を開始させる。
【００６３】
そして、転送済み命令の実行中にプログラムカウンタPCが転送ポインタTRNS_PTRに追いつき、PC＝TRNS_PTRとなれば、命令実行制御回路２５は、プログラムカウンタPCのカウント動作を停止し、命令の実行を停止する。その後、再度PC＜TRNS_PTRとなれば、命令の実行を再開する。
【００６４】
但し、算術論理演算器２９などはフェッチされた命令をパインプライン処理しているので、命令実行制御回路２５が、PC＝TRNS_PTRを検出してから、プログラムカウンタPCの動作を停止するように制御すると、タイミング的に算術論理演算器２９により処理された命令の完了処理によりプログラムカウンタPCが更新される場合がある（第１の理由）。
【００６５】
また、図１０の（２）に示されるとおり、命令フェッチアドレスF_ADDは、プログラムカウンタPCより所定アドレスだけ先行するアドレスであるので、未転送命令INST2〜INST5がフェッチされ、命令デコーダ２７と算術論理演算器２９のパイプライン回路内でパイプライン処理中の可能性がある。その結果、PC＜TRNS_PTRを検出して命令の実行を再開するとき、パイプライン回路内の状態をクリアし、再度、プログラムカウンタPCのアドレスの命令からフェッチ、デコード、実行という動作を行う必要がある（第２の理由）。
【００６６】
上記の２つの理由から、第３の実施の形態の好ましい例では、命令実行制御回路２５が、プログラムカウンタPCと、転送ポインタTRNS_PTRから所定の減算ポイントSUB_PTRを減算したポインタ値とを比較し、PC＜TRNS_PTR−SUB_PTRであれば、プログラムカウンタPCのカウント動作と命令フェッチ回路２６の命令フェッチ動作とを許可し、PC＝TRNS_PTR−SUB_PTRであれば、禁止する。
【００６７】
図１１は、プログラムカウンタPCと、転送ポインタから減算ポイントを減算した値TRNS_PTR-SUB_PTRの関係を示す図である。図１１の（１）の状態は、PC＜TRNS_PTR-SUB_PTRである。ここで、減算ポイントSUB_PTRは、命令実行制御回路２５がPC＝TRNS_PTR−SUB_PTRを検出した後にプログラムカウンタPCを適切に停止できる程度の値であることが望ましい。そのような減算ポイントに設定されると、算術論理演算器が転送済命令の完了処理を実行している間に、プログラムカウンタPCを停止制御することができる。これにより、上記した第１の理由が解消される。
【００６８】
更に、（１）減算ポイントSUB_PTRは、例えば、プログラムカウンタPCと命令フェッチアドレスF_ADDとの差分DIVと等しい値（SUB_PTR＝DIV）であることが好ましい。または、（２）減算ポイントSUB_PTRは、例えば、プログラムカウンタPCと命令フェッチアドレスF_ADDとの差分DIVの上限値DIV_MAXと等しい値（SUB_PTR＝DIV_MAX）であることが好ましい。
【００６９】
前述したとおり、一般に、命令フェッチアドレスF_ADDは、プログラムカウンタPCとの差分DIVが所定の上限値DIV_MAX以内に制御されることがある。したがって、少なくとも上記（２）のように、SUB_PTR＝DIV_MAXに設定することで、図１１の（２）のPC＝TRNS_PTR−SUB_PTRを検出したときにプログラムカウンタPCを停止し、命令フェッチも停止することで、未転送の命令がフェッチされて、デコードされ、演算器で実行されてしまうことを防止できる。その結果、図１１の（１）のPC＜TRNS_PTR-SUB_PTRの状態で、プログラムカウンタPCの動作を再開するとき、パイプライン状態をクリアする必要がなくなる。これにより、上記した第２の理由が解消される。
【００７０】
第３の実施の形態において、プログラムカウンタPCと比較される値（TRNS_PTR−SUB_PTR）の計算は、以下のとおりである。
TRNS_PTR_1 - SUB_PTR =転送先アドレス「0」+ 転送長「256」-「100」＝156
TRNS_PTR_2 - SUB_PTR =転送先アドレス「256」+転送長「256」-「100」＝412
TRNS_PTR_3 - SUB_PTR =転送先アドレス「512」+転送長「256」-「100」＝668
TRNS_PTR_4 - SUB_PTR =転送先アドレス「768」+転送長「256」-「100」＝924
TRNS_PTR_5 - SUB_PTR =転送先アドレス「1024」+転送長「256」-「100」＝1180
TRNS_PTR_6 - SUB_PTR =転送先アドレス「1280」+転送長「256」-「100」＝1236
TRNS_PTR_7 - SUB_PTR =転送先アドレス「1536」+転送長「256」-「100」＝1692
TRNS_PTR_8 =転送先アドレス「1792」+転送長「256」＝2048
最終転送時には、減算ポイントSUB_PTRを減じていない理由は、すべての命令転送が完了したときに転送ポイントに減算ポイントを減じてプログラムカウンタPCと比較すると、プログラムカウンタPCが最後尾の命令より手前の命令のアドレスで停止してしまい、プログラムが最後まで実行されなくなるからである。
【００７１】
［第４の実施の形態］
図１２は、第４の実施の形態における演算処理装置の構成例を示す図である。図１２のサブプロセッサ２０は、図８のサブプロセッサと異なり、命令実行制御回路２５が、プログラムカウンタPCのカウント値と転送ポインタTRNS_PTRとを比較し、サブプロセッサの命令実行を開始、停止、再開の制御を行う。
【００７２】
そのため、図１２の命令実行制御回路２５には、転送ポインタTRNS_PTRとプログラムカウンタPCのカウント値が入力されている。
【００７３】
図１２の演算処理装置は、命令実行制御部２５のプログラムカウンタPCのカウント値と転送ポインタTRNS_PTRとの比較を除いて、図８の演算処理装置と同じ構成を有する。
【００７４】
図１２の演算処理装置においても、命令実行制御回路２５が、プログラムカウンタPCのカウント値と、転送ポインタTRNS_PTRから減算ポイントSUB_PTRを減じた値TRNS_PTR−SUB_PTRとを比較し、サブプロセッサの命令実行を開始、停止、再開の制御を行うようにしてもよい。その理由は、第３の実施の形態で説明したのと同じである。
【００７５】
以上の通り、第１乃至第４の実施の形態によれば、メインプロセッサが特定の命令列をサブプロセッサに転送完了する前に、サブプロセッサが特定の命令列の実行を開始することができる。また、命令の転送に特定の命令列の実行が追いつくと、開始された命令列の実行を一時的に停止することができ、停止中に命令の転送が進むと、命令の実行を再開できる。
【符号の説明】
【００７６】
１１：メインプロセッサ、CPU
２０：サブプロセッサ、演算処理装置、CPU
２２：ＤＭＡ転送ユニット
２３：転送記述子バッファ
２４：ＤＭＡ転送制御部
２５：命令実行制御回路
２６：命令フェッチ回路
２９：算術論理演算器
PC：プログラムカウンタ
TRNS_PTR：転送ポインタ
F_ADD：フェッチアドレス
３０：内部メモリ
１４：第１のメモリ
【図１】
2020038502.tif 000003
【図２】
2020038502.tif 000004
【図３】
2020038502.tif 000005
【図４】
2020038502.tif 000006
【図５】
2020038502.tif 000007
【図６】
2020038502.tif 000008
【図７】
2020038502.tif 000009
【図８】
2020038502.tif 000010
【図９】
2020038502.tif 000011
【図１０】
2020038502.tif 000012
【図１１】
2020038502.tif 000013
【図１２】
2020038502.tif 000014