(58)【調査した分野】(Int.Cl.,DB名)
前記メモリアクセス率が高いタスクは、メモリアクセス率が低いタスクが存在するソケットに割り付け、前記メモリアクセス率が低いタスクはメモリアクセス率が高いタスクが存在するソケットに割り付けることを特徴とする請求項2に記載のタスク割り付けプログラム。
前記タスクの親子関係の有無に応じて、前記ソケット又は前記コアに対する割り付けを行うことを特徴とする請求項1乃至3の何れか1項に記載のタスク割り付けプログラム。
【発明を実施するための形態】
【0012】
以下、添付図面を参照しながら実施例について詳細に説明する。
【0013】
<情報処理装置の機能構成例>
図1は、情報処理装置の機能構成例を示す図である。
図1に示す情報処理装置10は、例えば所定のアプリケーションに対応させて、プロセッサのソケットやコア等にタスクを割り付けて並列処理を実行する。
図1の例に示す情報処理装置10は、入力手段11と、出力手段12と、記憶手段13と、割り付け手段14と、処理実行手段15と、プロファイル情報測定手段16と、算出手段17と、更新手段18と、通信手段19と、制御手段20とを有する。
【0014】
入力手段11は、ユーザ等から各種指示の開始や終了、設定の入力等の各種入力を受け付ける。例えば、入力手段11は、本実施形態におけるタスクのソケットやコアへの割り付け指示、処理実行指示、プロファイル情報測定指示、算出指示、更新指示、通信指示等の各指示を受け付ける。入力手段11は、例えばキーボードやマウス等でもよく、また画面を用いたタッチパネル形式等でもよく、マイクロフォン等でもよいが、これに限定されるものではない。
【0015】
出力手段12は、入力手段11により入力された内容や、入力内容に基づいて実行された内容等の出力を行う。例えば、出力手段12は、画面表示により出力する場合には、ディスプレイやモニタ等の表示手段でもよく、また音声により出力する場合には、スピーカ等の音声出力手段でもよいが、これに限定されるものではない。
【0016】
記憶手段13は、本実施形態において必要となる各種情報を記憶する。例えば、記憶手段13は、入力手段11から得られる各指示情報や、各種アプリケーションに対応して設定された1又は複数のタスク、タスクのソケットやコアへの割り付け内容、ハードウェアモニタ情報、プロファイル情報等を記憶する。記憶手段13に記憶される情報は、上述した情報に限定されるものではない。
【0017】
記憶手段13は、記憶された各種情報を必要に応じて所定のタイミングで読み出したり、書き込んだりする。記憶手段13は、例えばハードディスクやメモリ等であるが、これに限定されるものではない。記憶手段13は、通信手段19を介してデータの送受信可能な状態で接続される記憶装置(ディスク装置)として設けられていてもよい。
【0018】
割り付け手段14は、過去のプロファイル情報からタスク別のメモリアクセス等の度合い(メモリアクセス率)を取得し、タスクを割り付けるソケットやコア等をタスク単位で割り付ける。なお、タスクとは、例えばOpenMPを用いたアプリケーションプログラム(ソースコード)のtask(タスク)構文等で囲まれたブロック等である。したがって、タスク単位とは、例えばタスク構文単位に相当するが、これに限定されるものではない。
【0019】
例えば、割り付け手段14は、例えばメモリアクセス率に基づき、アプリケーションからのタスク指示に対して、アプリケーションを実行するプログラムにおけるタスクの構文単位で、プロセッサのソケット又はコアへの割り付けを行う。また、割り付け手段14は、更新手段18により更新されたプロファイル情報に基づいてタスク割り付けを行うこともできる。タスクの割り付けは、プロファイル情報が更新されるタイミング(例えば、ループ単位やサブルーチン単位の実行終了等)で行うことができるが、これに限定されるものではなく、例えばアプリケーション単位の実行タイミングでもよい。
【0020】
処理実行手段15は、割り付け手段14によりプロセッサが有するコアやソケットに割り付けたタスクの処理(並列処理等)を実行する。処理実行手段15は、例えばOpenMP Application Program Interface(API) Version3.0で規定されたタスク構文を用いてプログラミングされたアプリケーションに対応する実行可能ファイル等を実行することで、その内部のタスク処理を実行させる。
【0021】
プロファイル情報測定手段16は、処理実行手段15による処理の実行により得られるハードウェアモニタ情報を用いてタスク別プロファイル情報を測定する。ハードウェアモニタ情報とは、例えばアプリケーション実行中におけるハードウェアの動作状況をモニタリングした情報である。ハードウェアモニタ情報は、タスク単位やループ単位、サブルーチン単位、アプリケーション単位等の情報を出力することができるが、これに限定されるものではない。
【0022】
ハードウェアモニタ情報の測定情報としては、例えば「経過時間」、「Million Floating−point Operations Per Second(MFLOPS)」、「MFLOPSピーク性能比」、「Million Instructions Per Second(MIPS)」、「MIPSピーク性能比」、「メモリアクセススループット(チップ単位)」、「メモリアクセススループットピーク性能比(チップ単位)」、「Single Instruction Multiple Data(SIMD)命令率」等があるが、これに限定されるものではない。例えば、ハードウェアモニタ情報として、メモリアクセス待ち時間やキャッシュミス情報等を有していてもよい。
【0023】
「経過時間」とは、例えば経過時間測定範囲におけるタスク等の命令実行に要した時間である。「MFLOPS」は、例えば浮動小数点演算実行効率(1秒間の平均浮動小数点演算実行数)である。「MFLOPSピーク性能比」は、例えばMFLOPSの論理ピーク値に対する実測値の比率である。「MIPS」は、命令実行効率(1秒間の平均命令実行数)である。「MIPSピーク性能比」は、例えばMIPSの論理ピーク値に対する実測値の比率である。
【0024】
「メモリアクセススループット(チップ単位)」は、メモリ、Central Processing Unit(CPU)チップ間における1秒あたりの平均データ転送量である。また、「メモリアクセススループットピーク性能比(チップ単位)」は、メモリアクセススループット(チップ単位)の論理ピーク値に対する実測値の比率である。
【0025】
また、「SIMD命令率」は、例えば命令実行数に占めるSIMD命令数の割合である。SIMD命令とは、例えば1命令で複数のオペランドを処理する命令である。
【0026】
なお、ハードウェアモニタ情報は、プログラムの実行性能を確認することができ、例えばMIPS値及びMFLOPS値がそれぞれのピーク値に近いほど、実行性能及び演算性能が高いプログラムであることを示す。
【0027】
算出手段17は、上述したハードウェアモニタ情報等から、タスクそれぞれのメモリアクセス率を算出する。算出手段17における算出手法の具体例については、後述する。
【0028】
更新手段18は、算出手段17により算出したメモリアクセス率等に基づいてタスク別プロファイル情報を更新する。これにより、割り付け手段14は、実行途中のその場でのタスクのメモリアクセス率等の履歴からタスクを割り付けるソケットやコアを適切に割り付けることができる。
【0029】
通信手段19は、例えばインターネットやLocal Area Network(LAN)等に代表される通信ネットワークを介して外部装置と各種情報の送受信を行う。通信手段19は、外部装置等にすでに記憶されている各種情報等を受信することができ、また情報処理装置10で処理された結果を、通信ネットワーク等を介して外部装置等に送信することもできる。
【0030】
制御手段20は、情報処理装置10の各構成全体の制御を行う。具体的には、制御手段20は、例えばユーザ等による入力手段11からの指示等に基づいて、タスク割り付け処理に関する各制御を行う。ここで、各制御とは、例えば上述した割り付け手段14によりタスクにソケットやコアを割り付ける、処理実行手段15によりタスク処理等を実行させる、プロファイル情報測定手段16によりプロファイル情報を測定させる、算出手段17によりメモリアクセス率を算出させる、更新手段18によりタスク別プロファイル情報を更新させる等があるが、これらに限定されるものではない。なお、上述した割り付け手段14、処理実行手段15、プロファイル情報測定手段16、算出手段17、及び更新手段18における各処理は、例えば予め設定された少なくとも1つのアプリケーション(プログラム)を実行することで実現することができる。
【0031】
本実施形態では、上述した情報処理装置10により、例えばタスクの割り付けにおいて、実行時のプロファイル情報を使って、タスクの割り付け先をリアルタイムに制御することができる。したがって、HPC用プロセッサ等を用いた並列処理において、処理効率や処理性能の向上を図ることができる。
【0032】
情報処理装置10は、例えばPersonal Computer(PC)やサーバ等からなるが、これに限定されるものではなく、HPC用プロセッサ等のマルチプロセッサを有する計算機等に適用することができる。
【0033】
<情報処理装置10のハードウェア構成例>
図2は、情報処理装置のハードウェア構成例を示す図である。
図2に示す情報処理装置10は、入力装置31と、出力装置32と、ドライブ装置33と、補助記憶装置34と、主記憶装置35と、各種制御を行うCPU36と、ネットワーク接続装置37とを有し、これらはシステムバスBで相互に接続されている。
【0034】
入力装置31は、ユーザ等が操作するキーボード及びマウス等のポインティングデバイスや、マイクロフォン等の音声入力デバイスを有しており、ユーザ等からのプログラムの実行指示、各種操作情報、ソフトウェア等を起動するための情報等の入力を受け付ける。
【0035】
出力装置32は、本実施形態における処理を行うためのコンピュータ本体(情報処理装置10)を操作するのに必要な各種ウィンドウやデータ等を表示するディスプレイ等を有する。出力装置32は、CPU36が有する制御プログラムによりプログラムの実行経過や結果等を表示することができる。
【0036】
ここで、本実施形態において、例えばコンピュータ本体にインストールされる実行プログラムは、記録媒体38等により提供される。記録媒体38は、ドライブ装置33にセット可能である。CPU36からの制御信号に基づき、記録媒体38に格納された実行プログラムが、記録媒体38からドライブ装置33を介して補助記憶装置34にインストールされる。
【0037】
補助記憶装置34は、例えばHard Disk Drive(HDD)やSolid State Drive(SSD)等のストレージ手段等である。補助記憶装置34は、CPU36からの制御信号に基づき、本実施形態における実行プログラム(タスク割り付けプログラム)や、コンピュータに設けられた制御プログラム等を記憶し、必要に応じて入出力を行う。補助記憶装置34は、CPU36からの制御信号等に基づいて、記憶された各情報から必要な情報を読み出したり、書き込むことができる。
【0038】
主記憶装置35は、CPU36により補助記憶装置34から読み出された実行プログラム等を格納する。主記憶装置35は、Read Only Memory(ROM)やRandom Access Memory(RAM)等である。
【0039】
CPU36は、OS等の制御プログラム、及び主記憶装置35に格納されている実行プログラムに基づいて、各種演算や各ハードウェア構成部とのデータの入出力等、コンピュータ全体の処理を制御して各処理を実現する。プログラムの実行中に必要な各種情報等は、補助記憶装置34から取得することができ、また実行結果等を格納することもできる。また、CPU36は、マルチプロセッサを有しており、アプリケーション等によるタスク指示を用いて、タスク構文単位でプロセッサへのソケットやコアを指定して並列処理を実行する。
【0040】
具体的には、CPU36は、例えば入力装置31から得られるプログラムの実行指示等に基づき、補助記憶装置34にインストールされたプログラムを実行させることにより、主記憶装置35上でプログラムに対応する処理を行う。例えば、CPU36は、タスク割り付けプログラムを実行させることで、上述した割り付け手段14によるソケット又はコアの割り付け、処理実行手段15による処理の実行、プロファイル情報測定手段16によるプロファイル情報の測定、算出手段17によるメモリアクセス率の算出、更新手段18によるプロファイル情報の更新等の処理を行う。なお、CPU36における処理内容は、これに限定されるものではない。CPU36により実行された内容は、必要に応じて補助記憶装置34に記憶される。
【0041】
ネットワーク接続装置37は、上述した通信ネットワークを介して、他の外部装置との通信を行う。ネットワーク接続装置37は、CPU36からの制御信号に基づき、通信ネットワーク等と接続することにより、実行プログラムやソフトウェア、設定情報等を外部装置等から取得する。また、ネットワーク接続装置37は、プログラムを実行することで得られた実行結果を外部装置に提供したり、本実施形態における実行プログラム自体を外部装置等に提供してもよい。
【0042】
記録媒体38は、上述したように実行プログラム等が格納されたコンピュータで読み取り可能な記録媒体である。記録媒体38は、例えばフラッシュメモリ等の半導体メモリやCD−ROM、DVD等の可搬型の記録媒体であるが、これに限定されるものではない。
【0043】
図2に示すハードウェア構成に実行プログラム(例えば、タスク割り付けプログラム等)をインストールすることで、ハードウェア資源とソフトウェアとが協働して本実施形態におけるタスク割り付け処理等を実現することができる。
【0044】
<本実施形態におけるCPU36の具体例>
次に、本実施形態におけるCPU36の具体例について説明する。
図3は、CPUの具体例を示す図である。
図3の例に示すCPU36は、マルチコアのプロセッサであり、1つのプロセッサ・パッケージ内に複数のコアを有する。例えば、CPU36は、メモリ41と、1又は複数のソケット42(
図3の例では、2つのソケット#1,#2)とを有する。また、各ソケット42は、1又は複数のコア43(
図3の例では、4つのコア#0〜#3)を含むパッケージである。ソケット数やコア数については、
図3の例に限定されるものではない。CPU36は、
図3に示すようなマルチコアプロセッサによる並列処理によって性能を向上させる。
【0045】
メモリ41は、マイクロプロセッサの内部に設けられた高速な記憶装置(例えば、1次キャッシュ)である。メモリ41に使用頻度の高いデータを蓄積しておくことで、低速なメインメモリへのアクセスを減らすことができ、処理を高速化することができる。例えば、CPU36は、2段階のキャッシュメモリを搭載している場合、最初にデータを読みに行くのが、より高速でより容量の小さい1次キャッシュであり、1次キャッシュにデータがなかった場合は、より低速でより容量の大きな2次キャッシュに読みに行く。なお、メモリ41の1次キャッシュ及び2次キャッシュは、上述した主記憶装置35及び補助記憶装置34としてもよい。
【0046】
ソケット42は、複数のコア43を格納する領域である。例えば親子関係にあるタスクの場合には、メモリ等のローカリティ(局所性)を保つため、同一ソケットにそれらのタスクを配置する。これにより、アクセスが1ソケット内に閉じることになるため、処理効率や処理性能が向上する。
【0047】
コア43は、コンピュータの演算処理を行う部分である。本実施形態では、例えば1つのコア43に1つのタスクが構文単位で割り付けられる。
【0048】
<情報処理装置10における処理の一例>
次に、本実施形態における情報処理装置10における処理(タスク割り付け処理)の一例について、フローチャートを用いて説明する。
図4は、情報処理装置の処理の一例を示すフローチャートである。
【0049】
図4の例において、情報処理装置10の割り付け手段14は、アプリケーションプログラムのタスク指示により実行するタスクのコアへの割り付けを行う(S01)。S01の処理において、割り付け手段14は、過去のタスク別プロファイル情報を用いてタスク毎のメモリアクセス等の度合いを取得し、その結果から各タスクを構文単位でコアへの割り付けを行う。なお、S01の処理では、例えば
図3に示すように複数のソケットがある場合には、どのソケットを用いるかについての割り付けを行ってもよい。
【0050】
次に、情報処理装置10の処理実行手段15は、コアに割り付けたタスクの処理を実行する(S02)。情報処理装置10のプロファイル情報測定手段16は、実行中におけるハードウェアモニタ情報を取得し(S03)、取得したハードウェアモニタ情報よりタスク毎のメモリアクセス率を算出する(S04)。
【0051】
次に、情報処理装置10の更新手段18は、S04の処理により算出されたタスク毎のメモリアクセス率に基づき、タスク別プロファイル情報を更新する(S05)。
【0052】
次に、情報処理装置10は、例えばアプリケーションに含まれる全てのタスクの処理が終了したか否かを判断し(S06)、全てのタスクの処理が終了していない場合(S06において、NO)、S01の処理に戻る。この場合、S01の処理では、S06の処理で更新されたタスク別プロファイル情報を用いて各タスクのコアへの割り付けを行う。また、情報処理装置10は、全てのタスクの処理が終了した場合(S06において、YES)、処理を終了する。
【0053】
<本実施形態におけるタスク割り付けについて>
ここで、本実施形態におけるタスク割り付けの具体例について説明する。
図5は、本実施形態におけるタスク割り付け手法の具体例を示す図である。
図5の例において、
図3に示すようなマルチコアプロセッサの一例であるCPU36は、所定のアプリケーションに対応する実行可能ファイルを実行する。ここで、CPU36は、タスクの構文単位でのコアへの割り付けを行う場合に、タスク別プロファイル情報を取得する。
【0054】
図5の例に示すタスク別プロファイル情報の項目としては、例えば「タスク」、「レベル」、「メモリアクセス率」等があるが、これに限定されるものではない。「タスク」とは、タスクを識別するための情報である。「レベル」とは、タスクの階層(例えば、親子関係等)を示す情報である。例えば、
図5の例において、タスクAは、レベル0、1、2の3階層であることを示している。また、「メモリアクセス率」とは、タスク及びレベル毎のメモリアクセス率である。
【0055】
また、CPU36は、ランタイムライブラリ等に含まれるコンピュータプログラムの実行時に必要となるソフトウェア部品(モジュール)等を用いて、実行中のタスクのソケットやコアへの割り付け状況を取得する。タスク割り付け状況の項目としては、例えば「ソケット」、「コア」、「タスク識別」、「レベル」、「メモリアクセス率」等があるが、これに限定されるものではない。「ソケット」とは、CPU36中のソケットを識別するための情報である。「コア」は、ソケット毎のコアを識別するための情報である。
図5の例では、1つのソケット#0に4つのコア#0〜#3を有していることを示している。「タスク」は、各ソケットの各コアに割り付けられたタスクの情報である。「レベル」は、タスクに対する階層を示す図である。「メモリアクセス率」は、取得したタスクの割り付け状況から、算出手段17によりタスクそれぞれのメモリアクセス率を算出した結果を示している。
【0056】
CPU36は、算出したメモリアクセス率を用いて、構文単位でソケットやコアを新たに割り付ける。なお、構文単位とは、例えばタスク構文単位であるが、これに限定されるものではなく、アプリケーション単位やスレッド(並列する処理)単位でもよいが、これに限定されるものではない。
【0057】
このように、本実施形態では、アプリケーション側で、実際のメモリアクセス率を算出し、算出したメモリアクセス率に基づいて、次回のソケット及びコアの割り付けを、タスク指示を通じて行うことができる。
【0058】
<タスク構文について>
次に、本実施形態におけるタスク構文について説明する。例えば、従来手法におけるタスクの実行では、
図3に示すようなプロセッサ(CPU36)の構成において、OSレベル単純な先入れ先出し方式やラウンドロビン方式等により適当なソケットにタスクを割り付けて実行していた。そのため、従来手法では、処理効率や処理性能の向上にも限界があった。そこで、本実施形態では、OpenMPのタスクを構文のネスト(入れ子)レベルまで分けてコアに割り付ける。したがって、例えばOpenMPのタスクのネストレベル別の動作特定を用いた割り付け制御を行うことができる。
【0059】
ここで、
図6は、タスクを実行するアプリケーション中に含まれる構文の一例を示す図である。また、
図7は、本実施形態におけるタスク割り付けの概略例を示す図である。
【0060】
図6の例では、OpenMP API Version3.0に対応する構文例を示している。
図6の例に示すようなプログラムによりタスクを実行するアプリケーションを動作させた場合、従来ではtask(タスク)構文内のtraverse内のメモリアクセス率がわからない。そのため、どのソケットに割り付けられるかはtraverse内の命令に関係なくコアを先頭から詰めて割り付けるか、又は、ラウンドロビン的に割り付けられていた。
【0061】
例えば、
図7(A)に示すような5つのタスクA〜Eがあった場合、タスクA〜Eの従来の割り付けでは、例えば
図7(B)の(a)に示すようにソケット#0からコアの先頭(コア#0)を詰めて割り付けていた。また、別の従来方式として、
図7(B)の(b)に示すように負荷を均等にするためにラウンドロビン的に割り付けていた。そのため、適切なソケットへの割り付けが行われずにいた。
【0062】
そこで、本実施形態では、タスクA〜Eに対し、ハードウェアモニタ情報を利用して、実行途中のその場でのタスクのメモリアクセス率等の情報を履歴管理して、
図7(A)に示すようなタスク別プロファイル情報を測定する。次に、このタスク別プロファイル情報を用いて、これから動作させるタスクが、メモリアクセス率が高いタスクかどうか判断し、その情報に基づいて、
図7(B)の(c)に示すように、タスク毎にソケットやコアへの割り付けを行う。これにより、プロセッサの処理効率や処理性能の向上を図ることができる。
【0063】
<コアの割り付け例>
次に、上述した割り付け手段14におけるコアの割り付け例について、図を用いて説明する。
図8は、割り付け手段における処理の一例を示すフローチャートである。
図8の例において、割り付け手段14は、まず過去のタスク別プロファイル情報があるか否かを判断する(S11)。なお、過去のタスク別プロファイル情報は、例えば同一のプログラム(タスク群)において実行されたアプリケーションに対するハードウェアモニタ情報から得られるタスク別プロファイル情報等であることが好ましいが、これに限定されるものではない。
【0064】
割り付け手段14は、S11の処理において、過去のタスク別プロファイル情報がある場合(S11において、YES)、その過去のプロファイル情報によるタスクのメモリアクセス等の度合い(例えば、メモリアクセス率等)を取得する(S12)。次に、割り付け手段14は、適正制御によりタスクを割り付けるコアを選択する(S13)。適正制御とは、例えばメモリアクセス率が高いタスクは、メモリアクセス率が低いタスクが存在するソケットのコアに割り付け、またメモリアクセス率が低いタスクは、メモリアクセスが高いタスクが存在するソケットのコアに割り付ける等である。つまり、各ソケットにおけるメモリアクセスの度合いを均等になるように割り付けを行う。なお、適正制御については、これに限定されるものではなく、例えば親子関係にあるタスクは、同一のソケットに割り付ける等の処理を行ってもよい。
【0065】
また、割り付け手段14は、過去のタスク別プロファイル情報がない場合(S11において、NO)、例えばコアの先頭から詰めて割り付けたり、負荷を均等にするためにラウンドロビン的に割り付ける等の従来方式でタスクを割り付けるコアを選択する(S14)。
【0066】
<メモリアクセス率に基づくソケットやコアへの割り付け例>
次に、本実施形態におけるメモリアクセス率に基づくソケットやコアへの割り付け例について、図を用いて説明する。
図9、
図10は、メモリアクセス率に基づくソケットやコアへの割り付け例を示す図(その1、その2)である。なお、
図9の例では、実行するタスクが親子関係にある場合を示し、
図10の例では、実行するタスクが親子関係にない場合を示している。タスクの親子関係とは、例えば親(レベル0)のタスクの実行結果を子(レベル1)のタスクで入力データとして利用する場合等であるが、これに限定されるものではない。
【0067】
図9(A)は、2スレッド並列プログラム(レベル:2段階)で実行されるタスクの内容と処理実行後のハードウェアモニタ情報の一例を示している。
図9(B)は、
図9(A)のハードウェアモニタ情報を用いて測定したタスク別プロファイル情報の一例を示している。
図9(C)は、
図9(B)のタスク別プロファイル情報に対応させてCPU36のソケット及びコアにタスクを割り付けた例を示している。
図9(D)は、タスク割り付け状況の一例を示している。
【0068】
図9(A)に示す2スレッド並列プログラムの項目としては、例えば「タスク名(レベル)」、「スレッド数」、「経過時間(秒)」、「メモリアクセス待ち(秒)」、「タスク種別」等があるが、これに限定されるものではない。
図9(A)における「タスク種別」は、例えばタスクを区別するために、「タスク名+レベル+スレッド数」で名前を付けているが、これに限定されるものではない。
【0069】
図9の例において、実行するタスク(task_A)は、親子関係(レベル0、レベル1)にある。このような場合にタスクの割り付け先コアを選択する際には、キャッシュ(メモリ41)のローカリティ(局所性)を保つため、同一ソケットに配置する。したがって、
図9(B)に示すように、ソケット#0のコア#0〜#3に対して、それぞれタスクA00、A01、A10、A11が割り付けられる。
【0070】
なお、
図9(B)に示すメモリアクセス率は、
図9(A)に示すメモリアクセス待ち時間及び経過時間を用いて、「メモリアクセス率(%)=メモリアクセス待ち(秒)/経過時間(秒)×100」として取得することができるが、これに限定されるものではない。
【0071】
一方、
図10の例において、
図10(A)は、2スレッド並列プログラム(レベル:1段階)で実行されるタスクの内容と処理実行後のハードウェアモニタ情報の一例を示している。
図10(B)は、
図10(A)のハードウェアモニタ情報を用いて測定したタスク別プロファイル情報の一例を示している。
図10(C)は、
図10(B)のタスク別プロファイル情報に対応させてCPU36のソケット及びコアにタスクを割り付けた例を示している。
図10(D)は、タスク割り付け状況の一例を示している。
【0072】
図10の例において、実行タスク(task_B,task_C)は、親子関係にないタスクである。このような場合でタスクの適切な割り付け先コアの決定する際には、メモリアクセス率とタスク割り付け状況により、各ソケットのメモリアクセス率が均等になるように割り付けを行う。例えば、割り付け手段14は、メモリアクセス率が高いタスクは、メモリアクセス率が低いタスクが存在するソケットに割り付け、メモリアクセス率が低いタスクはメモリアクセス率が高いタスクが存在するソケットに割り付ける。
【0073】
図10の例に示す割り付けでは、ソケット#0にタスクB00、C01、C01が割り付けられているため、タスク別プロファイル情報からソケット#0のメモリアクセス率は、20+20+5=45%となる。また、ソケット#1にタスクB01が割り付けられているため、タスク別プロファイル情報からソケット#0のメモリアクセス率は、50%となる。
【0074】
上述した割り付けを行う場合には、例えばソケット内に割り付けられたタスクのメモリアクセス率の合計が所定値(例えば、80%〜100%等)を超えないように調整を行うことが好ましいが、これに限定されるものではない。
【0075】
このように、本実施形態では、実行する複数のタスクが親子関係にあるか否かに応じて、
図9,
図10に示すように、タスクのソケットやコアへの割り付けを変えることできる。これにより、処理効率や処理性能の向上を図ることができる。
【0076】
<タスク処理の開始から終了までの処理内容について>
次に、プロファイル情報測定手段16におけるタスク処理の開始から終了までの処理内容について説明する。まず割り付け手段14は、上述したコア選択処理における適正制御により、タスクを予め設定されたソケットやコアに割り付ける。処理実行手段15は、割り付け手段14によりタスク単位でコアに割り付けられたタスク処理を開始(実行)する。このとき、プロファイル情報測定手段16は、タスク別プロファイル情報を更新するために、ハードウェアモニタ情報を使用したタスクのプロファイル情報の測定も開始する。なお、タスクの初回実行では、タスク別プロファイル情報が存在しないため、例えば従来方式(例えば、単純な先入れ先出し方式やラウンドロビン方式等)でのコアの割り付けを行う。どの従来方式を用いるかについては、例えば予めユーザ等により設定しておくことができる。
【0077】
また、処理実行中は、ループ単位、サブルーチン単位等の所定のタスク構文の終了毎又は所定の時間間隔毎に、プロファイル情報等の更新を行ってもよい。また、タスク処理の終了時には、プロファイル情報の測定も終了する。
【0078】
<更新手段18における処理について>
次に、更新手段18における処理について説明する。更新手段18は、上述したプロファイル情報測定の結果を用いてタスク別プロファイル情報を更新する。例えば、本実施形態では、プログラム実行中にタスクの構文単位でソケットやコアへの割り付けを制御することができる。
【0079】
例えば、1つのアプリケーションプログラムでは、ループ処理やサブルーチン処理等により同じ関数(タスク)が何度も実行される。そのため、本実施形態では、常時プロファイラでタスク別プロファイラ情報を取得することで、次回のタスク処理におけるソケットやコアへの割り付けを適切に行う。例えば、タスクは、プログラムの振る舞い(例えば、if文等の条件分岐)等により、同じタスクでも実行する度に処理内容が異なり、負荷も異なる。しかしながら、本実施形態のように、常時プロファイラでタスク別プロファイラ情報を取得して次回のタスクの割り付けの予測材料とすることで、負荷が異なる場合にも対応することができる。また、本実施形態では、タスクの実行において、ハードウェアモニタ情報を利用してタスクを適切なソケットやコアへ割り付けることで、タスク実行の負荷が軽減されてタスクの性能を向上することができる。
【0080】
<次回のタスクの割り付け例>
次に、次回のタスクのソケットやコアへの割り付け例(各実施例)について、図を用いて説明する。
【0081】
<第1実施例>
図11〜
図13は、第1実施例における割り付け例を示す図(その1〜その3)である。
図11(A)の例では、タスク割り付けN−1回目のタスクの内容と処理実行後のハードウェアモニタ情報の一例を示している。また、
図11(B)の例では、タスク割り付けN回目のタスクの内容と処理実行後のハードウェアモニタ情報の一例を示している。
【0082】
第1実施例では、2スレッド並列プログラム(レベル:1階層)でタスクに親子関係がない場合であって、ソケットやコアを占有して実行する(タスク割り付け時に常にコアが未使用状態)場合の例を示している。
【0083】
第1実施例では、
図12(A)の例に示すように、各ソケットのタスクの割り付けN回目の直前のメモリアクセス率の合計がソケット#0=0%(未使用)、ソケット#1=0%(未使用)であるとする。
【0084】
ここで、タスクB00、B01、C00、C01を含むプログラム(アプリケーション)を実行する場合、各タスクをコアに割り付ける。そのため、割り付け手段14は、
図11(A)に示す過去のハードウェアモニタ情報から取得した過去のタスク別プロファイル情報(例えば、1〜N−1回目までの統計履歴又はN−1回目のみの履歴情報)(
図12(B))を参照して、メモリアクセス率を取得する。また、割り付け手段14は、取得したメモリアクセス率に基づいて、
図12(C)に示すようにタスクの割り付けを行う。
図12(C)の例では、ソケット毎にメモリアクセス率が均等になるように割り付けが行われ、各ソケットのメモリアクセス率の合計がソケット#0が45%となり、ソケット#1が50%となる。したがって、
図13(A)に示すタスクのソケットやコアへの割り付けにより処理が実行される。なお、第1実施例では、
図11(B)に示すように処理実行中のハードウェアモニタ情報を取得し、取得したハードウェアモニタ情報を用いて、タスク別プロファイル情報を更新する。
【0085】
次に、第1実施例において、
図12(D)の例に示すように、各ソケットのタスクの割り付けN+1回目の直前のメモリアクセス率の合計がソケット#0=0%(未使用)、ソケット#1=0%(未使用)であるとする。
【0086】
ここで、タスクB00、B01、C00、C01を含むプログラムを実行する場合、割り付け手段14は、
図12(E)に示す更新したタスク別プロファイル情報(例えば、1〜N回目までの統計履歴又はN回目のみの履歴情報)を参照して、メモリアクセス率を取得する。また、割り付け手段14は、取得したメモリアクセス率に基づいて、
図12(F)に示すようにタスクの割り付けを行う。
図12(F)の例では、ソケット毎にメモリアクセス率が均等になるように割り付けが行われ、各ソケットのメモリアクセス率の合計がソケット#0が70%となり、ソケット#1が60%となる。したがって、
図13(B)に示すタスクのソケットやコアへの割り付けにより処理が実行される。また、第1実施例では、処理実行中のハードウェアモニタ情報を用いて、タスク別プロファイル情報を更新する。そのため、N+2回目以降のタスクの割り付けにおいても同様に更新されたタスク別プロファイル情報を用いてタスク構文単位でソケットやコアを指定することができる。
【0087】
<第2実施例>
図14、
図15は、第2実施例における割り付け例を示す図(その1、その2)である。第2実施例において、2スレッド並列プログラム(レベル:1階層)の場合で、タスクに親子関係なしの場合を示している点では、上述した第1実施例と同様である。更に、第2実施例では、ソケットやコアを他のアプリケーションプログラムと共有して実行する(例えば、タスク割り付け時に常に他のプログラムが任意のコアに割り付いている)場合を示している。なお、第2実施例でも、第1実施例と同様に、上述した
図11に示したタスクの内容と処理実行後のハードウェアモニタ情報の一例を用いることとする。
【0088】
第2実施例において、
図14(A)に示すように、コアの一部に実行対象のタスク以外のタスクX、Y、Zが存在する。そのため、タスク割り付けN回目の直前のメモリアクセス率の合計では、ソケット#0=40%、ソケット#1=40%となる。
【0089】
ここで、タスクB00、B01、C00、C01を含むプログラム(アプリケーション)を実行する場合、各タスクをコアに割り付けるため、割り付け手段14は、
図14(B)に示す過去のタスク別プロファイル情報(例えば、1〜N−1回目までの統計履歴)を参照して、メモリアクセス率を取得する。また、割り付け手段14は、取得したメモリアクセス率に基づいて、
図14(C)に示すようにタスクの割り付けを行う。
図14(C)の例では、ソケット毎にメモリアクセス率が均等になるように割り付けが行われる。なお、
図14(C)の例では、ソケット#0にタスクX、B00、C00、Yが割り付けられているため、ソケット#0内の全てのコア#0〜#3を使用しているため、タスクC01がソケット#1に割り付けられる。したがって、最終的には、各ソケットのメモリアクセス率の合計がソケット#0が85%となり、ソケット#1が95%となる。
【0090】
したがって、
図15(A)に示すタスクのソケットやコアへの割り付けにより処理が実行される。なお、第2実施例では、処理実行中のハードウェアモニタ情報を取得し、取得したハードウェアモニタ情報を用いて、タスク別プロファイル情報を更新する。
【0091】
次に、第2実施例において、N+1回目の割り付けを行う場合、
図14(D)に示すように、コアの一部に実行対象のタスク以外のタスクU、V、Wが存在する。そのため、タスク割り付けN+1回目の直前のメモリアクセス率の合計では、ソケット#0=20%、ソケット#1=15%となる。
【0092】
ここで、タスクB00、B01、C00、C01を含むプログラムを実行する場合、割り付け手段14は、
図14(E)に示す更新したタスク別プロファイル情報(例えば、1〜N回目までの統計履歴)を参照して、メモリアクセス率を取得する。また、割り付け手段14は、取得したメモリアクセス率に基づいて、
図14(F)に示すようにタスクの割り付けを行う。
図14(F)の例では、ソケット毎にメモリアクセス率が均等になるように割り付けが行われ、各ソケットのメモリアクセス率の合計がソケット#0が80%となり、ソケット#1が85%となる。したがって、
図15(B)に示すタスクのソケットやコアへの割り付けにより処理が実行される。また、第2実施例では、処理実行中のハードウェアモニタ情報を用いて、タスク別プロファイル情報を更新する。そのため、N+2回目以降のタスクの割り付けにおいても同様に更新されたタスク別プロファイル情報を用いてタスク構文単位でソケットやコアを指定することができる。
【0093】
このように本実施形態では、次の割り付けについてもリアルタイムにフィードバック制御することができ、タスク別プロファイル情報を用いて適切な対応を取ることができる。
【0094】
なお、上述した実施形態では、ハードウェアモニタ情報のメモリアクセス待ち時間と経過時間とを用いてメモリアクセス率を算出したが、これに限定されるものではなく、例えばキャッシュミス率と経過時間とに基づいてメモリアクセス率を算出してもよい。キャッシュミス情報は、ハードウェアモニタ情報から収集することができる。キャッシュミス情報とは、CPU36がキャッシュメモリ(メモリ41)を検索してもデータが存在しない場合のことである。キャッシュミスの場合は、(必要なデータが近距離にある)キャッシュメモリ上には存在せず、必要なデータが遠距離にあるメインメモリ上に存在するため、データへのアクセスに時間がかかる。このアクセスに要する時間がメモリアクセス待ち時間である。したがって、キャッシュミスが多い場合は、メモリアクセス待ち時間も増えるため、上述したメモリアクセス待ち時間ではなく、キャッシュミス率を用いてメモリアクセス率を算出することができる。したがって、本実施形態では、メモリアクセスが多く、タスクのキャッシュミス等が極端に大きい場合又は小さい場合に、タスク実行の割り付け先ソケットやコアを変更することで、タスク実行の効率を大幅に向上することができる。
【0095】
上述したように本実施形態によれば、アプリケーション側で実際のメモリアクセス率に基づいてソケット及びコアの指定を、タスク指示を通じて構文単位で行うことができる。そのため、処理効率や処理性能の向上を図ることができる。
【0096】
また、本実施形態によれば、例えばOpenMP等のタスク構文を持つアプリケーションを実行し、実行途中のその場でのタスクのメモリアクセス率等の履歴から、タスクを割り付けるソケットやコアを適切に選択することができる。また、例えばハードウェアモニタ情報を利用して、実行途中のその場でのタスクのメモリアクセス率等の情報を履歴管理し、それらの情報を使いこれから動作するタスクが、メモリアクセス率が高いタスクか否かを判断し、その情報に基づいてタスクを割り付けるソケットやコアを適切に選択することができる。また、本実施形態によれば、メモリアクセス率からソケットやコアに適切な負荷分散で割り付けられるため、各ソケットあたりの処理時間を短縮させることができる。
【0097】
以上、実施例について詳述したが、特定の実施例に限定されるものではなく、特許請求の範囲に記載された範囲内において、種々の変形及び変更が可能である。また、上述した各実施例の一部又は全部を組み合わせることも可能である。
【0098】
なお、以上の実施例に関し、更に以下の付記を開示する。
(付記1)
アプリケーションの実行により得られるハードウェアモニタ情報からタスク毎のメモリアクセス率を算出し、
算出した前記メモリアクセス率に基づき、前記アプリケーションからのタスク指示に対して、前記アプリケーションを実行するプログラムにおける前記タスクの構文単位で、プロセッサのソケット又はコアへの割り付けを行う、処理をコンピュータに実行させるためのタスク割り付けプログラム。
(付記2)
前記ハードウェアモニタ情報から得られる前記タスクに対するメモリアクセス率と、前記ソケットにすでに割り付けられているタスクのメモリアクセス率とに基づいて、前記タスクを割り付けるソケットを選択することを特徴とする付記1に記載のタスク割り付けプログラム。
(付記3)
前記メモリアクセス率が高いタスクは、メモリアクセス率が低いタスクが存在するソケットに割り付け、前記メモリアクセス率が低いタスクはメモリアクセス率が高いタスクが存在するソケットに割り付けることを特徴とする付記2に記載のタスク割り付けプログラム。
(付記4)
前記メモリアクセス率は、前記ハードウェアモニタ情報に含まれるメモリアクセス待ち時間又はキャッシュミス情報と、前記タスクの命令実行に要した経過時間とを用いて算出することを特徴とする付記1乃至3の何れか1項に記載のタスク割り付けプログラム。
(付記5)
前記タスクの親子関係の有無に応じて、前記ソケット又は前記コアに対する割り付けを行うことを特徴とする付記1乃至4の何れか1項に記載のタスク割り付けプログラム。
(付記6)
前記タスクに親子関係がある場合は、前記親子関係にある複数のタスクを同一ソケットに割り付け、前記タスクに親子関係がない場合は、各ソケットにおける前記メモリアクセス率が均等になるように、前記ソケットに割り付けることを特徴とする付記5に記載のタスク割り付けプログラム。
(付記7)
情報処理装置が、
アプリケーションの実行により得られるハードウェアモニタ情報からタスク毎のメモリアクセス率を算出し、
算出した前記メモリアクセス率に基づき、前記アプリケーションからのタスク指示に対して、前記アプリケーションを実行するプログラムにおける前記タスクの構文単位で、プロセッサのソケット又はコアへの割り付けを行うことを特徴とするタスク割り付け方法。
(付記8)
アプリケーションの実行により得られるハードウェアモニタ情報からタスク毎のメモリアクセス率を算出する算出手段と、
前記算出手段により算出した前記メモリアクセス率に基づき、前記アプリケーションからのタスク指示に対して、前記アプリケーションを実行するプログラムにおける前記タスクの構文単位で、プロセッサのソケット又はコアへの割り付けを行う割り付け手段とを有することを特徴とする情報処理装置。