(57)【要約】【課題】処理効率や処理性能の向上を図る。【解決手段】タスク割り付けプログラムにおいて、アプリケーションの実行により得られるハードウェアモニタ情報からタスク毎のメモリアクセス率を算出し、算出した前記メモリアクセス率に基づき、前記アプリケーションからのタスク指示に対して、前記アプリケーションを実行するプログラムにおける前記タスクの構文単位で、プロセッサのソケット又はコアへの割り付けを行う、処理をコンピュータに実行させる。【選択図】図４
2015106298.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションの実行により得られるハードウェアモニタ情報からタスク毎のメモリアクセス率を算出し、
算出した前記メモリアクセス率に基づき、前記アプリケーションからのタスク指示に対して、前記アプリケーションを実行するプログラムにおける前記タスクの構文単位で、プロセッサのソケット又はコアへの割り付けを行う、処理をコンピュータに実行させるためのタスク割り付けプログラム。
【請求項２】
前記ハードウェアモニタ情報から得られる前記タスクに対するメモリアクセス率と、前記ソケットにすでに割り付けられているタスクのメモリアクセス率とに基づいて、前記タスクを割り付けるソケットを選択することを特徴とする請求項１に記載のタスク割り付けプログラム。
【請求項３】
前記メモリアクセス率が高いタスクは、メモリアクセス率が低いタスクが存在するソケットに割り付け、前記メモリアクセス率が低いタスクはメモリアクセス率が高いタスクが存在するソケットに割り付けることを特徴とする請求項２に記載のタスク割り付けプログラム。
【請求項４】
前記タスクの親子関係の有無に応じて、前記ソケット又は前記コアに対する割り付けを行うことを特徴とする請求項１乃至３の何れか１項に記載のタスク割り付けプログラム。
【請求項５】
情報処理装置が、
アプリケーションの実行により得られるハードウェアモニタ情報からタスク毎のメモリアクセス率を算出し、
算出した前記メモリアクセス率に基づき、前記アプリケーションからのタスク指示に対して、前記アプリケーションを実行するプログラムにおける前記タスクの構文単位で、プロセッサのソケット又はコアへの割り付けを行うことを特徴とするタスク割り付け方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本願は、タスク割り付けプログラム及びタスク割り付け方法に関する。
【背景技術】
【０００２】
従来、プロセッサへのソケットやコアの割り付けは、各処理を実行するアプリケーションに対応するプログラムにおいて、最大でも構文のループ単位やサブルーチン単位でのみ指定が可能である。したがって、それ以上の（それより粒度の小さい）構文については、アプリケーション側で指定することができず、Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ（ＯＳ）のレベルで決められてしまうため、処理効率や処理性能の向上にも限界があった。
【０００３】
例えば、Ｈｉｇｈ  Ｐｅｒｆｏｒｍａｎｃｅ  Ｃｏｍｐｕｔｉｎｇ（ＨＰＣ）用プロセッサ等に用いられるスレッド並列アプリケーションの構文であるＯｐｅｎＭＰ（登録商標）には、タスクの概念が導入されている。ＯｐｅｎＭＰは、アプリケーション側で複数のソケットやコアを選択することが可能となっている。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００３−６１７５号公報
【特許文献２】特開２００８−８４００９号公報
【非特許文献】
【０００５】
【非特許文献１】Ｓｔｅｐｈｅｎ  Ｌ．Ｏｌｉｖｉｅｒ，Ａｌｌａｎ  Ｋ．Ｐｏｒｔｅｒｆｉｅｌｄ，Ｋｙｌｅ  Ｂ．Ｗｈｅｅｌｅｒ，  ａｎｄ  Ｊａｎ  Ｆ．Ｐｒｉｎｓ、"Ｓｃｈｅｄｕｌｉｎｇ  ｔａｓｋ  ｐａｒａｌｌｅｌｉｓｍ  ｏｎ  ｍｕｌｔｉ−ｓｏｃｋｅｔ  ｍｕｌｔｉｃｏｒｅ  ｓｙｓｔｅｍｓ．"、Ｉｎ  Ｐｒｏｃｅｅｄｉｎｇｓ  ｏｆ  ｔｈｅ  １ｓｔ  Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｗｏｒｋｓｈｏｐ  ｏｎ  Ｒｕｎｔｉｍｅ  ａｎｄ  Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍｓ  ｆｏｒ  Ｓｕｐｅｒｃｏｍｐｕｔｅｒｓ（ＲＯＳＳ  '１１）、２０１１．
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上述したように、タスクの概念が導入されたことで、アプリケーションプログラムでは、アプリケーション内部の情報を用いて構文それぞれのソケットやコアの割り付けを行うことができ、処理効率や処理性能の向上が可能となる。
【０００７】
しかしながら、従来の単純な先入れ先出し方式やラウンドロビン方式等のアルゴリズムの場合は、タスクそれぞれのメモリアクセスについての考慮がなされていない等の影響により、処理効率や処理性能の向上に限界があった。
【０００８】
１つの側面では、本発明は、処理効率や処理性能の向上を図ることを目的とする。
【課題を解決するための手段】
【０００９】
一態様におけるタスク割り付けプログラムは、アプリケーションの実行により得られるハードウェアモニタ情報からタスク毎のメモリアクセス率を算出し、算出した前記メモリアクセス率に基づき、前記アプリケーションからのタスク指示に対して、前記アプリケーションを実行するプログラムにおける前記タスクの構文単位で、プロセッサのソケット又はコアへの割り付けを行う、処理をコンピュータに実行させる。
【発明の効果】
【００１０】
処理効率や処理性能の向上を図ることができる。
【図面の簡単な説明】
【００１１】
【図１】情報処理装置の機能構成例を示す図である。
【図２】情報処理装置のハードウェア構成例を示す図である。
【図３】ＣＰＵの具体例を示す図である。
【図４】情報処理装置の処理の一例を示すフローチャートである。
【図５】本実施形態におけるタスク割り付け手法の具体例を示す図である。
【図６】タスクを実行するアプリケーション中に含まれる構文の一例を示す図である。
【図７】本実施形態におけるタスク割り付けの概略例を示す図である。
【図８】割り付け手段における処理の一例を示すフローチャートである。
【図９】メモリアクセス率に基づくソケットやコアへの割り付け例を示す図（その１）である。
【図１０】メモリアクセス率に基づくソケットやコアへの割り付け例を示す図（その２）である。
【図１１】第１実施例における割り付け例を示す図（その１）である。
【図１２】第１実施例における割り付け例を示す図（その２）である。
【図１３】第１実施例における割り付け例を示す図（その３）である。
【図１４】第２実施例における割り付け例を示す図（その１）である。
【図１５】第２実施例における割り付け例を示す図（その２）である。
【発明を実施するための形態】
【００１２】
以下、添付図面を参照しながら実施例について詳細に説明する。
【００１３】
＜情報処理装置の機能構成例＞
図１は、情報処理装置の機能構成例を示す図である。図１に示す情報処理装置１０は、例えば所定のアプリケーションに対応させて、プロセッサのソケットやコア等にタスクを割り付けて並列処理を実行する。図１の例に示す情報処理装置１０は、入力手段１１と、出力手段１２と、記憶手段１３と、割り付け手段１４と、処理実行手段１５と、プロファイル情報測定手段１６と、算出手段１７と、更新手段１８と、通信手段１９と、制御手段２０とを有する。
【００１４】
入力手段１１は、ユーザ等から各種指示の開始や終了、設定の入力等の各種入力を受け付ける。例えば、入力手段１１は、本実施形態におけるタスクのソケットやコアへの割り付け指示、処理実行指示、プロファイル情報測定指示、算出指示、更新指示、通信指示等の各指示を受け付ける。入力手段１１は、例えばキーボードやマウス等でもよく、また画面を用いたタッチパネル形式等でもよく、マイクロフォン等でもよいが、これに限定されるものではない。
【００１５】
出力手段１２は、入力手段１１により入力された内容や、入力内容に基づいて実行された内容等の出力を行う。例えば、出力手段１２は、画面表示により出力する場合には、ディスプレイやモニタ等の表示手段でもよく、また音声により出力する場合には、スピーカ等の音声出力手段でもよいが、これに限定されるものではない。
【００１６】
記憶手段１３は、本実施形態において必要となる各種情報を記憶する。例えば、記憶手段１３は、入力手段１１から得られる各指示情報や、各種アプリケーションに対応して設定された１又は複数のタスク、タスクのソケットやコアへの割り付け内容、ハードウェアモニタ情報、プロファイル情報等を記憶する。記憶手段１３に記憶される情報は、上述した情報に限定されるものではない。
【００１７】
記憶手段１３は、記憶された各種情報を必要に応じて所定のタイミングで読み出したり、書き込んだりする。記憶手段１３は、例えばハードディスクやメモリ等であるが、これに限定されるものではない。記憶手段１３は、通信手段１９を介してデータの送受信可能な状態で接続される記憶装置（ディスク装置）として設けられていてもよい。
【００１８】
割り付け手段１４は、過去のプロファイル情報からタスク別のメモリアクセス等の度合い（メモリアクセス率）を取得し、タスクを割り付けるソケットやコア等をタスク単位で割り付ける。なお、タスクとは、例えばＯｐｅｎＭＰを用いたアプリケーションプログラム（ソースコード）のｔａｓｋ（タスク）構文等で囲まれたブロック等である。したがって、タスク単位とは、例えばタスク構文単位に相当するが、これに限定されるものではない。
【００１９】
例えば、割り付け手段１４は、例えばメモリアクセス率に基づき、アプリケーションからのタスク指示に対して、アプリケーションを実行するプログラムにおけるタスクの構文単位で、プロセッサのソケット又はコアへの割り付けを行う。また、割り付け手段１４は、更新手段１８により更新されたプロファイル情報に基づいてタスク割り付けを行うこともできる。タスクの割り付けは、プロファイル情報が更新されるタイミング（例えば、ループ単位やサブルーチン単位の実行終了等）で行うことができるが、これに限定されるものではなく、例えばアプリケーション単位の実行タイミングでもよい。
【００２０】
処理実行手段１５は、割り付け手段１４によりプロセッサが有するコアやソケットに割り付けたタスクの処理（並列処理等）を実行する。処理実行手段１５は、例えばＯｐｅｎＭＰ  Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍ  Ｉｎｔｅｒｆａｃｅ（ＡＰＩ）  Ｖｅｒｓｉｏｎ３．０で規定されたタスク構文を用いてプログラミングされたアプリケーションに対応する実行可能ファイル等を実行することで、その内部のタスク処理を実行させる。
【００２１】
プロファイル情報測定手段１６は、処理実行手段１５による処理の実行により得られるハードウェアモニタ情報を用いてタスク別プロファイル情報を測定する。ハードウェアモニタ情報とは、例えばアプリケーション実行中におけるハードウェアの動作状況をモニタリングした情報である。ハードウェアモニタ情報は、タスク単位やループ単位、サブルーチン単位、アプリケーション単位等の情報を出力することができるが、これに限定されるものではない。
【００２２】
ハードウェアモニタ情報の測定情報としては、例えば「経過時間」、「Ｍｉｌｌｉｏｎ  Ｆｌｏａｔｉｎｇ−ｐｏｉｎｔ  Ｏｐｅｒａｔｉｏｎｓ  Ｐｅｒ  Ｓｅｃｏｎｄ（ＭＦＬＯＰＳ）」、「ＭＦＬＯＰＳピーク性能比」、「Ｍｉｌｌｉｏｎ  Ｉｎｓｔｒｕｃｔｉｏｎｓ  Ｐｅｒ  Ｓｅｃｏｎｄ（ＭＩＰＳ）」、「ＭＩＰＳピーク性能比」、「メモリアクセススループット（チップ単位）」、「メモリアクセススループットピーク性能比（チップ単位）」、「Ｓｉｎｇｌｅ  Ｉｎｓｔｒｕｃｔｉｏｎ  Ｍｕｌｔｉｐｌｅ  Ｄａｔａ（ＳＩＭＤ）命令率」等があるが、これに限定されるものではない。例えば、ハードウェアモニタ情報として、メモリアクセス待ち時間やキャッシュミス情報等を有していてもよい。
【００２３】
「経過時間」とは、例えば経過時間測定範囲におけるタスク等の命令実行に要した時間である。「ＭＦＬＯＰＳ」は、例えば浮動小数点演算実行効率（１秒間の平均浮動小数点演算実行数）である。「ＭＦＬＯＰＳピーク性能比」は、例えばＭＦＬＯＰＳの論理ピーク値に対する実測値の比率である。「ＭＩＰＳ」は、命令実行効率（１秒間の平均命令実行数）である。「ＭＩＰＳピーク性能比」は、例えばＭＩＰＳの論理ピーク値に対する実測値の比率である。
【００２４】
「メモリアクセススループット（チップ単位）」は、メモリ、Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ（ＣＰＵ）チップ間における１秒あたりの平均データ転送量である。また、「メモリアクセススループットピーク性能比（チップ単位）」は、メモリアクセススループット（チップ単位）の論理ピーク値に対する実測値の比率である。
【００２５】
また、「ＳＩＭＤ命令率」は、例えば命令実行数に占めるＳＩＭＤ命令数の割合である。ＳＩＭＤ命令とは、例えば１命令で複数のオペランドを処理する命令である。
【００２６】
なお、ハードウェアモニタ情報は、プログラムの実行性能を確認することができ、例えばＭＩＰＳ値及びＭＦＬＯＰＳ値がそれぞれのピーク値に近いほど、実行性能及び演算性能が高いプログラムであることを示す。
【００２７】
算出手段１７は、上述したハードウェアモニタ情報等から、タスクそれぞれのメモリアクセス率を算出する。算出手段１７における算出手法の具体例については、後述する。
【００２８】
更新手段１８は、算出手段１７により算出したメモリアクセス率等に基づいてタスク別プロファイル情報を更新する。これにより、割り付け手段１４は、実行途中のその場でのタスクのメモリアクセス率等の履歴からタスクを割り付けるソケットやコアを適切に割り付けることができる。
【００２９】
通信手段１９は、例えばインターネットやＬｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ（ＬＡＮ）等に代表される通信ネットワークを介して外部装置と各種情報の送受信を行う。通信手段１９は、外部装置等にすでに記憶されている各種情報等を受信することができ、また情報処理装置１０で処理された結果を、通信ネットワーク等を介して外部装置等に送信することもできる。
【００３０】
制御手段２０は、情報処理装置１０の各構成全体の制御を行う。具体的には、制御手段２０は、例えばユーザ等による入力手段１１からの指示等に基づいて、タスク割り付け処理に関する各制御を行う。ここで、各制御とは、例えば上述した割り付け手段１４によりタスクにソケットやコアを割り付ける、処理実行手段１５によりタスク処理等を実行させる、プロファイル情報測定手段１６によりプロファイル情報を測定させる、算出手段１７によりメモリアクセス率を算出させる、更新手段１８によりタスク別プロファイル情報を更新させる等があるが、これらに限定されるものではない。なお、上述した割り付け手段１４、処理実行手段１５、プロファイル情報測定手段１６、算出手段１７、及び更新手段１８における各処理は、例えば予め設定された少なくとも１つのアプリケーション（プログラム）を実行することで実現することができる。
【００３１】
本実施形態では、上述した情報処理装置１０により、例えばタスクの割り付けにおいて、実行時のプロファイル情報を使って、タスクの割り付け先をリアルタイムに制御することができる。したがって、ＨＰＣ用プロセッサ等を用いた並列処理において、処理効率や処理性能の向上を図ることができる。
【００３２】
情報処理装置１０は、例えばＰｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ（ＰＣ）やサーバ等からなるが、これに限定されるものではなく、ＨＰＣ用プロセッサ等のマルチプロセッサを有する計算機等に適用することができる。
【００３３】
＜情報処理装置１０のハードウェア構成例＞
図２は、情報処理装置のハードウェア構成例を示す図である。図２に示す情報処理装置１０は、入力装置３１と、出力装置３２と、ドライブ装置３３と、補助記憶装置３４と、主記憶装置３５と、各種制御を行うＣＰＵ３６と、ネットワーク接続装置３７とを有し、これらはシステムバスＢで相互に接続されている。
【００３４】
入力装置３１は、ユーザ等が操作するキーボード及びマウス等のポインティングデバイスや、マイクロフォン等の音声入力デバイスを有しており、ユーザ等からのプログラムの実行指示、各種操作情報、ソフトウェア等を起動するための情報等の入力を受け付ける。
【００３５】
出力装置３２は、本実施形態における処理を行うためのコンピュータ本体（情報処理装置１０）を操作するのに必要な各種ウィンドウやデータ等を表示するディスプレイ等を有する。出力装置３２は、ＣＰＵ３６が有する制御プログラムによりプログラムの実行経過や結果等を表示することができる。
【００３６】
ここで、本実施形態において、例えばコンピュータ本体にインストールされる実行プログラムは、記録媒体３８等により提供される。記録媒体３８は、ドライブ装置３３にセット可能である。ＣＰＵ３６からの制御信号に基づき、記録媒体３８に格納された実行プログラムが、記録媒体３８からドライブ装置３３を介して補助記憶装置３４にインストールされる。
【００３７】
補助記憶装置３４は、例えばＨａｒｄ  Ｄｉｓｋ  Ｄｒｉｖｅ（ＨＤＤ）やＳｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ（ＳＳＤ）等のストレージ手段等である。補助記憶装置３４は、ＣＰＵ３６からの制御信号に基づき、本実施形態における実行プログラム（タスク割り付けプログラム）や、コンピュータに設けられた制御プログラム等を記憶し、必要に応じて入出力を行う。補助記憶装置３４は、ＣＰＵ３６からの制御信号等に基づいて、記憶された各情報から必要な情報を読み出したり、書き込むことができる。
【００３８】
主記憶装置３５は、ＣＰＵ３６により補助記憶装置３４から読み出された実行プログラム等を格納する。主記憶装置３５は、Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ（ＲＯＭ）やＲａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ（ＲＡＭ）等である。
【００３９】
ＣＰＵ３６は、ＯＳ等の制御プログラム、及び主記憶装置３５に格納されている実行プログラムに基づいて、各種演算や各ハードウェア構成部とのデータの入出力等、コンピュータ全体の処理を制御して各処理を実現する。プログラムの実行中に必要な各種情報等は、補助記憶装置３４から取得することができ、また実行結果等を格納することもできる。また、ＣＰＵ３６は、マルチプロセッサを有しており、アプリケーション等によるタスク指示を用いて、タスク構文単位でプロセッサへのソケットやコアを指定して並列処理を実行する。
【００４０】
具体的には、ＣＰＵ３６は、例えば入力装置３１から得られるプログラムの実行指示等に基づき、補助記憶装置３４にインストールされたプログラムを実行させることにより、主記憶装置３５上でプログラムに対応する処理を行う。例えば、ＣＰＵ３６は、タスク割り付けプログラムを実行させることで、上述した割り付け手段１４によるソケット又はコアの割り付け、処理実行手段１５による処理の実行、プロファイル情報測定手段１６によるプロファイル情報の測定、算出手段１７によるメモリアクセス率の算出、更新手段１８によるプロファイル情報の更新等の処理を行う。なお、ＣＰＵ３６における処理内容は、これに限定されるものではない。ＣＰＵ３６により実行された内容は、必要に応じて補助記憶装置３４に記憶される。
【００４１】
ネットワーク接続装置３７は、上述した通信ネットワークを介して、他の外部装置との通信を行う。ネットワーク接続装置３７は、ＣＰＵ３６からの制御信号に基づき、通信ネットワーク等と接続することにより、実行プログラムやソフトウェア、設定情報等を外部装置等から取得する。また、ネットワーク接続装置３７は、プログラムを実行することで得られた実行結果を外部装置に提供したり、本実施形態における実行プログラム自体を外部装置等に提供してもよい。
【００４２】
記録媒体３８は、上述したように実行プログラム等が格納されたコンピュータで読み取り可能な記録媒体である。記録媒体３８は、例えばフラッシュメモリ等の半導体メモリやＣＤ−ＲＯＭ、ＤＶＤ等の可搬型の記録媒体であるが、これに限定されるものではない。
【００４３】
図２に示すハードウェア構成に実行プログラム（例えば、タスク割り付けプログラム等）をインストールすることで、ハードウェア資源とソフトウェアとが協働して本実施形態におけるタスク割り付け処理等を実現することができる。
【００４４】
＜本実施形態におけるＣＰＵ３６の具体例＞
次に、本実施形態におけるＣＰＵ３６の具体例について説明する。図３は、ＣＰＵの具体例を示す図である。図３の例に示すＣＰＵ３６は、マルチコアのプロセッサであり、１つのプロセッサ・パッケージ内に複数のコアを有する。例えば、ＣＰＵ３６は、メモリ４１と、１又は複数のソケット４２（図３の例では、２つのソケット＃１，＃２）とを有する。また、各ソケット４２は、１又は複数のコア４３（図３の例では、４つのコア＃０〜＃３）を含むパッケージである。ソケット数やコア数については、図３の例に限定されるものではない。ＣＰＵ３６は、図３に示すようなマルチコアプロセッサによる並列処理によって性能を向上させる。
【００４５】
メモリ４１は、マイクロプロセッサの内部に設けられた高速な記憶装置（例えば、１次キャッシュ）である。メモリ４１に使用頻度の高いデータを蓄積しておくことで、低速なメインメモリへのアクセスを減らすことができ、処理を高速化することができる。例えば、ＣＰＵ３６は、２段階のキャッシュメモリを搭載している場合、最初にデータを読みに行くのが、より高速でより容量の小さい１次キャッシュであり、１次キャッシュにデータがなかった場合は、より低速でより容量の大きな２次キャッシュに読みに行く。なお、メモリ４１の１次キャッシュ及び２次キャッシュは、上述した主記憶装置３５及び補助記憶装置３４としてもよい。
【００４６】
ソケット４２は、複数のコア４３を格納する領域である。例えば親子関係にあるタスクの場合には、メモリ等のローカリティ（局所性）を保つため、同一ソケットにそれらのタスクを配置する。これにより、アクセスが１ソケット内に閉じることになるため、処理効率や処理性能が向上する。
【００４７】
コア４３は、コンピュータの演算処理を行う部分である。本実施形態では、例えば１つのコア４３に１つのタスクが構文単位で割り付けられる。
【００４８】
＜情報処理装置１０における処理の一例＞
次に、本実施形態における情報処理装置１０における処理（タスク割り付け処理）の一例について、フローチャートを用いて説明する。図４は、情報処理装置の処理の一例を示すフローチャートである。
【００４９】
図４の例において、情報処理装置１０の割り付け手段１４は、アプリケーションプログラムのタスク指示により実行するタスクのコアへの割り付けを行う（Ｓ０１）。Ｓ０１の処理において、割り付け手段１４は、過去のタスク別プロファイル情報を用いてタスク毎のメモリアクセス等の度合いを取得し、その結果から各タスクを構文単位でコアへの割り付けを行う。なお、Ｓ０１の処理では、例えば図３に示すように複数のソケットがある場合には、どのソケットを用いるかについての割り付けを行ってもよい。
【００５０】
次に、情報処理装置１０の処理実行手段１５は、コアに割り付けたタスクの処理を実行する（Ｓ０２）。情報処理装置１０のプロファイル情報測定手段１６は、実行中におけるハードウェアモニタ情報を取得し（Ｓ０３）、取得したハードウェアモニタ情報よりタスク毎のメモリアクセス率を算出する（Ｓ０４）。
【００５１】
次に、情報処理装置１０の更新手段１８は、Ｓ０４の処理により算出されたタスク毎のメモリアクセス率に基づき、タスク別プロファイル情報を更新する（Ｓ０５）。
【００５２】
次に、情報処理装置１０は、例えばアプリケーションに含まれる全てのタスクの処理が終了したか否かを判断し（Ｓ０６）、全てのタスクの処理が終了していない場合（Ｓ０６において、ＮＯ）、Ｓ０１の処理に戻る。この場合、Ｓ０１の処理では、Ｓ０６の処理で更新されたタスク別プロファイル情報を用いて各タスクのコアへの割り付けを行う。また、情報処理装置１０は、全てのタスクの処理が終了した場合（Ｓ０６において、ＹＥＳ）、処理を終了する。
【００５３】
＜本実施形態におけるタスク割り付けについて＞
ここで、本実施形態におけるタスク割り付けの具体例について説明する。図５は、本実施形態におけるタスク割り付け手法の具体例を示す図である。図５の例において、図３に示すようなマルチコアプロセッサの一例であるＣＰＵ３６は、所定のアプリケーションに対応する実行可能ファイルを実行する。ここで、ＣＰＵ３６は、タスクの構文単位でのコアへの割り付けを行う場合に、タスク別プロファイル情報を取得する。
【００５４】
図５の例に示すタスク別プロファイル情報の項目としては、例えば「タスク」、「レベル」、「メモリアクセス率」等があるが、これに限定されるものではない。「タスク」とは、タスクを識別するための情報である。「レベル」とは、タスクの階層（例えば、親子関係等）を示す情報である。例えば、図５の例において、タスクＡは、レベル０、１、２の３階層であることを示している。また、「メモリアクセス率」とは、タスク及びレベル毎のメモリアクセス率である。
【００５５】
また、ＣＰＵ３６は、ランタイムライブラリ等に含まれるコンピュータプログラムの実行時に必要となるソフトウェア部品（モジュール）等を用いて、実行中のタスクのソケットやコアへの割り付け状況を取得する。タスク割り付け状況の項目としては、例えば「ソケット」、「コア」、「タスク識別」、「レベル」、「メモリアクセス率」等があるが、これに限定されるものではない。「ソケット」とは、ＣＰＵ３６中のソケットを識別するための情報である。「コア」は、ソケット毎のコアを識別するための情報である。図５の例では、１つのソケット＃０に４つのコア＃０〜＃３を有していることを示している。「タスク」は、各ソケットの各コアに割り付けられたタスクの情報である。「レベル」は、タスクに対する階層を示す図である。「メモリアクセス率」は、取得したタスクの割り付け状況から、算出手段１７によりタスクそれぞれのメモリアクセス率を算出した結果を示している。
【００５６】
ＣＰＵ３６は、算出したメモリアクセス率を用いて、構文単位でソケットやコアを新たに割り付ける。なお、構文単位とは、例えばタスク構文単位であるが、これに限定されるものではなく、アプリケーション単位やスレッド（並列する処理）単位でもよいが、これに限定されるものではない。
【００５７】
このように、本実施形態では、アプリケーション側で、実際のメモリアクセス率を算出し、算出したメモリアクセス率に基づいて、次回のソケット及びコアの割り付けを、タスク指示を通じて行うことができる。
【００５８】
＜タスク構文について＞
次に、本実施形態におけるタスク構文について説明する。例えば、従来手法におけるタスクの実行では、図３に示すようなプロセッサ（ＣＰＵ３６）の構成において、ＯＳレベル単純な先入れ先出し方式やラウンドロビン方式等により適当なソケットにタスクを割り付けて実行していた。そのため、従来手法では、処理効率や処理性能の向上にも限界があった。そこで、本実施形態では、ＯｐｅｎＭＰのタスクを構文のネスト（入れ子）レベルまで分けてコアに割り付ける。したがって、例えばＯｐｅｎＭＰのタスクのネストレベル別の動作特定を用いた割り付け制御を行うことができる。
【００５９】
ここで、図６は、タスクを実行するアプリケーション中に含まれる構文の一例を示す図である。また、図７は、本実施形態におけるタスク割り付けの概略例を示す図である。
【００６０】
図６の例では、ＯｐｅｎＭＰ  ＡＰＩ  Ｖｅｒｓｉｏｎ３．０に対応する構文例を示している。図６の例に示すようなプログラムによりタスクを実行するアプリケーションを動作させた場合、従来ではｔａｓｋ（タスク）構文内のｔｒａｖｅｒｓｅ内のメモリアクセス率がわからない。そのため、どのソケットに割り付けられるかはｔｒａｖｅｒｓｅ内の命令に関係なくコアを先頭から詰めて割り付けるか、又は、ラウンドロビン的に割り付けられていた。
【００６１】
例えば、図７（Ａ）に示すような５つのタスクＡ〜Ｅがあった場合、タスクＡ〜Ｅの従来の割り付けでは、例えば図７（Ｂ）の（ａ）に示すようにソケット＃０からコアの先頭（コア＃０）を詰めて割り付けていた。また、別の従来方式として、図７（Ｂ）の（ｂ）に示すように負荷を均等にするためにラウンドロビン的に割り付けていた。そのため、適切なソケットへの割り付けが行われずにいた。
【００６２】
そこで、本実施形態では、タスクＡ〜Ｅに対し、ハードウェアモニタ情報を利用して、実行途中のその場でのタスクのメモリアクセス率等の情報を履歴管理して、図７（Ａ）に示すようなタスク別プロファイル情報を測定する。次に、このタスク別プロファイル情報を用いて、これから動作させるタスクが、メモリアクセス率が高いタスクかどうか判断し、その情報に基づいて、図７（Ｂ）の（ｃ）に示すように、タスク毎にソケットやコアへの割り付けを行う。これにより、プロセッサの処理効率や処理性能の向上を図ることができる。
【００６３】
＜コアの割り付け例＞
次に、上述した割り付け手段１４におけるコアの割り付け例について、図を用いて説明する。図８は、割り付け手段における処理の一例を示すフローチャートである。図８の例において、割り付け手段１４は、まず過去のタスク別プロファイル情報があるか否かを判断する（Ｓ１１）。なお、過去のタスク別プロファイル情報は、例えば同一のプログラム（タスク群）において実行されたアプリケーションに対するハードウェアモニタ情報から得られるタスク別プロファイル情報等であることが好ましいが、これに限定されるものではない。
【００６４】
割り付け手段１４は、Ｓ１１の処理において、過去のタスク別プロファイル情報がある場合（Ｓ１１において、ＹＥＳ）、その過去のプロファイル情報によるタスクのメモリアクセス等の度合い（例えば、メモリアクセス率等）を取得する（Ｓ１２）。次に、割り付け手段１４は、適正制御によりタスクを割り付けるコアを選択する（Ｓ１３）。適正制御とは、例えばメモリアクセス率が高いタスクは、メモリアクセス率が低いタスクが存在するソケットのコアに割り付け、またメモリアクセス率が低いタスクは、メモリアクセスが高いタスクが存在するソケットのコアに割り付ける等である。つまり、各ソケットにおけるメモリアクセスの度合いを均等になるように割り付けを行う。なお、適正制御については、これに限定されるものではなく、例えば親子関係にあるタスクは、同一のソケットに割り付ける等の処理を行ってもよい。
【００６５】
また、割り付け手段１４は、過去のタスク別プロファイル情報がない場合（Ｓ１１において、ＮＯ）、例えばコアの先頭から詰めて割り付けたり、負荷を均等にするためにラウンドロビン的に割り付ける等の従来方式でタスクを割り付けるコアを選択する（Ｓ１４）。
【００６６】
＜メモリアクセス率に基づくソケットやコアへの割り付け例＞
次に、本実施形態におけるメモリアクセス率に基づくソケットやコアへの割り付け例について、図を用いて説明する。図９、図１０は、メモリアクセス率に基づくソケットやコアへの割り付け例を示す図（その１、その２）である。なお、図９の例では、実行するタスクが親子関係にある場合を示し、図１０の例では、実行するタスクが親子関係にない場合を示している。タスクの親子関係とは、例えば親（レベル０）のタスクの実行結果を子（レベル１）のタスクで入力データとして利用する場合等であるが、これに限定されるものではない。
【００６７】
図９（Ａ）は、２スレッド並列プログラム（レベル：２段階）で実行されるタスクの内容と処理実行後のハードウェアモニタ情報の一例を示している。図９（Ｂ）は、図９（Ａ）のハードウェアモニタ情報を用いて測定したタスク別プロファイル情報の一例を示している。図９（Ｃ）は、図９（Ｂ）のタスク別プロファイル情報に対応させてＣＰＵ３６のソケット及びコアにタスクを割り付けた例を示している。図９（Ｄ）は、タスク割り付け状況の一例を示している。
【００６８】
図９（Ａ）に示す２スレッド並列プログラムの項目としては、例えば「タスク名（レベル）」、「スレッド数」、「経過時間（秒）」、「メモリアクセス待ち（秒）」、「タスク種別」等があるが、これに限定されるものではない。図９（Ａ）における「タスク種別」は、例えばタスクを区別するために、「タスク名＋レベル＋スレッド数」で名前を付けているが、これに限定されるものではない。
【００６９】
図９の例において、実行するタスク（ｔａｓｋ＿Ａ）は、親子関係（レベル０、レベル１）にある。このような場合にタスクの割り付け先コアを選択する際には、キャッシュ（メモリ４１）のローカリティ（局所性）を保つため、同一ソケットに配置する。したがって、図９（Ｂ）に示すように、ソケット＃０のコア＃０〜＃３に対して、それぞれタスクＡ００、Ａ０１、Ａ１０、Ａ１１が割り付けられる。
【００７０】
なお、図９（Ｂ）に示すメモリアクセス率は、図９（Ａ）に示すメモリアクセス待ち時間及び経過時間を用いて、「メモリアクセス率（％）＝メモリアクセス待ち（秒）／経過時間（秒）×１００」として取得することができるが、これに限定されるものではない。
【００７１】
一方、図１０の例において、図１０（Ａ）は、２スレッド並列プログラム（レベル：１段階）で実行されるタスクの内容と処理実行後のハードウェアモニタ情報の一例を示している。図１０（Ｂ）は、図１０（Ａ）のハードウェアモニタ情報を用いて測定したタスク別プロファイル情報の一例を示している。図１０（Ｃ）は、図１０（Ｂ）のタスク別プロファイル情報に対応させてＣＰＵ３６のソケット及びコアにタスクを割り付けた例を示している。図１０（Ｄ）は、タスク割り付け状況の一例を示している。
【００７２】
図１０の例において、実行タスク（ｔａｓｋ＿Ｂ，ｔａｓｋ＿Ｃ）は、親子関係にないタスクである。このような場合でタスクの適切な割り付け先コアの決定する際には、メモリアクセス率とタスク割り付け状況により、各ソケットのメモリアクセス率が均等になるように割り付けを行う。例えば、割り付け手段１４は、メモリアクセス率が高いタスクは、メモリアクセス率が低いタスクが存在するソケットに割り付け、メモリアクセス率が低いタスクはメモリアクセス率が高いタスクが存在するソケットに割り付ける。
【００７３】
図１０の例に示す割り付けでは、ソケット＃０にタスクＢ００、Ｃ０１、Ｃ０１が割り付けられているため、タスク別プロファイル情報からソケット＃０のメモリアクセス率は、２０＋２０＋５＝４５％となる。また、ソケット＃１にタスクＢ０１が割り付けられているため、タスク別プロファイル情報からソケット＃０のメモリアクセス率は、５０％となる。
【００７４】
上述した割り付けを行う場合には、例えばソケット内に割り付けられたタスクのメモリアクセス率の合計が所定値（例えば、８０％〜１００％等）を超えないように調整を行うことが好ましいが、これに限定されるものではない。
【００７５】
このように、本実施形態では、実行する複数のタスクが親子関係にあるか否かに応じて、図９，図１０に示すように、タスクのソケットやコアへの割り付けを変えることできる。これにより、処理効率や処理性能の向上を図ることができる。
【００７６】
＜タスク処理の開始から終了までの処理内容について＞
次に、プロファイル情報測定手段１６におけるタスク処理の開始から終了までの処理内容について説明する。まず割り付け手段１４は、上述したコア選択処理における適正制御により、タスクを予め設定されたソケットやコアに割り付ける。処理実行手段１５は、割り付け手段１４によりタスク単位でコアに割り付けられたタスク処理を開始（実行）する。このとき、プロファイル情報測定手段１６は、タスク別プロファイル情報を更新するために、ハードウェアモニタ情報を使用したタスクのプロファイル情報の測定も開始する。なお、タスクの初回実行では、タスク別プロファイル情報が存在しないため、例えば従来方式（例えば、単純な先入れ先出し方式やラウンドロビン方式等）でのコアの割り付けを行う。どの従来方式を用いるかについては、例えば予めユーザ等により設定しておくことができる。
【００７７】
また、処理実行中は、ループ単位、サブルーチン単位等の所定のタスク構文の終了毎又は所定の時間間隔毎に、プロファイル情報等の更新を行ってもよい。また、タスク処理の終了時には、プロファイル情報の測定も終了する。
【００７８】
＜更新手段１８における処理について＞
次に、更新手段１８における処理について説明する。更新手段１８は、上述したプロファイル情報測定の結果を用いてタスク別プロファイル情報を更新する。例えば、本実施形態では、プログラム実行中にタスクの構文単位でソケットやコアへの割り付けを制御することができる。
【００７９】
例えば、１つのアプリケーションプログラムでは、ループ処理やサブルーチン処理等により同じ関数（タスク）が何度も実行される。そのため、本実施形態では、常時プロファイラでタスク別プロファイラ情報を取得することで、次回のタスク処理におけるソケットやコアへの割り付けを適切に行う。例えば、タスクは、プログラムの振る舞い(例えば、ｉｆ文等の条件分岐)等により、同じタスクでも実行する度に処理内容が異なり、負荷も異なる。しかしながら、本実施形態のように、常時プロファイラでタスク別プロファイラ情報を取得して次回のタスクの割り付けの予測材料とすることで、負荷が異なる場合にも対応することができる。また、本実施形態では、タスクの実行において、ハードウェアモニタ情報を利用してタスクを適切なソケットやコアへ割り付けることで、タスク実行の負荷が軽減されてタスクの性能を向上することができる。
【００８０】
＜次回のタスクの割り付け例＞
次に、次回のタスクのソケットやコアへの割り付け例（各実施例）について、図を用いて説明する。
【００８１】
＜第１実施例＞
図１１〜図１３は、第１実施例における割り付け例を示す図（その１〜その３）である。図１１（Ａ）の例では、タスク割り付けＮ−１回目のタスクの内容と処理実行後のハードウェアモニタ情報の一例を示している。また、図１１（Ｂ）の例では、タスク割り付けＮ回目のタスクの内容と処理実行後のハードウェアモニタ情報の一例を示している。
【００８２】
第１実施例では、２スレッド並列プログラム(レベル：1階層)でタスクに親子関係がない場合であって、ソケットやコアを占有して実行する（タスク割り付け時に常にコアが未使用状態）場合の例を示している。
【００８３】
第１実施例では、図１２（Ａ）の例に示すように、各ソケットのタスクの割り付けＮ回目の直前のメモリアクセス率の合計がソケット＃０＝０％（未使用）、ソケット＃１＝０％（未使用）であるとする。
【００８４】
ここで、タスクＢ００、Ｂ０１、Ｃ００、Ｃ０１を含むプログラム（アプリケーション）を実行する場合、各タスクをコアに割り付ける。そのため、割り付け手段１４は、図１１（Ａ）に示す過去のハードウェアモニタ情報から取得した過去のタスク別プロファイル情報（例えば、１〜Ｎ−１回目までの統計履歴又はＮ−１回目のみの履歴情報）（図１２（Ｂ））を参照して、メモリアクセス率を取得する。また、割り付け手段１４は、取得したメモリアクセス率に基づいて、図１２（Ｃ）に示すようにタスクの割り付けを行う。図１２（Ｃ）の例では、ソケット毎にメモリアクセス率が均等になるように割り付けが行われ、各ソケットのメモリアクセス率の合計がソケット＃０が４５％となり、ソケット＃１が５０％となる。したがって、図１３（Ａ）に示すタスクのソケットやコアへの割り付けにより処理が実行される。なお、第１実施例では、図１１（Ｂ）に示すように処理実行中のハードウェアモニタ情報を取得し、取得したハードウェアモニタ情報を用いて、タスク別プロファイル情報を更新する。
【００８５】
次に、第１実施例において、図１２（Ｄ）の例に示すように、各ソケットのタスクの割り付けＮ＋１回目の直前のメモリアクセス率の合計がソケット＃０＝０％（未使用）、ソケット＃１＝０％（未使用）であるとする。
【００８６】
ここで、タスクＢ００、Ｂ０１、Ｃ００、Ｃ０１を含むプログラムを実行する場合、割り付け手段１４は、図１２（Ｅ）に示す更新したタスク別プロファイル情報（例えば、１〜Ｎ回目までの統計履歴又はＮ回目のみの履歴情報）を参照して、メモリアクセス率を取得する。また、割り付け手段１４は、取得したメモリアクセス率に基づいて、図１２（Ｆ）に示すようにタスクの割り付けを行う。図１２（Ｆ）の例では、ソケット毎にメモリアクセス率が均等になるように割り付けが行われ、各ソケットのメモリアクセス率の合計がソケット＃０が７０％となり、ソケット＃１が６０％となる。したがって、図１３（Ｂ）に示すタスクのソケットやコアへの割り付けにより処理が実行される。また、第１実施例では、処理実行中のハードウェアモニタ情報を用いて、タスク別プロファイル情報を更新する。そのため、Ｎ＋２回目以降のタスクの割り付けにおいても同様に更新されたタスク別プロファイル情報を用いてタスク構文単位でソケットやコアを指定することができる。
【００８７】
＜第２実施例＞
図１４、図１５は、第２実施例における割り付け例を示す図（その１、その２）である。第２実施例において、２スレッド並列プログラム(レベル：1階層)の場合で、タスクに親子関係なしの場合を示している点では、上述した第１実施例と同様である。更に、第２実施例では、ソケットやコアを他のアプリケーションプログラムと共有して実行する（例えば、タスク割り付け時に常に他のプログラムが任意のコアに割り付いている）場合を示している。なお、第２実施例でも、第１実施例と同様に、上述した図１１に示したタスクの内容と処理実行後のハードウェアモニタ情報の一例を用いることとする。
【００８８】
第２実施例において、図１４（Ａ）に示すように、コアの一部に実行対象のタスク以外のタスクＸ、Ｙ、Ｚが存在する。そのため、タスク割り付けＮ回目の直前のメモリアクセス率の合計では、ソケット＃０＝４０％、ソケット＃１＝４０％となる。
【００８９】
ここで、タスクＢ００、Ｂ０１、Ｃ００、Ｃ０１を含むプログラム（アプリケーション）を実行する場合、各タスクをコアに割り付けるため、割り付け手段１４は、図１４（Ｂ）に示す過去のタスク別プロファイル情報（例えば、１〜Ｎ−１回目までの統計履歴）を参照して、メモリアクセス率を取得する。また、割り付け手段１４は、取得したメモリアクセス率に基づいて、図１４（Ｃ）に示すようにタスクの割り付けを行う。図１４（Ｃ）の例では、ソケット毎にメモリアクセス率が均等になるように割り付けが行われる。なお、図１４（Ｃ）の例では、ソケット＃０にタスクＸ、Ｂ００、Ｃ００、Ｙが割り付けられているため、ソケット＃０内の全てのコア＃０〜＃３を使用しているため、タスクＣ０１がソケット＃１に割り付けられる。したがって、最終的には、各ソケットのメモリアクセス率の合計がソケット＃０が８５％となり、ソケット＃１が９５％となる。
【００９０】
したがって、図１５（Ａ）に示すタスクのソケットやコアへの割り付けにより処理が実行される。なお、第２実施例では、処理実行中のハードウェアモニタ情報を取得し、取得したハードウェアモニタ情報を用いて、タスク別プロファイル情報を更新する。
【００９１】
次に、第２実施例において、Ｎ＋１回目の割り付けを行う場合、図１４（Ｄ）に示すように、コアの一部に実行対象のタスク以外のタスクＵ、Ｖ、Ｗが存在する。そのため、タスク割り付けＮ＋１回目の直前のメモリアクセス率の合計では、ソケット＃０＝２０％、ソケット＃１＝１５％となる。
【００９２】
ここで、タスクＢ００、Ｂ０１、Ｃ００、Ｃ０１を含むプログラムを実行する場合、割り付け手段１４は、図１４（Ｅ）に示す更新したタスク別プロファイル情報（例えば、１〜Ｎ回目までの統計履歴）を参照して、メモリアクセス率を取得する。また、割り付け手段１４は、取得したメモリアクセス率に基づいて、図１４（Ｆ）に示すようにタスクの割り付けを行う。図１４（Ｆ）の例では、ソケット毎にメモリアクセス率が均等になるように割り付けが行われ、各ソケットのメモリアクセス率の合計がソケット＃０が８０％となり、ソケット＃１が８５％となる。したがって、図１５（Ｂ）に示すタスクのソケットやコアへの割り付けにより処理が実行される。また、第２実施例では、処理実行中のハードウェアモニタ情報を用いて、タスク別プロファイル情報を更新する。そのため、Ｎ＋２回目以降のタスクの割り付けにおいても同様に更新されたタスク別プロファイル情報を用いてタスク構文単位でソケットやコアを指定することができる。
【００９３】
このように本実施形態では、次の割り付けについてもリアルタイムにフィードバック制御することができ、タスク別プロファイル情報を用いて適切な対応を取ることができる。
【００９４】
なお、上述した実施形態では、ハードウェアモニタ情報のメモリアクセス待ち時間と経過時間とを用いてメモリアクセス率を算出したが、これに限定されるものではなく、例えばキャッシュミス率と経過時間とに基づいてメモリアクセス率を算出してもよい。キャッシュミス情報は、ハードウェアモニタ情報から収集することができる。キャッシュミス情報とは、ＣＰＵ３６がキャッシュメモリ（メモリ４１）を検索してもデータが存在しない場合のことである。キャッシュミスの場合は、（必要なデータが近距離にある）キャッシュメモリ上には存在せず、必要なデータが遠距離にあるメインメモリ上に存在するため、データへのアクセスに時間がかかる。このアクセスに要する時間がメモリアクセス待ち時間である。したがって、キャッシュミスが多い場合は、メモリアクセス待ち時間も増えるため、上述したメモリアクセス待ち時間ではなく、キャッシュミス率を用いてメモリアクセス率を算出することができる。したがって、本実施形態では、メモリアクセスが多く、タスクのキャッシュミス等が極端に大きい場合又は小さい場合に、タスク実行の割り付け先ソケットやコアを変更することで、タスク実行の効率を大幅に向上することができる。
【００９５】
上述したように本実施形態によれば、アプリケーション側で実際のメモリアクセス率に基づいてソケット及びコアの指定を、タスク指示を通じて構文単位で行うことができる。そのため、処理効率や処理性能の向上を図ることができる。
【００９６】
また、本実施形態によれば、例えばＯｐｅｎＭＰ等のタスク構文を持つアプリケーションを実行し、実行途中のその場でのタスクのメモリアクセス率等の履歴から、タスクを割り付けるソケットやコアを適切に選択することができる。また、例えばハードウェアモニタ情報を利用して、実行途中のその場でのタスクのメモリアクセス率等の情報を履歴管理し、それらの情報を使いこれから動作するタスクが、メモリアクセス率が高いタスクか否かを判断し、その情報に基づいてタスクを割り付けるソケットやコアを適切に選択することができる。また、本実施形態によれば、メモリアクセス率からソケットやコアに適切な負荷分散で割り付けられるため、各ソケットあたりの処理時間を短縮させることができる。
【００９７】
以上、実施例について詳述したが、特定の実施例に限定されるものではなく、特許請求の範囲に記載された範囲内において、種々の変形及び変更が可能である。また、上述した各実施例の一部又は全部を組み合わせることも可能である。
【００９８】
なお、以上の実施例に関し、更に以下の付記を開示する。
（付記１）
アプリケーションの実行により得られるハードウェアモニタ情報からタスク毎のメモリアクセス率を算出し、
算出した前記メモリアクセス率に基づき、前記アプリケーションからのタスク指示に対して、前記アプリケーションを実行するプログラムにおける前記タスクの構文単位で、プロセッサのソケット又はコアへの割り付けを行う、処理をコンピュータに実行させるためのタスク割り付けプログラム。
（付記２）
前記ハードウェアモニタ情報から得られる前記タスクに対するメモリアクセス率と、前記ソケットにすでに割り付けられているタスクのメモリアクセス率とに基づいて、前記タスクを割り付けるソケットを選択することを特徴とする付記１に記載のタスク割り付けプログラム。
（付記３）
前記メモリアクセス率が高いタスクは、メモリアクセス率が低いタスクが存在するソケットに割り付け、前記メモリアクセス率が低いタスクはメモリアクセス率が高いタスクが存在するソケットに割り付けることを特徴とする付記２に記載のタスク割り付けプログラム。
（付記４）
前記メモリアクセス率は、前記ハードウェアモニタ情報に含まれるメモリアクセス待ち時間又はキャッシュミス情報と、前記タスクの命令実行に要した経過時間とを用いて算出することを特徴とする付記１乃至３の何れか１項に記載のタスク割り付けプログラム。
（付記５）
前記タスクの親子関係の有無に応じて、前記ソケット又は前記コアに対する割り付けを行うことを特徴とする付記１乃至４の何れか１項に記載のタスク割り付けプログラム。
（付記６）
前記タスクに親子関係がある場合は、前記親子関係にある複数のタスクを同一ソケットに割り付け、前記タスクに親子関係がない場合は、各ソケットにおける前記メモリアクセス率が均等になるように、前記ソケットに割り付けることを特徴とする付記５に記載のタスク割り付けプログラム。
（付記７）
情報処理装置が、
アプリケーションの実行により得られるハードウェアモニタ情報からタスク毎のメモリアクセス率を算出し、
算出した前記メモリアクセス率に基づき、前記アプリケーションからのタスク指示に対して、前記アプリケーションを実行するプログラムにおける前記タスクの構文単位で、プロセッサのソケット又はコアへの割り付けを行うことを特徴とするタスク割り付け方法。
（付記８）
アプリケーションの実行により得られるハードウェアモニタ情報からタスク毎のメモリアクセス率を算出する算出手段と、
前記算出手段により算出した前記メモリアクセス率に基づき、前記アプリケーションからのタスク指示に対して、前記アプリケーションを実行するプログラムにおける前記タスクの構文単位で、プロセッサのソケット又はコアへの割り付けを行う割り付け手段とを有することを特徴とする情報処理装置。
【符号の説明】
【００９９】
１０  情報処理装置
１１  入力手段
１２  出力手段
１３  記憶手段
１４  割り付け手段
１５  処理実行手段
１６  プロファイル情報測定手段
１７  算出手段
１８  更新手段
１９  通信手段
２０  制御手段
３１  入力装置
３２  出力装置
３３  ドライブ装置
３４  補助記憶装置
３５  主記憶装置
３６  ＣＰＵ
３７  ネットワーク接続装置
３８  記録媒体
４１  メモリ
４２  ソケット
４３  コア
【図１】
2015106298.tif 000003
【図２】
2015106298.tif 000004
【図３】
2015106298.tif 000005
【図４】
2015106298.tif 000006
【図５】
2015106298.tif 000007
【図６】
2015106298.tif 000008
【図７】
2015106298.tif 000009
【図８】
2015106298.tif 000010
【図９】
2015106298.tif 000011
【図１０】
2015106298.tif 000012
【図１１】
2015106298.tif 000013
【図１２】
2015106298.tif 000014
【図１３】
2015106298.tif 000015
【図１４】
2015106298.tif 000016
【図１５】
2015106298.tif 000017