(57)【要約】【課題】並列プログラムの実行時における複数のコアによるメモリへのアクセス時間を全体として短縮させることが可能な並列プログラムを生成する。【解決手段】格納メモリ決定部１０ｈは、コア割付及びスケジューリング部１０ｄら各タスクの複数の処理単位の複数のコアへの割り付け情報を取得し、データアクセス解析部１０ｇから複数の処理単位がアクセスするデータに関するデータアクセス情報を取得し、タスク実行頻度解析部１０ｆから各タスクの実行頻度を示す実行頻度情報を取得する。格納メモリ決定部１０ｈは、それらの情報に加えて、複数のコアによる複数のメモリの各々へのアクセス必要時間を示すアクセスレイテンシ情報２を用いることで、複数のコアによるデータへのアクセス時間が全体として短縮されるように、複数のメモリの中から、データを格納するメモリを決定する。【選択図】図２
2019191870.tif 000002
【特許請求の範囲】
【請求項１】
コアが一つであるシングルコアマイコン用のシングルプログラムから、複数のコア（Ｃ０、Ｃ１、Ｃ２）と前記複数のコアがアクセス可能な複数のメモリ（Ｌ０、Ｌ１、Ｌ２、Ｇ０、Ｇ１）とを有し、当該複数のメモリは前記複数のコアによるアクセスに要するアクセス必要時間が異なるメモリを含むマルチコアマイコン（２０）用の並列プログラム（１８ａ）を生成する並列化方法であって、
前記シングルプログラムに含まれる、複数の処理単位からなるタスク毎に、前記複数の処理単位の依存関係に基づき、前記複数の処理単位の前記複数のコアへの割り付けと実行順序とを決定し、この決定した前記複数のコアへの割り付け及び実行順序に従って前記複数の処理単位が実行されるように前記並列プログラムを生成する並列プログラム生成手順（１０ａ〜１０ｅ）と、
前記複数の処理単位の前記複数のコアへの割り付け情報、前記複数の処理単位がアクセスするデータに関するデータアクセス情報、前記タスクの実行頻度を示す実行頻度情報、及び前記複数のコアによる前記複数のメモリの各々へのアクセス必要時間を示すアクセス必要時間情報に基づき、前記複数のコアによる前記データへのアクセス時間が全体として短縮されるように、前記複数のメモリの中から、前記データを格納するメモリを決定する格納メモリ決定手順（１０ｈ）と、
前記格納メモリ決定手順によって決定された前記データとその格納先のメモリとの関係を示すメモリマップ（１８ｂ）を生成するメモリマップ生成手順（１０ｉ）と、を備える並列化方法。
【請求項２】
前記格納メモリ決定手順は、
前記複数の処理単位の前記複数のコアへの割り付け情報、複数の処理単位がアクセスするデータに関するデータアクセス情報、及び前記タスクの実行頻度情報に基づいて、単位時間当たりの前記複数のコアによる前記データへのアクセス頻度を算出するアクセス頻度算出手順（Ｓ１１０、Ｓ２１０、Ｓ３１０）を含み、
前記複数のコアによる前記データへのアクセス頻度と、前記複数のコアによる前記複数のメモリの各々についてのアクセス必要時間情報とに基づき、前記データを格納するメモリを決定する請求項１に記載の並列化方法。
【請求項３】
前記格納メモリ決定手順は、
前記複数のコアによる前記データへのアクセス頻度と、前記複数のコアによる前記複数のメモリの各々についてのアクセス必要時間情報とに基づき、前記データを格納するメモリとして、前記単位時間当たりの前記複数のコアによるアクセス必要時間の合計が最小となるメモリを選択するメモリ選択手順（Ｓ１４０、Ｓ２４０、Ｓ３４０）を含み、
前記メモリ選択手順によって選択されたメモリを、前記データを格納するメモリとして決定する請求項２に記載の並列化方法。
【請求項４】
前記複数のコアがアクセスするデータは、ＲＡＭに格納される変数又は定数データ、データＲＯＭに格納される定数データ、及びコードＲＯＭに格納される、前記処理単位として共用される関数データのいずれかを含む請求項１乃至３のいずれかに記載の並列化方法。
【請求項５】
前記マルチコアマイコンには、前記ＲＡＭ、前記データＲＯＭ、及び前記コードＲＯＭの少なくとも１種類のメモリについて、複数のメモリが設けられている請求項４に記載の並列化方法。
【請求項６】
請求項１乃至５のいずれかに記載の並列化方法によって生成された前記並列プログラムを実行するマルチコアマイコン（２０）であって、
前記マルチコアマイコンの前記複数のコアが、それぞれ割り付けられた前記処理単位の実行のために前記データにアクセスする際、そのアクセス対象となるメモリは、前記メモリマップに従って定められたメモリであるマルチコアマイコン。
【請求項７】
コアが一つであるシングルコアマイコン用のシングルプログラムから、複数のコア（Ｃ０、Ｃ１、Ｃ２）と前記複数のコアがアクセス可能な複数のメモリ（Ｌ０、Ｌ１、Ｌ２、Ｇ０、Ｇ１）とを有し、当該複数のメモリは前記複数のコアによるアクセスに要するアクセス必要時間が異なるメモリを含むマルチコアマイコン（２０）用の並列プログラム（１８ａ）を生成する並列化ツールであって、
前記シングルプログラムに含まれる、複数の処理単位からなるタスク毎に、前記複数の処理単位の依存関係に基づき、前記複数の処理単位の前記複数のコアへの割り付けと実行順序とを決定し、この決定した前記複数のコアへの割り付け及び実行順序に従って前記複数の処理単位が実行されるように前記並列プログラムを生成する並列プログラム生成部（１０ａ〜１０ｅ）と、
前記複数の処理単位の前記複数のコアへの割り付け情報、前記複数の処理単位がアクセスするデータに関するデータアクセス情報、前記タスクの実行頻度を示す実行頻度情報、及び前記複数のコアによる前記複数のメモリの各々へのアクセス必要時間を示すアクセス必要時間情報に基づき、前記複数のコアによる前記データへのアクセス時間が全体として短縮されるように、前記複数のメモリの中から、前記データを格納するメモリを決定する格納メモリ決定部（１０ｈ）と、
前記格納メモリ決定部によって決定された前記データとその格納先のメモリとの関係を示すメモリマップ（１８ｂ）を生成するメモリマップ生成部（１０ｉ）と、を備える並列化ツール。
【請求項８】
前記格納メモリ決定部は、
前記複数の処理単位の前記複数のコアへの割り付け情報、複数の処理単位がアクセスするデータに関するデータアクセス情報、及び前記タスクの実行頻度情報に基づいて、単位時間当たりの前記複数のコアによる前記データへのアクセス頻度を算出するアクセス頻度算出部（Ｓ１１０、Ｓ２１０、Ｓ３１０）を含み、
前記複数のコアによる前記データへのアクセス頻度と、前記複数のコアによる前記複数のメモリの各々についてのアクセス必要時間情報とに基づき、前記データを格納するメモリを決定する請求項７に記載の並列化ツール。
【請求項９】
前記格納メモリ決定部は、
前記複数のコアによる前記データへのアクセス頻度と、前記複数のコアによる前記複数のメモリの各々についてのアクセス必要時間情報とに基づき、前記データを格納するメモリとして、前記単位時間当たりの前記複数のコアによるアクセス必要時間の合計が最小となるメモリを選択するメモリ選択部（Ｓ１４０、Ｓ２４０、Ｓ３４０）を含み、
前記メモリ選択部によって選択されたメモリを、前記データを格納するメモリとして決定する請求項８に記載の並列化ツール。
【請求項１０】
前記複数のコアがアクセスするデータは、ＲＡＭに格納される変数又は定数データ、データＲＯＭに格納される定数データ、及びコードＲＯＭに格納される、前記処理単位として共用される関数データのいずれかを含む請求項７乃至９のいずれかに記載の並列化ツール。
【請求項１１】
前記マルチコアマイコンには、前記ＲＡＭ、前記データＲＯＭ、及び前記コードＲＯＭの少なくとも１種類のメモリについて、複数のメモリが設けられている請求項１０に記載の並列化ツール。
【請求項１２】
請求項７乃至１１のいずれかに記載の並列化ツールによって生成された前記並列プログラムを実行するマルチコアマイコン（２０）であって、
前記マルチコアマイコンの前記複数のコアが、それぞれ割り付けられた前記処理単位の実行のために前記データにアクセスする際、そのアクセス対象となるメモリは、前記メモリマップに従って定められたメモリであるマルチコアマイコン。
【請求項１３】
コアが一つであるシングルコアマイコン用のシングルプログラムから生成された、複数のコア（Ｃ０、Ｃ１、Ｃ２）を有するマルチコアマイコン（２０）用の並列プログラム（１８ａ）を実行するマルチコアマイコンであって、
前記複数のコアがアクセス可能な複数のメモリ（Ｌ０、Ｌ１、Ｌ２、Ｇ０、Ｇ１）を有し、当該複数のメモリは前記複数のコアによるアクセスに要するアクセス必要時間が異なるメモリを含み、
前記並列プログラムは、前記シングルプログラムに含まれる、複数の処理単位からなるタスク毎に、前記複数の処理単位の依存関係に基づき、前記複数の処理単位の前記複数のコアへの割り付けと実行順序とが決定され、この決定された前記複数のコアへの割り付け及び実行順序に従って前記複数の処理単位が実行されるように生成されたものであり、
前記複数のコアが、それぞれ割り付けられた前記処理単位の実行のために前記データにアクセスする際、そのアクセス対象となるメモリは、前記複数の処理単位の前記複数のコアへの割り付け情報、前記複数の処理単位がアクセスするデータに関するデータアクセス情報、前記タスクの実行頻度を示す実行頻度情報、及び前記複数のコアによる前記複数のメモリの各々へのアクセス必要時間を示すアクセス必要時間情報に基づき、前記複数のコアによる前記データへのアクセス時間が全体として短縮されるように、前記複数のメモリの中から、前記データを格納するメモリが決定され、その決定された前記データと格納先のメモリとの関係を示すように生成されたメモリマップ（１８ｂ）に従って定められたメモリであるマルチコアマイコン。
【請求項１４】
前記マルチコアマイコンは、車両に搭載された車載機器を制御するための車載装置に適用され、前記並列プログラムを実行することで前記車載機器を制御するものである請求項６、１２、１３のいずれかに記載のマルチコアマイコン。
【請求項１５】
前記メモリマップは、前記複数の処理単位の前記複数のコアへの割り付け情報、前記複数の処理単位がアクセスするデータに関するデータアクセス情報、及び前記タスクの実行頻度情報に基づいて、単位時間当たりの前記複数のコアによる前記データへのアクセス頻度が算出され、算出された前記複数のコアによる前記データへのアクセス頻度と前記複数のコアによる前記複数のメモリの各々に対するアクセス必要時間情報とに基づき、前記データを格納するメモリが決定され、その決定内容に従って生成されるものである請求項１３又は１４に記載のマルチコアマイコン。
【請求項１６】
前記複数のコアによる前記データへのアクセス頻度と、前記複数のコアによる前記複数のメモリの各々に対するアクセス必要時間情報とに基づき、前記データを格納するメモリとして、前記単位時間当たりの前記複数のコアによるアクセス必要時間の合計が最小となるメモリが選択され、その選択されたメモリが、前記データを格納するメモリとして決定される請求項１５に記載のマルチコアマイコン。
【請求項１７】
前記複数のコアがアクセスするデータは、ＲＡＭに格納される変数又は定数データ、データＲＯＭに格納される定数データ、及びコードＲＯＭに格納される、前記処理単位として共用される関数データのいずれかを含む請求項１３乃至１６のいずれかに記載のマルチコアマイコン。
【請求項１８】
前記マルチコアマイコンには、前記ＲＡＭ、前記データＲＯＭ、及び前記コードＲＯＭの少なくとも１種類のメモリについて、複数のメモリが設けられている請求項１７に記載のマルチコアマイコン。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シングルコアマイコン用のシングルプログラムからマルチコアマイコン用の並列プログラムを生成する並列化方法と並列化ツール、及びシングルプログラムから生成された並列プログラムを実行するマルチコアマイコンに関する。
【背景技術】
【０００２】
従来、シングルコアマイコン用のシングルプログラムから、マルチコアマイコン用の並列プログラムを生成する並列化方法の一例として、特許文献１に開示された並列化コンパイル方法が知られている。
【０００３】
この並列化コンパイル方法では、シングルプログラムのソースコードの字句解析や構文解析を行って中間言語に展開し、この中間言語を用いて、複数のマクロタスク（処理単位）の依存関係の解析や最適化等を行う。また、従来の並列化コンパイル方法では、各マクロタスクの依存関係やマクロタスク毎の実行時間を基にコアへの割り付けやスケジューリングを行って並列プログラムを生成する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１５−１８０７号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
並列プログラムを実行するマルチコアマイコンが、複数のコアによってアクセス可能な、複数のＲＡＭや複数のＲＯＭなどの複数のメモリを有し、かつ、複数のコアによる複数のメモリへのアクセス必要時間（アクセスレイテンシ）が異なる場合、データをどのメモリに格納するかに応じて、並列プログラムの実行時間に差が生じることが考えられる。例えば、第１コアと第２コアとが、割り付けられた処理単位をそれぞれ実行したとき、第１コアからアクセスする頻度が第２コアからアクセスする頻度よりも高いデータを、第１コアからのアクセス必要時間が第２コアからのアクセス必要時間よりも長いメモリに格納した場合、アクセス頻度の高い第１コアからのアクセス時間が長くかかることに起因して、並列プログラムの実行時間が長くなってしまう。
【０００６】
本発明は、上述した点に鑑みてなされたものであり、並列プログラムの実行時における複数のコアによるメモリへのアクセス時間を全体として短縮させることが可能な並列プログラムを生成する並列化方法と並列化ツール、及びその並列プログラムを実行するマルチコアマイコンを提供することを目的とする。
【課題を解決するための手段】
【０００７】
上記目的を達成するために本開示の一つは、
コアが一つであるシングルコアマイコン用のシングルプログラムから、複数のコア（Ｃ０、Ｃ１、Ｃ２）と複数のコアがアクセス可能な複数のメモリ（Ｌ０、Ｌ１、Ｌ２、Ｇ０、Ｇ１）とを有し、当該複数のメモリは複数のコアによるアクセスに要するアクセス必要時間が異なるメモリを含むマルチコアマイコン（２０）用の並列プログラム（１８ａ）を生成する並列化方法であって、
シングルプログラムに含まれる、複数の処理単位からなるタスク毎に、複数の処理単位の依存関係に基づき、複数の処理単位の前記複数のコアへの割り付けと実行順序とを決定し、この決定した複数のコアへの割り付け及び実行順序に従って複数の処理単位が実行されるように並列プログラムを生成する並列プログラム生成手順（１０ａ〜１０ｅ）と、
複数の処理単位の複数のコアへの割り付け情報、複数の処理単位がアクセスするデータに関するデータアクセス情報、タスクの実行頻度を示す実行頻度情報、及び複数のコアによる複数のメモリの各々へのアクセス必要時間を示すアクセス必要時間情報に基づき、複数のコアによるデータへのアクセス時間が全体として短縮されるように、複数のメモリの中から、データを格納するメモリを決定する格納メモリ決定手順（１０ｈ）と、
格納メモリ決定手順によって決定されたデータとその格納先のメモリとの関係を示すメモリマップ（１８ｂ）を生成するメモリマップ生成手順（１０ｉ）と、を備える。
【０００８】
本開示の並列化方法によれば、格納メモリ決定手順において、複数の処理単位の複数のコアへの割り付け情報、複数の処理単位がアクセスするデータに関するデータアクセス情報、タスクの実行頻度を示す実行頻度情報、及び複数のコアによる複数のメモリの各々へのアクセス必要時間を示すアクセス必要時間情報を用いることで、複数のコアによるデータへのアクセス時間が全体として短縮されるように、複数のメモリの中から、データを格納するメモリを決定することが可能になる。
【０００９】
そして、本開示の並列化方法によれば、メモリマップ生成手順において、決定されたデータとその格納先のメモリとの関係を示すメモリマップが生成される。このメモリマップを利用することにより、マルチコアマイコンにおいて、そのメモリマップに含まれるデータと格納先メモリとの関係を満たすように、各データを格納するメモリを定めることができる。その結果、マルチコアマイコンの複数のコアによるデータのアクセス時間を全体として短縮することができ、ひいては、並列プログラムの実行時間の短縮化を図ることができる。
【００１０】
本開示の他の一つは、
コアが一つであるシングルコアマイコン用のシングルプログラムから、複数のコア（Ｃ０、Ｃ１、Ｃ２）と複数のコアがアクセス可能な複数のメモリ（Ｌ０、Ｌ１、Ｌ２、Ｇ０、Ｇ１）とを有し、当該複数のメモリは複数のコアによるアクセスに要するアクセス必要時間が異なるメモリを含むマルチコアマイコン（２０）用の並列プログラム（１８ａ）を生成する並列化ツールであって、
シングルプログラムに含まれる、複数の処理単位からなるタスク毎に、複数の処理単位の依存関係に基づき、複数の処理単位の複数のコアへの割り付けと実行順序とを決定し、この決定した複数のコアへの割り付け及び実行順序に従って複数の処理単位が実行されるように並列プログラムを生成する並列プログラム生成部（１０ａ〜１０ｅ）と、
複数の処理単位の複数のコアへの割り付け情報、複数の処理単位がアクセスするデータに関するデータアクセス情報、タスクの実行頻度を示す実行頻度情報、及び複数のコアによる複数のメモリの各々へのアクセス必要時間を示すアクセス必要時間情報に基づき、複数のコアによるデータへのアクセス時間が全体として短縮されるように、複数のメモリの中から、データを格納するメモリを決定する格納メモリ決定部（１０ｈ）と、
格納メモリ決定部によって決定されたデータとその格納先のメモリとの関係を示すメモリマップ（１８ｂ）を生成するメモリマップ生成部（１０ｉ）と、を備える
本開示の並列化ツールによれば、格納メモリ決定部が、複数の処理単位の複数のコアへの割り付け情報、複数の処理単位がアクセスするデータに関するデータアクセス情報、タスクの実行頻度を示す実行頻度情報、及び複数のコアによる複数のメモリの各々へのアクセス必要時間を示すアクセス必要時間情報を用いることで、複数のコアによるデータへのアクセス時間が全体として短縮されるように、複数のメモリの中から、データを格納するメモリを決定することが可能になる。
【００１１】
そして、メモリマップ生成部が、決定されたデータとその格納先のメモリとの関係を示すメモリマップを生成する。このメモリマップを利用することにより、マルチコアマイコンにおいて、そのメモリマップに含まれるデータと格納先メモリとの関係を満たすように、各データを格納するメモリを定めることができる。その結果、マルチコアマイコンの複数のコアによるデータのアクセス時間を全体として短縮することができ、ひいては、並列プログラムの実行時間の短縮化を図ることができる。
【００１２】
本開示の他の一つは、
コアが一つであるシングルコアマイコン用のシングルプログラムから生成された、複数のコア（Ｃ０、Ｃ１、Ｃ２）を有するマルチコアマイコン（２０）用の並列プログラム（１８ａ）を実行するマルチコアマイコンであって、
複数のコアがアクセス可能な複数のメモリ（Ｌ０、Ｌ１、Ｌ２、Ｇ０、Ｇ１）を有し、当該複数のメモリは複数のコアによるアクセスに要するアクセス必要時間が異なるメモリを含み、
並列プログラムは、シングルプログラムに含まれる、複数の処理単位からなるタスク毎に、複数の処理単位の依存関係に基づき、複数の処理単位の複数のコアへの割り付けと実行順序とが決定され、この決定された複数のコアへの割り付け及び実行順序に従って複数の処理単位が実行されるように生成されたものであり、
複数のコアが、それぞれ割り付けられた処理単位の実行のためにデータにアクセスする際、そのアクセス対象となるメモリは、複数の処理単位の複数のコアへの割り付け情報、複数の処理単位がアクセスするデータに関するデータアクセス情報、タスクの実行頻度を示す実行頻度情報、及び複数のコアによる複数のメモリの各々へのアクセス必要時間を示すアクセス必要時間情報に基づき、複数のコアによるデータへのアクセス時間が全体として短縮されるように、複数のメモリの中から、データを格納するメモリが決定され、その決定されたデータと格納先のメモリとの関係を示すように生成されたメモリマップ（１８ｂ）に従って定められたメモリである。
【００１３】
メモリマップには、複数のコアが、それぞれ割り付けられた処理単位の実行のためにデータにアクセスする際に、そのデータを格納するための最適なメモリが定められている。従って、このメモリマップを利用することにより、マルチコアマイコンにおいて、そのメモリマップに含まれるデータと格納先メモリとの関係を満たすように、各データを格納するメモリを定めることができる。その結果、マルチコアマイコンの複数のコアによるデータのアクセス時間を全体として短縮することができ、ひいては、並列プログラムの実行時間の短縮化を図ることができる。
【００１４】
上記括弧内の参照番号は、本開示の理解を容易にすべく、後述する実施形態における具体的な構成との対応関係の一例を示すものにすぎず、なんら発明の範囲を制限することを意図したものではない。
【００１５】
また、上述した特徴以外の、特許請求の範囲の各請求項に記載した技術的特徴に関しては、後述する実施形態の説明及び添付図面から明らかになる。
【図面の簡単な説明】
【００１６】
【図１】実施形態における、自動並列化ツールとしてのコンピュータの概略構成を示すブロック図である。
【図２】実施形態における、自動並列化ツールとしてのコンピュータの機能を示すブロック図である。
【図３】各タスクの処理単位を複数のコアに割り付けたコア割付情報の一例を示す図である。
【図４】データアクセス解析部によって生成される、各タスクの処理単位によってアクセスされるデータに関するデータアクセス情報の一例を示す図である。
【図５】マルチコアマイコンにおいて、各コアに対するメモリの配置の一例を示す図である。
【図６】各コアから各メモリへのアクセス必要時間を示す、アクセスレイテンシ情報の一例を示す図である。
【図７】ＲＡＭに格納されるデータについて、格納先となるメモリを決定するとともにメモリマップを作成するための処理を示すフローチャートである。
【図８】データＲＯＭに格納されるデータについて、格納先となるメモリを決定するとともにメモリマップを作成するための処理を示すフローチャートである。
【図９】コードＲＯＭに格納されるデータについて、格納先となるメモリを決定するとともにメモリマップを作成するための処理を示すフローチャートである。
【図１０】単位時間当たりの各処理単位による各データへのアクセス頻度を算出した結果の一例を示す図である。
【図１１】単位時間当たりの各コアによる各データへのアクセス頻度を算出した結果の一例を示す図である。
【図１２】アクセスレイテンシ情報を考慮して、各データを各メモリに格納したと仮定した場合の、単位時間当たりのアクセス必要時間の合計を算出した結果の一例を示す図である。
【発明を実施するための形態】
【００１７】
以下において、図面を参照しながら、発明を実施するための形態を説明する。本実施形態では、並列化ツールとしてのコンピュータ１０が、コアが一つであるシングルコアマイコン用のシングルプログラムから、３個のコアＣ０、Ｃ１、Ｃ２を有するマルチコアマイコン２０用に並列化した並列プログラム１８ａを生成する例について説明する。なお、マルチコアマイコン２０が備えるコアの数は３個に限られず、２個であってもよいし、４個以上であってもよい。
【００１８】
このように、シングルプログラムから並列プログラム１８ａを生成する背景として、制御の高度化によりプログラム量は年々増加する傾向にあるのに対し、シングルコアマイコンの性能向上には限界があることが挙げられる。つまり、例えばシングルコアマイコンの動作周波数を高めて処理能力を向上しようとしても、動作周波数を高めるにも限界があり、また動作周波数を高めることにより発熱量の増大や消費電力の増加を招いてしまう。このため、コア数の増加により処理能力向上を図るマルチコアマイコン２０を適用することが有効と考えられている。
【００１９】
この際、プログラムの開発者が、マルチコアの能力を最大限に発揮させられるように、各コアに適切に処理を割り振ったり、そのスケジューリングも行ったりしなければならないとすると、プログラムの開発負荷が増加してしまう。このようなプログラムの開発負荷を低減するために、シングルプログラムから並列プログラム１８ａを自動生成することは技術的意義がある。さらに、シングルプログラムから並列プログラム１８ａを自動生成することにより、シングルプロセッサ用に開発した既存のソフト資産を有効に活用することも可能となる。
【００２０】
まず、図１を参照して、コンピュータ１０の構成に関して説明する。コンピュータ１０は、並列化方法を実行する並列化ツールに相当し、シングルプログラムから並列プログラム１８ａを生成するものである。なお、本実施形態では、コンピュータ１０は、Ｃ言語で記述されたシングルプログラムに基づき、Ｃ言語で記述された並列プログラム１８ａを生成するように構成される。このため、後述するマルチコアマイコン２０のＲＯＭに記憶され、マルチコアマイコン２０によって実行される並列プログラム１８ａ’は、図２に示すように、さらにコンパイラ１９によりコンパイルされて、バイナリコードに翻訳されたものとなる。
【００２１】
しかしながら、本発明は、これに限定されない。シングルプログラムは、Ｃ言語とは異なるプログラミング言語で記述されていてもよい。また、並列プログラム１８ａは、例えば、シングルプログラムの解析時に使用する中間言語で記述されていてもよい。あるいは、コンピュータ１０は、Ｃ言語で記述された並列プログラムと中間言語で記述された並列プログラムとをともに生成してもよい。さらに、コンピュータ１０が、コンパイラ１９としての機能も取り込み、直接、バイナリコードの並列プログラム１８ａ’を生成してもよい。
【００２２】
コンピュータ１０は、図１に示すように、ディスプレイ１１、ＨＤＤ１２、ＣＰＵ１３、ＲＯＭ１４、ＲＡＭ１５、入力装置１６、読取部１７などを備えて構成されている。コンピュータ１０は、読取部１７により、記憶媒体１に記憶された記憶内容を読み取ることができる。図１に示すように、記憶媒体１には、例えば、自動並列化コンパイラ１ａが記憶される。なお、コンピュータ１０及び記憶媒体１は、特開２０１５−１８０７号公報に記載されたパーソナルコンピュータ１００及び記憶媒体１８０と同様であるため、詳細は、特開２０１５−１８０７号公報を参照されたい。
【００２３】
自動並列化コンパイラ１ａは、並列プログラム１８ａを生成するための手順をコンピュータ１０に実行させるソフトウエアである。よって、自動並列化コンパイラ１ａにより、コンピュータ１０は並列化方法を実行可能となる。換言すれば、自動並列化コンパイラ１ａは、並列化方法を含むプログラムである。コンピュータ１０は、自動並列化コンパイラ１ａを実行することで、並列化ツールとして、並列プログラム１８ａを生成する。
【００２４】
次に、図２を参照して、並列化ツールとしてのコンピュータ１０が有する、シングルプログラムから並列プログラム１８ａを生成するための各機能及び処理手順について説明する。図２は、コンピュータ１０の各機能及び処理手順を機能ブロックとして表した図である。図２に示すように、コンピュータ１０は、字句解析部１０ａ、構文・意味解析部１０ｂ、依存関係解析部１０ｃ、コア割付及びスケジューリング部１０ｄ、コード生成部１０ｅ、タスク実行頻度解析部１０ｆ、データアクセス解析部１０ｇ、格納メモリ決定部１０ｈ、及びメモリマップ生成部１０ｉとしての機能を有している。
【００２５】
本実施形態では、図２に示すように、コンピュータ１０には、制御対象機器を制御するためのシングルプログラム全体を一度に解析して並列プログラムを生成するのではなく、独立した処理機能（タスク）毎に分割されたシングルプログラムを対象として、その並列プログラムを生成する。なお、本実施形態により生成される並列プログラム１８ａは、マルチコアマイコン２０において実行されるときの実行速度を早めることができるので、制御対象機器として、例えば、素早い処理速度が求められる、車両に搭載されたエンジンや電動モータとすることが好適である。この場合、マルチコアマイコン２０は、車両に搭載されるエンジン制御装置、モータ制御装置、ハイブリッド制御装置などの車載装置として具現化される。
【００２６】
タスク毎に分割されたシングルプログラムは複数の処理単位を含み、その複数の処理単位が実行されることにより、タスク毎の目的とする処理機能を実現することができる。このように複数の処理単位は、目的とする処理機能を実現するために協働するものであり、例えば先の処理単位で処理された変数データを参照する後の処理単位や、先の処理単位の条件分岐によって実行される後の処理単位などを含む。
【００２７】
ここで、処理単位とは、各コアに割り振る際の最小単位であるコア配置単位や、関数をいう。コア配置単位は、処理ブロック、マクロタスク、あるいは単なる処理単位などと言い換えることができる。コア配置単位と関数との関係は、コア配置単位≧関数である。つまり、関数は、コア配置単位自体である場合や、コア配置単位に含まれる親関数やサブ関数の場合がある。
【００２８】
字句解析部１０ａ及び構文・意味解析部１０ｂは、Ｃ言語で記述されたシングルプログラムのソースコードを対象として、字句解析や、構文と意味の解析を行い、中間言語に展開する。字句解析部１０ａ及び構文・意味解析部１０ｂによって展開された中間言語は、汎用的な命令を含んでいる。なお、字句解析部１０ａ及び構文・意味解析部１０ｂは、特開２０１５−１８０７号公報のＦＥ３に相当するため、詳細は、特開２０１５−１８０７号公報を参照されたい。
【００２９】
依存関係解析部１０ｃは、中間言語に展開されたシングルプログラムに含まれる処理単位の依存関係を解析し、並列実行可能な処理単位を抽出する。依存関係には、後に実行される処理単位が先に実行される処理単位で更新された変数データを参照するなどのデータ依存関係と、後に実行される処理単位が先に実行される処理単位の条件分岐先となるなどの制御依存関係とが含まれる。このような依存関係がある複数の処理単位は、依存関係に従う処理順序で実行される必要がある。なお、本実施形態では、上述したようにタスク毎に分割されたシングルプログラムが並列化の対象である。タスク毎に分割されたシングルプログラムに含まれる複数の処理単位は、データ依存関係や制御依存関係を有している。
【００３０】
コア割付及びスケジューリング部１０ｄは、依存関係解析部１０ｃで解析した解析結果に基づき、複数の処理単位を３個のコアＣ０〜Ｃ２に割り付ける（割り振る）。この際、コア割付及びスケジューリング部１０ｄは、例えば、並列実行可能な処理単位が２個以上のコアＣ０〜Ｃ２で並行して実行されるように、複数の処理単位の割り付けを行う。コア割付及びスケジューリング部１０ｄは、各タスクの処理単位の割り付けが終了する毎に、あるいは、すべてのタスクの処理単位の割り付けが完了したときなど、任意のタイミングで、どの処理単位をいずれのコアＣ０〜Ｃ２に割り付けたかに関するコア割付情報を格納メモリ決定部１０ｈに出力する。
【００３１】
図３にコア割付情報の一例を示す。図３に示すコア割付情報は、シングルプログラムに含まれるタスクは、第１タスクと第２タスクの２つのタスクであって、第１タスクには６個の処理単位が含まれており、処理単位ナンバーが「１」の処理単位と、「４」の処理単位とが、コアＣ０に割り付けられたことを示している。また、処理単位ナンバーが「２」の処理単位と、「５」の処理単位とが、コアＣ１に割り付けられたことを示している。さらに、処理単位ナンバーが「３」の処理単位と、「６」の処理単位とが、コアＣ２に割り付けられたことを示している。第２タスクに関しては、４個の処理単位の内、処理単位ナンバーが「１」の処理単位と、「４」の処理単位とが、コアＣ０に割り付けられ、処理単位ナンバーが「２」の処理単位がコアＣ１に割り付けられ、処理単位ナンバーが「３」の処理単位がコアＣ２に割り付けられたことを示している。なお、処理単位ナンバーは、第１タスク及び第２タスクのそれぞれのタスクに含まれる複数の処理単位を区別するために、便宜的に付与したものである。
【００３２】
さらに、コア割付及びスケジューリング部１０ｄは、３個のコアＣ０〜Ｃ２に割り付けられた複数の処理単位のスケジューリングを行う。具体的には、コア割付及びスケジューリング部１０ｄは、各処理単位の実行時間や依存関係に基づいて、３個のコアＣ０〜Ｃ２に割り付けられた各処理単位の実行スケジュールを決定する。なお、依存関係解析部１０ｃ、及びコア割付及びスケジューリング部１０ｄは、特開２０１５−１８０７号公報のＭＰ５に相当するため、詳細は、特開２０１５−１８０７号公報を参照されたい。
【００３３】
コード生成部１０ｅは、コア割付及びスケジューリング部１０ｄによって決定された各コアＣ０〜Ｃ２への割り付け及び実行順序に従って該当するタスクの複数の処理単位が実行されるように、並列プログラムに相当するプログラムコードを生成する。コンピュータ１０は、コード生成部１０ｅによって生成されたプログラムコードを並列プログラム２１ａ１として出力する。
【００３４】
タスク実行頻度解析部１０ｆは、並列化の対象となっているタスクのプログラムから、該当するタスクの実行頻度に関する情報を抽出することで、各タスクの実行頻度を解析する。具体的には、タスク実行頻度解析部１０ｆは、タスクの実行頻度情報として、タスクの実行周期を示す情報を抽出する。そして、タスク実行頻度解析部１０ｆは、抽出した実行頻度情報を格納メモリ決定部１０ｈに出力する。
【００３５】
データアクセス解析部１０ｇは、構文・意味解析部１０ｂによって中間言語に展開された、シングルプログラムに含まれる各処理単位が、マルチコアマイコン２０のメモリ（ＲＡＭ、データＲＯＭ、コードＲＯＭ）に格納されるデータにアクセスするものであるかどうか、アクセスする場合には、そのアクセス対象となるデータを解析する。そして、データアクセス解析部１０ｇは、すべてのタスクの解析が完了した時点など、任意のタイミングで、その解析結果をデータアクセス情報としてまとめ、格納メモリ決定部１０ｈに出力する。各タスクに含まれる複数の処理単位がアクセスする、マルチコアマイコン２０のメモリに格納されるデータには、ＲＡＭに格納される変数又は定数データ、データＲＯＭに格納される定数データ、及びコードＲＯＭに格納される、処理単位として共用される関数データの少なくとも１つが含まれる。データアクセス解析部１０ｇは、ＲＡＭに格納されるデータ、データＲＯＭに格納されるデータ、及びコードＲＯＭに格納されるデータ毎に分けて、データアクセス情報を生成する。
【００３６】
ここで、一例として、マルチコアマイコン２０のＲＡＭに格納されるデータを対象として、データアクセス解析部１０ｇによって生成されるデータアクセス情報を図４に示す。図４に示す例おいて、データナンバーの１〜１０は、マルチコアマイコン２０のＲＡＭに格納されて、並列プログラム１８ａに含まれるすべてのタスクのいずれかの処理単位によりアクセスされるすべてのデータを対象として、それらのデータを区別するために便宜的に付与された番号である。ただし、データアクセス情報に含まれるデータは、単一の処理単位によってアクセスされるデータを対象から除外し、複数の処理単位によってアクセスされるデータだけに絞り込んでもよい。単一の処理単位によってアクセスされるデータは、その単一の処理単位が割り付けられたコアから最も短いアクセス時間でアクセス可能なＲＡＭに保存されればよいためである。
【００３７】
また、データアクセス情報には、各タスクの、処理単位ナンバーによって区別される各々の処理単位が、データナンバーによって区別されるどのデータにアクセスするかに関する情報が含まれている。例えば、図４に例示するデータアクセス情報には、第１タスクの処理単位ナンバーが「１」の処理単位は、データナンバーが「１」のデータ、「３」のデータ、及び「７」のデータにそれぞれ１回アクセスするとの情報が含まれている。また、第１タスクの処理単位ナンバーが「２」の処理単位は、データナンバーが「２」のデータ、「３」のデータ、「７」のデータ及び「８」のデータにそれぞれ１回アクセスするとの情報が含まれている。データアクセス情報には、第１タスクの他の処理単位及び第２タスクの各処理単位に関しても、同様に、どのデータにアクセスするかの情報が含まれている。
【００３８】
格納メモリ決定部１０ｈには、上述したタスクの実行頻度情報、各処理単位によるデータアクセス情報、及び処理単位のコア割付情報に加えて、図２に示すように、マルチコアマイコン２０における、各コアＣ０〜Ｃ２から各メモリへのアクセス必要時間を示すアクセスレイテンシ情報（アクセス必要時間情報）２が入力される。このアクセスレイテンシ情報２は、予め、並列プログラム１８ａ’を実装するマルチコアマイコン２０における各コアＣ０〜Ｃ２に対する各メモリの配置に基づき、計算もしくは実測により、各コアＣ０〜Ｃ２から各メモリへのアクセス必要時間を求めてデータ化したものである。
【００３９】
例えば、マルチコアマイコン２０が、各コアＣ０〜Ｃ２に対するメモリの配置として、図５に示すようなＲＡＭの配置を有していたとする。具体的には、図５に示す例では、コアＣ０の近傍にローカルＲＡＭＬ０が配置され、コアＣ１の近傍にローカルＲＡＭＬ１が配置され、コアＣ２の近傍にローカルＲＡＭＬ２が配置され、コアＣ０とコアＣ１とを結ぶバスに接続されるようにグローバルＲＡＭＧ０が配置され、コアＣ０とコアＣ１との接続バスとコアＣ２とを結ぶバスに接続されるようにグローバルＲＡＭＧ１が配置されている。なお、図５では省略しているが、マルチコアマイコン２０は、メモリとして、制御に使用する定数データなどを格納する複数のデータＲＯＭ、及び並列プログラム１８ａや関数データを格納するための複数のコードＲＯＭも有している。これらの複数のデータＲＯＭ及び複数のコードＲＯＭも、各コアＣ０〜Ｃ２からのアクセス必要時間が異なる。
【００４０】
図５に示すような、各コアＣ０〜Ｃ２に対する各メモリＬ０〜Ｌ２、Ｇ０〜Ｇ１の配置において、各コアＣ０〜Ｃ２から各メモリＬ０〜Ｌ２、Ｇ０〜Ｇ１へのアクセス必要時間を求め、アクセスレイテンシ情報２としてまとめた結果の一例を図６に示す。なお、図６では、マルチコアマイコン２０の命令実行サイクルを時間単位として、それぞれのアクセス必要時間を示している。
【００４１】
図６に示すように、例えば、コアＣ０が、ローカルＲＡＭＬ０にアクセスする場合には１サイクルに相当する時間で済む。しかし、コアＣ０が、ローカルＲＡＭＬ１にアクセスする場合には３サイクル、ローカルＲＡＭＬ２にアクセスする場合には５サイクル、グローバルＲＡＭＧ０にアクセスする場合には２サイクル、グローバルＲＡＭＧ１にアクセスする場合には４サイクルに相当する時間をそれぞれ要することとなる。このように、一般的に、各コアＣ０〜Ｃ２の近傍に配置されたメモリＬ０〜Ｌ２ほど、該当するコアＣ０〜Ｃ２によるアクセス必要時間は短時間で済む。逆に、各コアＣ０〜Ｃ２から離間して配置されたメモリ（例えば、コアＣ０に対するメモリＬ２）ほど、アクセス必要時間は長くなる。このため、例えば、コアＣ０に割り付けられた処理単位によって高頻度でアクセスされるデータが、ローカルＲＡＭＬ２に格納されたとすると、コアＣ０からローカルＲＡＭＬ２へのアクセス時間が長くかかるようになってしまい、ひいては、並列プログラム１８ａの実行時間が長くなってしまうという問題が生じる。
【００４２】
このため、格納メモリ決定部１０ｈは、タスクの実行頻度情報、各処理単位によるデータアクセス情報、各処理単位のコア割付情報、及びアクセスレイテンシ情報２に基づき、複数のコアＣ０〜Ｃ２によるデータへのアクセス時間が全体として短縮されるように、複数のメモリ（例えば、メモリＬ０〜Ｌ２、Ｇ０〜Ｇ１）の中から、データを格納するメモリを決定する。そして、メモリマップ生成部１０ｉは、格納メモリ決定部１０ｈによって決定されたデータとその格納先のメモリとの関係を示すとともに、格納先メモリにおける各データの格納場所を示すアドレス情報を示すメモリマップ１８ｂを生成する。
【００４３】
並列化ツールとしてのコンピュータ１０により生成された並列プログラム１８ａは、上述したように、コンパイラ１９によってコンパイルされ、バイナリコードに翻訳された並列プログラム１８ａ’に変換される。コンパイラ１９は、図２に示すように、コンピュータ１０から与えられるメモリマップ１８ｂを参照して、メモリマップ１８ｂに含まれるデータと格納先メモリとの関係を満たすように、コンパイル後の並列プログラム１８ａ’が各データを格納するメモリと、そのメモリにおける格納場所を示すアドレスを定める。つまり、コンパイラ１９は、格納先のメモリ及び当該メモリのアドレス情報に従って、各データの格納場所を定める。このように、メモリマップ１８ｂを利用することにより、マルチコアマイコン２０にて並列プログラム１８ａ’を実行するときに、メモリマップ１８ｂに含まれるデータと格納先メモリとの関係を満たすように、各データを格納するメモリを定めることができる。その結果、マルチコアマイコン２０の複数のコアＣ０〜Ｃ２によるデータのアクセス時間を全体として短縮することができ、ひいては、並列プログラム１８１’の実行時間の短縮化を図ることができる。
【００４４】
なお、データＲＯＭ及び／又はコードＲＯＭに関するメモリマップが生成された場合には、並列プログラム１８ａ’をマルチコアマイコン２０のＲＯＭに実装する際に、併せて、メモリマップ１８ｂに従って、該当するデータＲＯＭ及び／又はコードＲＯＭの指定されたアドレスに、定数データ及び／又は関数データを格納すればよい。
【００４５】
以下、図７〜図９のフローチャート及び図１０〜図１２の説明図を参照しつつ、格納メモリ決定部１０ｈが、複数のメモリの中からデータを格納するメモリを決定するとともに、メモリマップ生成部がメモリマップを生成するための処理について詳しく説明する。図７のフローチャートは、ＲＡＭに格納されるデータについて、格納先となるメモリを決定するとともにメモリマップを作成するための処理を示す。図８のフローチャートは、データＲＯＭに格納されるデータについて、格納先となるメモリを決定するとともにメモリマップを作成するための処理を示す。図９のフローチャートは、コードＲＯＭに格納されるデータについて、格納先となるメモリを決定するとともにメモリマップを作成するための処理を示す。
【００４６】
最初に、図７のフローチャートに示す処理について説明する。最初のステップＳ１００では、タスク実行頻度解析部１０ｆから、各タスクの実行頻度情報を取得する。また、コア割付及びスケジューリング部１０ｄから、図３に示すような、各タスクに含まれる処理単位の各コアＣ０〜Ｃ２へのコア割付情報を取得する。さらに、データアクセス解析部１０ｇから、図４に示すような、ＲＡＭに格納されるデータのデータアクセス情報を取得する。なお、ステップＳ１００における各情報の取得は、一度にまとめて行われる必要はない。例えば、複数回に分けてそれぞれの情報の一部を取得し、すべての情報が収集できた時点で、それまで取得した情報をまとめることにより、各情報を取得することも可能である。
【００４７】
続くステップＳ１１０では、ステップＳ１００にて取得した各タスクの実行頻度情報、コア割付情報、及びデータアクセス情報に基づき、データ毎に、単位時間当たりの各コアＣ０〜Ｃ２からのアクセス頻度を算出する。各コアＣ０〜Ｃ２からのアクセス頻度を算出する具体例を、図１０及び図１１の説明図を参照して詳しく説明する。
【００４８】
まず、各タスクの実行頻度情報とデータアクセス情報とに基づいて、図１０に示すような、単位時間当たりの各処理単位による各データへのアクセス頻度（アクセス回数）を算出する。図１０の単位時間当たりの各処理単位による各データへのアクセス頻度は、図４に示した各処理単位の各データへのアクセス情報に基づいて算出されたものである。図４に示すように、第１タスクは実行周期が１ｍｓ毎であり、第２タスクは実行周期が４ｍｓ毎である。このように第１タスクと第２タスクとでは実行周期が異なり、第１タスクは第２タスクの４倍の頻度で実行される。従って、図４に示される、第１タスクの処理単位によるデータアクセスの回数と、第２タスクの処理単位によるデータアクセスの回数とをそのまま同等に扱うことはできない。
【００４９】
そのため、各タスクの実行周期を利用して、単位時間当たりに、各タスクの処理単位による各データのアクセスの回数を算出する。これにより、各タスクの処理単位による各データへのアクセス回数の持つ意味が同等になる。図１０に示す例では、単位時間を８ｍｓとしている。単位時間である８ｍｓの間に、第１タスクに含まれる処理単位の実行回数は８回となり、第２タスクに含まれる処理単位の実行回数は２回となる。従って、図４に示すデータアクセス情報のアクセス回数が、第１タスクに含まれる処理単位については８倍され、第２タスクに含まれる処理単位については２倍される。これにより、図１０に示す単位時間当たりの各処理単位による各データへのアクセス頻度が得られる。
【００５０】
さらに、図１０に示すような、単位時間当たりの各処理単位による各データへのアクセス頻度と、図３に示すような、各処理単位の各コアＣ０〜Ｃ２への割付情報とに基づいて、各コア毎に、各データへのアクセス頻度（アクセス回数）をまとめることにより、図１１に示すような、単位時間当たりの各コアＣ０〜Ｃ２による各データへのアクセス頻度を算出する。例えば、図３のコア割付情報が得られた場合、第１タスクの処理単位ナンバーが「１」、「４」の処理単位と、第２タスクの処理単位ナンバーが「１」、「４」の処理単位とが、コアＣ０に割り付けられることになる。単位時間当たりのコアＣ０からの各データへのアクセス回数を求めるために、コアＣ０に割り付けられるすべての処理単位（第１タスクの処理単位ナンバーが「１」、「４」の処理単位と、第２タスクの処理単位ナンバーが「１」、「４」の処理単位）による各データへのアクセス回数の総計をデータ毎に求める。同様に、単位時間当たりのコアＣ１、Ｃ２からの各データへのアクセス回数を求めるために、コアＣ１、Ｃ２に割り付けられるすべての処理単位による各データへのアクセス回数の総計をデータ毎に求める。このようにして各コアＣ０〜Ｃ２からの各データへのアクセス回数の総計をまとめることで、図１１に示す、単位時間当たりの各コアＣ０〜Ｃ２による各データへのアクセス頻度が得られる。
【００５１】
次に、図７のフローチャートのステップＳ１２０では、図６に示すような、各コアＣ０〜Ｃ２から各ＲＡＭＬ０、Ｌ１、Ｌ２、Ｇ０、Ｇ１にアクセスする必要時間に関するアクセスレイテンシ情報を取得する。続くステップＳ１３０では、各データを各ＲＡＭＬ０、Ｌ１、Ｌ２、Ｇ０、Ｇ１に格納したと仮定した場合の、単位時間当たりのアクセス必要時間の合計を算出する。このアクセス必要時間の合計は、図１１の単位時間当たりの各コアからのアクセス頻度と図６のアクセスレイテンシ情報とから算出することができる。
【００５２】
例えば、データナンバーが「１」のデータをＲＡＭＬ０に格納した場合、コアＣ０からデータナンバーが「１」のデータへのアクセス頻度は１８回であり、ＲＡＭＬ０へのアクセス必要時間は１サイクルであるため、コアＣ０からＲＡＭＬ０へのアクセス必要時間の合計は１８×１＝１８（サイクル）となる。また、コアＣ１とコアＣ２からＲＡＭＬ０に格納されたデータナンバーが「１」のデータへのアクセス必要時間の合計は、それぞれ、２×３＝６（サイクル）、１６×５＝８０（サイクル）となる。従って、データナンバーが「１」のデータをＲＡＭＬ０に格納した場合、各コアＣ０〜Ｃ２からのアクセス必要時間の合計は、１８＋６+８０＝１０４（サイクル）となる。同様にして、データナンバーが「１」のデータが他のＲＡＭＬ１、Ｌ２、Ｇ０、Ｇ１に格納された場合の、各コアＣ０〜Ｃ２からのアクセス必要時間の合計も求めることができる。さらに、他のデータに関しても、各ＲＡＭＬ０、Ｌ１、Ｌ２、Ｇ０、Ｇ１に格納したと仮定した場合の、単位時間当たりの各コアＣ０〜Ｃ２からのアクセス必要時間の合計を求めて、それらをまとめたものが、図１２に示すアクセス必要時間の合計データとなる。
【００５３】
ステップＳ１４０では、アクセス必要時間の合計データに基づき、データ毎に、アクセス必要時間の合計が最小となるメモリを、該当データを格納するメモリとして決定する。例えば、図１２に示すアクセス必要時間の合計データが得られた場合、データナンバーが「１」のデータに関しては、ＲＡＭＬ０とＲＡＭＧ０とのアクセス必要時間の合計が最も小さい。このため、データナンバーが「１」のデータを格納するメモリは、ＲＡＭＬ１（又はＲＡＭＧ０）に決定する。他のデータナンバーのデータについても、同様にして、該当のデータを格納するメモリを決定することができる。
【００５４】
そして、ステップＳ１５０では、ステップＳ１４０にて決定した各データと格納先となるＲＡＭとの関係に加え、格納先ＲＡＭにおける格納場所のアドレスを決定し、その決定したアドレス情報をメモリマップ１８ｂとして生成する。
【００５５】
以上が、ＲＡＭに格納されるデータについて、格納先となるメモリを決定するとともにメモリマップ１８ｂを作成するための処理となる。データＲＯＭ及びコードＲＯＭに格納されるデータに関しても、図８及び図９のフローチャートに示すように、基本的に上述した図７のフローチャートと同様の処理によって、格納先となるメモリを決定するとともにメモリマップ１８ｂを作成することができる。従って、図８及び図９のフローチャートに関しては、詳細な説明を省略する。
【００５６】
以上、本発明の好ましい実施形態について説明した。しかしながら、本発明は、上記実施形態に何ら制限されることはなく、本発明の趣旨を逸脱しない範囲において、種々の変形が可能である。
【００５７】
（変形例１）
例えば、上述した実施形態では、マルチコアマイコン２０が、ＲＡＭ、データＲＯＭ、及びコードＲＡＭをそれぞれ複数備え、ＲＡＭ、データＲＯＭ、及びコードＲＡＭに格納されるデータに関して、最適なメモリに格納する例について説明した。しかしながら、マルチコアマイコン２０は、ＲＡＭ、データＲＯＭ、及びコードＲＯＭの少なくとも１種類のメモリについて複数のメモリを備え、それら複数のメモリの中から、データを格納するための最適なメモリを決定するものであってもよい。
【００５８】
（変形例２）
また、上述した実施形態では、データを格納するメモリを決定するために、各データを各メモリに格納したと仮定した場合における、単位時間当たりの各コアＣ０〜Ｃ２からのアクセス必要時間の合計を求め、そのアクセス必要時間の合計が最少となるメモリを選択する例について説明した。しかしながら、データを格納するメモリを決定する手法は、これに限られない。例えば、データ毎に、単位時間当たりのアクセス頻度が最も高いコアを選び、そのコアからのアクセス必要時間が最も短いメモリを、該当するデータを格納するメモリとして決定しても良い。この場合において、単位時間当たりのアクセス頻度が最も高いコアが複数ある場合には、その複数のコアの間にあるグローバルメモリを、該当するデータを格納するメモリとして決定することが好ましい。
【００５９】
（変形例３）
さらに、上述した実施形態では、アクセスレイテンシ情報として、各コアＣ０〜Ｃ２から各メモリへの一種類のアクセス必要時間を用いていた。しかしながら、各コアＣ０〜Ｃ２が各メモリからデータを読み出すためのアクセスを行うときと、各メモリへデータを書き込むためのアクセスを行うときとで、有意なアクセス必要時間の相違が有る場合には、アクセスレイテンシ情報として、読み出し必要時間と書き込み必要時間とを別々に定めてもよい。
【００６０】
（変形例４）
また、上述した実施形態では、マルチコアマイコン２０を車載装置として適用する例について説明したが、マルチコアマイコン２０の適用対象はこれに限られない。
【符号の説明】
【００６１】
１…記憶媒体、１ａ…自動並列化コンパイラ、２…アクセスレイテンシ情報、１０…コンピュータ、１０ａ…字句解析部、１０ｂ…構文・意味解析部、１０ｃ…依存関係解析部、１０ｄ…コア割付及びスケジューリング部、１０ｅ…コード生成部、１０ｆ…タスク実行頻度解析部、１０ｇ…データアクセス解析部、１０ｈ…格納メモリ決定部、１０ｉ…メモリマップ生成部、１１…ディスプレイ、１２…ＨＤＤ、１３…ＣＰＵ、１４…ＲＯＭ、１５…ＲＡＭ、１６…入力装置、１７…読取部、１９…コンパイラ、２０…マルチコアマイコン
【図１】
2019191870.tif 000003
【図２】
2019191870.tif 000004
【図３】
2019191870.tif 000005
【図４】
2019191870.tif 000006
【図５】
2019191870.tif 000007
【図６】
2019191870.tif 000008
【図７】
2019191870.tif 000009
【図８】
2019191870.tif 000010
【図９】
2019191870.tif 000011
【図１０】
2019191870.tif 000012
【図１１】
2019191870.tif 000013
【図１２】
2019191870.tif 000014