IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ ベイジン バイドゥ ネットコム サイエンス アンド テクノロジー カンパニー リミテッドの特許一覧 ▶ クンルンシン テクノロジー (ベイジン) カンパニー リミテッドの特許一覧

特許7177812命令プリフェッチ方法、装置、機器及び媒体
<>
  • 特許-命令プリフェッチ方法、装置、機器及び媒体 図1
  • 特許-命令プリフェッチ方法、装置、機器及び媒体 図2
  • 特許-命令プリフェッチ方法、装置、機器及び媒体 図3
  • 特許-命令プリフェッチ方法、装置、機器及び媒体 図4
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2022-11-15
(45)【発行日】2022-11-24
(54)【発明の名称】命令プリフェッチ方法、装置、機器及び媒体
(51)【国際特許分類】
   G06F 9/38 20060101AFI20221116BHJP
【FI】
G06F9/38 310A
G06F9/38 330F
【請求項の数】 6
(21)【出願番号】P 2020201010
(22)【出願日】2020-12-03
(65)【公開番号】P2021089736
(43)【公開日】2021-06-10
【審査請求日】2020-12-03
(31)【優先権主張番号】201911225633.1
(32)【優先日】2019-12-04
(33)【優先権主張国・地域又は機関】CN
【前置審査】
(73)【特許権者】
【識別番号】514322098
【氏名又は名称】ベイジン バイドゥ ネットコム サイエンス テクノロジー カンパニー リミテッド
【氏名又は名称原語表記】Beijing Baidu Netcom Science Technology Co., Ltd.
【住所又は居所原語表記】2/F Baidu Campus, No.10, Shangdi 10th Street, Haidian District, Beijing 100085, China
(73)【特許権者】
【識別番号】521457387
【氏名又は名称】クンルンシン テクノロジー (ベイジン) カンパニー リミテッド
【氏名又は名称原語表記】Kunlunxin Technology (Beijing) Company Limited
【住所又は居所原語表記】CW Section, F/4, Building 1, No.10, Shangdi 10th Street, Haidian District, 100101, Beijing, China
(74)【代理人】
【識別番号】100118913
【弁理士】
【氏名又は名称】上田 邦生
(72)【発明者】
【氏名】タン, チャオ
(72)【発明者】
【氏名】ドゥー, シューリアング
(72)【発明者】
【氏名】シュー, イナン
【審査官】田中 幸雄
(56)【参考文献】
【文献】特開平8-77000(JP,A)
【文献】特開平5-313894(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 9/38
(57)【特許請求の範囲】
【請求項1】
プロセッサコアが対応するターゲットバッファから必要な命令を取得する前に、前記ターゲットバッファ内の命令をプリコンパイルするステップと、
プリコンパイルした結果に基づいて、前記ターゲットバッファにジャンプ命令が存在し、且つジャンプ命令に対応する分岐命令が前記ターゲットバッファにキャッシュされていないと決定された場合、キャッシュされていない分岐命令を命令キャッシュから前記プロセッサコアに対応する候補バッファにプリフェッチして、前記プロセッサコアが前記候補バッファから前記分岐命令を取得するのを待つステップと、
を含み、
前記ターゲットバッファ及び前記候補バッファが、命令のプリフェッチ中に交互に使用され、
前記ターゲットバッファ内の命令をプリコンパイルするステップが、分岐ジャンプ予測アルゴリズムを使用して、前記ターゲットバッファ内の命令をプリコンパイルするステップを含み、
前記ターゲットバッファ内の命令をプリコンパイルするステップの後に、
予測失敗情報を受信した場合、前記プロセッサコアによるターゲットジャンプ命令の実行中に、前記ターゲットバッファのレジスタ及び前記候補バッファのレジスタにおいて命令アドレスマッチングを順次に実行し、前記ターゲットジャンプ命令の分岐命令が配置されているバッファを決定するステップを含む命令プリフェッチ方法。
【請求項2】
前記キャッシュされていない分岐命令を命令キャッシュから前記プロセッサコアに対応する候補バッファにプリフェッチするステップが、前記キャッシュされていない分岐命令内の最小の命令アドレスを最初のアドレスとして、前記命令キャッシュから予め設定された数の命令をプリフェッチし、前記プロセッサコアに対応する候補バッファにキャッシュするステップを含み、
前記キャッシュされていない分岐命令が、前記予め設定された数の命令に含まれる請求項1に記載の命令プリフェッチ方法。
【請求項3】
前記キャッシュされていない分岐命令を命令キャッシュから前記プロセッサコアに対応する候補バッファにプリフェッチするステップが、
前記キャッシュされていない分岐命令が前記プロセッサコアに対応する候補バッファにキャッシュされているか否かを決定するステップと、
いいえの場合に、前記キャッシュされていない分岐命令を前記命令キャッシュから前記候補バッファにプリフェッチするステップと、
を含む請求項1に記載の命令プリフェッチ方法。
【請求項4】
前記プロセッサコアが前記候補バッファから前記分岐命令を取得する時に、現在の命令がフェッチされるバッファ前記ターゲットバッファから前記候補バッファに切り替え、
前記プロセッサコアが前記候補バッファから前記分岐命令を取得する前に、前記候補バッファ内の命令をプリコンパイルして、前記候補バッファ内にキャッシュされていない分岐命令を決定するステップを含む請求項1に記載の命令プリフェッチ方法。
【請求項5】
前記命令アドレスマッチングに基づいて、前記ターゲットジャンプ命令に対応する分岐命令がいずれも前記ターゲットバッファ及び前記候補バッファに存在しないと決定された場合、前記ターゲットジャンプ命令に対応する分岐命令のアドレスを最初のアドレスとして、前記命令キャッシュから予め設定された数の命令をプリフェッチし、前記候補バッファにキャッシュするステップを含む請求項1に記載の命令プリフェッチ方法。
【請求項6】
プロセッサコアが対応するターゲットバッファから必要な命令を取得する前に、前記ターゲットバッファ内の命令をプリコンパイルする命令プリコンパイルモジュールと、
プリコンパイルした結果に基づいて、前記ターゲットバッファにジャンプ命令が存在し、且つジャンプ命令に対応する分岐命令が前記ターゲットバッファにキャッシュされていないと決定された場合、キャッシュされていない分岐命令を命令キャッシュから前記プロセッサコアに対応する候補バッファにプリフェッチして、前記プロセッサコアが前記候補バッファから前記分岐命令を取得するのを待つ命令プリフェッチモジュールと、
を備え、
前記ターゲットバッファ及び前記候補バッファが、命令のプリフェッチ中に交互に使用され、
前記命令プリコンパイルモジュールが、分岐ジャンプ予測アルゴリズムを使用して、ターゲットバッファ内の命令をプリコンパイルし、
前記命令プリコンパイルモジュールがタ ーゲットバッファ内の命令をプリコンパイルする動作を実行した後、予測失敗情報を受信した場合、プロセッサコアによるターゲットジャンプ命令の実行中に、ターゲットバッファのレジスタ及び候補バッファのレジスタにおいて命令アドレスマッチングを順番に実行し、ターゲットジャンプ命令の分岐命令が配置されているバッファを決定するためのバッファ決定モジュールを備える命令プリフェッチ装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンピュータ技術に関し、具体的に、データ記憶技術に関し、特に、命令プリフェッチ方法、装置、機器及び媒体に関する。
【背景技術】
【0002】
プリフェッチ命令操作は、プロセッサのパフォーマンスを向上させるために、様々なプロセッサで広く使われている。現在、マルチコアプロセッサに対して、主に次の2つの方式を採用してプリフェッチ命令操作を実現する。
【0003】
方式1においては、各プロセッサコアに1レベルのレジスタキャッシュを追加することを採用し、当該キャッシュのサイズは通常、命令キャッシュ(icache)のキャッシュラインである。一度にicacheから複数の命令を読み取り、追加されたレジスタキャッシュに保存し、当該レジスタキャッシュの命令が使い果たされた後、続けてicacheから複数の命令を読み取る。各プロセッサコアで命令分岐ジャンプ等の操作が発生する場合、ジャンプアドレス(pc値)がレジスタキャッシュにないと、当該コアがicacheからレジスタキャッシュへ命令を再度読み取るのを待つ必要があり、長い遅延を引き起こして、プロセッサのパフォーマンスに影響する。また、レジスタキャッシュのサイズがicacheのキャッシュラインと一致すると、現在リードバックされる命令が以前にキャッシュされた命令を上書きすることを避けるために、次の命令のフェッチ操作を開始する前に、以前にキャッシュされた命令が使い果たされるのを待つ必要があるので、命令のフェッチ遅延がさらに増加される。
【0004】
方式2においては、各プロセッサコアに1レベルのicacheを追加し、マルチコア競合の命令のフェッチ遅延を減少させ、各コアが自身のコア内のicacheから命令を読み取り、読み取られる命令がコア内のicacheにない場合、上位のicacheへ読み出し要求を開始する。しかしながら、各プロセッサコアに1レベルのicacheを追加すると、必ずプロセッサの全体の面積が増大し、プロセッサの加工製造コストが増加する。
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明の実施例は、プロセッサの加工製造コストを増加することなしに、各プロセッサコアが命令をフィッチする効率を向上させ、命令をフェッチする時間遅延を低減し、キャッシュ命令の上書きがプロセッサの動作に与える影響を低減することができる命令プリフェッチ方法、装置、機器及び媒体を開示する。
【課題を解決するための手段】
【0006】
第1の態様において、本発明の実施例は、命令プリフェッチ方法を開示し、当該方法は、プロセッサコアが対応するターゲットバッファから必要な命令を取得する前に、前記ターゲットバッファ内の命令をプリコンパイルするステップと、
プリコンパイルした結果に基づいて、前記ターゲットバッファにジャンプ命令が存在し、且つジャンプ命令の分岐命令が前記ターゲットバッファにキャッシュされていないと決定された場合、キャッシュされていない分岐命令を命令キャッシュから前記プロセッサコアに対応する候補バッファにプリフェッチして、前記プロセッサコアが前記候補バッファから前記分岐命令を取得するのを待つステップと、を含み、前記ターゲットバッファ及び前記候補バッファが、命令のプリフェッチ中に交互に多重化される。
【0007】
上記の発明における一つの実施例は、命令プリコンパイル及び二つのバッファを動的に使用することによって、プロセッサの加工製造コストを増加せずに、各プロセッサコアが命令をフェッチする効率を向上させ、命令をフェッチする時間遅延を低減し、キャッシュ命令の上書きがプロセッサの動作に与える影響を低減する利点又は有益な効果を有する。
【0008】
選択的に、前記キャッシュされていない分岐命令を命令キャッシュから前記プロセッサコアに対応する候補バッファにプリフェッチするステップが、前記キャッシュされていない分岐命令内の最小の命令アドレスを最初のアドレスとして、前記命令キャッシュから予め設定された数の命令をプリフェッチし、前記プロセッサコアに対応する候補バッファにキャッシュするステップを含み、前記キャッシュされていない分岐命令が、前記予め設定された数の命令に含まれる。
【0009】
上記の発明における一つの実施例は、キャッシュされていない分岐命令内の最小の命令アドレスを最初のアドレスとすることにより、先に実行された分岐命令をプリフェッチすることを保証するうえに、できるだけより多くの必要な命令をプリフェッチすることができる利点又は有益な効果を有する。
【0010】
選択的に、前記キャッシュされていない分岐命令を命令キャッシュから前記プロセッサコアに対応する候補バッファにプリフェッチするステップが、前記キャッシュされていない分岐命令が前記プロセッサコアに対応する候補バッファにキャッシュされているか否かを決定するステップと、いいえの場合、前記キャッシュされていない分岐命令を前記命令キャッシュから前記候補バッファにプリフェッチするステップと、を含む。
【0011】
選択的に、前記プロセッサコアが前記候補バッファから前記分岐命令を取得する時に、現在の命令フェッチバッファ対象が前記ターゲットバッファから前記候補バッファに切り替え、対応的に、前記方法は、前記プロセッサコアが前記候補バッファから前記分岐命令を取得する前に、前記候補バッファ内の命令をプリコンパイルして、前記候補バッファ内にキャッシュされていない分岐命令を決定するステップをさらに含む。
【0012】
選択的に、前記ターゲットバッファ内の命令をプリコンパイルするステップが、分岐ジャンプ予測アルゴリズムを使用して、前記ターゲットバッファ内の命令をプリコンパイルするステップを含む。
【0013】
選択的に、前記ターゲットバッファ内の命令をプリコンパイルするステップの後に、前記方法は、予測失敗情報を受信した場合、前記プロセッサコアによるターゲットジャンプ命令の実行中に、前記ターゲットバッファのレジスタ及び前記候補バッファのレジスタにおいて命令アドレスマッチングを順次に実行し、前記ターゲットジャンプ命令の分岐命令が配置されているバッファを決定するステップをさらに含む。
【0014】
上記の発明における一つの実施例は、同時に二つのバッファを採用して命令プリフェッチを実行するので、二つのバッファを交互に使用することによって、命令のプリフェッチ中に、できるだけ多くの命令を予めキャッシュすることができ、分岐命令予測失敗の状態があっても、分岐命令プリフェッチの状態を大幅にカバーすることができ、分岐命令を再度プリフェッチする待ち時間を減少することができる利点又は有益な効果を有する。
【0015】
選択的に、前記方法は、前記命令アドレスマッチングに基づいて、前記ターゲットジャンプ命令の分岐命令がいずれも前記ターゲットバッファ及び前記候補バッファに存在しないと決定された場合、前記ターゲットジャンプ命令の分岐命令のアドレスを最初のアドレスとして、前記命令キャッシュから予め設定された数の命令をプリフェッチし、前記候補バッファにキャッシュするステップをさらに含む。
【0016】
第2の態様において、本発明の実施例は、命令プリフェッチ装置を開示し、当該装置は、プロセッサコアが対応するターゲットバッファから必要な命令を取得する前に、前記ターゲットバッファ内の命令をプリコンパイルする命令プリコンパイルモジュールと、プリコンパイルした結果に基づいて、前記ターゲットバッファにジャンプ命令が存在し、且つジャンプ命令の分岐命令が前記ターゲットバッファにキャッシュされていないと決定された場合、キャッシュされていない分岐命令を命令キャッシュから前記プロセッサコアに対応する候補バッファにプリフェッチして、前記プロセッサコアが前記候補バッファから前記分岐命令を取得するのを待つ命令プリフェッチモジュールと、を備え、前記ターゲットバッファ及び前記候補バッファが、命令のプリフェッチ中に交互に多重化される。
【0017】
第3の態様において、本発明の実施例は、電子機器をさらに開示し、当該電子機器は、少なくとも一つのプロセッサと、該少なくとも一つのプロセッサと通信可能に接続されるメモリと、を備え、前記メモリには、前記少なくとも一つのプロセッサによって実行可能な命令が記憶され、前記命令が前記少なくとも一つのプロセッサによって実行されることにより、前記少なくとも一つのプロセッサが本発明の実施例のいずれかに記載の命令プリフェッチ方法を実行する。
【0018】
第4の態様において、本発明の実施例は、コンピュータ命令が記憶されている非一時的なコンピュータ読み取り可能な記憶媒体をさらに開示し、前記コンピュータ命令は、コンピュータに本発明の実施例のいずれかに記載の命令プリフェッチ方法を実行させる。
第5の態様において、本発明の実施例は、コンピュータプログラムをさらに開示し、前記コンピュータプログラムは、コンピュータに本発明の実施例のいずれかに記載の命令プリフェッチ方法を実行させる。
【発明の効果】
【0019】
本発明の実施例の技術案によれば、プロセッサコアが対応するターゲットバッファから必要な命令を取得する前に、ターゲットバッファ内の命令をプリコンパイルし、ジャンプ命令及び対応する分岐命令を決定し、ターゲットバッファにキャッシュされていない分岐命令を予め候補バッファにキャッシュし、プロセッサコアが取得するのを待つことによって、従来の命令プリフェッチ形態における分岐命令のフェッチ遅延の問題を解決し、プロセッサの加工製造コストを増加せずに、各プロセッサコアが命令をフェッチする効率を向上させ、命令をフェッチする時間遅延を低減し、キャッシュ命令の上書きがプロセッサの動作に与える影響を低減し、さらにプロセッサのパフォーマンスを向上させる。上記の選択可能な形態が有する他の効果については、以下に具体的な実施例を組み合わせて説明する。
【図面の簡単な説明】
【0020】
図面は、本技術案をよりよく理解するために使用され、本発明を限定するものではない。
図1】本発明の実施例により開示される一つの命令プリフェッチ方法のフローチャートである。
図2】本発明の実施例により開示されるもう一つの命令プリフェッチ方法のフローチャートである。
図3】本発明の実施例により開示される一つの命令プリフェッチ装置の概略構成図である。
図4】本発明の実施例により開示される一つの電子機器のブロック図である。
【発明を実施するための形態】
【0021】
以下、図面に合わせて本発明の例示的な実施例を説明し、理解を容易にするために本発明の実施例の様々な詳細内容が含まれ、それらは単なる例示的なものと見なされるべきである。したがって、当業者は、本発明の範囲及び精神から逸脱することなく、本明細書で説明される実施例に対して様々な変更及び修正を行うことができる。同様に、わかりやすくかつ簡潔にするために、以下の説明では、周知の機能及び構造の説明を省略する。
【0022】
図1は、本発明の実施例により開示される一つの命令プリフェッチ方法のフローチャートである。本実施例は、命令ジャンプの状況がある場合、プロセッサの各コアの命令読み取り遅延を低減することに適用される。本実施例の方法は、命令プリフェッチ装置によって実行することができ、当該装置は、ソフトウェア及び/又はハードウェアの方式を採用して実現することができ、コンピューティング機能を備える任意の電子機器に集積することができる。当該電子機器のプロセッサは、少なくとも一つのコアを備える。
【0023】
本発明の実施例において、少なくとも一つのコアを備えるプロセッサに対して、事前に各コアに2つのバッファ(buffer)を設定し、それぞれターゲットバッファ及び候補バッファとして識別し、即ち、異なるプロセッサコアそれぞれは一つのターゲットバッファ及び一つの候補バッファに対応する。バッファは機器メモリ内の記憶領域であり、十分な使用可能なバッファを維持するために機器メモリを追加するが、プロセッサ自体の面積及び製造コストは増加しない。その中、ターゲットバッファとは、プロセッサコアの動作中に、プロセッサコアによって現在フェッチされているバッファ対象を指し、候補バッファは、ターゲットバッファにキャッシュされていない特定の命令を事前にキャッシュするためのものである。例えば、プロセッサコアは必要な命令を取得する前に、レジスタにおいて命令アドレスマッチングを行うことにより、現在の必要な命令が配置されているバッファを決定し、当該バッファを現在のターゲットバッファとする。命令の読み取り及び命令の処理が続くにつれて、二つのバッファの役割を交互に変換することができる。
【0024】
プロセッサコアが命令をフェッチする必要がある場合に、先ず二つのバッファにアクセスすることにより必要な命令を取得し、二つのバッファに必要な命令が存在しないと決定された場合、上位の命令キャッシュ(icache)にアクセスすることにより、必要な命令を取得してバッファにキャッシュし、プロセッサコアが取得するのを待つ。ターゲットバッファと候補バッファそれぞれのサイズは、命令キャッシュのキャッシュライン(cacheline)に関連し、実際の必要に応じて設定することができる。例えば、命令キャッシュの一つのキャッシュラインに基づいて各バッファのサイズを設定することができる。本発明の実施例の説明を容易にするために、以下に具体的に一つのプロセッサコアを例として、本発明を例示的に説明する。
【0025】
図1に示すように、本実施例により開示される命令プリフェッチ方法は、以下のようなステップを含むことができる。
S101において、プロセッサコアが対応するターゲットバッファから必要な命令を取得する前に、ターゲットバッファ内の命令をプリコンパイルする。
【0026】
その中で、プリコンパイル或いはプリデコードとは、バッファ内の命令を予めコンパイルすることにより、バッファ内のどの命令がジャンプ命令に属するかを決定し、ジャンプ命令に対応する分岐命令を決定することである。ジャンプ命令とは、プロセッサコアが当該命令を実行した後、プロセッサコアをジャンプさせて関連する次の命令を実行させる特定の命令を指す。命令プリコンパイルによって決定されたジャンプ命令は、必然ジャンプ命令と予測ジャンプ命令とを含む。必然ジャンプ命令とは、当該命令を実行した後、必ず命令ジャンプを行う命令を指す。予測ジャンプ命令とは、当該命令を実行した後、一定の確率で命令ジャンプを行う、または、命令ジャンプが行われない可能性がある命令を指す。命令プリコンパイル或いはプリデコードの実現に関して、従来技術における任意の使用可能な命令プリコンパイル技術を使用することができる。例えば、プロセッサ内の命令プリデコーダによって命令プリコンパイルを行うことができ、従来技術における任意の使用可能な命令分岐予測アルゴリズムによって命令ジャンプの分岐命令を予測することができる。
【0027】
本実施例において、ターゲットバッファ内の命令をプリコンパイルすることは、ターゲットバッファ内の各命令をプリコンパイルすること、或いは、アドレスがプロセッサコアの現在の必要な命令のアドレスと同じ命令、及びアドレスがプロセッサコアの現在の必要な命令のアドレスより大きい命令をコンパイルすることと、を含み、アドレスがプロセッサコアの現在の必要な命令のアドレス以上である命令から、ジャンプ命令があるか否かを決定する。各命令をプリコンパイルする過程で、並列コンパイルの方式を採用することができる。各プロセッサコアに二つのバッファを設けると同時に、二つのバッファにそれぞれレジスタを割り当てて、各バッファにキャッシュされた命令のアドレスを記録する。命令プリコンパイルによってターゲットバッファ内のジャンプ命令の分岐命令が決定された後、ターゲットバッファのレジスタにおいて命令アドレスマッチングを行うことにより、当該分岐命令がターゲットバッファにキャッシュされたか否かを決定する。
【0028】
プロセッサコアが対応するターゲットバッファから必要な命令を取得する前に、ターゲットバッファ内の命令をプリコンパイルすることにより、必要な命令を実行する前に、少なくとも当該必要な命令を含む複数の命令をプリコンパイルし、ターゲットバッファにキャッシュされていない分岐命令をあらかじめ候補バッファにキャッシュして、分岐命令を取得する待ち時間を減少させ、命令をフェッチする時間遅延を低減する。また、命令をプリフェッチしてターゲットバッファ以外の別のバッファにキャッシュすることにより、ターゲットバッファ内の実行されていない命令を上書きすることを回避して、キャッシュ命令の上書きがプロセッサ動作に与える影響を低減することができる。
【0029】
S102において、プリコンパイルした結果に基づいて、ターゲットバッファにジャンプ命令が存在し、且つジャンプ命令の分岐命令がターゲットバッファにキャッシュされていないと決定された場合、キャッシュされていない分岐命令を命令キャッシュからプロセッサコアに対応する候補バッファにプリフェッチして、プロセッサコアが候補バッファから分岐命令を取得するのを待つ。
【0030】
具体的には、取得されていない又は実行されていないジャンプ命令に対応する分岐命令のうち、ターゲットバッファにキャッシュされていない命令を、予め上位の命令キャッシュから取得して候補バッファにキャッシュする。例示的に、ターゲットバッファと候補バッファは、それぞれbuffer0とbuffer1として示される。ターゲットバッファbuffer0には、命令アドレスが1~16である合計16個の命令がキャッシュされている。プロセッサコアがターゲットバッファbuffer0からアドレスが9である必要な命令を取得する前に、命令プリコンパイルすることにより、アドレスが11、13、15である命令がジャンプ命令であると決定し、アドレスが11であるジャンプ命令に対応する分岐命令のアドレスは14であり、アドレスが13であるジャンプ命令に対応する分岐命令のアドレスは20であり、アドレスが15であるジャンプ命令に対応する分岐命令のアドレスは16である。アドレスマッチングにより、アドレスが20である分岐命令がターゲットバッファbuffer0にキャッシュされていないと決定し、命令プリフェッチの方式を採用して、アドレスが20である分岐命令を予め候補バッファbuffer1にキャッシュして、プロセッサコアがアドレスが13であるジャンプ命令を実行した後、命令フェッチバッファ対象をターゲットバッファbuffer0から候補バッファbuffer1に切り替え、候補バッファbuffer1からアドレスが20である分岐命令を取得するようにする。バッファが切り替えた後、候補バッファbuffer1が新しいターゲットバッファに相当し、ターゲットバッファbuffer0が新しい候補バッファに相当する。即ち、本実施例において、ターゲットバッファ及び候補バッファは、命令プリフェッチプロセス中に交互に多重化される。
【0031】
選択的に、プロセッサコアが候補バッファから分岐命令を取得する時、現在の命令フェッチバッファ対象がターゲットバッファから候補バッファに切り替える。同様に、本実施例の方法は、プロセッサコアが候補バッファから分岐命令を取得する前に、候補バッファ内の命令をプリコンパイルして、候補バッファ内にキャッシュされていない分岐命令を決定することをさらに含む。即ち、バッファが切り替えた後、切り替える前の候補バッファが新しいターゲットバッファになって、候補バッファにおいて上記の動作S101~S102を繰り返し実行して、再度分岐命令をプリフェッチする。プロセッサが命令をフェッチする動作が実行するにつれて、命令ジャンプが存在する場合、ターゲットバッファと候補バッファの役割は動的に切り替え、二つのバッファの間で命令のプリコンパイルと分岐命令のプリフェッチ動作が循環的に実行される。
【0032】
選択的に、キャッシュされていない分岐命令を命令キャッシュからプロセッサコアに対応する候補バッファにプリフェッチするステップが、キャッシュされていない分岐命令内の最小の命令アドレスを最初のアドレスとして、命令キャッシュから予め設定された数の命令をプリフェッチし、プロセッサコアに対応する候補バッファにキャッシュするステップを含む。その中で、キャッシュされていない分岐命令は予め設定された数の命令に含まれる。
【0033】
上記の例を引き続き例として、アドレスがそれぞれ14、20、16である三つの分岐命令のうち、アドレス20を最初のアドレスとして、命令キャッシュからアドレスが20~35である合計16個の命令をプリフェッチし、候補バッファにキャッシュする。キャッシュされていない分岐命令内の最小の命令アドレスを最初のアドレスとすることにより、先に実行された分岐命令をプリフェッチすることを保証したうえに、できるだけ多くの必要な命令をプリフェッチすることができる。毎回プリフェッチされる命令の数は当該命令キャッシュのキャッシュラインに関連し、例えば、毎回プリフェッチされる命令の数は、当該命令キャッシュの一つのキャッシュラインによって決定される。命令キャッシュ内の命令が命令アドレスのサイズの順に記憶され、その中から命令をプリフェッチする時に、命令をフェッチする最初のアドレスに基づいて順次にプリフェッチする。
【0034】
なお、本実施例において、候補バッファに分岐命令を記憶する前に、候補バッファに実行されていない命令が存在する場合、通常、当該実行されていない命令を無用の命令として、当該実行されていない命令を上書きすることができ、プロセッサの通常の動作に影響しない。
【0035】
上記の技術案に基づいて、選択的に、キャッシュされていない分岐命令を命令キャッシュからプロセッサコアに対応する候補バッファにプリフェッチするステップが、キャッシュされていない分岐命令がプロセッサコアに対応する候補バッファにキャッシュされているか否かを決定するステップと、いいえの場合に、キャッシュされていない分岐命令を命令キャッシュから候補バッファにプリフェッチするステップと、を含む。
【0036】
ターゲットバッファと候補バッファが交互に使用され、ターゲットバッファから命令を取得する前に、候補バッファに一部の命令がキャッシュされている可能性があるので、ターゲットバッファ内の命令をプリコンパイルすることにより、ジャンプ命令及び対応する分岐命令を決定し、ターゲットバッファにキャッシュされていない分岐命令を決定した後、さらに候補バッファのレジスタにおいてアドレスマッチングを行い、前記キャッシュされていない分岐命令が候補バッファにキャッシュされているか否かを決定し、候補バッファにキャッシュされていると決定された場合、現在命令プリフェッチ動作を行うの必要がなく、続けてターゲットバッファから命令を取得し、候補バッファにもキャッシュされていないと決定された場合、命令プリフェッチ動作を実行し、当該キャッシュされていない分岐命令を命令キャッシュから候補バッファにプリフェッチする。
【0037】
また、ターゲットバッファ内の命令をプリコンパイルして、ターゲットバッファにジャンプ命令が存在しないと決定された場合、ターゲットバッファ内の命令アドレスが最大の命令に基づいて、命令キャッシュから予め設定された数の命令を順次にプリフェッチし、候補バッファにキャッシュする。上記の例を引き続き例として、ターゲットバッファbuffer0に命令アドレスが1~16である合計16個の命令がキャッシュされ、命令プリコンパイルすることにより、ターゲットバッファbuffer0にジャンプ命令が存在しないと決定されると、命令キャッシュからアドレスが17~32である合計16個の命令を順次にプリフェッチし、候補バッファにキャッシュする。
【0038】
本発明の実施例の技術案によれば、プロセッサコアが対応するターゲットバッファから必要な命令を取得する前に、ターゲットバッファ内の命令をプリコンパイルして、ジャンプ命令及び対応する分岐命令を決定し、ターゲットバッファにキャッシュされていない分岐命令を予め候補バッファにキャッシュし、プロセッサコアが取得するのを待つことによって、従来の命令プリフェッチ形態における分岐命令の取得遅延の問題を解決し、二つのバッファを動的に使用することによって、プロセッサの加工製造コストを増加せずに、各プロセッサコアが命令をフェッチする効率を向上させ、命令をフェッチする時間遅延を低減し、キャッシュ命令の上書きがプロセッサ動作に与える影響を低減し、プロセッサのパフォーマンスを向上させる。
【0039】
図2は、本発明の実施例により開示されるもう一つの命令プリフェッチ方法のフローチャートである。上記の実施形態に基づいてさらに最適化及び拡張し、上記の選択可能な各実施形態と組み合わせることができる。図2に示すように、本実施例の方法は、以下のステップを含むことができる。
S201において、プロセッサコアが対応するターゲットバッファから必要な命令を取得する前に、分岐ジャンプ予測アルゴリズムを使用して、ターゲットバッファ内の命令をプリコンパイルする。
【0040】
S202において、予測失敗情報を受信した場合、プロセッサコアによるターゲットジャンプ命令の実行中、ターゲットバッファのレジスタ及び候補バッファのレジスタにおいて命令アドレスマッチングを順番に実行して、ターゲットジャンプ命令の分岐命令が配置されているバッファを決定する。
【0041】
本実施例において、命令プリコンパイルすることによって決定されたジャンプ命令は、必然ジャンプ命令と予測ジャンプ命令とを含む。必然ジャンプ命令とは、当該命令を実行した後、必ず命令ジャンプを行う命令を指す。予測ジャンプ命令とは、当該命令を実行した後、一定の確率で命令ジャンプを行う、又は命令ジャンプが行われない可能性がある命令を指す。
【0042】
ターゲット命令とは、分岐ジャンプ予測アルゴリズムを使用して分岐命令予測を行って失敗し、実際にはジャンプ命令タイプに属する命令を指す。現在のプロセッサコアが命令をフェッチするバッファ対象はターゲットバッファであるので、ターゲットジャンプ命令の実行中、先ずターゲットバッファに当該ターゲットジャンプ命令の分岐命令がキャッシュされているか否かを決定することを選択でき、はいの場合、直接にターゲットバッファから必要な分岐命令を取得し、いいえの場合、続けて候補バッファにおいて決定する。ターゲットジャンプ命令の分岐命令が候補バッファにキャッシュされていると決定された場合、命令フェッチバッファ対象をターゲットバッファから候補バッファに切り替え、即ち候補バッファが新しいターゲットバッファになり、同時に、候補バッファから必要な命令を取得する前に、候補バッファ内の命令をプリコンパイルし分岐命令プリフェッチ動作を行う。
【0043】
本実施例において、同時に二つのバッファを採用して命令プリフェッチを実行するので、二つのバッファを交互に使用することによって、命令のプリフェッチ中に、できるだけ多くの命令を予めキャッシュすることができ、分岐命令予測失敗の状態があっても、分岐命令プリフェッチの状態を大幅にカバーすることができ、分岐命令を再度プリフェッチする待ち時間を減少する。
【0044】
さらに、本実施例の方法は、命令アドレスマッチングによって、ターゲットジャンプ命令の分岐命令がいずれもターゲットバッファ及び候補バッファに存在しないと決定された場合、即ちターゲットバッファ及び候補バッファのいずれにも当該分岐命令がキャッシュされていない場合、ターゲットジャンプ命令の分岐命令のアドレスを最初のアドレスとして、命令キャッシュから予め設定された数の命令をプリフェッチし、候補バッファにキャッシュし、候補バッファにキャッシュされている命令の切り替えを含むステップを含む。予め設定された数の命令のフェッチは適宜的に設定できる。
【0045】
また、二つのバッファのレジスタにおいてアドレスマッチングを行うことにより、プロセッサコアの現在の必要な命令がターゲットバッファにキャッシュされていなく、候補バッファにもキャッシュされていないと決定された場合、命令プリフェッチ装置は、プロセッサコアの必要な命令に基づいて、命令キャッシュへ一つの命令フェッチ要求を送信して、命令キャッシュから必要な命令を読み取って候補バッファにキャッシュするようになる。前の命令フェッチ要求に基づいて命令をフェッチする過程に、命令フェッチ要求を送信することから必要な命令をフェッチするまでの過程を含み、命令プリフェッチ装置がもう一つの命令フェッチ要求を生成した場合、後に生成された命令フェッチ要求に含まれる命令アドレスが前の命令フェッチ要求に含まれる命令アドレスと一致するか否かを判断し、一致する場合、後の命令フェッチ要求を繰り返し送信する必要がないので、命令フェッチ要求を繰り返し送信することを回避して、命令をフェッチする効率を向上させる。
【0046】
本実施例の技術案によれば、同時に二つのバッファを採用して命令プリフェッチを実行するので、二つのバッファを交互に使用することにより、命令のプリフェッチ中に、できるだけ多くの命令を予めキャッシュすることができ、分岐命令の予測失敗の状態があっても、分岐命令プリフェッチの状態を大幅にカバーすることができ、ターゲットバッファのレジスタ及び候補バッファのレジスタにおいて命令アドレスマッチングを順番に実行し、ターゲットジャンプ命令の分岐命令が配置されているバッファを決定するので、分岐命令を再度プリフェッチする待ち時間を減少し、命令をフェッチする効率を向上させる。
【0047】
図3は、本発明の実施例により開示される一つの命令プリフェッチ装置の概略構成図である。本実施例は、命令ジャンプの状態がある場合、プロセッサの各コアの命令の読み取り遅延を低減することに適用することができる。本実施例の装置は、ソフトウェア及び/又はハードウェアの方式を採用して実現することができ、コンピューティング機能を具備する任意の電子機器に集積することができる。当該電子機器のプロセッサは、少なくとも一つのコアを備える。
【0048】
図3に示すように、本実施例により開示される命令プリフェッチ装置300は、命令プリコンパイルモジュール301と、命令プリフェッチモジュール302とを備える。
命令プリコンパイルモジュール301は、プロセッサコアが対応するターゲットバッファから必要な命令を取得する前に、ターゲットバッファ内の命令をプリコンパイルするものであり、命令プリフェッチモジュール302は、プリコンパイルした結果に基づいて、ターゲットバッファにジャンプ命令が存在し、且つジャンプ命令の分岐命令がターゲットバッファにキャッシュされていないと決定された場合、キャッシュされていない分岐命令を命令キャッシュからプロセッサコアに対応する候補バッファにプリフェッチして、プロセッサコアが候補バッファから分岐命令を取得するの待つものであり、その中で、ターゲットバッファ及び候補バッファは、命令のプリフェッチ中に交互に多重化される。
【0049】
選択的に、命令プリフェッチモジュール302は、具体的に、プリコンパイルした結果に基づいて、ターゲットバッファにジャンプ命令が存在し、且つジャンプ命令の分岐命令がターゲットバッファにキャッシュされていないと決定された場合、キャッシュされていない分岐命令内の最小の命令アドレスを最初のアドレスとして、命令キャッシュから予め設定された数の命令をプリフェッチし、プロセッサコアに対応する候補バッファにキャッシュする。その中で、キャッシュされていない分岐命令は、予め設定された数の命令に含まれる。
【0050】
選択的に、命令プリフェッチモジュール302は、具体的に、プリコンパイルした結果に基づいて、ターゲットバッファにジャンプ命令が存在し、且つジャンプ命令の分岐命令がターゲットバッファにキャッシュされていないと決定された場合、キャッシュされていない分岐命令がプロセッサコアに対応する候補バッファにキャッシュされているか否かを決定し、いいえの場合、キャッシュされていない分岐命令を命令キャッシュから候補バッファにプリフェッチする。
【0051】
選択的に、プロセッサコアが候補バッファから分岐命令を取得する時、現在の命令フェッチバッファ対象がターゲットバッファから候補バッファに切り替え、 対応的に、命令プリコンパイルモジュール301は、さらに、プロセッサコアが候補バッファから分岐命令を取得する前に、候補バッファ内の命令をプリコンパイルして、候補バッファ内にキャッシュされていない分岐命令を決定する。
【0052】
選択的に、命令プリコンパイルモジュール301は、具体的に、分岐ジャンプ予測アルゴリズムを使用して、ターゲットバッファ内の命令をプリコンパイルする。
【0053】
選択的に、本実施例の装置は、命令プリコンパイルモジュール301がターゲットバッファ内の命令をプリコンパイルする動作を実行した後、予測失敗情報を受信した場合、プロセッサコアによるターゲットジャンプ命令の実行中に、ターゲットバッファのレジスタ及び候補バッファのレジスタにおいて命令アドレスマッチングを順番に実行し、ターゲットジャンプ命令の分岐命令が配置されているバッファを決定するためのバッファ決定モジュール、をさらに備える。
【0054】
選択的に、命令プリフェッチモジュール302は、さらに、命令アドレスマッチングに基づいて、ターゲットジャンプ命令の分岐命令がいずれもターゲットバッファ及び候補バッファに存在しないと決定された場合、ターゲットジャンプ命令の分岐命令のアドレスを最初のアドレスとして、命令キャッシュから予め設定された数の命令をプリフェッチし、候補バッファにキャッシュする。
【0055】
本発明の実施例により開示される命令プリフェッチ装置300は、本発明の実施例により開示される命令プリフェッチ方法を実行することができ、実行方法に対応する機能モジュールと有益な効果を備える。本実施例で詳細に説明されていない内容は、本発明の任意の方法の実施例の説明を参照することができる。
【0056】
本発明の実施例によれば、本発明は、電子機器及び読み取り可能な記憶媒体をさらに提供する。
また、本発明の実施例は、コンピュータプログラムをさらに提供し、前記コンピュータプログラムは、コンピュータに本発明の実施例のいずれかに記載の命令プリフェッチ方法を実行させる。
【0057】
図4に示すように、図4は、本発明の実施例の命令プリフェッチ方法を実施するための電子機器のブロック図である。電子機器は、ラップトップコンピュータ、デスクトップコンピュータ、ワークステーション、パーソナルデジタルアシスタント、サーバ、ブレードサーバ、メインフレームコンピュータ、及び他の適切なコンピュータなどの様々な形式のデジタルコンピュータを表すことを目的とする。電子機器は、パーソナルデジタルプロセッサ、携帯電話、スマートフォン、ウェアラブルデバイス、他の類似するコンピューティングデバイスなどの様々な形式のモバイルデバイスを表すこともできる。本明細書で示されるコンポーネント、それらの接続と関係、及びそれらの機能は単なる例であり、本明細書の説明及び/又は要求される本発明の実施例の実現を制限するものではない。
【0058】
図4に示すように、当該電子機器は、一つ又は複数のプロセッサ401と、メモリ402と、各コンポーネントを接続するための、高速インターフェース及び低速インターフェースを含むインターフェースと、を備える。各コンポーネントは、異なるバスで相互に接続され、共通のマザーボードに取り付けられるか、又は必要に応じて他の方式で取り付けることができる。プロセッサは、電子機器内に実行される命令を処理することができ、当該命令は、外部の入力/出力装置(インターフェースに結合されたディスプレイデバイスなど)にグラフィカルユーザインターフェース(Graphical User Interface、GUI)のグラフィカル情報を表示するためにメモリ内又はメモリに記憶されている命令を含む。他の実施方式において、必要によって、複数のプロセッサ及び/又は複数のバスを、複数のメモリと一緒に使用することができる。同様に、複数の電子機器を接続することができ、各機器は、一部の必要な動作を提供することができ、例えば、サーバアレイ、1グループのブレードサーバ、又はマルチプロセッサシステムなどである。図4では、一つのプロセッサ401を例とする。
【0059】
メモリ402は、本発明の実施例により提供される非一時的なコンピュータ読み取り可能な記憶媒体である。その中で、前記メモリには、少なくとも一つのプロセッサによって実行可能な命令が記憶され、前記少なくとも一つのプロセッサが本発明の実施例によって提供される命令プリフェッチ方法を実行するようにする。本発明の実施例の非一時的なコンピュータ読み取り可能な記憶媒体には、コンピュータに本発明の実施例によって提供される命令プリフェッチ方法を実行させるためのコンピュータ命令が記憶されている。
【0060】
メモリ402は、非一時的なコンピュータ読み取り可能な記憶媒体として、本発明の実施例における命令プリフェッチ方法に対応するプログラム命令/モジュールなどの、非一時的なソフトウェアプログラム、非一時的なコンピュータ実行可能なプログラム及びモジュールを記憶するために用いられ、例えば、図3に示す命令プリコンパイルモジュール301及び命令プリフェッチモジュール302である。プロセッサ401は、メモリ402に記憶されている非一時的なソフトウェアプログラム、命令及びモジュールを実行することによって、サーバの様々な機能アプリケーション及びデータ処理を実行し、すなわち上記の方法の実施例における命令プリフェッチ方法を実現する。
【0061】
メモリ402は、ストレージプログラムエリアとストレージデータエリアとを含むことができ、ストレージプログラムエリアは、オペレーティングシステム、少なくとも一つの機能に必要なアプリケーションプログラムを記憶することができ、ストレージデータエリアは、命令プリフェッチ方法を実現するための電子機器の使用によって作成されたデータなどを記憶することができる。また、メモリ402は、高速ランダムアクセスメモリを含むことができ、非一時的なメモリをさらに含むことができ、例えば、少なくとも一つの磁気ディスクストレージデバイス、フラッシュメモリデバイス、又は他の非一時的なソリッドステートストレージデバイスである。いくつかの実施例で、メモリ402は、プロセッサ401に対して遠隔に設置されたメモリを選択的に含むことができ、これらの遠隔メモリは、ネットワークを介して本発明の実施例における命令プリフェッチ方法を実現するための電子機器に接続されることができる。上記のネットワークの例は、インターネット、イントラネット、ローカルエリアネットワーク、モバイル通信ネットワーク、及びそれらの組み合わせを含むが、これらに限定されない。
【0062】
本発明の実施例における命令プリフェッチ方法を実現するための電子機器は、入力装置403と出力装置404とをさらに備えることができる。プロセッサ401、メモリ402、入力装置403、及び出力装置404は、バス又は他の方式を介して接続することができ、図4では、バスを介して接続することを例とする。
【0063】
入力装置403は、入力された数字又は文字情報を受信し、本発明の実施例における命令プリフェッチ方法を実現するための電子機器のユーザ設定及び機能制御に関するキー信号入力を生成することができ、例えば、タッチスクリーン、キーパッド、マウス、トラックパッド、タッチパッド、ポインティングスティック、一つ又は複数のマウスボタン、トラックボール、ジョイスティックなどの入力装置である。出力装置404は、ディスプレイデバイス、補助照明装置、及び触覚フィードバックデバイスなどを含むことができ、補助照明装置は、例えば発光ダイオード(Liquid Crystal Display、LED)などであり、触覚フィードバックデバイスは、例えば振動モータなどである。当該ディスプレイデバイスは、液晶ディスプレイ(Liquid Crystal Display、LCD)、LEDディスプレイ、及びプラズマディスプレイを含むことができるが、これらに限定されない。いくつかの実施方式で、ディスプレイデバイスは、タッチスクリーンであってもよい。
【0064】
本明細書で説明されるシステム及び技術の様々な実施形態は、デジタル電子回路システム、集積回路システム、特定用途向け集積回路(Application Specific Integrated Circuit、ASIC)、コンピュータハードウェア、ファームウェア、ソフトウェア、及び/又はそれらの組み合わせで実現することができる。これらの様々な実施形態は、一つ又は複数のコンピュータプログラムで実施されることを含むことができ、当該一つ又は複数のコンピュータプログラムは、少なくとも一つのプログラマブルプロセッサを含むプログラマブルシステムで実行及び/又は解釈されることができ、当該プログラマブルプロセッサは、専用又は汎用のプログラマブルプロセッサであってもよく、ストレージシステム、少なくとも一つの入力装置、及び少なくとも一つの出力装置からデータ及び命令を受信し、データ及び命令を当該ストレージシステム、当該少なくとも一つの入力装置、及び当該少なくとも一つの出力装置に伝送することができる。
【0065】
これらのコンピューティングプログラムは、プログラム、ソフトウェア、ソフトウェアアプリケーション、又はコードとも呼ばれ、プログラマブルプロセッサの機械命令を含み、高レベルの手順及び/又はオブジェクト指向のプログラミング言語、及び/又はアセンブリ/機械言語でこれらのコンピューティングプログラムを実施することができる。本明細書に使用されるような「機械読み取り可能な媒体」及び「コンピュータ読み取り可能な媒体」との用語は、機械命令及び/又はデータをプログラマブルプロセッサに提供するための任意のコンピュータプログラム製品、機器、及び/又は装置、例えば、磁気ディスク、光ディスク、メモリ、プログラマブルロジックデバイス(Programmable Logic Device、PLD)を指し、機械読み取り可能な信号である機械命令を受信する機械読み取り可能な媒体を含む。「機械読み取り可能な信号」との用語は、機械命令及び/又はデータをプログラマブルプロセッサに提供するための任意の信号を指す。
【0066】
ユーザとのインタラクションを提供するために、コンピュータ上で、ここで説明されたシステム及び技術を実施することができ、当該コンピュータは、陰極線管(Cathode Ray Tube、CRT)又はLCDモニタなどのユーザに情報を表示するためのディスプレイ装置と、マウス又はトラックボールなどのキーボード及びポインティングデバイスとを具備し、ユーザは、当該キーボード及び当該ポインティングデバイスによって入力をコンピュータに提供することができる。他の種類の装置も、ユーザとのインタラクションを提供することができ、例えば、ユーザに提供するフィードバックは、視覚フィードバック、聴覚フィードバック、又は触覚フィードバックなどの任意の形態のセンシングフィードバックであってもよく、音響入力と、音声入力と、触覚入力とを含む任意の形態でユーザからの入力を受信することができる。
【0067】
ここで説明されるシステム及び技術は、データサーバなどのバックエンドコンポーネントを含むコンピューティングシステムで実施することができ、又はアプリケーションサーバーなどのミドルウェアコンポーネントを含むコンピューティングシステムで実施することができ、又はフロントエンドコンポーネントを含むコンピューティングシステムで実施することができ、例えば、グラフィカルユーザインタフェース又はウェブブラウザを有するユーザコンピュータであり、ユーザは、当該グラフィカルユーザインタフェース又は当該ウェブブラウザによってここで説明されるシステム及び技術の実施形態とインタラクションし、又はこのようなバックエンドコンポーネントと、ミドルウェアコンポーネントと、フロントエンドコンポーネントの任意の組み合わせを含むコンピューティングシステムで実施することができる。通信ネットワークなどの任意の形態又は媒体のデジタルデータ通信によって、システムのコンポーネントを相互に接続することができる。通信ネットワークの例は、ローカルエリアネットワーク(Local Area Network、LAN)と、ワイドエリアネットワーク(Wide Area Network、WAN)と、インターネットとを含む。
【0068】
コンピュータシステムは、クライアントとサーバとを含むことができる。クライアントとサーバは、通常、互いに離れており、通信ネットワークを介してインタラクションする。対応するコンピュータ上で実行され、且つ互いにクライアント-サーバ関係を有するコンピュータプログラムによって、クライアントとサーバとの関係が生成される。
【0069】
本発明の実施例の技術案によれば、プロセッサコアが対応するターゲットバッファから必要な命令を取得する前に、ターゲットバッファ内の命令をプリコンパイルし、ジャンプ命令及び対応する分岐命令を決定し、ターゲットバッファにキャッシュされていない分岐命令を予め候補バッファにキャッシュし、プロセッサコアが取得するのを待つことによって、従来の命令プリフェッチ形態における分岐命令の取得遅延の問題を解決し、二つのバッファを動的に使用することによって、プロセッサの加工製造コストを増加せずに、各プロセッサコアが命令をフェッチする効率を向上させ、命令をフェッチする時間遅延を低減し、キャッシュ命令の上書きがプロセッサの動作に与える影響を低減する。
【0070】
上記に示される様々な形式のフローを使用して、ステップを並べ替え、追加、又は削除することができる。例えば、本発明に記載されている各ステップは、並列に実行されてもよいし、順次に実行されてもよいし、異なる順序で実行されてもよく、本発明で開示されている技術案が所望の結果を実現することができれば、本明細書では限定しない。
【0071】
上記の具体的な実施形態は、本発明の保護範囲に対する制限を構成するものではない。当業者は、設計要求及び他の要因に応じて、様々な修正、組み合わせ、サブコンビネーション、及び置換を行うことができる。本発明の精神と原則内で行われた任意の修正、同等の置換、及び改善などは、いずれも本発明の保護範囲内に含まれるべきである。
図1
図2
図3
図4