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

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

▶ ネクスト シリコン リミテッドの特許一覧

特表2024-506642マルチアーキテクチャヘテロジニアスコンピューティングのための実行可能コードの動的割り振り
<>
  • 特表-マルチアーキテクチャヘテロジニアスコンピューティングのための実行可能コードの動的割り振り 図1
  • 特表-マルチアーキテクチャヘテロジニアスコンピューティングのための実行可能コードの動的割り振り 図2
  • 特表-マルチアーキテクチャヘテロジニアスコンピューティングのための実行可能コードの動的割り振り 図3
  • 特表-マルチアーキテクチャヘテロジニアスコンピューティングのための実行可能コードの動的割り振り 図4
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2024-02-14
(54)【発明の名称】マルチアーキテクチャヘテロジニアスコンピューティングのための実行可能コードの動的割り振り
(51)【国際特許分類】
   G06F 9/445 20180101AFI20240206BHJP
【FI】
G06F9/445
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023548318
(86)(22)【出願日】2022-02-01
(85)【翻訳文提出日】2023-10-04
(86)【国際出願番号】 IL2022050137
(87)【国際公開番号】W WO2022172263
(87)【国際公開日】2022-08-18
(31)【優先権主張番号】17/172,134
(32)【優先日】2021-02-10
(33)【優先権主張国・地域又は機関】US
(81)【指定国・地域】
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.JAVA
2.JAVASCRIPT
3.PYTHON
4.MATLAB
(71)【出願人】
【識別番号】520039124
【氏名又は名称】ネクスト シリコン リミテッド
【氏名又は名称原語表記】Next Silicon Ltd
【住所又は居所原語表記】33 Derech Yitshak Rabin Street, Givatayim, Israel
(74)【代理人】
【識別番号】110002952
【氏名又は名称】弁理士法人鷲田国際特許事務所
(72)【発明者】
【氏名】ラズ エラド
(72)【発明者】
【氏名】タヤリ イラン
【テーマコード(参考)】
5B376
【Fターム(参考)】
5B376AC21
5B376AE07
5B376AE47
(57)【要約】
ソフトウェアプログラムを実行するための装置は、プロセッシングユニット及びハードウェアプロセッサを含み、ハードウェアプロセッサは、ソフトウェアプログラムの中間表現では、中間表現がブロックを含み、各ブロックがソフトウェアプログラムの実行ブロックに関連付けられ、呼び出し側ブロック及びターゲット側ブロックを識別するという中間命令を含み、呼び出し側ブロックがターゲット側ブロックのターゲット側中間命令を実行するために制御フロー中間命令を含むことと、ターゲット側ブロックを使用して、ターゲット側命令を生成することと、呼び出し側命令が呼び出し側プロセッシングユニットによって実行され、ターゲット側命令がターゲット側プロセッシングユニットによって実行される場合、呼び出し側ブロック、及びターゲット側命令を呼び出すためのコンピュータ制御命令を使用して、呼び出し側命令を生成することと、呼び出し側命令を実行するように呼び出し側プロセッシングユニットを構成することと、ターゲット側命令を実行するようにターゲット側プロセッシングユニットを構成することと、のために適合される。
【選択図】図3
【特許請求の範囲】
【請求項1】
ソフトウェアプログラムを実行するための装置であって、
複数のプロセッシングユニット及び少なくとも1つのハードウェアプロセッサを備え、
前記少なくとも1つのハードウェアプロセッサは、
複数のブロックを備える前記ソフトウェアプログラムの中間表現であって、各ブロックが、前記ソフトウェアプログラムの複数の実行ブロックのうちの1つに関連付けられ、中間命令セットを備える、中間表現において、ターゲット側ブロックの少なくとも1つのターゲット側中間命令を実行するために少なくとも1つの制御フロー中間命令を備える呼び出し側ブロックと、前記ターゲット側ブロックと、を識別し、
前記ターゲット側ブロックを使用して、ターゲット側実行可能命令セットを生成し、
呼び出し側実行可能命令セットが呼び出し側プロセッシングユニットによって実行され、前記ターゲット側実行可能命令セットがターゲット側プロセッシングユニットによって実行される場合、前記呼び出し側ブロックを使用して、そして前記ターゲット側実行可能命令セットを呼び出すための少なくとも1つのコンピュータ制御命令を使用して、前記呼び出し側実行可能命令セットを生成し、
前記呼び出し側実行可能命令セットを実行するように前記呼び出し側プロセッシングユニットを構成し、
前記ターゲット側実行可能命令セットを実行するように前記ターゲット側プロセッシングユニットを構成する、
ように適合される、装置。
【請求項2】
前記ターゲット側プロセッシングユニットは、前記ターゲット側プロセッシングユニットが前記ターゲット側命令セットのうちの少なくともいくつかを実行することによって生成された少なくとも1つの値を、前記呼び出し側プロセッシングユニットに提供するようにさらに構成される、請求項1に記載の装置。
【請求項3】
前記呼び出し側プロセッシングユニットは、前記ターゲット側プロセッシングユニットが前記ターゲット側命令セットのうちの少なくともいくつかを実行することによって生成された前記少なくとも1つの値を、前記呼び出し側プロセッシングユニットから受信するようにさらに構成される、請求項2に記載の装置。
【請求項4】
前記呼び出し側プロセッシングユニットは、前記ターゲット側プロセッシングユニットに少なくとも1つの引数の値を提供するようにさらに構成される、請求項1に記載の装置。
【請求項5】
前記ターゲット側プロセッシングユニットは、前記ターゲット側命令セットのうちの少なくともいくつかの他のものを実行した後、前記呼び出し側実行可能命令セットのうちの少なくともいくつかを実行するよう前記呼び出し側プロセッシングユニットに指令するようにさらに構成される、請求項1に記載の装置。
【請求項6】
前記呼び出し側プロセッシングユニットは、さらに、
前記ターゲット側実行可能命令セットを呼び出すための前記少なくとも1つのコンピュータ制御命令を実行した後、前記呼び出し側実行可能命令セットの実行をサスペンドし、
前記ターゲット側プロセッシングユニットからの命令を受信することに応答して、前記呼び出し側実行可能命令セットのうちの前記少なくともいくつかを実行する、
ように構成される、請求項5に記載の装置。
【請求項7】
前記ターゲット側プロセッシングユニットは、中央処理装置、マルチコア中央処理装置(CPU)、データプロセッシングユニット(DPU)、マイクロコントローラユニット(MCU)、アクセラレーテッドプロセッシングユニット(ACU)、フィールドプログラマブルゲートアレイ(FPGA)、粗粒度再構成可能アーキテクチャ(CGRA)、ニューラルネットワークアクセラレータ、インテリジェンスプロセッシングユニット(IPU)、特定用途向け集積回路(ASIC)、量子コンピュータ、及び複数の構成可能データルーティングジャンクションによって接続された複数の再構成可能ロジック素子を備える相互接続されたコンピューティンググリッドからなるプロセッシングユニットの群から選択される、請求項1に記載の装置。
【請求項8】
前記呼び出し側プロセッシングユニットの第1のコンピュータアーキテクチャは、前記ターゲット側プロセッシングユニットの第2のコンピュータアーキテクチャとは異なる、請求項1に記載の装置。
【請求項9】
前記第1のコンピュータアーキテクチャ及び前記第2のコンピュータアーキテクチャのうちの少なくとも1つは、複合命令セットコンピュータ(CISC)アーキテクチャ、縮小命令セットコンピュータ(RISC)アーキテクチャ、x86ファミリーベースのコンピュータアーキテクチャ、IBM(登録商標)(International Business Machine)Powerファミリーベースのコンピュータアーキテクチャ、及びARMファミリーベースのコンピュータアーキテクチャからなるコンピュータアーキテクチャの群から選択される、請求項8に記載の装置。
【請求項10】
前記呼び出し側実行可能命令セットは、前記呼び出し側プロセッシングユニットの前記第1のコンピュータアーキテクチャと前記ターゲット側プロセッシングユニットの前記第2のコンピュータアーキテクチャとの間で変換するために、前記少なくとも1つの制御フロー中間命令に適用されたアプリケーションバイナリインタフェースを実装する、複数の変換命令を備える、請求項8に記載の装置。
【請求項11】
前記ターゲット側ブロックは複数のターゲット側メタデータ値を備え、
前記ターゲット側実行可能命令セットを生成することは、前記ターゲット側プロセッシングユニットの前記第2のコンピュータアーキテクチャに従って前記複数のターゲット側メタデータ値を使用して変換された複数のターゲット側メタデータ値を生成することを備える、請求項8に記載の装置。
【請求項12】
前記呼び出し側実行可能命令セットは、アプリケーションメモリアドレスの識別範囲内の少なくとも1つのメモリアドレスへの少なくとも1つの第1のメモリアクセス命令を備え、
前記ターゲット側実行可能命令セットは、前記アプリケーションメモリアドレスの前記識別範囲内の少なくとも1つの他のメモリアドレスへの少なくとも1つの第2のメモリアクセス命令を備える、請求項1に記載の装置。
【請求項13】
前記アプリケーションメモリアドレスの前記識別範囲は、物理メモリアドレス範囲、仮想メモリアドレス範囲、メモリマップド入出力アドレス範囲、及びバスアドレス範囲のうちの1つである、請求項12に記載の装置。
【請求項14】
前記呼び出し側実行可能命令セットは、少なくとも1つのデバイスに関連付けられた少なくとも1つのデバイスハンドルを使用して、前記少なくとも1つのデバイスにアクセスすることを備え、
前記ターゲット側実行可能命令セットは、前記少なくとも1つのデバイスハンドルを使用して前記少なくとも1つのデバイスにアクセスすることを備える、請求項1に記載の装置。
【請求項15】
前記少なくとも1つのデバイスハンドルは、ネットワークソケットハンドル、オペレーティングシステムカーネルオブジェクトハンドル、及びファイル記述子のうちの少なくとも1つである、請求項14に記載の装置。
【請求項16】
前記少なくとも1つのハードウェアプロセッサは、
前記ソフトウェアプログラムの少なくとも一部を実行中に複数の統計値を収集し、
前記複数の統計値に従って前記呼び出し側ブロック及び前記ターゲット側ブロックを識別する、
ようにさらに適合される、請求項1に記載の装置。
【請求項17】
前記複数の統計値のうちの少なくとも1つは、制御フロー命令を実行するアウトカム、前記ソフトウェアプログラムの変数のデータ値、メモリアクセスパターン、及びメモリ仮想アドレス変換のうちの1つを示す、請求項16に記載の装置。
【請求項18】
前記少なくとも1つのハードウェアプロセッサは、
前記複数の統計値を収集する目的のために、前記ソフトウェアプログラムの前記中間表現に複数のテレメトリ中間命令を挿入するようにさらに適合される、請求項16に記載の装置。
【請求項19】
前記呼び出し側プロセッシングユニットは、前記少なくとも1つのハードウェアプロセッサである、請求項1に記載の装置。
【請求項20】
ソフトウェアプログラムを実行するための方法であって、
複数のブロックを備える前記ソフトウェアプログラムの中間表現であって、各ブロックが、前記ソフトウェアプログラムの複数の実行ブロックのうちの1つに関連付けられ、中間命令セットを備える、中間表現において、ターゲット側ブロックの少なくとも1つのターゲット側中間命令を実行するために少なくとも1つの制御フロー中間命令を備える呼び出し側ブロックと、前記ターゲット側ブロックと、を識別し、
前記ターゲット側ブロックを使用して、ターゲット側実行可能命令セットを生成し、
呼び出し側実行可能命令セットが複数のプロセッシングユニットのうちの呼び出し側プロセッシングユニットによって実行され、前記ターゲット側実行可能命令セットが前記複数のプロセッシングユニットのうちのターゲット側プロセッシングユニットによって実行される場合、前記呼び出し側ブロックを使用して、そして前記ターゲット側実行可能命令セットを呼び出すための少なくとも1つのコンピュータ制御命令を使用して、前記呼び出し側実行可能命令セットを生成し、
前記呼び出し側実行可能命令セットを実行するように前記呼び出し側プロセッシングユニットを構成し、
前記ターゲット側実行可能命令セットを実行するように前記ターゲット側プロセッシングユニットを構成する、
ことを備える、方法。
【請求項21】
ソフトウェアプログラムを実行するためのソフトウェアプログラム製品であって、
非一時的なコンピュータ可読記憶媒体と、
複数のブロックを備える前記ソフトウェアプログラムの中間表現であって、各ブロックが、前記ソフトウェアプログラムの複数の実行ブロックのうちの1つに関連付けられ、中間命令セットを備える、中間表現において、ターゲット側ブロックの少なくとも1つのターゲット側中間命令を実行するために少なくとも1つの制御フロー中間命令を備える呼び出し側ブロックと、前記ターゲット側ブロックと、を識別するための第1のプログラム命令と、
前記ターゲット側ブロックを使用して、ターゲット側実行可能命令セットを生成するための第2のプログラム命令と、
呼び出し側実行可能命令セットが複数のプロセッシングユニットのうちの呼び出し側プロセッシングユニットによって実行され、前記ターゲット側実行可能命令セットが前記複数のプロセッシングユニットのうちのターゲット側プロセッシングユニットによって実行される場合、前記呼び出し側ブロックを使用して、そして前記ターゲット側実行可能命令セットを呼び出すための少なくとも1つのコンピュータ制御命令を使用して、前記呼び出し側実行可能命令セットを生成するための第3のプログラム命令と、
前記呼び出し側実行可能命令セットを実行するように前記呼び出し側プロセッシングユニットを構成するための第4のプログラム命令と、
前記ターゲット側実行可能命令セットを実行するように前記ターゲット側プロセッシングユニットを構成するための第5のプログラム命令と、
を備え、
前記第1のプログラム命令、前記第2のプログラム命令、前記第3のプログラム命令、前記第4のプログラム命令及び前記第5のプログラム命令は、前記非一時的なコンピュータ可読記憶媒体から少なくとも1つのコンピュータ処理プロセッサによって実行される、前記ソフトウェアプログラム製品。
【発明の詳細な説明】
【技術分野】
【0001】
関連出願
本出願は、2021年2月10日に出願された米国特許出願第17/172,134号、ここでは2021年9月7日に米国特許第11,113,059号として発行されたものの優先権の利益を主張するものであり、参照により、その内容全体が本明細書に組み込まれる。
【背景技術】
【0002】
本開示で説明されるいくつかの実施形態は、コンピューティング装置に関し、より具体的には、排他的ではないが、ヘテロジニアスマルチアーキテクチャコンピューティングシステムに関する。
【0003】
コンピューティングの分野では、パフォーマンスという用語は、コンピュータ処理システムによって実行される有用な作業量を指す。有用な作業のいくつかの特性には、作業を実行する速度、計算リソースの稼動率(使用されるメモリの量または消費されるネットワーク帯域幅の量など)、及びコンピュータ処理システムが入力に反応するのにかかる時間が含まれる。有用な作業量を測定するための様々なメトリクスがある。一部のメトリクスは、コンピュータ処理システムのコンテキストに専用であり、他のいくつかのメトリクスは、様々なコンピュータ処理システムで測定されることができる一般的なメトリクスである。
【0004】
本明細書で使用される場合、「プロセッシングユニット」という用語は、1セットの操作を実行するように構成される任意の種類のプログラム可能または非プログラム可能回路を意味するために使用される。プロセッシングユニットは、ソフトウェアだけでなくハードウェアも備えることができる。例えば、プロセッシングユニットは、1つまたは複数のプロセッサ及び一時的または非一時的なメモリを含み得、このメモリは、プログラムが1つまたは複数のプロセッサによって実行されるときにプロセッシングユニットにそれぞれの操作を実行させるプログラムを保持する。
【0005】
さらに、本明細書で使用される場合、「パフォーマンスを向上させる」という用語は、1つまたは複数のパフォーマンスメトリクスに従って、測定または計算された1つまたは複数のパフォーマンススコアを改善することを指す。プロセッシングユニットのパフォーマンスを測定するために使用される2つの一般的なメトリクスは、レイテンシ及びスループットである。レイテンシは、プロセッシングユニットが識別された操作を実行するのにかかる時間である。識別された操作のいくつかの例は、ソースから宛先にデータパケットを配信すること、及び入力値に応じて識別されたコンピュータ命令セットを実行することである。レイテンシを改善することは、プロセッシングユニットが識別された操作を実行するのにかかる時間を減少させることを指す。スループットは、プロセッシングユニットが時間間隔内に実行する識別された操作の量、例えば、その時間間隔中に配信されるデータパケット量である。システムのスループットの別の例は、プロセッシングユニットが時間間隔内に識別されたコンピュータ命令セットを実行する入力値の量である。スループットを改善することは、プロセッシングユニットが時間間隔内に実行する識別された操作の量を増加させることを指す。
【0006】
コンピューティング分野では、コプロセッサという用語は補助プロセッシングユニットを説明するために使用され、補助プロセッシングユニットを使用して、システムの一次プロセッシングユニットを補完し、一次プロセッシングユニットからプロセッサに集中したタスクの一部をオフロードすることでシステムのパフォーマンスの向上を促進する。ハイパフォーマンスコンピューティングの需要が高まるにつれて、パフォーマンスを向上させるためにコプロセッシングを使用することが増えている。一部のコプロセッサは、一意のタスクを実行するように設計される。一般に知られているコプロセッサは、浮動小数点演算タスクを実行するための浮動小数点プロセッサである。コプロセッサによって実行され得る一意のタスクの他の例には、ネットワーク入力-出力インタフェースタスク、暗号化、文字列処理、グラフィックス処理、線形代数処理、機械学習処理、及び信号処理が含まれる。他のコプロセッサは、一意のタスクとして特徴付けられない、コンピュータプログラムの任意の部分を実行するように構成される場合がある。
【0007】
コプロセッシングは分散処理とは異なる。分散システムでは、問題は複数の独立したタスクに分割され、それぞれのタスクは、複数のプロセッシングユニットのうちの1つまたは複数が互いから実質的に独立して動作し、場合によってはそれらの間で通信することによって解決される。コプロセッシングでは、コプロセッサは一次プロセッシングユニットの機能を補完し、一次プロセッシングユニットと連携して動作する。
【0008】
1つ以上のコプロセッサによって実行されるコンピュータプログラムの一部を委譲する必要がある。
【発明の概要】
【0009】
本開示のいくつかの実施形態は、ヘテロジニアスコンピューティングシステムでソフトウェアプログラム実行することを説明し、このヘテロジニアスコンピューティングシステムは複数の処理ユニットを含み、それぞれの処理ユニットが複数のコンピュータアーキテクチャのうちの1つを有する。
【0010】
上記及び他の目的は、独立請求項の特徴によって達成される。さらなる実施態様形態は、従属請求項、説明及び図から明らかである。
【0011】
上記及び他の目的は、独立請求項の特徴によって達成される。さらなる実施態様形態は、従属請求項、説明及び図から明らかである。
【0012】
本発明の第1の態様によれば、ソフトウェアプログラムを実行するための装置は、複数のプロセッシングユニット及び少なくとも1つのハードウェアプロセッサを含み、これら少なくとも1つのハードウェアプロセッサは、複数のブロックを含むソフトウェアプログラムの中間表現であって、各ブロックがソフトウェアプログラムの複数の実行ブロックのうちの1つに関連付けられ、中間命令セットを備える、中間表現において、ターゲット側ブロックの少なくとも1つのターゲット側中間命令を実行するために少なくとも1つの制御フロー中間命令を備える呼び出し側ブロックと、ターゲット側ブロックと、を識別することと、ターゲット側ブロックを使用して、ターゲット側実行可能命令セットを生成することと、呼び出し側実行可能命令セットが呼び出し側プロセッシングユニットによって実行され、ターゲット側実行可能命令セットがターゲット側プロセッシングユニットによって実行される場合、呼び出し側ブロックを使用して、そしてターゲット側実行可能命令セットを呼び出すための少なくとも1つのコンピュータ制御命令を使用して、呼び出し側実行可能命令セットを生成することと、呼び出し側実行可能命令セットを実行するように呼び出し側プロセッシングユニットを構成することと、ターゲット側実行可能命令セットを実行するようにターゲット側プロセッシングユニットを構成することとのために適合される。ソフトウェアプログラムの中間表現で呼び出し側ブロック及びターゲット側ブロックを識別すると、ソフトウェアプログラムのランタイム中などに、呼び出し側実行可能命令セットと、追加またはその代替としてターゲット側実行可能命令セットとの動的生成が可能になるため、呼び出し側プロセッシングユニットと、追加またはその代替としてターゲット側プロセッシングユニットとの動的構成が可能になる。呼び出し側プロセッシングユニット及び追加またはその代替としてターゲット側プロセッシングユニットの動的構成は、呼び出し側ブロック及び追加またはその代替としてターゲット側ブロックの実行を1つまたは複数のコプロセッサに委譲することによって、ソフトウェアプログラムを実行するシステムのパフォーマンスの向上を促進する。
【0013】
本発明の第2の態様によれば、ソフトウェアプログラムを実行するための方法は、複数のブロックを含むソフトウェアプログラムの中間表現であって、各ブロックがソフトウェアプログラムの複数の実行ブロックのうちの1つに関連付けられ、中間命令セットを備える、中間表現において、ターゲット側ブロックの少なくとも1つのターゲット側中間命令を実行するために少なくとも1つの制御フロー中間命令を含む呼び出し側ブロックと、ターゲット側ブロックと、を識別することと、ターゲット側ブロックを使用して、ターゲット側実行可能命令セットを生成することと、呼び出し側実行可能命令セットが複数のプロセッシングユニットのうちの呼び出し側プロセッシングユニットによって実行され、ターゲット側実行可能命令セットが複数のプロセッシングユニットのうちのターゲット側プロセッシングユニットによって実行される場合、呼び出し側ブロックを使用して、そしてターゲット側実行可能命令セットを呼び出すための少なくとも1つのコンピュータ制御命令を使用して、呼び出し側実行可能命令セットを生成することと、呼び出し側実行可能命令セットを実行するように呼び出し側プロセッシングユニットを構成することと、ターゲット側実行可能命令セットを実行するようにターゲット側プロセッシングユニットを構成することとを含む。
【0014】
本発明の第3の態様によれば、ソフトウェアプログラムを実行するためのソフトウェアプログラム製品は、非一時的なコンピュータ可読記憶媒体と、複数のブロックを含むソフトウェアプログラムの中間表現であって、各ブロックがソフトウェアプログラムの複数の実行ブロックのうちの1つに関連付けられ、中間命令セットを備える、中間表現において、ターゲット側ブロックの少なくとも1つのターゲット側中間命令を実行するために少なくとも1つの制御フロー中間命令を含む呼び出し側ブロックと、ターゲット側ブロックと、を識別するための第1のプログラム命令と、ターゲット側ブロックを使用して、ターゲット側実行可能命令セットを生成するための第2のプログラム命令と、呼び出し側実行可能命令セットが複数のプロセッシングユニットのうちの呼び出し側プロセッシングユニットによって実行され、ターゲット側実行可能命令セットが複数のプロセッシングユニットのうちのターゲット側プロセッシングユニットによって実行される場合、呼び出し側ブロックを使用して、そしてターゲット側実行可能命令セットを呼び出すための少なくとも1つのコンピュータ制御命令を使用して、呼び出し側実行可能命令セットを生成するための第3のプログラム命令と、呼び出し側実行可能命令セットを実行するように呼び出し側プロセッシングユニットを構成するための第4のプログラム命令と、ターゲット側実行可能命令セットを実行するようにターゲット側プロセッシングユニットを構成するための第5のプログラム命令とを含み、第1の、第2の、第3の、第4の及び第5のプログラム命令は、非一時的なコンピュータ可読記憶媒体から少なくとも1つのコンピュータ処理プロセッサによって実行される。
【0015】
第1の及び第2の態様を参照すると、本発明の第1の及び第2の態様の可能な第1の実装では、呼び出し側プロセッシングユニットの第1のコンピュータアーキテクチャは、ターゲット側プロセッシングユニットの第2のコンピュータアーキテクチャとは異なる。任意選択で、第1のコンピュータアーキテクチャ及び第2のコンピュータアーキテクチャのうちの少なくとも1つは、複合命令セットコンピュータ(CISC)アーキテクチャ、縮小命令セットコンピュータ(RISC)アーキテクチャ、x86ファミリーベースのコンピュータアーキテクチャ、IBM(International Business Machine:インターナショナルビジネスマシン)Powerファミリーベースのコンピュータアーキテクチャ、及びARMファミリーベースのコンピュータアーキテクチャからなるコンピュータアーキテクチャの群から選択される。任意選択で、ターゲット側プロセッシングユニットは、中央処理装置、マルチコア中央処理装置(CPU)、データプロセッシングユニット(DPU)、マイクロコントローラユニット(MCU)、アクセラレーテッドプロセッシングユニット(ACU)、フィールドプログラマブルゲートアレイ(FPGA)、粗粒度再構成可能アーキテクチャ(CGRA)、ニューラルネットワークアクセラレータ、インテリジェンスプロセッシングユニット(IPU)、特定用途向け集積回路(ASIC)、量子コンピュータ、及び複数の構成可能データルーティングジャンクションによって接続された複数の再構成可能ロジック素子を含む相互接続されたコンピューティンググリッドからなるプロセッシングユニットの群から選択される。任意選択で、呼び出し側実行可能命令セットは、呼び出し側プロセッシングユニットの第1のコンピュータアーキテクチャとターゲット側プロセッシングユニットの第2のコンピュータアーキテクチャとの間で変換するために、少なくとも1つの制御フロー中間命令に適用されたアプリケーションバイナリインタフェースを実装する、複数の変換命令を含む。任意選択で、ターゲット側ブロックは複数のターゲット側メタデータ値を含み、ターゲット側実行可能命令セットを生成することは、ターゲット側プロセッシングユニットの第2のコンピュータアーキテクチャに従って複数のターゲット側メタデータ値を使用して、変換された複数のターゲット側メタデータ値を生成することを含む。ターゲット側プロセッシングユニットの別のコンピュータアーキテクチャとは異なるコンピュータアーキテクチャを有する呼び出し側プロセッシングユニットを使用すると、呼び出し側プロセッシングユニット及びターゲット側プロセッシングユニットのうちの少なくとも1つが他のそれぞれのプロセッシングユニットよりも安価になり、追加または代替として、他のそれぞれのプロセッシングユニットよりも消費電力が少なくなるように設計されることを可能にすることによって、ソフトウェアプログラムを実行するときにシステムパフォーマンスに大きな影響を与えることなく、本開示に従って実装されるシステムの実装コスト、及び追加または代替的に運用コストの削減が容易になる。1つ以上の制御フロー中間命令に適用されるアプリケーションバイナリインタフェースを実装すると、呼び出し側実行可能命令セットによるターゲット側実行可能命令セットの呼び出しが容易になることで、実行のためにターゲット側ブロックをターゲット側プロセッシングユニットに委譲することが容易になり、ソフトウェアプログラムの実行時にシステムのパフォーマンスが向上する。ターゲット側プロセッシングユニットの第2のコンピュータアーキテクチャに従って複数のターゲット側メタデータ値を使用して、変換された複数のターゲット側メタデータ値を生成することにより、ターゲット側プロセッシングユニットによるターゲット側実行可能命令セットの実行と、呼び出し側プロセッシングユニットによる呼び出し側実行可能命令セットの実行とが共通の実行コンテキストでは容易になることにより、実行のためにターゲット側プロセッシングユニットに委譲するためのターゲット側ブロックを識別する際の可撓性が向上し、ソフトウェアプログラムの実行時にシステムパフォーマンスが向上する。
【0016】
第1の及び第2の態様を参照すると、本発明の第1の及び第2の態様の可能な第2の実装では、ターゲット側プロセッシングユニットはさらに、ターゲット側プロセッシングユニットがターゲット側命令セットのうちの少なくともいくつかを実行することによって生成された少なくとも1つの値を呼び出し側プロセッシングユニットに提供するように構成される。任意選択で、呼び出し側プロセッシングユニットは、ターゲット側プロセッシングユニットがターゲット側命令セットのうちの少なくともいくつかを実行することによって生成された少なくとも1つの値を、呼び出し側プロセッシングユニットから受信するようにさらに構成される。任意選択で、呼び出し側プロセッシングユニットは、ターゲット側プロセッシングユニットに少なくとも1つの引数の値を提供するようにさらに構成される。ターゲット側プロセッシングユニットがターゲット側命令セットのうちの少なくともいくつかを実行することによって生成される1つまたは複数の値を呼び出し側プロセッシングユニットに提供すること、及び追加または代替として、呼び出し側プロセッシングユニットによってターゲット側プロセッシングユニットに1つまたは複数の引数の値を提供することにより、実行のためにターゲット側ブロックをターゲット側プロセッシングユニットに委譲することが容易になるため、ソフトウェアプログラムの実行時に本開示に従って実装されるシステムのパフォーマンスが向上する。
【0017】
第1の及び第2の態様を参照すると、本発明の第1の及び第2の態様の可能な第3の実装では、ターゲット側プロセッシングユニットはさらに、ターゲット側命令セットのうちの少なくともいくつかの他のものを実行した後、呼び出し側実行可能命令セットのうちの少なくともいくつかを実行するように呼び出し側プロセッシングユニットに指令するように構成される。任意選択で、呼び出し側プロセッシングユニットはさらに、ターゲット側実行可能命令セットを呼び出すための少なくとも1つのコンピュータ制御命令を実行した後、呼び出し側実行可能命令セットの実行をサスペンドし、ターゲット側プロセッシングユニットからの命令を受信することに応答して、呼び出し側実行可能命令セットの少なくともいくつかを実行するように構成される。ターゲット側プロセッシングユニットによって呼び出し側実行可能命令セットのうちの少なくとも一部の実行を呼び出すことにより、ターゲット側プロセッシングユニットに接続された1つ以上のコンピューティングリソースへのターゲット側プロセッシングユニットのアクセスを提供することが容易になるため、実行のためにターゲット側プロセッシングユニットに委譲するためのターゲット側ブロックを識別する際の可撓性が向上し、ソフトウェアプログラムの実行時にシステムパフォーマンスが向上する。
【0018】
第1の及び第2の態様を参照すると、本発明の第1の及び第2の態様の可能な第4の実装では、呼び出し側実行可能命令セットは、アプリケーションメモリアドレスの識別範囲内の少なくとも1つのメモリアドレスへの少なくとも1つの第1のメモリアクセス命令を含み、ターゲット側実行可能命令セットは、アプリケーションメモリアドレスの識別範囲内の少なくとも1つの他のメモリアドレスへの少なくとも1つの第2のメモリアクセス命令を含む。任意選択で、アプリケーションメモリアドレスの識別範囲は、物理メモリアドレス範囲、仮想メモリアドレス範囲、メモリマップド入出力アドレス範囲、及びバスアドレス範囲のうちの1つである。呼び出し側実行可能命令セット及びターゲット側実行可能命令セットの両方によって、アプリケーションメモリアドレスの識別範囲にアクセスすると、実行のためにターゲット側プロセッシングユニットに委譲するためのターゲット側ブロックを識別する際の可撓性が向上し、ソフトウェアプログラムの実行時にシステムパフォーマンスが向上する。
【0019】
第1の及び第2の態様を参照すると、本発明の第1の及び第2の態様の可能な第5の実装では、呼び出し側実行可能命令セットは、少なくとも1つのデバイスに関連付けられた少なくとも1つのデバイスハンドルを使用して少なくとも1つのデバイスにアクセスすることを含み、ターゲット側実行可能命令セットは、少なくとも1つのデバイスハンドルを使用して少なくとも1つのデバイスにアクセスすることを含む。任意選択で、少なくとも1つのデバイスハンドルは、ネットワークソケットハンドル、オペレーティングシステムカーネルオブジェクトハンドル、及びファイル記述子のうちの少なくとも1つである。呼び出し側実行可能命令セット及びターゲット側実行可能命令セットの両方によって1つ以上のデバイスにアクセスすると、実行のためにターゲット側プロセッシングユニットに委譲するためのターゲット側ブロックを識別する際の可撓性が向上し、システムパフォーマンスが向上する。
【0020】
第1の及び第2の態様を参照すると、本発明の第1の及び第2の態様の可能な第6の実装では、少なくとも1つのハードウェアプロセッサは、ソフトウェアプログラムの少なくとも一部を実行しながら複数の統計値を収集し、複数の統計値に従って呼び出し側ブロック及びターゲット側ブロックを識別するようにさらに適合される。任意選択で、複数の統計値のうちの少なくとも1つは、制御フロー命令を実行するアウトカム、ソフトウェアプログラムの変数のデータ値、メモリアクセスパターン、及びメモリ仮想アドレス変換のうちの1つを示す。任意選択で、少なくとも1つのハードウェアプロセッサは、複数の統計値を収集する目的のために、ソフトウェアプログラムの中間表現に複数のテレメトリ中間命令を挿入するようにさらに適合される。複数の統計値に従って呼び出し側ブロック及びターゲット側ブロックを識別すると、その識別の精度が向上することにより、ソフトウェアプログラムを実行するときのシステムパフォーマンスが向上する。
【0021】
第1の及び第2の態様を参照すると、本発明の第1の及び第2の態様の可能な第7の実装では、呼び出し側プロセッシングユニットは、少なくとも1つのハードウェアプロセッサである。呼び出し側実行可能命令セットを実行する呼び出し側ブロック及びターゲット側ブロックを識別する1つまたは複数のハードウェアプロセッサを有することにより、呼び出し側ブロック及びターゲット側ブロックのランタイム識別が可能になり、その識別の精度が向上するため、ソフトウェアプログラムの実行時にシステムパフォーマンスが向上する。
【0022】
本開示の他のシステム、方法、特徴、及び利点は、以下の図面及び発明を実施するための形態を検討することにより当業者には明らかであろう、または明らかになるであろう。全てのそのような追加のシステム、方法、特徴、及び利点は、この説明内に含まれ、本開示の範囲内にあり、添付の特許請求の範囲によって保護されることが意図される。
【0023】
別段の定義の無い限り、本明細書で使用される全ての技術用語及び/または科学用語は、実施形態の技術分野の当業者が一般的に理解するものと同じ意味を有する。実施形態の実践または試験には、本明細書に記載したものと類似または同等の方法及び材料を用いることができるが、例示的な方法及び/または材料を以下に記載する。矛盾する場合、定義を含む特許明細書が優先する。さらに、材料、方法、及び実施例は、一例にすぎず、必ずしも限定することを意図していない。
【0024】
いくつかの実施形態を、本明細書では、単なる例示として、添付の図面を参照しながら説明する。ここで図面を詳細にわたって具体的に参照するが、図示されている細部は例示として実施形態を説明的に考察することを目的としたものであることを強調しておく。この点に関して、図面を用いた説明は、実施形態がどのように実施され得るかを当業者に明らかにする。
【図面の簡単な説明】
【0025】
図1】いくつかの実施形態による、例示的なソフトウェアプログラムの概略ブロック図である。
図2】いくつかの実施形態による、ソフトウェアプログラムを実行するための例示的な装置の概略ブロック図である。
図3】いくつかの実施形態による、任意選択の操作フローを概略的に表すフローチャートである。
図4】いくつかの実施形態による、別の任意選択の操作フローのシーケンス図である。
【発明を実施するための形態】
【0026】
一部のコプロセッサは、システムの一次プロセッシングユニットによって呼び出されることなく、独立して動作する。例えば、ネットワークインタフェースコプロセッサは、一次プロセッシングユニットの関与があったとしてもほとんどなく、受信したネットワークパケットを処理することができる。他のコプロセッサは、一次プロセッシングユニットから命令を受信し、例えば、グラフィックプロセッシングユニット(GPU)は、デジタル画像をレンダリングするための命令を受信する。
【0027】
システムの2つのプロセッシングユニットが連携して動作する場合、呼び出し側プロセッシングユニットからターゲット側プロセッシングユニットの操作を呼び出す、例えば、一次プロセッシングユニットからコプロセッサを呼び出す必要がある場合がある。別の例では、コプロセッサは、一次プロセッシングユニットを呼び出し、コプロセッサが独立してアクセスできないリソース、例えば不揮発性デジタルストレージにアクセスすることができる。ターゲット側プロセッシングユニットを呼び出す呼び出し側プロセッシングユニットに加えて、1つ以上のデータ値、例えば、ターゲット側プロセッシングユニットよって実行される演算の入力引数を、呼び出し側プロセッシングユニットから受けてターゲット側プロセッシングユニットに渡す必要がある場合がある。さらに、ターゲット側プロセッシングユニットによって計算されたアウトカム値など、1つまたは複数の他のデータ値を、ターゲット側プロセッシングユニットから受けて呼び出し側プロセッシングユニットに渡して返す必要がある場合がある。
【0028】
コンピューティングでは、アプリケーションバイナリインタフェース(ABI)という用語は、データ及び計算ルーチンへのアクセス方法をハードウェア依存フォーマットで記述する2つのバイナリプログラムモジュール間のインタフェースを指す。2つのバイナリプログラムモジュール間のインタフェースは、データ構造のフォーマットを含むことができる。さらに、またはその代わりに、インタフェースは、計算ルーチンへの入力としてデータを提供し、さらに、またはその代わりに計算ルーチンからの出力として読み出すための呼び出し側コンベンションを含むことができる。
【0029】
コンピューティングでは、アーキテクチャという用語は、コンピュータシステムを構成するコンポーネントの編成と、コンピュータシステムの機能をガイドする操作のセマンティクスまたは意味を指す。本明細書で使用される「ホモジニアスシステム」という用語は、すべて共通のアーキテクチャを有する複数のプロセッシングユニットを含むコンピューティングシステムを指す。例えば、共通のアーキテクチャを有する複数の中央処理装置(CPU)を含むコンピューティングシステムは、ホモジニアスシステムである。同様に、「ヘテロジニアスシステム」という用語は、複数のプロセッシングユニットのうちの少なくとも1つのプロセッシングユニットが、複数のプロセッシングユニットのうちの別のプロセッシングユニットの別のアーキテクチャとは異なるアーキテクチャを有する、複数のプロセッシングユニットを含むシステムを指す。例えば、CPU及びGPUを有するシステムはヘテロジニアスシステムである。ヘテロジニアスシステムの別の例は、CPU及びフィールドプログラマブルゲートアレイ(FPGA)コプロセッサを有するシステムである。ヘテロジニアスシステムの別の例は、複合命令セットコンピュータ(CISC)ベースのアーキテクチャを有するCPUと、縮小命令セットコンピュータ(RISC)ベースのアーキテクチャを有する別のCPUとを含むシステムである。ヘテロジニアスシステムの追加の例は、それぞれが異なる命令セットアーキテクチャ(ISA)をサポートする2つ以上のCPUを有するシステムであり、例えば、1つのCPUがIntel x86 ISAをサポートし、別のCPUがMotorola 68000シリーズISAをサポートする、または1つのCPUがARM ISAをサポートし、別のCPUがRISC-V ISAをサポートする。ヘテロジニアスシステムのさらに別の例では、ヘテロジニアスシステムは、消費電力が高いハイパフォーマンスCPUと、消費電力が低い効率的なCPUを有する。
【0030】
呼び出し側実行ブロック及びターゲット側実行ブロックを有する複数の実行ブロックを含むソフトウェアプログラムを実行する場合、呼び出し側実行ブロックがターゲット側実行ブロックを呼び出すと言うのは、ターゲット側呼び出し側ブロックの1つ以上の命令を実行するための1つ以上の制御フロー命令を呼び出し側実行ブロックが含む場合である。ソフトウェアプログラムを複数のプロセッシングユニットによって実行する場合、呼び出し側プロセッシングユニットが呼び出し側実行ブロックを実行すると、ターゲット側プロセッシングユニットによって実行されたターゲット側実行ブロックを呼び出す場合がある。このような場合、呼び出し側実行ブロックによってターゲット側実行ブロックを呼び出すには、ターゲット側プロセッシングユニットへのインタフェースを記述するABIに従って、呼び出し側プロセッシングユニットによって実行される命令セットを生成する、つまり、命令セットがABIを実装する必要がある。任意選択で、ABIを実装することは、呼び出し側プロセッシングユニットのアーキテクチャとターゲット側プロセッシングユニットの別のアーキテクチャとの間で変換するための1つまたは複数の変換命令を命令セットに追加することを含む。任意選択で、1つまたは複数の変換命令は、呼び出し側プロセッシングユニットによって実行される命令セットに追加される。任意選択で、1つまたは複数の変換命令は、ターゲット側プロセッシングユニットによって実行される他の命令に追加される。任意選択で、ABIを実装することは、ターゲット側ユニットの他のアーキテクチャに従って、例えば、他のアーキテクチャのデータエンコーディング、他のアーキテクチャのバイトアライメント、及び他のアーキテクチャのバイトオーダに従って、スタックなど、メモリ領域内の1つ以上のデータ値を編成することを含む。
【0031】
さらに、例えば、ファイルまたはメモリ領域などへのアクセス権限を共有し、追加または代替として、1つ以上のデータ値を共有するための呼び出し側プロセッシングユニットの実行ステートを、ABIを介してターゲット側プロセッシングユニットに提供する必要がある場合がある。共有された実行ステートの他の例には、ネットワークソケットコンテキスト、ネットワークトポロジのビュー、及びシングルルート入出力仮想化(SRIOV)などの仮想化コンテキストが含まれる。実行ステートには、スレッド識別値、プロセス識別値、リターン命令の実行後に実行する命令の命令アドレス(リターンアドレス)、及び関数の1つ以上の仮引数の値のうちの1つ以上が含まれ得るが、これらに限定されない。任意選択で、呼び出し側実行ブロック及びターゲット側実行ブロックは、ソフトウェアプログラムのアプリケーションメモリアドレスの共通範囲にアクセスする。アプリケーションメモリアドレスのいくつかの例には、物理メモリアドレス、仮想メモリアドレス、メモリマップド入出力アドレス、及びバスアドレスが含まれるが、これらに限定されない。任意選択で、ターゲット側実行ブロックは、コンピュータ処理システムの1つまたは複数のデバイス、例えば、ディスクドライブまたはネットワークアダプタにアクセスすることを含む。任意選択で、1つ以上のデバイスに関連付けられた1つ以上のデバイスハンドルを、ABIを介してターゲット側プロセッシングユニットに提供する必要がある。
【0032】
コプロセッサによって実行される1つまたは複数の実行ブロックを事前に識別することができる場合、及びソースファイルからソフトウェアプログラムをコンパイルするときにコプロセッサが既知である場合、1つ以上の実行ブロックを実行するようにコプロセッサに指令するための1つまたは複数の適切な命令セットを生成することができる。ただし、コプロセッサに対する命令を事前に生成することによって達成されるパフォーマンスの向上は、1つ以上のコプロセッサに委譲されたときにシステムのパフォーマンスを向上させるようなタスクを識別する能力によって制限される。
【0033】
複数のプロセッシングユニットが共通のアーキテクチャ、したがって、共通のABIを有する、ホモジニアスシステムでは、複数のプロセッシングユニットのうちどれが他の実行ブロックを実行するかを事前に決定することなく、実行ブロックがコンパイルされて、別のプロセッシングユニットによって実行される別の実行ブロックを呼び出す可能性がある。ただし、ホモジニアスシステムで達成されるパフォーマンスの向上は、動的に割り振られたタスクに対する共通アーキテクチャのサポートによって制限される。例えば、複数のプロセッシングユニットのそれぞれがCPUである場合、1つまたは複数の浮動小数点算術演算を別のCPUに委譲することは、1つまたは複数の浮動小数点算術演算を浮動小数点プロセッサに委譲するよりもパフォーマンスの向上が少なくなる可能性がある。
【0034】
ヘテロジニアスシステムは、第1のアーキテクチャを有する第1のターゲット側プロセッシングユニットと、第2のアーキテクチャを有する第2のターゲット側プロセッシングユニットとを任意選択で含む。このようなヘテロジニアスシステムでは、呼び出し側プロセッシングユニットによって実行され、第1のターゲット側プロセッシングユニットによって実行される実行ブロックを呼び出す命令セットは、第1のアーキテクチャの第1のABIに従って生成される。このようなヘテロジニアスシステムでは、第2のアーキテクチャの第2のABIが第1のABIと異なる可能性があるため、第2のターゲット側プロセッシングユニットによって実行される場合、命令セットを使用して同じ実行ブロックを呼び出すことができない。
【0035】
コンピュータプログラミングでは、コンピュータプログラムの中間表現は、いかなる特定のマシンにも専用ではないが、マシン(プロセッシングユニット)の動作を表現する抽象機械語でのコンピュータプログラムの表現である。
【0036】
本開示は、本明細書中に記載されるいくつかの実施形態では、ソフトウェアプログラムの中間表現を使用して、呼び出し側プロセッシングユニット及びターゲット側プロセッシングユニットを動的に構成することを提案する。任意選択で、中間表現は複数のブロックを含む。これらのような実施形態によれば、中間表現を使用して、呼び出し側プロセッシングユニットは複数のブロックのうちの呼び出し側ブロックを実行するように構成され、ターゲット側プロセッシングユニットは複数のブロックのうちのターゲット側ブロックを実行するように構成され、呼び出し側ブロックはターゲット側ブロックを呼び出す。そうするために、それらのような実施形態では、本開示は、中間表現を使用して、呼び出し側ブロックを用いて呼び出し側実行可能命令セットを動的に生成し、ターゲット側ブロックを用いてターゲット側実行可能命令セットを動的に生成することと、呼び出し側実行可能命令セットを実行するように呼び出し側プロセッシングユニット、及びターゲット側実行可能命令セットを実行するようにターゲット側プロセッシングユニットを構成することとを提案する。任意選択で、ソフトウェアプログラムを実行することは、呼び出し側プロセッシングユニットが呼び出し側実行可能命令セットを実行することと、ターゲット側プロセッシングユニットがターゲット側実行可能命令セットを実行することとを含む。任意選択で、ソフトウェアプログラムを実行することは、呼び出し側実行可能命令セットを生成することと、さらに、または代替に、ターゲット側実行可能命令セットを生成することとを含む。任意選択で、ソフトウェアプログラムを実行することは、呼び出し側実行可能命令セットを実行するように呼び出し側プロセッシングユニットを構成することと、追加またはその代替に、ターゲット側実行可能命令セットを実行するようにターゲット側プロセッシングユニットを構成することと含む。任意選択で、呼び出し側実行可能命令セット及びターゲット側実行可能命令セットの動的生成は、ソフトウェアプログラムのランタイム中、すなわち、ジャストインタイム(JIT)コンパイル中に行われる。任意選択で、呼び出し側プロセッシングユニットの第1のアーキテクチャは、ターゲット側プロセッシングユニットの第2のアーキテクチャとは異なる。複数のブロックの中間表現を使用することにより、呼び出し側実行可能命令セット及びターゲット側実行可能命令セットの動的生成が可能になり、呼び出し側プロセッシングユニット及びターゲット側プロセッシングユニットの動的構成が可能になるため、複数のプロセッシングユニットからの呼び出し側プロセッシングユニット及びターゲット側プロセッシングユニットの動的選択が可能になる。呼び出し側プロセッシングユニット及びターゲット側プロセッシングユニットの動的構成により、呼び出し側プロセッシングユニット及びターゲット側プロセッシングユニットの静的構成と比較して、ソフトウェアプログラムの実行時にシステムパフォーマンスの向上が促進され、例えば、レイテンシの改善、及び追加または代替としてのスループットの改善が促進される。
【0037】
中間表現の複数のブロックのうちの1つのブロックは、他のブロックの1つまたは複数の中間命令を実行するための1つまたは複数の制御フロー中間命令を含むことによって、中間表現の別のブロックを呼び出し得る。制御フロー中間命令の例としては、関数呼び出し中間命令、ジャンプ中間命令、及び条件分岐中間命令などがある。任意選択で、呼び出し側ブロック及びターゲット側ブロックは、呼び出し側ブロックがターゲット側ブロックの1つまたは複数のターゲット側中間命令を実行するための1つまたは複数の制御フロー中間命令を含むように識別される。
【0038】
さらに、1つまたは複数の制御フロー中間命令は、呼び出し側プロセッシングユニットがターゲット側プロセッシングユニットに1つまたは複数の入力値、例えば関数の1つまたは複数の仮引数を提供することを任意選択で含む。さらに、ターゲット側プロセッシングユニットは、ターゲット側プロセッシングユニットによって生成される1つまたは複数の値、例えばターゲット側ブロックの実行アウトカムを呼び出し側プロセッシングユニットに提供するように任意選択で構成される。
【0039】
さらに、本明細書中に記載されるいくつかの実施形態では、呼び出し側ブロック及びターゲット側ブロックは、ソフトウェアプログラムの少なくとも一部の実行中に収集された複数の統計値に従って識別される。統計値のいくつかの例は、制御フロー命令を実行するアウトカム、ソフトウェアプログラムの変数のデータ値、メモリアクセスパターン、及びメモリ仮想アドレス変換である。これらのような統計値により、ソフトウェアプログラムの実行の可能性のある1つ以上のパスの識別が可能になる。複数の統計値に従って呼び出し側ブロック及びターゲット側ブロックを識別すると、ソフトウェアプログラムを実行するときのシステムパフォーマンスが向上する方法では、呼び出し側ブロック及びターゲット側ブロックを識別する精度が向上する。任意選択で、複数の統計値を収集する任意選択の目的のために、ソフトウェアプログラムの中間表現に複数のテレメトリ中間命令を挿入する。
【0040】
少なくとも1つの実施形態を詳細に説明する前に、実施形態は、その適用において、以下の記述で記載される、及び/または図面及び/または実施例に例示される、構造の詳細と構成要素及び/または方法の配列とに必ずしも限定されないことを理解されたい。本明細書に記載の実装は、他の実施形態が可能であり、または様々な方法で実践もしくは実行することが可能である。
【0041】
実施形態は、システム、方法、及び/またはコンピュータプログラム製品であり得る。コンピュータプログラム製品は、実施形態の態様をプロセッサに実行させるためのコンピュータ可読プログラム命令をその媒体上に有するコンピュータ可読記憶媒体(複数可)を含み得る。
【0042】
コンピュータ可読記憶媒体は、命令実行デバイスが使用するための命令を保持し保存することができる有形のデバイスであり得る。コンピュータ可読記憶媒体は、例えば、電子式ストレージデバイス、磁気ストレージデバイス、光学式ストレージデバイス、電磁ストレージデバイス、半導体ストレージデバイス、またはこれらの任意の好適な組み合わせとすることができるが、これらに限定されない。コンピュータ可読記憶媒体のより具体的な例を非網羅的に挙げると、以下のようなものがある。すなわち、ポータブルコンピュータディスケット、ハードディスク、ランダムアクセスメモリ(RAM)、リードオンリメモリ(ROM)、消去可能プログラマブルリードオンリメモリ(EPROMまたはフラッシュメモリ)、静的ランダムアクセスメモリ(SRAM)、ポータブルコンパクトディスクリードオンリメモリ(CD-ROM)、デジタルバーサタイルディスク(DVD)、メモリースティック、フロッピーディスク、及び上記の任意の好適な組み合わせである。本明細書で使用されるコンピュータ可読記憶媒体は、電波もしくはその他の自由に伝播する電磁波、導波管もしくはその他の伝送媒体を伝播する電磁波(例えば、光ファイバケーブルを通過する光パルス)、または電線を介して伝送される電気信号など、それ自体が一時的な信号であると解釈されるべきではない。
【0043】
本明細書に記載されているコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体からそれぞれのコンピューティング/プロセッシングデバイスに、またはネットワーク、例えば、インターネット、ローカルエリアネットワーク、ワイドエリアネットワーク及び/またはワイヤレスネットワークを介して外部のコンピュータもしくは外部ストレージデバイスに、ダウンロードすることができる。ネットワークは、銅製の伝送ケーブル、光伝送ファイバ、無線伝送、ルータ、ファイアウォール、スイッチ、ゲートウェイコンピュータ、及び/またはエッジサーバを含み得る。各コンピューティング/処理デバイスのネットワークアダプタカードまたはネットワークインタフェースは、ネットワークからコンピュータ可読プログラム命令を受信し、そのコンピュータ可読プログラム命令を転送して、それぞれのコンピューティング/処理デバイス内のコンピュータ可読記憶媒体に保存する。
【0044】
実施形態の動作を実行するためのコンピュータ可読プログラム命令は、アセンブラ命令、命令セットアーキテクチャ(ISA)命令、機械語命令、機械依存命令、マイクロコード、ファームウェア命令、状態設定データ、または、Smalltalk、C++、Java、オブジェクト指向のFortranなど、JavaScriptなどのインタプリタ型プログラミング言語、Python もしくはその種の他のものなどのオブジェクト指向プログラミング言語や、「C」プログラミング言語、Fortran、もしくは類似のプログラミング言語などの従来の手続き型プログラミング言語を含む、1つ以上のプログラミング言語の任意の組み合わせで記述され、ネイティブにコンパイルされた、またはジャストインタイム(JIT)でコンパイルされた、ソースコードもしくはオブジェクトコードのいずれかであり得る。コンピュータ可読プログラム命令は、完全にユーザのコンピュータ上で、部分的にユーザのコンピュータ上で、スタンドアローンのソフトウェアパッケージとして実行すること、部分的にユーザのコンピュータ上で実行し、部分的にリモートコンピュータ上で実行すること、または完全にリモートコンピュータもしくはサーバ上で実行することが可能である。後者のシナリオでは、リモートコンピュータは、ローカルエリアネットワーク(LAN)もしくはワイドエリアネットワーク(WAN)を含む、任意の種類のネットワークを介してユーザのコンピュータに接続することができ、または外部のコンピュータに(例えば、インターネットサービスプロバイダを用いるインターネット経由で)接続することができる。いくつかの実施形態では、例えば、プログラマブルロジック回路、フィールドプログラマブルゲートアレイ(FPGA)、またはプログラマブルロジックアレイ(PLA)を含む電子回路は、実施形態の態様を実施するために、コンピュータ可読プログラム命令の状態情報を利用して、電子回路をパーソナライズすることにより、コンピュータ可読プログラム命令を実行することができる。
【0045】
実施形態の態様は、実施形態による方法、装置(システム)、及びコンピュータプログラム製品のフローチャート図及び/またはブロック図を参照して本明細書で説明される。フローチャート図及び/またはブロック図の各ブロック、及びフローチャート図及び/またはブロック図のブロックの組み合わせは、コンピュータ可読プログラム命令によって実施できることが理解されよう。
【0046】
これらのコンピュータ可読プログラム命令は、汎用コンピュータ、特殊用途コンピュータ、または他のプログラム可能なデータプロセッシングユニットのプロセッサに提供されて、コンピュータまたは他のプログラム可能なデータプロセッシングユニットのプロセッサを介して実行される命令が、フローチャート及び/またはブロック図の1つ以上のブロックで指定される機能/行為を実施するための手段を作成するような機械を作り出し得る。これらのコンピュータ可読プログラム命令は、コンピュータ可読記憶媒体に保存することもでき、このコンピュータ可読記憶媒体は、その中に保存された命令を有するコンピュータ可読記憶媒体が、コンピュータ、プログラム可能なデータプロセッシングユニット、及び/または他のデバイスに、フローチャート及び/またはブロック図の1つ以上のブロックで指定される機能/行為の態様を実施する命令を含む製造品を含むような特定の方法で機能するように指示することができる。
【0047】
また、コンピュータ可読プログラム命令をコンピュータ、その他のプログラム可能なデータプロセッシングユニット、またはその他のデバイスにロードすることで、一連の操作ステップをコンピュータ、その他のプログラム可能なデータプロセッシングユニット、またはその他のデバイス上で実行し、コンピュータ、その他のプログラム可能なデータプロセッシングユニット、またはその他のデバイスで実行される命令がフローチャート及び/またはブロック図の1つ以上のブロックで指定される機能/行為を実施するような、コンピュータ実施プロセスを生成することができる。
【0048】
図中のフローチャート及びブロック図は、様々な実施形態によるシステム、方法、及びコンピュータプログラム製品の可能な実施態様のアーキテクチャ、機能、及び動作を示している。この関連で、フローチャートまたはブロック図の各ブロックは、指定された論理機能(複数可)を実施するための1つ以上の実行可能な命令を含む、命令のモジュール、セグメント、または部分を表し得る。いくつかの代替実施態様では、ブロックで留意される機能は、図で留意される順序とは違う順序で起こり得る。例えば、連続して示される2つのブロックは、実際に、実質的に同時に実行され得る、または、ブロックは、時々、含有される機能に応じて、逆の順序で実行され得る。また、ブロック図及び/またはフローチャート図の各ブロック、及びブロック図及び/またはフローチャート図中のブロックの組み合わせは、指定された機能もしくは行為を実行する、または特殊用途のハードウェアとコンピュータ命令との組み合わせを実行する、特殊用途のハードウェアベースシステムによって実施することができることにも留意されたい。
【0049】
ここで図1を参照すると、いくつかの実施形態による、例示的なソフトウェアプログラム100の概略ブロック図を示す。これらのような実施形態では、ソフトウェアプログラムのソースコード101は、呼び出し側実行ブロック110及びターゲット側実行ブロック120を有する、複数の実行ブロックを含む。任意選択で、呼び出し側実行ブロック110は、ターゲット側実行ブロック120を呼び出す。任意選択で、呼び出し側実行ブロック110は、ターゲット側実行ブロック120の1つまたは複数のソースコード命令を実行するための1つまたは複数の制御フローソースコード命令を含む。
【0050】
任意選択で、中間表現102は、コンピュータアーキテクチャに専用ではない、例えば中間言語などである、ソースコード101の表現である。中間表現に使用される中間言語の例としては、レジスタ転送言語(RTL)、Cプログラミング言語、MATLABプリコンパイル済みコード、LLVM Developer Group中間表現言語、GNU Compiler Collection中間表現言語、Microsoft Pコード、及びJavaバイトコードなどがある。任意選択で、中間表現102は、仮想マシンをターゲットとする言語である。任意選択で、中間表現102は、呼び出し側ブロック111及びターゲット側ブロック121を有する複数のブロックを含む。任意選択で、複数のブロックのそれぞれは、ソースコード101の複数の実行ブロックのうちの1つに関連付けられ、複数の中間命令を含む。この例では、呼び出し側ブロック111は呼び出し側実行ブロック110に関連付けられ、ターゲット側ブロック121はターゲット側実行ブロック120に関連付けられる。
【0051】
中間表現102上の複数のブロックのそれぞれと、ソースコード101の複数の実行ブロックのうちの1つとの間の関連付けでは、中間表現102は、実行ブロック120を呼び出す実行ブロック110を任意選択で保持する。任意選択で、呼び出し側ブロック111は、ターゲット側ブロック121の1つまたは複数のターゲット側中間命令を実行するための1つまたは複数の制御フロー中間命令を含む。
【0052】
1つまたは複数のプロセッシングユニット上でソフトウェアプログラムを実行するために、中間表現102の複数のブロックの1つごとに、1つまたは複数の実行可能命令セットが生成される。したがって、呼び出し側実行可能命令セット112は、呼び出し側ブロック111に対して任意選択で生成され、ターゲット側実行可能命令セット122は、ターゲット側ブロック121に対して任意選択で生成される。
【0053】
ここで図2も参照すると、いくつかの実施形態による、ソフトウェアプログラムを実行するための例示的な装置200の概略ブロック図を示す。これらのような実施形態では、少なくとも1つのハードウェアプロセッサ201は、例えば呼び出し側プロセッシングユニット210及びターゲット側プロセッシングユニット220を含む、複数のプロセッシングユニットに接続される。任意選択で、複数のプロセッシングユニットのうちの1つ以上は、中央処理装置、マルチコア中央処理装置(CPU)、データプロセッシングユニット(DPU)、マイクロコントローラユニット(MCU)、アクセラレーテッドプロセッシングユニット(ACU)、フィールドプログラマブルゲートアレイ(FPGA)、粗粒度再構成可能アーキテクチャ(CGRA)、ニューラルネットワークアクセラレータ、インテリジェンスプロセッシングユニット(IPU)、特定用途向け集積回路(ASIC)、量子コンピュータ、及び複数の構成可能データルーティングジャンクションによって接続された複数の再構成可能ロジック素子を含む相互接続されたコンピューティンググリッドを含むが、これらに限定されない、プロセッシングユニットの群から選択される。
【0054】
任意選択で、呼び出し側プロセッシングユニットは、複合命令セットコンピュータ(CISC)アーキテクチャ、縮小命令セットコンピュータ(RISC)アーキテクチャ、x86ファミリーベースのコンピュータアーキテクチャ、IBM(International Business Machine:インターナショナルビジネスマシン)Powerファミリーベースのコンピュータアーキテクチャ、及びARMファミリーベースのコンピュータアーキテクチャを含むが、これらに限定されない、コンピュータアーキテクチャの群から選択される、第1のコンピュータアーキテクチャを有する。任意選択で、ターゲット側プロセッシングユニットは、コンピュータアーキテクチャの群から選択された第2のコンピュータアーキテクチャを有する。任意選択で、第1のコンピュータアーキテクチャは第2のコンピュータアーキテクチャとは異なる。任意選択で、第1のコンピュータアーキテクチャは第2のコンピュータアーキテクチャである。
【0055】
任意選択で、少なくとも1つのハードウェアプロセッサ201は、1つ以上のデジタル通信ネットワーク、例えば、イーサネットネットワークもしくはWi-Fiネットワークなどのローカルエリアネットワーク(LAN)、またはインターネットなどのワイドエリアネットワーク(WAN)を介して、複数のプロセッシングユニットに接続される。任意選択で、呼び出し側プロセッシングユニット210は、任意選択でデジタル通信ネットワークを介して、ターゲット側プロセッシングユニット220に接続される。任意選択で、ターゲット側プロセッシングユニット220は、例えばメモリバス、周辺コンポーネント拡張バス、またはインターコネクト、いくつかの例としてはIntel QuickPathインターコネクト(QPI)及びペリフェラルコンポーネントインターコネクトエクスプレス(PCIe)を介して、呼び出し側プロセッシングユニット210に電気的に結合される。
【0056】
任意選択で、装置200は、複数のプロセッシングユニットのうちの1つまたは複数に任意選択で接続された、メモリ230を含む。任意選択で、メモリ230は、例えば静的RAM(SRAM)と、追加または代替的に動的RAM(DRAM)を含むランダムアクセスメモリ(RAM)である。DRAMの例としては、同期動的RAM(SDRAM)、ダブルデータレートSDRAM(DDR)、グラフィックスダブルデータレートSDRAM(GDDR)、及び低電力ダブルデータレートSDRAM(LPDDR)、ならびに高帯域幅RAM(HBM)などがある。任意選択で、装置200は、複数のプロセッシングユニットのうちの1つまたは複数に任意選択で接続された、不揮発性デジタルストレージ233を含む。不揮発性デジタルストレージの例には、ハードディスクドライブ、ソリッドステートドライブ、ネットワーク接続ストレージ、及びストレージネットワークなどが含まれる。
【0057】
任意選択で、装置200は、複数のプロセッシングユニットのうちの1つまたは複数に任意選択で接続された、1つ以上の他のデバイス231を含む。デバイスの例としては、表示装置及びネットワークアダプタなどがある。任意選択で、1つまたは複数の他のデバイス231は、1つまたは複数のプロセッシングユニットに電気的に結合される。
【0058】
簡潔にするために、以降、「プロセッシングユニット」という用語は、「少なくとも1つのハードウェアプロセッサ」を意味するためにも使用される。
【0059】
いくつかの実施形態では、ソフトウェアプログラム100を実行するために、装置200は以下の任意選択の方法を実装する。
【0060】
ここで図3も参照すると、いくつかの実施形態による、操作300の操作フローを概略的に表すフローチャートを示す。これらのような実施形態では、301では、プロセッシングユニット201は、中間表現102の複数のブロック内の呼び出し側ブロック111及びターゲット側ブロック121を識別する。任意選択で、呼び出し側ブロック111は、ターゲット側ブロック121の1つまたは複数のターゲット側中間命令を実行するための1つまたは複数の制御フロー中間命令を含む。311では、プロセッシングユニット201は、ターゲット側ブロック121を使用してターゲット側実行可能命令セット122を任意選択で生成する。
【0061】
313では、プロセッシングユニット201は、呼び出し側ブロック111を使用し、そして1つ以上のコンピュータ制御命令を使用して、呼び出し側実行可能命令セット112を任意選択で生成する。任意選択で、1つまたは複数のコンピュータ制御命令は、呼び出し側実行可能命令セット112が呼び出し側プロセッシングユニット210によって実行され、ターゲット側実行可能命令セット122がターゲット側プロセッシングユニット220によって実行される場合、ターゲット側実行可能命令セット122を呼び出す。任意選択で、呼び出し側実行可能命令セット112は、呼び出し側プロセッシングユニット210の第1のコンピュータアーキテクチャとターゲット側プロセッシングユニット220の第2のコンピュータアーキテクチャとの間で変換するために、1つ以上の制御フロー中間命令に適用されたABIを実装する、複数の変換命令を含む。
【0062】
任意選択で、ターゲット側ブロック121は複数のターゲット側メタデータ値を含む。任意選択で、複数のターゲット側メタデータ値のうちのいくつかは、ターゲット側ブロック121を実行するための実行コンテキストを記述する。ターゲット側メタデータ値の例としては、スタックメモリ値及びプログラムカウンタ値などがある。任意選択で、ターゲット側実行可能命令セット122を生成することは、ターゲット側プロセッシングユニット220の第2のコンピュータアーキテクチャに従って複数のターゲット側メタデータ値を使用して変換された複数のターゲット側メタデータ値を生成することを含む。
【0063】
任意選択で、呼び出し側実行可能命令セット112及びターゲット側実行可能命令セット122は両方とも、アプリケーションメモリアドレスの共通範囲にアクセスし、その結果、呼び出し側実行可能命令セット112は、アプリケーションメモリアドレスの共通範囲内の1つまたは複数のメモリアドレスへの1つまたは複数の第1のメモリアクセス命令を含み、ターゲット側実行可能命令セット122は、アプリケーションメモリアドレスの共通範囲内に1つまたは複数の他のメモリアドレスへの1つまたは複数の第2のメモリアクセス命令を含む。任意選択で、アプリケーションメモリアドレスの共通範囲は、物理メモリアドレスの範囲、例えばメモリ230内の物理アドレスの範囲である。任意選択で、アプリケーションメモリアドレスの共通範囲は仮想メモリアドレスの範囲である。任意選択で、アプリケーションメモリアドレスの共通範囲はバスアドレスの範囲である。任意選択で、アプリケーションメモリアドレスの共通範囲はメモリマップド入出力アドレスの範囲である。
【0064】
任意選択で、呼び出し側実行可能命令セット112及びターゲット側実行可能命令セット122は、例えば共通のアクセス権限を提供するために、共通の実行ステートを共有する。任意選択で、呼び出し側実行可能命令セット112の呼び出し側スレッド識別子は、ターゲット側実行可能命令セット122のターゲット側スレッド識別子に関連付けられる。考えられる例では、呼び出し側実行可能命令セット112及びターゲット側実行可能命令セット122の両方は、共通のデバイスハンドルを使用して1つまたは複数のデバイス231にアクセスする。デバイスハンドルの例としては、ネットワークソケットハンドル、オペレーティングシステムカーネルオブジェクトハンドル、及びファイル記述子などがある。したがって、この例では、呼び出し側実行可能命令セット112は、1つまたは複数のデバイス231に関連付けられた1つまたは複数のデバイスハンドルを使用して1つまたは複数のデバイス231にアクセスすることを含み、この例では、ターゲット側実行可能命令セット122は、1つ以上のデバイスハンドルを使用して、1つまたは複数のデバイス231にアクセスすることを含む。
【0065】
任意選択で、321では、プロセッシングユニット201は、呼び出し側実行可能命令セット112を実行するように呼び出し側プロセッシングユニット210を構成する。任意選択で、323では、プロセッシングユニット201は、ターゲット側実行可能命令セット122を実行するようにターゲット側プロセッシングユニット220を構成する。
【0066】
任意選択で、呼び出し側プロセッシングユニット210は、プロセッシングユニット201であるため、プロセッシングユニット201は、呼び出し側実行可能命令セット112を実行するように構成される。任意選択で、プロセッシングユニット201は、ソフトウェアプログラム100、すなわち、JITコンパイルを実行しながら、方法300を実行する。
【0067】
ソフトウェアプログラム100を実行する場合、呼び出し側プロセッシングユニット210及びターゲット側プロセッシングユニット220は相互に通信することができる。
【0068】
ここで図4も参照すると、いくつかの実施形態による、別の任意選択の操作400のフローのシーケンス図を示す。これらのような実施形態では、401では、呼び出し側プロセッシングユニット210は、ターゲット側実行可能命令セット122を呼び出すための1つまたは複数のコンピュータ制御命令を実行する。任意選択で、1つまたは複数のコンピュータ制御命令を実行するように呼び出し側プロセッシングユニット210を構成することは、ターゲット側プロセッシングユニット220に1つ以上の引数の値を提供するように呼び出し側プロセッシングユニット210を構成することを含み、その結果、401では、呼び出し側プロセッシングユニット210は、ターゲット側プロセッシングユニット220に1つまたは複数の引数の値を任意選択で提供する。任意選択で、402では、ターゲット側プロセッシングユニット220は、ターゲット側実行可能命令セット122の少なくともいくつかを実行する。任意選択で、402では、ターゲット側プロセッシングユニット220は、1つ以上の値を生成する。任意選択で、ターゲット側実行可能命令セット122を実行するようにターゲット側プロセッシングユニット220を構成することは、呼び出し側プロセッシングユニット210に1つ以上の値を提供するようにターゲット側プロセッシングユニット220を構成することを含み、その結果、410では、ターゲット側プロセッシングユニット220は、呼び出し側プロセッシングユニット210に1つまたは複数の値を任意選択で提供する。任意選択で、呼び出し側プロセッシングユニット210を構成することは、1つまたは複数の値を受信するように呼び出し側プロセッシングユニット210を構成することを含み、その結果、413では、呼び出し側プロセッシングユニット210は、1つまたは複数の値を任意選択で受信する。
【0069】
任意選択で、ターゲット側ブロック111は、ソフトウェアプログラム100の実行の制御を呼び出し側ブロック112に返す。任意選択で、プロセッシングユニット201は、呼び出し側実行可能命令セット112の少なくともいくつかを実行するように呼び出し側プロセッシングユニット210に指令するようにターゲット側プロセッシングユニット220を任意選択でさらに構成し、その結果、420では、ターゲット側プロセッシングユニット220は、呼び出し側実行可能命令セット112の少なくともいくつかを実行するように呼び出し側プロセッシングユニット210に任意選択で指令し、422では、呼び出し側プロセッシングユニット210は、呼び出し側実行可能命令セット112の少なくともいくつかを任意選択で実行する。任意選択で、ターゲット側プロセッシングユニット220は、いくつかの例ではオペレーティングシステムプロセス信号、ハードウェアキュー、ハードウェアメールボックス、メッセージ、通信パイプ、及び共有メモリ領域である、ソフトウェア信号を使用して呼び出し側プロセッシングユニット210に指令する。
【0070】
任意選択で、ターゲット側プロセッシングユニット220は、ターゲット側実行可能命令セット122のいくつかの他のものを実行した後、420を実行する。
【0071】
任意選択で、呼び出し側プロセッシングユニット210は、401の実行後、呼び出し側実行可能命令セット112の実行をサスペンドするようにさらに構成される。任意選択で、呼び出し側プロセッシングユニット210は、420で命令を受信することに応答して、422を実行する。任意選択で、ターゲット側プロセッシングユニット220は、ターゲット側プロセッシングユニット220と共有されていないリソースにアクセスするために、呼び出し側実行可能命令セット112の少なくともいくつかを実行するように呼び出し側プロセッシングユニット210に指令する。任意選択で、ターゲット側プロセッシングユニット220は、ターゲット側実行可能命令セット122の実行を完了した後、呼び出し側実行可能命令セット112の少なくともいくつかを実行するように呼び出し側プロセッシングユニット210に指令する。
【0072】
ここで再び図1を参照する。任意選択で、330では、プロセッシングユニット201は、ソフトウェアプログラム100の少なくとも一部を実行しながら複数の統計値を収集する。任意選択で、複数の統計値のうちの少なくとも1つは、制御フロー命令を実行するアウトカムを示す。任意選択で、複数の統計値のうちの少なくとも1つの他の統計値は、ソフトウェアプログラム100の値、例えば関数または条件分岐命令への入力値を示す。任意選択で、複数の統計値のうちの少なくとも1つは、メモリアクセスパターン、任意選択でメモリ230への複数のメモリアクセスを示す。任意選択で、メモリアクセスパターンには、メモリアドレスまたはメモリアドレスの範囲へのアクセス量が含まれる。任意選択で、複数の統計値のうちの少なくとも1つは、メモリアドレス変換を示す。
【0073】
任意選択で、複数の統計値を収集するために、プロセッシングユニット201は、複数のテレメトリ中間命令を中間表現102に挿入するようにさらに適合される。任意選択で、プロセッシングユニット201は、複数の統計値を収集する目的で、ソフトウェアプログラムの実行中にホットパッチ技術を使用して、そのソフトウェアプログラムを変更するようにさらに適合される。
【0074】
任意選択で、プロセッシングユニット201は、複数のプロセッシングユニットのうちの1つまたは複数から複数の統計値のうちの少なくともいくつかを受信する。
【0075】
任意選択で、プロセッシングユニット201は、301では、複数の統計値に従って呼び出し側ブロック及びターゲット側ブロックを識別する。
【0076】
様々な実施形態の説明は、例証の目的で提示されているが、包括的に、または開示される実施形態に限定されることが意図されていない。記載された実施形態の範囲及び趣旨から逸脱することなく、多くの修正及び変形が当業者には明らかとなるであろう。本明細書で使用される用語は、実施形態の原理、市場で見出される技術に対する実用的応用または技術改善を最もよく説明するために選択され、あるいは当業者が本明細書に開示された実施形態を理解できるようにするために選択されたものである。
【0077】
本出願から成熟する特許の存続期間中に、多くの関連する中間表現及びコンピュータアーキテクチャが開発され、「中間表現」及び「コンピュータアーキテクチャ」という用語の範囲は、そのような全ての新技術を先験的に含むことを意図している。
【0078】
本明細書で使用するとき、「約」という用語は、±10%を意味する。
【0079】
「含む(comprises)」、「含んでいる(comprising)」、「含む(includes)」、「含んでいる(including)」、「有している(having)」という用語及びそれらの同根語は、「~を含むが、~に限定されない」ことを意味する。この用語は、「~からなる」及び「~から本質的になる」という用語を包含する。
【0080】
「本質的に~からなる(consisting essentially of)」という表現は、組成物または方法が、追加の成分及び/またはステップを含むことができるが、追加の成分及び/またはステップが、特許請求された組成物または方法の基本的かつ新規な特性を実質的に変えない場合に限ることを意味する。
【0081】
本明細書で使用する場合、文脈上明らかに別段に示されている場合を除き、「ある、1つの(a)」、「ある、1つの(an)」及び「この、その(the)」という単数形には、複数の指示対象が含まれる。例えば、「化合物(a compound)」または「少なくとも1つの化合物(at least one compound)」という用語は、それらの混合物を含む複数の化合物を含み得る。
【0082】
本明細書では「例示的な」という言葉は、「例、実例、または説明として役立つ」という意味で使用される。「例示的な」として説明される任意の実施形態は、必ずしも他の実施形態よりも好ましいまたは有利であると解釈されるべきではなく、及び/または他の実施形態からの特徴の組み込みを排除するものではない。
【0083】
本明細書では、言葉「任意選択で」は、「ある実施形態では提供され、他の実施形態では提供されない」ことを意味するために使用される。任意の特定の実施形態は、そのような特徴が矛盾しない限り、複数の「任意選択」の特徴を含むことができる。
【0084】
本出願を通して、様々な実施形態は、範囲形式で提示され得る。範囲形式での記述は、単に便宜上及び簡潔にするためのものであり、実施形態の範囲に対する柔軟性のない制限として解釈されるべきではないことを理解されたい。したがって、範囲の説明は、その範囲内の個々の数値だけでなく、可能性のあるすべてのサブ範囲を具体的に開示したものと見なされるべきである。例えば、「1~6」といった範囲の記述は、「1~3」、「1~4」、「1~5」、「2~4」、「2~6」、「3~6」などといったサブ範囲と、その範囲内の個々の数値、例えば、1、2、3、4、5、及び6とが具体的に開示されていると見なされるべきである。これは、範囲の広さに関係なく適用される。
【0085】
本明細書で数値範囲が示されるときはいつでも、それは、示された範囲内の任意の引用された数字(分数または整数)を含むことを意味する。第1の表示番号と第2の表示番号との「間の範囲(ranging/ranges between)」という句、及び第1の表示番号「から」第2の表示番号「まで(to)」の「範囲(ranging/ranges from)」という句は、本明細書では互換的に使用され、第1の表示番号及び第2の表示番号と、それらの間の分数及び整数の数字の全てを含むことを意味する。
【0086】
明確にするために別個の実施形態の文脈において説明される実施形態のある特徴を、単一の実施形態において組み合わせで設けることもできることが理解される。逆に、簡潔にするために単一の実施形態の文脈において説明される実施形態の様々な特徴を、別々に、または任意の好適なサブコンビネーションで、または任意の他の説明された実施形態において好適なものとして設けることもできる。様々な実施形態の文脈で説明される特定の特徴は、実施形態がそれらの要素なしでは機能しない場合を除いて、それらの実施形態の本質的な特徴と見なすべきではない。
【0087】
実施形態をその特定の実施形態に関連して説明したが、多くの代替形態、修正形態及び変形形態が当業者には明らかであろうことは明白である。したがって、添付の特許請求の範囲の趣旨及び広い範囲に含まれるそのようなすべての代替形態、修正形態及び変形形態を包含することが意図されている。
【0088】
本明細書に記述される全ての刊行物、特許、及び特許出願は、各個別の刊行物、特許、または特許出願が、参照により本明細書に組み込まれることが示されているときに、これが明確かつ個別に注記されているかのように、参照によりその全体が本明細書に組み込まれることが出願人(出願人ら)の意図である。さらに、本願におけるいずれかの参考文献の引用または特定は、そのような参考文献が本発明の先行技術として利用可能であるということの承認として解釈するべきではない。セクションの見出しが使用されている場合、それらは必ずしも限定的であると解釈されるべきではない。さらに、本願のいずれかの優先権書類(複数可)は、本明細書により、その全体が参照により本明細書に組み込まれる。
図1
図2
図3
図4
【国際調査報告】