(57)【要約】コンパイラにおいてソース・コードを受けるように構成されたプロセッサーを含むコンピューティング・デバイスを提供する。ソース・コードは、複数の条件を有する少なくとも１つの複合条件を含んでもよい。ソース・コードは、更に、複数の条件の中の各条件について、その条件を評価するための命令を含むそれぞれのコード・ブロックを含んでもよい。複数の条件の複数の順序付けの中の各順序付けについて、プロセッサーは、その順序付けが１つ以上の正当さ制約を満たすことを判定してもよい。１つ以上の正当さ制約を満たす複数の順序付けの中の各順序付けについて、プロセッサーは、その順序付けのそれぞれの推定計算コストを判定してもよい。プロセッサーは、１つ以上の正当さ制約を満たす複数の順序付けの内、最も低い推定計算コストを有する順序付けを有するように、複数の条件を並べ替えてもよい。【選択図】図５
2021521538.tif 000002
【特許請求の範囲】
【請求項１】
プロセッサーを備えるコンピューティング・デバイスであって、
前記プロセッサーが、コンパイラにおいてソース・コードを受けるように構成され、
前記ソース・コードが、
複数の条件を有する少なくとも１つの複合条件と、
前記複数の条件の中の各条件について、前記条件を評価するための１つ以上の命令を含むそれぞれのコード・ブロックと、
を含み、
前記複数の条件の複数の順序付けの中の各順序付けについて、当該順序付けが１つ以上の正当さ制約を満たすことを判定し、
前記１つ以上の正当さ制約を満たす前記複数の順序付けの中の各順序付けについて、当該順序付けのそれぞれの推定計算コストを判定し、
前記１つ以上の正当さ制約を満たす前記複数の順序付けの内、最低の推定計算コストを有する順序付けを有するように、前記複数の条件を並べ替える、コンピューティング・デバイス。
【請求項２】
請求項１記載のコンピューティング・デバイスにおいて、前記ソース・コードが、更に、
前記複数の条件が真のときに実行されるように構成された１つ以上の第１分岐評価命令を含む第１分岐コード・ブロックと、
前記複数の条件の内少なくとも１つの条件が偽のときに実行されるように構成された１つ以上の第２分岐評価命令を含む第２分岐コード・ブロックと、
を含む、コンピューティング・デバイス。
【請求項３】
請求項２記載のコンピューティング・デバイスにおいて、前記１つ以上の正当さ制約が、前記ソース・コードが１つの第１分岐コード・ブロックと１つの第２分岐コード・ブロックとを含むという制約を含む、コンピューティング・デバイス。
【請求項４】
請求項１記載のコンピューティング・デバイスにおいて、前記１つ以上の正当さ制約が、各条件のそれぞれのコード・ブロックが、共通目標コード・ブロックに進むための命令を含むという制約を含む、コンピューティング・デバイス。
【請求項５】
請求項４記載のコンピューティング・デバイスにおいて、前記１つ以上の正当さ制約が、前記複数の条件のそれぞれのコード・ブロックの最後のコード・ブロックの後ろであって、前記共通目標コード・ブロックの前にある前記ソース・コードの部分が、１つの入口ポイントおよび１つの出口ポイントを有するという制約を含む、コンピューティング・デバイス。
【請求項６】
請求項１記載のコンピューティング・デバイスにおいて、前記１つ以上の正当さ制約が、未定義変数をコールする命令はないという制約を含む、コンピューティング・デバイス。
【請求項７】
請求項１記載のコンピューティング・デバイスにおいて、各コード・ブロックが基本ブロックである、コンピューティング・デバイス。
【請求項８】
請求項１記載のコンピューティング・デバイスにおいて、少なくとも１つのコード・ブロックが、複数の基本ブロックを含む、コンピューティング・デバイス。
【請求項９】
請求項１記載のコンピューティング・デバイスにおいて、前記プロセッサーが、少なくとも部分的に、
前記順序付けに含まれる各命令に推定コスト・スコアを割り当て、
各命令に割り当てられた前記それぞれの推定コスト・スコアを合計することによって、  
各順序付けについて、それぞれの推定計算コストを判定するように構成される、コンピューティング・デバイス。
【請求項１０】
請求項１記載のコンピューティング・デバイスにおいて、前記複合条件が、３つ以上の条件を含む、コンピューティング・デバイス。
【請求項１１】
コンピューティング・デバイスのプロセッサーによって実行される方法であって、前記方法が、コンパイラにおいてソース・コードを受けるステップを含み、
前記ソース・コードが、
複数の条件を有する少なくとも１つの複合条件と、
前記複数の条件の中の各条件について、前記条件を評価するための１つ以上の命令を含むそれぞれのコード・ブロックと、
を含み、
前記複数の条件の複数の順序付けの中の各順序付けについて、当該順序付けが１つ以上の正当さ制約を満たすことを判定し、
前記１つ以上の正当さ制約を満たす前記複数の順序付けの中の各順序付けについて、当該順序付けのそれぞれの推定計算コストを判定し、
前記１つ以上の正当さ制約を満たす前記複数の順序付けの内、最も低い推定計算コストを有する順序付けを有するように、前記複数の条件を並べ替える、方法。
【請求項１２】
請求項１１記載の方法において、前記コードが、更に、  
前記複数の条件が真のときに実行されるように構成された１つ以上の第１分岐評価命令を含む第１分岐コード・ブロックと、
前記複数の条件の内少なくとも１つの条件が偽のときに実行されるように構成された１つ以上の第２分岐評価命令を含む第２分岐コード・ブロックと、
を含む、方法。
【請求項１３】
請求項１１記載の方法において、前記１つ以上の正当さ制約が、各条件のそれぞれのコード・ブロックが、共通目標コード・ブロックに進むための命令を含むという制約を含む、方法。
【請求項１４】
請求項１１記載の方法において、前記１つ以上の正当さ制約が、未定義変数をコールする命令はないという制約を含む、方法。
【請求項１５】
請求項１１記載の方法において、各順序付けについて、前記それぞれの推定計算コストを判定するステップが、
前記順序付けに含まれる各命令に、推定コスト・スコアを割り当てるステップと、
各命令に割り当てられた前記それぞれの推定コスト・スコアを合計するステップと、
を含む、方法。
【発明の詳細な説明】
【背景技術】
【０００１】
[0001]  複合条件(compound conditional)とは、２つ以上の条件を順番にチェックして、１組の命令または他の１組の命令のどちらを実行するか決定するコード構造である。例えば、複合条件は、「ｉｆ」ステートメント、「ｆｏｒ」ループ、または「ｗｈｉｌｅ」ループに含まれる場合がある。複合条件をチェックするには、２つ以上の条件の各々が真であるか否かチェックすることを含めばよい。例えば、複合条件は「ｉｆ（ａ＆＆ｂ）」または「ｉｆ（ａ｜｜ｂ）」という形態を有してもよい。
【０００２】
[0002]  複合条件における条件は、これらがコード内に提示される順番にランタイム時に評価される。一部の条件は、他の条件よりもチェックするのに計算コストが高くなるおそれがある。処理時間を節約するためには、プログラマーは、最も計算コストが低い条件から先にリストに載せ、最初の結果に基づいてこのような評価が不要になるときには、計算コストが高くなる方の条件をチェックするのを回避することができる。しかしながら、複合条件を含むソース・コードを書くとき、プログラマーは複合条件のどの条件が他よりもチェックにコストがかかるのか分からない場合もある。その結果、最適ではない順序で条件が配列されるおそれがある。即ち、コストが高い条件が、コストが低い条件よりも前に評価されるおそれがある。この結果、処理リソースの無駄、およびコード実行の低速化が生ずる可能性がある。
【０００３】
[0003]  以下の複合条件について検討する。
【０００４】
【表１】
2021521538.tif 000003
【０００５】
各条件はブール述語(Boolean predicate)である。したがって、条件は、結合(conjunction)または分離(disjunctions)のいずれかとして合成する(compound)ことができる。
[0004]  以上のコード例では、基本的コード生成方式が、最初に、条件１、条件２、および条件３を計算する式を計算する。次いで、生成されたコードが「＆＆」演算を実行して、最終的な１つの条件値を計算し、これに基づいて、ＩＦコードを実行すべきか、またはＥＬＳＥコードを実行すべきかについて判断を下す。
【０００６】
[0005]  既存のコンパイラには、最適化のために、条件短絡技法(condition short-circuiting techniques)を使用するものがある。短絡は、条件１が偽である場合、条件２および条件３を計算する式を計算しなくてもよいことを実現する。次いで、これに応じて、ジャンプを行う。短絡は、追加の条件変数を評価する計算コストを節約する。生成されるコードは次のように現れる。
【０００７】
【表２】
2021521538.tif 000004
【発明の概要】
【発明が解決しようとする課題】
【０００８】
[0006]  しかしながら、コンパイラがこのような短絡技法を使用できても、開発者は異なる順序のそれぞれの計算コストを把握していない場合もある。したがって、短絡であればもっと効率的なコードが得られた場合でも、非効率的なコードが書かれコンパイルされるおそれがある。
【課題を解決するための手段】
【０００９】
[0007]  本開示の一態様によれば、コンピューティング・デバイスを提供する。このコンピューティング・デバイスは、コンパイラにおいてソース・コードを受けるように構成されたプロセッサーを含む。ソース・コードは、複数の条件を有する少なくとも１つの複合条件を含むことができる。ソース・コードは、更に、複数の条件の中の各条件について、その条件を評価するための命令を含むそれぞれのコード・ブロックを含む。複数の条件の複数の順序付けの中の各順序付けについて、プロセッサーは、更に、その順序付けが１つ以上の正当さ制約(legality constraint)を満たすことを判定するように構成することができる。１つ以上の正当さ制約を満たす複数の順序付けの中の各順序付けについて、プロセッサーは、更に、その順序付けに対するそれぞれの推定計算コストを判定するように構成することができる。更に、プロセッサーは、１つ以上の正当さ制約を満たす複数の順序付けの内、推定計算コストが最も低い順序付けを有するように、複数の条件を並べ替えるように構成することができる。
【００１０】
[0008]   この摘要は、詳細な説明において以下で更に説明する概念から選択したものを、簡略化した形態で紹介するために設けられている。この摘要は、特許請求する主題の主要な特徴または必須の特徴を識別することを意図するのではなく、特許請求する主題の範囲を限定するために使用されることを意図するのでもない。更に、特許請求する主題は、本開示のいずれかの部分において注記されるいずれかの欠点を解決する実施形態にも、全ての欠点を解決する実施態様にも限定されない。
【図面の簡単な説明】
【００１１】
【図１】図１は、本開示の一実施形態によるコンピューティング・デバイスの実施形態例を示す。
【図２】図２は、図１の実施形態による、「ｉｆ」ステートメントを含むソース・コードの例を示す。
【図３】図３は、図１の実施形態による、「ｗｈｉｌｅ」ループを含むソース・コードの例を示す。
【図４】図４は、図１の実施形態による計算コスト推定の例を示す。
【図５】図５は、本開示の一実施形態にしたがって、コンピューティング・デバイスのプロセッサーによって実行することができる方法例を示す。
【図６】図６は、本開示の一実施形態によるコンピューティング・システム例の模式図を示す。
【発明を実施するための形態】
【００１２】
[0015]  以上で説明した課題に取り組むために、コンピューティング・デバイスを提供する。図１は、コンピューティング・デバイス１０の実施形態例であり、揮発性記憶デバイス１２、不揮発性記憶デバイス１４、および／またはプロセッサー１６を含む。揮発性記憶デバイス１２および不揮発性記憶デバイス１４は、各々、データーを格納するように構成されたメモリ・アドレスを含むのはもっともである。プロセッサー１６は、ソース・コード２０を受け、ソース・コード２０をアセンブリー・コード３８に変換するように構成されたコンパイラ３０を実行するように構成することができる。本明細書では、ソース・コード２０が少なくとも１つの複合条件２２を含むときのソース・コード２０のアセンブリー・コード３８への変換について、本開示の図に示すシステムおよび方法を参照しながら説明する。
【００１３】
[0016]  図２を参照して、図１のソース・コード例２０を更に詳しく示す。図１および図２に示すように、ソース・コード例２０は、「ｉｆ」ステートメントの形態で複合条件２２を含む。コンパイラ３０によって受けられたソース・コード２０は、少なくとも１つの複合条件２２を含んでもよい。複合条件２２は、複数の条件２４を含んでもよく、その各々はブール値（真または偽）を有することができる。複数の条件２４の中の各条件２４について、ソース・コード２０は、条件２４を評価するための１つ以上の命令２８を含むそれぞれのコード・ブロック２６を含んでもよい。１つ以上の命令２８が評価されるとき、コード・ブロック２６は条件２４に対してブール値を返すことができる。ある実施形態では、各コード・ブロック２６は、分岐が発生しない基本的なブロックとしてもよい。あるいは、少なくとも１つのコード・ブロック２６が複数の基本ブロックを含んでもよい。
【００１４】
[0017]  複合条件２２は、複数の条件２４のブール値に基づいて、ブール値を戻すことができる。図２に示すように、ソース・コード２０は、更に、複数の条件２４が真であるときに実行されるように構成された１つ以上の第１分岐評価命令４４を含む第１分岐コード・ブロック４２を含んでもよい。図２の実施形態では、複合条件２２は、ここではＡＮＤ（＆＆）論理演算子として示される、論理演算子４０を含む。しかしながら、他の実施形態では、複合条件２２は、ＯＲ、ＸＯＲ、またはＮＡＮＤのような、他の論理演算子４０を使用して表現することもできる。複合条件のブール値は、論理演算子４０を複数の条件２４に適用することによって評価することができる。ソース・コード２０は、更に、複数の条件２４の内少なくとも１つの条件２４が偽であるときに実行されるように構成された１つ以上の第２分岐評価命令４８を含む第２分岐コード・ブロック４６も含んでもよい。図２に示すように、第２分岐コード・ブロック４６は「ｉｆ」ステートメントの「ｅｌｓｅ」分岐であってもよい。
【００１５】
[0018]  図１および図２の複合条件２２では、２つの条件２４が示されているが、他の数の条件２４も考えられる。ある実施形態では、複合条件２２が３つ以上の条件２４を含んでもよい。このような実施形態では、複合条件２２は、更に、複合条件２２を評価するために条件２４に提供することができる２つ以上の論理演算子４０を含んでもよい。
【００１６】
[0019]  複合条件２２、第１分岐コード・ブロック４２、および第２分岐コード・ブロック４６に加えて、ソース・コード２０は、複合条件２２の前および図２における第２分岐コード・ブロック４６の後ろに示す楕円によって示されるように、他のコード・ブロックを含んでもよい。
【００１７】
[0020]  図１に戻り、複合条件２２をコンパイラ３０に送ることができる。コンパイラ３０は、複合条件２２に含まれる複数の条件２４の複数の順序付け３２を判定するように構成することができる。ある実施形態では、コンパイラ３０は複数の条件２４に可能な各順序付け３２を判定することができる。他の実施形態では、コンパイラ３０は、条件２４に可能な全ての順序付け３２の内部分集合だけを判定してもよい。
【００１８】
[0021]  ライスの定理の当然の結果として、あらゆる複合条件２２について、どの条件２４が最も低い計算コストを有するか常に判定できるアルゴリズムは存在しない。しかしながら、最も低い計算コストを有する可能性が高い条件２４は、発見的技法を使用して、識別することができる。このような発見的技法は、条件２４の各々のそれぞれのコード・ブロック２６に含まれる１つ以上の命令２８の構文的プロパティ(syntactic properties)に基づくことができる。
【００１９】
[0022]  条件２４の複数の順序付け３２の中の各順序付け３２について、プロセッサー１６は、更に、その順序付け３２が１つ以上の正当さ制約３４を満たすことを判定するように構成することができる。正当さ制約３４とは、ここでは、特定の順序付け３２にした１つ以上の条件２４の１つ以上の構文的プロパティに基づく制約として定義され、したがって、１つ以上の条件２４が正当さ制約３４を満たさないとき、プロセッサー１６は、アセンブリー・コード３８をその順序付け３２で出力することを、コンパイラ３０に禁止するように構成される。つまり、どの順序付け３２が１つ以上の正当さ制約３４を満たすか判定することによって、プロセッサー１６は、条件２４を並べ替えることから生ずるおそれがある、アセンブリー・コード３８におけるエラーを防止することができる。正当さ制約３４の例については、以下で図２を参照しながら説明する。
【００２０】
[0023]  ソース・コード２０が、複数の条件２４が真のときに実行されるように構成された１つ以上の第１分岐評価命令４４を含む第１分岐コード・ブロック４２と、複数の条件２４の内少なくとも１つの条件２４が偽であるときに実行されるように構成された１つ以上の第２分岐評価命令４８を含む第２分岐コード・ブロック４６とを含む実施形態では、１つ以上の正当さ制約３４は、ソース・コード２０が１つの第１分岐コード・ブロック４２および１つの第２分岐コード・ブロック４６を含むという制約３４を含む。以上の正当さ制約３４が満たされるとき、ソース・コード２０は、１つよりも多い第１分岐コード・ブロック４２および／または１つよりも多い第２分岐コード・ブロック４６を含まない。加えてまたは代わりに、１つ以上の正当さ制約３４は、各条件２４のそれぞれのソース・コード２６が、図２において第１分岐コード・ブロック４２として示す、共通の目標コード・ブロックに進む命令２８を含むという制約を含んでもよい。つまり、コンパイラ３０は、複数の条件２４の順序付け３２における変化が、複合条件２２の評価後に、どのコード・ブロックを実行するかに影響を及ぼすのを防止することができる。
【００２１】
[0024]  ある実施形態では、図３に示すように、ソース・コード２０が、複数の条件２４のそれぞれのコード・ブロック２６の最後のコード・ブロック２６の後で、共通目標コード・ブロックの前に、部分５０を含んでもよい。例えば、図３に示すように、複合条件２２が「ｗｈｉｌｅ」ループ内に含まれるとき、ソース・コード２０の部分５０は、変数を増分する１つ以上の命令を含む少なくとも１つのコード・ブロックであってもよい。ソース・コード２０の部分５０の他の機能も考えられる。このような実施形態では、１つ以上の正当さ制約３４が、複数の条件２４のそれぞれのコード・ブロック２６の最後のコード・ブロック２６の後で、共通目標コード・ブロックの前にあるソース・コード２０の部分５０が、１つの入口ポイントおよび１つの出口ポイントを有するという制約を含むのでもよい。このような実施形態では、入口ポイントは、ソース・コード２０の部分５０において、プロセッサー１６がソース・コード２０の部分５０を実行し始めることができる命令としてもよい。同様に、出口ポイントは、プロセッサー１６がソース・コード２０の部分５０の実行を停止する命令としてもよい。
【００２２】
[0025]  ある実施形態では、１つ以上の正当さ制約３４が、未定義変数をコールする命令２８がないという制約を含んでもよい。命令２８が未定義変数をコールする可能性があるシナリオの２つの例について、以下に説明する。１つの例では、未定義変数は未追跡メモリ・アドレス(untracked memory address)であってもよい。未追跡メモリ・アドレスを間接参照する(dereference)命令２８が、未追跡メモリ・アドレスを追跡する命令２８の前に現れるとき、未定義変数エラーが発生する可能性がある。第２の例では、命令２８が、変数を定義する他の命令２８よりも前にその変数を使用するときに、未定義変数エラーが発生する可能性がある。
【００２３】
[0026]  ある実施形態では、１つ以上の正当さ制約３４が、除算または剰余演算であって除数が０の値を有する可能性がある命令２８を含むコード・ブロック２６がないという制約を含む場合がある。この正当さ制約３４をチェックすることによって、プロセッサー１６は、条件２４を並べ替えることによって生ずるゼロ除算エラーを防止することができる。
【００２４】
[0027]  複数の順序付け３２に含まれる並べ替え候補が、プロセッサー１６によってチェックされた各正当さ制約３４を満たさないとき、コンパイラ３０は、図１に示すように、警告メッセージ５２を出力することができる。警告メッセージ５２は、ある実施形態では、計算コストが低くなる順序付け３２を有するように複合条件２２を並べ替えることができないという指示を含んでもよい。警告メッセージ５２は、ソース・コード２０において、複合条件２２が発生する位置の指示（例えば、ライン番号）を含むこともできる。ある実施形態では、コンパイラ３０が警告メッセージ５２を出力するとき、アセンブリー・コード３８を出力しなくてもよい。
【００２５】
[0028]  複数の順序付け３２の内、１つ以上の正当さ制約３４を満たす順序付け３２毎に、プロセッサー１６は、更に、その順序付け３２についてそれぞれの推定計算コスト３６を判定するように構成することができる。順序付け３６のそれぞれの推定計算コスト３６は、各コード・ブロック２６に含まれる１つ以上の命令２８に割り当てられる所定の静止値に基づいて、判定することができる。つまり、順序付け３２の推定計算コスト３６は、同様の命令の過去の計算コストに関係するデーターを収集する必要なく、判定することができる。
【００２６】
[0029]  一実施形態例による推定計算コスト３６の判定を、図４を参照しながら更に詳しく示す。図４に示すように、複数の条件２４が特定の順序付け３２を有するときに条件２４に含まれるコード・ブロック２６の推定計算コスト３６を判定するために、プロセッサー１６は、コード・ブロック２６に含まれる各命令２８に推定計算コスト表６０を参照することができる。推定計算コスト表６０は、コード・ブロック内における命令の型毎に、所定の静止値を含む。つまり、推定計算コスト表６０は、１つ以上の型の演算６２について、その演算６２に伴う推定コスト・スコア６４を含むことができる。演算６２の型には、例えば、加算、減算、比較、否定、除算、剰余、ＡＮＤ、ＯＲ、ＸＯＲ、最小、最大、ロード、格納、および／または１つ以上の他の演算６２を含むことができる。推定計算コスト表に掲示される各型の演算６２は、図４における推定計算コスト表６０の第２列に示すように、推定コスト・スコア６４を有することができる。ある実施形態では、各演算が推定整数コストおよび推定浮動小数点コストを有してもよい。推定整数コストは、整数計算を使用して実行したときの演算６２の推定コスト・スコア６４とすればよく、推定浮動小数点コストは、浮動小数点計算を使用して実行したときの演算６２の推定コスト・スコア６４とすればよい。
【００２７】
[0030]  プロセッサー１６は、通例では先に説明した表を参照することによって、コード・ブロック２６に含まれる各命令２８に、それぞれの推定コスト・スコア６４を判定するように構成することができる。加えて、プロセッサー１６は、複数の条件２４が順序付け３２を有するときに、このようにしてコード・ブロック２６毎に各命令２８のそれぞれの推定コスト・スコア６４を判定することができる。つまり、プロセッサー１６は、順序付け３２に含まれる各命令２８に推定コスト・スコア６４を割り当てるように構成することができる。各命令２８のそれぞれの推定コスト・スコア６４に基づいて、プロセッサー１６は順序付けの推定計算コスト３６を判定することができる。例えば、順序付け３２の推定計算コスト３６は、各命令２８に割り当てられるそれぞれの推定コスト・スコア６４を合計することによって、判定されてもよい。あるいは、推定計算コスト３６は、何らかの他の式を使用して判定されてもよい。例えば、少なくとも１つの推定コスト・スコア６４に重み係数を適用してもよい。
【００２８】
[0031]  ある実施形態では、プロセッサー１６が、１つ以上の正当さ制約３４を満たす各順序付け３２についてのみ、推定計算コスト３６を判定してもよい。他の実施形態では、プロセッサー１６が、その順序付け３２が１つ以上の正当さ制約３４を満たすか否かチェックする前に、各順序付け３２の推定計算コスト３６を判定してもよい。このような実施形態では、プロセッサー１６が、所定の閾値を超える推定計算コスト３６を有するあらゆる順序付け３２を破棄するように構成されてもよい。この推定計算コストのフィルタリングは、１つ以上の正当さ制約３４を満たすことをチェックする前に、行われるとよい。
【００２９】
[0032]  更に、プロセッサー１６は、１つ以上の正当さ制約３４を満たす複数の順序付け３２の内、最も低い推定計算コスト３６を有する順序付け３２を判定するように構成することができる。次いで、プロセッサー１６は、１つ以上の正当さ制約３４を満たす複数の順序付け３２の内、最も低い推定計算コスト３６の順序付け３２を有するように、複数の条件２４を並べ替えることができる。最も低い推定計算コスト３６の順序付けが、複数の条件２４の元の順序付け３２である場合、プロセッサー１６はこの元の順序付け３２を維持するように構成することができる。２つ以上の順序付け３２が最も低い推定計算コスト３６のために結び付けられる場合、プロセッサー１６は、２つ以上の順序付け３２から１つの順序付け３２を選択し、選択した順序付け３２を有するように複数の条件２４を並べ替えればよく、元の順序付け３２が２つ以上の順序付け３２に含まれる場合、元の順序付け３２を維持すればよい。
【００３０】
[0033]  それぞれの順序付け３２の推定計算コスト３６が、順序付け３２が１つ以上の正当さ制約３４を満たすか否かチェックする前に判定される実施形態では、プロセッサー１６は、推定計算コスト３６を基に１つ以上の順序付け３２をソートするように構成することができる。次いで、プロセッサー１６は、各順序付け３２が１つ以上の正当さ制約３４を満たすか否か、複数の順序付け３２の間で推定計算コスト３６が小さい順に、判定することができる。プロセッサー１６は、１つ以上の正当さ制約３４を満たす最も低い推定計算コスト３６の順序付け３２が判定されるまで、このようにして、順序付け３２が１つ以上の正当さ制約３４を満たすことをチェックすることができる。更に、プロセッサー１６は、１つ以上の正当さ制約３４を満たす最も低い推定計算コスト３６の順序付け３２を有するように、複数の条件２４を並べ替えるように構成することができる。例えば、順序付け３２間における推定計算コスト３６の差が大きいと予想されるとき、および／または順序付け３２の推定計算コスト３６の方が、順序付け３２が１つ以上の正当さ制約３４を満たすか否かよりも素早く判定できるとき、正当さ制約３４をチェックするよりも前に順序付け３２の推定計算コスト３６をチェックすることには利点があるのはもっともである。
【００３１】
[0034]  図５は、一実施形態例にしたがって、コンピューティング・デバイスのプロセッサーによって実行される方法１００のフローチャートを示す。コンピューティング・デバイスは、図１のコンピューティング・デバイス１０であってもよい。ステップ１０２において、この方法は、コンパイラにおいてソース・コードを受ける処理を含むことができる。ソース・コードは、複数の条件を有する少なくとも１つの複合条件を含んでもよい。ある実施形態では、複合条件が３つ以上の条件を含む場合もある。複合条件は、２つ以上のブール値条件と、ＡＮＤ、ＯＲ、ＸＯＲ、および／またはＮＡＮＤのような１つ以上の論理演算子とを含んでもよい。更に、複合条件は、複数の条件の中の各条件について、条件を評価するための１つ以上の命令を含むそれぞれのコード・ブロックを含んでもよい。ある実施形態では、各コード・ブロックが基本ブロックであってもよい。他の実施形態では、少なくとも１つのコード・ブロックが複数の基本ブロックを含んでもよい。
【００３２】
[0035]  ステップ１０４において、方法１００は、更に、複数の条件の複数の順序付けの中の各順序付けについて、その順序付けが１つ以上の正当さ制約を満たすことを判定する処理を含むことができる。正当さ制約とは、特定の順序付けとした１つ以上の条件の１つ以上の構文的プロパティに基づく制約であり、１つ以上の条件が正当さ制約を満たさないとき、アセンブリー・コードをその順序付けで出力することが禁止されるようにする制約である。一例として、１つ以上の正当さ制約が、各条件のそれぞれのコード・ブロックが、共通の目標コード・ブロックに進むための命令を含むという制約を含んでもよい。つまり、条件の順序付けに依存する望ましくない分岐を防止することができる。
【００３３】
[0036]  他の例として、１つ以上の正当さ制約が、複数の条件のそれぞれのコード・ブロックの最後のコード・ブロックの後ろであって、共通目標コード・ブロックの前にあるソース・コードの部分が１つの入口ポイントおよび１つの出口ポイントを有するという制約を含んでもよい。この正当さ制約は、最後のコード・ブロックの後ろであって共通目標コード・ブロックの前にあるソース・コードの部分への望ましくないエントリーおよび／またはそこからのイグジットのために、入口ポイントの前または出口ポイントの後にある命令を、プロセッサーが飛ばすのを防止することができる。
【００３４】
[0037]  他の例として、１つ以上の正当さ制約が、未定義変数をコールする命令がないという制約を含む。変数が第１条件において定義され、後に条件の元の順序付けにおける第２条件においてコールされるとき、未定義変数へのコールが、第２条件が第１条件の前に移動されるときに発生する可能性がある。以上の正当さ制約は、このような並べ替えが行われないことを判定するために、チェックすることができる。
【００３５】
[0038]  他の例として、１つ以上の正当さ制約が、除数がゼロの値を有する可能性がある除算または剰余演算である命令を、コード・ブロックが含まないという制約を含んでもよい。
【００３６】
[0039]  ある実施形態では、ソース・コードが、更に、複数の条件が真であるときに実行されるように構成された１つ以上の第１分岐評価命令を含む第１分岐コード・ブロックを含んでもよい。更に、ソース・コードは、複数の条件の内少なくとも１つの条件が偽であるときに実行されるように構成された１つ以上の第２分岐評価命令を含む第２分岐コード・ブロックも含んでもよい。例えば、複合条件が「ｉｆ」ステートメントに含まれるとき、第２分岐コード・ブロックは「ｉｆ」ステートメントの「ｅｌｓｅ」分岐であってもよい。このような実施形態では、１つ以上の正当さ制約が、ソース・コードが、複数の第１分岐コード・ブロックおよび／または第２分岐コード・ブロックではなく、１つの第１分岐コード・ブロックおよび１つの第２分岐コード・ブロックを含むという制約を含んでもよい。
【００３７】
[0040]  ステップ１０６において、方法１００は、更に、１つ以上の正当さ制約を満たす複数の順序付けの中の各順序付けについて、その順序付けのそれぞれの推定計算コストを判定する処理を含むことができる。ある実施形態では、各順序付けのそれぞれの推定計算コストを判定する処理が、ステップ１０８において、その順序付けに含まれる各命令に推定コスト・スコアを割り当てる処理を含んでもよい。推定コスト・スコアは、例えば、命令によって示された動作に関連する推定コスト・スコアを推定計算コスト表から読み出すことによって判定されてもよい。ある実施形態では、１つ以上の命令の推定コスト・スコアに重み係数を適用してもよい。次に、ステップ１１０において、例えば、各命令に割り当てられたそれぞれの推定コスト・スコアを合計することによって、順序付けの推定計算コストを判定することができる。ある実施形態では、加えてまたは代わりに、順序付けの推定計算コストを判定するために、推定コスト・スコアに対して１つ以上の他の動作が実行されてもよい。
【００３８】
[0041]  ステップ１１２において、方法１００は、更に、１つ以上の正当さ制約を満たす複数の順序付けの内最も低い推定計算コストを有する順序付けを有するように、複数の条件を並べ替える処理を含むことができる。複数の条件の元の順序付けが１つ以上の正当さ制約を満たし、最も低い推定計算コストを有するとき、方法１００は代わりに元の順序付けを維持する処理を含むことができる。
【００３９】
[0042]  以上で説明したシステムおよび方法では、並べ替えられる少なくとも１つの複合条件が２つの条件を含むが、２つよりも多い条件が並べ替えられる実施形態も考えられる。例えば、複合条件が「ｉｆ（ａ｜｜ｂ）＆＆（ｃ｜｜ｄ）」という形態を有してもよい。このような例では、複合条件が「ｉｆ（ｃ｜｜ｄ）＆＆（ａ｜｜ｂ）となるように、ブロック「（ａ｜｜ｂ）」および「（ｃ｜｜ｄ）」を並べ替えてもよい。あるいは、複合条件が、一例では、「ｉｆ（ｂ｜｜ａ）＆＆（ｄ｜｜ｃ）となるように、条件ａ、ｂ、ｃ、およびｄを並べ替えてもよい。２つよりも多い条件を評価する実施形態では、１つ以上の条件が、複数の基本ブロックを含むそれぞれのコード・ブロックを有してもよい。
【００４０】
[0043]  以上で説明したような複合条件の並べ替えは、以下で示すコード例を参照して示すように、複合条件を含まないコード・ブロックの並べ替えを含むように一般化することもできる。この例では、以下のＣ＋＋コードに含まれるコード・ブロックを並べ替えることができる。
【００４１】
【表３】
2021521538.tif 000005
【００４２】
以上に示すコード例では、計算「ｖａｒ」は計算「ｐｒｅｄ」よりもコストがかかる。つまり、このコード例は、コード・ブロックを以下の順序、ブロック５、ブロック１、ブロック２、ブロック３、ブロック４、ブロック６、ブロック７に並べ替えることによって、実行にかかる計算コストを一層低減することができる。正当さ制約のチェックおよび計算コスト推定のシステムならびに方法は、１つ以上の正当さ制約を満たし、最も少ない推定計算コストを有するコード・ブロックの順序付けを判定するために、適用することができる。
【００４３】
[0044]  これを遂行するためには、以下の方法を実行するように構成されたコンピューティング・デバイスを提供すればよい。最初に、複数のコード・ブロックを含むソース・コードをコンパイラにおいて受けることができる。このソース・コードは、複数の可能な順序付けの内の１つである、初期順序付けを有することができる。即ち、初期順序付けを、複数の並べ替え候補の１つに、並べ替えることができる。複数のコード・ブロックの複数の順序付けの中の各順序付けについて、コンピューティング・デバイスは、以上で説明した正当さ制約と同様の１つ以上の正当さ制約を、その順序付けが満たすことを判定するように構成することができる。１つ以上の正当さ制約を満たす複数の順序付けの中の各順序付けについて、コンピューティング・デバイスは、その順序付けのそれぞれの推定計算コストを判定し、１つ以上の正当さ制約を満たす複数の順序付けの内、最も低い推定計算コストを有する順序付けを有するように、複数のコード・ブロックを並べ替えるように構成することができる。推定計算コストは、以上で説明した方法と同様の方法を使用して判定すればよい。
【００４４】
[0045]  以上で説明したシステムおよび方法を使用すると、コンピューティング・デバイスは、複数の複合条件の内どれが、構文の規則に関する(syntactic)正当さ制約を満たしつつ最も少ない計算リソースで済む可能性が最も高いか判定することができる。この手法により、 検査評価を通らない(fail)単純な条件の前に複雑な条件が不必要に評価されたときに以前では生じていた、以前のシステムの無駄な処理を回避することができる。つまり、以上で説明したシステムおよび方法は、コンパイルされたコードを、以前から存在していた方法を使用してコンパイルされるコードよりも効率的に実行することを可能にすることができる。
【００４５】
[0046]  ある実施形態では、本明細書において説明した方法およびプロセスを、１つ以上のコンピューティング・デバイスのコンピューティング・デバイスに結び付けてもよい。具体的には、このような方法およびプロセスは、コンピューター・アプリケーション・プログラムまたはサービス、アプリケーション・プログラミング・インターフェース（ＡＰＩ）、ライブラリー、および／または他のコンピューター・プログラム製品として実装することができる。
【００４６】
[0047]  図６は、以上で説明した方法およびプロセスの１つ以上を実施することができるコンピューティング・システム２００の非限定的実施形態を模式的に示す。コンピューティング・システム２００は簡略化した形態で示されている。コンピューティング・システム２００は、例えば、図１のコンピューティング・デバイス１０を具体化することができ、または代わりに何らかの他のコンピューティング・システムを具体化することもできる。コンピューティング・システム２００は、１つ以上のパーソナル・コンピューター、サーバー・コンピューター、タブレット・コンピューター、家庭用娯楽コンピューター、ネットワーク・コンピューティング・デバイス、ゲーミング・デバイス、移動体コンピューティング・デバイス、移動体通信デバイス（例えば、スマート・フォーン）および／または他のコンピューティング・デバイス、ならびにスマート腕時計および頭部装着拡張／仮想現実デバイスのようなウェアラブル・コンピューティング・デバイスの形態をなすことができる。
【００４７】
[0048]  コンピューティング・システム２００は、ロジック・プロセッサー２０２、揮発性メモリー２０４、および不揮発性記憶デバイス２０６を含む。コンピューティング・システム２００は、随意に、表示サブシステム２０８、入力サブシステム２１０、通信サブシステム２１２、および／または図６には示されていない他のコンポーネントも含んでもよい。
【００４８】
[0049]  ロジック・プロセッサー２０２は、命令を実行するように構成された１つ以上の物理デバイスを含む。例えば、ロジック・プロセッサーは、１つ以上のアプリケーション、プログラム、ルーチン、ライブラリー、オブジェクト、コンポーネント、データー構造、または他の論理構造の一部である命令を実行するように構成することができる。このような命令は、タスクを実行する、データー型を実装する、１つ以上のコンポーネントの状態を変換する(transform)、技術的効果を達成する、または他の方法で所望の結果に到達するために実装されるのでもよい。
【００４９】
[0050]  ロジック・プロセッサー２０２は、ソフトウェア命令を実行するように構成された１つ以上の物理プロセッサー（ハードウェア）を含むことができる。加えてまたは代わりに、ロジック・プロセッサー２０２は、ハードウェア実装ロジックまたはファームウェア命令を実行するように構成された１つ以上のハードウェア・ロジック回路またはファームウェア・デバイスを含んでもよい。ロジック・プロセッサー２０２のプロセッサーは、シングルコアまたはマルチコアでもよく、そこで実行される命令は、順次、並列、および／または分散処理に合わせて構成することができる。ロジック・プロセッサー２０２の個々のコンポーネントは、随意に、２つ以上の別個のデバイス間で分散されてもよく、２つ以上の別個のデバイスは、離れて配置されてもよく、および／または調和を考慮した処理に合わせて構成されてもよい。ロジック・プロセッサーの態様は、クラウド・コンピューティング構成に構成され、離れてアクセス可能なネットワーク接続コンピューティング・デバイスによって、仮想化および実行することもできる。このような場合、これらの仮想化の態様は、種々の異なる機械の異なる物理ロジック・プロセッサー上で実行することができる。
【００５０】
[0051]  揮発性メモリー２０４は、ランダム・アクセス・メモリーを含む物理デバイスを含んでもよい。揮発性メモリー２０４は、通例、ソフトウェア・命令の処理中に情報を一時的に格納するために、ロジック・プロセッサー２０２によって利用される。尚、揮発性メモリー２０４は、通例、揮発性メモリー２０４への電力が切られたときには、命令を格納し続けないことは認められよう。
【００５１】
[0052]  不揮発性記憶デバイス２０６は、本明細書において説明する方法およびプロセスを実施するためにロジック・プロセッサーによって実行可能な命令を保持するように構成された１つ以上の物理デバイスを含む。このような方法およびプロセスが実装されるとき、不揮発性記憶デバイス２０６の状態は、例えば、異なるデーターを保持するために、変換することができる。
【００５２】
[0053]  不揮発性記憶デバイス２０６は、リムーバブルおよび／または内蔵型の物理デバイスを含むことができる。不揮発性記憶デバイス２０６は、光メモリー（例えば、ＣＤ、ＤＶＤ、ＨＤ−ＤＶＤ、Ｂｌｕ−Ｒａｙディスク等）、半導体メモリー（例えば、ＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、ＦＬＡＳＨメモリー等）、および／または磁気メモリー（例えば、ハード・ディスク・ドライブ、フロッピー・ディスク・ドライブ、テープ・ドライブ、ＭＲＡＭ等）、あるいは他の大容量記憶デバイス技術を含むことができる。不揮発性記憶デバイス２０６は、不揮発性、ダイナミック、スタティック、読み取り／書き込み、読み取り専用、シーケンシャル・アクセス、位置アドレス可能、ファイル・アドレス可能、および／またはコンテンツ・アドレス可能デバイスを含むことができる。尚、不揮発性記憶デバイス２０６は、不揮発性記憶デバイス２０６への電力が切られたときでも、命令を保持するように構成されることは認められよう。
【００５３】
[0054]  ロジック・プロセッサー２０２、揮発性メモリー２０４、および不揮発性記憶デバイス２０６の態様は、１つ以上のハードウェア・ロジック・コンポーネントに纏めて統合されてもよい。このようなハードウェア・ロジック・コンポーネントには、例えば、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）、特定プログラムおよび用途集積回路（ＰＡＳＩＣ／ＡＳＩＣ：program- and application-specific integrated circuit）、特定プログラムおよび用途標準製品（ＰＳＳＰ／ＡＳＳＰ：program- and application-specific standard product）、システム・オン・チップ（ＳＯＣ）、ならびに複合プログラマブル・ロジック・デバイス（ＣＰＬＤ）を含むことができる。
【００５４】
[0055]  「プログラム」という用語は、特定の機能を実行するために実施されるコンピューティング・システム２００の態様を記述するために使用することができる。場合によっては、プログラムは、ロジック・プロセッサー２０２が、揮発性メモリー２０４の一部を使用して、不揮発性記憶デバイス２０６によって保持されている命令を実行することによって、インスタンス化されるのでもよい。尚、異なるプログラムが同じアプリケーション、サービス、コード・ブロック、オブジェクト、ライブラリー、ルーチン、ＡＰＩ、関数等からインスタンス化される場合もあることは理解されよう。同様に、同じプログラムが、異なるアプリケーション、サービス、コード・ブロック、オブジェクト、ルーチン、ＡＰＩ、関数等によってインスタンス化されることもある。「プログラム」という用語は、実行可能ファイル、データー・ファイル、ライブラリー、ドライバー、スクリプト、データーベース・レコード等の個々のものまたは集合体を包含する。
【００５５】
[0056]   表示サブシステム２０８が含まれるとき、不揮発性記憶デバイス２０６によって保持されているデーターの視覚的表現を提示するために使用することができる。本明細書において説明した方法およびプロセスが、不揮発性記憶デバイス２０６によって保持されているデーターを変化させ、つまり不揮発性記憶デバイス２０６の状態を変換させる(transform)に連れて、表示サブシステム２０８の状態も同様に、基礎となるデーターにおける変化を視覚的に表すために、変換することができる。表示サブシステム２０８は、事実上あらゆるタイプの技術を利用する１つ以上の表示デバイスを含むことができる。このような表示デバイスは、ロジック・プロセッサー２０２、揮発性メモリー２０４、および／または不揮発性記憶デバイス２０６と共に、共有筐体内に組み合わせられてもよく、あるいはこのような表示デバイスは周辺表示デバイスであってもよい。
【００５６】
[0057]  含まれるとき、入力サブシステム２１０は、キーボード、マウス、タッチ・スクリーン、またはゲーム・コントローラーのような１つ以上のユーザー入力デバイスを備える、あるいはこれらとインターフェースすることができる。ある実施形態では、入力サブシステム２１０が、選択された自然ユーザー入力（ＮＵＩ）コンポーネントリー(componentry)を備える、またはこれらとインターフェースすることができる。このようなコンポーネントリーは、統合されてもまたは周辺デバイスであってもよく、入力アクションのトランザクションおよび／または処理は、内部で(on-board)または外部で(off-board)で処理されてもよい。ＮＵＩコンポーネントリーの例には、音声(speech and/or voice)認識用マイクロフォン、マイン・ビジョンおよび／またはジェスチャ認識用赤外線、カラー、立体視、および／または深度カメラ、動き検出、凝視検出、および／または意図認識用ヘッド・トラッカー、眼球トラッカー、加速度計、および／またはジャイロスコープ、更には脳活動を評価するための電界検知コンポーネントリー、および／または任意の他の適したセンサを含むことができる。
【００５７】
[0058]  通信サブシステム２１２が含まれるとき、コンピューティング・システム２００を１つ以上の他のコンピューティング・デバイスと通信可能に結合するように構成することができる。通信サブシステム２１２は、１つ以上の異なる通信プロトコルと互換性がある有線および／またはワイヤレス通信デバイスを含むことができる。非限定的な例として、通信サブシステム２１２は、ワイヤレス電話回線、あるいは有線またはワイヤレス・ローカル・エリア・ネットワークもしくはワイド・エリア・ネットワークを介した通信のために構成されてもよい。ある実施形態では、通信サブシステム２１２は、コンピューティング・システム２００がインターネットのようなネットワークを介してメッセージを他のデバイスに送るおよび／またはメッセージを他のデバイスから受信することを可能にすることもできる。
【００５８】
[0059]  本開示の一態様によれば、コンパイラにおいてソース・コードを受けるように構成されたプロセッサーを含むコンピューティング・デバイスを提供する。ソース・コードは、複数の条件を有する少なくとも１つの複合条件と、複数の条件の中の各条件について、 その条件を評価する１つ以上の命令を含むそれぞれのコード・ブロックとを含んでもよい。複数の条件の複数の順序付けの中の各順序付けについて、プロセッサーは、更に、その順序付けが１つ以上の正当さ制約を満たすことを判定するように構成されてもよい。１つ以上の正当さ制約を満たす複数の順序付けの中の各順序付けについて、プロセッサーは、更に、その順序付けのそれぞれの推定計算コストを判定するように構成されてもよい。更に、プロセッサーは、１つ以上の正当さ制約を満たす複数の順序付けの内、最低の推定計算コストを有する順序付けを有するように、複数の条件を並べ替えるように構成されてもよい。
【００５９】
[0060]  この態様によれば、ソース・コードは、更に、複数の条件が真のときに実行されるように構成された１つ以上の第１分岐評価命令を含む第１分岐コード・ブロックを含んでもよい。更に、ソース・コードは、複数の条件の内少なくとも１つの条件が偽であるときに実行されるように構成された１つ以上第２分岐評価命令を含む第２分岐コード・ブロックを含んでもよい。
【００６０】
[0061]  この態様によれば、１つ以上の正当さ制約が、ソース・コードが１つの第１分岐コード・ブロックと１つの第２分岐コード・ブロックとを含むという制約を含んでもよい。
【００６１】
[0062]  この態様によれば、１つ以上の正当さ制約が、各条件のそれぞれのコード・ブロックが、共通目標コード・ブロックに進むための命令を含むという制約を含んでもよい。
【００６２】
[0063]  この態様によれば、１つ以上の正当さ制約が、複数の条件のそれぞれのコード・ブロックの最後のコード・ブロックの後ろであって、共通目標コード・ブロックの前にあるソース・コードの部分が、１つの入口ポイントおよび１つの出口ポイントを有するという制約を含んでもよい。
【００６３】
[0064]  この態様によれば、１つ以上の正当さ制約が、未定義変数をコールする命令がないという制約を含んでもよい。
[0065]  この態様によれば、各コード・ブロックが基本ブロックであってもよい。
【００６４】
[0066]   この態様によれば、少なくとも１つのコード・ブロックが複数の基本ブロックを含んでもよい。
[0067]  この態様によれば、プロセッサーが、各順序付けについて、少なくとも部分的に、その順序付けに含まれる各命令に推定コスト・スコアを割り当て、各命令に割り当てられたそれぞれの推定コスト・スコアを合計することによって、それぞれの推定計算コストを判定するように構成されてもよい。
【００６５】
[0068]  本開示の他の態様によれば、コンピューティング・デバイスのプロセッサーによって実行される方法を提供する。この方法は、コンパイラにおいてソース・コードを受けるステップを含んでもよい。ソース・コードは、複数の条件を有する少なくとも１つの複合条件と、複数の条件の各条件について、その条件を評価するための１つ以上の命令を含むそれぞれのコード・ブロックとを含んでもよい。複数の条件の複数の順序付けの中の各順序付けについて、この方法は、更に、その順序付けが１つ以上の正当さ制約を満たすことを判定するステップを含んでもよい。１つ以上の正当さ制約を満たす複数の順序付けの中の各順序付けについて、この方法は、更に、その順序付けについて、それぞれの推定計算コストを判定するステップを含んでもよい。更に、この方法は、１つ以上の正当さ制約を満たす複数の順序付けの内、最も低い推定計算コストを有する順序付けを有するように、複数の条件を並べ替えるステップを含んでもよい。
【００６６】
[0069]  この態様によれば、ソース・コードは、更に、複数の条件が真のときに実行されるように構成された１つ以上の第１分岐評価命令を含む第１分岐コード・ブロックを含んでもよい。更に、ソース・コードは、複数の条件の内少なくとも１つの条件が偽であるときに実行されるように構成された１つ以上第２分岐評価命令を含む第２分岐コード・ブロックを含んでもよい。
【００６７】
[0070]  この態様によれば、１つ以上の正当さ制約が、ソース・コードが１つの第１分岐コード・ブロックと１つの第２分岐コード・ブロックとを有するという制約を含んでもよい。
【００６８】
[0071]  この態様によれば、１つ以上の正当さ制約が、複数の条件のそれぞれのコード・ブロックの最後のコード・ブロックの後ろであって、共通目標コード・ブロックの前にあるソース・コードの部分が、１つの入口ポイントおよび１つの出口ポイントを有するという制約を含んでもよい。
【００６９】
[0072]  この態様によれば、１つ以上の正当さ制約が、未定義変数をコールする命令がないという制約を含んでもよい。
[0073]  この態様によれば、各コード・ブロックが基本ブロックであってもよい。
【００７０】
[0074]  この態様によれば、各順序付けについてそれぞれの推定計算コストを判定するステップが、その順序付けに含まれる各命令に推定コスト・スコアを割り当て、各命令に割り当てられたそれぞれの推定コスト・スコアを合計するステップを含んでもよい。
【００７１】
[0075]  本開示の他の態様によれば、コンパイラにおいてソース・コードを受けるように構成されたプロセッサーを含むコンピューティング・デバイスを提供する。ソース・コードは、複数のコード・ブロックを含んでもよい。複数のコード・ブロックの複数の順序付けの中の各順序付けについて、プロセッサーは、更に、その順序付けが１つ以上の正当さ制約を満たすことを判定するように構成されてもよい。１つ以上の正当さ制約を満たす複数の順序付けの中の各順序付けについて、プロセッサーは、更に、その順序付けについてそれぞれの推定計算コストを判定するように構成されてもよい。更に、プロセッサーは、１つ以上の正当さ制約を満たす複数の順序付けの内、最も低い推定計算コストを有する順序付けを有するように、複数のコード・ブロックを並べ替えるように構成されてもよい。
【００７２】
[0076]  尚、本明細書において説明した構成および／または手法は本質的に例示であること、そして多数の変形が可能であるので、これらの具体的な実施形態または例は、限定的な意味で解釈されるべきでないことは理解されよう。本明細書において説明した特定のルーチンおよび方法は、任意の数の処理戦略の内１つ以上を表すことができる。したがって、図示および／または説明した種々のアクトは、図示および／または説明した順序で、他の順序で、並列に実行されてもよく、または省略されてもよい。同様に、以上で説明したプロセスの順序を変更してもよい。
【００７３】
[0077]  本開示の主題は、 種々のプロセス、システム、および構成、ならびに本明細書において開示した他の特徴、機能、アクト、および／またはプロパティの新規なおよび非自明な全てのコンビネーションならびにサブコンビネーションだけでなく、それらの任意の均等物そして全ての均等物を含む。
【図１】
2021521538.tif 000006
【図２】
2021521538.tif 000007
【図３】
2021521538.tif 000008
【図４】
2021521538.tif 000009
【図５】
2021521538.tif 000010
【図６】
2021521538.tif 000011
【国際調査報告】
2021521538.tif 000012
2021521538.tif 000013
2021521538.tif 000014