JP7402240B2 - スレッドの実行順序を維持する同期デジタル回路を生成する言語およびコンパイラ - Google Patents

スレッドの実行順序を維持する同期デジタル回路を生成する言語およびコンパイラ Download PDF

Info

Publication number
JP7402240B2
JP7402240B2 JP2021540807A JP2021540807A JP7402240B2 JP 7402240 B2 JP7402240 B2 JP 7402240B2 JP 2021540807 A JP2021540807 A JP 2021540807A JP 2021540807 A JP2021540807 A JP 2021540807A JP 7402240 B2 JP7402240 B2 JP 7402240B2
Authority
JP
Japan
Prior art keywords
pipeline
thread
threads
stages
code
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.)
Active
Application number
JP2021540807A
Other languages
English (en)
Other versions
JPWO2020150013A5 (ja
JP2022518209A (ja
Inventor
ペルトン,ブレイク・ディー
コールフィールド,エイドリアン・マイケル
Original Assignee
マイクロソフト テクノロジー ライセンシング,エルエルシー
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 マイクロソフト テクノロジー ライセンシング,エルエルシー filed Critical マイクロソフト テクノロジー ライセンシング,エルエルシー
Publication of JP2022518209A publication Critical patent/JP2022518209A/ja
Publication of JPWO2020150013A5 publication Critical patent/JPWO2020150013A5/ja
Application granted granted Critical
Publication of JP7402240B2 publication Critical patent/JP7402240B2/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/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • G06F8/4452Software pipelining
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/39Circuit design at the physical level
    • G06F30/398Design verification or optimisation, e.g. using design rule check [DRC], layout versus schematics [LVS] or finite element methods [FEM]
    • 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
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • G06F1/04Generating or distributing clock signals or signals derived directly therefrom
    • G06F1/12Synchronisation of different clock signals provided by a plurality of clock generators
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/327Logic synthesis; Behaviour synthesis, e.g. mapping logic, HDL to netlist, high-level language to RTL or netlist
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Devices For Executing Special Programs (AREA)
  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Description

[0001]ハードウェア記述言語(「HDL」:hardware description language)は、電子回路、最も一般的にはデジタル論理回路の構成および動作を記述するためにハードウェアエンジニアによって使用されるモデリング言語である。HDLの例は、超高速集積回路(「VHSIC」)HDLおよびVERILOG(登録商標)を含む。
[0002]HDLは、一般に、デジタル論理回路をモデル化するために多くのコード行を必要とする。HDLに精通しているハードウェアエンジニアでさえ、そのようなコードの生成には非常に時間がかかることがある。さらに、設計に存在するコード行が多いほど、設計にエラーが含まれたり、性能が低下したりする可能性が高くなる。
[0003]HDLは通常、命令型プログラミング言語とは異なるプログラミングパラダイム(programming paradigm)を利用するので、HDLに精通していないソフトウェアエンジニアは、一般に、これらの言語を利用するのに非常に苦労する。その結果、ソフトウェアエンジニアによって生成されたHDLから生成された電子回路にも、エラーが含まれ、性能が低下する可能性がある。
[0004]これらおよび他の技術的課題に関して、本明細書でなされた開示が提示される。
[0005]スレッドの実行順序(thread execution order)を維持する同期デジタル回路を生成する言語およびコンパイラについての技術が開示される。開示された技術の実施を通じて、ハードウェアエンジニアは、性能を犠牲にすることなく、同時に、一部のタイプの回路設計の実施に必要なコード行数を減らし、一般的な設計エラーのクラス全体を排除することで、生産性を大幅に向上させることができる。HDLを使用して回路を設計した経験がほとんどまたはまったくないソフトウェアエンジニアの場合、開示された技術は、高性能の回路設計を生成するために使用できる使い慣れたプログラミングセマンティクスを提供する。
[0006]開示された技術の実施はまた、スレッドの実行順序を維持することができるハードウェア回路を生成することができる。スレッドの実行順序を維持することで、オーバヘッドの少ないスレッド同期などの最適化が可能になる。スレッドの実行順序を維持することで、プログラマは順序固有の操作を実行することもできる。たとえば、偶数の実行順序のスレッド(たとえば、スレッド「2」、「4」、「6」...)は、プログラム全体で、奇数の実行順序のスレッドとは異なる方式で処理され得る。また、スレッドが、実行される最初のスレッドまたは最後のスレッドである場合、特別な操作が実行され得る。本明細書で具体的に言及されていない他の技術的利点もまた、開示された主題の実施を通じて実現することができる。
[0007]上記で簡単に述べた技術的利点を実現するために、開示された言語およびコンパイラは、同じ数のステージを有するコードパスを有するパイプラインを生成する。たとえば、第1のパイプラインのすべてのコードパスには、6つのステージがあり、第2のパイプラインのすべてのコードパスには、15のステージがある場合がある。この特性を維持するために、コンパイラは、パイプライン内の関連するコードパスのバランスをとる。たとえば、特定の「ifステートメント」では、「then」ブロックまたは「else」ブロックのいずれかを、他のブロックと同じ数のステージを有するようにパディングする(pad)ことができる。ステージは、有用な作業を実行しないダミーステージを追加することで追加できるか、または、パイプラインの深さを増やすことでステージを追加できる。つまり、ブロックの実施に使用するステージの数を増やすことができる。「then」ブロックと「else」ブロックとのステージ数のバランスをとることにより、すべてのスレッドが、同じクロックサイクル数で「if」ステートメントを実行するため、スレッドは入力した順序で「if」ステートメントを出る。
[0008]いくつかのプログラミング構築は、スレッド実行が、設計によって並べ替えられることを可能にする。たとえば、スレッドが異なればループの実行回数も異なる可能性があるため、ループのスレッドの実行順序は保証されない。そのため、1つのスレッドが10回の反復でループを完了し、別のスレッドが500回の反復で同じループを完了する場合がある。しかしながら、開示される言語は、スレッドが、入力した順序で並べ替えブロック(reorder block)を出ることを保証する並べ替えブロックを含む。プログラマは、スレッドの実行順序を維持するために、ループや、他の順序を保持しない構築を、並べ替えブロックでラップすることができる。それに加えて、またはその代わりに、開示された言語は、並べ替えブロック機能を「組み込む」ループ構築を含み得る。たとえば、「reorder for」ループは、スレッドの実行順序を保持する「for」ループとして機能する。いくつかの構成では、並べ替えブロックは、SDCの並べ替えバッファを使用して実施される。
[0009]いくつかの構成では、実行のパイプラインは、別のパイプラインによって使用されるためにローカル変数を格納する先入れ先出しキュー(「キュー」または「FIFO」を有すると呼ばれる)によって接続される。FIFOは、関数呼び出し、制御フロー、および開示された言語の他の態様を実施するために使用され得る。スレッド順序は、FIFOからローカル変数を、キューに入れられた順序で取得することにより、パイプライン全体で維持される。
[0010]上記で簡単に論じたように、本明細書に開示された技術の実施は、低オーバヘッドのスレッド同期を提供する。さらに、プログラマは、偶数スレッドと奇数スレッドを異なる方式で処理したり、最初または最後のスレッドに対して特別な操作を実行したりするなど、順序固有の操作を実行できる。本明細書で具体的に特定されていない他の技術的利点もまた、開示された技術の実施を通じて実現することができる。
[0011]上記の主題は、コンピュータ制御装置、コンピュータ実施方法、コンピューティングデバイスとして、またはコンピュータ可読媒体などの製造物品(article of manufacture)として実施できることを理解されるべきである。これらおよび他の様々な特徴は、以下の詳細な説明を読み、関連付けられた図面を検討することで明らかになる。
[0012]この概要は、以下の詳細な説明でさらに説明される簡略化された形式で、開示された技術のいくつかの態様の簡単な説明を紹介するために提供される。この概要は、特許請求された主題の主要な特徴または本質的な特徴を特定することを意図しておらず、また、この概要が、特許請求された主題の範囲を限定するために使用されることも意図していない。さらに、特許請求された主題は、本開示のいずれかの部分において言及された不利な点のいずれかまたはすべてを解決する実施に限定されない。
[0013]同期デジタル回路にマッピングするプログラミング構築を含むプログラムソースコードに基づいて同期デジタル回路を生成するための、本明細書に開示されるシステムの態様を示すコンピューティングアーキテクチャ図である。 [0014]各々が複数のパイプラインステージを有するいくつかのハードウェアパイプラインと、開示された技術を使用して定義および実施できる計算ユニットとを含む、実例となる例示的な同期デジタル回路の態様を示すハードウェアアーキテクチャ図である。 [0015]開示された言語で記述された機能をハードウェア回路にマッピングすることを示すハードウェアアーキテクチャ図である。 [0016]ダミーステージを備えたパイプラインのパディングコードパス(padding code path)を示すハードウェアアーキテクチャ図である。 [0017]for-loopループに適用される並べ替えブロック構築を示すハードウェアアーキテクチャ図である。 [0018]図1~図5を参照して説明されるスレッドの実行順序を維持する言語およびコンパイラの動作の態様を例示するルーチンを示すフロー図である。 [0019]本明細書に提示される技術の態様を実施することができるコンピューティングデバイスのための例示的なコンピュータハードウェアおよびソフトウェアアーキテクチャを示すコンピュータアーキテクチャ図である。 [0020]開示された技術の態様を実施することができる分散型コンピューティング環境を示すネットワーク図である。
[0021]以下の詳細な説明は、スレッドの実行順序を維持する言語およびコンパイラに関する。上記で簡単に論じたように、スレッドの実行順序を維持すると、オーバヘッドの少ないスレッド同期などの最適化を可能にする。スレッドの実行順序を維持することで、プログラマは順序固有の操作を実施することもできる。たとえば、偶数の実行順序のスレッドは、プログラム全体で、奇数の実行順序のスレッドとは異なる方式で処理され得る。また、スレッドが、実行される最初のスレッドまたは最後のスレッドである場合、特別な操作が実行される場合がある。本明細書で具体的に言及されていない他の技術的利点もまた、開示された主題の実施を通じて実現することができる。
[0022]本明細書で説明される主題は、スレッドの実行順序を維持する言語およびコンパイラの一般的な文脈で提示されるが、当業者は、他の実施が他のタイプのコンピューティングシステムおよびモジュールと組み合わせて実行できることを認識するであろう。当業者はまた、本明細書で説明される主題が、ハンドヘルドデバイス、マルチプロセッサシステム、マイクロプロセッサベースまたはプログラム可能な家庭用電化製品、デバイスに組み込まれたコンピューティングまたはプロセシングシステム(たとえば、ウェアラブルコンピューティングデバイス、自動車、ホームオートメーションなど)、ミニコンピュータ、メインフレームコンピュータなどを含む、他のコンピュータシステム構成で実現されることを認識するであろう。
[0023]以下の詳細な説明では、本明細書の一部を形成し、例示として固有の構成または例として示されている添付の図面を参照する。ここで、いくつかの図全体を通して同様の数字が同様の要素を表す図面を参照して、スレッドの実行順序を維持する言語およびコンパイラの態様が説明される。
[0024]図1は、同期デジタル回路(「SDC」)112にマッピングするプログラミング構築を含むプログラムソースコード102に基づいてSDC112を定義および生成するために本明細書に開示される、例示的なシステム100の態様を示すコンピューティングアーキテクチャ図である。SDC112は、ゲートアレイ、フィールドプログラマブルゲートアレイ(「FPGA」)、特定用途向け集積回路(「ASIC」)、および他のタイプの回路デバイスによって実施される。開示された主題は、主にFPGAにおいて実施されたSDC112の文脈で説明されているが、本明細書に開示された技術を利用して、他のタイプのデバイスを使用して実施されるSDC112を定義できることを理解されたい。
[0025]図1に例示されるように、例示的なシステム100は、プログラムソースコード102をコンパイルして、ハードウェア記述言語(「HDL」)コード106、またはネットリストなどの回路の低レベル表現を生成するコンパイラ104を含む。上記で簡単に論じたように、HDLは、ハードウェアエンジニアが、電子回路、最も一般的にはデジタル論理回路の構造および動作を記述するために使用されるモデリング言語である。HDLの例は、VHSIC HDLおよびVERILOGを含む。
[0026]以下で詳細に説明するように、プログラムソースコード102は、SDC112を対象とするように設計されたマルチスレッドの命令型プログラミング言語を使用して表現される。開示された言語は、関数呼び出し、forループ、算術演算子、条件文など、「C」や「JAVA(登録商標)」などの言語の特徴の多くを提供する。しかしながら、開示される言語は、基盤となるSDC112ハードウェア実施に直接マッピングする構築を含む。これにより、ハードウェアエンジニアとソフトウェアエンジニアの両方が、性能について論理的に考え、設計を効果的に最適化することができる。上記のように、これにより、言語をソフトウェアエンジニアに馴染みやすくし、ハードウェアエンジニアが、HDLでコーディングするときに発生するバグのクラス全体に対処する必要がなくなる。
[0027]開示されたマルチスレッド命令型プログラミング言語は、プログラムステートメントが次々に実行されるという点で必須であり、実行の複数のスレッドが並行して実行され得るという点でマルチスレッドである。上記で論じたように、スレッドはローカル変数の集合である。ローカル変数がハードウェア回路によって処理されるときに、スレッドが実行される。
[0028]本明細書で説明されるスレッドは、ソフトウェアスレッドに類似しているが、異なる。ソフトウェアスレッドは、ローカル変数を含む呼び出しスタックを維持し、メモリ内でコードを実行するが、本明細書で説明されるスレッドは、ハードウェア回路を移動するローカル変数の集合である。ソフトウェアスレッドは、命令ポインタによって決定される実行可能コード内の場所を有するが、開示されたスレッドは、所与の時点においてSDC上の物理的な場所を有する。SDCは、数百、数千、さらには数百万のスレッドを実行する場合があり、SDCの実行は、パイプライン化される場合がある。つまり、異なるスレッドが、回路の異なるステージ内で同時に実行する場合がある。
[0029]以下でより詳細に説明されるように、言語構築は、回路実装にマッピングするプログラムソースコード102で定義することができる。言語構築は、1つまたは複数の字句トークンから形成される可能性のあるプログラムの構文的に許容される部分である。本明細書で説明される言語構築は、スレッド順序を保証する回路実装にマッピングする(つまり、スレッドは、入力したのと同じ順序で回路実装を出る)。
[0030]以下により詳細に説明されるように、本明細書に開示される構築によって生成される回路実装は、FPGA、ゲートアレイ、ASIC、または別のタイプの適切なデバイスにおけるSDCとして実施される。NICなどの別のハードウェア構成要素は、必要な機能を実施するために、FPGA、ゲートアレイ、またはASICで構成できる。
[0031]図1に示されるように、コンパイラ104は、この例ではHDLコード106である回路記述に、本明細書に開示される言語構築のうちの1つまたは複数を含むプログラムソースコード102をコンパイルすることができる。HDLコード106は、HDL合成ツール108に提供することができ、これは、次に、たとえばFPGAにおいて、SDC112をプログラムするために利用できるビットストリーム110を生成することができる。ASICを対象とする場合、HDLコード106は、工場で生産するためにASIC製造業者に提供することができる。
[0032]図2は、開示された技術を使用して定義および実施することができるいくつかのハードウェアパイプライン200A~200C(または「パイプライン」)を含む実例となる例示的なSDC112の態様を示すハードウェアアーキテクチャ図である。各ハードウェアパイプラインは、複数のパイプラインステージ206を有し、各ステージは、計算ユニット208を有する。図2に示されるように、プログラムソースコード102は、ハードウェア計算ユニット208のパイプライン200A~200Cにコンパイルすることができる。
[0033]パイプライン200A~200Cは、先入れ先出し(「FIFO」)キュー(本明細書では「FIFO」または「キュー」と呼ばれることがある)によって接続することができる。パイプライン200A~200Cは、プログラムソースコード102によって定義される機能を実施する。FIFO202は、データ値を格納し、パイプライン200に入力を提供するとともに、パイプライン200によって生成された出力を格納する。たとえば、SDC112は、その出力をFIFO202Aに供給するパイプライン200Aを含む。次に、パイプライン200Bは、FIFO202Aからその入力を得、その出力をFIFO202Bに提供する。パイプライン200Cは、FIFO202Bからその入力を得る。
[0034]いくつかの構成では、パイプライン200は、FIFO202から次の値をいつ取得するかを決定するポリシー回路構成210を実装する。たとえば、ポリシー回路210は、入力FIFO(たとえば、パイプライン200Bの場合、FIFO202A)が空ではなく、出力FIFO(たとえば、FIFO202B)がフルではないことを要求してから、処理のために入力FIFO(たとえば、FIFO202A)から値を取得してもよい。
[0035]図2に示されるように、パイプライン200は、1つまたは複数のパイプラインステージ206A~206Bから構成され得る。実行は、パイプライン200の異なるステージ206で、異なるスレッドを同時に実行することによってパイプライン化される。ステージの結果は、レジスタ204に格納され、次のクロックサイクルの期間中、次のステージ206に提供され得る。
[0036]各パイプラインステージ206は、加算器208Aおよびルックアップテーブル(「LUT」)208Bなどの1つまたは複数の計算ユニット208を含むことができる。例示される例では、加算器208Aは、基本的な算術、たとえば、加算、減算、または乗算を実行することができる。計算ユニットは、ブール演算子(「OR」、「NOR」、「XOR」など)または、SDC製造者によって提供される他のカスタムロジックを実施することもできる。
[0037]計算ユニットはまた、ユーザプログラム可能なルックアップテーブル208Bによって実施することができる。例示されるLUT208Bは、2つの入力ビットを単一の出力ビットにマッピングする2入力真理値表を示す。LUT208Bは、異なる数の入力ビットをサポートするように構成することができる。より複雑な出力値を生成するには、たとえば文字または8ビット整数、それぞれが入力変数の異なるビットに接続された複数のLUT208Bを使用することができる。
[0038]計算ユニットは、結果をレジスタ204(または「フリップフロップ」)に一時的に格納することができる。そのようなレジスタの内容は、同じまたは異なるパイプライン200内の他の計算ユニットに提供することができる。レジスタ204は、接続されたデジタルクロックが0から1に遷移するときに入力における値をキャプチャし、次のクロックサイクルの終了まで(すなわち、クロックが再び0から1に遷移するまで)出力におけるその値を提供することができる。レジスタには、イネーブルライン(enable line)を含めることもできる。イネーブルラインが偽に設定されている場合、レジスタは、上記の操作を実行せず、複数のクロックサイクルにわたって現在の出力値を維持する。
[0039]図2に示されるパイプラインアーキテクチャは、議論のために簡略化されていると理解されたい。本明細書で説明されるプログラミング言語構築は、図2に例示されているよりもより多くの構成要素を含む、はるかに複雑なSDC112を実装するために利用できる。
[0040]図3は、1つの実施形態に従って、開示された言語で記述された機能をハードウェア回路にマッピングすることを示すハードウェアアーキテクチャ図300である。プログラムソースコード302は、開示された言語で記述された関数「f()」304を含む。プログラムステートメントが次々に実行されるという点で、開示された言語は命令型であり、実行の複数のスレッドが並行しておよび/または同時に実行され得るという点でマルチスレッド化されている。関数「f()」304は、「x」306と「y」308の2つのパラメータをとり、整数を返す。関数「f()」304は、2つの式を有し、式310は、加算を実行し、結果をローカル変数「z」に格納し、式312は、乗算の結果を返す。
[0041]関数「f()」は、計算ユニット316、318およびレジスタ320、322を含むハードウェア回路314にマッピングされる304である。ハードウェア回路314は、2つのステージ、すなわち、式310において説明される加算を実行する第1のステージ324と、式312において説明される乗算を実行する第2のステージ326とを有する各ステージは、単一のクロックサイクルで実行され、各ステージの結果は、1つまたは複数のレジスタに格納される。
[0042]例を続けると、ステージ324は、パラメータ「x」306に対して「+1」演算を実行し、結果(「z」)をレジスタ322に格納する。ステージ324の間に、パラメータ「y」308は、レジスタ320に直接提供される。ステージ326の間に、計算ユニット318は、「y」および「z」の値を乗算する。結果はレジスタ328に格納される。
[0043]ハードウェア回路314は、スレッド330によって実行され得、その一部のみが図示される。SDCは、数百、数千、または数百万のスレッドを実行する場合がある。スレッドは、ローカル変数の集合を参照する。ローカル変数がハードウェア回路によって処理されるときに、スレッドが実行される。たとえば、スレッド330Aは、値332(x=1およびy=2)を有し、値332がハードウェア回路314によって処理されるときに、スレッド330Aは、関数「f()」304を実行する。関数によって返される値は、ローカル変数のセットに追加され、特定の変数がハードウェア回路によって使用されなくなることがわかっている場合はいつでも、その変数をローカル変数のセットから削除できる。
[0044]開示されたスレッドは、ソフトウェアスレッドに類似しているが、異なる。ソフトウェアスレッドは、ローカル変数を含む呼び出しスタックを維持し、メモリ内でコードを実行するが、開示されたスレッドは、ハードウェア回路を移動するローカル変数の集合である。ソフトウェアスレッドは、命令ポインタによって決定される実行可能コード内の場所を有するが、開示されたスレッドは、所与の時点においてSDC上の物理的な場所を有する。
[0045]SDC実行は、パイプライン化され得る。すなわち、異なるスレッドが、回路の異なるステージ内で同時に実行してもよい。テーブル334は、ハードウェア回路314のパイプライン実行が発生するときの、異なるステージにおける異なるスレッドからの変数を示す。列336は、ステージ間(つまり、ステージの前後)に格納された値を表示し、336Aは、スレッド330A、330B、および330Cによって提供されるxおよびyの値を含み、列336Bは、ステージ324が実行された後の値を含み、列336Cは、ステージ326が実行された後の値を含む。行338A~Cは、連続するクロックサイクル後に格納された値を表示する。
[0046]たとえば、行338Aは、スレッド330Aが、値332A(x=1およびy=2)をハードウェア回路314に入力しようとしていることを示す。行338Aと行338Bとの間でクロックサイクルが発生し、ステージ324においてスレッド330Aを実行した結果(332Aからのホールドオーバであるy=2、および「+1」演算の結果であるz=2)が332Bに示される。同時に、スレッド330Bからの値340A(x=3およびy=5)が、ハードウェア回路314に入力されようとしている。行338Bと行338Cの間で別のクロックサイクルが発生し、ステージ326を実行したスレッド330Aの結果が、332Cに示される(「4」)。同時に、ステージ324を実行するスレッド330Bの結果(y=5およびz=4)は、340Bに示され、スレッド330Cからの値342(x=7およびy=1)が、ハードウェア回路314に入力されようとしている。パイプライン実行は、SDCの使用率を高めることにより、より高いスループットを可能にする。つまり、一度に1つのスレッドだけがハードウェア回路305を実行できる場合よりも、所与の時点において多くのSDCが有用な作業を実行する。
[0047]図4は、パイプラインのすべてのパスが同じ数のステージを有するように、ダミーステージを備えたパイプラインのパディングコードパスを示すハードウェアアーキテクチャ図400である。ステージ数が同じであると、スレッドの実行順序がパイプラインを通じて維持される。いくつかの構成では、コードリスト402は、次の2つのパラメータ、すなわちint「x」406およびint「y」408を受け入れる関数「f()」404を含む。行410は、「L」を「x」に追加し、値を「z」に割り当てる。これは、回路記述418において、「G」を「x」に追加し、結果をレジスタ422に格納する計算ユニット420として示される。
[0048]行411は、「z>2」の条件を有する「if」ステートメントを導入している。いくつかの構成では、「if」ステートメントのような分岐ステートメントは、両方の分岐を並行して実行し、条件に基づいて続行する結果を選択することによって実施される。回路記述418における対応する構成要素は、マルチプレクサ424であり、これにより、「z」が「2」より大きい場合、スレッドは、コードパス427によって生成される値で進行し、そうではない場合、スレッドは、コードパス435(N)によって生成される値で進行する。
[0049]コードブロック412(「then」ブロック)は、2つのステートメントを含み、「y=y+3」は、「y」408の値に「3」を追加する計算ユニット428に対応する。結果はレジスタ430に格納される。レジスタ430は、コンパイラが「y」の正しい値を含んでいると理解し、パラメータとして渡された値を置き換える。次のステートメント「y=y*2」は、計算ユニット432によって実施され、計算ユニット432は、レジスタ430に格納された「y」の値に「2」を乗じ、その結果をマルチプレクサ424に提供する。「z」の値が「2」より大きい場合、計算ユニット432によって提供された値がレジスタ434に提供される。
[0050]コードブロック414(「else」ブロック)は、単一のステートメント「y=y-1」を含む。このステートメントは、計算ユニット436によって実施され、計算ユニット436は、「y」408から「1」を減算し、その結果をレジスタ438に格納する。しかしながら、次のクロックサイクルで、ダミー計算ユニット440は、レジスタ438に格納された値をマルチプレクサ424に転送し、マルチプレクサ424は、「z」の値が「2」以下である場合、レジスタ438に格納された値をレジスタ434に提供する。このダミー計算ユニット440は、コードパス427におけるステージ数のバランスをとるために追加される。いくつかの構成では、レジスタ438は、ダミー計算ユニット440の「y」の値を維持するために追加される。
[0051]いくつかの構成では、所与のコードパスに追加されるダミー計算ユニットの数は、最長のコードパスにおけるステージ数から、所与のコードパスのステージ数を引いた数に等しい。この場合、ステージの最大数は、2つの計算ユニット428、432であり、コードパス435には1つのステージ436がある。そのため、1つの計算ユニット435のみが追加され、1つの新しいパイプラインステージが生成される。
[0052]いくつかの実施形態では、(分岐のバランスをとることを除いて)有用な作業を実行しない計算ユニットを挿入する代わりに、値は、各クロックサイクルの最後にレジスタに単に格納される。いくつかの実施形態では、ダミーステージを追加する代わりに、コンパイラは、より深いパイプラインを生成する。すなわち、通常生成されるよりも多くのステージを有するコードパスが生成される。これは、計算がより多くのステージに分散されるため、ステージの平均実行時間を短縮する効果を有する場合がある。
[0053]行416は、戻る前に「y」の値を「z」の値で乗じる単一のステートメント「return z*y」を含む。これは、レジスタ434に格納された「y」の値を、「z」の値で乗じる計算ユニット444に対応する。
[0054]図5は、「do-while」ループを囲む並べ替えブロック構築を示すハードウェアアーキテクチャ図500である。コードリスト502は、パラメータ「x」506および「y」508をとる関数「f()」504を含む。行512は、int「z」を「x+1」に初期化し、実行パイプライン522の一部に対応する。具体的には、実行パイプライン522は、「+1」計算ユニット534を含み、これは、「x」506の値に「1」を追加し、それを「z」としてレジスタ535に格納する。行513は、ループカウンタ変数「i」を「1」に初期化する。パイプライン522は、値「i」、「y」、および「z」を、FIFO524にプッシュすることによって終了する。
[0055]機能504の並べ替えブロック516は、「do-while」ループ518をラップする。図5は、設計によって、スレッドの実行順序を保持しない一種の言語構築の例として、「do-while」ループ518を使用する。しかしながら、スレッドの実行順序を保持しない他の言語構築も同様に考慮される。並べ替えブロック516は、パイプライン522およびパイプライン526によって部分的に実施される。パイプライン522は、スレッドが入る順序でスレッドを登録する並べ替え開始ブロック(begin reorder block)536を含む。
[0056]いくつかの構成では、スレッドは、インデクスまたはスレッドIDに関連付けられる。並べ替え開始ブロック536に入る第1のスレッドのインデクス/IDは、たとえば、配列の要素「0」内のような、並べ替えブロックの第1の位置に格納される。後続のスレッドでは、入力した順序に対応する要素にインデクス/IDが格納される。このようにして、スレッドの実行順序のレコードが生成される。並べ替えブロック516の議論は、「do-while」ループ518の議論の後に続く。
[0057]「do-while」ループ518は、「y」に「2」を追加するたびに、「z」回ループする。「do-while」ループ518は、パイプライン526によって実施されるが、明確化のためにいくつかの態様は省略されている。「do-while」ループ518は、最初に、パイプライン522によってFIFO524に配置された「z」の値を受け取る。次に、「do-while」ループ518は、ブロック538において、「i」の値を、「z」と比較してもよい。「i」が「z」以下の場合、ループは継続し、計算ユニット540は、「2」を「y」に追加する。「y」の更新値、「z」の値、および「i」の現在の値は、その後、FIFO528に格納される。しかしながら、「i」が「z」より大きい場合、ループは終了し、以下で論じるように、実行は並べ替えブロック542に渡される。
[0058]第1の実行後、「do-while」ループ518は、さらに「z-1」回、ループ518を繰り返すことを続ける。各繰返しにおいて、「y」および「i」の現在の値は、「z」の値とともにFIFO528から取得される。「x」は、関数の残りの部分で使用されないため、この時点では維持されないことが理解される。比較538が実行され、「i」がそれでも「z」よりも小さい場合、実行は、上記で論じたように、計算ユニット540に続く。しかしながら、「i」が「z」より大きい場合、「do-while」の「do-while」ループ518は終了する。
[0059]スレッドが「do-while」の「do-while」ループ518を出ると、スレッドは、並べ替え終了ブロック(end reoder block)542を通過する。並べ替え開始ブロック536および並べ替え終了ブロック542は別々に示されているが、それらはSDC上の単一の機能ユニットによって実施され得る。並べ替え終了ブロック542は、実行順序がより低いすべてのスレッド(すなわち、スレッドインデクス/IDの配列内のより低い番号の要素に登録されたスレッド)が解放されるまで、スレッドをブロックする。実行順序が最も低いスレッドが検出されると、すぐに解放されて実行が続行される。このようにして、スレッドは解放され、並べ替えブロック516に入った順序で他の計算を開始する。パイプライン526は、「z」および「y」の値をFIFO530に格納することによって終了する。
[0060]行520は、「do-while」ループ518および並べ替えブロック516が完了した後に実行され、「z*y」の値を返す。行520は、FIFO530から「y」および「z」の値を読み取り、計算ユニット543を適用して「y」および「z」を乗算するパイプライン532によって部分的に実施される。
[0061]図5は、「do-while」ループを実行することによってどのようにスレッド順序が変化し、次にスレッド並べ替えブロックによって元の順序に復元されるのかを示している。スレッド546A~Dは、順序548において、「do-while」の「do-while」ループ518などのループに入る。各スレッドは異なる「z」の値544を有しているので、各スレッドは「do-while」ループ518を、異なる反復回数で実行する。具体的には、最初に入るスレッド546Aが6回反復し、2番目に入るスレッド546Bが8回反復し、3番目に入るスレッド546Cが2回反復し、4番目に入るスレッド546Dが4回反復する。スレッド546は、並べ替え開始ブロック536を通過し、入った順に、それらのスレッドインデクス/IDを登録する。チャート550は、各スレッドが実行される時間をクロックサイクルで示す。スレッド546は、異なる順序で「do-while」ループ518を出る。すなわち、スレッド546Aは3番目に存在し、スレッド546Bは4番目に出て、スレッド546Bは最初に出て、スレッド546Aは2番目に出る。
[0062]スレッド546Cが最初に「do-while」ループ518を出る一方、並べ替え終了ブロック542はさらに、スレッド546A、546Bが「do-while」ループ518を終了して実行を再開するまで実行を遅延させる。次に、スレッド546Dは、「do-while」ループ518を終了し、また、スレッド546A~Cが終了するまでブロックされる。次に、スレッド546Aは、「do-while」ループ518を終了するが、546Aは、並べ替え開始ブロック536に登録する最初のスレッドであったため、再開を許可される。同時に、並べ替え終了ブロック542は、スレッド546Aが再開したので、後続のスレッドが継続することを許可されているか否かをチェックする。この場合、スレッド546Bはまだ終了していないため、許可されない。しかしながら、スレッド546Bが「do-while」ループ518を終了すると、並べ替え終了ブロック542は、より低い初期実行順序を有するすべてのスレッド(すなわち、スレッド546A)が実行を再開したことに注目し、スレッド546Bは、実行再開を許可される。次に、スレッド546B後に並べ替え開始ブロック536に入ったスレッドは、再開を許可されるか否かを判定するためにチェックされる。この例では、スレッド546Cと546Dとの両方がブロックされ、それらの前に到着したすべてのスレッドが再開を許可されているため、両方を(この順序で)再開することを許可される。このようにして、スレッド546は、順序554で、すなわち、並べ替え開始ブロック536に入ったのと同じ順序で、並べ替え終了ブロック542を出る。図4および図5および対応する議論は、非限定的な例を示す。他のタイプのループ、パイプライン、式、分岐、および順序付けも同様に考慮される。
[0063]図6は、本明細書に開示される1つの実施形態に従って図1~図5に例示され、上記で説明された、スレッドの実行順序を維持する言語およびコンパイラの態様を例示するルーチン600を示すフロー図である。図6および他の図に関して本明細書で説明される論理演算は、(1)コンピューティングデバイス上で実行される一連のコンピュータ実施動作またはプログラムモジュールとして、および/または(2)コンピューティングデバイス内の相互接続された機械論理回路または回路モジュールとして実施することができると理解されるべきである。
[0064]本明細書に開示される技術の特定の実施は、コンピューティングデバイスの性能および他の要件に依存する選択の問題である。したがって、本明細書で説明される論理演算は、状態、演算、構成デバイス、動作、またはモジュールと様々に呼ばれる。これらの状態、演算、構成デバイス、動作、およびモジュールは、ハードウェア、ソフトウェア、ファームウェア、専用デジタルロジック、およびそれらの任意の組合せで実施できる。図面に示され、本明細書で説明されるよりも多いまたは少ない演算を実行できることが理解されるべきである。これら演算は、本明細書で説明されるものとは異なる順序で実行することもできる。
[0065]ルーチン600は、動作602で開始し、ここで、ソースコード102は、コンパイラ104によって受信される。ソースコード102は、マルチスレッドプログラミング言語で表現され得る。いくつかの構成では、ソースコード102は、命令型プログラミング言語で表現される。ソースコードは、「if」、「switch」、「case」、または「while」ステートメントなどの分岐ステートメント411を含み得、これにより、スレッドは、複数のコードパス(回路で説明されるコードパスと区別するため「ソースコードパス」とも呼ばれる)のうちの1つで実行される。いくつかの構成では、ソースコードは、「do-while」ループ518など、スレッドの実行順序を維持しないコードをラップする並べ替えブロック516を含む。
[0066]動作602から、ルーチンは動作604に進み、そこで、コンパイラ104は、ソースコード102を回路記述106にコンパイルする。いくつかの構成では、回路記述106は、複数のソースコードパスに関連付けられた複数のコードパス427、435を含み、コンパイラ104は、ダミーパイプラインステージ440を、複数のコードパスのいくつかまたはすべてに追加し、複数のコードパスのうちのいくつかまたはすべては、同数のパイプラインステージ324を有するようになる。
[0067]いくつかの構成では、回路記述は、第1の実行パイプライン200Aおよび第2の実行パイプライン200Bを含み、第1の実行パイプライン200Aは、ローカル変数のセットをFIFO202Aにプッシュすることによって第2の実行パイプライン200Bに実行を渡す。次に、第2の実行パイプライン200Bは、ローカル変数のセットを、それらがプッシュされた順序でFIFO202Aから取得することができ、それによって、スレッドの実行順序を維持する。
[0068]いくつかの構成では、回路記述521は、スレッドの実行順序を維持しない構築518の回路記述をラップする並べ替えバッファ536、542を含む。これらの構成では、並べ替えバッファ536、542は、構築が実行される前にスレッド順序548を登録し、構築を離れると、スレッドを元の実行順序548に戻す。いくつかの構成では、並べ替えバッファ536、542は、実行順序がより低い(すなわち、実行する最初のスレッドに近い)すべてのスレッドが実行を再開するまで、スレッドの実行をブロックする。
[0069]動作604から、ルーチン600は、動作606に進み、ここで、回路記述(たとえば、HDLコード)は、回路記述106によって定義された回路実装を含むSDL112を生成するために利用される。次に、ルーチン600は、動作606から動作608に進み、そこで終了する。
[0070]図7は、本明細書で提示される様々な技術を実施できるコンピューティングデバイスのための例示的なコンピュータハードウェアおよびソフトウェアアーキテクチャを示すコンピュータアーキテクチャ図を示す。特に、図7に例示されるアーキテクチャは、サーバコンピュータ、モバイル電話、電子リーダ、スマートフォン、デスクトップコンピュータ、AR/VRデバイス、タブレットコンピュータ、ラップトップコンピュータ、または別のタイプのコンピューティングデバイスを実施するために利用することができる。
[0071]図7に例示されるコンピュータ700は、中央処理装置702(「CPU」)と、ランダムアクセスメモリ706(「RAM」)および読取専用メモリ(「ROM」)708を含むシステムメモリ704と、メモリ704をCPU702に結合するシステムバス710とを含む。起動中など、コンピュータ700内の要素間での情報の転送に役立つ基本的なルーチンを含む基本入力/出力システム(「BIOS」または「ファームウェア」)を、ROM708に格納することができる。コンピュータ700はさらに、オペレーティングシステム722、アプリケーションプログラム、および他のタイプのプログラムを格納するための大容量記憶デバイス712を含む。大容量記憶デバイス712はまた、他のタイプのプログラムおよびデータを記憶するように構成することができる。
[0072]大容量記憶デバイス712は、バス710に接続された大容量記憶コントローラ(図示せず)を介してCPU702に接続される。大容量記憶デバイス712およびその関連付けられたコンピュータ可読媒体は、コンピュータ700に不揮発性ストレージを提供する。本明細書に含まれるコンピュータ可読媒体の説明は、ハードディスク、CD-ROMドライブ、DVD-ROMドライブ、またはUSBストレージキーなどの大容量記憶デバイスに言及しているが、コンピュータ可読媒体は、コンピュータ700によってアクセスされ得る任意の利用可能なコンピュータ記憶媒体または通信媒体であり得ることが当業者によって理解されるべきである。
[0073]通信媒体は、コンピュータ可読命令、データ構成、プログラムモジュール、または搬送波または他の伝送メカニズムなどの変調データ信号における他のデータを含み、任意の配信媒体を含む。「変調データ信号」という用語は、信号内の情報をエンコードするような方式で変更または設定されたその特性の1つまたは複数を有する信号を意味する。例として、限定されないが、通信媒体は、有線ネットワークまたは直接有線接続などの有線媒体、および音響、無線周波数、赤外線および他のワイヤレス媒体などのワイヤレス媒体を含む。上記のいずれかの組合せも、コンピュータ可読媒体の範囲内に含める必要がある。
[0074]限定ではなく例として、コンピュータ記憶媒体は、コンピュータ可読命令、データ構成、プログラムモジュール、または他のデータなどの情報を記憶するための任意の方法または技術で実施された揮発性および不揮発性、リムーバブル、および非リムーバブルな媒体を含むことができる。たとえば、コンピュータ記憶媒体は、これらに限定されないが、RAM、ROM、EPROM、EEPROM、フラッシュメモリまたは他のソリッドステートメモリ技術、CD-ROM、デジタル多用途ディスク(「DVD」)、HD-DVD、BLU-RAY、または他の光学ストレージ、磁気カセット、磁気テープ、磁気ディスクストレージまたは他の磁気記憶デバイス、または所望の情報を記憶するために使用でき、コンピュータ700によってアクセスできる他の任意の媒体を含む。特許請求の範囲の目的のために、「コンピュータ記憶媒体」という句、およびその変形は、波または信号自体または通信媒体を含まない。
[0075]様々な構成によれば、コンピュータ700は、ネットワーク720などのネットワークを介したリモートコンピュータへの論理的な接続を使用して、ネットワーク化された環境で動作することができる。コンピュータ700は、バス710に接続されたネットワークインターフェースユニット716を介してネットワーク720に接続することができる。ネットワークインターフェースユニット716はまた、他のタイプのネットワークおよびリモートコンピュータシステムに接続するために利用され得ることが理解されるべきである。コンピュータ700はまた、キーボード、マウス、タッチ入力、電子スタイラス(図7には示されていない)、またはビデオカメラのような物理的センサを含む、他の多くのデバイスからの入力を受信および処理するための入力/出力コントローラ718を含むことができる。同様に、入力/出力コントローラ718は、ディスプレイスクリーンまたは他のタイプの出力デバイス(図7にも示されていない)に出力を提供することができる。
[0076]本明細書で説明されるソフトウェア構成要素は、CPU702にロードされて実行されると、CPU702およびコンピュータ700全体を、汎用コンピューティングデバイスから、本明細書で提示された機能を容易にするようにカスタマイズされた専用のコンピューティングデバイスに変換できることが理解されるべきである。CPU702は、任意の数のトランジスタまたは他の離散的な回路要素から構築することができ、これらは、個別にまたは集合的に、任意の数の状態をとることができる。より具体的には、CPU702は、本明細書に開示されるソフトウェアモジュール内に含まれる実行可能命令に応答して、有限状態マシンとして動作することができる。これらのコンピュータ実行可能命令は、CPU702が状態間でどのように遷移するかを指定することによって、CPU702を変換することができ、それによって、CPU702を構成するトランジスタまたは他の離散的なハードウェア要素を変換する。
[0077]本明細書に提示されるソフトウェアモジュールをエンコードすることはまた、本明細書に提示されるコンピュータ可読媒体の物理的構成を変換することができる。物理的構成の固有の変換は、この説明の異なる実施において、様々な要因に依存する。そのような要因の例は、コンピュータ可読媒体を実施するために使用される技術、コンピュータ可読媒体が一次または二次ストレージとして特徴付けられるか否かなどを含むが、これらに限定されない。たとえば、コンピュータ可読媒体が半導体ベースのメモリとして実施される場合、本明細書に開示されるソフトウェアは、半導体メモリの物理的状態を変換することによって、コンピュータ可読媒体においてエンコードすることができる。たとえば、ソフトウェアは、半導体メモリを構成するトランジスタ、コンデンサ、または他の離散的な回路要素の状態を変換できる。ソフトウェアは、データをそこに保存するために、そのような構成要素の物理的状態を変換することもできる。
[0078]別の例として、本明細書に開示されるコンピュータ可読媒体は、磁気または光学技術を使用して実施することができる。そのような実施において、本明細書に提示されるソフトウェアは、ソフトウェアがその中にエンコードされるとき、磁気または光学媒体の物理的状態を変換することができる。これらの変換は、所与の磁気媒体内の特定の場所の磁気特性の変更を含む場合がある。これらの変換は、所与の光学媒体内の特定の場所の物理的特徴または特性を変更して、それらの場所の光学的特性を変更することも含む。物理媒体の他の変換は、本説明の範囲および精神から逸脱することなく可能であり、前述の例は、この議論を容易にするためにのみ提供される。
[0079]上記に照らして、本明細書に提示されるソフトウェア構成要素を格納および実行するために、コンピュータ700において多くのタイプの物理的変換が行われることが理解されるべきである。コンピュータ700について図7に示されるアーキテクチャまたは同様のアーキテクチャを利用して、ハンドヘルドコンピュータや、ビデオゲームデバイスや、組込コンピュータシステムや、スマートフォンのようなモバイルデバイスや、タブレットや、AR/VRデバイスを含む他のタイプのコンピューティングデバイス、ならびに、当業者に知られている他の任意のタイプのコンピューティングデバイスを実施できることが理解されるべきである。コンピュータ700は、図7に示される構成要素のすべてを含まないこともあり、図7に明示的に示されていない他の構成要素を含むことができるか、または、図7に示されるものとは完全に異なるアーキテクチャを利用できることも企図される。
[0080]図8は、本明細書に提示される様々な実施形態に従って、開示された技術の態様を実施することができる分散型ネットワークコンピューティング環境800を示すネットワーク図である。図8に示されるように、1つまたは複数のサーバコンピュータ800Aは、(固定有線またはワイヤレスLAN、WAN、イントラネット、エクストラネット、ピアツーピアネットワーク、仮想プライベートネットワーク、インターネット、Bluetooth通信ネットワーク、独自の低電圧通信ネットワーク、または他の通信ネットワークのいずれかまたはそれらの組合せであり得る)通信ネットワーク720を介して、限定されないが、タブレットコンピュータ800Bや、ゲームコンソール800Cや、スマートウォッチ800Dや、スマートフォンなどの電話800Eや、パーソナルコンピュータ800Fや、AR/VRデバイス800Gのような多数のクライアントコンピューティングデバイスと相互接続することができる。
[0081]通信ネットワーク720がたとえば、インターネットであるネットワーク環境では、サーバコンピュータ800Aは、ハイパテキスト転送プロトコル(「HTTP」)、ファイル転送プロトコル(「FTP」)、またはシンプルオブジェクトアクセスプロトコル(「SOAP」)のようないくつかの既知のプロトコルのいずれかを介して、クライアントコンピューティングデバイス800B~800Gとの間でデータを処理および通信するように動作可能な専用のサーバコンピュータであり得る。それに加えて、ネットワーク化されたコンピューティング環境800は、セキュアソケットレイヤ(「SSL」)またはプリティグッドプライバシ(「PGP」)などの様々なデータセキュリティプロトコルを利用することができる。クライアントコンピューティングデバイス800B~800Gの各々は、1つまたは複数のコンピューティングアプリケーション、またはウェブブラウザ(図8には示されていない)のような端末セッション、または他のグラフィカルユーザインターフェース(図8には示されていない)、またはサーバコンピュータ800Aへのアクセスを得るためのモバイルデスクトップ環境(図8には示されていない)をサポートするように動作可能なオペレーティングシステムを装備することができる。
[0082]サーバコンピュータ800Aは、他のコンピューティング環境(図8には示されていない)に通信可能に結合され得、参加しているユーザの相互作用/リソースネットワークに関するデータを受信することができる。例示的な動作では、ユーザ(図8には示されていない)は、クライアントコンピューティングデバイス800B~800Gで実行されているコンピューティングアプリケーションとインタラクトして、所望のデータを取得し、および/または他のコンピューティングアプリケーションを実行してもよい。
[0083]データおよび/またはコンピューティングアプリケーションは、サーバ800Aまたは複数のサーバ800Aに格納され得、例示的な通信ネットワーク720を介してクライアントコンピューティングデバイス800B~800Gを介して、協調するユーザに通信され得る。参加ユーザ(図8には示されていない)は、サーバコンピュータ800Aに全体的または部分的に収容される固有のデータおよびアプリケーションへのアクセスを要求することができる。これらのデータは、処理および記憶のために、クライアントコンピューティングデバイス800B~800Gと、サーバコンピュータ800Aとの間で通信され得る。
[0084]サーバコンピュータ800Aは、データおよびアプリケーションの生成、認証、暗号化、および通信のためのコンピューティングアプリケーション、プロセス、およびアプレットをホストすることができ、アプリケーション/データトランザクションを実現するために、他のサーバコンピューティング環境(図8には示されていない)、サードパーティサービスプロバイダ(図8には示されていない)、ネットワーク接続ストレージ(「NAS」)、およびストレージエリアネットワーク(「SAN」)と協働してもよい。
[0085]図7に示されるコンピューティングアーキテクチャと、図8に示される分散ネットワークコンピューティング環境とは、議論を容易にするために簡略化されていることが理解されるべきである。コンピューティングアーキテクチャおよび分散コンピューティングネットワークは、より多くのコンピューティング構成要素、デバイス、ソフトウェアプログラム、ネットワークデバイス、および本明細書に具体的に説明されていない他の構成要素を含み、利用できることも理解されるべきである。
[0086]本明細書に提示される開示はまた、以下の条項に記載される主題を包含する。
[0087]条項1:コンピュータ実施方法であって、マルチスレッドプログラミング言語で表現されたソースコードを受け取ることであって、ソースコードは、複数のソースコードパスのうちの1つに実行を指示する分岐ステートメントを含む、受け取ることと、ソースコードを、パイプラインを含む回路記述にコンパイルすることであって、パイプラインは、複数のソースコードパスに関連付けられた複数のコードパスを含み、複数のコードパスが同じ数のパイプラインステージを有するように、1つまたは複数のパイプラインステージが、複数のコードパスのうちの1つまたは複数に追加される、コンパイルすることと、回路記述に基づいて、回路実装を備える同期デジタル回路を生成することとを備える、コンピュータ実施方法。
[0088]条項2:複数のスレッドは、第1の順序でパイプラインに入り、複数のスレッドは、第1の順序でパイプラインを出る、条項1のコンピュータ実施方法。
[0089]条項3:複数のコードパスのうちの1つまたは複数にパイプラインステージを追加することは、最長のコードパスにおけるパイプラインステージの数を決定することと、そのコードパスにおけるパイプラインステージの数を、最長のコードパスにおけるパイプラインステージの数から引いたものに等しい数のパイプラインステージを、各コードパスに追加することとを含む、条項1または2のコンピュータ実施方法。
[0090]条項4:パイプラインは、第1のパイプラインを備え、回路記述は、第2のパイプラインを含み、第1のパイプラインを実行するスレッドは、ローカル変数を先入れ先出しキューにプッシュすることによって、実行を第2のパイプラインに渡し、第2のパイプラインは、プッシュされた順序で先入れ先出しキューからローカル変数を読み取ることにより、パイプライン全体でスレッドの実行順序を維持する、条項1から3のいずれかのコンピュータ実施方法。
[0091]条項5:ソースコードは、スレッドの実行順序を維持しないプログラミング構築をラップする並べ替えブロック構築を含み、並べ替えブロック構築は、到来するスレッドの実行順序を記録し、スレッドが、スレッドの実行順序を維持しない構築を実行できるようにし、すべての下位スレッドが再開するまでスレッドの再開をブロックする回路実装にマッピングする条項1から4のいずれかのコンピュータ実施方法。
[0092]条項6:スレッドは、実行のためにパイプラインに提供されるローカル変数の集合を備える、条項1から5のいずれかのコンピュータ実施方法。
[0093]条項7:パイプラインは、順に実行されるステージを備え、ステージを順に通過することによって、複数のスレッドが、実行順序を維持する、条項1から6のいずれかのコンピュータ実施方法。
[0094]条項8:コンピューティングデバイスであって、1つまたは複数のプロセッサと、1つまたは複数のプロセッサによって実行された場合、コンピューティングデバイスに対して、マルチスレッドプログラミング言語で表現されたソースコードを受け取らせ、ソースコードを、第1のパイプライン、第2のパイプライン、および第1のパイプラインから第2のパイプラインに渡されるローカルスレッド変数のセットを格納する先入れ先出し(FIFO)キューを含む回路記述にコンパイルさせ、第1のパイプラインは、ローカルスレッド変数のセットを、スレッドの実行順序でFIFOキューに格納し、第2のパイプラインは、スレッドの実行順序でFIFOキューからローカルスレッド変数のセットを取得することによってスレッドの実行順序を維持し、回路記述に基づいて、回路実装を備える同期デジタル回路を生成させる、コンピュータ実行可能命令を格納した少なくとも1つのコンピュータ記憶媒体。
[0095]条項9:ソースコードは、複数のソースコードパスのうちの1つに実行を指示する分岐ステートメントを含み、第1のパイプラインは、複数のソースコードパスに関連付けられた複数のコードパスを含み、複数のコードパスが同じ数のパイプラインステージを有するように、1つまたは複数のパイプラインステージが、複数のコードパスのうちの1つまたは複数に追加される、条項8のコンピューティングデバイス。
[0096]条項10:複数のコードパスのうちの1つまたは複数にパイプラインステージを追加することは、最長のコードパスにおけるパイプラインステージの数を決定することと、そのコードパスにおけるパイプラインステージの数を、最長のコードパスにおけるパイプラインステージの数から引いたものに等しい数のパイプラインステージを、各コードパスに追加することとを含む、条項8または9のコンピューティングデバイス。
[0097]条項11:ソースコードは、スレッドの実行順序を維持しないプログラミング構築をラップする並べ替えブロック構築を含み、並べ替えブロック構築が、到来するスレッドの実行順序を記録し、スレッドが、スレッドの実行順序を維持しない構築を実行できるようにし、すべての下位スレッドが再開するまでスレッドの再開をブロックする回路実装にマッピングする、条項8から10のいずれかのコンピューティングデバイス。
[0098]条項12:スレッドは、入った順序で並べ替えブロックを出る、条項8から11のいずれかのコンピューティングデバイス。
[0099]条項13:スレッドは、実行のために第1のパイプラインに提供されるローカルスレッド変数の集合を備える、条項8から12のいずれかのコンピューティングデバイス。
[00100]条項14:第1のパイプラインは、順に実行されるステージを備え、ステージを順に通過することによって、複数のスレッドが、実行順序を維持する、条項8から13のいずれかのコンピューティングデバイス。
[00101]条項15:1つまたは複数のプロセッサによって実行された場合、コンピューティングデバイスに対して、マルチスレッドプログラミング言語で表現されたソースコードを受け取らせ、ソースコードは、回路実装にマッピングする構築を備え、構築は、並べ替えブロックと、スレッドの実行順序を維持しない構築とを備え、回路実装は、複数のスレッドを受信した順序でスレッド識別子を登録する並べ替えバッファと、複数のスレッドの各々について、未知の数のクロックサイクルのために実行する回路とを備え、並べ替えバッファは、実行順序の低いすべてのスレッドが再開されるまで、スレッドの再開をブロックし、構築を、回路記述にコンパイルさせ、回路記述に基づいて、回路実施を備える同期デジタル回路を生成させるコンピュータ実行可能命令を格納した少なくとも1つのコンピュータ記憶媒体。
[00102]条項16:ソースコードは、複数のソースコードパスのうちの1つに実行を指示する分岐ステートメントを含み、回路記述は、複数のコードパスを含むパイプラインを含み、複数のコードパスが同じ数のパイプラインステージを有するように、1つまたは複数のパイプラインステージが複数のコードパスのうちの1つまたは複数に追加される、条項15の少なくとも1つのコンピュータ記憶媒体。
[00103]条項17:複数のコードパスのうちの1つまたは複数にパイプラインステージを追加することは、最長のコードパスにおけるパイプラインステージの数を決定することと、そのコードパスにおけるパイプラインステージの数を、最長のコードパスにおけるパイプラインステージの数から引いたものに等しい数のパイプラインステージを、各コードパスに追加することとを含む、条項15または16の少なくとも1つのコンピュータ記憶媒体。
[00104]条項18:スレッドは、実行のために第1のパイプラインに提供されるローカルスレッド変数の集合を備える、条項15から17のいずれかの少なくとも1つのコンピュータ記憶媒体。
[00105]条項19:第1のパイプラインは、順に実行されるステージを備え、ステージを順に通過することによって、複数のスレッドが、実行順序を維持する、条項15から17のいずれかの少なくとも1つのコンピュータ記憶媒体。
[00106]条項20:パイプラインは、第1のパイプラインを備え、回路記述は、第2のパイプラインを含み、第1のパイプラインを実行するスレッドは、ローカル変数を先入れ先出しキューにプッシュすることによって、実行を第2のパイプラインに渡し、第2のパイプラインは、プッシュされた順序で先入れ先出しキューからローカル変数を読み取ることにより、パイプライン全体でスレッドの実行順序を維持する、条項15から19のいずれかの少なくとも1つのコンピュータ記憶媒体。
[00107]上記に基づいて、スレッドの実行順序を維持する言語およびコンパイラが本明細書に開示されていることが理解されるべきである。本明細書に提示される主題は、コンピュータの構成的な特徴、方法論的および変換的動作、固有のコンピューティング機構、およびコンピュータ可読媒体に固有の言語で説明されているが、添付の特許請求の範囲に記載される主題は必ずしも、本明細書で説明される固有の特徴、動作、または媒体に限定されないことを理解されたい。むしろ、固有の特徴、動作および媒体は、特許請求された主題を実施する例示的な形態として開示されている。
[00108]上記の主題は、例示としてのみ提供され、限定として解釈されるべきではない。例示および説明された例示的な構成および用途に従わずに、以下の特許請求の範囲に記載された本開示の範囲から逸脱することなく、本明細書で説明される主題に対して様々な修正および変更を行うことができる。

Claims (19)

  1. コンピュータ実施方法であって、
    マルチスレッドプログラミング言語で表現されたソースコードを受け取るステップであって、前記ソースコードは、複数のソースコードパスのうちの1つに実行を指示する分岐ステートメントを含む、受け取るステップと、
    前記ソースコードを、パイプラインを含む回路記述にコンパイルするステップであって、前記パイプラインは、前記複数のソースコードパスに関連付けられた複数のコードパスを含み、前記コンパイルするステップは、
    最大数のパイプラインステージを有する前記複数のコードパスのうち1つのコードパスにおけるパイプラインステージの数を決定するステップと、
    前記複数のコードパスの各々がパイプラインステージの前記数を有するまで、パイプラインステージを前記複数のコードパスの少なくとも1つに追加するステップとを含み
    前記回路記述に基づいて、回路実装を備える同期デジタル回路を生成するステップとを備える、コンピュータ実施方法。
  2. 複数のスレッドは、第1の順序で前記パイプラインに入り、前記複数のスレッドは、前記第1の順序で前記パイプラインを出る、請求項1に記載のコンピュータ実施方法。
  3. 前記複数のコードパスのうちの1つまたは複数にパイプラインステージを追加するステップは、最長のコードパスにおけるパイプラインステージの数を決定するステップと、そのコードパスにおける前記パイプラインステージの数を、前記最長のコードパスにおける前記パイプラインステージの数から引いたものに等しい数のパイプラインステージを、各コードパスに追加するステップとを含む、請求項1に記載のコンピュータ実施方法。
  4. 前記パイプラインは、第1のパイプラインを備え、前記回路記述は、第2のパイプラインを含み、前記第1のパイプラインを実行するスレッドは、ローカル変数を先入れ先出しキューにプッシュすることによって、実行を前記第2のパイプラインに渡し、前記第2のパイプラインは、プッシュされた順序で先入れ先出しキューからローカル変数を読み取ることにより、パイプライン全体でスレッドの実行順序を維持する、請求項1に記載のコンピュータ実施方法。
  5. 前記ソースコードは、スレッドの実行順序を維持しないプログラミング構築をラップする並べ替えブロック構築を含み、前記並べ替えブロック構築は、
    到来するスレッドの実行順序を記録し、
    スレッドが、スレッドの実行順序を維持しない構築を実行できるようにし、
    すべての下位スレッドが再開するまでスレッドの再開をブロックする回路実装にマッピングする、請求項1に記載のコンピュータ実施方法。
  6. 追加された前記パイプラインステージの少なくとも1つは、計算ユニットを備え、前記計算ユニットによって生成される結果をレジスタに格納するよう構成されている、請求項1に記載のコンピュータ実施方法。
  7. 前記パイプラインは、順に実行されるステージを備え、前記ステージを前記順に通過することによって、複数のスレッドが、実行順序を維持する、請求項1に記載のコンピュータ実施方法。
  8. コンピューティングデバイスであって、
    1つまたは複数のプロセッサと、
    前記1つまたは複数のプロセッサによって実行された場合、前記コンピューティングデバイスに対して、
    マルチスレッドプログラミング言語で表現されたソースコードを受け取らせ、
    前記ソースコードを、第1のパイプライン、第2のパイプライン、および前記第1のパイプラインから前記第2のパイプラインに渡されるローカルスレッド変数のセットを格納する先入れ先出し(FIFO)キューを含む回路記述にコンパイルさせ、前記第1のパイプラインは、ローカルスレッド変数のセットを、スレッドの実行順序で前記FIFOキューに格納し、前記第2のパイプラインは、前記スレッドの実行順序で前記FIFOキューからローカルスレッド変数のセットを取得することによって前記スレッドの実行順序を維持し、前記ソースコードは、複数のソースコードパスのうちの1つに実行を指示する分岐ステートメントを含み、前記第1のパイプラインは、前記複数のソースコードパスに関連付けられた複数のコードパスを含み、前記複数のコードパスが同じ数のパイプラインステージを有するように、1つまたは複数のパイプラインステージが、前記複数のコードパスのうちの1つまたは複数に追加され、前記追加されたパイプランステージの少なくとも1つは、計算ユニットを含み、前記計算ユニットによって生成される結果をレジスタに格納するように構成され、
    前記回路記述に基づいて、回路実装を備える同期デジタル回路を生成させる、コンピュータ実行可能命令を格納した少なくとも1つのコンピュータ記憶媒体と
    を備える、コンピューティングデバイス。
  9. 前記複数のコードパスのうちの1つまたは複数にパイプラインステージを追加することは、最長のコードパスにおけるパイプラインステージの数を決定することと、そのコードパスにおける前記パイプラインステージの数を、前記最長のコードパスにおけるパイプラインステージの数から引いたものに等しい数のパイプラインステージを、各コードパスに追加することとを含む、請求項8に記載のコンピューティングデバイス。
  10. 前記ソースコードは、スレッドの実行順序を維持しないプログラミング構築をラップする並べ替えブロック構築を含み、前記並べ替えブロック構築が、
    到来するスレッドの実行順序を記録し、
    スレッドが、スレッドの実行順序を維持しない構築を実行できるようにし、
    すべての下位スレッドが再開するまでスレッドの再開をブロックする回路実装にマッピングする、請求項8に記載のコンピューティングデバイス。
  11. スレッドは、入った順序で前記並べ替えブロックを出る、請求項10に記載のコンピューティングデバイス。
  12. スレッドは、実行のために前記第1のパイプラインに提供されるローカルスレッド変数の集合を備える、請求項8に記載のコンピューティングデバイス。
  13. 前記第1のパイプラインは、順に実行されるステージを備え、前記ステージを順に通過することによって、複数のスレッドが、実行順序を維持する、請求項8に記載のコンピューティングデバイス。
  14. 1つまたは複数のプロセッサによって実行された場合、コンピューティングデバイスに対して、
    マルチスレッドプログラミング言語で表現されたソースコードを受け取らせ、前記ソースコードは、回路実装にマッピングする構築を備え、前記構築は、並べ替えブロックと、スレッドの実行順序を維持しない構築とを備え、前記回路実装は、
    複数のスレッドを受信した順序でスレッド識別子を登録する並べ替えバッファと、
    前記複数のスレッドの各々について、未知の数のクロックサイクルのために実行する回路とを備え、前記並べ替えバッファは、実行順序の低いすべてのスレッドが再開されるまで、スレッドの再開をブロックし、
    前記構築を、回路記述へコンパイルさせ、
    前記回路記述に基づいて、前記回路実装を備える同期デジタル回路を生成させる、コンピュータ実行可能命令を格納した少なくとも1つのコンピュータ記憶媒体。
  15. 前記ソースコードは、複数のソースコードパスのうちの1つに実行を指示する分岐ステートメントを含み、前記回路記述は、複数のコードパスを含むパイプラインを含み、前記複数のコードパスが同じ数のパイプラインステージを有するように、1つまたは複数のパイプラインステージが、前記複数のコードパスのうちの1つまたは複数に追加される、請求項14に記載の少なくとも1つのコンピュータ記憶媒体
  16. 前記複数のコードパスのうちの1つまたは複数にパイプラインステージを追加することは、最長のコードパスにおけるパイプラインステージの数を決定することと、そのコードパスにおけるパイプラインステージの数を、前記最長のコードパスにおける前記パイプラインステージの数から引いたものに等しい数のパイプラインステージを、各コードパスに追加することとを含む、請求項15に記載の少なくとも1つのコンピュータ記憶媒体。
  17. スレッドは、実行のために前記パイプラインの第1のパイプラインに提供されるローカルスレッド変数の集合を備える、請求項15に記載の少なくとも1つのコンピュータ記憶媒体。
  18. 前記パイプラインの第1のパイプラインは、順に実行されるステージを備え、前記ステージを前記順に通過することによって、複数のスレッドが、実行順序を維持する、請求項15に記載の少なくとも1つのコンピュータ記憶媒体。
  19. 前記パイプラインは第1のパイプラインを含み、前記回路記述は第2のパイプラインを含み、前記第1のパイプラインを実行するスレッドは、ローカル変数を先入れ先出しキューにプッシュすることによって、実行を前記第2のパイプラインに渡し、前記第2のパイプラインは、プッシュされた順序で先入れ先出しキューからローカル変数を読み取ることにより、パイプライン全体でスレッドの実行順序を維持する、請求項15に記載の少なくとも1つのコンピュータ記憶媒体。
JP2021540807A 2019-01-14 2020-01-04 スレッドの実行順序を維持する同期デジタル回路を生成する言語およびコンパイラ Active JP7402240B2 (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US16/247,269 2019-01-14
US16/247,269 US11093682B2 (en) 2019-01-14 2019-01-14 Language and compiler that generate synchronous digital circuits that maintain thread execution order
PCT/US2020/012278 WO2020150013A1 (en) 2019-01-14 2020-01-04 Language and compiler that generate synchronous digital circuits that maintain thread execution order

Publications (3)

Publication Number Publication Date
JP2022518209A JP2022518209A (ja) 2022-03-14
JPWO2020150013A5 JPWO2020150013A5 (ja) 2023-01-04
JP7402240B2 true JP7402240B2 (ja) 2023-12-20

Family

ID=69400654

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021540807A Active JP7402240B2 (ja) 2019-01-14 2020-01-04 スレッドの実行順序を維持する同期デジタル回路を生成する言語およびコンパイラ

Country Status (13)

Country Link
US (1) US11093682B2 (ja)
EP (1) EP3912025B1 (ja)
JP (1) JP7402240B2 (ja)
KR (1) KR20210112330A (ja)
CN (1) CN113316762A (ja)
AU (1) AU2020209446A1 (ja)
BR (1) BR112021010345A2 (ja)
CA (1) CA3123903A1 (ja)
IL (1) IL284548A (ja)
MX (1) MX2021008474A (ja)
SG (1) SG11202107262RA (ja)
WO (1) WO2020150013A1 (ja)
ZA (1) ZA202103821B (ja)

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11113176B2 (en) 2019-01-14 2021-09-07 Microsoft Technology Licensing, Llc Generating a debugging network for a synchronous digital circuit during compilation of program source code
US11144286B2 (en) 2019-01-14 2021-10-12 Microsoft Technology Licensing, Llc Generating synchronous digital circuits from source code constructs that map to circuit implementations
US10810343B2 (en) 2019-01-14 2020-10-20 Microsoft Technology Licensing, Llc Mapping software constructs to synchronous digital circuits that do not deadlock
US11106437B2 (en) 2019-01-14 2021-08-31 Microsoft Technology Licensing, Llc Lookup table optimization for programming languages that target synchronous digital circuits
US11275568B2 (en) 2019-01-14 2022-03-15 Microsoft Technology Licensing, Llc Generating a synchronous digital circuit from a source code construct defining a function call
US11366647B2 (en) * 2020-04-30 2022-06-21 Intel Corporation Automatic compiler dataflow optimization to enable pipelining of loops with local storage requirements

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004036463A1 (ja) 2002-10-15 2004-04-29 Renesas Technology Corp. コンパイラ及び論理回路の設計方法
JP2006185423A (ja) 2004-11-30 2006-07-13 Tokyo Electron Ltd カスタムlsi開発プラットフォーム、命令セット・アーキテクチャ及び論理回路構成情報の生成方法、並びにプログラム
US7315991B1 (en) 2005-02-23 2008-01-01 Xilinx, Inc. Compiling HLL into massively pipelined systems
US8671371B1 (en) 2012-11-21 2014-03-11 Maxeler Technologies Ltd. Systems and methods for configuration of control logic in parallel pipelined hardware

Family Cites Families (112)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5343554A (en) 1988-05-20 1994-08-30 John R. Koza Non-linear genetic process for data encoding and for solving problems using automatically defined functions
US5642304A (en) 1991-08-16 1997-06-24 Simpson; John Richard Apparatus for high-speed solution of arbitrary mathematical expressions with logic code generator and programmable logic circuit
US5416719A (en) 1992-12-17 1995-05-16 Vlsi Technology, Inc. Computerized generation of truth tables for sequential and combinatorial cells
US8487653B2 (en) 2006-08-05 2013-07-16 Tang System SDOC with FPHA and FPXC: system design on chip with field programmable hybrid array of FPAA, FPGA, FPLA, FPMA, FPRA, FPTA and frequency programmable xtaless clockchip with trimless/trimfree self-adaptive bandgap reference xtaless clockchip
US6112019A (en) 1995-06-12 2000-08-29 Georgia Tech Research Corp. Distributed instruction queue
US5761483A (en) 1995-08-18 1998-06-02 Xilinx, Inc. Optimizing and operating a time multiplexed programmable logic device
US6212601B1 (en) 1996-08-30 2001-04-03 Texas Instruments Incorporated Microprocessor system with block move circuit disposed between cache circuits
US5909572A (en) 1996-12-02 1999-06-01 Compaq Computer Corp. System and method for conditionally moving an operand from a source register to a destination register
US6061521A (en) 1996-12-02 2000-05-09 Compaq Computer Corp. Computer having multimedia operations executable as two distinct sets of operations within a single instruction cycle
US6784903B2 (en) 1997-08-18 2004-08-31 National Instruments Corporation System and method for configuring an instrument to perform measurement functions utilizing conversion of graphical programs into hardware implementations
US6275508B1 (en) 1998-04-21 2001-08-14 Nexabit Networks, Llc Method of and system for processing datagram headers for high speed computer network interfaces at low clock speeds, utilizing scalable algorithms for performing such network header adaptation (SAPNA)
US6597664B1 (en) * 1999-08-19 2003-07-22 Massachusetts Institute Of Technology Digital circuit synthesis system
US7203718B1 (en) 1999-10-29 2007-04-10 Pentomics, Inc. Apparatus and method for angle rotation
US8095508B2 (en) 2000-04-07 2012-01-10 Washington University Intelligent data storage and processing using FPGA devices
US6988192B2 (en) 2002-02-11 2006-01-17 Hewlett-Packard Development Company, L.P. Method and apparatus for compiling source code to configure hardware
US7516446B2 (en) 2002-06-25 2009-04-07 International Business Machines Corporation Method and apparatus for efficient and precise datarace detection for multithreaded object-oriented programs
US7028281B1 (en) 2002-07-12 2006-04-11 Lattice Semiconductor Corporation FPGA with register-intensive architecture
US7305582B1 (en) 2002-08-30 2007-12-04 Availigent, Inc. Consistent asynchronous checkpointing of multithreaded application programs based on active replication
EP1627284B1 (en) 2003-05-23 2018-10-24 IP Reservoir, LLC Intelligent data storage and processing using fpga devices
US7805638B2 (en) 2003-06-18 2010-09-28 Nethra Imaging, Inc. Multi-frequency debug network for a multiprocessor array
US7111273B1 (en) 2003-07-03 2006-09-19 Xilinx, Inc. Softpal implementation and mapping technology for FPGAs with dedicated resources
EP1654819B1 (en) 2003-08-15 2013-05-15 Napatech A/S A data merge unit, a method of producing an interleaved data stream, a network analyser and a method of analysing a network
KR100626368B1 (ko) 2003-08-25 2006-09-20 삼성전자주식회사 가비지 콜렉션 벤치마킹 방법
JP4562136B2 (ja) 2003-11-19 2010-10-13 財団法人北九州産業学術推進機構 グラフ幅削減装置及びグラフ幅削減方法、並びに論理回路合成装置及び論理回路合成方法
US7415681B2 (en) 2003-12-29 2008-08-19 Sicronic Remote Kg, Llc Optimal mapping of LUT based FPGA
DE102005005073B4 (de) 2004-02-13 2009-05-07 Siemens Ag Rechnereinrichtung mit rekonfigurierbarer Architektur zur parallelen Berechnung beliebiger Algorithmen
US7620917B2 (en) 2004-10-04 2009-11-17 Synopsys, Inc. Methods and apparatuses for automated circuit design
US7584449B2 (en) * 2004-11-22 2009-09-01 Fulcrum Microsystems, Inc. Logic synthesis of multi-level domino asynchronous pipelines
US7386820B1 (en) * 2004-12-10 2008-06-10 Synopsys, Inc. Method and apparatus for formally checking equivalence using equivalence relationships
US7647567B1 (en) * 2005-01-31 2010-01-12 Bluespec, Inc. System and method for scheduling TRS rules
US7375550B1 (en) 2005-07-15 2008-05-20 Tabula, Inc. Configurable IC with packet switch configuration network
US8285972B2 (en) 2005-10-26 2012-10-09 Analog Devices, Inc. Lookup table addressing system and method
US7389479B2 (en) * 2005-12-20 2008-06-17 Synopsys, Inc. Formally proving the functional equivalence of pipelined designs containing memories
US7735050B2 (en) 2006-02-09 2010-06-08 Henry Yu Managing and controlling the use of hardware resources on integrated circuits
US8209580B1 (en) 2006-05-08 2012-06-26 Marvell International Ltd. Error correction coding for varying signal-to-noise ratio channels
US7496866B2 (en) * 2006-06-22 2009-02-24 International Business Machines Corporation Method for optimizing of pipeline structure placement
US20080005357A1 (en) 2006-06-30 2008-01-03 Microsoft Corporation Synchronizing dataflow computations, particularly in multi-processor setting
US7801299B2 (en) 2006-09-22 2010-09-21 Intel Corporation Techniques for merging tables
US7545293B2 (en) 2006-11-14 2009-06-09 Qualcomm Incorporated Memory efficient coding of variable length codes
US7573407B2 (en) 2006-11-14 2009-08-11 Qualcomm Incorporated Memory efficient adaptive block coding
TWI331278B (en) 2007-03-14 2010-10-01 Ind Tech Res Inst Debug method
WO2008120367A1 (ja) 2007-03-29 2008-10-09 Fujitsu Limited 並列化プログラム生成方法、並列化プログラム生成装置、及び並列化プログラム生成プログラム
US7908574B2 (en) 2007-05-09 2011-03-15 Synopsys, Inc. Techniques for use with automated circuit design and simulations
US7471104B1 (en) 2007-07-27 2008-12-30 Xilinx, Inc. Lookup table with relatively balanced delays
US7735047B1 (en) 2007-11-29 2010-06-08 Xilinx, Inc. Method for technology mapping considering boolean flexibility
US7823117B1 (en) 2007-12-21 2010-10-26 Xilinx, Inc. Separating a high-level programming language program into hardware and software components
US8468510B1 (en) * 2008-01-16 2013-06-18 Xilinx, Inc. Optimization of cache architecture generated from a high-level language description
WO2009097162A1 (en) 2008-02-01 2009-08-06 The Oliver Group A method for searching and indexing data and a system for implementing same
US8930926B2 (en) 2008-02-08 2015-01-06 Reservoir Labs, Inc. System, methods and apparatus for program optimization for multi-threaded processor architectures
WO2009138490A1 (en) 2008-05-15 2009-11-19 Universiteit Gent Parameterized configuration for a programmable logic device
US8392885B2 (en) 2008-12-19 2013-03-05 Microsoft Corporation Low privilege debugging pipeline
JP5773502B2 (ja) 2010-01-12 2015-09-02 フラウンホーファーゲゼルシャフトツール フォルデルング デル アンゲヴァンテン フォルシユング エー.フアー. オーディオ符号化器、オーディオ復号器、オーディオ情報を符号化するための方法、オーディオ情報を復号するための方法、および上位状態値と間隔境界との両方を示すハッシュテーブルを用いたコンピュータプログラム
JP5735503B2 (ja) 2010-06-24 2015-06-17 太陽誘電株式会社 半導体装置
EP2596494B1 (en) 2010-07-20 2020-08-05 Fraunhofer-Gesellschaft zur Förderung der Angewandten Forschung e.V. Audio decoder, audio decoding method and computer program
US8812285B2 (en) * 2010-08-31 2014-08-19 The Regents Of The University Of California Designing digital processors using a flexibility metric
TWI420830B (zh) 2010-12-31 2013-12-21 Ind Tech Res Inst 動態解碼查詢表之產生方法與應用其之電子裝置
US20130054939A1 (en) * 2011-08-26 2013-02-28 Cognitive Electronics, Inc. Integrated circuit having a hard core and a soft core
US8607249B2 (en) 2011-09-22 2013-12-10 Oracle International Corporation System and method for efficient concurrent queue implementation
US8806410B2 (en) * 2011-10-28 2014-08-12 The Board Of Trustees Of The University Of Illinois Power balanced pipelines
US8752036B2 (en) * 2011-10-31 2014-06-10 Oracle International Corporation Throughput-aware software pipelining for highly multi-threaded systems
US8966457B2 (en) * 2011-11-15 2015-02-24 Global Supercomputing Corporation Method and system for converting a single-threaded software program into an application-specific supercomputer
US8631380B2 (en) 2011-11-28 2014-01-14 Maxeler Technologies, Ltd. Method of, and apparatus for, data path optimisation in parallel pipelined hardware
US8959469B2 (en) * 2012-02-09 2015-02-17 Altera Corporation Configuring a programmable device using high-level language
US9122523B2 (en) * 2012-05-03 2015-09-01 Nec Laboratories America, Inc. Automatic pipelining framework for heterogeneous parallel computing systems
US9047148B2 (en) 2012-06-15 2015-06-02 Lsi Corporation Pipelined vectoring-mode CORDIC
US9081583B2 (en) 2012-08-23 2015-07-14 National Instruments Corporation Compile time execution
US9484874B2 (en) 2012-11-16 2016-11-01 Nokia Solutions And Networks Oy Input amplitude modulated outphasing with an unmatched combiner
CN103023842B (zh) 2012-11-26 2016-08-24 大唐移动通信设备有限公司 一种多频段预失真系数查找表更新方法和系统
US9779195B2 (en) 2012-12-04 2017-10-03 The Mathworks, Inc. Model-based retiming with functional equivalence constraints
US8924901B2 (en) 2013-02-15 2014-12-30 Synopsys, Inc. Look-up based fast logic synthesis
US8775986B1 (en) 2013-02-25 2014-07-08 Xilinx, Inc. Software debugging of synthesized hardware
US8881079B1 (en) * 2013-03-12 2014-11-04 Xilinx, Inc. Dataflow parameter estimation for a design
US9824756B2 (en) 2013-08-13 2017-11-21 Globalfoundries Inc. Mapping a lookup table to prefabricated TCAMS
WO2015051105A1 (en) 2013-10-02 2015-04-09 The Penn State Research Foundation Techniques and devices for performing arithmetic
US9251300B2 (en) * 2013-10-25 2016-02-02 Altera Corporation Methods and tools for designing integrated circuits with auto-pipelining capabilities
JP5842255B2 (ja) * 2013-12-12 2016-01-13 国立大学法人東京工業大学 プログラミング言語による論理回路記述から論理回路を生成するための装置及び方法
US9158882B2 (en) 2013-12-19 2015-10-13 Netspeed Systems Automatic pipelining of NoC channels to meet timing and/or performance
US9471307B2 (en) 2014-01-03 2016-10-18 Nvidia Corporation System and processor that include an implementation of decoupled pipelines
US9690278B1 (en) * 2014-04-10 2017-06-27 Altera Corporation Method and apparatus for high-level programs with general control flow
US10090864B2 (en) 2014-09-22 2018-10-02 Samsung Display Co., Ltd. System and method for decoding variable length codes
WO2016049327A1 (en) 2014-09-26 2016-03-31 Dolby Laboratories Licensing Corporation Encoding and decoding perceptually-quantized video content
US10254369B2 (en) 2014-10-29 2019-04-09 Heartvista, Inc. Pipeline engine for specifying, visualizing, and analyzing MRI image reconstructions
CA2965988A1 (en) 2014-11-21 2016-05-26 Research Institute At Nationwide Children's Hospital Parallel-processing systems and methods for highly scalable analysis of biological sequence data
US9680459B2 (en) * 2014-12-11 2017-06-13 Intel Corporation Edge-aware synchronization of a data signal
US9727679B2 (en) 2014-12-20 2017-08-08 Intel Corporation System on chip configuration metadata
US9971858B1 (en) * 2015-02-20 2018-05-15 Altera Corporation Method and apparatus for performing register retiming in the presence of false path timing analysis exceptions
US9858373B2 (en) * 2015-07-15 2018-01-02 International Business Machines Corporation In-cycle resource sharing for high-level synthesis of microprocessors
US9846623B2 (en) 2015-08-20 2017-12-19 Qsigma, Inc. Simultaneous multi-processor apparatus applicable to acheiving exascale performance for algorithms and program systems
US10542186B2 (en) 2015-09-30 2020-01-21 Dolby Laboratories Licensing Corporation 2D LUT color transforms with reduced memory footprint
US10698916B1 (en) 2015-10-16 2020-06-30 Dr Holdco 2, Inc. Data preparation context navigation
US10311558B2 (en) 2015-11-16 2019-06-04 Dolby Laboratories Licensing Corporation Efficient image processing on content-adaptive PQ signal domain
CN107112996B (zh) 2015-11-20 2021-06-18 京微雅格(北京)科技有限公司 一种基于fpga的查找表工艺映射方法及查找表
US9817747B2 (en) 2015-12-28 2017-11-14 Juniper Networks, Inc. Systems and methods for unit testing of functions on remote kernels
US10445271B2 (en) 2016-01-04 2019-10-15 Intel Corporation Multi-core communication acceleration using hardware queue device
US10359832B2 (en) 2016-03-22 2019-07-23 The Board Of Regents Of The University Of Texas System Method and apparatus for reducing power and cycle requirement for FFT of ECG signals
US10162918B1 (en) 2016-04-27 2018-12-25 Altera Corporation Integrated circuit retiming with selective modeling of flip-flop secondary signals
US10275219B2 (en) 2016-11-08 2019-04-30 Embry-Riddle Aeronautical University, Inc. Bit-serial multiplier for FPGA applications
US10248498B2 (en) 2016-11-21 2019-04-02 Futurewei Technologies, Inc. Cyclic redundancy check calculation for multiple blocks of a message
US10235272B2 (en) 2017-03-06 2019-03-19 Xilinx, Inc. Debugging system and method
US10579762B2 (en) 2017-05-15 2020-03-03 LegUp Computing Inc. High-level synthesis (HLS) method and apparatus to specify pipeline and spatial parallelism in computer hardware
US10521877B2 (en) 2017-05-23 2019-12-31 Samsung Electronics Co., Ltd Apparatus and method for speculative buffer reservations with cancellation mechanism
US11454188B2 (en) 2017-06-02 2022-09-27 The Mathworks, Inc. Systems and methods for rescaling executable simulation models
US10331836B1 (en) 2017-10-11 2019-06-25 Xilinx, Inc. Loop optimization for implementing circuit designs in hardware
US20190114548A1 (en) * 2017-10-17 2019-04-18 Xilinx, Inc. Static block scheduling in massively parallel software defined hardware systems
US11755382B2 (en) 2017-11-03 2023-09-12 Coherent Logix, Incorporated Programming flow for multi-processor system
US11307873B2 (en) 2018-04-03 2022-04-19 Intel Corporation Apparatus, methods, and systems for unstructured data flow in a configurable spatial accelerator with predicate propagation and merging
US10768916B2 (en) 2018-11-28 2020-09-08 Red Hat, Inc. Dynamic generation of CPU instructions and use of the CPU instructions in generated code for a softcore processor
US11144286B2 (en) 2019-01-14 2021-10-12 Microsoft Technology Licensing, Llc Generating synchronous digital circuits from source code constructs that map to circuit implementations
US11106437B2 (en) 2019-01-14 2021-08-31 Microsoft Technology Licensing, Llc Lookup table optimization for programming languages that target synchronous digital circuits
US11275568B2 (en) 2019-01-14 2022-03-15 Microsoft Technology Licensing, Llc Generating a synchronous digital circuit from a source code construct defining a function call
US11113176B2 (en) 2019-01-14 2021-09-07 Microsoft Technology Licensing, Llc Generating a debugging network for a synchronous digital circuit during compilation of program source code
US10810343B2 (en) 2019-01-14 2020-10-20 Microsoft Technology Licensing, Llc Mapping software constructs to synchronous digital circuits that do not deadlock

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004036463A1 (ja) 2002-10-15 2004-04-29 Renesas Technology Corp. コンパイラ及び論理回路の設計方法
JP2006185423A (ja) 2004-11-30 2006-07-13 Tokyo Electron Ltd カスタムlsi開発プラットフォーム、命令セット・アーキテクチャ及び論理回路構成情報の生成方法、並びにプログラム
US7315991B1 (en) 2005-02-23 2008-01-01 Xilinx, Inc. Compiling HLL into massively pipelined systems
US8671371B1 (en) 2012-11-21 2014-03-11 Maxeler Technologies Ltd. Systems and methods for configuration of control logic in parallel pipelined hardware

Also Published As

Publication number Publication date
MX2021008474A (es) 2021-08-19
CA3123903A1 (en) 2020-07-23
ZA202103821B (en) 2022-08-31
AU2020209446A1 (en) 2021-06-17
US11093682B2 (en) 2021-08-17
IL284548A (en) 2021-08-31
EP3912025B1 (en) 2024-05-29
JP2022518209A (ja) 2022-03-14
SG11202107262RA (en) 2021-07-29
KR20210112330A (ko) 2021-09-14
EP3912025A1 (en) 2021-11-24
US20200226228A1 (en) 2020-07-16
CN113316762A (zh) 2021-08-27
BR112021010345A2 (pt) 2021-08-24
WO2020150013A1 (en) 2020-07-23

Similar Documents

Publication Publication Date Title
JP7402240B2 (ja) スレッドの実行順序を維持する同期デジタル回路を生成する言語およびコンパイラ
US11106437B2 (en) Lookup table optimization for programming languages that target synchronous digital circuits
Jia et al. TASO: optimizing deep learning computation with automatic generation of graph substitutions
US10810343B2 (en) Mapping software constructs to synchronous digital circuits that do not deadlock
EP3912074B1 (en) Generating a synchronous digital circuit from a source code construct defining a function call
US8893080B2 (en) Parallelization of dataflow actors with local state
US11144286B2 (en) Generating synchronous digital circuits from source code constructs that map to circuit implementations
US11113176B2 (en) Generating a debugging network for a synchronous digital circuit during compilation of program source code
CN113614752A (zh) 量子算法的验证和估计运行时间
Huang et al. A fast input/output library for high-resolution climate models
US11762677B1 (en) High-level vectorization and scalarization of Java vector API library methods
US11740869B2 (en) Scheduling atomic field operations in jacobian coordinates used in elliptic curve cryptography scalar multiplications
Czappa et al. Design-time performance modeling of compositional parallel programs
US20220350570A1 (en) Pipelined hardware to accelerate modular arithmetic operations
Zhang et al. Implementing MapReduce with MSVL
Adoni et al. Multi-path Coverage of All Final States for Model-Based Testing Theory Using Spark In-memory Design
Youse High performance exact linear algebra

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20221220

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20221220

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

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20231122

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20231208

R150 Certificate of patent or registration of utility model

Ref document number: 7402240

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150