(57)【要約】【課題】コプロセッサを使用すべきか否かを適切に判断して処理時間が増大するのを抑制可能なタスク実行方法、コンパイラ及び電子制御装置を提供すること。【解決手段】電子制御装置において、メインプロセッサは、Ｓ１０において、タスク内に含まれる特定の処理を、コプロセッサを利用して実行する場合と、コプロセッサを利用せずに実行する場合とで、処理時間が短くなるのはいずれかの場合かを判断する。コプロセッサを利用する方が処理時間が短くなる場合、Ｓ２０において、コプロセッサを利用して特定の処理を実行する。コプロセッサを利用しない方が処理時間が短くなる場合、Ｓ３０において、コプロセッサを利用せずに特定の処理を実行する。【選択図】図２
2019106065.tif 000002
【特許請求の範囲】
【請求項１】
メインプロセッサ（２Ａ）及びコプロセッサ（２Ｂ）を有する装置（１）において、前記メインプロセッサが作動させるオペレーティングシステム（７）の管理下で、前記メインプロセッサが複数のタスク（８）を切り替えて実行する際に、前記メインプロセッサによって実行される前記タスクの実行方法であって、
前記タスク内に含まれる特定の処理を、前記コプロセッサを利用して実行する場合と、前記コプロセッサを利用せずに実行する場合とで、処理時間が短くなるのはいずれかの場合かを判断する判断処理（Ｓ１０，Ｓ４１０）を実行し、
前記判断処理において前記コプロセッサを利用する方が前記処理時間が短くなると判断した場合には、前記コプロセッサを利用して前記特定の処理を実行し（Ｓ２０，Ｓ４３０）、
前記判断処理において前記コプロセッサを利用しない方が前記処理時間が短くなると判断した場合には、前記コプロセッサを利用せずに前記特定の処理を実行する（Ｓ３０，Ｓ４６０）
タスク実行方法。
【請求項２】
請求項１に記載のタスク実行方法であって、
前記オペレーティングシステムは、第一のタスクにおいて前記コプロセッサが有効となっている場合に、前記第一のタスク以外のタスクにおいては前記コプロセッサが無効となるように構成されていて、前記コプロセッサが無効となっている第二のタスクにおいて前記コプロセッサを利用しようとした場合には、例外が発生して例外処理の中で前記コプロセッサのコンテキスト切り替えが実行され、前記例外処理を終了すると前記第二のタスクへと戻って当該第二のタスクにおいて前記コプロセッサが有効となっているように構成されており、
前記判断処理（Ｓ１０，Ｓ４１０）では、前記判断処理を実行する時点で前記コプロセッサが有効となっているタスクである場合に、前記コプロセッサを利用する方が前記処理時間が短くなると判断し、前記判断処理を実行する時点で前記コプロセッサが無効となっているタスクである場合に、前記コプロセッサを利用せずに前記特定の処理を実行する方が前記処理時間が短くなると判断する
タスク実行方法。
【請求項３】
請求項１又は請求項２に記載のタスク実行方法であって、
前記判断処理（Ｓ４１０）では、前記特定の処理を実行する回数がしきい値となる回数以上である場合に、前記コプロセッサを利用する方が前記処理時間が短くなると判断し、前記特定の処理を実行する回数が前記しきい値となる回数未満である場合に、前記コプロセッサを利用せずに前記特定の処理を実行する方が前記処理時間が短くなると判断する
タスク実行方法。
【請求項４】
メインプロセッサ（２Ａ）及びコプロセッサ（２Ｂ）を有する装置（１）において、前記メインプロセッサが作動させるオペレーティングシステム（７）の管理下で、前記メインプロセッサが複数のタスク（８）を切り替えて実行する際に、前記メインプロセッサによって実行される前記タスクのソースコード（２６）をコンパイル可能に構成されるコンパイラ（１１）であって、
前記ソースコード中に記述されている特定の処理を、前記コプロセッサを利用して実行する場合と、前記コプロセッサを利用せずに実行する場合とで、いずれの方が処理時間が短くなるかを解析し、
前記解析により、前記タスクの実行時に変化し得る所定の条件を満たす場合には前記コプロセッサを利用する方が処理時間が短くなり、前記所定の条件を満たさない場合には前記コプロセッサを利用せずに前記特定の処理を実行する方が処理時間が短くなるとの解析結果が得られた場合には、前記特定の処理を実行するための処理ステップとして、前記所定の条件を満たすか否かを判断する第一の処理ステップと、前記第一の処理ステップにおいて前記所定の条件を満たすと判断された場合に実行される処理ステップであって前記コプロセッサを利用して前記特定の処理を実行する第二の処理ステップと、前記第一の処理ステップにおいて前記所定の条件を満たさないと判断された場合に実行される処理ステップであって前記コプロセッサを利用せずに前記特定の処理を実行する第三の処理ステップとを含むオブジェクトコード（２７）を生成するように構成されている
コンパイラ。
【請求項５】
請求項４に記載のコンパイラであって、
前記オペレーティングシステムは、第一のタスクにおいて前記コプロセッサが有効となっている場合に、前記第一のタスク以外のタスクにおいては前記コプロセッサが無効となるように構成されていて、前記コプロセッサが無効となっている第二のタスクにおいて前記コプロセッサを利用しようとした場合には、例外が発生して例外処理の中で前記コプロセッサのコンテキスト切り替えが実行され、前記例外処理を終了すると前記第二のタスクへと戻って当該第二のタスクにおいて前記コプロセッサが有効となっているように構成されており、
前記コンパイラは、前記第一の処理ステップが実行される時点で前記コプロセッサが有効となっているタスクである場合に、前記第二の処理ステップが実行され、前記第一の処理ステップが実行される時点で前記コプロセッサが無効となっているタスクである場合に、前記第三の処理ステップが実行されることとなる前記オブジェクトコードを生成するように構成されている
コンパイラ。
【請求項６】
請求項４又は請求項５に記載のコンパイラであって、
前記コンパイラは、前記第一の処理ステップが実行される時点で前記特定の処理を実行する回数がしきい値となる回数以上になる場合に、前記第二の処理ステップが実行され、前記第一の処理ステップが実行される時点で前記特定の処理を実行する回数が前記しきい値となる回数未満になる場合に、前記第三の処理ステップが実行されることとなる前記オブジェクトコードを生成するように構成されている
コンパイラ。
【請求項７】
メインプロセッサ（２Ａ）及びコプロセッサ（２Ｂ）を有し、前記メインプロセッサが作動させるオペレーティングシステム（７）の管理下で、前記メインプロセッサが複数のタスク（８）を切り替えて実行するように構成された電子制御装置（１）であって、
前記タスク内に含まれる特定の処理を、前記コプロセッサを利用して実行する場合と、前記コプロセッサを利用せずに実行する場合とで、処理時間が短くなるのはいずれかの場合かを判断する判断処理（Ｓ１０，Ｓ４１０）を実行し、
前記判断処理において前記コプロセッサを利用する方が前記処理時間が短くなると判断した場合には、前記コプロセッサを利用して前記特定の処理を実行し（Ｓ２０，Ｓ４３０）、
前記判断処理において前記コプロセッサを利用しない方が前記処理時間が短くなると判断した場合には、前記コプロセッサを利用せずに前記特定の処理を実行する（Ｓ３０，Ｓ４６０）ように構成されている
電子制御装置。
【請求項８】
請求項７に記載の電子制御装置であって、
前記オペレーティングシステムは、第一のタスクにおいて前記コプロセッサが有効となっている場合に、前記第一のタスク以外のタスクにおいては前記コプロセッサが無効となるように構成されていて、前記コプロセッサが無効となっている第二のタスクにおいて前記コプロセッサを利用しようとした場合には、例外が発生して例外処理の中で前記コプロセッサのコンテキスト切り替えが実行され、前記例外処理を終了すると前記第二のタスクへと戻って当該第二のタスクにおいて前記コプロセッサが有効となっているように構成されており、
前記判断処理（Ｓ１０，Ｓ４１０）では、前記判断処理を実行する時点で前記コプロセッサが有効となっているタスクである場合に、前記コプロセッサを利用する方が前記処理時間が短くなると判断し、前記判断処理を実行する時点で前記コプロセッサが無効となっているタスクである場合に、前記コプロセッサを利用せずに前記特定の処理を実行する方が前記処理時間が短くなると判断するように構成されている
電子制御装置。
【請求項９】
請求項７又は請求項８に記載の電子制御装置であって、
前記判断処理（Ｓ４１０）では、前記特定の処理を実行する回数がしきい値となる回数以上である場合に、前記コプロセッサを利用する方が前記処理時間が短くなると判断し、前記特定の処理を実行する回数が前記しきい値となる回数未満である場合に、前記コプロセッサを利用せずに前記特定の処理を実行する方が前記処理時間が短くなると判断するように構成されている
電子制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、タスク実行方法、コンパイラ及び電子制御装置に関する。
【背景技術】
【０００２】
複数のタスクを切り替えて実行する際に、次に切り替えられるタスクにおいてコプロセッサを使用するか否かを判断し、コプロセッサを使用すると判断した場合にコプロセッサのコンテキスト切り替えを行う技術が提案されている（例えば、特許文献１参照。）。特許文献１に記載の技術においては、次に切り替えられるタスクにおいてコプロセッサを使用しないと判断した場合には、コプロセッサのコンテキスト切り替えを行わない。したがって、次に切り替えられるタスクにおいてコプロセッサを使用しない場合には、コプロセッサのコンテキスト切り替えを行わない分だけ、処理時間を削減することができる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開平６−１１９１９０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
特許文献１に記載の技術において、コプロセッサを使用するタスクに関しては、コプロセッサを使用せずに、メインプロセッサで同等な処理を実行する方が、処理時間を短縮できるケースがある。具体的には、コプロセッサを使用することにより、特定の処理が迅速に実行されて、その分だけ処理時間が短縮されるとしても、コプロセッサを使用する際には、コプロセッサのコンテキスト切り替えを行うために時間を要する。そのため、上記特定の処理が迅速に実行されることによって短縮される処理時間が、コプロセッサのコンテキスト切り替えに要する処理時間を下回る場合には、コプロセッサを使用する方が、コプロセッサを使用しない場合よりも処理時間が増大することになる。
【０００５】
本開示の一局面においては、コプロセッサを使用すべきか否かを適切に判断して処理時間が増大するのを抑制可能なタスク実行方法、コンパイラ及び電子制御装置を提供することが望ましい。
【課題を解決するための手段】
【０００６】
本開示の一態様は、タスク実行方法である。当該タスク実行方法は、メインプロセッサ（２Ａ）及びコプロセッサ（２Ｂ）を有する装置（１）において、メインプロセッサが作動させるオペレーティングシステム（７）の管理下で、メインプロセッサが複数のタスク（８）を切り替えて実行する際に、メインプロセッサによって実行される。当該タスク実行方法において、メインプロセッサは、判断処理（Ｓ１０，Ｓ４１０）を実行する。
【０００７】
判断処理では、タスク内に含まれる特定の処理を、コプロセッサを利用して実行する場合と、コプロセッサを利用せずに実行する場合とで、処理時間が短くなるのはいずれかの場合かを判断する。ここでいう特定の処理は、コプロセッサを利用して実行することが可能、かつコプロセッサを利用せずに実行することも可能な処理である。ただし、特定の処理を実行する際、コプロセッサを利用するか否かにより、特定の処理を実行するために要する処理時間が変わり得る。
【０００８】
そこで、メインプロセッサは、上述の判断処理を実行する。判断処理においてコプロセッサを利用する方が処理時間が短くなると判断した場合、メインプロセッサはコプロセッサを利用して特定の処理を実行する（Ｓ２０，Ｓ４３０）。判断処理においてコプロセッサを利用しない方が処理時間が短くなると判断した場合、メインプロセッサはコプロセッサを利用せずに特定の処理を実行する（Ｓ３０，Ｓ４６０）。
【０００９】
このように構成されたタスク実行方法によれば、タスク内に含まれる特定の処理を、一律にコプロセッサを利用して実行する場合や、一律にコプロセッサを利用せずに実行する場合に比べ、より迅速に実行することができる。
【００１０】
本開示の別の一態様は、コンパイラ（１１）である。当該コンパイラは、メインプロセッサ（２Ａ）及びコプロセッサ（２Ｂ）を有する装置（１）において、メインプロセッサが作動させるオペレーティングシステム（７）の管理下で、メインプロセッサが複数のタスク（８）を切り替えて実行する際に、メインプロセッサによって実行されるタスクのソースコード（２６）をコンパイル可能に構成される。
【００１１】
当該コンパイラは、ソースコード中に記述されている特定の処理を、コプロセッサを利用して実行する場合と、コプロセッサを利用せずに実行する場合とで、いずれの方が処理時間が短くなるかを解析する。ここでいう特定の処理は、コプロセッサを利用して実行することが可能、かつコプロセッサを利用せずに実行することも可能な処理である。特定の処理を実行するために要する処理時間は、コプロセッサを利用するか否かによって変わり得る。例えば、タスクの実行時に変化し得る所定の条件を満たす場合にはコプロセッサを利用する方が処理時間が短くなり、所定の条件を満たさない場合にはコプロセッサを利用せずに特定の処理を実行する方が処理時間が短くなることがある。
【００１２】
コプロセッサを利用する方が処理時間が短くなるか否かが、上述のような所定の条件に応じて変わり得るとの解析結果が得られた場合、本開示のコンパイラは、特定の処理を実行するための処理ステップとして、所定の条件を満たすか否かを判断する第一の処理ステップと、第一の処理ステップにおいて所定の条件を満たすと判断された場合に実行される処理ステップであってコプロセッサを利用して特定の処理を実行する第二の処理ステップと、第一の処理ステップにおいて所定の条件を満たさないと判断された場合に実行される処理ステップであってコプロセッサを利用せずに特定の処理を実行する第三の処理ステップとを含むオブジェクトコードを生成する。
【００１３】
このように構成されたコンパイラによれば、特定の処理を実行する際にコプロセッサを利用するか否かがソースコード上で明示されていなくても、より迅速に特定の処理を実行する処理ステップを含むオブジェクトコードを生成することができる。特に、所定の条件を満たすか否かがタスクの実行時に動的に変化する場合でも、その判断をタスクの実行時に行うことにより、より迅速に特定の処理を実行する処理ステップが選択されることとなるオブジェクトコードを生成することができる。また、コプロセッサを利用するか否かを、コンパイル時のオプションで指定可能なコンパイラとは異なり、一律にコプロセッサを利用して特定の処理を実行するオブジェクトコードや、一律にコプロセッサを利用せずに特定の処理を実行するオブジェクトコードを生成することはない。
【００１４】
本開示の更に別の一態様は、電子制御装置（１）である。当該電子制御装置は、メインプロセッサ（２Ａ）及びコプロセッサ（２Ｂ）を有し、メインプロセッサが作動させるオペレーティングシステム（７）の管理下で、前記ンプロセッサが複数のタスク（８）を切り替えて実行するように構成される。当該電子制御装置において、メインプロセッサは、判断処理（Ｓ１０，Ｓ４１０）を実行する。
【００１５】
判断処理では、タスク内に含まれる特定の処理を、コプロセッサを利用して実行する場合と、コプロセッサを利用せずに実行する場合とで、処理時間が短くなるのはいずれかの場合かを判断する。ここでいう特定の処理は、コプロセッサを利用して実行することが可能、かつコプロセッサを利用せずに実行することも可能な処理である。ただし、特定の処理を実行する際、コプロセッサを利用するか否かにより、特定の処理を実行するために要する処理時間が変わり得る。
【００１６】
そこで、メインプロセッサは、上述の判断処理を実行する。判断処理においてコプロセッサを利用する方が処理時間が短くなると判断した場合、メインプロセッサはコプロセッサを利用して特定の処理を実行する（Ｓ２０，Ｓ４３０）。判断処理においてコプロセッサを利用しない方が処理時間が短くなると判断した場合、メインプロセッサはコプロセッサを利用せずに特定の処理を実行する（Ｓ３０，Ｓ４６０）。
【００１７】
このように構成された電子制御装置によれば、タスク内に含まれる特定の処理を、一律にコプロセッサを利用して実行する場合や、一律にコプロセッサを利用せずに実行する場合に比べ、より迅速に実行することができる。
【００１８】
なお、この欄及び特許請求の範囲に記載した括弧内の符号は、後述する実施形態において一態様として例示する具体的な構成との対応関係を理解しやすくするために記載したものである。当該記載は、本開示の技術的範囲が後述する実施形態と同一な範囲に限定されることを意味する記載ではない。
【図面の簡単な説明】
【００１９】
【図１】図１は電子制御装置の構成を示すブロック図である。
【図２】図２は電子制御装置において実行されるタスクの要部を抜粋して示すフローチャートであり、ソースコードＡ０から生成されるオブジェクトコードＡ１の処理ステップを示すフローチャートである。
【図３】図３はパーソナルコンピュータの構成を示すブロック図である。
【図４】図４はコンパイラの構成を示すブロック図である。
【図５】図５はソースコードＡ０の処理ステップを示すフローチャートである。
【図６】図６はソースコードＡ０から生成されるオブジェクトコードＡ２の処理ステップを示すフローチャートである。
【図７】図７はソースコードＡ０から生成されるオブジェクトコードＡ３の処理ステップを示すフローチャートである。
【図８】図８はソースコードＢ０の処理ステップを示すフローチャートである。
【図９】図９はソースコードＢ０から生成されるオブジェクトコードＢ１の処理ステップを示すフローチャートである。
【図１０】図１０はタスクの切り替えとコンテキスト切り替えのタイミングを例示するタイミングチャートである。
【発明を実施するための形態】
【００２０】
次に、上述のタスク実行方法、コンパイラ及び電子制御装置について、例示的な実施形態を挙げて説明する。
［電子制御装置の構成］
図１に示すＥＣＵ１は、車載用の電子制御装置である。ＥＣＵは、Electronic Control Unitの略称である。ＥＣＵ１は、プロセッサ２、ＲＡＭ３を及びその他のハードウェアを備える。プロセッサ２、ＲＡＭ３を及びその他のハードウェアは内部バス４を介して相互に接続されている。図示は省略するが、その他のハードウェアとしては、例えば、フラッシュメモリや車載ＬＡＮ接続用のネットワークインターフェースコントローラなどを備える。ＥＣＵ１は、ネットワークインターフェースコントローラを介して車載ＬＡＮに接続され、他のＥＣＵと通信可能に構成される。
【００２１】
プロセッサ２は、メインプロセッサ２Ａ及びコプロセッサ２Ｂを有する。メインプロセッサ２Ａは、様々な処理を実行可能に構成された汎用のプロセッサである。コプロセッサ２Ｂは、ある処理（例えば、浮動小数点演算。）に特化してメインプロセッサ２Ａよりも高速又は効率良く処理を実行可能に構成された専用のプロセッサである。ＥＣＵ１では、メインプロセッサ２Ａが主体となって各種処理を実行し、その中でコプロセッサ２Ｂでの処理に適した特定の処理を実行する際に、コプロセッサ２Ｂがメインプロセッサ２Ａの補助又は代行をする。
【００２２】
メインプロセッサ２Ａは、レジスタセット５Ａを備える。コプロセッサ２Ｂは、レジスタセット５Ｂを備える。レジスタセット５Ａ，５Ｂには、複数のレジスタが含まれる。複数のレジスタとしては、例えば演算等を実行する際に使われる汎用レジスタ、及びスタックポインタやプログラムカウンタといった特定の用途で使われる専用レジスタ等を挙げることができる。
【００２３】
ＥＣＵ１には、オペレーティングシステム（以下、ＯＳと略称する。）７が搭載されている。ＥＣＵ１では、ＯＳ７の管理下で、複数のタスク８が実行される。ＥＣＵ１が稼働している際には、ＯＳ７及びタスク８を作動させるためのプログラムがＲＡＭ３に読み込まれる。プロセッサ２は、ＲＡＭ３に読み込まれたプログラムに従って各種処理を実行する。これにより、ＥＣＵ１においてＯＳ７及び複数のタスク８が作動する状態になる。
【００２４】
図１には、複数のタスク８の例として、三つのタスク８が作動している状態を例示してある。ただし、タスク８の数は二つ以下又は四つ以上であってもよい。複数のタスク８は、それぞれの優先度に応じて順次切り替えられながら並列に作動する。以下の説明においては、三つのタスク８それぞれを区別して説明する際には、各タスク８に番号＃１，＃２，＃３を付し、タスク＃１，タスク＃２，タスク＃３とも称する。
【００２５】
ＲＡＭ３には、ＯＳ７によって管理される記憶領域の一つとして、コンテキスト退避領域７Ａ，７Ｂが確保されている。コンテキスト退避領域７Ａは、レジスタセット５Ａに格納されたデータ群を退避させるために使われる記憶領域である。コンテキスト退避領域７Ｂは、レジスタセット５Ｂに格納されたデータ群を退避させるために使われる記憶領域である。
【００２６】
ＥＣＵ１において、複数のタスク８を切り替えて実行する際には、メインプロセッサ２Ａのコンテキスト切り替えが実行される。メインプロセッサ２Ａのコンテキスト切り替えの際には、コンテキスト退避領域７Ａが使用される。コンテキスト退避領域７Ａには、複数のタスク＃１〜＃３それぞれに対応付けられる記憶領域が確保される。先にタスク＃１を実行していて、次にタスク＃２を実行する際には、タスク＃２を開始する前にレジスタセット５Ａに格納されている各種データをタスク＃１用の記憶領域に退避させる。
【００２７】
続いて、タスク＃２用の記憶領域に格納されている各種データを、レジスタセット５Ａに復帰させる。ここでレジスタセット５Ａに復帰させる各種データは、過去にタスク＃２を実行している途中で別のタスクに切り替えるために、レジスタセット５Ａからタスク＃２用の記憶領域に退避させたデータである。したがって、タスク＃２用の記憶領域に格納されている各種データをレジスタセット５Ａに復帰させると、レジスタセット５Ａは過去にタスク＃２が中断されたときと同一の状態に戻される。よって、タスク＃２は、過去にタスク＃２が中断したところから、その時点以降の処理を引き続き実行できる状態になる。
【００２８】
また、ＥＣＵ１において、コプロセッサ２Ｂを使用する際には、コプロセッサ２Ｂのコンテキスト切り替えが実行される。コプロセッサ２Ｂのコンテキスト切り替えの際には、コンテキスト退避領域７Ｂが使用される。コンテキスト退避領域７Ｂには、複数のタスク＃１〜＃３それぞれに対応付けられる記憶領域が確保される。コプロセッサ２Ｂのコンテキスト切り替えは、複数のタスク＃１〜＃３をいずれかからいずれかへ切り替えるタイミングとは非同期で実行される。
【００２９】
より詳しく説明すると、ＥＣＵ１では、複数のタスク８のうち、いずれか一つのタスク８においてコプロセッサ２Ｂが有効とされ、残りのタスク８においてはコプロセッサ２Ｂが無効とされている。以下、タスク＃２においてコプロセッサ２Ｂが有効とされ、タスク＃１及びタスク＃３においてはコプロセッサ２Ｂが無効とされているという場合を想定して説明を続ける。
【００３０】
タスク＃２においてコプロセッサ２Ｂが有効とされている場合、タスク＃１ではコプロセッサ２Ｂが無効となっている。そのため、タスク＃１においてコプロセッサ２Ｂを使おうとすると、ＯＳ７の機能によってコプロセッサ無効例外が発生する。コプロセッサ無効例外が発生すると例外処理に移行する。例外処理では、例外発生時にレジスタセット５Ｂに格納されている各種データを、コンテキスト退避領域７Ｂ中にあるタスク＃２用の記憶領域に退避させる。
【００３１】
続いて、コンテキスト退避領域７Ｂ中にあるタスク＃１用の記憶領域に格納されている各種データを、レジスタセット５Ｂに復帰させる。ここでレジスタセット５Ｂに復帰させる各種データは、過去にタスク＃１においてコプロセッサ２Ｂが有効となっている状態において、別のタスクがコプロセッサ２Ｂを使おうとした際に、レジスタセット５Ａからタスク＃１用の記憶領域に退避させたデータである。
【００３２】
したがって、タスク＃１用の記憶領域に格納されている各種データをレジスタセット５Ｂに復帰させると、レジスタセット５Ｂは過去にタスク＃１においてコプロセッサ２Ｂが有効であったときと同一の状態に戻される。よって、タスク＃１は、過去にタスク＃１がコプロセッサ２Ｂを使っていたときと同様の状況下で、コプロセッサ２Ｂを引き続き使用できる状態になる。
【００３３】
以上説明したようなコンテキスト切り替えの手法は、一般に、レイジー・コンテキスト・スイッチングと呼ばれる。レイジー・コンテキスト・スイッチングを利用すれば、例えばタスク＃２からタスク＃１へタスクの切り替えが行われた場合でも、次に実行されるタスク＃１においてコプロセッサ２Ｂが使用されなければ、タスク＃１ではコプロセッサ２Ｂが無効なままとされる。この場合、コプロセッサ２Ｂのコンテキスト切り替えは実行されない。よって、コプロセッサ２Ｂのコンテキスト切り替えのために時間を消費することはなく、その分だけタスク＃１の実行に要する処理時間を短縮することができる。
【００３４】
また、引き続いてタスク＃１からタスク＃２へタスクの切り替えが行わるのであれば、次に実行されるタスク＃２ではコプロセッサ２Ｂが有効なままとなっている。そのため、タスク＃２においてコプロセッサ２Ｂが使用される際には、コプロセッサ２Ｂのコンテキスト切り替えを実行する必要はなく、コプロセッサ２Ｂのコンテキスト切り替えのために時間を消費することはない。よって、コプロセッサ２Ｂのコンテキスト切り替えが実行されない分だけ、タスク＃２の実行に要する処理時間を短縮することができる。
【００３５】
［タスク実行方法の例］
次に、本開示のタスク実行方法について、図２に例示するフローチャートを参照しつつ説明する。図２に例示する処理は、ＥＣＵ１においてタスク８の一つとして実行される処理である。この処理は、メインプロセッサ２Ａが主体となって実行する。図２には、タスク８に含まれる処理ステップの中から、本開示のタスク実行方法を説明する上で必要となる処理ステップを抜粋して示してある。実際のタスク８には、本開示のタスク実行方法を妨げない限り、図２には示されていない様々な処理ステップが含まれていてもよい。
【００３６】
図２に例示する処理を開始すると、メインプロセッサ２Ａは、Ｓ１０において、コプロセッサ２Ｂが有効か否かを判断する。本実施形態においては、上述の通り、複数のタスク８のうち、いずれか一つのタスク８においてコプロセッサ２Ｂが有効とされ、残りのタスク８においてはコプロセッサ２Ｂが無効とされている。Ｓ１０では、Ｓ１０を実行しているタスクにおいてコプロセッサ２Ｂが有効か無効かを判断する。
【００３７】
Ｓ１０においてコプロセッサ２Ｂが有効な場合は、Ｓ１０においてＹＥＳとなり、Ｓ２０へと進む。Ｓ２０において、メインプロセッサ２Ａは、コプロセッサ２Ｂを利用して特定の処理を実行する。ここでいう特定の処理は、コプロセッサ２Ｂでの処理に適した処理である。ただし、特定の処理は、コプロセッサ２Ｂを利用して実行することが可能、かつコプロセッサ２Ｂを利用せずに実行することも可能な処理である。Ｓ２０では、コプロセッサ２Ｂを利用して特定の処理を実行する。
【００３８】
Ｓ２０においては、Ｓ１０での判断通り、コプロセッサ２Ｂが有効となっている。そのため、この場合は、コプロセッサ２Ｂを利用しても、上述のコプロセッサ無効例外は発生しない。すなわち、コプロセッサ２Ｂを利用しても、レイジー・コンテキスト・スイッチングによるコプロセッサ２Ｂのコンテキスト切り替えは発生しない。したがって、コプロセッサ２Ｂのコンテキスト切り替えが必要となる場合に比べ、タスク８の実行に要する処理時間を短縮することができる。Ｓ２０を終えたら、図２に示す処理を終了する。
【００３９】
一方、Ｓ１０においてコプロセッサ２Ｂが無効な場合は、Ｓ１０においてＮＯとなり、Ｓ３０へと進む。Ｓ３０において、メインプロセッサ２Ａは、メインプロセッサ２Ａで特定の処理を実行する。Ｓ３０においては、コプロセッサ２Ｂを利用しない。そのため、上述のコプロセッサ無効例外は発生せず、レイジー・コンテキスト・スイッチングによるコプロセッサ２Ｂのコンテキスト切り替えは発生しない。したがって、Ｓ３０においては、少なくともコプロセッサ２Ｂのコンテキスト切り替えに時間を要することはない。
【００４０】
Ｓ３０においては、コプロセッサ２Ｂを利用せずに特定の処理を実行する。そのため、特定の処理を実行するのに要する時間は、コプロセッサ２Ｂを利用する場合よりも増大する可能性がある。ただし、その増大分の時間が、コプロセッサ２Ｂのコンテキスト切り替えに要する時間よりも短時間であれば、タスク８の実行に要する処理時間はコプロセッサ２Ｂを利用する場合よりも短縮される。よって、そのような処理時間の短縮効果が期待できる場合に、図２に示すような処理をＥＣＵ１に実行させるためのプログラムをＥＣＵ１に実装すると好適である。Ｓ３０を終えたら、図２に示す処理を終了する。
【００４１】
［コンパイラの構成］
次に、図２に示すような処理をＥＣＵ１に実行させるためのプログラムを生成可能なコンパイラについて説明する。図３に示すように、以下に説明するコンパイラ１１は、パーソナルコンピュータ（以下、ＰＣと略称する。）１３において作動するソフトウェアである。ＰＣ１３は、周知のプロセッサ１５、ＲＡＭ１６及びハードディスク１７等を備える。図３においては図示を省略してあるが、ＰＣ１３には、ポインティングデバイスやキーボード等の入力装置、液晶ディスプレイ等の出力装置等が設けられていてもよい。
【００４２】
ＰＣ１３には、ＯＳ及びＯＳの制御下で作動する各種アプリケーションプログラムがインストールされている。コンパイラ１１は、ＰＣ１３にインストールされたアプリケーションプログラムの一つである。ＰＣ１３において利用者がコンパイラ１１を起動するための操作を行うと、ＰＣ１３ではコンパイラ１１のプログラムがハードディスク１７からＲＡＭ１６へとロードされる。プロセッサ１５は、ＲＡＭ１６にロードされたコンパイラ１１のプログラムに従った処理を実行する。これにより、ＰＣ１３においてコンパイラ１１が作動する。
【００４３】
コンパイラ１１は、図４に示すように、字句解析部２１、構文解析部２２、意味解析部２３、最適化部２４及びコード生成部２５等を備える。プログラム作成者が作成したソースコードファイル２６がコンパイラ１１に入力されると、字句解析部２１、構文解析部２２及び意味解析部２３では、段階的にソースコードファイル２６に記述された記述内容が解析される。その解析の結果、記述上の誤り等が無ければ、最適化部２４において冗長なロジック等が最適化される。続いて、コード生成部２５においてオブジェクトコードが生成され、コンパイラ１１はオブジェクトコードファイル２７を出力する。
【００４４】
［オブジェクトコードの例１］
コンパイラ１１は、図５に示すような処理ステップＳ１を含むソースコード（以下、ソースコードＡ０と称する。）をコンパイルすることにより、先に説明した図２に示すような処理ステップＳ１０，Ｓ２０，Ｓ３０を含むオブジェクトコード（以下、オブジェクトコードＡ１と称する。）を生成する。具体的には、図５に示すように、ソースコードＡ０には、特定の処理を実行する旨の処理ステップＳ１が記述されている。
【００４５】
コンパイラ１１は、ソースコードファイル２６中の記述を対象に静的コード解析を実行する。その解析時に、特定の処理を実行する旨の処理ステップＳ１を見つけた場合には、コプロセッサ２Ｂを利用して特定の処理を実行する方が処理時間が短くなるか、コプロセッサ２Ｂを利用せずにメインプロセッサ２Ａで特定の処理を実行する方が処理時間が短くなるかを解析する。この解析時には、ソースコードファイル２６中に記述されたプログラムの実行時にコンテキスト切り替えが必要となる場合を想定し、その際にコンテキスト切り替えに要する処理時間も加味して、いずれの処理時間が短くなるのかを判断する。
【００４６】
そのような解析の結果、例えば、コプロセッサ２Ｂが有効か否かに応じて、コプロセッサ２Ｂを利用して特定の処理を実行する方が処理時間が短くなるか、コプロセッサ２Ｂを利用せずにメインプロセッサ２Ａで特定の処理を実行する方が処理時間が短くなるかが変動し得る、との解析結果が得られた場合、コンパイラ１１は、図５に示すソースコードＡ０をコンパイルして、図２に示すオブジェクトコードＡ１を生成する。
【００４７】
すなわち、図５に示すソースコードＡ０には、単に、特定の処理を実行する旨の処理ステップＳ１が記述されているだけであるが、コンパイラ１１は、上述の解析結果を考慮して、上述の処理ステップＳ１が、図２中に含まれている処理ステップＳ１０，Ｓ２０，Ｓ３０に展開されたオブジェクトコードＡ１を生成する。したがって、プログラム作成者は、ソースコード作成段階で図２に示すような処理ステップＳ１０，Ｓ２０，Ｓ３０を含むソースコードを作成しなくても、単に図５に示すようなソースコードＡ０を作成してコンパイラ１１によるコンパイルを実行するだけで、図２に示すようなオブジェクトコードＡ１を生成することができる。また、そのようなオブジェクトコードＡ１を利用して、ＥＣＵ１において本開示のタスク実行方法を実施することができる。
【００４８】
コンパイラ１１による解析の結果によっては、図２中に含まれている処理ステップＳ１０のような判断を、動的に実行するオブジェクトコードＡ１が生成されるとは限らない。例えば、コンパイラ１１による解析の結果、コプロセッサ２Ｂが有効か否かを問わず、コプロセッサ２Ｂを利用して特定の処理を実行する方が処理時間が短くなると静的に判断可能な場合がある。このような場合、コンパイラ１１は、図５に示すソースコードＡ０をコンパイルして、図６に示すような処理ステップＳ１１０を含むオブジェクトコード（以下、オブジェクトコードＡ２と称する。）を生成する。
【００４９】
また、例えば、コンパイラ１１による解析の結果、コプロセッサ２Ｂが有効か否かを問わず、コプロセッサ２Ｂを利用せずにメインプロセッサ２Ａで特定の処理を実行する方が処理時間が短くなると静的に判断可能な場合がある。このような場合、コンパイラ１１は、図５に示すソースコードＡ０をコンパイルして、図７に示すような処理ステップＳ２１０を含むオブジェクトコード（以下、オブジェクトコードＡ３と称する。）を生成する。
【００５０】
コンパイラ１１は、例えば、特定の処理に関するメインプロセッサ２Ａとコプロセッサ２Ｂとの処理能力の差、特定の処理におけるコプロセッサ２Ｂの使用回数、特定の処理におけるコプロセッサ２Ｂの使用時間等を考慮した解析を行い、オブジェクトコードＡ１，Ａ２，Ａ３のいずれかを生成する。
【００５１】
［オブジェクトコードの例２］
オブジェクトコードの例１として挙げたオブジェクトコードＡ１では、タスク８としての処理を実行する際に、そのタスク８においてコプロセッサ２Ｂが有効となっているか無効となっているかを判断していたが、判断の条件は上述の例に限定されない。以下、別の判断条件で処理が分岐する例について説明する。コンパイラ１１は、図８に示すような処理ステップＳ３１０，Ｓ３２０，Ｓ３３０を含むソースコード（以下、ソースコードＢ０と称する。）をコンパイルすることにより、例えば、図９に示すような処理ステップＳ４１０，Ｓ４２０，Ｓ４３０，Ｓ４４０，Ｓ４５０，Ｓ４６０，Ｓ４７０を含むオブジェクトコード（以下、オブジェクトコードＢ１と称する。）を生成する。
【００５２】
図８に示すソースコードＢ０には、次のような処理が記述されている。まず、Ｓ３１０において、ループカウンタｉを初期化する。続いて、Ｓ３２０において、特定の処理を実行する。続いて、Ｓ３３０において、ループカウンタｉをインクリメントして、ループカウンタｉの値が変数Ｎの値よりも大か否かを判断する。Ｓ３３０において、ループカウンタｉの値が変数Ｎの値以下であればＳ３２０へと戻るループ処理Ｌ１を実行する。Ｓ３３０において、ループカウンタｉの値が変数Ｎの値よりも大であれば、ループ処理Ｌ１を終了し、図５に示す処理を終了する。
【００５３】
コンパイラ１１は、上述のようなソースコードＢ０を対象に静的コード解析を実行する。ここでは、解析の結果、コプロセッサ２Ｂが有効か否かに応じて、コプロセッサ２Ｂを利用して特定の処理を実行する方が処理時間が短くなるか、コプロセッサ２Ｂを利用せずにメインプロセッサ２Ａで特定の処理を実行する方が処理時間が短くなるかが変動し得る、との解析結果が得られたものとする。また、解析の結果、変数Ｎの値があるしきい値以上か否かに応じて、コプロセッサ２Ｂを利用して特定の処理を実行する方が処理時間が短くなるか、コプロセッサ２Ｂを利用せずにメインプロセッサ２Ａで特定の処理を実行する方が処理時間が短くなるかが変動し得る、との解析結果が得られたものとする。
【００５４】
コプロセッサ２Ｂを利用して特定の処理を実行する場合の処理時間をＴｃ、メインプロセッサ２Ａで特定の処理を実行する場合の処理時間をＴｍとすると、それらの時間の差は（Ｔｍ−Ｔｃ）となる。したがって、Ｎ回の繰り返されるループ処理Ｌ１の中で特定の処理が実行される場合、コプロセッサ２Ｂを利用すれば、処理時間を（Ｔｍ−Ｔｃ）×Ｎだけ短縮することができる。ただし、コプロセッサ２Ｂを利用する際、コプロセッサ２Ｂのコンテキスト切り替えが必要となる場合は、コプロセッサ２Ｂのコンテキスト切り替えを含む例外処理に時間Ｔｓを要する。
【００５５】
したがって、不等式（Ｔｍ−Ｔｃ）×Ｎ＞Ｔｓを満たす場合には、コプロセッサ２Ｂのコンテキスト切り替えが必要であっても、コプロセッサ２Ｂを使用すれば処理時間が短縮される。この不等式をＮについて整理すると、Ｎ＞Ｔｓ／（Ｔｍ−Ｔｃ）となる。よって、この場合は、Ｔｓ／（Ｔｍ−Ｔｃ）をしきい値として、Ｎ＞Ｔｓ／（Ｔｍ−Ｔｃ）となる場合は、コプロセッサ２Ｂを利用して特定の処理を実行すればよい。また、Ｎ＜Ｔｓ／（Ｔｍ−Ｔｃ）となる場合は、メインプロセッサ２Ａで特定の処理を実行すればよい。
【００５６】
Ｎ＝Ｔｓ／（Ｔｍ−Ｔｃ）となる場合は、コプロセッサ２Ｂを利用して特定の処理を実行しても、メインプロセッサ２Ａで特定の処理を実行しても、処理時間に差異はない。また、コプロセッサ２Ｂが有効となっているタスクである場合には、コプロセッサ２Ｂのコンテキスト切り替えに時間を要することはない。よって、この場合は、変数Ｎの値を考慮することなく、コプロセッサ２Ｂを利用すればよい。
【００５７】
以上のような解析結果が得られた場合に、コンパイラ１１は、図８に示すソースコードＢ０をコンパイルして、図９に示すオブジェクトコードＢ１を生成する。オブジェクトコードＢ１には、次のような処理ステップが含まれている。まず、Ｓ４１０において、コプロセッサ２Ｂが有効か否かと、変数Ｎがしきい値以上か否かとを判断する。Ｓ４１０においてコプロセッサ２Ｂが有効な場合は、Ｓ４１０においてＹＥＳとなり、Ｓ４２０へと進む。また、Ｓ４１０において変数Ｎがしきい値以上である場合は、Ｓ４１０においてＹＥＳとなり、Ｓ４２０へと進む。
【００５８】
Ｓ４２０においては、ループカウンタｉを初期化する。続いて、Ｓ４３０において、コプロセッサ２Ｂを利用して特定の処理を実行する。続いて、Ｓ４４０において、ループカウンタｉをインクリメントして、ループカウンタｉの値が変数Ｎの値よりも大か否かを判断する。Ｓ４４０において、ループカウンタｉの値が変数Ｎの値以下であればＳ４３０へと戻るループ処理Ｌ１を実行する。Ｓ４４０において、ループカウンタｉの値が変数Ｎの値よりも大であれば、ループ処理Ｌ１を終了し、図９に示す処理を終了する。
【００５９】
一方、Ｓ４１０においてコプロセッサ２Ｂが無効、かつ、変数Ｎがしきい値未満である場合は、Ｓ４１０においてＮＯとなり、Ｓ４５０へと進む。Ｓ４５０においては、ループカウンタｉを初期化する。続いて、Ｓ４６０においては、コプロセッサ２Ｂを利用せずメインプロセッサ２Ａで特定の処理を実行する。続いて、Ｓ４７０において、ループカウンタｉをインクリメントして、ループカウンタｉの値が変数Ｎの値よりも大か否かを判断する。Ｓ４７０において、ループカウンタｉの値が変数Ｎの値以下であればＳ４６０へと戻るループ処理Ｌ２を実行する。Ｓ４７０において、ループカウンタｉの値が変数Ｎの値よりも大であれば、ループ処理Ｌ２を終了し、図９に示す処理を終了する。
【００６０】
以上説明したように、図８に示すソースコードＢ０には、ループ処理Ｌ１の中で、特定の処理を繰り返し実行する旨の処理ステップＳ３１０〜Ｓ３３０が記述されているだけであるが、コンパイラ１１は、上述の解析結果を考慮して、上述の処理ステップＳ３１０〜Ｓ３３０が、図９中に含まれる処理ステップＳ４１０〜Ｓ４７０に展開されたオブジェクトコードＢ１を生成する。したがって、プログラム作成者は、ソースコード作成段階で図９に示すような処理ステップＳ４１０〜Ｓ４７０を含むソースコードを作成しなくても、単に図８に示すようなソースコードＢ０を作成してコンパイラ１１によるコンパイルを実行するだけで、図９に示すようなオブジェクトコードＢ１を生成することができる。また、そのようなオブジェクトコードＢ１を利用して、ＥＣＵ１において本開示のタスク実行方法を実施することができる。
【００６１】
なお、ソースコードＢ０の解析結果によっては、処理ステップＳ４１０のような動的な判断を行う処理ステップが不要な場合もあり得る。この点は、上述のソースコードＡ０からオブジェクトコードＡ２やオブジェクトコードＡ３が生成される場合と同様なので、これ以上の説明は省略する。
【００６２】
［タスクの実行例］
以下、ＥＣＵ１において複数のタスク＃１〜＃３が実行される際の、タスク＃１〜＃３の切り替えタイミングと、コプロセッサ２Ｂのコンテキスト切り替えのタイミングを、図１０のタイミングチャートに例示する。図１０には、タスク＃２においてコプロセッサ２Ｂが使用され、その後、タスク＃１に切り替えられて特定の処理が実行され、その後、タスク＃３に切り替えられてコプロセッサ２Ｂが使用され、その後、タスク＃１に切り替えられる例が示されている。
【００６３】
図１０の上段には、特定の処理を実行する際に、図２に示すような処理が実行される場合を例示してある。図１０の上段に示すチャートにおいては、タスク＃２においてコプロセッサ２Ｂが使用された後、時刻ｔ１になるとタスク＃１からタスク＃１への切り替えが行われる。このタスクの切り替えの際には、コプロセッサ２Ｂのコンテキスト切り替えは行われず、コプロセッサ２Ｂが有効となっているタスクはタスク＃２のままとなる。
【００６４】
タスク＃１においては、時刻ｔ２になると図２に示すような処理が開始され、最初にコプロセッサ２Ｂが有効かどうかの判定処理が実行される。その結果、タスク＃１においてコプロセッサ２Ｂが無効であると判断されると、引き続いてコプロセッサ２Ｂを使用せず、メインプロセッサ２Ａで特定の処理を実行する。その後、時刻ｔ４に特定の処理を終了したら、その他の処理を実行し、時刻ｔ６になるとタスク＃１からタスク＃３への切り替えが行われる。
【００６５】
その後、タスク＃３では、コプロセッサ２Ｂが有効か否かの判断を行うことなく、コプロセッサ２Ｂを使用する。そのため、タスク＃３においては、コプロセッサ２Ｂを使おうとしたタイミングで、コプロセッサ無効例外が発生し、例外処理へと移行する。例外処理の中では、その時点でコプロセッサ２Ｂが有効となっているタスク＃２を対象として、コプロセッサ２Ｂのコンテキスト退避処理が実行される。
【００６６】
続いて、タスク＃３を対象とするコプロセッサ２Ｂのコンテキスト復帰処理が実行される。これにより、コプロセッサ２Ｂは、タスク＃３において有効となる。例外処理を終えると、例外処理からタスク＃３へと移行する。タスク＃３においては、コプロセッサ２Ｂを使用する処理等が実行され、その後は、タスク＃３からタスク＃１への切り替えが行われる。このタスクの切り替えの際には、コプロセッサ２Ｂのコンテキスト切り替えは行われず、コプロセッサ２Ｂが有効となっているタスクはタスク＃３のままとなる。
【００６７】
図１０の下段には、比較例として、特定の処理を実行する際に、無条件でコプロセッサ２Ｂを使用する場合を例示してある。図１０の下段に示すチャートにおいては、タスク＃２においてコプロセッサ２Ｂが使用された後、時刻ｔ１になるとタスク＃１からタスク＃１への切り替えが行われる。この点は、図１０の上段に示すチャートと同様である。このタスクの切り替えの際、コプロセッサ２Ｂが有効となっているタスクはタスク＃２のままとなる。この点も、図１０の上段に示すチャートと同様である。
【００６８】
その後、タスク＃１においては、時刻ｔ２になると、コプロセッサ２Ｂを使用して特定の処理を実行しようとする。そのため、タスク＃１においては、コプロセッサ２Ｂを使おうとしたタイミングで、コプロセッサ無効例外が発生し、例外処理へと移行する。例外処理の中では、その時点でコプロセッサ２Ｂが有効となっているタスク＃２を対象として、コプロセッサ２Ｂのコンテキスト退避処理が実行される。
【００６９】
続いて、タスク＃１を対象とするコプロセッサ２Ｂのコンテキスト復帰処理が実行される。これにより、コプロセッサ２Ｂは、タスク＃１において有効となる。例外処理を終えると、例外処理からタスク＃１へと移行する。タスク＃１においては、時刻ｔ３から時刻ｔ５になるまでコプロセッサ２Ｂを使用する処理が実行され、時刻ｔ５から時刻ｔ７になるまではその他の処理が実行される。なお、時刻ｔ７以降は、図１０の上段に示すチャートにおける時刻ｔ６以降と同一である。
【００７０】
図１０の上段に示すチャートにおいて、コプロセッサ２Ｂを使うか否かを判断して、コプロセッサ２Ｂを使用せずにメインプロセッサ２Ａで特定の処理を実行するのに要する時間は、時刻ｔ２から時刻ｔ４までの時間（ｔ４−ｔ２）となる。一方、図１０の下段に示すチャートにおいて、コプロセッサ２Ｂを使用して特定の処理を実行するのに要する時間は、時刻ｔ３から時刻ｔ５までの時間（ｔ５−ｔ３）となる。時間（ｔ４−ｔ２）と時間（ｔ５−ｔ３）とでは、コプロセッサ２Ｂを使用する分だけ時間（ｔ５−ｔ３）の方が短時間となる。
【００７１】
ただし、コプロセッサ２Ｂが無効となっているタスク＃１においては、コプロセッサ２Ｂのコンテキスト切り替えを行うために、時刻ｔ２から時刻ｔ３までの時間（ｔ３−ｔ２）を要する。そのため、このコンテキスト切り替えに要する時間も加味すると、時刻ｔ２から時刻ｔ５までの時間（ｔ５−ｔ２）は、上述の時間（ｔ４−ｔ２）よりも長時間となる。
【００７２】
したがって、図１０の上段に示すチャートであれば、時刻ｔ１に開始したタスク＃１が時刻ｔ６に終了するのに対し、図１０の下段に示すチャートの場合、時刻ｔ１に開始したタスク＃１が時刻ｔ６よりも遅い時刻ｔ７まで終了しない。よって、当該チャートに示したような例に関しては、図１０の上段に示すチャートのような処理をＥＣＵ１に実行させるためのプログラムをＥＣＵ１に実装すると好適である。
【００７３】
［他の実施形態］
以上、タスク実行方法、コンパイラ及び電子制御装置について、例示的な実施形態を挙げて説明したが、上述の実施形態は本開示の一態様として例示されるものに過ぎない。すなわち、本開示は、上述の例示的な実施形態に限定されるものではなく、本開示の技術的思想を逸脱しない範囲内において、様々な形態で実施することができる。
【００７４】
例えば、上記実施形態では、ＥＣＵ１において本開示のタスク実行方法を実施するためのプログラムを、本開示のコンパイラで生成する例を示したが、同様な処理ステップを含むプログラムを、一般的なコンパイラで生成することもできる。すなわち、ソースコードを作成する段階で、本開示のタスク実行方法を実施するためのロジックをコーディングすることも可能であり、その場合は、一般的なコンパイラでコンパイルを実施してもよい。
【００７５】
また、上述の実施形態では、コプロセッサ２Ｂを使用するか否かの判断条件として、コプロセッサ２Ｂが有効となっているタスクか否か、及びループ処理における繰り返し回数がしきい値以上か否か、という二つの判断条件を例示したが、これら以外の判断条件を用いてもよい。
【００７６】
また、上述の実施形態では、自動車に搭載される電子制御装置について説明したが、本開示の技術思想は、自動車用以外の電子制御装置に適用することもできる。
また、本開示の技術思想は、上述したタスク実行方法、コンパイラ及び電子制御装置の他に、上述の電子制御装置を構成要素として含む車載ＬＡＮシステム、電子制御装置が備えるコンピュータに上述したタスク実行方法を実行させるためのプログラム、当該プログラムを記録した記録媒体など、種々の形態で実現することができる。記録媒体の例としては、光ディスク、磁気ディスク及び半導体製メモリ等の非遷移的実体的記録媒体（non-transitory tangible storage media）を挙げることができる。
【００７７】
なお、上記各実施形態における一つの構成要素によって実現していた機能を、複数の構成要素によって実現するように構成してもよい。また、複数の構成要素によって実現していた機能を一つの構成要素によって実現するように構成してもよい。また、上記各実施形態の構成の一部を省略してもよい。また、上記各実施形態の構成の少なくとも一部を、他の上記実施形態の構成に対して付加、置換等してもよい。なお、特許請求の範囲に記載の文言から特定される技術思想に含まれる全ての態様が本開示の実施形態に該当する。
【００７８】
［補足］
なお、以上説明した例示的な実施形態から明らかなように、本開示のタスク実行方法は、更に以下に挙げるような構成を備えていてもよい。
【００７９】
まず、本開示のタスク実行方法において、オペレーティングシステムは、次のように構成されていてもよい。第一のタスクにおいてコプロセッサが有効となっている場合に、第一のタスク以外のタスクにおいてはコプロセッサが無効となるように構成される。コプロセッサが無効となっている第二のタスクにおいてコプロセッサを利用しようとした場合には、例外が発生して例外処理の中でコプロセッサのコンテキスト切り替えが実行されるように構成される。例外処理を終了すると第二のタスクへと戻って当該第二のタスクにおいてコプロセッサが有効となっているように構成される。メインプロセッサがタスクを実行する際、判断処理では、判断処理を実行する時点でコプロセッサが有効となっているタスクである場合に、コプロセッサを利用する方が処理時間が短くなると判断し、判断処理を実行する時点でコプロセッサが無効となっているタスクである場合に、コプロセッサを利用せずに特定の処理を実行する方が処理時間が短くなると判断する。
【００８０】
このように構成されたタスク実行方法によれば、コプロセッサが有効となっているタスクにおいては、コプロセッサを利用して特定の処理を迅速に実行することができる。また、コプロセッサが無効となっているタスクにおいては、例外処理への移行及びコプロセッサのコンテキスト切り替えが実行されることに起因して処理時間が増大するのを抑制することができる。
【００８１】
また、本開示のタスク実行方法において、判断処理では、特定の処理を実行する回数がしきい値となる回数以上である場合に、コプロセッサを利用する方が処理時間が短くなると判断し、特定の処理を実行する回数がしきい値となる回数未満である場合に、コプロセッサを利用せずに特定の処理を実行する方が処理時間が短くなると判断してもよい。
【００８２】
このように構成されたタスク実行方法によれば、コプロセッサが利用される機会が多い場合には、コプロセッサを利用してタスクを迅速に実行することができる。また、コプロセッサが利用される機会が少ない場合には、コプロセッサを利用せず、コプロセッサを利用する上で必要となる処理を実行しなくても済む分だけ、タスクを迅速に実行することができる。
【００８３】
また、本開示のコンパイラについても、上述のタスク実行方法と同等な構成を備えていてもよい。すなわち、本開示のコンパイラが対応するオペレーティングシステムは、第一のタスクにおいてコプロセッサが有効となっている場合に、第一のタスク以外のタスクにおいてはコプロセッサが無効となるように構成されていて、コプロセッサが無効となっている第二のタスクにおいてコプロセッサを利用しようとした場合には、例外が発生して例外処理の中でコプロセッサのコンテキスト切り替えが実行され、例外処理を終了すると第二のタスクへと戻って当該第二のタスクにおいてコプロセッサが有効となっているように構成されていてもよい。この場合、本開示のコンパイラは、第一の処理ステップが実行される時点でコプロセッサが有効となっているタスクである場合に、第二の処理ステップが実行され、第一の処理ステップが実行される時点でコプロセッサが無効となっているタスクである場合に、第三の処理ステップが実行されることとなるオブジェクトコードを生成するように構成されていてもよい。
【００８４】
また、本開示のコンパイラは、第一の処理ステップが実行される時点で特定の処理を実行する回数がしきい値となる回数以上になる場合に、第二の処理ステップが実行され、第一の処理ステップが実行される時点で特定の処理を実行する回数がしきい値となる回数未満になる場合に、第三の処理ステップが実行されることとなるオブジェクトコードを生成するように構成されていてもよい。
【００８５】
また、本開示の電子制御装置についても、上述のタスク実行方法と同等な構成を備えていてもよい。すなわち、本開示の電子制御装置において、オペレーティングシステムは、第一のタスクにおいてコプロセッサが有効となっている場合に、第一のタスク以外のタスクにおいてはコプロセッサが無効となるように構成されていて、コプロセッサが無効となっている第二のタスクにおいてコプロセッサを利用しようとした場合には、例外が発生して例外処理の中でコプロセッサのコンテキスト切り替えが実行され、例外処理を終了すると第二のタスクへと戻って当該第二のタスクにおいてコプロセッサが有効となっているように構成されていてもよい。メインプロセッサがタスクを実行する際、判断処理では、判断処理を実行する時点でコプロセッサが有効となっているタスクである場合に、コプロセッサを利用する方が処理時間が短くなると判断し、判断処理を実行する時点でコプロセッサが無効となっているタスクである場合に、コプロセッサを利用せずに特定の処理を実行する方が処理時間が短くなると判断するように構成される。
【００８６】
このように構成された電子制御装置によれば、コプロセッサが有効となっているタスクにおいては、コプロセッサを利用して特定の処理を迅速に実行することができる。また、コプロセッサが無効となっているタスクにおいては、例外処理への移行及びコプロセッサのコンテキスト切り替えが実行されることに起因して処理時間が増大するのを抑制することができる。
【００８７】
また、本開示の電子制御装置において、判断処理では、特定の処理を実行する回数がしきい値となる回数以上である場合に、コプロセッサを利用する方が処理時間が短くなると判断し、特定の処理を実行する回数がしきい値となる回数未満である場合に、コプロセッサを利用せずに特定の処理を実行する方が処理時間が短くなると判断するように構成されていてもよい。
【００８８】
このように構成された電子制御装置によれば、コプロセッサが利用される機会が多い場合には、コプロセッサを利用してタスクを迅速に実行することができる。また、コプロセッサが利用される機会が少ない場合には、コプロセッサを利用せず、コプロセッサを利用する上で必要となる処理を実行しなくても済む分だけ、タスクを迅速に実行することができる。
【符号の説明】
【００８９】
１…ＥＣＵ、２…プロセッサ、２Ａ…メインプロセッサ、２Ｂ…コプロセッサ、３…ＲＡＭ、４…内部バス、５Ａ，５Ｂ…レジスタセット、７Ａ，７Ｂ…コンテキスト退避領域、８…タスク、１１…コンパイラ、１３…ＰＣ、１５…プロセッサ、１６…ＲＡＭ、１７…ハードディスク、２１…字句解析部、２２…構文解析部、２３…意味解析部、２４…最適化部、２５…コード生成部、２６…ソースコードファイル、２７…オブジェクトコードファイル。
【図１】
2019106065.tif 000003
【図２】
2019106065.tif 000004
【図３】
2019106065.tif 000005
【図４】
2019106065.tif 000006
【図５】
2019106065.tif 000007
【図６】
2019106065.tif 000008
【図７】
2019106065.tif 000009
【図８】
2019106065.tif 000010
【図９】
2019106065.tif 000011
【図１０】
2019106065.tif 000012