(57)【要約】【課題】処理効率を向上させることが可能なマルチスレッド処理装置を提供すること。【解決手段】複数のスレッドによりハードウエア・マルチスレッディング処理が行われるマルチスレッド処理装置であって、前記複数のスレッドは、特定の共有アクセス対象へのアクセス処理を行う際には、該特定の共有アクセス対象へのアクセス処理を行う専用スレッドに、アクセス処理の代行を依頼することを特徴とする、マルチスレッド処理装置。【選択図】図２
2012113487.tif 000002
【特許請求の範囲】
【請求項１】
複数のスレッドによりハードウエア・マルチスレッディング処理が行われるマルチスレッド処理装置であって、
前記複数のスレッドは、特定の共有アクセス対象へのアクセス処理を行う際には、該特定の共有アクセス対象へのアクセス処理を行う専用スレッドに、前記特定の共有アクセス対象へのアクセス処理の代行を依頼することを特徴とする、
マルチスレッド処理装置。
【請求項２】
請求項１に記載のマルチスレッド処理装置であって、
前記複数のスレッドは、前記専用スレッドに前記特定の共有アクセス対象へのアクセス処理の代行を依頼する際に、前記専用スレッドが起動していない場合には前記専用スレッドの起動指示を行うと共に前記アクセス処理の代行に係るタスクの追加を行い、前記専用スレッドが起動している場合には前記アクセス処理の代行に係るタスクの追加を行うことを特徴とする、
マルチスレッド処理装置。
【請求項３】
請求項１又は２に記載のマルチスレッド処理装置であって、
前記複数のスレッド、及び前記専用スレッドに対する実行時間の割り当て比率を変更可能であることを特徴とする、
マルチスレッド処理装置。
【請求項４】
請求項３に記載のマルチスレッド処理装置であって、
前記実行時間の割り当て比率の変更は、前記複数のスレッドのうち、前記特定の共有アクセス対象へのアクセス処理の代行を依頼するスレッドによって行われることを特徴とする、
マルチスレッド処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のスレッドが各自に処理を行うマルチスレッド処理装置に関し、特に、複数のスレッドによりハードウエア・マルチスレッディング処理を行うマルチスレッド処理装置に関する。
【背景技術】
【０００２】
近年、プロセッサの性能向上に伴い、複数の機能を一つのプロセッサにより実現させるための技術が研究・実用化されている。例えば、車両に搭載される車載制御装置の分野では、ある車載機器を制御する制御装置と他の車載機器を制御する制御装置（例えば変速機の制御装置とエンジンの制御装置等）を統合して、コンピュータ・ハードウエアを縮小し、コストや重量の低減を図る動きが見られる。
【０００３】
こうしたハードウエア統合の一手法として、ハードウエア・マルチスレッディング処理と称されるものが知られている。ハードウエア・マルチスレッディング処理は、命令バッファや演算結果の格納場所（レジスタ）等を異にする複数のスレッドが、命令デコーダや演算回路等のハードウエアの一部を共有して処理を行なうものである。
【０００４】
ハードウエア・マルチスレッディング処理を行うマルチスレッド処理装置には、通常のコンピュータと同様、ＲＡＭ等の記憶装置やＩ／Ｏ等のアクセス対象が存在する。こうしたアクセス対象には、一のスレッドのみがアクセス可能となるように制御される。このため、複数のスレッドが、時分割で並行処理している最中に同一のアクセス対象にアクセスしようとした場合、後にアクセス要求を出したスレッドが処理待ち状態となる。このため、処理待ち状態となったスレッドに対して供給されるクロックが無駄となる場合があった。
【０００５】
一方、特許文献１には、上位装置からのライト命令に対応して下位装置であるディスクドライブ装置に対しライト命令のタスクを実行するディスクコントローラについて記載されている。このディスクコントローラでは、ライト命令の実行中のエラーを発見したときに、優先度の高い代替処理用タスクを発生させて、エラー処理を行わせるものとしている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平２−１７３９８３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上記特許文献１に記載のディスクコントローラは、エラーが発生した場合にのみ代替処理を発生させるため、エラーが発生しない通常処理状態において、処理効率を向上させることができない。
【０００８】
また、上記特許文献１に記載のディスクコントローラにおける時分割マルチタスクシステムは、そもそもハードウエア・マルチスレッディングを前提としていない上、代替処理用タスクは、あくまでエラー処理を行うものであり、ハードウエア・マルチスレッディング処理を行うマルチスレッド処理装置において共有アクセス対象へのアクセスを代替処理するものではない。
【０００９】
本発明はこのような課題を解決するためのものであり、処理効率を向上させることが可能なマルチスレッド処理装置を提供することを、主たる目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するための本発明の一態様は、
複数のスレッドによりハードウエア・マルチスレッディング処理が行われるマルチスレッド処理装置であって、
前記複数のスレッドは、特定の共有アクセス対象へのアクセス処理を行う際には、該特定の共有アクセス対象へのアクセス処理を行う専用スレッドに、前記特定の共有アクセス対象へのアクセス処理の代行を依頼することを特徴とする、
マルチスレッド処理装置である。
【００１１】
この本発明の一態様によれば、特定の共有アクセス対象へのアクセス処理を行う際には、該特定の共有アクセス対象へのアクセス処理を行う専用スレッドに、アクセス処理の代行を依頼するため、アクセス処理の代行を依頼したスレッドは、当該アクセス処理が終了するまでの間、他の一般処理を行うことができる。この結果、処理効率を向上させることができる。
【００１２】
本発明の一態様において、
前記複数のスレッドは、前記専用スレッドに前記特定の共有アクセス対象へのアクセス処理の代行を依頼する際に、前記専用スレッドが起動していない場合には前記専用スレッドの起動指示を行うと共に前記アクセス処理の代行に係るタスクの追加を行い、前記専用スレッドが起動している場合には前記アクセス処理の代行に係るタスクの追加を行うことを特徴とするものとしてもよい。
【００１３】
また、本発明の一態様において、
前記複数のスレッド、及び前記専用スレッドに対する実行時間の割り当て比率を変更可能であることを特徴とするものとすると、好適である。
【００１４】
こうすれば、代行依頼されるアクセス処理が、どの程度の実行時間を要するのかに応じて、複数のスレッド、及び専用スレッドに対する実行時間の割り当て比率を適切に決定することができる。
【００１５】
この場合、
前記実行時間の割り当て比率の変更は、前記複数のスレッドのうち、前記特定の共有アクセス対象へのアクセス処理の代行を依頼するスレッドによって行われることを特徴とするものとすると、更に好適である。代行依頼されるアクセス処理が、どの程度の実行時間を要するのかを最もよく把握しているのは、当該代行依頼を行うスレッドだからである。
【発明の効果】
【００１６】
本発明によれば、処理効率を向上させることが可能なマルチスレッド処理装置を提供することができる。
【図面の簡単な説明】
【００１７】
【図１】本発明の一実施例に係るマルチスレッド処理装置１のシステム構成例である。
【図２】スレッド＃１、＃２、及びアクセス専用スレッド＃ｋが、それぞれ複数のタスクを実行している状態を模式的に示す図である。
【図３】各スレッドが、アクセス専用スレッド＃ｋにアクセス処理の代行を依頼する際の処理の流れを示すフローチャートである。
【図４】アクセス専用スレッド＃ｋにより実行される処理の流れを示すフローチャートである。
【図５】従来のマルチスレッド処理装置による動作例を示す図である。
【図６】本実施例のマルチスレッド処理装置１による動作例を示す図である。
【図７】本実施例のマルチスレッド処理装置１による他の動作例を示す図である。
【図８】従来のマルチスレッド処理装置による動作例を示す図である。
【図９】本実施例のマルチスレッド処理装置１による動作例を示す図である。
【図１０】本実施例のマルチスレッド処理装置１による他の動作例を示す図である。
【発明を実施するための形態】
【００１８】
以下、本発明を実施するための形態について、添付図面を参照しながら実施例を挙げて説明する。
【実施例】
【００１９】
以下、図面を参照し、本発明の一実施例に係るマルチスレッド処理装置１について説明する。
【００２０】
［構成］
図１は、本発明の一実施例に係るマルチスレッド処理装置１のシステム構成例である。マルチスレッド処理装置１は、主要な構成として、プログラムメモリ１０と、命令フェッチバス１５と、命令フェッチユニット２０と、命令バッファ２２＃１〜２２＃ｎと、命令デコーダ２４と、命令発行部２６と、レジスタ２８＃１〜２８＃ｎと、演算器３０と、ＬＳＵ３２と、制御装置４０と、特定共有アクセス対象５０と、データバス５５と、を備える。
【００２１】
なお、本実施例では、二以上の任意の数であるスレッド数（後述するアクセス専用スレッドを含む）がｎであるとし、「＃」の後の数字がスレッドナンバーを示すものとする。また、図１に示す構成は、ハードウエア・マルチスレッディング処理を行うための一般的な構成を例示したものであり、ハードウエア・マルチスレッディング処理を行うことが可能な構成であれば、任意の構成要素を置換、削除、追加等してよい。
【００２２】
ハードウエア・マルチスレッディング処理とは、複数のスレッドが、命令デコーダや演算回路等のハードウエアの一部を共有して処理を行なうものである。スレッドとは、ハードウエアを部分的に共有して処理を行なう仮想的な処理主体をいう。本実施例では、命令バッファやレジスタはスレッド毎に用意されているが、その他の構成要素はスレッド間で共用されるものとする。
【００２３】
プログラムメモリ１０は、例えばフラッシュＲＯＭ（Read Only Memory）であり、各スレッドが実行するプログラム（命令列）を格納する。プログラムメモリ１０は、命令フェッチユニット２０から命令の格納場所を示すアドレスが入力されると、当該アドレスに格納された命令を出力する。
【００２４】
命令フェッチユニット２０は、スレッド毎のプログラムカウンタを内蔵し、命令フェッチバス１５を介してプログラムメモリ１０から命令をフェッチし、命令バッファ２２＃１〜２２＃ｎのうち、スレッドに対応した命令バッファに格納する。
【００２５】
すなわち、スレッド＃１が実行する命令をフェッチした場合は命令バッファ２２＃１に命令を格納し、スレッド＃２が実行する命令をフェッチした場合は命令バッファ２２＃２に命令を格納する。
【００２６】
命令バッファ２２＃１〜２２＃ｎは、例えばＦＩＦＯ（First In, First Out）に従って命令を入出力するように制御される。
【００２７】
命令デコーダ２４は、いずれかの命令バッファから供給される命令を解読（デコード）し、命令発行部２６に出力する。命令デコーダ２４による解読結果は、例えば、演算の種別、ソースオペランド、結果の格納場所等である。
【００２８】
命令発行部２６は、命令デコーダ２４から入力された命令に従ってレジスタ２８＃１〜２８＃ｎから演算対象値等を取得し、演算器３０やＬＳＵ３２に出力する。
【００２９】
演算器３０は、スレッドの要求に応じて、四則演算その他の演算処理を行う。一方、ＬＳＵ３２は、スレッドの要求に応じて、ストア命令やロード命令を実行する。
【００３０】
制御装置４０は、これらの動作全体を制御する。具体的には、内部クロックの立ち上がり等に応じて、命令フェッチユニット２０、命令デコーダ２４、命令発行部２６、演算器３０、ＬＳＵ３２等を作動させる。
【００３１】
また、制御装置４０は、スレッドの切り替えを制御している。例えば、スレッド＃１の処理を１クロック分行わせると、次にスレッド＃２の処理を１クロック分行わせ、次にスレッド＃１の処理を１クロック分行わせる等の切り替え制御を行っている。これらのスレッド処理時間の割り当ては、任意に設定することが可能であり、制御装置４０は、その設定状態を保持するための設定保持用レジスタ４２を内蔵するものとしてよい。
【００３２】
特定共有アクセス対象５０は、データバス５５を介してＬＳＵ３２等によりアクセスされる特定の機器群であり、例えばＥＥＰＲＯＭ（Electrically  Erasable  and  Programmable  Read  Only  Memory）やＲＡＭ（Random  Access  Memory）等のデータメモリ、Ｉ／Ｏ、ＣＡＮ（Controller  Area  Network）コントローラ等が該当し得る。Ｉ／Ｏとは、例えばＩ／Ｏポートやその制御装置を含む。
【００３３】
［アクセス代行依頼］
本実施例におけるスレッドは、複数のタスク（ある程度の機能的まとまりを有する命令群をいう）を、並行して、或いは所望の順序で実行可能となっている。
【００３４】
ところで、スレッドが実行するタスクには、演算器３０による演算を行ってレジスタ２８＃１〜２８＃ｎに格納する等、処理時間が比較的短く、且つデータバス５５に対するアクセスを含まないものと、データバス５５を介して特定共有アクセス対象５０にアクセスする、処理時間の比較的長いものとが混在する。
【００３５】
本実施例におけるスレッドは、特定共有アクセス対象５０へのアクセス処理を行う際には、特定共有アクセス対象５０へのアクセス処理を行う専用スレッドに、アクセス処理の代行を依頼する。以下、係る専用スレッドを「アクセス専用スレッド」と称する。
【００３６】
なお、図１では示していないが、特定共有アクセス対象５０以外にも、データバス５５その他のバスを介してアクセスするアクセス対象（以下、「非特定アクセス対象」と称する）が存在してもよく、この非特定アクセス対象について各スレッドは、アクセス専用スレッドにアクセス処理の代行を依頼しないものとしてよい。
【００３７】
非特定アクセス対象が存在する場合、種々のアクセス対象を、特定共有アクセス対象５０と非特定アクセス対象のいずれとして扱うかは、システムの仕様に応じて任意に決定してよい。
【００３８】
図２は、スレッド＃１、＃２、及びアクセス専用スレッド＃ｋが、それぞれ複数のタスクを実行している状態を模式的に示す図である。本図においてスレッド＃１により実行されるタスク１０、及びスレッド＃２により実行されるタスク２１は、特定共有アクセス対象５０へのアクセス処理であり、スレッド＃１により実行されるタスク１１、及びスレッド＃２により実行されるタスク２０は、特定アクセス処理以外の処理である。以下、特定共有アクセス対象５０へのアクセス処理を「特定アクセス処理」と称し、それ以外の処理を「一般処理」と称する。一般処理は、上記非特定アクセス対象へのアクセス処理を含むものとしてもよいし、含まないものとしてもよい。
【００３９】
図２において、破線矢印は、従来のマルチスレッド処理装置におけるデータアクセスを示している。従来のマルチスレッド処理では、各スレッドが独自に特定共有アクセス対象５０へのアクセス処理を行っていた。このため、後述するように、無駄なクロックがスレッドに割り当てられ、処理効率が低下する場合があった。
【００４０】
これに対し、本実施例のマルチスレッド処理装置では、アクセス専用スレッドでない各スレッドは（以下、「各スレッド」と表記した場合、アクセス専用スレッドを除外するものとする）、特定共有アクセス対象５０へのアクセス処理を行う際にはアクセス専用スレッド＃ｋにアクセス処理の代行を依頼し、アクセス専用スレッド＃ｋのみが特定共有アクセス対象５０へのアクセス処理を行うように制御される。図２における実線は、本実施例のマルチスレッド処理装置１におけるデータアクセスを示している。
【００４１】
この結果、アクセス処理の代行を依頼したスレッドは、当該アクセス処理が終了するまでの間、他の一般処理を行うことができる。従って、処理効率を向上させることができる。
【００４２】
［処理フロー］
以下、各スレッドがアクセス専用スレッド＃ｋにアクセス処理の代行を依頼する際の処理の流れ、及びアクセス専用スレッド＃ｋにおける処理の流れについて説明する。
【００４３】
図３は、各スレッドが、アクセス専用スレッド＃ｋにアクセス処理の代行を依頼する際の処理の流れを示すフローチャートである。本フローは、各スレッドが特定共有アクセス対象５０にアクセスしようとするタイミングで開始される。
【００４４】
まず、各スレッドは、アクセス専用スレッド＃ｋが起動済みであるか否かを判定する（Ｓ１００）。
【００４５】
アクセス専用スレッドが起動済みでない場合は、アクセス専用スレッド＃ｋを起動するように制御装置４０に指示する（Ｓ１０２）。
【００４６】
そして、自スレッド用のアクセス処理タスクを追加するようにアクセス専用スレッド＃ｋに通知する（Ｓ１０４）。
【００４７】
このように、各スレッドは、アクセス専用スレッド＃ｋが起動済みでない場合はアクセス専用スレッド＃ｋの起動及びタスクの追加を指示し、アクセス専用スレッド＃ｋが既に起動済みである場合はタスクの追加のみを指示する。
【００４８】
図４は、アクセス専用スレッド＃ｋにより実行される処理の流れを示すフローチャートである。本フローは、アクセス専用スレッド＃ｋに動作クロックが割り当てられた度に繰り返し実行される。
【００４９】
まず、当該動作クロックにおいて、実行中のアクセス処理タスクが終了したか否かを判定する（Ｓ２００）。当該動作クロックにおいて、実行中のアクセス処理タスクが終了しなかった場合は、本フローの１ルーチンを終了する。
【００５０】
実行中のアクセス処理タスクが終了した場合は、別のアクセス処理タスクが待ち状態となっているか否かを判定する（Ｓ２０２）。別のアクセス処理タスクが待ち状態となっている場合は、当該アクセス処理タスクを終了し、次回のルーチンでは待ち状態となっているアクセス処理タスクを実行する（Ｓ２０４）。
【００５１】
ここで、アクセス処理タスクは、アクセス専用スレッドが有する待ちキュー等に格納され、ＦＩＦＯに従って順に実行されるものとしてもよいが、各タスクからの割り込み指示によって即時実行されるように設定することもできる。
【００５２】
一方、別のアクセス処理タスクが待ち状態となっていない場合は、当該アクセス処理タスクを終了すると共に、アクセス専用スレッド＃ｋ自体を終了する（Ｓ２０６）。
【００５３】
この際に、アクセス専用スレッド＃ｋを終了するのではなく、アイドルタスクとして存続させてもよい（クロック割り当てを非常に低くして存続させる）。こうすれば、アクセス専用スレッド＃ｋの起動及び終了に要する時間や負荷等を低減することができる。
【００５４】
［動作比率の変更］
また、本実施例のマルチスレッド処理装置１では、アクセス処理の代行依頼、或いはアクセス専用スレッドの起動及び終了に伴って、スレッドの動作比率を任意に変更することができる。例えば、アクセス処理の代行が発生する以前にスレッド＃１とスレッド＃２が１：１で動作していたところ、クロック割り当てを余り必要としないアクセス処理の代行依頼が発生した場合には、スレッド＃１とスレッド＃２とアクセス専用スレッド＃ｋの動作比率を１：１：１に設定し、クロック割り当てを多く必要とするアクセス処理の代行依頼が発生した場合には、スレッド＃１とスレッド＃２とアクセス専用スレッド＃ｋの動作比率を１：１：３に設定する等してよい。こうすれば、装置全体の処理効率を維持すると共に、処理の順序性を確保することが可能となる。
【００５５】
係る動作比率の設定は、例えば設定保持用レジスタ４２の内容を書き換えることによって可能となる。設定される動作比率は、アクセス処理の代行依頼を行うスレッドから制御装置４０に通知され、制御装置４０において、直ちに当該アクセス処理の代行が行われるならば通知された動作比率に従って設定保持用レジスタ４２の内容を書き換え、待ち状態となるならば当該アクセス処理の代行が行われるタイミングで通知された動作比率に従って設定保持用レジスタ４２の内容を書き換える。
【００５６】
［動作比較］
以下、従来のマルチスレッド処理装置との動作の相違について説明する。ここでは、図２と同じ前提条件を用いる。すなわち、スレッド＃１により実行されるタスク１０、及びスレッド＃２により実行されるタスク２１は、特定共有アクセス対象５０へのアクセス処理であり、スレッド＃１により実行されるタスク１１、及びスレッド＃２により実行されるタスク２０は、特定アクセス処理以外の一般処理である。なお、従来のマルチスレッド処理装置においては「特定共有アクセス対象」等の概念は存在しないが、ここでは同列に記載するものとする。図５〜図１０において、「指１」、「指２」と表記されている部分は、Write指示等の指示が行われることを示している。また、上線が付された数字で表記されている部分は、クロック時間の消費（単位は半クロック）を示している。また、「遊」と表記されている部分は、ＣＰＵ処理が無駄に消費されていることを示している。すなわち、遊びクロックである。
【００５７】
（クロック割り当ての必要性が低いアクセスに関して）
図５〜図７は、特定共有アクセス対象５０がＥＥＰＲＯＭやＩ／Ｏである場合のように、外部ペリフェラルの実行時間においてＣＰＵの処理を必要としない時間が生じる場合の動作例、すなわち、アクセス処理タスクの実行に対するクロック割り当てを余り多くする必要がない場合の動作例を示している。
【００５８】
より具体的には、図５〜７では、タスク１０、２１がＥＥＰＲＯＭ（図５〜７では「Ｅ２Ｐ」と略記した）に書き込みを行い、タスク１１、２０が一般処理を行うものとする。ＥＥＰＲＯＭへの書き込みは、Write指示に２クロックを要する他、１３クロック分の時間を消費するものとする。但し、当該１３クロック分の時間内において、アクセス処理タスクによる処理は不要である。
【００５９】
図５は、従来のマルチスレッド処理装置による動作例を示している。
【００６０】
まず、時刻Ｔ０において、タスク１０によるＥＥＰＲＯＭへのアクセスが開始される。上記のように、Write指示と、１３クロック分の時間経過をもって、時刻Ｔ２に書き込み処理が終了する。この期間において、他タスクによるＲＡＭへのアクセスは禁止される（排他区間）。この書き込み処理の間にも、タスク１０にクロックが割り当てられ続けるため、遊びクロックが１３クロック分生じることになる。
【００６１】
タスク１０による書き込み処理の途中における時刻Ｔ１において、タスク２１によるＥＥＰＲＯＭへの書き込み要求がなされたものとする（図では「排他要求」と表記した）。この場合、タスク１０による書き込み処理が終了するまでの間、タスク２１は待ち状態となり、従って、スレッド＃２全体が待ち状態となる。この待ち状態の間に、タスク２１にクロックが割り当てられ続けるため、遊びクロックが１０クロック分生じることになる。
【００６２】
時刻Ｔ２に至ると、タスク２１によるＥＥＰＲＯＭへのアクセスが開始される。Write指示と、１３クロック分の時間経過をもって、時刻Ｔ３に書き込み処理が終了する。この書き込み処理の間に、タスク２１にクロックが割り当てられ続けるため、遊びクロックが１３クロック分生じることになる。
【００６３】
ここでタスク１１は一般処理であるため、タスク２１と並行して実行可能である。このため、時刻Ｔ２〜Ｔ３の間、タスク１１は実行されている。タスク２０に関しては、タスク２１の終了後に実行が開始される。
【００６４】
これらの結果、図５に示す動作例において、遊びクロックは合計３６クロック分、生じたことになる。
【００６５】
図６は、本実施例のマルチスレッド処理装置１による動作例を示している。
【００６６】
本図では、アクセス専用スレッド＃ｋが起動した後の、スレッド＃１、スレッド＃２、アクセス専用スレッド＃ｋのクロック割り当て比率は、１：１：１に設定されるものとする。
【００６７】
まず、時刻Ｔ１０において、スレッド＃１によりアクセス専用スレッドの起動指示、及び自己のためのアクセス処理タスク１０*を追加するように指示がなされ、アクセス専用スレッド＃ｋによるタスク１０*がWrite指示を実行する。１３クロック分の時間経過をもって、時刻Ｔ１２に書き込み処理が終了する。この書き込み処理の間に、タスク１０*にクロックが割り当てられ続けるが、図５に比してクロック割り当て比率が低下しているため、遊びクロックは８クロック分しか生じないことになる。
【００６８】
時刻Ｔ１０と時刻Ｔ１２の間において、スレッド＃１はタスク１１を実行することができる。ここでは、９クロック分の処理を経てタスク１１の実行が終了するものとする。
【００６９】
アクセス専用スレッドのタスク１０*による書き込み処理の途中における時刻Ｔ１１において、タスク２１は、アクセス専用スレッド＃ｋに対して、自己のためのアクセス処理タスク２１*を追加するように指示する。この場合、タスク１０*による書き込み処理が終了するまでの間、タスク２１*は待ち状態となるが、スレッド＃２は次のクロックから一般タスク２０を開始することができる。ここでは、１５クロック分の処理を経てタスク２０の実行が終了するものとする。
【００７０】
時刻Ｔ１２に至ると、タスク２１*によるＥＥＰＲＯＭへのアクセスが開始される。Write指示と、１３クロック分の時間経過をもって、時刻Ｔ１３に書き込み処理が終了する。この書き込み処理の間に、タスク２１にクロックが割り当てられ続けるため、遊びクロックが８クロック分生じることになる。
【００７１】
これらの結果、図６に示す動作例において、遊びクロックは合計１６クロック分、生じたことになり、従来のマルチスレッド処理装置に比して遊びクロックの発生が抑制されている。また、処理結果の観点からも、時刻Ｔ３において従来のマルチスレッド処理装置はタスク２０が漸く開始した状態であるのに対し、時刻Ｔ３とほぼ同時刻である時刻Ｔ１３において、本実施例のマルチスレッド処理装置１は、タスク２０の処理を終了している。
【００７２】
これらより、本実施例のマルチスレッド処理装置１では、図５に動作例を示した従来のマルチスレッド処理装置に比して、処理効率が向上していることが分かる。
【００７３】
図７は、本実施例のマルチスレッド処理装置１による他の動作例を示している。
【００７４】
本図では、アクセス専用スレッド＃ｋが起動した後の、スレッド＃１、スレッド＃２、アクセス専用スレッド＃ｋのクロック割り当て比率は、２：２：１に設定されるものとする。すなわち、アクセス専用スレッド＃ｋに割り当てるクロック比率を図６の動作例に比して低下させている。
【００７５】
この場合、図６の動作例と、処理の実行順はほぼ同じとなる。クロック割り当て比率が低下するタスク１０*、２１*の処理が終了する時刻は図６の動作例に比して若干遅くなるが、タスク１１、２０による処理に、より多くのクロックを割り当てることが可能となる（それぞれ１０クロック、１９クロック分の処理が可能である様子を図示した）。また、遊びクロックの発生は、図６の動作例に比して少なく、合計１０クロック分となっている。
【００７６】
（クロック割り当ての必要性が高いアクセスに関して）
図８〜図１０は、特定共有アクセス対象５０がＲＡＭである場合のように、書き込みや読み出しについてＣＰＵの処理を必要とする場合の動作例、すなわち、アクセス処理タスクの実行にクロック割り当てを多く必要とする場合の動作例を示している。
【００７７】
より具体的には、図８〜１０では、タスク１０、２１がＲＡＭに書き込みを行い、タスク１１、２０が一般処理を行うものとする。ＲＡＭへの書き込みは、１５クロック分の時間を消費するものとする。当該１５クロック分の時間内においては、アクセス処理タスクによる処理が不要となる。
【００７８】
図８は、従来のマルチスレッド処理装置による動作例を示している。
【００７９】
まず、時刻Ｔ２０において、タスク１０によるＲＡＭへのアクセスが開始される。上記のように、１５クロック分の時間経過をもって、時刻Ｔ２２に書き込み処理が終了する。この期間において、他タスクによるＲＡＭへのアクセスは禁止される（排他区間）。
【００８０】
タスク１０による書き込み処理の途中における時刻Ｔ２１において、タスク２１によるＲＡＭへの書き込み要求がなされたものとする（図では「排他要求」と表記した）。この場合、タスク１０による書き込み処理が終了するまでの間、タスク２１は待ち状態となり、従って、スレッド＃２全体が待ち状態となる。この待ち状態の間に、タスク２１にクロックが割り当てられ続けるため、遊びクロックが１０クロック分生じることになる。
【００８１】
時刻Ｔ２２に至ると、タスク２１によるＲＡＭへのアクセスが開始される。１５クロック分の時間経過をもって、時刻Ｔ２３に書き込み処理が終了する。
【００８２】
ここでタスク１１は一般処理であるため、タスク２１と並行して実行可能である。このため、時刻Ｔ２２〜Ｔ２３の間、タスク１１は実行されている。タスク２０に関しては、タスク２１の終了後に実行が開始される。
【００８３】
これらの結果、図８に示す動作例において、遊びクロックは合計１０クロック分、生じたことになる。
【００８４】
図９は、本実施例のマルチスレッド処理装置１による動作例を示している。
【００８５】
本図では、アクセス専用スレッド＃ｋが起動した後の、スレッド＃１、スレッド＃２、アクセス専用スレッド＃ｋのクロック割り当て比率は、１：１：２に設定されるものとする。
【００８６】
まず、時刻Ｔ３０において、スレッド＃１によりアクセス専用スレッドの起動指示、及び自己のためのアクセス処理タスク１０*を追加するように指示がなされ、アクセス専用スレッド＃ｋによるタスク１０*がＲＡＭへの書き込みを開始する。１５クロック分の時間経過をもって、時刻Ｔ３２に書き込み処理が終了する。
【００８７】
時刻Ｔ３０と時刻Ｔ３２の間において、スレッド＃１はタスク１１を実行することができる。本図では、タスク１１、２０の実行に係るクロック数については省略する。
【００８８】
アクセス専用スレッドのタスク１０*による書き込み処理の途中における時刻Ｔ３１において、タスク２１は、アクセス専用スレッド＃ｋに対して、自己のためのアクセス処理タスク２１*を追加するように指示する。この場合、タスク１０*による書き込み処理が終了するまでの間、タスク２１*は待ち状態となるが、スレッド＃２は次のクロックから一般タスク２０を開始することができる。
【００８９】
時刻Ｔ３２に至ると、タスク２１*によるＲＡＭへのアクセスが開始される。１５クロック分の時間経過をもって、時刻Ｔ３３に書き込み処理が終了する。
【００９０】
これらの結果、図９に示す動作例において、遊びクロックは生じないため、従来のマルチスレッド処理装置に比して遊びクロックの発生が抑制されている。また、処理結果の観点からも、時刻Ｔ２３において従来のマルチスレッド処理装置はタスク２０が漸く開始した状態であるのに対し、時刻Ｔ２３とほぼ同時刻である時刻Ｔ３３において、本実施例のマルチスレッド処理装置１は、タスク２０の処理を１１クロック分終了している。
【００９１】
これらより、本実施例のマルチスレッド処理装置１では、図８に動作例を示した従来のマルチスレッド処理装置に比して、処理効率が向上していることが分かる。
【００９２】
図１０は、本実施例のマルチスレッド処理装置１による他の動作例を示している。
【００９３】
本図では、アクセス専用スレッド＃ｋが起動した後の、スレッド＃１、スレッド＃２、アクセス専用スレッド＃ｋのクロック割り当て比率は、１：１：４に設定されるものとする。すなわち、アクセス専用スレッド＃ｋに割り当てるクロック比率を図９の動作例に比して低下させている。
【００９４】
この場合、図９の動作例と、処理の実行順はほぼ同じとなる。タスク１１、２０の処理が終了する時刻は図９の動作例に比して若干遅くなるが、タスク１０*、２１*による処理に、より多くのクロックを割り当てることが可能となる。また、遊びクロックは、図９の動作例と同様、発生しない。
【００９５】
また、図６、７の動作例と図９、１０の動作例を比較すると、アクセス専用スレッドに割り当てられるクロックの比率が、図９、１０の動作例の方が高くなっている。これは、書き込み等にクロックの割り当てが必要なアクセスと、そうでないアクセスでクロック割り当て比率を適切に設定している様子を示すものである。通常、実行されるアクセス処理においてクロック割り当てが多く必要であるか否かは、当該アクセス処理に係るタスクが把握しているため、前述のように、アクセス処理の代行依頼を行うスレッドから制御装置４０にクロック割り当て比率が通知されると好適であるものとした。
【００９６】
［まとめ］
以上説明した本実施例のマルチスレッド処理装置１によれば、特定共有アクセス対象５０へのアクセス処理を行う際には、特定共有アクセス対象５０へのアクセス処理を行うアクセス専用スレッド＃ｋに、アクセス処理の代行を依頼するため、アクセス処理の代行を依頼したスレッドは、当該アクセス処理が終了するまでの間、他の一般処理を行うことができる。この結果、処理効率を向上させることができる。
【００９７】
また、複数のスレッド＃１…やアクセス専用スレッド＃ｋに対する実行時間の割り当て比率を変更可能となっているため、代行依頼されるアクセス処理が、どの程度の実行時間を要するのかに応じて、複数のスレッド＃１…やアクセス専用スレッド＃ｋに対する実行時間の割り当て比率を適切に決定することができる。
【００９８】
更に、割り当て比率の決定は、代行依頼されるアクセス処理が、どの程度の実行時間を要するのかを最もよく把握している、当該代行処理を行うスレッドによってなされるため、実行時間の割り当て比率を、より適切に決定することができる。
【００９９】
以上、本発明を実施するための最良の形態について実施例を用いて説明したが、本発明はこうした実施例に何等限定されるものではなく、本発明の要旨を逸脱しない範囲内において種々の変形及び置換を加えることができる。
【符号の説明】
【０１００】
１    マルチスレッド処理装置
１０  プログラムメモリ
１５  命令フェッチバス
２０  命令フェッチユニット
２２＃１〜２２＃ｎ  命令バッファ
２４  命令デコーダ
２６  命令発行部
２８＃１〜２８＃ｎ  レジスタ
３０  演算器
３２  ＬＳＵ
４０  制御装置
５０  特定共有アクセス対象
５５  データバス
＃１、＃２、＃ｋ  スレッド
【図１】
2012113487.tif 000003
【図２】
2012113487.tif 000004
【図３】
2012113487.tif 000005
【図４】
2012113487.tif 000006
【図５】
2012113487.tif 000007
【図６】
2012113487.tif 000008
【図７】
2012113487.tif 000009
【図８】
2012113487.tif 000010
【図９】
2012113487.tif 000011
【図１０】
2012113487.tif 000012