(57)【要約】  複数のプロセッサから構成されるシステムやマルチコアプロセッサチップにより並列処理を行う場合に、並列処理を行うプロセッサ数および各プロセッサの動作クロックを動的に変更することにより消費電力を低減可能とする技術を提供する。ソースコードから、予め設定された繰り返し回数だけ内部処理を実行するループ処理コードであり、繰り返しごとに実行される前記内部処理に互いに依存関係がない、並列処理可能な並列ループ処理コードを検出する並列ループ処理検出部と、並列ループ処理コードにおける前記繰り返し回数を制御するための制御コア用コードと、該制御コア用コード側からの制御に対応して繰り返し回数を変更するための並列処理用コードとを生成する動的並列変換部と、を具備する翻訳装置である。また、翻訳方法および翻訳プログラムとプロセッサコアの制御方法およびプロセッサである。
2009037731.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサコアに実装するソースコードをコンパイルする翻訳装置であって、
前記ソースコードから、予め設定された繰り返し回数だけ内部処理を実行するループ処理コードであり、繰り返しごとに実行される前記内部処理に互いに依存関係がない、並列処理可能な並列ループ処理コードを検出する並列ループ処理検出部と、
前記並列ループ処理コードにおける前記繰り返し回数を制御するための制御コア用コードと、該制御コア用コード側からの制御に対応して前記繰り返し回数を変更するための並列処理用コードとを生成する動的並列変換部と、
を具備することを特徴とする翻訳装置。
【請求項２】
前記動的並列変換部が生成する前記制御コア用コードは、
前記並列処理用コードの処理を行うために必要な前記プロセッサコア数を算出してループ分割数とする並列度選択コードと、
前記ループ分割数に基づいて使用する前記プロセッサコアを選択し、選択される前記プロセッサコアごとに動作クロックを算出する電力制御コードと、
前記ループ分割数に基づいて使用する前記プロセッサコアごとに前記繰り返し回数であるイタレーション回数とイタレーションの開始位置を算出してイタレーション情報とするイタレーション回数解析コードと、
から構成されることを特徴とする請求項１に記載の翻訳装置。
【請求項３】
前記並列度選択コードは、
前記並列処理用コードを実行する前記プロセッサコアごとに、動作クロックと、前記動作クロックの周波数に対応する動作消費電力と、前記並列ループ処理コードを処理するのに必要なループ処理時間に基づき、前記ループ処理時間内に前記並列処理用コードの処理を行うために必要な前記プロセッサコア数を算出してループ分割数とすることを特徴とする請求項２に記載の翻訳装置。
【請求項４】
前記制御コア用コードは、
前記並列処理用コードを実行する前記プロセッサコアに前記イタレーション情報を送信する制御情報送信コードを有することを特徴とする請求項１に記載の翻訳装置。
【請求項５】
前記プロセッサへの外乱割り込み処理に対応して、
前記並列度選択コードに、前記外乱割り込み処理に必要なプロセッサ数を確保して前記ループ分割数を再計算するコードと、
前記電力制御コードに、再計算した前記ループ分割数に基づいて使用する前記プロセッサコアを再選択し、再選択される前記プロセッサコアごとに前記動作クロックを再計算するコードと、
前記イタレーション回数解析コードに、再計算した前記ループ分割数に基づいて前記プロセッサコアごとに前記イタレーション情報を再計算するコードと、
を設けることを特徴とする請求項２に記載の翻訳装置。
【請求項６】
前記外乱割り込み処理は、
マルチコアプロセッサに備えられた、オペレーションシステムからの割り込み信号により制御されることを特徴とする請求項５に記載の翻訳装置。
【請求項７】
前記電力制御コードは、
前記マルチコアプロセッサに備えられた、前記プロセッサコアに電力またはクロックの供給と停止を制御する電力・クロック制御部を制御し、電力とクロックの供給と停止を制御することを特徴とする請求項２に記載の翻訳装置。
【請求項８】
前記動的並列変換部が生成する前記制御コア用コードは、
前記並列処理用コードを実行する前記プロセッサコアの処理状態を通知する終了情報割り込み信号を受信する終了情報受信コードを有する構成であることを特徴とする請求項３に記載の翻訳装置。
【請求項９】
前記動的並列変換部が生成する前記制御コア用コードは、
前記並列処理用コードを実行する前記プロセッサコアから送信されるバリア同期制御をするバリア同期信号を受信するバリア同期コードを有する構成であることを特徴とする請求項３に記載の翻訳装置。
【請求項１０】
前記動的並列変換部が生成する前記並列処理用コードは、
前記イタレーション情報を取得すると、前記イタレーション情報に基づいてイタレーション回数と前記開始位置を設定するイタレーション設定コードとともに、メモリマップを設定するメモリマップ設定コードと、
から構成されることを特徴とする請求項１に記載の翻訳装置。
【請求項１１】
前記動的並列変換部が生成する前記並列処理用コードは、
前記並列処理用コードを実行する前記プロセッサコアの処理状態を通知する終了情報割り込み信号を送信する終了情報送信コードを有する構成であることを特徴とする請求項８に記載の翻訳装置。
【請求項１２】
前記動的並列変換部が生成する前記並列処理用コードは、
前記並列処理用コードを実行する前記プロセッサコアからバリア同期制御をするバリア同期信号を送信するバリア同期コードを有する構成であることを特徴とする請求項９に記載の翻訳装置。
【請求項１３】
複数のプロセッサコアに実装するソースコードをコンパイルする翻訳方法であって、
前記ソースコードから、予め設定された繰り返し回数だけ内部処理を実行するループ処理コードであり、繰り返しごとに実行される前記内部処理に互いに依存関係がない、並列処理可能な並列ループ処理コードを検出する並列ループ処理検出ステップと、
前記並列ループ処理コードにおける前記繰り返し回数を制御するための制御コア用コードと、該制御コア用コード側からの制御に対応して前記繰り返し回数を変更するための並列処理用制御コードとを生成する動的並列変換ステップと、
を実行することを特徴とする翻訳方法。
【請求項１４】
前記動的並列変換ステップにより生成する前記制御コア用コードは、
前記並列処理用コードの処理を行うために必要な前記プロセッサコア数を算出してループ分割数とする並列度選択コードと、
前記ループ分割数に基づいて使用する前記プロセッサコアを選択し、選択される前記プロセッサコアごとに動作クロックを算出する電力制御コードと、
前記ループ分割数に基づいて使用する前記プロセッサコアごとに前記繰り返し回数であるイタレーション回数とイタレーションの開始位置を算出してイタレーション情報とするイタレーション回数解析コードと、
から構成されることを特徴とする請求項１３に記載の翻訳方法。
【請求項１５】
前記並列度選択コードは、
前記並列処理用コードを実行する前記プロセッサコアごとに、動作クロックと、前記動作クロックの周波数に対応する動作消費電力と、前記並列ループ処理コードを処理するのに必要なループ処理時間に基づき、前記ループ処理時間内に前記並列処理用コードの処理を行うために必要な前記プロセッサコア数を算出してループ分割数とすることを特徴とする請求項１４に記載の翻訳方法。
【請求項１６】
前記制御用コアコードは、
前記並列処理用コードを実行する前記プロセッサコアに前記イタレーション情報を送信する制御情報送信コードを有することを特徴とする請求項１３に記載の翻訳方法。
【請求項１７】
前記プロセッサへの外乱割り込み処理に対応して、
前記並列度選択コードに、前記外乱割り込み処理に必要なプロセッサ数を確保して前記ループ分割数を再計算するコードと、
前記電力制御コードに、再計算した前記ループ分割数に基づいて使用する前記プロセッサコアを再選択し、再選択される前記プロセッサコアごとに前記動作クロックを再計算するコードと、
前記イタレーション回数解析コードに、再計算した前記ループ分割数に基づいて前記プロセッサコアごとに前記イタレーション情報を再計算するコードと、
を設けることを特徴とする請求項１４に記載の翻訳方法。
【請求項１８】
前記外乱割り込み処理は、
マルチコアプロセッサに備えられた、オペレーションシステムからの割り込み信号により制御されることを特徴とする請求項１７に記載の翻訳方法。
【請求項１９】
コンピュータに、
複数のプロセッサコアに実装するソースコードをコンパイルする翻訳方法であって、
前記ソースコードから、予め設定された繰り返し回数だけ内部処理を実行するループ処理コードであり、繰り返しごとに実行される前記内部処理に互いに依存関係がない、並列処理可能な並列ループ処理コードを検出する並列ループ処理検出処理と、
前記並列ループ処理コードにおける前記繰り返し回数を制御するための制御コア用コードと、該制御コア用コード側からの制御に対応して前記繰り返し回数を変更するための並列処理用コードとを生成する動的並列変換処理と、
を実行させるためのプログラムを記録したコンピュータが読み取り可能な記録媒体。
【請求項２０】
翻訳装置によりコンパイルされたソースコードを実装する複数のプロセッサコアの制御方法であって、
前記ソースコードから、予め設定された繰り返し回数だけ内部処理を実行するループ処理であり、繰り返しごとに実行される前記内部処理に互いに依存関係がない、並列処理可能な並列ループ処理を行うときに、
前記プロセッサコアごとに、動作クロックと、前記動作クロックの周波数に対応する動作消費電力と、前記並列ループ処理に必要なループ処理時間に基づき、前記ループ処理時間内に処理を行うために必要な前記プロセッサコア数を算出してループ分割数とし、
前記ループ分割数に基づいて使用する前記プロセッサコアを選択し、選択される前記プロセッサコアごとに前記動作クロックを算出し、
前記ループ分割数に基づいて使用する前記プロセッサコアごとに前記繰り返し回数であるイタレーション回数とイタレーションの開始位置を算出してイタレーション情報とし、
複数の前記プロセッサコアに分割して実行する前記並列ループ処理の繰り返し回数を、受信した前記イタレーション情報に基づいて動的に変更する制御を行う並列処理と、
を有することを特徴とするプロセッサコアの制御方法。
【請求項２１】
前記電力制御コードは、
前記マルチコアプロセッサに備えられた、前記プロセッサコアに電力またはクロックの供給と停止を制御する電力・クロック制御部を制御し、電力とクロックの供給と停止を制御することを特徴とする請求項１４に記載の翻訳方法。
【請求項２２】
前記動的並列変換ステップが生成する前記制御コア用コードは、
前記並列処理用コードを実行する前記プロセッサコアの処理状態を通知する終了情報割り込み信号を受信する終了情報受信コードを有する構成であることを特徴とする請求項１５に記載の翻訳方法。
【請求項２３】
前記動的並列変換ステップが生成する前記制御コア用コードは、
前記並列処理用コードを実行する前記プロセッサコアから送信されるバリア同期制御をするバリア同期信号を受信するバリア同期コードを有する構成であることを特徴とする請求項１５に記載の翻訳方法。
【請求項２４】
前記動的並列変換ステップが生成する前記並列処理用コードは、
前記イタレーション情報を取得すると、前記イタレーション情報に基づいてイタレーション回数と前記開始位置を設定するイタレーション設定コードとともに、メモリマップを設定するメモリマップ設定コードと、
から構成されることを特徴とする請求項１３に記載の翻訳方法。
【請求項２５】
前記動的並列変換ステップが生成する前記並列処理用コードは、
前記並列処理用コードを実行する前記プロセッサコアの処理状態を通知する終了情報割り込み信号を送信する終了情報送信コードを有する構成であることを特徴とする請求項２２に記載の翻訳方法。
【請求項２６】
前記動的並列変換ステップが生成する前記並列処理用コードは、
前記並列処理用コードを実行する前記プロセッサコアからバリア同期制御をするバリア同期信号を送信するバリア同期コードを有する構成であることを特徴とする請求項２３に記載の翻訳方法。
【請求項２７】
前記プロセッサへの外乱割り込み処理に対応して、
前記並列度選択コードに、前記外乱割り込み処理に必要なプロセッサ数を確保して前記ループ分割数を再計算し、
前記電力制御コードに、再計算した前記ループ分割数に基づいて使用する前記プロセッサコアを再選択し、再選択される前記プロセッサコアごとに前記動作クロックを再計算し、
前記イタレーション回数解析コードに、再計算した前記ループ分割数に基づいて前記プロセッサコアごとに前記イタレーション情報を再計算する、
ことを特徴とする請求項２０に記載のプロセッサコアの制御方法。
【請求項２８】
プロセッサであって、
複数のプロセッサコアと、
前記プロセッサコアごとに、動作クロックと、前記動作クロックの周波数に対応する動作消費電力と、並列ループ処理に必要なループ処理時間に基づき、前記ループ処理時間内に処理を行うために必要な前記プロセッサコア数を算出して前記プロセッサコアを選択し、選択される前記プロセッサコアごとに前記動作クロックを算出する制御部と、
を有することを特徴とするプロセッサ。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、組み込み機器におけるソフトウェアを効率よく実行するためのコードを生成する翻訳装置とプロセッサ消費電力制御方法に係り、特に、複数のプロセッサから構成されるシステムやマルチコアプロセッサチップの技術に関する。
【背景技術】
【０００２】
従来、組込システムでは、要求される機能がより複雑になっている一方で、汎用性をもたせるためにプロセッサを導入し、ソフトウェア処理により機能を実現する方法が提案されている。【０００３】
ところが、近年では要求される機能が複雑になり、プロセッサによるソフトウェア処理量が増加してプロセッサの消費電力が大きくなる傾向にある。一方、組込機器の小型化にともなう低消費電力化や、これに起因する発熱の問題を解決することが重要になっている。【０００４】
そこで、複数のプロセッサやマルチコアプロセッサチップを用いて並列処理を行う方法などが提案されている。例えば、プログラムを機能ブロックに分割し、機能分散的に実行させる部分と、プログラム中のループ処理などを並列展開して負荷分散させて実行させる並列処理が知られている。【０００５】
ここで、以降複数のプロセッサから構成されるシステムのプロセッサをプロセッサコアと呼ぶ、またマルチコアプロセッサチップの各プロセッサもプロセッサコアと呼ぶこととする。【０００６】
一般的には、プロセッサコアに実装する場合、効率よく実施するため、ループ実行の並列展開数は、与えられたプロセッサコア数に対して全てのプロセッサコアを使用するように静的に分割している。【０００７】
また、ループ並列性のあるプログラムを実装したシステムまたはマルチコアプロセッサチップの全体の消費電力は、ループ並列性のあるプログラムに対してループ分割を行い、各プロセッサコアを低周波数で動作させた方が、単一プロセッサを用いて高周波数で動作させるよりも、全体の消費電力を下げられることが知られている。【０００８】
この現象はプロセッサコアの物理的、電気的特性によるもので、周波数をあげていくと比例的ではなく、消費電力は加速的に上昇する傾向があるためである。
しかし、上述のような傾向は、ハードウェアの特性であり、実際の民生品などにおいてアプリケーションを実行する場合には必ずしもこの傾向が最適にならない。【０００９】
なお、従来のコンパイラ技術においては、対象とする実行環境におけるプロセッサコア数をコンパイル時に静的に与え、コンパイラが生成する各プロセッサコアのコードは実行するプロセッサコアに固定的に割り振られるものである。【００１０】
また、消費電力を低減させる方法として、電力供給をドメインごとに分割し、局所的な電力供給停止の実施や、個々のプロセッサコアへのクロック設定を変更する技術が知られている。【００１１】
しかしながら、従来技術は単一プロセッサに対する複数プロセッサ化にともなう電力的優位性と、複数プロセッサコアに対するループ並列展開による負荷分散の効率化を別事象として実装した結果であり、実際の物理特性と並列実行の効率を総合的に考慮して最良解を得るものではなく、実際には消費電力を最適に低減しているものではない。
【発明の開示】
【００１２】
本発明は上記のような実情に鑑みてなされたものであり、複数のプロセッサから構成されるシステムやマルチコアプロセッサチップにより並列処理を行う場合に、並列処理を行うプロセッサ数および各プロセッサの動作クロックを動的に変更することにより消費電力を低減可能とするコードを生成する翻訳装置と翻訳方法および翻訳プログラムと、プロセッサコアの制御方法およびプロセッサを提供することを目的とする。
【００１３】
本発明の態様のひとつである複数のプロセッサコアに実装するソースコードをコンパイルする翻訳装置であって、前記ソースコードから、予め設定された繰り返し回数だけ内部処理を実行するループ処理コードであり、繰り返しごとに実行される前記内部処理に互いに依存関係がない、並列処理可能な並列ループ処理コードを検出する並列ループ処理検出部と、前記並列ループ処理コードにおける前記繰り返し回数を制御するための制御コア用コードと、該制御コア用コード側からの制御に対応して前記繰り返し回数を変更するための並列処理用コードとを生成する動的並列変換部と、を具備する構成である。
【００１４】
上記構成により、複数のプロセッサから構成されるシステムやマルチコアプロセッサにより並列処理を行う場合に、並列処理を行うプロセッサ数および各プロセッサの動作クロックを動的に変更することにより消費電力を低減する。
好ましくは、前記動的並列変換された前記制御コア用コードは、前記並列処理用コードの処理を行うために必要な前記プロセッサコア数を算出してループ分割数とする並列度選択コードと、前記ループ分割数に基づいて使用する前記プロセッサコアを選択し、選択される前記プロセッサコアごとに前記動作クロックを算出する電力制御コードと、前記ループ分割数に基づいて使用する前記プロセッサコアごとに前記繰り返し回数であるイタレーション回数とイタレーションの開始位置を算出してイタレーション情報とするイタレーション回数解析コードと、から構成される。
【００１５】
好ましくは、前記並列度選択コードは、前記並列処理用コードを実行する前記プロセッサコアごとに、動作クロックと、前記動作クロックの周波数に対応する動作消費電力と、前記並列ループ処理コードを処理するのに必要なループ処理時間に基づき、前記ループ処理時間内に前記並列処理用コードの処理を行うために必要な前記プロセッサコア数を算出してループ分割数としてもよい。
【００１６】
好ましくは、前記制御コア用コードは、前記並列処理用コードを実行する前記プロセッサコアに前記イタレーション情報を送信する制御情報送信コードを有する。
好ましくは、前記プロセッサへの外乱割り込み処理に対応して、前記並列度選択コードに、前記外乱割り込み処理に必要なプロセッサ数を確保して前記ループ分割数を再計算するコードと、前記電力制御コードに、再計算した前記ループ分割数に基づいて使用する前記プロセッサコアを再選択し、再選択される前記プロセッサコアごとに前記動作クロックを再計算するコードと、前記イタレーション回数解析コードに、再計算した前記ループ分割数に基づいて前記プロセッサコアごとに前記イタレーション情報を再計算するコードと、を設けてもよい。
【００１７】
好ましくは、前記外乱割り込み処理は、前記マルチコアプロセッサに備えられた、オペレーションシステムからの割り込み信号により制御してもよい。
好ましくは、前記電力制御コードは、前記マルチコアプロセッサに備えられた、前記プロセッサコアに電力またはクロックの供給と停止を制御する電力・クロック制御部を制御し、電力とクロックの供給と停止を制御してもよい。
【００１８】
好ましくは、前記動的並列変換部が生成する前記制御コア用コードは、前記並列処理用コードを実行する前記プロセッサコアの処理状態を通知する終了情報割り込み信号を受信する終了情報受信コードを有する構成であってもよい。
【００１９】
好ましくは、前記動的並列変換部が生成する前記制御コア用コードは、前記並列処理用コードを実行する前記プロセッサコアから送信されるバリア同期制御をするバリア同期信号を受信するバリア同期コードを有する構成であってもよい。
【００２０】
前記動的並列変換部が生成する前記並列処理用コードは、前記イタレーション情報を取得すると、前記イタレーション情報に基づいてイタレーション回数と前記開始位置を設定するイタレーション設定コードとともに、メモリマップを設定するメモリマップ設定コードと、から構成してもよい。
【００２１】
好ましくは、前記動的並列変換部が生成する前記並列処理用コードは、前記並列処理用コードを実行する前記プロセッサコアの処理状態を通知する終了情報割り込み信号を送信する終了情報送信コードを有する構成であってもよい。
【００２２】
好ましくは、前記動的並列変換部が生成する前記並列処理用コードは、前記並列処理用コードを実行する前記プロセッサコアからバリア同期制御をするバリア同期信号を送信するバリア同期コードを有する構成であってもよい。
【００２３】
本発明によれば、複数のプロセッサから構成されるシステムやマルチコアプロセッサにより並列処理を行う場合に、並列処理を行うプロセッサ数および各プロセッサの動作クロックを動的に変更することにより消費電力を低減することができる。
【００２４】
本発明の態様のひとつであるプロセッサであって、複数のプロセッサコアと、前記プロセッサコアごとに、動作クロックと、前記動作クロックの周波数に対応する動作消費電力と、並列ループ処理に必要なループ処理時間に基づき、前記ループ処理時間内に処理を行うために必要な前記プロセッサコア数を算出して前記プロセッサコアを選択し、選択される前記プロセッサコアごとに前記動作クロックを算出する制御部と、から構成される。
【図面の簡単な説明】
【００２５】
【図１】本発明の翻訳装置とマルチプロセッサコアの構成を示す図である。
【図２】本発明を実施するコンパイラの処理フローである。
【図３】本発明を実施するコンパイラの処理フローである。
【図４】本発明で生成される実行コードの構造を示す図である。
【図５】本発明が前提とするアーキテクチャを示す図である。
【図６】動作クロックと消費電力の関係を示す図である。
【図７】消費電力を加味した動的スケジューリングを示すフロー図である。
【図８】外乱が発生した場合の動作を示した図である。
【図９】イタレーション分割を行う場合の動作を示した図である。
【発明を実施するための最良の形態】
【００２６】
（原理説明）
複数のプロセッサから構成されるシステムやマルチコアプロセッサチップなど、ソフトウェアにより動作する組込システム（マルチプロセッサ環境）に対して、低消費電力で動作させるコードを生成する。【００２７】
ここで、以降複数のプロセッサから構成されるシステムのプロセッサをプロセッサコアと呼ぶ、またマルチコアプロセッサチップの各プロセッサもプロセッサコアと呼ぶこととする。【００２８】
本発明は、予め設定された繰り返し回数だけ内部処理を実行するループ処理コードであり、繰り返しごとに実行される前記内部処理に互いに依存関係がない、並列処理可能な並列ループ処理コードに対して適用される。【００２９】
上記並列ループ処理コードが、プロセッサコアで実行されている時のソフトウェアの動作状況に応じて、プロセッサコアの電力特性を考慮し、動的に並列実行度を変更することにより低消費電力でマルチプロセッサ環境を動作させる。【００３０】
また、マルチプロセッサ環境の複数のプロセッサコアに実装されたソースコードをコンパイルする翻訳装置は、並列ループ処理検出部、動的並列変換部を具備している。
並列ループ処理検出部は、ソースコードから、予め設定された繰り返し回数だけ内部処理を実行するループ処理コードであり、繰り返しごとに実行される内部処理に互いに依存関係がない、並列処理可能な並列ループ処理コードを検出する。【００３１】
また、並列ループ処理検出部により検出される並列処理可能な並列ループ処理コードは、ＤＯＡＬＬループやＤＯＳＵＭループなどのコードである。
プログラム中のループ処理において、ＤＯＡＬＬループなどの形態のループ処理は、画像処理のライン単位処理、通信のパケット処理など、汎用的な実アプリケーション、あるいはアルゴリズム中に多く記述され、明示的にＤＯＡＬＬ形態であることが多く、プログラム処理の全体時間の多くを占めることが多い。【００３２】
動的並列変換部は、並列ループ処理コードに、繰り返し回数を動的に変更する制御を行うために並列処理用制御コードを付加した並列処理用コードと、並列処理用コードの繰り返し回数を動的に制御する制御コア用コードとを生成する。【００３３】
以下図面に基づいて、本発明の実施形態について説明する。
（実施例１）
（構成）
図１は、翻訳装置１（コンパイラ）とマルチプロセッサ環境を示す構成図である。また、本実施例ではマルチプロセッサ環境としてマルチコアプロセッサチップ２を用いた場合の例である。【００３４】
翻訳装置１は、実行対象のソフトウェアの元となるソースコードの構造を解析し、抽出されたＤＯＡＬＬループなどに対して、通信、割り込み、情報交換に関するコードを組み込み、構造変更を行ったコードを生成する。また、電力特性のプロファイルをもとに再スケジューリング方法を策定し、スケジューリングによるソフトウェアの実行形態を変更すると同時に、マルチコアプロセッサに備えられているハード的な電力制御部を用いて電力制御を行うコードを生成する。【００３５】
翻訳装置１は、フロントエンド部４、並列ループ処理検出部５、動的並列変換部６、電力特性ファイル７、最適化部８、実行コード生成部９から構成されている。
フロントエンド部４は、Ｃ言語などにより記述されたソースコード３のコードパース（構造解析）を行い、第１中間ファイルを生成する。【００３６】
並列ループ処理検出部５は、第１中間ファイルからＤＯＡＬＬループなどの並列ループ処理コードを検出する。
動的並列変換部６は、後述する電力特性ファイル７に基づいて並列実行させるプロセッサコア１４の個数分並列ループ処理コード（第１中間ファイルの状態）を用意する。用意された各並列ループ処理コードに対して並列に動作させるために繰り返し回数を動的に変更する制御を行う並列処理用制御コードを付加して複数の並列処理用コード１０ｂ〜１０ｎを生成する。【００３７】
また、各プロセッサコア１４に割り当てられた並列処理用コードの繰り返し回数を動的に制御する制御コア用コードを生成する。ここで、並列処理用コードと制御コア用コードは中間言語で生成されたもので第２中間ファイルの状態である。【００３８】
電力特性ファイル７は、プロセッサコア１４ごとにクロック周波数と消費電力の関係を記録したファイルである。
最適化部８は、第１中間ファイルの並列ループ処理コード以外を最適化する。ここで、最適化した第１中間ファイルは中間言語で生成されたもので第２中間ファイルの状態である。【００３９】
実行コード生成部９は、動的並列変換部６、最適化部８により生成された第２中間ファイルを実行コードに変換して実行コード１０を生成する。
次に、図１に示すマルチコアプロセッサチップ２は、電力・クロック制御部１１、ＯＳ１２（オペレーティングシステム）、電力特性ファイル１３、プロセッサコア１４から構成される。【００４０】
電力・クロック制御部１１は、プロセッサ個々のクロックや停止、起動をハードウェア的に制御する。
ＯＳ１２（オペレーティングシステム）は各プロセッサコア１４を制御する。図１では制御コア用コードを搭載したプロセッサコア１４のみと接続されているが実際には他のプロセッサコア１４にも接続されている。【００４１】
電力特性ファイル１３は、上記電力特性ファイル７と同様、プロセッサコア１４ごとにクロック周波数と消費電力の関係を記録したファイルである。
（動作説明）
図２は翻訳装置１のコード生成手順を示したフロー図である。【００４２】
ステップＳ２１（フロントエンド）では、ソースコード３を取得してコードパースを行い、第１中間ファイルを生成する。
ステップＳ２２（第１中間ファイル）では第１中間ファイルを記録する。【００４３】
ステップＳ２３（ミドルパス）では、第１中間ファイルを取得してＤＯＡＬＬループなどの並列ループ処理コードを検出する。
例えば、ＤＯＡＬＬループの検出はミドルパスで行われる。ミドルパスでは与えられた中間言語をもとに、プログラムの構造を解析し、得られたデータ依存関係を元に最適化を行う。【００４４】
ＤＯＡＬＬループ処理の判別は一般的に次のような解析に基づいて行われる。
ＤＯＡＬＬループ処理の本体ブロックを構成する、ループ処理が実際に実行される演算などであるループボディＬＢｉに対して参照変数群をＵｓｅ（ＬＢｉ）、定義変数群をＤｅｆ(ＬＢｉ)とした場合、対象としたループがＤＯＡＬＬループであるとは式（１）を満たすループ構造をもったブロックであることと定義することができる。ここで、ｉは繰り返し回数（イタレーション回数）のｉ番目である。【００４５】
また、ｍ、ｎには対象とするループの全てのイタレーションが代入される。
Σｍ，ｎ｛Ｕｓｅ（ＬＢｍ）∩Ｄｅｆ（ＬＢｎ）｝＝Φ      （１）
ＤＯＡＬＬループを上記式（１）に基づいて検出した後、プロセッサコア１４ごとにクロック周波数と消費電力の関係を記録したファイルである電力特性ファイル７に基づいて並列実行させるプロセッサコア１４の個数分並列ループ処理コード（第１中間ファイルの状態）を用意する。用意された各並列ループ処理コードに対して並列に動作させるために繰り返し回数を動的に変更する制御を行う並列処理用制御コードを付加して複数の並列処理用コード１０ｂ〜１０ｎを生成する。【００４６】
また、各プロセッサコア１４に割り当てられた並列処理用コードの繰り返し回数を動的に制御する制御コア用コードを生成する。ここで、並列処理用コードと制御コア用コードは中間言語で生成されたもので第２中間ファイルの状態である。【００４７】
第１中間ファイルにおいて並列ループ処理コード以外を最適化して冗長なコードを削除する。ここで、最適化した第１中間ファイルは中間言語で生成されたもので第２中間ファイルの状態である。【００４８】
ステップＳ２４（第２中間ファイル）では、第２中間ファイルをメモリに記録する。
ステップＳ２５（バックエンド）では、第２中間ファイルを実行コード１０に変換する。【００４９】
図３では、与えられたソースコードを元に、コード解析および構造解析を行う。ここで、対象とするループがＤＯＡＬＬであると判定された場合、構造変更を行う処理して制御コア用コードと並列処理用コードを生成する。【００５０】
図３は、図２に示したミドルパスのコード生成手順を詳しく示したフロー図である。
ステップＳ３１は、図１に示すフロントエンド部と、図２に示したステップＳ２１と同様にコードパース処理を行う。【００５１】
ステップＳ３２では、コードパースにより出力されて第１中間ファイルからＤＯＡＬＬループなどの並列ループ処理コード（第１中間ファイル）を検出する。検出できない場合はステップＳ３３に移行する。並列ループ処理コードを検出した場合はステップＳ３４に移行する。【００５２】
ステップＳ３３では、ＤＯＡＬＬループ処理ではない部分については、従来通りのコード生成を行う。図１に示した最適化部８と同様の処理を行う。
ステップＳ３４では、ＤＯＡＬＬループコードを制御コア用コードと並列処理用コードに分割する。【００５３】
ステップＳ３５では制御コア用コードであるかを判定する。制御コア用コードであればステップＳ３６に移行し、違う場合は並列処理用コードであるためステップＳ３１１に移行する。【００５４】
ステップＳ３６では、処理開始時にこれから分割動作させようとするループの分割数を示すループ分割数および各並列処理用コードのイタレーション回数とイタレーションの開始位置を算出する制御情報コードを生成して制御コア用コードに付加する。算出に関する処理方法については後述する。【００５５】
制御情報コードは、並列度選択コードとイタレーション回数解析コードから構成される。
並列度選択コードは、並列処理用コードを実行するプロセッサコア１４ごとに、動作クロックと、動作クロックの周波数に対応する動作消費電力と、並列ループ処理コードを処理するのに必要なループ処理時間に基づき、ループ処理時間内に並列処理用コードの処理を行うために必要なプロセッサコア数を算出してループ分割数とする。【００５６】
イタレーション回数解析コードは、ループ分割数に基づいて使用するプロセッサコア１４ごとに繰り返し回数であるイタレーション回数とイタレーションの開始位置を算出する。【００５７】
また、並列度選択コードは、プロセッサコア１４に対して外乱割り込み処理が必要になったときに、外乱割り込み処理に必要なプロセッサ数を確保して前記ループ分割数を再計算する。イタレーション回数解析コードも、再計算したループ分割数に基づいてプロセッサコア１４ごとにイタレーション情報を再計算する。【００５８】
ステップＳ３７では、並列処理用コードを実装した各プロセッサコア１４に制御情報（イタレーション情報（イタレーション回数、開始位置）、処理要求信号など）を送信するために、各プロセッサコア１４に設けられた通信機構を用いて他のプロセッサコア１４へ送信するドライバなどの制御情報送信コードを生成して制御コア用コードに付加する。【００５９】
ステップＳ３８では、並列処理用コードを実装した各プロセッサコア１４のクロック設定および、ループ処理を行わせないプロセッサコア１４の電力供給／停止などの電力制御に関する電力・クロック制御部１１などのハードウェアを制御する電力制御コードを生成して制御コア用コードに付加する。【００６０】
また、電力制御コードは、ループ分割数に基づいて使用するプロセッサコアを選択し、選択されるプロセッサコア１４ごとに動作クロックを算出する。
また、電力制御コードは、再計算したループ分割数に基づいて使用するプロセッサコア１４を再選択し、再選択されるプロセッサコア１４ごとに動作クロックを再計算する。【００６１】
ステップＳ３９では、制御コア用コードを実装したプロセッサコア１４が、ステップＳ３６〜Ｓ３８で生成した各コードをハンドラ処理として動作するようにイベントハンドラの生成を行う。【００６２】
ステップＳ３１０では、並列処理用コードを実装した各プロセッサコア１４から送信された同期制御情報に対する応答を受信するための同期受信コードを生成して制御コア用コードに付加する。【００６３】
ステップＳ３１１では、各プロセッサコア１４に設けられた通信機構を用いて、制御コア用コードを実装したプロセッサコア１４からの制御情報を受け取る受信コードを生成して並列処理用コードに付加する。受信コードはハンドラ処理として動作する（制御情報受信ハンドラ）。【００６４】
ステップＳ３１２では割り込みハンドラを生成する。
ステップＳ３１３では、並列ループ処理コードの元々のコード上に存在したループボディをコピーする。このとき、ループボディには、イタレーションに関する具体的な記述は書かれておらず、実際に処理を行うプロセッサコア１４にイタレーション回数と開始位置が制御コア用コードから伝播されてから設定される。【００６５】
ループボディはイタレーションに関する情報は存在しないため、ループ分割数および、イタレーション回数に関係なく共通のコードとして利用される。
ステップＳ３１４では、ループボディの処理が終了した段階で、制御コア用コードへ同期制御情報を通知する同期送信コードを生成し並列処理用コードに付加する。【００６６】
ステップＳ３１５では、第２中間ファイルの状態である並列処理用コードを実行コードに変換する。
ステップＳ３１６では、第２中間ファイルの状態である制御コア用コードと並列ループ処理コード以外を、実行コードに変換する。【００６７】
ここで、ステップＳ３１５とＳ３１６は、図１に示した実行コード生成部９と図２のバックエンドＳ２５と同様の機能を有する。
本発明の翻訳装置は、制御部に相当する実行コード（制御コア用コード）と、ループ本体処理を並列に実行を行うコード（並列処理用コード）の２種類のコードを生成することになる。【００６８】
図４は、ソースコード３から制御コア用コードおよび並列処理用コードを生成するイメージを示した図である。
図１に示したソースコード３に記載された並列ループ処理コードは、図４（Ａ）に示すようにループ制御コード４１、ループボディ４２、ループ終端コード４４から構成されている。【００６９】
ループ制御コード４１は、並列ループ処理の名称などが記述されているコードである。また、上記演算式などをループさせるための制御コード（例えば、ｆｏｒ文など）である。【００７０】
ループボディ４２は、上述したようにループ処理する演算式などが記述されているコードである。
ループ終端コード４４は並列ループ処理の最後を示すコードである。【００７１】
図４（Ｂ）は、図４（Ａ）のオリジナルコードの並列ループ処理（ＤＯＡＬＬループ処理など）を変換して生成される制御コア用コードと並列処理用コードを示した図である。
制御コア用コード１０ａは、イベントハンドラ４５、制御情報コード（並列度選択コード４６、イタレーション回数解析コード４７）、電力制御コード４８、制御情報送信コード４９、同期受信コード４１０から構成されている。【００７２】
イベントハンドラ４５は、ＯＳ１２のプロセス管理や電力・クロック制御部１１からの割り込みなどの外乱をハンドリングする。また、並列処理用コード１０ｂが実装された各プロセッサコア１４からの終了通知割り込みのハンドリングをする。【００７３】
並列度選択コード４６（Ｓ３６）、イタレーション回数解析コード４７（Ｓ３６）、電力制御コード４８（Ｓ３８）、同期受信コード４１０（Ｓ３１０）については図３のフロー図を用いて説明をしたので詳細については省略する。【００７４】
制御情報送信コード４９は、選択したプロセッサコア１４に対してその選択されたプロセッサコア用のイタレーション情報を送信する。イタレーション情報によりプロセッサコア１４ごとに、イタレーションの何番目（開始位置）から何回ループ処理をするか（イタレーション回数）が設定される。【００７５】
また、ループ処理中に状態変化が発生し、現在のイタレーション回数を変更する必要があるときや、プロセッサコア１４のループ分割数が変更されるときに、ひとつのプロセッサコア１４に対して複数のイタレーション回数と開始位置が設定されることがある。その場合は再度新しい制御情報を送信する必要がある。【００７６】
状態変化とは、アプリケーションを実行中に他のアプリケーションが起動したときや、ハードウェアの他の機構から依頼を受けた電力・クロック制御部１１などにより、プロセッサを停止するようなイベントを指す。【００７７】
なお、送信する際には送信する情報に関するコマンドを付加して送信する。
並列処理用コード１０ｂは、オリジナルコード（４１〜４４）、制御情報受信ハンドラ４１１、イタレーション設定コード４１２、メモリマップ設定コード４１３、割り込みハンドラ４１４、終了情報送信コード４１５、同期送信コード４１６から構成されている。【００７８】
制御情報受信ハンドラ４１１は、制御コア用コードからのループ制御に関する通信割り込みのハンドリングである。制御情報を受信してハンドリングする。
イタレーション設定コード４１２は、各プロセッサコア１４にイタレーション回数と開始位置を設定するコードである。【００７９】
メモリマップ設定コード４１３は、イタレーション情報の再送信によりループ処理が変化するため、イタレーション情報に基づいて必要なメモリ領域を再設定するためのコードである。【００８０】
割り込みハンドラ４１４は、自コアの制御情報受信ハンドラ４１１からの中断処理依頼割り込みのハンドリングを行うコードである。
終了情報送信コード４１５は、演算途中状態のメモリ情報を送信するためのコード（並列処理用コードがローカルワークとして利用しているエリア情報）である。例えば、外乱によりループ処理を一度中断して、イタレーション回数や開始位置を再設定するときに、メモリ情報を制御コア用コードを実装しているプロセッサコア１４に通知する。【００８１】
同期送信コード４１６は、同期受信コード４１０に同期していることをバリア同期方式などにより通知する。同期方式はバリア同期に限定するものではない。
なお、並列処理用コードでは、基本的には制御コアからのループ開始や中断などの依頼を受け付ける機構を有する。【００８２】
図５は、本発明を実施するマルチコアプロセッサのハードウェア構成を示したものである。図５（Ａ）は集中共用メモリについて示す図であり、各プロセッサコア１４はバス５２を介して共用メモリ５１とアクセス可能である。【００８３】
図５（Ｂ）は分散共用メモリについて示す図であり、各プロセッサコア１４はバス５２を介して共用メモリ５１と各プロセッサコア１４に配設された分散メモリ５３とアクセス可能である。【００８４】
本発明では集中共用メモリあるいは、分散共用メモリのアーキテクチャを前提とし、分散共用メモリのアーキテクチャでは、個々のプロセッサにおける物理アドレス空間に対して、チップ全体では一意に定められる論理アドレス空間により各プロセッサから共通のアドレス空間が参照する。【００８５】
また、対象とするプロセッサコア１４を制御する電力制御機構（電力・クロック制御部１１）を搭載し、この機構によりプロセッサコア１４個々のクロックや停止、起動をハードウェア的に行う機能を有するものとする。【００８６】
なお、本発明ではマルチプロセッサを構成するプロセッサ群が同一のものであることを必ずしも想定しない。
（ループ分割）
図１に示す電力特性ファイルの特性と、ループ分割の最適解の取得方法について説明する。【００８７】
図７（Ａ）はコンパイル時に静的に初期値を算出するプロセスを示したフロー図である。図７（Ａ）のフローは、図３に示したフローを実行した後に実行される。
ステップＳ７１では、電力特性に対応した最適なループ分割数と動作クロックを算出する。【００８８】
動作クロック周波数ｘ（最大Ｘ)のときのプロセッサコア１４ひとつあたりの消費電力特性をｐ（ｘ）、プロセッサコア１４が駆動するためのベース電力をΔ、全体コア数をＮとすると、ピーク電力は式（２）のように記述することができる。一般にはｐ（ｘ）は図６のようなグラフになる。図６に示すグラフは縦軸に消費電力、横軸に動作クロックの周波数を示している。
ピーク電力Ｐｐ＝Σ｛ｐ（Ｘ）＋Δ｝＝ＮΔ＋Σｐ（Ｘ）      （２）
式（２）はループ並列処理を最大並列度、最高速で実施した場合を示したものであり、実際のトータルピーク電力量は実行時間Ｔとの積で表され、
Ｔ＊Ｐｐ      （３）
このとき、各ループを並列にするときの動作クロックをｃとしてｎ並列（ループ分割数＝ｎ）で実行した場合、消費電力は式（３）のように示される。なお、次式のΣはｉ＝１〜ｎに対して求められる。
ループ並列処理消費電力ＰＬ＝ＮΔ＋Σｐｉ（ｃ）      （４）
処理時間は並列度がｎ／Ｎ、動作クロックがｃ／Ｘとなるので、処理時間は（Ｔ＊Ｎ＊Ｘ）／（ｎ＊ｃ）となるため、並列度、クロックを変化させた場合のトータル消費電力は式（５）で表現することができる。ただし、この時間が求められる処理終了時間内に終わる必要がある。
（ＰＬ＊Ｔ＊Ｎ＊Ｘ）／（ｎ＊ｃ）      （５）
ｎ、ｃを選択することによって式（５）の最小値を次式によって求めることができる。
Ｍｉｎ（ｎ，ｃ）＝［｛ＮΔ＋Σｐ（ｃ）｝＊Ｔ＊Ｎ＊Ｘ］／（ｎ＊ｃ）  （６）
周波数−電力特性ｐ（ｘ）はプロセッサコア１４ごとに異なるため、（３）と（４）から、式（６）の最小値となるｎ、ｃを求めることでループ処理に必要な最低消費電力が求められる。【００８９】
実際には、式（６）に基づきｎ、ｃ値をもとに実行開始時には静的スケジューリングを行い最適な配置を行い、実行中に外乱が発生した場合に、外乱状況下でのｎ、ｃ値最適値をもとに再スケジューリングを行い、前述した分割したコードを用いて、動的な構成変更へ適用する。【００９０】
電力特性ファイルは、式（６）の元になるプロセッサコア１４ごとに異なる特性関数ｐ（ｃ）は、チップ開発時に実験あるいはシミュレーションにより求めておく。これらの関連情報をテーブルあるいは関数として制御コア用コードを参照し、再スケジューリング時にも使用する。【００９１】
ステップＳ７２ではループ分割のための静的初期最適解を設定する。つまり、並列処理用コードに初期値としてループ分割数ｎに基づいてイタレーション回数と開始位置を設定する。【００９２】
また、電力・クロック制御部１１に対し、電力供給するプロセッサコア１４を選択するとともに、選択したプロセッサコア１４へ供給する動作クロックｃの周波数の初期設定を可能にする。
（再スケジューリング）
制御コア用コードの実装されたプロセッサコア１４での外乱発生時の再スケジューリングのプロセスを示す。【００９３】
図７（Ｂ）は外乱発生から再スケジューリングを行い、再度通常状態に戻るまでのフローを表したものである。上記実行コードを実装したマルチコアプロセッサの動作フローである。【００９４】
ステップＳ７３では、最適電力状態で並列ループ処理コード（ＤＯＡＬＬループ）などが実行している。
ステップＳ７４では外乱が発生したことを検出し、外乱により使用されるプロセッサコア１４を除いて、ループ分割数、イタレーション回数、開始位置、動作クロックの周波数を再計算する。【００９５】
投入されたタスク並列度がｍの場合、新しいＤＯＡＬＬループの並列度ｎ’は（ｍ＜ｎとする）式（７）により算出することができる。
ｎ’＝ｎ−ｍ      （７）
このとき外乱が発生した時刻が実行開始時からの相対時間でτの場合、残り処理時間Ｔ’は式（８）により表現することができ、また、電力・クロック制御部１１が指定してきた、あらたなプロセッサコア数がｎ’の場合、ＤＯＡＬＬ処理側のクロックｃ’は式（６）を元に、式（９）により記述することができる。
Ｔ’＝Ｔ−τ      （８）
ｍｉｎ［｛ＮΔ＋Σｐｉ（ｃ）｝＊Ｔ’＊Ｎ＊Ｘ］／（ｎ’＊ｃ’)      （９）
以上から制御コアにおいて、外乱発生時（ループ起動時を含めて）最も効果的な電力特性を示すクロックは式（８）の最小値を示すｃ’となる。【００９６】
ステップＳ７５では再計算したループ分割のための動的最適解を設定する。つまり、並列処理用コードに再計算したループ分割数ｎ’に基づいてイタレーション回数と開始位置を設定する。【００９７】
また、電力・クロック制御部１１に対し、電力供給するプロセッサコア１４を選択するとともに、選択したプロセッサコア１４へ供給する再計算した動作クロックｃ’の周波数の設定をする。【００９８】
ステップＳ７６では、外乱に関連する外乱割り込み処理が終了すると、静的に設定したループ分割数ｎに基づいてイタレーション回数と開始位置の初期値に復帰させる。
また、電力・クロック制御部１１に対し、初期設定の電力供給するプロセッサコア１４を選択するとともに、選択したプロセッサコア１４へ供給する動作クロックｃの周波数を設定する。【００９９】
ステップＳ７７では、再度外乱が発生した場合にもステップＳ７５と同じような処理により最適値を算出して動的に変更を行う。
（動作例）
図８は、従来の動作実施した場合と本発明を実施した場合での消費電力の効果を示したモデルである。【０１００】
図８のモデルでは、図８（Ｅ）に示すように電力特性として基本電力値Δ＝２００ｍＷを有するプロセッサにおいて、クロックが４００、６００、８００、１０００ＭＨｚ時のプロセッサコア１４の消費電力が各々６００、８００、１６００、３０００ｍＷを示す特性のプロセッサを想定している。電力特性ファイル７、１３には上記内容が記録されている。【０１０１】
まず、モデルとするマルチプロセッサコア１４のプロセッサ数を６とした場合、従来技術により、例えばＤＯＡＬＬループを処理する場合には、各プロセッサコア１４を４００ＭＨｚで６並列で動作させた場合に、図８（Ａ）に示すように、６００ｍＷ×６＝３６００ｍＷの電力を消費することがわかる。【０１０２】
この従来モデルにおいて、図８（Ｂ）のように外乱として３並列のタスク８１ａ〜８１ｃが投入された場合、またこの投入されたタスク８１ａ〜８１ｃが各々４００ＭＨｚの性能を期待する場合に、投入されたプロセッサコア１４のクロックを６００＋４００ＭＨｚ＝１０００ＭＨｚで駆動させることで、外乱前と同じ性能で動作することができる。【０１０３】
このときの消費電力は６００ｍＷ×３＋３０００ｍＷ×３＝１０８００ｍＷの電力を消費する。
一方で、本発明の処理方法に基づき、このマルチプロセッサコア１４の電力特性を考慮したループ分割数を式（５）を解くことにより、並列度４および、そのときの各プロセッサの周波数は６００ＭＨｚが最適解であることがわかるため、実際には図８（Ｃ）のように６つのプロセッサのうち２つを停止することができる。つまり、静的な設定においても従来よりも消費電力が低減できる。【０１０４】
このとき消費する電力は８００ｍＷ×４＝３２００ｍＷとなることがわかる。すなわち従来６並列が有効と考えられていた実行形態に比べ、実際の電力特性を加味することにより、４並列で動作クロック周波数を上げたほうが、性能は同等で電力的に優位な結果を得ることができる。【０１０５】
また、従来モデルと同様の外乱として、１つの処理あたり４００ＭＨｚの３並列タスクが投入された場合、図８（Ｄ）のように、ループ並列度を４から３に変更し、空いたプロセッサ３つに対して、外乱タスク８１ａ〜８１ｃを投入することになる。このとき、並列処理用コードが実装されたプロセッサコア１４はこれまでの性能を継承するため式（５）に基づき、８００ＭＨｚにクロックアップすることになるが、実際の消費電力は１６００ｍＷ×３＋６００ｍＷ×３＝６６００ｍＷの消費電力となる。つまり、動的な設定においても従来よりも消費電力が低減できる。【０１０６】
また、図９はこのモデルにおけるループ分割が処理の途中で変更になった場合のイタレーション回数の再配置について示したものである。
図９（Ａ）のプロセッサコア１４に実装された並列処理用コードには静的に初期値として設定されたイタレーション回数が、並列処理用コード１０ｂには０〜２４９、並列処理用コード１０ｃには２５０〜４９９、並列処理用コード１０ｄには５００〜７４９、並列処理用コード１０ｅには７５０〜９９９が設定されている。また、２つのプロセッサコア１４には電力が供給されていない。【０１０７】
図９（Ｂ）は、上記図９（Ａ）で動作しているときに、外乱割り込みタスク８１ａ〜８１ｃが発生した場合について示した図である。
本例では、各並列処理用コード１０ａ〜１０ｅが、実行開始からイタレーションが１００番目まで完了しているときにタスク割り込みが発生した場合である。【０１０８】
そして、各並列処理用コード１０ｅが実装されているプロセッサコア１４にタスク８１ａが投入されている。
各並列処理用コード１０ｅの実装されたプロセッサコア１４が、１００番目までループ処理が完了すると７５０〜８４９番目まで演算が完了したことになる。【０１０９】
そこで、再計算して際スケジューリングしてイタレーションの８５０〜９９９番目を３分割して８５０〜８９９、９００〜９４９、９５０〜９９９とする。並列処理用コード１０ｂには０〜２４９と８５０〜８９９、並列処理用コード１０ｃには２５０〜４９９と９００〜９４９、並列処理用コード１０ｄには５００〜７４９と９５０〜９９９を割り当てる。【０１１０】
タスク８１ａ〜８１ｃの処理が完了すれば、また、図９（Ａ）で示した状態に戻す。
このモデル事例では実際の消費電力の約６０％の消費電力で動作することが確認できる。また、コンパイル時に並列度を指定せず、実際の動作状況に応じてループ並列処理を動的に決定できる本発明手法の有効性を確認することができている。【０１１１】
なお、上記実施例のフローに示した制御処理は、その制御処理を遂行させる命令が記述されたプログラムをコンピュータに実行させることにより実現することができる。
このプログラムをＣＤ−ＲＯＭなどの記憶媒体に記憶しておけば、コンピュータに、そのプログラムをインストールすることにより、制御処理を実現することができる。また、このプログラムを通信ネットワークを介してコンピュータにダウンロードしてもよい。【０１１２】
また、複数のプロセッサコアを有するプロセッサを用いるとき、プロセッサコアごとに、動作クロックと、動作クロックの周波数に対応する動作消費電力と、並列ループ処理に必要なループ処理時間に基づき、ループ処理時間内に処理を行うために必要なプロセッサコア数を算出してプロセッサコアを選択し、選択されるプロセッサコアごとに動作クロックを算出する制御部を設ける構成としてもよい。【０１１３】
また、本発明は、上記実施の形態に限定されるものでなく、本発明の要旨を逸脱しない範囲内で種々の改良、変更が可能である。
【図１】
2009037731.tif 000003
【図２】
2009037731.tif 000004
【図３】
2009037731.tif 000005
【図４】
2009037731.tif 000006
【図５】
2009037731.tif 000007
【図６】
2009037731.tif 000008
【図７】
2009037731.tif 000009
【図８】
2009037731.tif 000010
【図９】
2009037731.tif 000011
【手続補正書】
【提出日】平成22年2月18日(2010.2.18)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数のプロセッサコアに実装するソースコードをコンパイルする翻訳装置であって、
前記ソースコードから、予め設定された繰り返し回数だけ内部処理を実行するループ処理コードであり、繰り返しごとに実行される前記内部処理に互いに依存関係がない、並列処理可能な並列ループ処理コードを検出する並列ループ処理検出部と、
前記並列ループ処理コードにおける前記繰り返し回数を制御するための制御コア用コードと、該制御コア用コード側からの制御に対応して前記繰り返し回数を変更するための並列処理用コードとを生成する動的並列変換部と、
を具備することを特徴とする翻訳装置。
【請求項２】
前記動的並列変換部が生成する前記制御コア用コードは、
前記並列処理用コードの処理を行うために必要な前記プロセッサコア数を算出してループ分割数とする並列度選択コードと、
前記ループ分割数に基づいて使用する前記プロセッサコアを選択し、選択される前記プロセッサコアごとに動作クロックを算出する電力制御コードと、
前記ループ分割数に基づいて使用する前記プロセッサコアごとに前記繰り返し回数であるイタレーション回数とイタレーションの開始位置を算出してイタレーション情報とするイタレーション回数解析コードと、
から構成されることを特徴とする請求項１に記載の翻訳装置。
【請求項３】
前記並列度選択コードは、
前記並列処理用コードを実行する前記プロセッサコアごとに、動作クロックと、前記動作クロックの周波数に対応する動作消費電力と、前記並列ループ処理コードを処理するのに必要なループ処理時間に基づき、前記ループ処理時間内に前記並列処理用コードの処理を行うために必要な前記プロセッサコア数を算出してループ分割数とすることを特徴とする請求項２に記載の翻訳装置。
【請求項４】
前記制御コア用コードは、
前記並列処理用コードを実行する前記プロセッサコアに前記イタレーション情報を送信する制御情報送信コードを有することを特徴とする請求項１に記載の翻訳装置。
【請求項５】
前記動的並列変換部が生成する前記並列処理用コードは、
前記イタレーション情報を取得すると、前記イタレーション情報に基づいてイタレーション回数と前記開始位置を設定するイタレーション設定コードとともに、メモリマップを設定するメモリマップ設定コードと、
から構成されることを特徴とする請求項１に記載の翻訳装置。
【請求項６】
複数のプロセッサコアに実装するソースコードをコンパイルする翻訳方法であって、
前記ソースコードから、予め設定された繰り返し回数だけ内部処理を実行するループ処理コードであり、繰り返しごとに実行される前記内部処理に互いに依存関係がない、並列処理可能な並列ループ処理コードを検出する並列ループ処理検出ステップと、
前記並列ループ処理コードにおける前記繰り返し回数を制御するための制御コア用コードと、該制御コア用コード側からの制御に対応して前記繰り返し回数を変更するための並列処理用制御コードとを生成する動的並列変換ステップと、
を実行することを特徴とする翻訳方法。
【請求項７】
前記動的並列変換ステップにより生成する前記制御コア用コードは、
前記並列処理用コードの処理を行うために必要な前記プロセッサコア数を算出してループ分割数とする並列度選択コードと、
前記ループ分割数に基づいて使用する前記プロセッサコアを選択し、選択される前記プロセッサコアごとに動作クロックを算出する電力制御コードと、
前記ループ分割数に基づいて使用する前記プロセッサコアごとに前記繰り返し回数であるイタレーション回数とイタレーションの開始位置を算出してイタレーション情報とするイタレーション回数解析コードと、
から構成されることを特徴とする請求項６に記載の翻訳方法。
【請求項８】
前記制御用コアコードは、
前記並列処理用コードを実行する前記プロセッサコアに前記イタレーション情報を送信する制御情報送信コードを有することを特徴とする請求項６に記載の翻訳方法。
【請求項９】
コンピュータに、
複数のプロセッサコアに実装するソースコードをコンパイルする翻訳方法であって、
前記ソースコードから、予め設定された繰り返し回数だけ内部処理を実行するループ処理コードであり、繰り返しごとに実行される前記内部処理に互いに依存関係がない、並列処理可能な並列ループ処理コードを検出する並列ループ処理検出処理と、
前記並列ループ処理コードにおける前記繰り返し回数を制御するための制御コア用コードと、該制御コア用コード側からの制御に対応して前記繰り返し回数を変更するための並列処理用コードとを生成する動的並列変換処理と、
を実行させるためのプログラムを記録したコンピュータが読み取り可能な記録媒体。
【請求項１０】
翻訳装置によりコンパイルされたソースコードを実装する複数のプロセッサコアの制御方法であって、
前記ソースコードから、予め設定された繰り返し回数だけ内部処理を実行するループ処理であり、繰り返しごとに実行される前記内部処理に互いに依存関係がない、並列処理可能な並列ループ処理を行うときに、
前記プロセッサコアごとに、動作クロックと、前記動作クロックの周波数に対応する動作消費電力と、前記並列ループ処理に必要なループ処理時間に基づき、前記ループ処理時間内に処理を行うために必要な前記プロセッサコア数を算出してループ分割数とし、
前記ループ分割数に基づいて使用する前記プロセッサコアを選択し、選択される前記プロセッサコアごとに前記動作クロックを算出し、
前記ループ分割数に基づいて使用する前記プロセッサコアごとに前記繰り返し回数であるイタレーション回数とイタレーションの開始位置を算出してイタレーション情報とし、
複数の前記プロセッサコアに分割して実行する前記並列ループ処理の繰り返し回数を、受信した前記イタレーション情報に基づいて動的に変更する制御を行う並列処理と、
を有することを特徴とするプロセッサコアの制御方法。
【請求項１１】
プロセッサであって、
複数のプロセッサコアと、
前記プロセッサコアごとに、動作クロックと、前記動作クロックの周波数に対応する動作消費電力と、並列ループ処理に必要なループ処理時間に基づき、前記ループ処理時間内に処理を行うために必要な前記プロセッサコア数を算出して前記プロセッサコアを選択し、選択される前記プロセッサコアごとに前記動作クロックを算出する制御部と、
を有することを特徴とするプロセッサ。
【国際調査報告】
2009037731.tif 000012
2009037731.tif 000013
2009037731.tif 000014
2009037731.tif 000015
2009037731.tif 000016