JP5059174B2 - プログラム変換装置、およびそのプログラム - Google Patents

プログラム変換装置、およびそのプログラム Download PDF

Info

Publication number
JP5059174B2
JP5059174B2 JP2010179830A JP2010179830A JP5059174B2 JP 5059174 B2 JP5059174 B2 JP 5059174B2 JP 2010179830 A JP2010179830 A JP 2010179830A JP 2010179830 A JP2010179830 A JP 2010179830A JP 5059174 B2 JP5059174 B2 JP 5059174B2
Authority
JP
Japan
Prior art keywords
thread
program code
variable
core
access
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2010179830A
Other languages
English (en)
Other versions
JP2012038219A (ja
Inventor
信明 東條
健 田辺
秀則 松崎
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP2010179830A priority Critical patent/JP5059174B2/ja
Priority to US13/013,450 priority patent/US8732684B2/en
Publication of JP2012038219A publication Critical patent/JP2012038219A/ja
Application granted granted Critical
Publication of JP5059174B2 publication Critical patent/JP5059174B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary

Description

本発明の実施形態は、プログラムの変換に関する。
スクラッチパッドメモリを用いたアーキテクチャにおいて、メモリ最適化に関する技術がある(例えば、特許文献1)。この技術では、アプリケーションのプロファイル結果に基づいて、使用するデータをメインメモリからスクラッチパッドメモリにコピーする。しかし、特許文献1に係る技術はキャッシュメモリには適用できない。
キャッシュメモリを用いたアーキテクチャにおいて、メモリ最適化を行う技術がある(例えば、特許文献1)。この技術では、実行するアプリケーションのObjectのメンバを分類し、同じグループに入るものをメモリ上の近い位置に配置する。しかし、特許文献2に係る技術は、各コアがメモリ等を有するマルチコアプロセッサには適用できない。
米国特許公開公報 2007/0174829号 米国特許登録公報 6862729号
本発明の一観点は、マルチコアプロセッサのメモリ使用効率を向上できるプログラム変換装置を提供することを目的とする。
上記目的を達成するために、本発明の一実施形態に係るプログラム変換装置は、複数の変数を有する第1プログラムコードを、複数のコアを有するプロセッサによって実行される第2プログラムコードへ変換する。第2プログラムコードは、(a)第1アクセスパターンでアクセスされると判定された変数を含む第1メンバ構造体と、(b)前記複数のコアのうちのいずれかで実行される各スレッドのうち、第1スレッドを実行するコアによってアクセス可能であることを示す第1アクセス属性を有し、前記第1メンバ構造体を指定する第1ルートポインタと、(c)第2アクセスパターンでアクセスされると判定された変数を含む第2メンバ構造体と、(d)前記第1スレッドを実行するコア及び第2スレッドを実行するコアによってアクセス可能であることを示す第2アクセス属性を有し、前記第2メンバ構造体を指定する第2ルートポインタとを有する。
第1実施形態に係るプログラム変換装置を示す図。 第1実施形態に係るプログラム変換装置の動作を示すフローチャート図。 変換前及び変換後プログラムコードの一例を示す図。 変換前プログラムコードの一例を示す図。 変換前プログラムコードの一例を示す図。 プロファイル情報の一例を示す図。 変換後プログラムコードの一例を示す図。 変換後プログラムコードの一例を示す図。 変換後プログラムコードを実行するアーキテクチャの一例を示す図。 アクセス属性とメモリマップの一例を示す図。 ルートポインタのアクセス属性の変遷を示す図。 ルートポインタのアクセス属性の変遷を示す図。 ルートポインタのアクセス属性の変遷を示す図。 アクセス属性を変更するコードの一例を示す図。 スクラッチパッドメモリとキャッシュメモリを示す図。 アラインメントの一例を示す図。
以下、本発明の実施形態について説明する。
(第1の実施形態)
図1は、第1の実施形態に係るプログラム変換装置100を示す図である。プログラム変換装置100は、複数の変数を有するプログラムコードを、複数のコアを有するプロセッサ(マルチコアプロセッサ、メニーコアプロセッサ)によって実行されるプログラムコードへ変換する。プログラム変換装置100は、入力部110と、判定部120と、変換部130と、出力部140とを備える。これらの機能ブロック(入力部110、判定部120、変換部130、出力部140)は、他の機能ブロックと協調しながら動作しても良く、1つの機能ブロックが複数の機能ブロックに分割されても良く、以下の説明に係る各機能ブロックの処理の順番が入れ替わっても良い。
図2は、第1の実施形態に係るプログラム変換装置100の動作を示すフローチャートである。
まず、入力部110には、変換する対象であるプログラムコード(変換前プログラムコード)が入力される(ステップS101)。入力部110には、変換前プログラムコードを実行したときの各変数についてのプロファイル情報が入力されても良い。
次に、判定部120は、変換前プログラムコードに含まれる各変数へのプロセッサからのアクセスパターン(以下、変数のアクセスパターンと略記する。)を判定する(ステップS102)。判定部120は、変換前プログラムコードに含まれる各変数を、そのアクセスパターンごとにグループ化する。
次に、変換部130は、アクセスパターンによって分類された変数のグループごとに、メンバ構造体を作成する(ステップS103)。メンバ構造体は、変数のグループを有する構造体である。次に、変換部130は、各メンバ構造体へのポインタ(ルートポインタ)を作成する(ステップS104)。次に、変換部130は、変換前プログラムコードに含まれる変数のコードを、ルートポインタとメンバ構造体を用いて変数を指定するコードへ変換する(ステップS105)。
次に、出力部140は、変換部130によって変換されたプログラムコード(変換後プログラムコード)を出力する(ステップS206)。
上記の通り、入力部110から入力した変換前プログラムコードは、判定部120及び変換部130の処理を経て変換され、変換後プログラムコードとして出力部140から出力される。判定部120又は変換部130の出力の途中経過、処理結果を受けて、ユーザ等の判断により、再度、異なった方式で判定処理、変換処理が行われても良い。以下では、各機能ブロックの詳細を説明する。
図3、図4、図5は、プログラムコードを示す図である。入力部110は、変換前プログラムコード(図4、図5)を入力する。変換前プログラムコード(ソースプログラム)は、C言語やJava(登録商標、以下同様)言語のようなプログラミング言語であっても良く、特定の処理装置独自のプログラミング言語であっても良い。変換前プログラムコードは、1つのファイルにすべての情報(複数の変数と、変数に対する演算処理の規定など)が含まれる必要はなく、複数のファイルにそれらの情報が分割されて含まれても良い。
入力部110は、プログラムコードをプログラム変換装置100によって処理可能な状態にすることができれば、どのような入力方法であってもよい。入力部110は、OS(Operating System)のファイルシステムを用いて入力しても良く、ネットワークを介してメモリに記憶されたものを入力しても良く、プログラム変換装置100に組み込まれたプログラムコードを入力しても良く、GUI(Graphical User Interface)によってユーザにインタラクティブに入力させても良い。
入力部110は、変換前プログラムコードのプロファイル情報を入力しても良い。プロファイル情報とは、変換前プログラムコードが実行されたときに、プロセッサによる各変数に対するアクセスについての情報であればどのようなものであっても良い。プロファイル情報は、少なくともプログラムコードに含まれる各変数のアクセス回数を含む。プロファイル情報は、メモリアクセスがなされたタイミングについての情報や、プロセッサがメモリアクセスに用いるアドレス、プロセッサがメモリアクセスに要した時間、プロセッサによるアクセスが読み出し又は書き込みのどちらかを示す情報、いずれのスレッドからアクセスされたのか(スレッド番号)、いずれのコアからアクセスされたのか(コア番号)、等を有していても良い。
図6は、プログラムコードのプロファイル情報の一例を示す図である。図6に示すプロファイル情報は、プロセッサによるメモリアクセスごとに、メモリアクセスがなされたタイミングがプログラムの実行開始から何サイクル目であるかの情報(サイクル数)と、メモリアクセスに用いたアドレス(アドレス)と、読み出し(R)と書き込み(W)のどちらかと、いずれのスレッドからアクセスされたのかの情報(スレッド番号)とを有する。
「15 0012 R 3」は、プログラムが実行を開始して15サイクル目にアドレス0012に記憶された変数に対して読み込み処理を第3スレッドが行ったことを示す。「37 1925 W 2」は、プログラムが実行を開始して37サイクル目にアドレス1925に記憶された変数に対して書き込み処理を第2スレッドが行ったことを示す。
プロファイル情報は、判定部120や変換部130で使用する情報を含んでいれば、プログラム変換装置100専用のプロファイル情報生成装置によって生成されたものである必要はなく、汎用的な又は他の装置向けプロファイル情報生成装置等で生成しても良い。
プロファイル情報は、1つのファイルにすべての情報が含まれる必要はなく、複数のファイルにそれらの情報が分割されて含まれても良い。プロファイル情報が誤りである場合、各変数のアクセスパターンの分類に誤る可能性がある。この問題を回避するために、アクセスパターンの判定対象となる変数は、ユーザが事前に指定してもよい。アクセスパターンの判定対象となる変数(ユーザによって指定された変数)は、変換前プログラムコードに含まれるグローバル変数でも良く、その他スタティック変数や、定数、特定のスレッドでのみアクセスされるローカル変数などでも良い。アクセスパターンの判定対象となる指定方法は、変換前プログラムコードに含まれる全変数の一覧表(判定部120によって出力されても良い)から指定してもよく、予めアクセスパターンの判定対象となる変数が記載されたファイル(入力部110で入力されても良い、判定部120に記憶されても良い)に従って指定されても良い。
判定部120は、変換前プログラムコードに含まれる各変数のアクセスパターンを判定し、アクセスパターンごとに変数をグループ化する。アクセスパターンは、プロセッサによって変数がどのようにアクセスされるかを分類するものであればどのようなものであっても良く、例えば、読み出しのみがなされる変数と、書き込み(更新)がなされる変数とで分けられる。
判定部120は、変数のアクセスパターンを、プログラムコードを用いて、静的に判定しても良い。判定部120は、変数のアクセスパターンを、プログラムコードの実行結果(プロファイル情報等)を用いて、動的に判定しても良い。アクセスパターンは、読み出しのみがなされる変数と、書き込み(更新)のみがなされる変数と、読み出しと書き込みが両方なされる変数とで分けられても良い。アクセスパターンは、変数の型(整数型や浮動小数点型等)に応じて分けられても良い。アクセスパターンは、プログラムコードのいずれの関数に含まれるか、複数の関数によって呼び出されるか等に従って分けられても良い。アクセスパターンは、第1スレッドを実行するコアからアクセスされる変数と、第2スレッドを実行するコアからアクセスされる変数と、第1スレッドを実行するコア及び第2スレッドを実行するコアからアクセスされる変数とで分けられても良い。アクセスパターンは、第1スレッドを実行するコア及び第2スレッドを実行するコアから同時にアクセスされない変数と、第1スレッドを実行するコア及び第2スレッドを実行するコアから同時にアクセスされる変数とで分けられても良い。各スレッドが実行されるコアが静的に決定される場合等、アクセスパターンは、第1コアからアクセスされる変数と、第2コアからアクセスされる変数と、第1及び第2コアからアクセスされる変数とで分けられても良い。アクセスパターンは、複数のコアから同時にアクセスされない変数と、複数のコアから同時にアクセスされる変数とで分けられても良い。アクセスパターンは、プロファイル情報から、変数の操作(各コア内蔵メモリ間の移動、コア内蔵メモリと複数のコアで共有されるメモリ間の移動、複数のコアで共有されるメモリとすべてのコアで共有されるメモリ間の移動など)の有無や頻度に応じて分けられても良い。アクセスパターンは、変数の操作のタイミングに応じて分けられても良い。その他、アクセスパターンは、プロファイル情報に含まれる情報に応じて、分けられても良い。アクセスパターンは、上記の各分類方法の一部のみを用いても良く、複数の分類方法を組み合わせて用いても良い。
判定部120が判定するアクセスパターンの決定方法は、予め定められていても良く、プログラム変換装置100に実装されていても良く、ユーザが入力部110で入力しても良く、外部からネットワーク等を通じて定められても良い。
以下では、アクセスパターンが、スレッドA、B、Cをそれぞれ実行するコアのうち、1以上のどのコアからアクセスされる変数であるかに従って、分けられる例を用いて、判定部120の動作例を説明する。
判定部120は、図3、図4、図5に示す変換前プログラムコードに含まれる変数のアクセスパターンを判定して、変数をグループ化する。判定部120は、変数のアクセスパターンを判定する際に必要な情報を、変換前プログラムコードあるいはプロファイル情報から取得する。以下ではスレッドに注目し、判定部120は、各スレッドでどのデータにアクセスしているのかという情報を取得するが、取得する情報はこれに限らない。例えば、判定部120は、読み込み操作のみが行われるもの、書き込み操作のみが行われるもの、読み込み及び書き込み操作の両方が行われるもの等、データに対する情報を取得しても良い。ソースプログラム中の関数や、整数型や浮動小数点型等のデータの型等の情報を取得しても良い。判定部120は、メモリアクセスが行われる時間情報を取得しても良い。判定部120は、どのコアからアクセスされる可能性があるか等の情報を取得しても良い。さらに、これらの1つ以上の方法を組み合わせたものを利用しても良い。
図3は、変換前プログラムコードが有する変数の構造(データ構造)を規定するコードを示す。図4は、変換前プログラムコードが有するmain関数及びグローバル宣言の部分を規定するコードを示す。図5は、変換前プログラムコードが有する各スレッドのコードを示す。関数thread_AがスレッドAとしてコアに実行されるコード、関数thread_BがスレッドBとしてコアに実行されるコード、関数thread_CがスレッドCとしてコアに実行されるコードを示す。
スレッドAを実行するコアは、図3の示す変換前プログラムコードに含まれる変数すべて「array1,array2,array3,data1,data2,p1」に対してアクセスする。スレッドBを実行するコアは、図3の示す変換前プログラムコードに含まれる変数のうち、「array1,array2,data1,data2」に対してアクセスする。スレッドCを実行するコアは、図3の示す変換前プログラムコードに含まれる変数のうち、「array1,data2」に対してアクセスする。
判定部120は、スレッドAを実行するコアによりアクセスされる変数(第1グループ21)「array3,p1」を第1のアクセスパターンと判定し、スレッドAを実行するコア及びスレッドBを実行するコアによりアクセスされる変数(第2グループ22)「array2,data1」を第2のアクセスパターンと判定し、スレッドAを実行するコア、スレッドBを実行するコア、及びスレッドCを実行するコアによりアクセスされる変数(第3グループ23)「array1,data2」を第3のアクセスパターンと判定する。なお、判定部120が判定するアクセスパターンの種類はこれに限られず、上述のいずれであっても良い。判定部120は、変換前プログラムコードと、変換前プログラムコードに含まれる変数のアクセスパターン(いずれのグループに属するか)を示す情報とを、変換部130へ送る。判定部120は、プロファイル情報を、さらに変換部130へ送っても良い。
変換部130は、変換前プログラムコードを、変換前プログラムコードに含まれる変数のアクセスパターンを示す情報を用いて、メモリ最適化が容易な変換後プログラムコードに変換する。変換部130は、プログラムコードの変換の際に、プロファイル情報を用いても良い。変換部130は、変換前プログラムコード(図3の“10”、図4、図5)を、変換後プログラムコード(図3の“30”、図7、図8)へ変換する。
まず、変換部130は、アクセスパターンによって分類された変数のグループごとに、メンバ構造体を作成する。メンバ構造体は、同一のアクセスパターンと判定された変数のグループを含む構造体である。メンバ構造体に含まれる1つ以上の変数は、メモリ上の一連の領域で記憶される。メンバ構造体は、例えば、C言語の構造体、Java言語のクラス等である。変換部130は、第1グループ21の変数「array3,p1」を有するpatternA構造体と、第2グループ22の変数「array2,data1」を有するpatternB構造体と、第3グループ23の変数「array1,data2」を有するpatternC構造体と、を作成する。
次に、変換部130は、各メンバ構造体へのポインタ(ルートポインタ)を作成する。ルートポインタは、メンバ構造体のアドレスを指定できるものであればどのようなものであっても良く、例えば、C言語のポインタや、Java言語の参照等である。変換部130は、patternA構造体を指定するルートポインタ「struct patternA pA(=struct patternA *p_a)」と、patternB構造体を指定するルートポインタ「struct patternB pB(=struct patternB *p_b)」と、patternC構造体を指定するルートポインタ「struct patternC pC(=struct patternC *p_c)」とを作成する。
次に、変換部130は、変換前プログラムコードの中から、メンバ構造体に含まれる変数(メンバ)へのアクセスを規定するコードを抽出する。そして、変換部130は、変換前プログラムコードに含まれる変数へのアクセスを規定するコード(「array1,array2,array3,data1,data2,p1」)を、それぞれ、メンバ構造体へのアクセスを規定するコード(「p_c−>array1,p_b−>array2,p_a−>array3,p_b−>data1,p_c−>data2,p_a−>p1」)へ変換する。変換部130は、図4、図5に示す変換前プログラムコードを、図7、図8に示す変換後プログラムコードへ変換する。
上記の変換例では、メンバ構造体及びルートポインタをグローバル変数として宣言し、ルートポインタを介してメンバ構造体に含まれる変数へアクセスするためのコードへ変換するものであるが、これに限定されるものではない。変換部130は、変換後プログラムコード中の特定の関数でメンバ構造体及びルートポインタを宣言し、他の関数には引数で渡すためのコードへ変換してもよい。変換部130は、ルートポインタをメンバとする構造体を規定するためのコードを作成してもよい。変換部130は、メンバ構造体を階層構造にし、上位のメンバ構造体のメンバの中に下位のメンバ構造体のルートポインタを入れることを規定するコードを作成しても良い。
出力部140は、変換部130で変換されたソースコードをプログラム変換装置100から出力する。変換後プログラムコードは、C言語やJava言語のようなプログラミング言語であっても良く、特定の処理装置独自のプログラミング言語であっても良い。変換後プログラムコードは、1つのファイルにすべての情報が含まれる必要はなく、複数のファイルにそれらの情報が分割されて含まれても良い。変換前プログラムコードと変換後プログラムコードは、同一の言語でも異なる言語であっても良い。
出力部140は、変換後プログラムコードを、プロセッサに実行可能な状態にすることができれば、どのような出力方法であってもよい。出力部140は、OSのファイルシステムを用いて出力しても良く、ネットワークを介して出力しても良く、GUIによってユーザにインタラクティブに出力させても良い。
図9は、マルチコアプロセッサ200を示す図である。変換後プログラムは、例えば、図9に示すマルチコアプロセッサ200等で実行される。このマルチコアプロセッサ200は、4つのコア211〜214と、各コア211〜214のみがアクセス可能なL1キャッシュメモリ221〜224と、4つのコアがアクセス可能なL2キャッシュメモリ230と、メインメモリ240とを備える。L1キャッシュメモリ221〜224は、L2キャッシュメモリ230やメインメモリ240よりも高速にデータの読み込み、書き込み処理を行うことが可能であるが、容量はL2キャッシュメモリ230やメインメモリ240よりも小さい。L2キャッシュメモリ230は、メインメモリ240よりも高速にデータの読み込み、書き込み処理を行うことが可能であるが、容量はメインメモリ240よりも小さい。このアーキテクチャでは、キャッシュコヒーレンシを確保するために、ポインタによるアドレスの変更制御を行う。
スレッドとは、マルチコアプロセッサ200の処理単位である。スレッドは、プログラムコードによっていずれのコア211〜214で実行されるかが静的に定められていても良く、プログラムコードの実行中にいずれのコア211〜214で実行されるかが動的に定められていても良い。
このアーキテクチャでは、第1コア211のL1キャッシュメモリ221に記憶された変数は、他(第2、第3、第4)のコア212〜214からはアクセスできない。そのため、第1コア211でL1キャッシュメモリ221に記憶された変数を変更(更新)した場合、他のコア212〜214はその変更を認識できず、第1コア211が変更する前の値(古いデータ)を使用してしまうという問題が生じうる。この問題は、L1キャッシュメモリ221〜224のみならず、各メモリ階層において、そのメモリの内容が特定のコアからのみしかアクセスできない状況で生じる。
そこで、第1コア211によって変更された変数は、他のコア212〜214によってその変数の処理がなされる前に、他のコア212〜214がアクセスできるL2キャッシュメモリ230やメインメモリ240に書き戻される。そして、第1コア211のL1キャッシュメモリ221に記憶された変数を無効化する。このようにして、キャッシュコヒーレンシを確保する。
図10は、キャッシュコヒーレンシの実現方法を示す図である。このメモリマップ方式では、アドレスの上位4ビットは、アクセス属性を示す。アドレスの上位4ビットが“2”の場合、そのアドレスに記憶された変数は第1アクセス属性であることを示す。アドレスの上位4ビットが“1”の場合、そのアドレスに記憶された変数は第2アクセス属性であることを示す。アドレスの上位4ビットが“0”の場合、そのアドレスに記憶された変数は第3のアクセス属性であることを示す。実際の変数(データ)は、メモリマップ220A上に存在する。メモリマップ220B、220Cは、仮想的な領域である。アクセス属性を変更するためのAPIは、ポインタ(アドレス)を入力とし、アクセス属性変更後のポインタ(アドレス)を出力する。APIは、入力されたポインタ(アドレス)の上位4ビットを変更する事で、アクセス属性を変更できる。さらに、APIは、アクセス属性の変更の際にL1キャッシュメモリ上の変数を無効化する。このようにすることで、L1キャッシュメモリに記憶される変数とL2キャッシュメモリに記憶される変数とのコヒーレンシを確保できる。この他の実現方法としては、変数毎にアクセス属性を示す識別子を有していても良い。
変換後プログラムコードは、図9に示すアーキテクチャ以外で実行されても良い。アーキテクチャは、L1キャッシュメモリ221〜224のみを備え、L2キャッシュメモリ230を備えなくてもよい。アーキテクチャは、すべてのコア211〜214から読み出し、書き込みが可能で、L2キャッシュメモリ230よりも遅く、メインメモリ240より高速に動作し、L2キャッシュメモリ230よりも容量が大きく、メインメモリ240よりも容量が小さいL3キャッシュメモリを備えていても良い。アーキテクチャは、さらにメモリ階層の数が多いメモリを備えていても良い。アーキテクチャは、L2キャッシュメモリ230がすべてのコア211〜214ではなく、特定のコアからのみアクセスできる構成であっても良い。アーキテクチャは、スクラッチパッドメモリを備えていても良い。アーキテクチャは、あるコアに内蔵されるL1キャッシュメモリに記憶された変数が、他のコアからもアクセスできる構造であっても良い。アーキテクチャは、キャッシュコヒーレンシを確保するための独自の命令による制御(変数の操作)を行っても良い。この独自の命令は、アドレスの指定により、自動的に下位のメモリ階層にそのデータを書き戻すことができるcohelenceといった命令等である。この独自の命令は、プログラマによりシステムコール等を用いて呼び出されても良い。アーキテクチャは、キャッシュコヒーレンシを制御するハードウェアを備えていても良い。
プログラム変換装置100によって変換された変換後プログラムコードは、コンパイラ装置でコンパイルされ、マルチコアプロセッサ200等で実行される。マルチコアプロセッサ200は、変換後プログラムコードの実行時に、ルートポインタを用いて変数のアクセス属性を変化させることで、メモリ最適化を実現できる。
図11、12、13は、各スレッドの実行期間と、ルートポインタ(変数)のメモリアクセス属性の変遷を示す図である。
白抜きの矢印は、各スレッドが実行状態である期間を示す。白抜きの矢印がない期間は、そのスレッドが実行状態でないことを示す。スレッドは、スレッドの実行が終了した場合、他のスレッドとの同期をとる場合等に、実行状態以外の状態となる。
塗りつぶしの矢印は、ルートポインタが第1又は第2アクセス属性である期間を示す。ルートポインタが第1アクセス属性である場合、ルートポインタのメンバ構造体に含まれる変数は、L1キャッシュメモリ221〜224、L2キャッシュメモリ230、及びメインメモリ240に記憶可能(あるスレッドを実行するコアによってアクセス可能)であることを示す。ルートポインタが第2アクセス属性である場合、ルートポインタのメンバ構造体に含まれる変数は、L2キャッシュメモリ230、及びメインメモリ240に記憶可能(各スレッドを実行する1つ以上のコアによってアクセス可能)であることを示す。図11、12、13において、第1アクセス属性と記載された部分の右横に、塗りつぶしの矢印がある期間は、ルートポインタが第1アクセス属性を有する事を示す。第2アクセス属性と記載された部分の右横に、塗りつぶしの矢印がある期間は、ルートポインタが第2アクセス属性を有する事を示す。
スレッドの実行期間を示す白抜きの矢印と、ルートポインタのアクセス属性を示す塗りつぶしの矢印とを結ぶ矢印は、スレッドを実行するコアが変数に対してアクセス(読み出し又は書き込み)した事を示す。下方向の矢印と上方向の矢印との間に「read」と書かれている場合は、この間にスレッドを実行するコアが読み出し処理を行った事を示す。下方向の矢印と上方向の矢印との間に「write」場合は、この間にスレッドを実行するコアが書き込み処理を行った事を示す。
第1アクセス属性であることを示す塗りつぶしの矢印と、第2アクセス属性であることを示す塗りつぶしの矢印との間の矢印(図12)は、ルートポインタのアクセス属性が変化した事を示す。
図11は、ルートポインタに指定されるメンバ構造体のメンバ(変数)へ、第3スレッドを実行するコアのみからアクセスされる場合のルートポインタのアクセス属性を示す。ルートポインタに指定されるメンバ構造体のメンバは、第3スレッド以外のスレッドを実行するコアからアクセスされない。そのため、ルートポインタに指定されるメンバ構造体は、第3スレッドを実行するコアに内蔵されるL1キャッシュに記憶され続けた場合であっても、キャッシュコヒーレンシ上の問題は生じない。
ルートポインタのアクセス属性を、L1キャッシュメモリ221〜224、L2キャッシュメモリ230、及びメインメモリ240に記憶可能(第3スレッドを実行するコアでアクセス可能)である第1アクセス属性に常に設定しておくことで、最も高速なL1キャッシュメモリ221〜224に記憶された状態での処理が可能となる。この結果、アプリケーションの性能を向上できる。
図12は、ルートポインタに指定されるメンバ構造体のメンバ(変数)へ、第1スレッドを実行するコア及び第2スレッドを実行するコアからアクセスされる場合のルートポインタのアクセス属性を示す。ルートポインタに指定されるメンバ構造体のメンバは、第1、第2スレッドの一方を実行するコアからアクセスされる期間と、第1、第2スレッドの他方を実行するコアからアクセスされる期間とが重複しない。図12の例では、キャッシュキャッシュコヒーレンシの問題が生じる可能性があるが、ルートポインタのアクセス属性を変更することで回避する。
第1スレッドを実行するコアからのアクセスがある場合、又は第2スレッドを実行するコアからのアクセスがある場合、アクセス前に、ルートポインタのアクセス属性は、第2アクセス属性(第1スレッドを実行するコア及び第2スレッドを実行するコアでアクセス可能)から第1アクセス属性(第1又は第2スレッドの一方を実行するコアでアクセス可能)に変更される。このため、最も高速なL1キャッシュメモリ221〜224に記憶された状態での処理が可能となる。この結果、アプリケーションの性能を向上できる。
そして、第1スレッドを実行するコアからのアクセスがあった後、又は第2スレッドを実行するコアからのアクセスがあった後、ルートポインタのアクセス属性は、第1アクセス属性(第1又は第2スレッドの一方を実行するコアでアクセス可能)から第2アクセス属性(第1スレッドを実行するコア及び第2スレッドを実行するコアでアクセス可能)に変更される。このような処理を行うことで、仮に、ルートポインタに指定されるメンバ構造体がL1キャッシュメモリ221〜224に記憶された場合でも、第2アクセス属性はL1キャッシュメモリ221〜224上に記憶されることが許可されないため、ルートポインタに指定されるメンバ構造体は、一旦L2キャッシュメモリ230やメインメモリ240に書き戻される。このため、キャッシュコヒーレンシの問題を回避でき、アプリケーションに問題を生じさせることはない。
図14は、ルートポインタのアクセス属性を行うコードの例を示す図である。「memchange_mem2tomem1(array,(sizeof(int)*100))」は、ルートポインタarrayのアクセス属性を第2アクセス属性から第1アクセス属性に変更するためのコード(API)である。arrayは配列arrayの先頭の要素を指すポイントである。(sizeof(int)*100)は配列arrayのデータサイズを示す。「memchage_mem1tomem2(array,(sizeof(int)*100))は、ルートポインタarrayのアクセス属性を第1アクセス属性から第2アクセス属性に変更するためのコード(API)である。アクセス属性の変更方法は、APIを利用したアクセス属性の変更に限定されるものではない。例えば、システムコール等を用いて、ハードウェアに備わっているアクセス属性を変更する命令を直接利用しても良い。
図13は、ルートポインタに指定されるメンバ構造体のメンバ(変数)へ、第1スレッドを実行するコア、第2スレッドを実行するコア、及び第3スレッドを実行するコアからアクセスされる場合のルートポインタのアクセス属性を示す。ルートポインタに指定されるメンバ構造体のメンバは、あるスレッドを実行するコアからアクセスされる期間と、他のスレッドを実行するコアからアクセスされる期間とが重複する。
そこで、ルートポインタのアクセス属性を切り替えずに、常に第2アクセス属性(第1スレッドを実行するコア、第2スレッドを実行するコア、及び第3スレッドを実行するコアでアクセス可能)に設定することで、ルートポインタに指定されるメンバ構造体は、全コアからアクセスできるL2キャッシュメモリ230を記憶される。このため、キャッシュコヒーレンシの問題を回避でき、アプリケーションに問題を生じさせることはない。
また、第1スレッド、第2スレッド、及び第3スレッドで読み出し処理のみが行われ、書き込み処理が行われていない場合には、ルートポインタのアクセス属性を、読み出し処理のみを許可するものであって、L1キャッシュ、L2キャッシュ、及びメインメモリ240に記憶可能とする第3のアクセス属性としても良い。このようにすることで、図13の例で、読み出し処理中にL1キャッシュメモリ221〜224上での処理が可能となる。この場合、L1キャッシュメモリ221〜224に記憶された変数が書き込み(更新)されることはなく、キャッシュコヒーレンシを確保できる。このため、アプリケーションに問題を生じさせることなく、L1キャッシュメモリ221〜224を使用してアプリケーションの性能を向上できる。
図15は、スクラッチパッドメモリとキャッシュメモリに記憶されるメンバ構造体を示す図である。白抜きの矢印の部分が、メモリへ書き込む(更新する)メンバ構造体のメンバを示す。斜線部分が、実際にメモリへ書き込まれるデータを示す。
スクラッチパッドメモリでは、書き込み(更新)に係るデータのサイズと、メモリへ実際に書き込むデータのサイズは、同一である。キャッシュメモリでは、書き込み(更新)に係るデータのサイズよりも、メモリへ実際に書き込むデータのサイズが大きい。
キャッシュメモリは、データをライン単位で管理する。図15に示すキャッシュメモリの各ブロックが1つのラインに対応する。キャッシュメモリへデータを書き込む場合、書き込みに係るデータが属するライン上のデータを同時に書き込む必要がある。
アクセス属性は、1つ以上のラインごと(以下、記憶単位と呼ぶ)で設定される。ここで、第1アクセス属性に係るメンバ構造体と、第2アクセス属性に係るメンバ構造体とが1つの記憶単位に混在して記憶される場合、キャッシュコヒーレンシの問題を回避するため、このライン上に記憶されるデータすべては、第2アクセス属性が設定される。このため、高速なL1キャッシュメモリを利用できない。
変換後プログラムでは、同一のアクセスパターンの変数が1つのメンバ構造体に含まれる。メンバ構造体はルートポインタによって指定される。ルートポインタは、1つのアクセス属性を有する。変換後プログラムが実行される場合、メンバ構造体のメンバは、連続したメモリ領域に記憶される。そのため、第1又は第2メンバ構造体のメンバが記憶される領域内部に、他のアクセス属性の変数が記憶されることはない。このようにすることで、第1アクセス属性に係るメンバ構造体と、第2アクセス属性に係るメンバ構造体とが1つの記憶単位に混在して記憶されることを抑制でき、高速なL1キャッシュメモリ等を有効に活用できる。
変換後プログラムは、あるアクセス属性に係るメンバ構造体が記憶される記億単位には、他のアクセス属性に係るメンバ構造体を記憶しない制御を行うためのコードを含んでいても良い。この場合、第1アクセス属性に係るメンバ構造体と、第2アクセス属性に係るメンバ構造体とが1つの記憶単位に混在して記憶されることをより正確に抑制でき、高速なL1キャッシュメモリ等をより有効に活用できる。
メンバ構造体をメモリに記憶する際に、アクセス属性が設定される記億単位の先頭とアラインメントをとって記憶することで、第1アクセス属性に係るメンバ構造体と、第2アクセス属性に係るメンバ構造体とが1つの記憶単位に混在して記憶されることを抑制でき、高速なL1キャッシュメモリ等を有効に活用できる。
図16は、array[100]についてのアラインメントを示す図である。図16に示すキャッシュメモリの各ブロックが1つのラインに対応する。白抜きの矢印の部分は、メンバ構造体arrayの記憶領域を示す。図16(下)は、アラインメントする前のarray[100]の記憶領域を示す。図16(上)は、アラインメントした後のarray[100]の記憶領域を示す。「align(array)」は、メンバ構造体arrayのアラインメントを行うためのコード(API)である。変換後プログラムは、メンバ構造体のアラインメントを行うためのコードをさらに含んでも良い。アラインメントした後のarray[100]の記憶領域の先頭は、ラインの先頭のアドレスと等しい。アラインメントした後のarray[100]が属する記憶単位のうちarray[100]が記憶されていない領域は、パディング(無意味なデータ)が追加される。このように、メンバ構造体のアラインメントを行い、メンバ構造体が記憶される記億単位には、その他のアクセスパターンの変数が記憶されることを防止できる。
また、アラインメントを取るためのAPI(align)を用意する方法以外にも、ラインのバイト数を確認し、各変数に記億単位分の領域を最初から確保してもよく、変数をメモリに記憶する際に必ずアラインメントを取る仕様にしても良い。
第1の実施形態に係るプログラム変換装置100は、プロセッサの使用メモリ量を削減できる。アーキテクチャやOSによっては、アラインメントを自動でとるものがある。この場合、どんなにサイズが小さい変数を宣言した場合でも、同一ライン上に他のデータが記憶されることはない。この場合、メモリ階層が原因となるアプリケーションのエラーは回避できるものの、メモリ使用量は大きくなる。変換後プログラムは、同一アクセスパターンの変数をメンバとするメンバ構造体を含むため、小さな変数を1つにまとめることができる。そして、メンバ構造体ごとにアラインメントを取ることになるため、余分なメモリの占有を削減することができる。
第1の実施形態に係るプログラム変換装置100は、消費エネルギーを削減できる。キャッシュメモリにデータが記憶されている場合、プロセッサ(CPU)は、下位のメモリにアクセスせず、キャッシュメモリ上のデータを読み出して演算処理等を行う。変換後プログラムでは、アクセス属性をルートポインタごとに切り替えることで、キャッシュメモリの使用効率を改善し、キャッシュメモリ上のデータのヒット率を向上できるため、大容量で消費エネルギーの大きい下位のメモリへのアクセスを抑制できる。その結果、アプリケーション全体の消費エネルギーの削減、並びに、プロセッサの動作時に発生する熱を低減が可能となる。
このプログラム変換装置100は、例えば、汎用のコンピュータ装置を基本ハードウェアとして用いることでも実現することが可能である。すなわち、入力部110、判定部120、変換部130、および出力部140は、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。また、判定部120及び変換部130のみを、上記のコンピュータ装置に搭載されたプロセッサにプログラムを実行させることにより実現することができる。このとき、プログラム変換装置100は、上記のプログラムをコンピュータ装置にあらかじめインストールすることで実現してもよいし、CD−ROMなどの記憶媒体に記憶して、あるいはネットワークを介して上記のプログラムを配布して、このプログラムをコンピュータ装置に適宜インストールすることで実現してもよい。また、入力部110、判定部120、変換部130、および出力部140に内蔵されるメモリは、上記のコンピュータ装置に内蔵あるいは外付けされたメモリ、ハードディスクもしくはCD−R、CD−RW、DVD−RAM、DVD−Rなどの記憶媒体などを適宜利用して実現することができる。
なお、本発明は上記実施形態そのままに限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で構成要素を変形して具体化できる。また、上記実施形態に開示されている複数の構成要素の適宜な組み合わせにより、種々の発明を形成できる。例えば、実施形態に示される全構成要素から幾つかの構成要素を削除してもよい。さらに、実施形態にわたる構成要素を適宜組み合わせてもよい。
10・・・変換前プログラムコード
20、21、22、23・・・変換のグループ
30・・・変換後プログラムコード
100・・・プログラム変換装置
110・・・入力部
120・・・判定部
130・・・変換部
140・・・出力部
200・・・マルチコアプロセッサ
211〜214・・・コア
221〜224・・・L1キャッシュメモリ
220A〜220C・・・メモリマップ領域
230・・・L2キャッシュメモリ
240・・・メインメモリ

Claims (6)

  1. 複数の変数を有する第1プログラムコードを、複数のコアを有するプロセッサによって実行される第2プログラムコードへ変換するプログラム変換装置であって、
    前記第1プログラムコードが実行される場合に、前記第1プログラムコードに含まれる変数に対する前記プロセッサによるアクセスパターンを判定する判定部と、
    (a)第1アクセスパターンでアクセスされると判定された変数を含む第1メンバ構造体と、(b)前記複数のコアのうちのいずれかで実行される各スレッドのうち、第1スレッドを実行するコアによってアクセス可能であることを示す第1アクセス属性を有し、前記第1メンバ構造体を指定する第1ルートポインタと、(c)第2アクセスパターンでアクセスされると判定された変数を含む第2メンバ構造体と、(d)前記第1スレッドを実行するコア及び第2スレッドを実行するコアによってアクセス可能であることを示す第2アクセス属性を有し、前記第2メンバ構造体を指定する第2ルートポインタとを有する第2のプログラムコードへ、前記第1プログラムコードを変換する変換部とを備えるプログラム変換装置。
  2. 前記第2プログラムコードは、前記プロセッサのメモリが備える複数の記憶単位のうち、前記第1メンバ構造体が記憶される1つ以上の第1記憶単位と、前記第2メンバ構造体が記憶される1つ以上の第2記憶単位とを重複させないためのコードをさらに含むことを特徴とする請求項1に係るプログラム変換装置。
  3. 前記第1プログラムコードと、前記複数の変数のそれぞれに対する前記プロセッサによるアクセス回数を示すプロファイル情報とを入力する入力部をさらに備え、
    前記判定部は、前記プロファイル情報を用いて、前記第1プログラムコードに含まれる変数に対する前記プロセッサによるアクセスパターンを判定することを特徴とする請求項1又は請求項2に係るプログラム変換装置。
  4. 前記判定部は、前記第1プログラムコードに含まれる変数のうち、
    前記第1スレッドを実行するコアによって更新される変数を前記第1アクセスパターンでアクセスされる変数と判定し、
    前記第1スレッドを実行するコア及び前記第2スレッドを実行するコアによって更新される変数を前記第2アクセスパターンでアクセスされる変数と判定し、
    前記複数のコアのいずれによっても更新されない変数を第3アクセスパターンでアクセスされる変数と判定することを特徴とする請求項1乃至請求項3のいずれか1項に記載のプログラム変換装置。
  5. 前記第2プログラムコードは、前記第2ルートポインタの前記第2アクセス属性を、
    前記第1スレッドに係るメモリアクセス期間は前記第1スレッドを実行するコアによってアクセス可能であることを示すアクセス属性へ変更し、
    前記第2スレッドに係るメモリアクセス期間は前記第2スレッドを実行するコアによってアクセス可能であることを示すアクセス属性へ変更するためのコードをさらに含むことを特徴とする請求項1乃至請求項4のいずれか1項に記載のプログラム変換装置。
  6. 複数の変数を有する第1プログラムコードを、複数のコアを有するプロセッサによって実行される第2プログラムコードへ変換するためのプログラムであって、
    コンピュータに、
    前記第1プログラムコードが実行される場合に、前記第1プログラムコードに含まれる変数に対する前記プロセッサによるアクセスパターンを判定する機能と、
    (a)第1アクセスパターンでアクセスされると判定された変数を含む第1メンバ構造体と、(b)前記複数のコアのうちのいずれかで実行される各スレッドのうち、第1スレッドを実行するコアによってアクセス可能であることを示す第1アクセス属性を有し、前記第1メンバ構造体を指定する第1ルートポインタと、(c)第2アクセスパターンでアクセスされると判定された変数を含む第2メンバ構造体と、(d)前記第1スレッドを実行するコア及び第2スレッドを実行するコアによってアクセス可能であることを示す第2アクセス属性を有し、前記第2メンバ構造体を指定する第2ルートポインタとを有する第2のプログラムコードへ、前記第1プログラムコードを変換する機能とを実現させるためのプログラム。
JP2010179830A 2010-08-10 2010-08-10 プログラム変換装置、およびそのプログラム Expired - Fee Related JP5059174B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2010179830A JP5059174B2 (ja) 2010-08-10 2010-08-10 プログラム変換装置、およびそのプログラム
US13/013,450 US8732684B2 (en) 2010-08-10 2011-01-25 Program conversion apparatus and computer readable medium

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010179830A JP5059174B2 (ja) 2010-08-10 2010-08-10 プログラム変換装置、およびそのプログラム

Publications (2)

Publication Number Publication Date
JP2012038219A JP2012038219A (ja) 2012-02-23
JP5059174B2 true JP5059174B2 (ja) 2012-10-24

Family

ID=45565718

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010179830A Expired - Fee Related JP5059174B2 (ja) 2010-08-10 2010-08-10 プログラム変換装置、およびそのプログラム

Country Status (2)

Country Link
US (1) US8732684B2 (ja)
JP (1) JP5059174B2 (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5687603B2 (ja) 2011-11-09 2015-03-18 株式会社東芝 プログラム変換装置、プログラム変換方法、および変換プログラム
JP2013171459A (ja) * 2012-02-21 2013-09-02 Toshiba Corp プログラム解析装置、プログラム解析方法および記録媒体
CN102982009A (zh) * 2012-11-06 2013-03-20 无锡江南计算技术研究所 一种用于众核处理器的函数处理方法及系统
JP6442967B2 (ja) * 2014-10-10 2018-12-26 富士通株式会社 情報処理プログラム、情報処理装置、情報処理方法
KR101956992B1 (ko) * 2016-11-25 2019-06-27 현대오트론 주식회사 멀티 코어 시스템 및 이의 구동 방법
CN111402570B (zh) * 2020-02-11 2021-08-17 广州创知科技有限公司 红外遥控信号接收方法、接收系统、接收设备及存储介质

Family Cites Families (30)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH07319710A (ja) * 1994-05-20 1995-12-08 Matsushita Electric Ind Co Ltd コンパイル処理方法
JPH0844577A (ja) * 1994-07-26 1996-02-16 Sumisho Electron Kk データ分割方法及びマルチプロセッサシステム
US6031994A (en) * 1997-04-01 2000-02-29 Intel Corporation Method for determining the set of variables that may be ambiguously defined at a point in a computer program
JP3327818B2 (ja) * 1997-08-29 2002-09-24 松下電器産業株式会社 プログラム変換装置及び記録媒体
JP4130713B2 (ja) * 1998-10-21 2008-08-06 松下電器産業株式会社 プログラム変換装置
JP4041248B2 (ja) * 1999-07-09 2008-01-30 松下電器産業株式会社 コンパイラ装置、コンパイルプログラムが記録されたコンピュータ読み取り可能な記録媒体及びコンパイル方法
US6862729B1 (en) 2000-04-04 2005-03-01 Microsoft Corporation Profile-driven data layout optimization
JP3707727B2 (ja) * 2000-10-30 2005-10-19 インターナショナル・ビジネス・マシーンズ・コーポレーション プログラムの最適化方法及びこれを用いたコンパイラ
JP2002182926A (ja) * 2000-12-12 2002-06-28 Hitachi Ltd コンパイル方法及びコンピュータ読み取り可能な記録媒体
GB0215035D0 (en) * 2002-06-28 2002-08-07 Critical Blue Ltd Code generation method
JP4129981B2 (ja) * 2004-04-02 2008-08-06 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ、コンパイラプログラム、記録媒体、制御方法、及び中央処理装置
EP1788485A4 (en) * 2004-08-23 2012-09-26 Gaia System Solutions Inc SOURCE PROGRAM ANALYSIS DEVICE AND METHOD
GB2427045B (en) * 2005-06-06 2007-11-21 Transitive Ltd Method and apparatus for converting program code with access coordination for a shared resource
US8473934B2 (en) 2005-07-15 2013-06-25 Imec Method for mapping applications on a multiprocessor platform/system
US7810082B2 (en) * 2005-07-22 2010-10-05 Telefonaktiebolaget L M Ericsson (Publ) System and method for transforming generic software code into operator specific code
US7770163B2 (en) * 2006-03-24 2010-08-03 International Business Machines Corporation Method of efficiently performing precise profiling in a multi-threaded dynamic compilation environment
US7882498B2 (en) * 2006-03-31 2011-02-01 Intel Corporation Method, system, and program of a compiler to parallelize source code
US8108844B2 (en) * 2006-06-20 2012-01-31 Google Inc. Systems and methods for dynamically choosing a processing element for a compute kernel
US8136102B2 (en) * 2006-06-20 2012-03-13 Google Inc. Systems and methods for compiling an application for a parallel-processing computer system
US8375368B2 (en) * 2006-06-20 2013-02-12 Google Inc. Systems and methods for profiling an application running on a parallel-processing computer system
JP2008003882A (ja) * 2006-06-23 2008-01-10 Fujitsu Ltd コンパイラプログラム,リストベクトルの領域割当て最適化方法,コンパイル処理装置およびコンパイラプログラムを記録したコンピュータ読み取り可能な記録媒体
US8201159B2 (en) * 2006-08-04 2012-06-12 International Business Machines Corporation Method and apparatus for generating data parallel select operations in a pervasively data parallel system
JP2008293378A (ja) * 2007-05-25 2008-12-04 Panasonic Corp プログラム書き換え装置
JP2009169862A (ja) * 2008-01-18 2009-07-30 Panasonic Corp プログラム変換装置、方法、プログラムおよび記録媒体
US8151252B2 (en) * 2008-02-22 2012-04-03 Oracle America, Inc. Compiler framework for speculative automatic parallelization with transactional memory
US8776030B2 (en) * 2008-04-09 2014-07-08 Nvidia Corporation Partitioning CUDA code for execution by a general purpose processor
US9678775B1 (en) * 2008-04-09 2017-06-13 Nvidia Corporation Allocating memory for local variables of a multi-threaded program for execution in a single-threaded environment
US8726248B2 (en) * 2008-06-12 2014-05-13 Oracle America, Inc. Method and apparatus for enregistering memory locations
JP4931978B2 (ja) * 2009-10-06 2012-05-16 インターナショナル・ビジネス・マシーンズ・コーポレーション 並列化処理方法、システム、及びプログラム
US8650554B2 (en) * 2010-04-27 2014-02-11 International Business Machines Corporation Single thread performance in an in-order multi-threaded processor

Also Published As

Publication number Publication date
JP2012038219A (ja) 2012-02-23
US8732684B2 (en) 2014-05-20
US20120042304A1 (en) 2012-02-16

Similar Documents

Publication Publication Date Title
Hildebrand et al. Autotm: Automatic tensor movement in heterogeneous memory systems using integer linear programming
US10430190B2 (en) Systems and methods for selectively controlling multithreaded execution of executable code segments
JP5059174B2 (ja) プログラム変換装置、およびそのプログラム
Jablin et al. Dynamically managed data for CPU-GPU architectures
TWI442235B (zh) 記憶體交易群組
JP2013524386A (ja) ランスペース方法、システムおよび装置
Rawat et al. Resource conscious reuse-driven tiling for GPUs
JP2010009495A (ja) 情報処理装置、プログラム処理方法及びコンピュータプログラム
Liu et al. Instruction cache locking for multi-task real-time embedded systems
Jiang et al. Reusing data reorganization for efficient simd parallelization of adaptive irregular applications
Tagliavini et al. Optimizing memory bandwidth in OpenVX graph execution on embedded many-core accelerators
Wilkins et al. Warden: Specializing cache coherence for high-level parallel languages
CN109901840A (zh) 一种线程间冗余删除的异构编译优化方法
Oswald et al. Heterogen: Automatic synthesis of heterogeneous cache coherence protocols
Endo et al. Software technology that deals with deeper memory hierarchy in post-petascale era
Huang et al. Automated transformation of GPU-specific OpenCL kernels targeting performance portability on multi-core/many-core CPUs
Tian et al. Optimizing gpu register usage: Extensions to openacc and compiler optimizations
Yuan et al. Automatic enhanced CDFG generation based on runtime instrumentation
Bai et al. A software-only scheme for managing heap data on limited local memory (LLM) multicore processors
CN111966397A (zh) 一种异构并行程序自动移植和优化方法
Kim et al. Demand paging techniques for flash memory using compiler post-pass optimizations
CN107562430A (zh) 一种针对移动π演算语言的文件处理功能的编译方法
Stitt et al. Thread warping: Dynamic and transparent synthesis of thread accelerators
Ranganath et al. Lc-memento: A memory model for accelerated architectures
Tan et al. Just-in-time locality and percolation for optimizing irregular applications on a manycore architecture

Legal Events

Date Code Title Description
RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20111125

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20111205

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120627

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120706

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120801

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150810

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150810

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees