(57)【要約】【課題】マルチコアマイコンにおける実行時のオーバーヘッドを抑制可能な並列プログラムを作成できる並列化方法、並列化ツール、及び各処理単位を最適に実行できる車載装置を提供すること。【解決手段】コンピュータ１０は、シングルコアマイコン用に記述され複数のタスク３１，３２を含んでいるシングルプログラム３０を解析して、複数のタスク３１，３２をそれぞれ並列化した並列プログラム２１ａ１を生成するものである。コンピュータ１０のＭＴ群抽出部２ｄは、タスク３１，３２間で共通してアクセスされる共通リソースを解析し、共通リソースへのアクセスを示している複数のＭＴを抽出する。そして、コンピュータ１０の配置制約決定部２ｅは、抽出された複数のＭＴを、マルチコアプロセッサにおける同じコアに配置する。【選択図】図３
2017228029.tif 000002
【特許請求の範囲】
【請求項１】
シングルコアマイコン用に記述され複数のタスクを含んでいるシングルプログラムを解析して、前記シングルプログラムの各処理単位間における同じリソースへのアクセスを示している各データ依存関係を基に、複数のコアを有するマルチコアマイコン用に並列化可能な前記処理単位を並列化して、複数の前記タスクのそれぞれを並列化した並列プログラム（２１ａ１）を生成する並列化方法であって、
前記タスク間で共通してアクセスされる前記リソースを解析し、前記リソースへのアクセスを示している複数の前記処理単位を抽出する抽出手順（２ｄ、４）と、
前記抽出手順で抽出された複数の前記処理単位を、前記マルチコアマイコンにおける同じ前記コアに配置する配置手順（２ｅ、４）と、を備えている並列化方法。
【請求項２】
配置手順は、前記抽出手順で抽出され、前記マルチコアマイコンにおける同じ前記コアに配置した複数の前記処理単位にコア内排他処理を追加する請求項１に記載の並列化方法。
【請求項３】
前記配置手順は、前記抽出手順で抽出された複数の前記処理単位を、前記マルチコアマイコンにおける同じ前記コアに配置できなった場合、前記抽出手順で抽出された複数の前記処理単位を、前記マルチコアマイコンにおける異なる前記コアに配置するものであり、
さらに、前記配置手順によって、前記抽出手順で抽出された複数の前記処理単位が、前記マルチコアマイコンにおける異なる前記コアに配置された場合、異なる前記コアが複数の前記処理単位のそれぞれを実行して前記リソースに同時にアクセスすることを避けるために、コア間排他処理を追加する追加手順を備えている請求項１又は２に記載の並列化方法。
【請求項４】
前記配置手順は、前記抽出手順で抽出された複数の前記処理単位を、前記マルチコアマイコンにおける同じ前記コアに配置できなった場合、前記抽出手順で抽出された複数の前記処理単位を、前記マルチコアマイコンにおける異なる前記コアに配置するものであり、
さらに、前記配置手順によって、前記抽出手順で抽出された複数の前記処理単位が、前記マルチコアマイコンにおける異なる前記コアに配置された場合、異なる前記コアが複数の前記処理単位のそれぞれを実行して前記リソースに同時にアクセスすることを避けるために、複数の前記処理単位の一つが実行される際に他の前記処理単位の実行を中断させる中段処理を追加する追加手順を備えている請求項１又は２に記載の並列化方法。
【請求項５】
前記シングルプログラムの各処理単位のうち、前記マルチコアマイコンの前記コアにおける配置先が指定されている前記処理単位を示すコア配置情報を取得するものであり、
前記配置手順は、前記コア配置情報を優先して前記処理単位を指定された前記コアに配置し、且つ、前記抽出手順で抽出された複数の前記処理単位を、前記マルチコアマイコンにおける同じ前記コアに配置する請求項１乃至４のいずれか一項に記載の並列化方法。
【請求項６】
シングルコアマイコン用に記述され複数のタスクを含んでいるシングルプログラムを解析して、前記シングルプログラムの各処理単位間における同じリソースへのアクセスを示している各データ依存関係を基に、マルチコアマイコン用に並列化可能な前記処理単位を並列化して、複数の前記タスクをそれぞれ並列化した並列プログラム（２１ａ１）を生成する、コンピュータを含む並列化ツールであって、
前記タスク間で共通してアクセスされる前記リソースを解析し、前記リソースへのアクセスを示している複数の前記処理単位を抽出する抽出部（２ｄ、４）と、
前記抽出部で抽出された複数の前記処理単位を、前記マルチコアマイコンにおける同じコアに配置する配置部（２ｅ、４）と、を備えている並列化ツール。
【請求項７】
配置部は、前記抽出部で抽出され、前記マルチコアマイコンにおける同じ前記コアに配置した複数の前記処理単位にコア内排他処理を追加する請求項６に記載の並列化ツール。
【請求項８】
前記配置部は、前記抽出部で抽出された複数の前記処理単位を、前記マルチコアマイコンにおける同じ前記コアに配置できなった場合、前記抽出部で抽出された複数の前記処理単位を、前記マルチコアマイコンにおける異なる前記コアに配置するものであり、
さらに、前記配置部によって、前記抽出部で抽出された複数の前記処理単位が、前記マルチコアマイコンにおける異なる前記コアに配置された場合、異なる前記コアが複数の前記処理単位のそれぞれを実行して前記リソースに同時にアクセスすることを避けるために、コア間排他処理を追加する追加部を備えている請求項６又は７に記載の並列化ツール。
【請求項９】
前記配置部は、前記抽出部で抽出された複数の前記処理単位を、前記マルチコアマイコンにおける同じ前記コアに配置できなった場合、前記抽出部で抽出された複数の前記処理単位を、前記マルチコアマイコンにおける異なる前記コアに配置するものであり、
さらに、前記配置部によって、前記抽出部で抽出された複数の前記処理単位が、前記マルチコアマイコンにおける異なる前記コアに配置された場合、異なる前記コアが複数の前記処理単位のそれぞれを実行して前記リソースに同時にアクセスすることを避けるために、複数の前記処理単位の一つが実行される際に他の前記処理単位の実行を中断させる中段処理を追加する追加部を備えている請求項６又は７に記載の並列化ツール。
【請求項１０】
前記シングルプログラムの各処理単位のうち、前記マルチコアマイコンの前記コアにおける配置先が指定されている前記処理単位を示すコア配置情報を取得するものであり、
前記配置部は、前記コア配置情報を優先して前記処理単位を指定された前記コアに配置し、且つ、前記抽出部で抽出された複数の前記処理単位を、前記マルチコアマイコンにおける同じ前記コアに配置する請求項６乃至９のいずれか一項に記載の並列化ツール。
【請求項１１】
複数のコア（２１ｃ、２１ｄ）を有するマルチコアマイコン（２１）と、前記コアが一つであるシングルコアマイコン用に記述され複数のタスクを含んでいるシングルプログラムにおける複数の処理単位から前記マルチコアマイコン用に並列化された並列プログラム（２１ａ１）と、を備えた車載装置であって、
前記並列プログラムは、
前記シングルコアマイコン用に記述され複数のタスクを含んでいるシングルプログラムを解析して、前記シングルプログラムの各処理単位間における同じリソースへのアクセスを示している各データ依存関係を基に、前記マルチコアマイコン用に並列化可能な前記処理単位を並列化して、複数の前記タスクのそれぞれが並列化されており、
前記タスク間で共通してアクセスされる前記リソースを解析し、前記リソースへのアクセスを示している複数の前記処理単位が抽出され、
抽出された複数の前記処理単位が、前記マルチコアマイコンにおける同じ前記コアに配置されており、
前記マルチコアマイコンは、各コアが前記並列プログラムを実行する車載装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シングルコアマイコン用のシングルプログラムから、マルチコアマイコン用の並列プログラムを生成する並列化方法、並列化ツール、及び生成された並列プログラムを実装した車載装置に関する。
【背景技術】
【０００２】
従来、シングルコアマイコン用のシングルプログラムから、マルチコアマイコン用の並列プログラムを生成する並列化方法の一例として特許文献１に開示された並列化コンパイル方法がある。
【０００３】
この並列化コンパイル方法では、シングルプログラムのソースコードを字句解析や構文解析を行って中間言語を生成し、この中間言語を用いて、複数のマクロタスク（以下、処理単位）のデータ依存関係の解析や最適化等を行う。また、並列化コンパイル方法では、各処理単位のデータ依存関係や処理単位毎の実行時間を基にスケジューリングを行って並列プログラムを生成する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１５−１８０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ところで、一般的な組込み系では、ＲＴＯＳ（Real Time Operating System）により複数のタスクの実行を切換えながら実行される。この場合、上記のように並列プログラムを生成する際には、タスク毎に並列化することが考えられる。しかしながら、並列化する際に必要になる同期処理には、有限の処理時間が発生する。よって、並列化されたプログラムが比較的小さい場合、複数のコアで並行実行することによって効率化される処理時間よりも、同期処理により発生するオーバーヘッドの方が大きくなる。このため、全てのタスクが並列化する嬉しさがある訳ではない。つまり、処理時間が比較的短いタスクは、並列化できないとも言える。
【０００６】
また、このような処理時間の短いタスクは、並列化できないだけではなく、他のタスクとの干渉が起こるため、安易に同時に実行させることができなかった。この対策としては、該当処理にコア間排他処理を追加する方法が考えられる。しかしながら、コア間排他処理は、シングルコアにおいて用いられるコア内排他処理と比べてオーバーヘッドが大きく、性能低下の大きな要因となる。
【０００７】
本開示は、上記問題点に鑑みなされたものであり、マルチコアマイコンにおける実行時のオーバーヘッドを抑制可能な並列プログラムを作成できる並列化方法、並列化ツール、及び各処理単位を最適に実行できる車載装置を提供することを目的とする。
【課題を解決するための手段】
【０００８】
上記目的を達成するために本開示は、
シングルコアマイコン用に記述され複数のタスクを含んでいるシングルプログラムを解析して、シングルプログラムの各処理単位間における同じリソースへのアクセスを示している各データ依存関係を基に、複数のコアを有するマルチコアマイコン用に並列化可能な処理単位を並列化して、複数のタスクのそれぞれを並列化した並列プログラム（２１ａ１）を生成する並列化方法であって、
タスク間で共通してアクセスされるリソースを解析し、このリソースへのアクセスを示している複数の処理単位を抽出する抽出手順（２ｄ、４）と、
抽出手順で抽出された複数の処理単位を、マルチコアマイコンにおける同じコアに配置する配置手順（２ｅ、４）と、を備えている。
【０００９】
このように、本開示は、共通してアクセスされるリソースを解析し、このリソースへのアクセスを示している複数の処理単位を抽出するため、異なるタスクに含まれている処理単位のうち、同じリソースにアクセスしている処理単位を抽出できる。そして、本開示は、抽出された複数の処理単位をマルチコアマイコンにおける同じコアに配置するため、コア間排他処理を減らす、又はなくすことができる。よって、本開示では、マルチコアマイコンにおける実行時のオーバーヘッドを抑制可能な並列プログラムを作成できる。
【００１０】
本開示の他の一つは、
シングルコアマイコン用に記述され複数のタスクを含んでいるシングルプログラムを解析して、シングルプログラムの各処理単位間における同じリソースへのアクセスを示している各データ依存関係を基に、マルチコアマイコン用に並列化可能な処理単位を並列化して、複数のタスクをそれぞれ並列化した並列プログラム（２１ａ１）を生成する、コンピュータを含む並列化ツールであって、
タスク間で共通してアクセスされるリソースを解析し、リソースへのアクセスを示している複数の処理単位を抽出する抽出部（２ｄ、４）と、
抽出部で抽出された複数の処理単位を、マルチコアマイコンにおける同じコアに配置する配置部（２ｅ、４）と、を備えている。
【００１１】
このように、並列化ツールでは、上記並列化方法と同様に、マルチコアにおける実行時のオーバーヘッドを抑制可能な並列プログラムを生成できる。
【００１２】
本開示の他の一つは、
複数のコア（２１ｃ、２１ｄ）を有するマルチコアマイコン（２１）と、コアが一つであるシングルコアマイコン用に記述され複数のタスクを含んでいるシングルプログラムにおける複数の処理単位からマルチコアマイコン用に並列化された並列プログラム（２１ａ１）と、を備えた車載装置であって、
並列プログラムは、
シングルコアマイコン用に記述され複数のタスクを含んでいるシングルプログラムを解析して、シングルプログラムの各処理単位間における同じリソースへのアクセスを示している各データ依存関係を基に、マルチコアマイコン用に並列化可能な処理単位を並列化して、複数のタスクのそれぞれが並列化されており、
タスク間で共通してアクセスされるリソースを解析し、リソースへのアクセスを示している複数の処理単位が抽出され、
抽出された複数の処理単位が、マルチコアマイコンにおける同じコアに配置されており、
マルチコアマイコンは、各コアが自身に割り当てられた処理単位を実行する。
【００１３】
このように、車載装置は、マルチコアマイコンと、上記のように生成された並列プログラムとを備えている。そして、マルチコアマイコンは、各コアが並列プログラムを実行する。つまり、車載装置は、オーバーヘッドが抑制された並列プログラムを実行することになる。よって、車載装置は、各処理単位を最適に実行できる。
【００１４】
なお、特許請求の範囲、及びこの項に記載した括弧内の符号は、一つの態様として後述する実施形態に記載の具体的手段との対応関係を示すものであって、発明の技術的範囲を限定するものではない。
【図面の簡単な説明】
【００１５】
【図１】実施形態におけるコンピュータの概略構成を示すブロック図である。
【図２】実施形態における車載装置の概略構成を示すブロック図である。
【図３】実施形態におけるコンピュータの機能を示すブロック図である。
【図４】実施形態におけるコンピュータの処理を示すフローチャートである。
【図５】実施形態におけるシングルプログラムを示す図面である。
【図６】実施形態におけるタスク毎のＭＴの処理順序を示す図面である。
【図７】実施形態におけるタスク毎のデータ依存関係を示す図面である。
【図８】実施形態における第１タスクのスケジューリング結果を示す図面である。
【図９】実施形態における第２タスクのスケジューリング結果を示す図面である。
【図１０】実施形態におけるマルチコアのタスク切替えと、各ＭＴの配置結果とを示す図面である。
【図１１】変形例におけるコンピュータの機能を示すブロック図である。
【図１２】変形例におけるコンピュータの処理を示すフローチャートである。
【発明を実施するための形態】
【００１６】
以下において、図面を参照しながら、発明を実施するための複数の形態を説明する。各形態において、先行する形態で説明した事項に対応する部分には同一の参照符号を付して重複する説明を省略する場合がある。各形態において、構成の一部のみを説明している場合は、構成の他の部分については先行して説明した他の形態を参照し適用することができる。
【００１７】
本実施形態では、コアが一つであるシングルコアマイコン用のシングルプログラム３０における複数の処理単位から第１コア２１ｃと第２コア２１ｄを有するマルチコアプロセッサ２１用に並列化した並列プログラム２１ａ１を生成するコンピュータ１０を採用する。
【００１８】
また、本実施形態は、並列プログラム２１ａ１を生成するための自動並列化コンパイラ１を採用する。さらに、本実施形態では、コンピュータ１０で生成された並列プログラム２１ａ１を備えた車載装置２０を採用する。なお、プロセッサは、マイコンと言い換えることができる。よって、マルチコアプロセッサは、マルチコアマイコンと言い換えることができる。
【００１９】
自動並列化コンパイラ１は、並列プログラム２１ａ１を生成するための手順を含んでいる。よって、自動並列化コンパイラ１は、並列化方法に相当する。また、自動並列化コンパイラ１は、並列化方法を含むプログラムである。さらに、コンピュータ１０は、自動並列化コンパイラ１を実行することで、並列プログラム２１ａ１を生成する。よって、コンピュータ１０は、並列化ツールに相当する。
【００２０】
なお、シングルプログラム３０は、複数のタスク３１，３２を含んでおり、組込み系ＲＴＯＳによって、複数のタスク３１，３２の実行を切替えながら実行される。コンピュータ１０は、シングルプログラム３０における複数のタスク３１，３２のそれぞれを並列化した並列プログラム２１ａ１を生成する。また、自動並列化コンパイラ１は、シングルプログラム３０における複数のタスク３１，３２のそれぞれを並列化した並列プログラム２１ａ１を生成するためのものである。
【００２１】
このように、並列プログラム２１ａ１を生成する背景としては、プロセッサの発熱量増大や消費電力増加、クロック周波数の限界問題から、マルチコアプロセッサ２１が主流になることなどがあげられる。そして、マルチコアプロセッサ２１は、車載装置の分野においても適用が必要となっている。また、並列プログラム２１ａ１としては、ソフトの開発期間や開発費を抑えつつ、信頼性が高く高速に処理の実行が可能なものが求められる。
【００２２】
なお、並列プログラム２１ａ１を生成する際には、シングルプログラム３０における複数の処理単位のデータ依存関係を解析して、複数の処理単位をマルチコアプロセッサ２１の異なるコア２１ｃ、２１ｄに割り振る（言い換えると、割り付ける、配置する）。この点に関しては、特開２０１５−１８０７号公報を参照されたい。なお、本実施形態では、一例として、Ｃ言語で記述されたシングルプログラム３０を採用する。しかしながら、本発明は、これに限定されない。シングルプログラム３０は、Ｃ言語とは異なるプログラミング言語で記述されていてもよい。
【００２３】
上記処理単位は、処理ブロックやマクロタスクなどと言い換えることができる。以下においては、処理単位をＭＴとも称する。本実施形態では、図５などに示すように、一例として、第１１ＭＴ〜第１３ＭＴ、及び第２１ＭＴ〜第２３ＭＴを採用する。各ＭＴは、第１コア２１ｃや第２コア２１ｄが実行可能な命令を少なくとも一つ含んでいる。
【００２４】
ここで、図５を用いて、本実施形態で採用するシングルプログラム３０に関して説明する。図５の逐次Ｃソース３０は、シングルプログラム３０に相当する。また、図５には、シングルコアマイコンにおけるタスク切替え処理と、シングルコアにおけるＭＴ処理順序を図示している。シングルプログラム３０は、第１タスク３１と第２タスク３２とを含んでおり、各起床のタイミング等で第１タスク３１と第２タスク３２とが切替えられて実行される。なお、図５〜図１０に関しては、第１タスク３１のＭＴと、第２タスク３２のＭＴをわかりやすくするためにハッチングを施している。
【００２５】
図６に示すように、第１タスク３１には、第１１ＭＴ〜第１３ＭＴが含まれている。第１タスク３１における処理順序は、第１１ＭＴ、第１２ＭＴ、第１３ＭＴである。一方、第２タスク３２には、第２１ＭＴ〜第２３ＭＴが含まれている。第２タスク３２における処理順序は、第２１ＭＴ、第２２ＭＴ、第２３ＭＴである。なお、第１タスク３１は、第２タスク３２よりも優先度が高いものとする。
【００２６】
複数のＭＴは、お互いにデータ依存関係があるＭＴが含まれている。本実施形態では、第１１ＭＴと第１２ＭＴ、第１１ＭＴと第１３ＭＴ、第１３ＭＴと第２１ＭＴのそれぞれがデータ依存関係がある。図７では、データ依存関係があるＭＴどうしを矢印で繋いで図示している。
【００２７】
このデータ依存関係は、二つのＭＴが同一のデータにアクセスする際の関係である。また、データ依存関係は、各ＭＴにおける同じリソースへのアクセスを示す関係とも言える。よって、データ依存関係がある二つのＭＴは、共通のリソースへのアクセスを示すものである。複数のＭＴを含むシングルプログラム３０には、複数のデータ依存関係が存在することになる。以下においては、複数のＭＴがアクセスを示している同じリソースを共通リソースとも称する。
【００２８】
また、データ依存関係は、第１〜第３ケースがある。第１ケースは、第１ＭＴがデータを書込み（Ｗｒｉｔｅ）、そのデータを第２ＭＴが参照（Ｒｅａｄ）する関係である。また、第２ケースは、第１ＭＴと第２ＭＴが同一のデータを書込みする関係である。そして、第３ケースは、第１ＭＴがデータを参照し、そのデータに第２ＭＴを書込みする関係である。第１ＭＴは、シングルプログラム３０における実行順序が第２ＭＴよりも先である。なお、この第１ＭＴと第２ＭＴは、データ依存関係を説明するために用いたＭＴである。
【００２９】
そして、シングルプログラム３０は、同一のデータにアクセスする二つのＭＴが、異なるタスクに含まれていた場合、データへのアクセスによってタスク間で干渉が起こることを回避するために、コア内排他処理を含んでいる。よって、シングルコアマイコンは、コア内排他処理を行うことなる。
【００３０】
本実施形態では、図５に示すように、第１タスク３１の第１３ＭＴと第２タスク３２の第２１ＭＴでの干渉を回避するために、コア内排他処理を含んでいる例を採用している。コア内排他処理は、タスクの割り込み禁止と、タスクの割り込み許可とを行う処理である。例えば、第１タスク３１が実行している際に、第２タスク３２の割り込みを禁止し、第１タスク３１の実行が終了すると、第２タスク３２の割り込みを許可する。
【００３１】
なお、データ依存関係がある二つのＭＴが異なるコアに配置された並列プログラムは、コア間干渉を回避するために、コア間排他処理などを含むことが考えられる。しかしながら、コア間排他処理は、コア内排他処理と比べてオーバーヘッドが大きく、性能低下の大きな要因となる。
【００３２】
ここで、図１、図３を用いて、コンピュータ１０の構成に関して説明する。コンピュータ１０は、ディスプレイ１１、ＨＤＤ１２、ＣＰＵ１３、ＲＯＭ１４、ＲＡＭ１５、入力装置１６、読取部１７などを備えて構成されている。また、コンピュータ１０は、記憶媒体１８に記憶された記憶内容を読み取り可能に構成されている。この記憶媒体１８には、自動並列化コンパイラ１が記憶されている。よって、コンピュータ１０は、記憶媒体１８に記憶された自動並列化コンパイラ１を実行することで、並列プログラム２１ａ１を生成する。
【００３３】
コンピュータ１０及び記憶媒体１８の構成は、特開２０１５−１８０７号公報に記載されたパーソナルコンピュータ１００及び記憶媒体１８０を参照されたい。なお、自動並列化コンパイラ１は、特開２０１５−１８０７号公報に記載されたものに加えて、ＭＴ群抽出部２ｄや配置制約決定部２ｅなどを含んでいる。
【００３４】
また、コンピュータ１０は、図３に示すように、機能ブロックとして、第１タスク３１用の機能ブロックと、第２タスク３２用の機能ブロックとを備えている。コンピュータ１０は、第１タスク３１用の機能ブロックで並列化後の第１タスク３１ａを生成するとともに、第２タスク３２用の機能ブロックで並列化後の第２タスク３２ａを生成する。そして、コンピュータ１０は、並列化後の第１タスク３１ａと並列化後の第２タスク３２ａとをソフト結合して、並列プログラム２１ａ１を生成する。なお、並列プログラム２１ａ１は、並列化Ｃソースとも言える。
【００３５】
なお、本実施形態では、コア依存情報４１を取得可能なコンピュータ１０を採用している。コア依存情報４１は、コア配置情報に相当し、シングルプログラム３０の各ＭＴのうち、各コア２１ｃ、２１ｄのいずれかが配置先として指定されているＭＴを示す情報である。なお、シングルプログラム３０の各ＭＴのうち配置先が指定されているＭＴは、指定されたコアに依存していると言える。
【００３６】
第１タスク３１用の機能ブロックは、第１アクセス解析部１ａ、第１データ依存関係解析部１ｂ、第１コア依存判断部１ｃ、第１スケジューリング部１ｄなどを含んでいる。
【００３７】
第１アクセス解析部１ａは、第１タスク３１内の各ＭＴのアクセスリソースを解析する。つまり、第１アクセス解析部１ａは、第１タスク３１内の各ＭＴがアクセスするリソース（データ）を抽出する。第１データ依存関係解析部１ｂは、第１タスク３１内の各ＭＴのデータ依存関係を解析する。また、第１データ依存関係解析部１ｂは、データ依存関係を解析して、並列化可能なＭＴを抽出する。
【００３８】
第１コア依存判断部１ｃは、コア依存情報４１に基づいて、第１タスク３１内の各ＭＴのうち配置先が指定されているＭＴと、そのＭＴの配置先とを判断する。第１スケジューリング部１ｄは、コア割り付けとスケジューリングを行う。第１スケジューリング部１ｄは、データ依存関係とコア依存情報４１に基づいた判断結果とに基づいて、第１タスク３１内の各ＭＴを第１コア２１ｃと第２コア２１ｄのいずれかに配置するとともにスケジューリングを行う。そして、コンピュータ１０は、最適な、並列化後の第１タスク３１ａを生成する。
【００３９】
第２タスク３２用の機能ブロックは、第２アクセス解析部２ａ、第２データ依存関係解析部２ｂ、第２コア依存判断部２ｃ、ＭＴ群抽出部２ｄ、配置制約決定部２ｅ、第２スケジューリング部２ｆなどを含んでいる。
【００４０】
第２アクセス解析部２ａは、第２タスク３２内の各ＭＴのアクセスリソースを解析する。つまり、第２アクセス解析部２ａは、第２タスク３２内の各ＭＴがアクセスするリソースを抽出する。第２データ依存関係解析部２ｂは、第２タスク３２内の各ＭＴのデータ依存関係を解析する。また、第２データ依存関係解析部２ｂは、データ依存関係を解析して、並列化可能なＭＴを抽出する。第２コア依存判断部２ｃは、コア依存情報４１に基づいて、第２タスク３２内の各ＭＴのうち配置先が指定されているＭＴと、そのＭＴの配置先とを判断する。
【００４１】
ＭＴ群抽出部２ｄは、タスクを跨いで共通リソースへのアクセスを示しているＭＴ群を抽出する（抽出部）。つまり、ＭＴ群抽出部２ｄは、タスク間で共通してアクセスされるリソースを解析し、共通リソースへのアクセスを示している複数のＭＴ、例えば二つのＭＴを抽出する。よって、抽出されたＭＴどうしは、共通リソースへのアクセスを示しており、且つ、異なるタスクに含まれている。
【００４２】
なお、コンピュータ１０は、自動並列化コンパイラ１を実行することで、ＭＴ群抽出部２ｄの機能を実行するものである。よって、ＭＴ群抽出部２ｄは、抽出手順に相当するとみなせる。
【００４３】
配置制約決定部２ｅは、第１スケジューリング部１ｄの結果と、第２コア依存判断部２ｃの判断結果と、抽出したＭＴ群とに基づいて、第２タスク３２内の各ＭＴにおける配置制約を決定する（配置部）。つまり、配置制約決定部２ｅは、第２タスク３２内の各ＭＴを、第１コア２１ｃ又は第２コア２１ｄに配置する際の制約を決定する。詳述すると、配置制約決定部２ｅは、第１スケジューリング部１ｄの結果と、第２コア依存判断部２ｃの判断結果とを考慮して、ＭＴ群抽出部２ｄで抽出された複数のＭＴを、マルチコアプロセッサ２１における同じコアに配置する。
【００４４】
なお、配置制約決定部２ｅは、コア依存情報４１で指定されている配置先を優先して、ＭＴ群抽出部２ｄで抽出された複数のＭＴを、マルチコアプロセッサ２１における同じコアに配置する。つまり、配置制約決定部２ｅは、コア依存情報４１で指定されている配置先を変更しない範囲内で、ＭＴ群抽出部２ｄで抽出された複数のＭＴを、マルチコアプロセッサ２１における同じコアに配置する。
【００４５】
ところで、コンピュータ１０は、自動並列化コンパイラ１を実行することで、配置制約決定部２ｅの機能を実行するものである。よって、配置制約決定部２ｅは、配置手順に相当するとみなせる。
【００４６】
そして、第２スケジューリング部２ｆは、コア割り付けとスケジューリングを行う。第２スケジューリング部２ｆは、データ依存関係と配置制約に基づいて、第２タスク３２内の各ＭＴを第１コア２１ｃと第２コア２１ｄのいずれかに配置するとともにスケジューリングを行う。そして、コンピュータ１０は、最適な、並列化後の第２タスク３２ａを生成する。
【００４７】
ここで、図４を用いて、コンピュータ１０の処理動作に関して説明する。なお、以下に示す各ステップＳ１０〜Ｓ１６は、自動並列化コンパイラ１の手順に相当するとも言える。
【００４８】
ステップＳ１０では、処理対象タスクを決定する。コンピュータ１０は、各タスクを順次スキャンして処理対象タスクを決定する。
【００４９】
ステップＳ１１では、リソースを抽出する。コンピュータ１０は、処理対象タスク内の各ＭＴがアクセスするリソースを抽出する。ステップＳ１１は、第１アクセス解析部１ａや第２アクセス解析部２ａが実行する処理と言える。
【００５０】
ステップＳ１２では、データ依存関係を解析する。コンピュータ１０は、処理対象タスク内の各ＭＴ間のデータ依存関係を解析する。ステップＳ１２は、第１データ依存関係解析部１ｂや第２データ依存関係解析部２ｂが実行する処理と言える。
【００５１】
ステップＳ１３では、各ＭＴのコア依存を判断する。コンピュータ１０は、例えば機能安全上の理由で実行コアの指定がある等、コア依存情報４１がある場合、これに従って、各ＭＴのコア依存を判断する。ステップＳ１３は、第１コア依存判断部１ｃや第２コア依存判断部２ｃが実行する処理と言える。
【００５２】
ステップＳ１４では、各ＭＴの配置制約を決定する。コンピュータ１０は、タスクを跨いで共通リソースへのアクセスを示しているＭＴ群を抽出し、各ＭＴのコア依存がある場合、コア依存情報４１に違反しない範囲内で各ＭＴの配置制約を決定する。つまり、コンピュータ１０は、タスクを跨いで共通リソースへのアクセスを示している複数のＭＴを、コア依存情報４１に違反することなく、同じコアに配置する。本実施形態では、第１タスク３１の第１３ＭＴと、第２タスク３２の第２１ＭＴとを第１コア２１ｃに配置する。ステップＳ１４は、ＭＴ群抽出部２ｄと配置制約決定部２ｅが実行する処理と言える。
【００５３】
ステップＳ１５では、コア配置とスケジューリングを行う。コンピュータ１０は、処理対象タスク内の各ＭＴに関して、配置制約とデータ依存関係に従って、コア配置とスケジューリングを行う。ステップＳ１５は、第１スケジューリング部１ｄや第２スケジューリング部２ｆが実行する処理と言える。
【００５４】
なお、コンピュータ１０は、二つのタスク３１，３２のそれぞれを処理対象タスクとして、ステップＳ１０〜Ｓ１５を実施する。しかしながら、ステップＳ１４に関しては、二つのタスクのうちの一方のタスクが処理対象である場合のみ実施すればよい。よって、コンピュータ１０は、最初のタスクを処理実行タスクに決定した場合、ステップＳ１４を実行しない。さらに、この場合、コンピュータ１０は、ステップＳ１５において、データ依存関係の解析結果、コア依存情報４１に基づいた判断結果に従って、コア配置とスケジューリングを行う。そして、コンピュータ１０は、次のタスクを処理実行タスクに決定した場合に、ステップＳ１４を実行するとともに、ステップＳ１５において、配置制約とデータ依存関係に従って、コア配置とスケジューリングを行う。
【００５５】
ステップＳ１６では、全タスクについて、処理実施済みであるか否かを判定する。コンピュータ１０は、全タスクのうちステップＳ１０〜Ｓ１５を実施していないタスクがある場合、処理実施済みでないと判定してステップＳ１０へ戻る。コンピュータ１０は、全タスクのうちステップＳ１０〜Ｓ１５を実施していないタスクがない場合、処理実施済みであると判定して図４の処理を終了する。このように、コンピュータ１０は、全タスクのそれぞれを順番に対象として、ステップＳ１０〜Ｓ１５を実施する。また、コンピュータ１０は、コア配置とスケジューリングをタスク毎に順番に行うと言える。
【００５６】
コンピュータ１０は、このように処理を実行することで、図５に示すシングルプログラム３０から、図１０に示す並列プログラム２１ａ１を生成する。コンピュータ１０は、第１タスク３１の各ＭＴを対象としてスケジューリングすることで、図８に示すように、全ＭＴを第１コア２１ｃに配置した並列化後の第１タスク３１ａとする。
【００５７】
また、コンピュータ１０は、第２タスク３２の各ＭＴを対象としてスケジューリングすることで、図９に示すように、各ＭＴを第１コア２１ｃと第２コア２１ｄに配置した並列化後の第２タスク３２ａとする。このとき、コンピュータ１０は、第１３ＭＴとデータ依存関係がある第２１ＭＴを、第１３ＭＴと同じ第１コア２１ｃに配置する。
【００５８】
そして、コンピュータ１０は、並列化後の第１タスク３１ａと第２タスク３２ａとをソフト結合することで、図１０に示す並列プログラム２１ａ１を生成することになる。また、コンピュータ１０は、データ依存関係がある第１タスク３１の第１３ＭＴと第２タスク３２の第２１ＭＴとを、同じコアに配置している。このため、コンピュータ１０は、タスクを跨いで干渉が起こることを回避するために、割込み禁止等のコア内排他処理により対策可能である。コア内排他処理は基本的には並列化前のプログラム設計時に追加され、含まれているが、必要に応じて解析結果を基にコア内排他処理を追加して並列プログラム２１ａ１を生成するとも言える（配置部）。ここでは、図１０の二点鎖線で示すように、コンピュータ１０は、第１タスク３１の第１３ＭＴと第２タスク３２の第２１ＭＴとにコア内排他処理を追加している。なお、コア内排他処理は、シングルプログラム３０にもともと含まれている。また、自動並列化コンパイラ１は、配置手順を含んでいると言える。
【００５９】
このように、コンピュータ１０は、共通してアクセスされるリソースを解析し、この共通リソースへのアクセスを示している複数のＭＴを抽出するため、異なるタスクに含まれているＭＴのうち、共通リソースにアクセスしているＭＴを抽出できる。そして、コンピュータ１０は、抽出された複数のＭＴをマルチコアプロセッサ２１における同じコアに配置するため、コア間排他処理を減らす、又はなくすことができる。よって、コンピュータ１０では、マルチコアプロセッサ２１における実行時のオーバーヘッドを抑制可能な並列プログラム２１ａ１を作成できる。また、これに伴って、コンピュータ１０は、図１０に示すように、コア間排他処理を含んだ並列プログラムよりも、新規の処理を追加実行する余裕が多い並列プログラム２１ａ１を生成できる。
【００６０】
なお、コンピュータ１０は、自動並列化コンパイラ１を実行することで並列プログラムを生成する。このため、自動並列化コンパイラ１は、コンピュータ１０と同様の効果を奏することができる。
【００６１】
また、コンピュータ１０は、第１コア依存判断部１ｃ及び第２コア依存判断部２ｃを備えていなくても目的を達成できる。よって、コンピュータ１０は、ステップＳ１３を実施しなくてもよい。この場合、コンピュータ１０は、ステップＳ１４において、コア依存に関係なく、タスクを跨いで共通リソースへのアクセスを示している複数のＭＴを同じコアに配置する。
【００６２】
次に、車載装置２０の構成に関して説明する。車載装置２０は、図２に示すように、マルチコアプロセッサ２１、通信部２２、センサ部２３、入出力ポート２４を備えて構成されている。また、マルチコアプロセッサ２１は、ＲＯＭ２１ａ、ＲＡＭ２１ｂ、第１コア２１ｃ、第２コア２１ｄを備えて構成されている。車載装置２０は、例えば、自動車に搭載されたエンジン制御装置やハイブリッド制御装置などに適用できる。しかしながら、並列プログラム２１ａ１は、これに限定されない。なお、コアは、プロセッサエレメントとも称することができる。
【００６３】
第１コア２１ｃと第２コア２１ｄは、並列プログラム２１ａ１を実行することで、エンジン制御やハイブリッド制御などを行う。つまり、車載装置２０は、第１コア２１ｃと第２コア２１ｄのそれぞれに割り当てられたＭＴを、第１コア２１ｃと第２コア２１ｄが実行することで、エンジン制御やハイブリッド制御などを行う。
【００６４】
このように、車載装置２０は、マルチコアプロセッサ２１と、上記のように生成された並列プログラム２１ａ１とを備えている。そして、マルチコアプロセッサ２１は、各コア２１ｃ、２１ｄが並列プログラム２１ａ１を実行する。つまり、車載装置２０は、オーバーヘッドが抑制された並列プログラム２１ａ１を実行することになる。よって、車載装置２０は、各ＭＴを最適に実行できる。
【００６５】
また、オーバーヘッドは、マルチコアプロセッサ２１の性能低下の要因となりうる。よって、マルチコアプロセッサ２１は、オーバーヘッドが抑制された並列プログラム２１ａ１を実行するため、性能低下を抑制できるとも言える。
【００６６】
なお、ＲＡＭ２１ｂ、通信部２２、センサ部２３、入出力ポート２４は、特開２０１５−１８０７号公報に記載されたＲＡＭ４２０、通信部４３０、センサ部４５０、入出力ポート４６０を参照されたい。
【００６７】
コンピュータ１０は、タスクを跨いで共通リソースへのアクセスを示している複数のＭＴを抽出した場合、この複数のＭＴを同じコアに配置できないこともありうる。この場合、コンピュータ１０は、抽出した複数のＭＴを、異なるコアに配置する。つまり、コンピュータ１０は、抽出した複数のＭＴを、第１コア２１ｃと第２コア２１ｄとにわけて配置する。そして、コンピュータ１０は、第１コア２１ｃと第２コア２１ｄが複数のＭＴのそれぞれを実行して共通リソースに同時にアクセスすることを避けるために、コア間排他処理を追加して並列プログラム２１ａ１を生成してもよい（追加部）。なお、コア間排他処理としては、例えばセマフォなどを採用できる。
【００６８】
よって、コンピュータ１０は、コア間排他処理を含む並列プログラム２１ａ１を生成すると言える。言い換えると、コンピュータ１０は、抽出した複数のＭＴが配置された異なるコアによる、共通リソースへの競合（干渉）を抑制するための処理を追加して並列プログラム２１ａ１を生成する。
【００６９】
このため、コンピュータ１０は、タスクを跨いで共通リソースへのアクセスを示している複数のＭＴが配置された第１コア２１ｃと第２コア２１ｄによる共通リソースへの競合が抑制される並列プログラム２１ａ１を生成できる。なお、自動並列化コンパイラ１は、コンピュータ１０と同様の効果を奏することができる。また、追加部は、自動並列化コンパイラ１の追加手順と言える。
【００７０】
また、コンピュータ１０は、タスクを跨いで共通リソースへのアクセスを示している複数のＭＴを第１コア２１ｃと第２コア２１ｄにわけて配置する場合、中断処理を追加して並列プログラム２１ａ１を生成してもよい（追加部）。つまり、コンピュータ１０は、第１コア２１ｃと第２コア２１ｄが複数のＭＴのそれぞれを実行して共通リソースに同時にアクセスすることを避けるために、複数のＭＴの一つが実行される際に他のＭＴの実行を中断させる中段処理を追加する。
【００７１】
よって、コンピュータ１０は、中断処理を含む並列プログラム２１ａ１を生成すると言える。言い換えると、コンピュータ１０は、抽出した複数のＭＴが配置された異なるコアによる、共通リソースへの競合（干渉）を抑制するための処理を追加して並列プログラム２１ａ１を生成する。
【００７２】
このため、コンピュータ１０は、タスクを跨いで共通リソースへのアクセスを示している複数のＭＴが配置された第１コア２１ｃと第２コア２１ｄによる共通リソースへの競合が抑制される並列プログラム２１ａ１を生成できる。なお、自動並列化コンパイラ１は、コンピュータ１０と同様の効果を奏することができる。また、追加部は、自動並列化コンパイラ１の追加手順と言える。
【００７３】
なお、本実施形態は、三つ以上のタスクを含むシングルプログラム３０であっても採用できる。この場合、コンピュータ１０は、タスクの数に応じて、機能ブロックを有することになる。しかしながら、コンピュータ１０は、ＭＴ群抽出部２ｄなどを含む機能ブロックに関しては一つ有していればよい。
【００７４】
以上、本発明の好ましい実施形態について説明した。しかしながら、本発明は、上記実施形態に何ら制限されることはなく、本発明の趣旨を逸脱しない範囲において、種々の変形が可能である。以下に、本発明のその他の形態に関して説明する。
【００７５】
（変形例）
ここで、図１１、図１２を用いて、本発明の変形例に関して説明する。変形例のコンピュータ１０ａは、コア配置とスケジューリングを、全タスクを対象として一括で行う点がコンピュータ１０と異なる。なお、変形例では、第１タスク３３、第２タスク３４、第３タスク３５の三つのタスクを含んでいるシングルプログラム３０を採用している。しかしながら、変形例では、二つのタスクを含むシングルプログラム３０、又は四つ以上のタスクを含むシングルプログラム３０であっても採用できる。
【００７６】
コンピュータ１０ａは、変形例の自動並列化コンパイラを実行することで、並列プログラムを生成する。図１１に示すように、コンピュータ１０は、第１タスク３３用の機能ブロックとして第１アクセス解析部１ａと第１データ依存関係解析部１ｂ、第２タスク３４用の機能ブロックとして第２アクセス解析部２ａと第２データ依存関係解析部２ｂとを含んでいる。また、コンピュータ１０は、第３タスク用の機能ブロックとして第３アクセス解析部３ａと第３データ依存関係解析部３ｂを含んでいる。第３アクセス解析部３ａは、第１アクセス解析部１ａや第２アクセス解析部２ａと同様である。第３データ依存関係解析部３ｂは、第１データ依存関係解析部１ｂや第２データ依存関係解析部２ｂと同様である。
【００７７】
さらに、コンピュータ１０は、共通の機能ブロックとして、コア依存判断部３、配置制約決定部４、最適化部５を含んでいる。コア依存判断部３は、第１コア依存判断部１ｃや第２コア依存判断部２ｃと同様である。
【００７８】
配置制約決定部４は、ＭＴ群抽出部２ｄと配置制約決定部２ｅに相当する（配置部）。配置制約決定部４は、コア依存と各タスクのアクセスリソースで決まるコア配置制約を決定する。つまり、配置制約決定部４は、タスクを跨いで共通リソースへのアクセスを示しているＭＴ群を抽出する。
【００７９】
そして、配置制約決定部４は、コア依存判断部３の判断結果と、抽出したＭＴ群とに基づいて、各ＭＴの配置制約を決定する。つまり、配置制約決定部４は、コア依存判断部３の判断結果とを考慮して、抽出された複数のＭＴを、マルチコアプロセッサ２１における同じコアに配置する。また、配置制約決定部４は、コア依存判断部３で指定されている配置先を変更しない範囲内で、抽出された複数のＭＴを、マルチコアプロセッサ２１における同じコアに配置する。
【００８０】
なお、配置制約決定部４は、コンピュータ１０と同様に、抽出された複数のＭＴを、マルチコアプロセッサ２１における同じコアに配置した場合、タスクを跨いで干渉が起こることを回避するために、コア内排他処理を追加してもよい（配置部）。以上のように、変形例における自動並列化コンパイラは、配置手順を含んでいると言える。
【００８１】
最適化部５は、仮コア配置、スケジューリング、最適化を行う機能ブロックである。最適化部５は、第１スケジューリング部１ｄや第２スケジューリング部２ｆに相当する。最適化部５は、コア配置制約がない各タスクのＭＴについて仮コア配置し、タスク毎にスケジューリングを行い、各タスクの処理バランスを最適化する。
【００８２】
ここで、図１２を用いて、コンピュータ１０ａの処理動作に関して説明する。なお、以下に示す各ステップＳ２０〜Ｓ２９は、変形例における自動並列化コンパイラの手順に相当するとも言える。
【００８３】
ステップＳ２０〜ステップＳ２２は、ステップＳ１０〜ステップＳ１２と同様である。
【００８４】
ステップＳ２３は、全タスクについて、ステップＳ２０〜２２の処理が実施済みであるか否かを判定する。コンピュータ１０は、全タスクのうちステップＳ２０〜Ｓ２２を実施していないタスクがある場合、処理実施済みでないと判定してステップＳ２０へ戻る。コンピュータ１０は、全タスクのうちステップＳ２０〜Ｓ２２を実施していないタスクがない場合、処理実施済みであると判定してステップＳ２４へ進む。
【００８５】
ステップＳ２４では、各ＭＴのコア依存を判断する。コンピュータ１０ａは、例えば機能安全上の理由で実行コアの指定がある等、コア依存情報４１がある場合、これに従って、各ＭＴのコア依存を判断する。ステップＳ２４は、コア依存判断部３が実行する処理と言える。
【００８６】
ステップＳ２５では、各ＭＴのコア配置を決定する。コンピュータ１０ａは、既にあるコア依存に従って決まるＭＴについて、全タスクの各ＭＴにおけるコア配置を決定する。さらに、コンピュータ１０ａは、各タスクで共通リソースにアクセスするＭＴ群を同じコアに配置する。ステップＳ２５は、配置制約決定部４が実行する処理と言える。
【００８７】
ステップＳ２６では、配置が未決定の各ＭＴをコアに仮配置する（仮コア配置）。コンピュータ１０ａは、ステップＳ２５において、配置先のコアが決まっていないＭＴを、任意のコアに仮配置する。
【００８８】
ステップＳ２７では、各ＭＴの実行順序を決める（スケジューリング）。コンピュータ１０ａは、各タスク内における各ＭＴの実行順序を決める。
【００８９】
ステップＳ２８では、評価関数を演算する。コンピュータ１０ａは、各ＭＴを仮配置した状態で評価関数を演算する。この評価関数は、コア配置が最適化否かを判断するための指標である。評価関数は、例えば、（各コアの処理時間の合計）／（各コアの処理時間の最大値）で表すことができる。つまり、評価関数＝Σ({各タスクの実行頻度}×{各タスクの各コアの処理時間})／max({各タスクの実行頻度}×{各タスクの各コアの処理時間})で表すことができる。
【００９０】
ステップＳ２９では、評価関数が最大であるか否かを判定する。つまり、コンピュータ１０ａは、評価関数を演算することで得られた値が最大であるか否かを判定すると言える。コンピュータ１０ａは、評価関数が最大と判断しなかった場合、各タスク内の処理バランスが最適化されていないとみなしてステップＳ２６へ戻る。また、コンピュータ１０ａは、評価関数が最大と判断した場合、各タスク内の処理バランスが最適化されたとみなして図１２の処理を終了する。つまり、処理バランスの最適化とは、評価関数を最大化するＭＴのコア配置と言える。例えば、全てのＭＴのコア配置の組合せの中で評価関数が最大のものを選択すればよい。ただし、実際には、ＭＴ数に対して解析規模が著しく増加することが考えられるため、効率よく探索するアルゴリズムがあると好ましい。しかしながら、ここでは、アルゴリズムによる効率化は必須ではない。
【００９１】
このように、コンピュータ１０ａは、ステップＳ２６〜Ｓ２９を繰り返し実施することで、各タスク内の処理バランス、言い換えると各ＭＴのコア配置を最適化する。つまり、コンピュータ１０ａは、仮配置した各ＭＴのコア配置を入れ替えながら、各タスク内の処理バランスを最適化する。このステップＳ２６〜Ｓ２９は、最適化部５が実行する処理と言える。
【００９２】
コンピュータ１０ａは、このように処理を実行することで、シングルプログラム３０から、並列化後の第１タスク３３ａと第２タスク３４ａと第３タスク３５ａを生成する。そして、コンピュータ１０ａは、並列化後の第１タスク３３ａ〜第３タスク３５ａをソフト結合することで、並列プログラム２１ａ１を生成することになる。
【００９３】
コンピュータ１０ａは、コンピュータ１０と同様の効果を奏することができる。また、変形例の自動並列化コンパイラは、コンピュータ１０ａと同様の効果を奏することができる。
【００９４】
コンピュータ１０ａは、コア依存判断部３を備えていなくても目的を達成できる。よって、コンピュータ１０ａは、ステップＳ２４を実施しなくてもよい。この場合、コンピュータ１０ａ（配置制約決定部４）は、ステップＳ２５において、コア依存に関係なく、タスクを跨いで共通リソースへのアクセスを示している複数のＭＴを同じコアに配置する。
【符号の説明】
【００９５】
１…自動並列化コンパイラ、１０…コンピュータ、１１…ディスプレイ、１２…ＨＤＤ、１３…ＣＰＵ、１４…ＲＯＭ、１５…ＲＡＭ、１６…入力装置、１７…読取部、１８…記憶媒体、２０…車載装置、２１…マルチコアプロセッサ、２１ａ…ＲＯＭ、２１ａ１…並列プログラム、２１ｂ…ＲＡＭ、２１ｃ…第１コア、２１ｄ…第２コア、２２…通信部、２３…センサ部、２４…入出力ポート
【図１】
2017228029.tif 000003
【図２】
2017228029.tif 000004
【図３】
2017228029.tif 000005
【図４】
2017228029.tif 000006
【図５】
2017228029.tif 000007
【図６】
2017228029.tif 000008
【図７】
2017228029.tif 000009
【図８】
2017228029.tif 000010
【図９】
2017228029.tif 000011
【図１０】
2017228029.tif 000012
【図１１】
2017228029.tif 000013
【図１２】
2017228029.tif 000014