JP2022521127A - コンパイラのためのワークロード指向定数伝播 - Google Patents

コンパイラのためのワークロード指向定数伝播 Download PDF

Info

Publication number
JP2022521127A
JP2022521127A JP2021538706A JP2021538706A JP2022521127A JP 2022521127 A JP2022521127 A JP 2022521127A JP 2021538706 A JP2021538706 A JP 2021538706A JP 2021538706 A JP2021538706 A JP 2021538706A JP 2022521127 A JP2022521127 A JP 2022521127A
Authority
JP
Japan
Prior art keywords
workload
constant
logic
compiler
control variables
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.)
Granted
Application number
JP2021538706A
Other languages
English (en)
Other versions
JP7287743B2 (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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of JP2022521127A publication Critical patent/JP2022521127A/ja
Application granted granted Critical
Publication of JP7287743B2 publication Critical patent/JP7287743B2/ja
Active 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/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/76Architectures of general purpose stored program computers
    • G06F15/78Architectures of general purpose stored program computers comprising a single central processing unit
    • G06F15/7803System on board, i.e. computer system on one or more PCB, e.g. motherboards, daughterboards or blades
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4434Reducing the memory space required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/505Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering the load

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

半導体パッケージ装置の一実施形態は、ワークロード制御変数を識別し、静的単一代入グラフにおけるそれぞれのエッジにワークロードフラグを付加し、識別されたワークロード制御変数及びワークロードフラグに基づいて定数を伝播するための技術を含み得る。他の実施形態が、開示及び特許請求されている。

Description

実施形態は、概して、コンパイラに関する。より具体的には、実施形態は、コンパイラのためのワークロード指向定数伝播に関する。
コンパイラ技術は、定数伝播を含む多種多様な最適化を含む。定数伝播とは、コンパイル時における、式中の既知の定数の値の置換を指す。疎な条件分岐を考慮した定数(SCC)伝播は、静的単一代入(SSA)形式への変換後に適用され得るコンパイラ最適化である。
以下の明細書及び添付の特許請求の範囲を読むことによって、かつ以下の図面を参照することによって、実施形態の様々な利点が当業者に明らかになる。
一実施形態に係る電子処理システムの一例のブロック図である。
一実施形態に係る半導体パッケージ装置の一例のブロック図である。
一実施形態に係るコンパイルの方法の一例のフローチャートである。
一実施形態に係るワークロード定数伝播を用いた深さ優先SCCのための処理フローの一例のフローチャートである。
一実施形態に係るワークロードコンパイラディレクティブ及び対応するWorkloadList構造の例示的な表現である。
一実施形態に係るMレベルラティス及び交わり規則の例示的な表現である。
実施形態に係るコンパイラ装置の例のブロック図である。 実施形態に係るコンパイラ装置の例のブロック図である。
一実施形態に係るプロセッサの一例のブロック図である。
一実施形態に係るシステムの一例のブロック図である。
ここで図1を参照すると、電子処理システム10の一実施形態は、プロセッサ11と、プロセッサ11に通信可能に連結されるメモリ12と、ワークロード制御変数(WCV)を識別し、静的単一代入グラフにおけるそれぞれのエッジにワークロードフラグを付加し、識別されたWCV及びワークロードフラグに基づいて定数を伝播するように、プロセッサ11と通信可能に連結されるコンパイラロジック13とを備えてよい。いくつかの実施形態において、コンパイラロジック13は、WCVを識別するためにコンパイラディレクティブを受信するように構成されてよい。代替的には、又は加えて、コンパイラロジック13は、コンパイルされることになるコードの静的分析を通してWCVを識別するように構成されてよい。例えば、コンパイラロジック13は、識別されたWCV及びワークロードフラグに基づいて、定数伝播のための漸近的限界の下でコンパイラ時間及び空間複雑度を制限するように構成されてもよい。いくつかの実施形態において、コンパイラロジック13は、Mレベルラティス及び深さ優先探索を利用して定数フットプリントをトレースするように更に構成されてよく、ここで、Mは1以上である。例えば、定数フットプリントは、グローバル定数及び部分定数インスタンスのうちの1又は複数を含んでよい。いくつかの実施形態において、コンパイラロジック13は、(例えば、同じダイ上の)プロセッサ11を含む様々なコンポーネント内に配置又はそれらとコロケートされてよい。
上記プロセッサ11、メモリ12、コンパイラロジック13、及び他のシステムコンポーネントのそれぞれの実施形態は、ハードウェア、ソフトウェア、又はこれらの任意の好適な組み合わせにおいて実装されてよい。例えば、ハードウェア実装は、例えば、プログラマブルロジックアレイ(PLA)、フィールドプログラマブルゲートアレイ(FPGA)、複合プログラマブルロジックデバイス(CPLD)等の構成可能ロジック、又は、例えば特定用途向け集積回路(ASIC)、相補型金属酸化物半導体(CMOS)若しくはトランジスタ-トランジスタロジック(TTL)技術等の回路技術を用いる機能固定型ロジックハードウェア、又はこれらの任意の組み合わせを含んでよい。プロセッサ11の実施形態は、汎用プロセッサ、専用プロセッサ、中央処理装置(CPU)、コントローラ、マイクロコントローラ等を含み得る。
代替的には、又は加えて、これらのコンポーネントの全部又は一部がロジック命令セットとして1又は複数のモジュールで実装されてよい。当該ロジック命令セットは、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、プログラマブルROM(PROM)、ファームウェア、フラッシュメモリ等のようなマシン又はコンピュータ可読記憶媒体に記憶され、プロセッサ又はコンピューティングデバイスによって実行される。例えば、これらのコンポーネントのオペレーションを実行するコンピュータプログラムコードは、PYTHON、PERL、JAVA(登録商標)、SMALLTALK(登録商標)、C++、C#等のようなオブジェクト指向プログラミング言語と、「C」プログラミング言語又は同様のプログラミング言語等の従来の手続き型プログラミング言語とを含む、1又は複数のオペレーティングシステム(OS)適用可能/適合プログラミング言語の任意の組み合わせで記述されてよい。例えば、メモリ12、永続性記憶媒体、又は他のシステムメモリは、プロセッサ11によって実行されると、システム10の1又は複数のコンポーネント、機能、又は態様(例えば、コンパイラロジック13、WCVの識別、SSAグラフにおけるそれぞれのエッジへのワークロードフラグの付加、識別されたWCV及びワークロードフラグに基づく定数の伝播等)をシステム10に実施させる命令のセットを格納し得る。
ここで図2を参照すると、半導体パッケージ装置20の一実施形態は、1又は複数の基板21と、1又は複数の基板21に連結されたロジック22とを備えてよい。ロジック22は、少なくとも部分的に構成可能ロジック及び機能固定型ハードウェアロジックのうちの1又は複数において実装される。1又は複数の基板に連結されるロジック22は、WCVを識別し、静的単一代入グラフにおけるそれぞれのエッジにワークロードフラグを付加し、識別されたWCV及びワークロードフラグに基づいて定数を伝播するように構成されてよい。いくつかの実施形態において、ロジック22は、WCVを識別するためにコンパイラディレクティブを受信するように構成されてよい。代替的には、又は加えて、ロジック22は、コンパイルされることになるコードの静的分析を通してWCVを識別するように構成されてよい。例えば、ロジック22は、識別されたWCV及びワークロードフラグに基づいて、定数伝播のための漸近的限界の下でコンパイラ時間及び空間複雑度を制限するように構成されてもよい。いくつかの実施形態において、ロジック22は、Mレベルラティス及び深さ優先探索を利用して定数フットプリントをトレースするように更に構成されてよく、ここで、Mは1以上である。例えば、定数フットプリントは、グローバル定数及び部分定数インスタンスのうちの1又は複数を含んでよい。いくつかの実施形態において、1又は複数の基板21に連結されたロジック22は、1又は複数の基板21内に位置しているトランジスタチャネル領域を含んでよい。
ロジック22の実施形態、及び装置20の他のコンポーネントは、ハードウェア、ソフトウェア、又はハードウェアにおける少なくとも部分的実装を含むこれらの任意の組み合わせにおいて実装され得る。例えば、ハードウェア実装は、例えば、PLA、FPGA、CPLD等の構成可能ロジック、又は、例えば、ASIC、CMOS、若しくはTTL技術等の回路技術を用いる機能固定型ロジックハードウェア、又はこれらの任意の組み合わせを含んでよい。加えて、これらのコンポーネントの一部がロジック命令セットとして1又は複数のモジュールで実装されてよい。当該ロジック命令セットは、RAM、ROM、PROM、ファームウェア、フラッシュメモリ等のようなマシン又はコンピュータ可読記憶媒体に記憶され、プロセッサ又はコンピューティングデバイスによって実行される。例えば、コンポーネントのオペレーションを実行するためのコンピュータプログラムコードは、PYTHON、PERL、JAVA(登録商標)、SMALLTALK(登録商標)、C++、C#等のようなオブジェクト指向プログラミング言語と、「C」プログラミング言語又は同様のプログラミング言語等の従来の手続き型プログラミング言語とを含む、1又は複数のOS適用可能/適合プログラミング言語の任意の組み合わせで記述されてよい。
装置20は、方法30(図3)の1又は複数の態様、又は本明細書で論じられる実施形態のいずれかを実装してよい。いくつかの実施形態において、図示の装置20は、1又は複数の基板21(例えば、シリコン、サファイア、ヒ化ガリウム)と、基板21に連結されるロジック22(例えば、トランジスタアレイ及び他の集積回路/ICコンポーネント)とを含み得る。ロジック22は、少なくとも部分的に、構成可能ロジック又は機能固定型ロジックハードウェアで実装され得る。1つの例において、ロジック22は、基板21内に位置する(例えば組み込まれる)トランジスタチャネル領域を含み得る。従って、ロジック22と基板21との間のインタフェースは、階段接合でないことがあり得る。また、ロジック22は、基板21の初期ウェハ上に成長するエピタキシャル層を備えるとみなされ得る。
ここで、図3を参照すると、コンパイルの方法30の一実施形態は、ブロック31にて、WCVを識別する段階と、ブロック32にて、静的単一代入グラフにおけるそれぞれのエッジにワークロードフラグを付加する段階と、ブロック33にて、識別されたWCV及びワークロードフラグに基づいて定数を伝播する段階とを含んでよい。いくつかの実施形態において、方法30は、ブロック34にて、WCVを識別するためにコンパイラディレクティブを受信する段階を含んでよい。代替的には、又は加えて、方法30は、ブロック35にて、コンパイルされることになるコードの静的分析を通してWCVを識別する段階を含んでよい。例えば、方法30は、ブロック36にて、識別されたWCV及びワークロードフラグに基づいて、定数伝播のための漸近的限界の下でコンパイラ時間及び空間複雑度を制限する段階を更に含んでよい。方法30のいくつかの実施形態は、ブロック37にて、Mレベルラティス及び深さ優先探索を利用して定数フットプリントをトレースする段階を更に含んでよく、ここで、Mは1以上である。例えば、ブロック38にて、定数フットプリントは、グローバル定数及び部分定数インスタンスのうちの1又は複数を含む。
方法30の実施形態は、例えば、本明細書に記載されるもの等の、システム、装置、コンピュータ、デバイス等において実装されてよい。より具体的には、方法30のハードウェア実装は、例えば、PLA、FPGA、CPLD等の構成可能ロジック、又は、例えば、ASIC、CMOS若しくはTTL技術等の回路技術を用いる機能固定型ロジックハードウェア、又はこれらの任意の組み合わせを含んでよい。代替的に、又は加えて、方法30は、プロセッサ又はコンピューティングデバイスにより実行される、RAM、ROM、PROM、ファームウェア、フラッシュメモリ等のようなマシン又はコンピュータ可読記憶媒体に記憶されたロジック命令セットとして、1又は複数のモジュールに実装されてよい。例えば、これらのコンポーネントのオペレーションを実行するコンピュータプログラムコードは、PYTHON、PERL、JAVA(登録商標)、SMALLTALK、C++、C#等のようなオブジェクト指向プログラミング言語と、「C」プログラミング言語又は同様のプログラミング言語等の従来の手続き型プログラミング言語とを含む、1又は複数のOS適用可能/適合プログラミング言語の任意の組み合わせで記述されてよい。
例えば、方法30は、以下の例20~25に関連して記載したコンピュータ可読媒体上で実装されてよい。方法30の実施形態又は一部は、ファームウェア、アプリケーション(例えば、アプリケーションプログラミングインタフェース(API)を介して)、又は、オペレーティングシステム(OS)上で実行されているドライバソフトウェアにおいて実装されてよい。加えて、ロジック命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、マシン命令、マシン依存命令、マイクロコード、状態設定データ、集積回路用構成データ、電子回路をパーソナライズする状態情報、及び/又はハードウェア固有の他の構造コンポーネント(例えば、ホストプロセッサ、中央処理装置/CPU、マイクロコントローラ等)を含み得る。
いくつかの実施形態は、ワークロード指向定数伝播のためのコンパイラ技術を有利に提供し得る。ループカウント、画像サイズ等のようなワークロード情報は、多くの場合、コンパイル時に利用可能であり得る定数情報を含む。いくつかの従来の定数伝播ストラテジの制限により、いくつかの種類の定数情報は、プロシージャ統合が適用されない限り、プロシージャコールを通して内部で定数とみなすことができないことがあるが、プロシージャ統合が適用されれば、コールスタックが深い場合にコードエクスプロージョンが生じ得る。例えば、ディープ畳み込みニューラルネットワーク(CNN)等のアプリケーションでは、ネットワークは通常、同じ「conv2d」機能を異なるパラメータで複数回呼び出す複数の畳み込み層を含む。テンソル形状(幅、高さ、チャネル)、フィルタサイズ、ストライド等のようなこれらのパラメータのいくつかは、特定の層のためのコンパイル時間定数とすることができる。そのような定数情報は、キャッシュ、命令ベクトル長等のようなターゲティングハードウェアリソースに基づいてより良好なパフォーマンスを提供するために、一般的な「conv2d」機能の最適化におけるワークロード情報とみなすことができる。Tensorflowを使用した一例のコードスニペットは以下のとおりである。
Figure 2022521127000002
前述のtensorflowニューラルネットワークスニペットにおいて、28×28×3の入力形状のための「tf.layers.conv2d」コールに対する最適化は、7×7×64の入力形状のための同じ「tf.layers.conv2d」コールに対する最適化とは完全に異なるものであり得る。いくつかの他のコンパイラ最適化技術は、コンピレーションを最適化するために、プロシージャインライン技術、ランタイムライブラリ、及び/又は、ドメイン固有コンピレーションを利用してよい。プロシージャインライン技術では、異なるコールサイトにおけるプロシージャを統合することにより、ワークロード情報は、それぞれのコールサイトの別々の各コピーについて自然と一定になる。しかしながら、実際には、これらのワークロード変数を計算のために実際に使用する現実のコンピューティングインテンシブプロシージャ(例えば、本明細書ではカーネルプロシージャと称される)は、多くの場合、深いクラス階層又はコールスタックの下で定義される。定数初期化サイトとカーネルプロシージャコールサイトとの間には長い経路が発生し得る。これは、定数ワークロード情報をカーネルプロシージャに統合することが、スタックを通したすべての中間プロシージャのインライン化を必要とすることを意味している。中間プロシージャをインライン化することで、必要な唯一の情報が特定のワークロード定数である場合に実際には不要なコードエクスプロージョンが生じ得る。
ほとんどのハードウェアプロバイダは、様々なパフォーマンスに重要なカーネルプロシージャのための高度に最適化されたランタイムライブラリを公開するであろう。異なるワークロードに対する最適化に対処するために、これらのライブラリには、動的ワークロードチェックを伴う複数バージョンの実装形態が追加される。動的ワークロードチェックは、一般的にレンジに基づく。特定のワークロード最適化は、ケースバイケースでのみ追加することができ、これにより、ライブラリが重くなり、ハードウェアアーキテクチャが変更される場合にポータブルとすることが難しくなる。また、動的ワークロードチェックは、一部のワークロードについては最良に機能するが、他のものについては比較的悪くなることが多い、すべての現実のユーザケースをカバーできない。ドメイン固有コンピレーションでは、或るジャストインタイム(JIT)コンピレーション技術は、ランタイム時に得られるワークロード情報に基づいてカーネルプロシージャを最適化する。しかしながら、一部のJITコンパイラは、複数のコード変換を必要とする場合があり、ベーシックなパターンマッチング最適化に限定され得る。
有利なことに、いくつかの実施形態は、WCVを識別し、SSAグラフにおけるそれぞれのエッジにワークロードフラグ(「WorkloadFlag」)を付加して、従来の定数伝播と同様の漸近的限界の下でアルゴリズム時間及び空間複雑度を制限するように、コンパイラディレクティブのための技術を提供し得る。また、いくつかの実施形態は、Mレベルラティス及び深さ優先探索を利用して、グローバル定数だけでなく、更なるコンパイラ最適化のための部分定数インスタンスも利用する、定数フットプリントをトレースしてよい。
コンパイラのいくつかの実施形態は、異なるワークロードのためのパフォーマンスに重要なカーネルプロシージャに対して更なる特殊化を実現でき、これにより、最適化が複数のハードウェアプラットフォームのためにポータブルとなり、ランタイムライブラリに比較してアーキテクチャ変更がよりフレキシブルになる。いくつかの実施形態において、深いコールスタックを通してこれらのプロシージャを直接インライン化する代わりに、より多くのワークロード定数をカーネルプロシージャに渡してよく、最適化を既存の大きく複雑なフレームワークにより容易に適用できる。有利なことに、いくつかの実施形態は、ワークロード又はアプリケーションの変更に適応可能であるように最適化技術を提供する。
ここで図4を参照すると、処理フロー40の一実施形態は、ワークロード定数伝播を用いた深さ優先SCCの一例を示している。フロー40は、ブロック41にて、WCVを識別する段階と、ブロック42にて、SSAグラフにWorkloadFlagを付加する段階と、ブロック43にて、プログラムフローグラフを提供する段階とを含む。フロー40は、次に、ブロック44にて、SSAグラフ及びプログラムフローグラフに対してワークロード伝播を用いた深さ優先SCCを実行する段階と、続いて、ブロック45にて、ワークロード定数リストを出力する段階と、ブロック46にて、特殊最適化を実行する段階とを含んでよい。ブロック44における深さ優先SCCでは、下記でより詳細に記載されるように、フロー40は、ブロック44aにて、プログラムフローグラフの深さ優先探索を実行する段階、及び、ブロック44bにて、デスティネーションノードに対して
Figure 2022521127000003
を実行する段階(ここで、
Figure 2022521127000004
はφ関数に対応する)で開始してよい。フロー40は、次に、下記でより詳細に記載されるように、ブロック44cにて、式を評価するためにVisitExpressionを実行する段階を含んでよい。式が割り当てノードの一部である場合、フロー40は、ブロック44dにて(例えば、下記でより詳細に記載されるように)、すべてのSSAエッジについてSSAグラフの深さ優先探索を実行する段階を含んでよい。式が条件付き分岐を制御する場合、フロー40は、(例えば、下記でより詳細に記載されるように)条件式の値に従って、そのエッジに対してプログラムフローグラフの深さ優先探索を実行する段階を含んでよい。
プログラムは通常、プログラムの時間のほとんどをループの実行に費やし得る。したがって、WCVを識別する段階には、ループカウントを制御するすべての変数を見つけることが含まれる。いくつかの実施形態は、有利なことに、プログラマがワークロード変数を直接指定することを可能にするように、コンパイラディレクティブを定義し得る。しかしながら、実際には、WCVはコンパイラの静的分析を通して識別される場合もある。静的分析にはすべてのループが含まれ、コンピレーション時間が長くなる可能性がある。
いくつかの実施形態において、コンパイラディレクティブは、パフォーマンスに重要なカーネルプロシージャ内で定義され得る。各ディレクティブは、ワークロード変数のリストをまとめて指定し、カーネルプロシージャに対するコンパイラの特殊最適化のためのヒントを提供する。以下の疑似コードは、「Conv2d」カーネル関数における付加されたプラグマ「ワークロード」としてのワークロードコンパイラディレクティブの「C」プログラミング言語の例を示している。
Figure 2022521127000005
ここで図5を参照すると、ワークロードコンパイラディレクティブ51の一般的なフォーマットの一実施形態が、対応するWorkloadList構造52の一実施形態とともに示されている。例えば、WorkloadList構造52は、各ワークロードコンパイラディレクティブ51と関連付けられてよい。WorkloadList構造52は、ワークロード変数の全組み合わせのための値を含むワークロードインスタンスのリストを格納する。ワークロードコンパイラディレクティブ51では、#pragma workload(var1,var2,...,varN),Var1...VarNは、カーネルプロシージャにおいて定義されている有効な変数名に対応する。WorkloadList構造52は、ワークロードの異なるインスタンスを表すそれぞれの変数の定数値の群を含む。
ここで図6を参照すると、行列構造の一実施形態が、Mレベルラティス60と称され得る。また、例えば、いくつかの実施形態は、フローグラフを通してすべての定数インスタンスを記録可能であるように定数伝播ラティスを調整し、これはMレベルラティス60によって示されるように図示の交わり規則で視覚的に表され得る。ここで、Tは、行列の最上部に対応し、
Figure 2022521127000006
は行列の最下部に対応し(例えば、終端状態に対応する)、πは設定された共通部分演算を表す。各Ciは、任意定数を表す。Mは、ラティスが移行できる定数の数を制御するように事前設定された固定数(例えば、M>1)である。
いくつかの実施形態は、古典的なSCC伝播に基づき以下の変更を伴った技術を提供し得る:1)定数値は、Mレベルラティスを使用して評価される、2)反復トラバーサルの代わりに深さ優先探索を使用して、同じ実行経路に沿ったWCVの値をトレールする、3)Mレベルラティスの値を評価する場合にMを調整するようにWorkloadFlagを付加する。WCVに関して、いくつかの実施形態は、Mの値に応じて2倍超の低減を要求し得る。すべての他の変数に関して、それらは従前のように2倍だけ低減できる。Mに対して前述の制限をかけることで、有利なことに、Mの値が大きい場合の漸近的複雑度の拡大が回避される。いくつかの実施形態は、有利なことに、WCVの定数値を取得しながら、従来のSCCと比較した場合に同様の漸近的複雑度を提供し得る。
いくつかの実施形態は、最初に、エッジがワークロード変数にリンクするか否かを示すように、各SSAエッジにWorkloadFlagを付加する。ワークロードコンパイラディレクティブに列挙された各変数に関して、いくつかの実施形態は、変数defサイト及び式の部分において使用されている変数によるSSAグラフにおけるuse-defチェーンを通ってトラバースする。WorkloadFlagは、トラバーサルにおいて訪れたすべてのエッジに関してTrueに設定される。また、SCC技法と同様に、いくつかの実施形態は、各プログラムフローグラフのエッジにExecutableFlagを付加し、ExecutableFlagをデフォルトでFalseに設定する。各LatticeCellは最初、Tに設定される。
いくつかの実施形態は、次に、プログラムフローグラフにおけるエントリエッジからDepth_First_Search_Flowgraphを開始し、終端するまでこれを行う。ここで、Depth_First_Search_Flowgraph(Edge)は以下のように定義される。
Figure 2022521127000007
いくつかの実施形態において、
Figure 2022521127000008
は以下のように定義される。
Figure 2022521127000009
いくつかの実施形態において、VisitExpressionは以下のように定義される。
Figure 2022521127000010
いくつかの実施形態において、Depth_First_Search_SSA(Edge)は以下のように定義される。
Figure 2022521127000011
図7Aは、システム10、装置20、方法30、フロー40、WorkloadList構造52、Mレベルラティス60の1又は複数の態様、及び/又は、本明細書に記載の他の実施形態のいずれかを実施してよいコンパイラ装置132(132a~132c)を示している。コンパイラ装置132は、ロジック命令、構成可能ロジック、機能固定型ハードウェアロジックを含んでよく、既に論じられたコンパイラロジック13(図1)と容易に置換され得る。WCVアイデンティファイア132aは、WCVを識別してよい。WorkloadFlagアッダ132bは、静的単一代入グラフにおけるそれぞれのエッジにワークロードフラグを付加してよい。定数プロパゲータ132cは、識別されたWCV及びワークロードフラグに基づいて定数を伝播してよい。いくつかの実施形態において、WCVアイデンティファイア132aは、WCVを識別するためにコンパイラディレクティブを受信するように構成されてよい。代替的には、又は加えて、WCVアイデンティファイア132aは、コンパイルされることになるコードの静的分析を通してWCVを識別するように構成されてよい。例えば、定数プロパゲータ132cは、識別されたWCV及びワークロードフラグに基づいて、定数伝播のための漸近的限界の下でコンパイラ時間及び空間複雑度を制限するように構成されてもよい。いくつかの実施形態において、定数プロパゲータ132cは、Mレベルラティス及び深さ優先探索を利用して定数フットプリントをトレースするように更に構成されてよく、ここで、Mは1以上である。例えば、定数フットプリントは、グローバル定数及び部分定数インスタンスのうちの1又は複数を含んでよい。
ここで図7Bを参照すると、コンパイラ装置134(134a、134b)が示されており、ここでは、ロジック134b(例えば、トランジスタアレイ及び他の集積回路/ICコンポーネント)が基板134a(例えば、シリコン、サファイア、ヒ化ガリウム)に連結されている。ロジック134bは、一般に、システム10、装置20、方法30、フロー40、WorkloadList構造52、Mレベルラティス60の1又は複数の態様、及び/又は、本明細書に記載の他の実施形態のいずれかを実施してよい。従って、ロジック134bは、WCVを識別し、静的単一代入グラフにおけるそれぞれのエッジにワークロードフラグを付加し、識別されたWCV及びワークロードフラグに基づいて定数を伝播するための技術を備えてよい。いくつかの実施形態において、ロジック134bは、WCVを識別するためにコンパイラディレクティブを受信するように構成されてよい。代替的には、又は加えて、ロジック134bは、コンパイルされることになるコードの静的分析を通してWCVを識別するように構成されてよい。例えば、ロジック134bは、識別されたWCV及びワークロードフラグに基づいて、定数伝播のための漸近的限界の下でコンパイラ時間及び空間複雑度を制限するように構成されてもよい。いくつかの実施形態において、ロジック134bは、Mレベルラティス及び深さ優先探索を利用して定数フットプリントをトレースするように更に構成されてよく、ここで、Mは1以上である。例えば、定数フットプリントは、グローバル定数及び部分定数インスタンスのうちの1又は複数を含んでよい。1つの例において、装置134は、半導体ダイ、チップ及び/又はパッケージである。
図8は、1つの実施形態によるプロセッサコア200を示す。プロセッサコア200は、マイクロプロセッサ、組み込みプロセッサ、デジタル信号プロセッサ(DSP)、ネットワークプロセッサ、又はコードを実行する他のデバイス等の任意のタイプのプロセッサのコアであってよい。図8は、プロセッサコア200を1つのみ示しているが、代替的には、処理要素は、図8に示すプロセッサコア200を2つ以上備えてよい。プロセッサコア200は、シングルスレッドコアであってもよいし、又は、少なくとも1つの実施形態については、プロセッサコア200は、コアごとに2つ以上のハードウェアスレッドコンテキスト(又は、「論理プロセッサ」を含み得るという点で、マルチスレッドであってよい。
図8はまた、プロセッサコア200に連結されたメモリ270を示している。メモリ270は、当業者にとって既知か、又はさもなければ当業者が入手可能な(メモリ階層の様々な層を含む)多種多様なメモリのいずれかであってよい。メモリ270は、プロセッサコア200によって実行される1又は複数のコード213命令を含んでよく、コード213は、システム10、装置20、方法30、フロー40、WorkloadList構造52、Mレベルラティス60の1又は複数の態様、及び/又は、既に論じた本明細書に記載の他の実施形態のいずれかを実施してよい。プロセッサコア200は、コード213によって示される命令のプログラムシーケンスに従う。各命令は、フロントエンドポーション210に入り、1又は複数のデコーダ220によって処理されてよい。デコーダ220は、予め定義されたフォーマットの固定幅マイクロオペレーション等のマイクロオペレーションをその出力として生成してよく、又は、他の命令、マイクロ命令、若しくは元のコード命令を反映する制御信号を生成してよい。示されているフロントエンドポーション210はまた、レジスタリネーミングロジック225及びスケジューリングロジック230を含み、それらは一般に、リソースを割り当て、変換命令に対応するオペレーションを実行のためにキューに入れる。
プロセッサコア200は、実行ユニットのセット255-1から255-Nを有する実行ロジック250を含むように示されている。いくつかの実施形態は、特定の機能又は機能セットに専用の複数の実行ユニットを含んでよい。他の実施形態は、ただ1つの実行ユニット、又は、特定の機能を実行できる1つの実行ユニットを含んでよい。示された実行ロジック250は、コード命令によって指定されるオペレーションを実行する。
コード命令によって指定されたオペレーションの実行が完了した後、バックエンドロジック260はコード213の命令をリタイアさせる。1つの実施形態において、プロセッサコア200は、アウトオブオーダ実行が可能だが、命令のインオーダリタイアメントを必要とする。リタイアメントロジック265は、当業者に既知の様々な形をとってよい(例えば、リオーダバッファ等)。このように、コード213の実行中に、プロセッサコア200では、少なくとも、デコーダが生成する出力と、レジスタリネーミングロジック225が利用するハードウェアレジスタ及びテーブルと、実行ロジック250が変更するあらゆるレジスタ(図示せず)とに関する変化がある。
図8には示されていないが、処理要素が、プロセッサコア200を有するチップ上に他の要素を含んでよい。例えば、処理要素が、プロセッサコア200とともにメモリ制御ロジックを含んでよい。処理要素は、I/O制御ロジックを含んでよく、及び/又は、メモリ制御ロジックと統合されたI/O制御ロジックを含んでよい。処理要素は、1又は複数のキャッシュも含んでよい。
ここで図9を参照すると、一実施形態に係るシステム1000の実施形態のブロック図が示されている。図9に示されているのはマルチプロセッサシステム1000である。マルチプロセッサシステム1000は、第1の処理要素1070及び第2の処理要素1080を備える。2つの処理要素1070及び1080が示されているが、システム1000に係る一実施形態は、そのような処理要素を1つだけしか含まなくてもよいことを理解されたい。
システム1000は、ポイントツーポイント相互接続システムとして図示されている。第1の処理要素1070と第2の処理要素1080とは、ポイントツーポイント相互接続1050を介して連結される。図9に示される相互接続の任意のもの又はすべてのものは、ポイントツーポイント相互接続ではなくマルチドロップバスとして実装されてよいことが理解されるべきである。
図9に示すように、処理要素1070及び1080のそれぞれは、第1のプロセッサコア及び第2のプロセッサコア(すなわち、プロセッサコア1074a及び1074b、並びに、プロセッサコア1084a及び1084b)を含むマルチコアプロセッサであってよい。そのようなコア1074a、1074b、1084a、1084bは、図8に関連して上記で論じたものと同様の方式で命令コードを実行するように構成されてよい。
各処理要素1070、1080は、少なくとも1つの共有キャッシュ1896a、1896b(例えば、スタティックランダムアクセスメモリ/SRAM)を有してよい。共有キャッシュ1896a及び1896bはそれぞれ、コア1074a、1074b及び1084a、1084b等の、プロセッサの1又は複数のコンポーネントによって利用されるデータ(例えば、オブジェクト、命令)を格納してよい。例えば、共有キャッシュ1896a、1896bは、プロセッサのコンポーネントがより高速にアクセスできるよう、メモリ1032、1034に記憶されたデータをローカルにキャッシュしてよい。1又は複数の実施形態において、共有キャッシュ1896a、1896bは、レベル2(L2)、レベル3(L3)、レベル4(L4)若しくは他のレベルのキャッシュ等の1又は複数の中間レベルキャッシュ、ラストレベルキャッシュ(LLC)、及び/又は、これらの組み合わせを含んでよい。
2つの処理要素1070、1080のみが示されているが、実施形態の範囲は、このようには限定されないことを理解されたい。他の実施形態では、所与のプロセッサにおいて1又は複数の追加の処理要素が存在してよい。代替的には、処理要素1070、1080のうちの1又は複数は、アクセラレータ又はフィールドプログラマブルゲートアレイ等のプロセッサ以外の要素であってよい。例えば、追加の処理要素は、第1のプロセッサ1070と同じ追加のプロセッサ、第1のプロセッサ1070とは異種又は非対称のプロセッサである追加のプロセッサ、アクセラレータ(例えば、グラフィックスアクセラレータ若しくはデジタル信号処理(DSP)ユニット等)、フィールドプログラマブルゲートアレイ、又は、任意の他の処理要素を含んでよい。処理要素1070と処理要素1080との間には、アーキテクチャ特性、マイクロアーキテクチャ特性、熱的特性、及び消費電力特性等を含む多種多様な価値基準に関して様々な差異があり得る。これらの差異は、処理要素1070と処理要素1080との間の非対称性及び異種性として効果的に現れ得る。少なくとも1つの実施形態では、同じダイパッケージ中に様々な処理要素1070、1080が存在してよい。
第1の処理要素1070は更に、メモリコントローラロジック(MC)1072と、ポイントツーポイント(P-P)インタフェース1076及び1078とを有してよい。同様に、第2の処理要素1080は、MC1082と、P-Pインタフェース1086及び1088とを有してよい。図9に示されるように、MC1072及び1082は、プロセッサをそれぞれのメモリ、すなわち、メモリ1032とメモリ1034とに連結する。それらのメモリは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であってよい。MC1072及び1082は処理要素1070及び1080の中に統合されているものとして示されているが、代替の実施形態では、MCロジックは、処理要素1070、1080に統合されるのではなく、処理要素1070、1080の外部の別個のロジックであってよい。
第1の処理要素1070及び第2の処理要素1080は、P‐P相互接続1076、1086をそれぞれ介して、I/Oサブシステム1090に連結されてよい。図9に示されるように、I/Oサブシステム1090は、TEE1097(例えば、セキュリティコントローラ)と、P-Pインタフェース1094及び1098とを備える。更に、I/Oサブシステム1090は、I/Oサブシステム1090を高性能グラフィックスエンジン1038と連結するインタフェース1092を備える。1つの実施形態において、グラフィックスエンジン1038をI/Oサブシステム1090に連結するのに、バス1049が使用されてよい。代替的には、ポイントツーポイント相互接続がこれらのコンポーネントを連結してよい。
更に、I/Oサブシステム1090は、インタフェース1096を介して第1のバス1016に連結されてよい。1つの実施形態において、第1のバス1016は、ペリフェラルコンポーネント相互接続(PCI)バス、又は、PCIエクスプレスバス若しくは別の第3世代I/O相互接続バス等のバスであってよいが、当該実施形態の範囲はそれに限定されない。
図9に示されているように、第1のバス1016には、第1のバス1016を第2のバス1020に連結し得るバスブリッジ1018とともに、様々なI/Oデバイス1014(例えば、カメラ、センサ)が連結され得る。1つの実施形態において、第2のバス1020は、ローピンカウント(LPC)バスであってよい。1つの実施形態において、例えば、キーボード/マウス1012、ネットワークコントローラ/通信デバイス1026(これはコンピュータネットワークと通信してよい)、及び、コード1030を含んでよいディスクドライブ又は他のマスストレージデバイス等のデータストレージユニット1019を含む様々なデバイスが第2のバス1020に連結されてよい。コード1030は、上述の方法のうちの1又は複数の実施形態を実行するための命令を含んでよい。従って、図示のコード1030はシステム10、装置20、方法30、フロー40、WorkloadList構造52、Mレベルラティス60の1又は複数の態様、及び/又は、既に論じた本明細書に記載の他の実施形態のいずれかを実施してよく、既に論じたコード213(図8)と同様であってよい。更に、オーディオI/O1024が第2のバス1020に連結されてよい。
他の実施形態が想定されることに留意されたい。例えば、図9のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバス若しくは別のそのような通信トポロジを実装してよい。
追加の注記及び例
例1は、プロセッサと、上記プロセッサに通信可能に連結されるメモリと、ワークロード制御変数を識別し、静的単一代入グラフにおけるそれぞれのエッジにワークロードフラグを付加し、上記識別されたワークロード制御変数及び上記ワークロードフラグに基づいて定数を伝播する、ように上記プロセッサに通信可能に連結されるコンパイラロジックと、を備える、電子処理システムを含む。
例2は、上記コンパイラロジックが、更に、上記ワークロード制御変数を識別するためにコンパイラディレクティブを受信するようになっている、例1のシステムを含む。
例3は、上記コンパイラロジックが、更に、コンパイルされることになるコードの静的分析を通して、上記ワークロード制御変数を識別するようになっている、例1~2のいずれかのシステムを含む。
例4は、上記コンパイラロジックが、更に、上記識別されたワークロード制御変数及び上記ワークロードフラグに基づいて、定数伝播のための漸近的限界の下でコンパイラ時間及び空間複雑度を制限するようになっている、例1~3のいずれかのシステムを含む。
例5は、上記コンパイラロジックが、更に、Mレベルラティス及び深さ優先探索を利用して定数フットプリントをトレースするようになっており、Mは1以上である、例1~4のいずれかのシステムを含む。
例6は、上記定数フットプリントが、グローバル定数及び部分定数インスタンスのうちの1又は複数を含む、例5のシステムを含む。
例7は、コンパイラとともに使用される半導体パッケージ装置であって、1又は複数の基板と、上記1又は複数の基板に連結されるロジックであって、上記ロジックは、構成可能ロジック及び機能固定型ハードウェアロジックのうちの1又は複数において少なくとも部分的に実装され、上記ロジックは、ワークロード制御変数を識別し、静的単一代入グラフにおけるそれぞれのエッジにワークロードフラグを付加し、上記識別されたワークロード制御変数及び上記ワークロードフラグに基づいて定数を伝播する、ように上記1又は複数の基板に連結される、ロジックとを備える、半導体パッケージ装置を含む。
例8は、上記ロジックが、更に、上記ワークロード制御変数を識別するためにコンパイラディレクティブを受信するようになっている、例7の装置を含む。
例9は、上記ロジックは、更に、コンパイルされることになるコードの静的分析を通して上記ワークロード制御変数を識別するようになっている、例7~8のいずれかの装置を含む。
例10は、上記ロジックが、更に、上記識別されたワークロード制御変数及び上記ワークロードフラグに基づいて、定数伝播のための漸近的限界の下でコンパイラ時間及び空間複雑度を制限するようになっている、例7~9のいずれかの装置を含む。
例11は、上記ロジックが、更に、Mレベルラティス及び深さ優先探索を利用して定数フットプリントをトレースするようになっており、Mは1以上である、例7~10のいずれかの装置を含む。
例12は、上記定数フットプリントが、グローバル定数及び部分定数インスタンスのうちの1又は複数を含む、例11の装置を含む。
例13は、上記1又は複数の基板に連結される上記ロジックは、上記1又は複数の基板内に位置するトランジスタチャネル領域を含む、例7~12のいずれかの装置を含む。
例14は、ワークロード制御変数を識別する段階と、静的単一代入グラフにおけるそれぞれのエッジにワークロードフラグを付加する段階と、上記識別されたワークロード制御変数及び上記ワークロードフラグに基づいて定数を伝播する段階と、を含む、コンパイルの方法を含む。
例15は、上記ワークロード制御変数を識別するためにコンパイラディレクティブを受信する段階を更に含む、例14の方法を含む。
例16は、コンパイルされることになるコードの静的分析を通して上記ワークロード制御変数を識別する段階を更に含む、例14~15のいずれかの方法を含む。
例17は、前記識別されたワークロード制御変数及び上記ワークロードフラグに基づいて、定数伝播のための漸近的限界の下でコンパイラ時間及び空間複雑度を制限する段階を更に含む、例14~16のいずれかの方法を含む。
例18は、Mレベルラティス及び深さ優先探索を利用して定数フットプリントをトレースする段階であって、Mは1以上である、段階を更に含む、例14~17のいずれかの方法を含む。
例19は、上記定数フットプリントは、グローバル定数及び部分定数インスタンスのうちの1又は複数を含む、例18の方法を含む。
例20は、コンピューティングデバイスによって実行されると、上記コンピューティングデバイスに、ワークロード制御変数を識別することと、静的単一代入グラフにおけるそれぞれのエッジにワークロードフラグを付加することと、上記識別されたワークロード制御変数及び上記ワークロードフラグに基づいて定数を伝播することと、を行わせる命令のセットを含む、少なくとも1つのコンピュータ可読記憶媒体を含む。
例21は、上記コンピューティングデバイスによって実行されると、上記コンピューティングデバイスに、前記ワークロード制御変数を識別するためにコンパイラディレクティブを受信することを行わせる更なる命令のセットを含む、例20の少なくとも1つのコンピュータ可読記憶媒体を含む。
例22は、上記コンピューティングデバイスによって実行されると、上記コンピューティングデバイスに、コンパイルされることになるコードの静的分析を通して上記ワークロード制御変数を識別することを行わせる更なる命令のセットを含む、例20の少なくとも1つのコンピュータ可読記憶媒体を含む。
例23は、上記コンピューティングデバイスによって実行されると、上記コンピューティングデバイスに、上記識別されたワークロード制御変数及び上記ワークロードフラグに基づいて、定数伝播のための漸近的限界の下でコンパイラ時間及び空間複雑度を制限すること、を行わせる更なる命令のセットを含む、例20の少なくとも1つのコンピュータ可読記憶媒体を含む。
例24は、上記コンピューティングデバイスによって実行されると、上記コンピューティングデバイスに、Mレベルラティス及び深さ優先探索を利用して定数フットプリントをトレースすることであって、Mは1以上であることを行わせる更なる命令のセットを含む、例20の少なくとも1つのコンピュータ可読記憶媒体を含む。
例25は、上記定数フットプリントが、グローバル定数及び部分定数インスタンスのうちの1又は複数を含む、例24の少なくとも1つのコンピュータ可読記憶媒体を含む。
例26は、ワークロード制御変数を識別するための手段と、静的単一代入グラフにおけるそれぞれのエッジにワークロードフラグを付加するための手段と、上記識別されたワークロード制御変数及び上記ワークロードフラグに基づいて定数を伝播するための手段と、を備える、コンパイラ装置を含む。
例27は、上記ワークロード制御変数を識別するためにコンパイラディレクティブを受信するための手段を更に含む、例26の装置を含む。
例28は、コンパイルされることになるコードの静的分析を通して上記ワークロード制御変数を識別するための手段を更に含む、例26~27のいずれかの装置を含む。
例29は、前記識別されたワークロード制御変数及び上記ワークロードフラグに基づいて、定数伝播のための漸近的限界の下でコンパイラ時間及び空間複雑度を制限するための手段を更に含む、例26~28のいずれかの装置を含む。
例30は、Mレベルラティス及び深さ優先探索を利用して定数フットプリントをトレースするための手段であって、Mは1以上である、手段を更に含む、例26~29のいずれかの装置を含む。
例31は、上記定数フットプリントが、グローバル定数及び部分定数インスタンスのうちの1又は複数を含む、例30の装置を含む。
実施形態は、あらゆるタイプの半導体集積回路(「IC」)チップとの使用に適用可能である。これらのICチップの例として、限定されないが、プロセッサ、コントローラ、チップセットコンポーネント、プログラマブルロジックアレイ(PLA)、メモリチップ、ネットワークチップ、システムオンチップ(SoC)、SSD/NANDコントローラASIC等が挙げられる。加えて、図面のいくつかにおいて、信号導線が線で表されている。この一部は、より多くの成分信号経路を示すために、他と異なっていてよく、複数の成分信号経路を示すために番号ラベルを有してよく、及び/又は、主要情報の流れ方向を示すべく1又は複数の端部に矢印を有していてよい。しかしながら、このことは限定的に解釈されるべきではない。むしろ、かかる追加の詳細は、1又は複数の例示的な実施形態に関連して使用され、回路の理解をより容易にし得るものである。追加の情報を有するか否かにかかわらず、提示されるあらゆる信号線は実際には、複数の方向に移動し得る1又は複数の信号を含んでよく、例えば、差動ペアで実装されるデジタル線又はアナログ線、光ファイバ線、及び/又は、シングルエンド線といったあらゆる好適なタイプの信号方式で実装されてもよい。
例示的なサイズ/モデル/値/範囲が与えられている場合があるが、実施形態はそれに限定されるものではない。時間を経て、製造技術(例えばフォトリソグラフィ)が成熟するにつれ、より小型のデバイスが製造され得るものと予期される。加えて、例示及び議論を簡潔にするために、また、実施形態の特定の態様を不明瞭にしないように、ICチップ及び他のコンポーネントへの周知の電源/グラウンド接続は、図中に示されていても、示されていなくてもよい。更に、実施形態を不明瞭にすることを回避すべく、また、かかるブロック図構成の実装に関する詳細は、実施形態が実装されるべきプラットフォームに大きく依存すること、すなわち、かかる詳細は当業者の十分知見の範囲内であるのに鑑みて、構成は、ブロック図の形式で示されてよい。例示的な実施形態を説明すべく具体的な詳細(例えば、回路)が記載される場合、これらの具体的な詳細なしで、又はこれらの具体的な詳細の変形例によって、実施形態が実施され得ることが、当業者には明らかであろう。従って、説明は、限定的ではなく、例示的なものとしてみなされるべきである。
「連結」という用語は、対象のコンポーネント間の任意のタイプの直接的又は間接的関係を指すために本明細書において使用されてよく、電気的、機械的、流体的、光学的、電磁的、電子機械的、又は他の接続に適用されてよい。また、「第1」、「第2」等の用語は、議論を容易にするためだけに本明細書において使用されてよく、別途記載がない限り、何ら特定の時間的又は時系列的な意味を含まない。
本願及び特許請求の範囲において用いられる「のうちの1又は複数」という用語によって結合される項目の列挙は、列挙された用語の任意の組み合わせを意味してよい。例えば、「A、B、及びCのうちの1又は複数」という表現及び「A、B、又はCのうちの1又は複数」という表現はともに、A、B、C、A及びB、A及びC、B及びC、又は、A、B、及びCを意味してよい。
当業者であれば、前述の説明から、実施形態の広範な技術が、様々な形態で実装され得ることを理解するであろう。したがって、実施形態がその特定の例に関連して説明されてきたが、実施形態の真の範囲はそれに限定されるべきではない。なぜなら、図面、明細書、及び以下の特許請求の範囲を検討すれば、他の変形形態が当業者に明らかになるからである。

Claims (26)

  1. プロセッサと、
    前記プロセッサに通信可能に連結されるメモリと、
    ワークロード制御変数を識別し、
    静的単一代入グラフにおけるそれぞれのエッジにワークロードフラグを付加し、
    前記識別されたワークロード制御変数及び前記ワークロードフラグに基づいて定数を伝播する、
    ように前記プロセッサに通信可能に連結されるコンパイラロジックと、
    を備える、電子処理システム。
  2. 前記コンパイラロジックは、更に、
    前記ワークロード制御変数を識別するためにコンパイラディレクティブを受信する、
    ようになっている、請求項1に記載の電子処理システム。
  3. 前記コンパイラロジックは、更に、
    コンパイルされることになるコードの静的分析を通して、前記ワークロード制御変数を識別する、
    ようになっている、請求項1に記載の電子処理システム。
  4. 前記コンパイラロジックは、更に、
    前記識別されたワークロード制御変数及び前記ワークロードフラグに基づいて、定数伝播のための漸近的限界の下でコンパイラ時間及び空間複雑度を制限する、
    ようになっている、請求項1~3のいずれか一項に記載の電子処理システム。
  5. 前記コンパイラロジックは、更に、
    Mレベルラティス及び深さ優先探索を利用して定数フットプリントをトレースする、
    ようになっており、Mは1以上である、請求項1~3のいずれか一項に記載の電子処理システム。
  6. 前記定数フットプリントは、グローバル定数及び部分定数インスタンスのうちの1又は複数を含む、請求項5に記載の電子処理システム。
  7. コンパイラとともに使用される半導体パッケージ装置であって、
    1又は複数の基板と、
    前記1又は複数の基板に連結されるロジックであって、前記ロジックは、構成可能ロジック及び機能固定型ハードウェアロジックのうちの1又は複数において少なくとも部分的に実装され、前記ロジックは、
    ワークロード制御変数を識別し、
    静的単一代入グラフにおけるそれぞれのエッジにワークロードフラグを付加し、
    前記識別されたワークロード制御変数及び前記ワークロードフラグに基づいて定数を伝播する、
    ように前記1又は複数の基板に連結される、ロジックと、
    を備える、半導体パッケージ装置。
  8. 前記ロジックは、更に、
    前記ワークロード制御変数を識別するためにコンパイラディレクティブを受信する、
    ようになっている、請求項7に記載の半導体パッケージ装置。
  9. 前記ロジックは、更に、
    コンパイルされることになるコードの静的分析を通して前記ワークロード制御変数を識別する、
    ようになっている、請求項7に記載の半導体パッケージ装置。
  10. 前記ロジックは、更に、
    前記識別されたワークロード制御変数及び前記ワークロードフラグに基づいて、定数伝播のための漸近的限界の下でコンパイラ時間及び空間複雑度を制限する、
    ようになっている、請求項7~9のいずれか一項に記載の半導体パッケージ装置。
  11. 前記ロジックは、更に、
    Mレベルラティス及び深さ優先探索を利用して定数フットプリントをトレースする、
    ようになっており、Mは1以上である、請求項7~9のいずれか一項に記載の半導体パッケージ装置。
  12. 前記定数フットプリントは、グローバル定数及び部分定数インスタンスのうちの1又は複数を含む、請求項11に記載の半導体パッケージ装置。
  13. 前記1又は複数の基板に連結される前記ロジックは、前記1又は複数の基板内に位置するトランジスタチャネル領域を含む、請求項7~9のいずれか一項に記載の半導体パッケージ装置。
  14. コンパイルの方法であって、
    ワークロード制御変数を識別する段階と、
    静的単一代入グラフにおけるそれぞれのエッジにワークロードフラグを付加する段階と、
    前記識別されたワークロード制御変数及び前記ワークロードフラグに基づいて定数を伝播する段階と、
    を含む、方法。
  15. 前記ワークロード制御変数を識別するためにコンパイラディレクティブを受信する段階、
    を更に含む、請求項14に記載の方法。
  16. コンパイルされることになるコードの静的分析を通して前記ワークロード制御変数を識別する段階、
    を更に含む、請求項14に記載の方法。
  17. 前記識別されたワークロード制御変数及び前記ワークロードフラグに基づいて、定数伝播のための漸近的限界の下でコンパイラ時間及び空間複雑度を制限する段階、
    を更に含む、請求項14~16のいずれか一項に記載の方法。
  18. Mレベルラティス及び深さ優先探索を利用して定数フットプリントをトレースする段階であって、Mは1以上である、段階、
    を更に含む、請求項14~16のいずれか一項に記載の方法。
  19. 前記定数フットプリントは、グローバル定数及び部分定数インスタンスのうちの1又は複数を含む、請求項18に記載の方法。
  20. コンピューティングデバイスに、
    ワークロード制御変数を識別する手順と、
    静的単一代入グラフにおけるそれぞれのエッジにワークロードフラグを付加する手順と、
    前記識別されたワークロード制御変数及び前記ワークロードフラグに基づいて定数を伝播する手順と
    を実行させる、プログラム。
  21. 前記コンピューティングデバイスに、
    前記ワークロード制御変数を識別するためにコンパイラディレクティブを受信する手順
    を更に実行させる、請求項20に記載のプログラム。
  22. 前記コンピューティングデバイスに、
    コンパイルされることになるコードの静的分析を通して前記ワークロード制御変数を識別する手順
    を更に実行させる、請求項20に記載のプログラム。
  23. 前記コンピューティングデバイスに、
    前記識別されたワークロード制御変数及び前記ワークロードフラグに基づいて、定数伝播のための漸近的限界の下でコンパイラ時間及び空間複雑度を制限する手順
    を更に実行させる、請求項20~22のいずれか一項に記載のプログラム。
  24. 前記コンピューティングデバイスに、
    Mレベルラティス及び深さ優先探索を利用して定数フットプリントをトレースする手順であって、Mは1以上である、手順、
    を更に実行させる、請求項20~22のいずれか一項に記載のプログラム。
  25. 前記定数フットプリントは、グローバル定数及び部分定数インスタンスのうちの1又は複数を含む、請求項24に記載のプログラム。
  26. 請求項20から25のいずれか一項に記載のプログラムを記憶する、少なくとも1つのコンピュータ可読記憶媒体。
JP2021538706A 2019-02-26 2019-02-26 コンパイラのためのワークロード指向定数伝播 Active JP7287743B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2019/076128 WO2020172788A1 (en) 2019-02-26 2019-02-26 Workload oriented constant propagation for compiler

Publications (2)

Publication Number Publication Date
JP2022521127A true JP2022521127A (ja) 2022-04-06
JP7287743B2 JP7287743B2 (ja) 2023-06-06

Family

ID=72239045

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021538706A Active JP7287743B2 (ja) 2019-02-26 2019-02-26 コンパイラのためのワークロード指向定数伝播

Country Status (6)

Country Link
US (1) US11922152B2 (ja)
EP (1) EP3931685A4 (ja)
JP (1) JP7287743B2 (ja)
KR (1) KR20210127923A (ja)
CN (1) CN113330418A (ja)
WO (1) WO2020172788A1 (ja)

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003196106A (ja) * 2001-12-20 2003-07-11 Internatl Business Mach Corp <Ibm> プログラム変換方法、コンピュータ装置及びプログラム
JPWO2005078579A1 (ja) * 2004-02-12 2007-10-18 松下電器産業株式会社 プログラム変換装置およびプログラム変換方法
US20090125894A1 (en) * 2007-11-14 2009-05-14 Nair Sreekumar R Highly scalable parallel static single assignment for dynamic optimization on many core architectures
JPWO2009098739A1 (ja) * 2008-02-05 2011-05-26 パナソニック株式会社 プログラム最適化装置およびプログラム最適化方法
JP2015114874A (ja) * 2013-12-12 2015-06-22 国立大学法人東京工業大学 プログラミング言語による論理回路記述から論理回路を生成するための装置及び方法
US20160306847A1 (en) * 2015-04-15 2016-10-20 Futurewei Technologies, Inc. Apparatus and Method for Using Parameterized Intermediate Representation for Just-In-Time Compilation in Database Query Execution Engine
WO2018127557A1 (en) * 2017-01-05 2018-07-12 Koninklijke Philips N.V. Compiling device and method

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2834171B2 (ja) * 1989-02-06 1998-12-09 株式会社日立製作所 コンパイル方法
US5805895A (en) * 1996-06-09 1998-09-08 Motorola, Inc. Method and apparatus for code translation optimization
US5999735A (en) * 1997-04-01 1999-12-07 Intel Corporation Method for constructing a static single assignment language accommodating complex symbolic memory references
US6016398A (en) * 1997-04-01 2000-01-18 Intel Corporation Method for using static single assignment to color out artificial register dependencies
US6427234B1 (en) * 1998-06-11 2002-07-30 University Of Washington System and method for performing selective dynamic compilation using run-time information
JP4462676B2 (ja) * 1999-10-27 2010-05-12 富士通株式会社 プログラム変換装置、コンパイラ装置およびプログラム変換プログラムを記録したコンピュータ読み取り可能な記録媒体
US6738967B1 (en) * 2000-03-14 2004-05-18 Microsoft Corporation Compiling for multiple virtual machines targeting different processor architectures
US9170812B2 (en) * 2002-03-21 2015-10-27 Pact Xpp Technologies Ag Data processing system having integrated pipelined array data processor
JP4090969B2 (ja) 2003-09-03 2008-05-28 独立行政法人科学技術振興機構 信号分離方法、信号分離プログラム及びそのプログラムを記録した記録媒体
US7814467B2 (en) * 2004-01-15 2010-10-12 Hewlett-Packard Development Company, L.P. Program optimization using object file summary information
US7694288B2 (en) 2005-10-24 2010-04-06 Analog Devices, Inc. Static single assignment form pattern matcher
US20080028380A1 (en) * 2006-07-26 2008-01-31 Liang Guo Localized, incremental single static assignment update
JP5159238B2 (ja) 2007-10-12 2013-03-06 株式会社東芝 車両検知器の異常検出装置および車両検知器の異常検出方法
US9081928B2 (en) * 2009-06-02 2015-07-14 Vector Fabrics, B.V. Embedded system development
US9009689B2 (en) * 2010-11-09 2015-04-14 Intel Corporation Speculative compilation to generate advice messages
US9495139B2 (en) * 2011-04-11 2016-11-15 University Of Florida Research Foundation, Inc. Elastic computing
EP2831797B1 (en) * 2012-03-30 2018-05-02 Irdeto B.V. Securing accessible systems using dynamic data mangling
US9245125B2 (en) * 2014-02-27 2016-01-26 Nec Laboratories America, Inc. Duleak: a scalable app engine for high-impact privacy leaks
US9286044B2 (en) * 2014-06-27 2016-03-15 International Business Machines Corporation Hybrid parallelization strategies for machine learning programs on top of MapReduce
US10303449B2 (en) * 2017-07-31 2019-05-28 Oracle International Corporation Compiling non-native constants

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003196106A (ja) * 2001-12-20 2003-07-11 Internatl Business Mach Corp <Ibm> プログラム変換方法、コンピュータ装置及びプログラム
JPWO2005078579A1 (ja) * 2004-02-12 2007-10-18 松下電器産業株式会社 プログラム変換装置およびプログラム変換方法
US20090125894A1 (en) * 2007-11-14 2009-05-14 Nair Sreekumar R Highly scalable parallel static single assignment for dynamic optimization on many core architectures
JPWO2009098739A1 (ja) * 2008-02-05 2011-05-26 パナソニック株式会社 プログラム最適化装置およびプログラム最適化方法
JP2015114874A (ja) * 2013-12-12 2015-06-22 国立大学法人東京工業大学 プログラミング言語による論理回路記述から論理回路を生成するための装置及び方法
US20160306847A1 (en) * 2015-04-15 2016-10-20 Futurewei Technologies, Inc. Apparatus and Method for Using Parameterized Intermediate Representation for Just-In-Time Compilation in Database Query Execution Engine
WO2018127557A1 (en) * 2017-01-05 2018-07-12 Koninklijke Philips N.V. Compiling device and method

Also Published As

Publication number Publication date
KR20210127923A (ko) 2021-10-25
WO2020172788A1 (en) 2020-09-03
US11922152B2 (en) 2024-03-05
EP3931685A1 (en) 2022-01-05
EP3931685A4 (en) 2022-10-12
US20220147331A1 (en) 2022-05-12
CN113330418A (zh) 2021-08-31
JP7287743B2 (ja) 2023-06-06

Similar Documents

Publication Publication Date Title
US10372431B2 (en) Unified intermediate representation
US9081928B2 (en) Embedded system development
US8683468B2 (en) Automatic kernel migration for heterogeneous cores
US8782645B2 (en) Automatic load balancing for heterogeneous cores
RU2582541C2 (ru) Контекстно-зависимое расслаивание для динамической параллелизации двоичных программ
US20100037035A1 (en) Generating An Executable Version Of An Application Using A Distributed Compiler Operating On A Plurality Of Compute Nodes
Nugteren et al. Introducing'Bones' a parallelizing source-to-source compiler based on algorithmic skeletons
US20130283250A1 (en) Thread Specific Compiler Generated Customization of Runtime Support for Application Programming Interfaces
JP2015503161A (ja) ヘテロジニアス並列処理プラットフォームのためのソフトウェアライブラリ
JP2021501949A (ja) マルチ・プロセッサ・システム用プログラミングの流れ
US10324693B2 (en) Optimizing multiple invocations of graphics processing unit programs in Java
US20100250564A1 (en) Translating a comprehension into code for execution on a single instruction, multiple data (simd) execution
Cooper et al. Offload–automating code migration to heterogeneous multicore systems
CN113590126A (zh) 用于实现具有局部存储需求的循环流水线化的自动编译器数据流优化
US9921838B2 (en) System and method for managing static divergence in a SIMD computing architecture
US20210319369A1 (en) Multi-level caching for dynamic deep learning models
US10678524B2 (en) Runtime struct fields size reduction
US11934809B2 (en) Multi-stage automatic compilation for vector computations in applications
Janik et al. An overview of altera sdk for opencl: A user perspective
Rafique et al. Generating efficient parallel code from the rvc-cal dataflow language
JP7287743B2 (ja) コンパイラのためのワークロード指向定数伝播
US20130173682A1 (en) Floating-point error propagation in dataflow
Singh An Empirical Study of Programming Languages from the Point of View of Scientific Computing
Ndu et al. CHO: A Benchmark Suite for OpenCL-based FPGA Accelerators
Luecke Software Development for Parallel and Multi-Core Processing

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20220221

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20230131

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20230131

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20230417

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: 20230425

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230522

R150 Certificate of patent or registration of utility model

Ref document number: 7287743

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150