JP2017507411A - 動的言語でのインラインキャッシュのためのハードウェアアクセラレーション - Google Patents

動的言語でのインラインキャッシュのためのハードウェアアクセラレーション Download PDF

Info

Publication number
JP2017507411A
JP2017507411A JP2016547602A JP2016547602A JP2017507411A JP 2017507411 A JP2017507411 A JP 2017507411A JP 2016547602 A JP2016547602 A JP 2016547602A JP 2016547602 A JP2016547602 A JP 2016547602A JP 2017507411 A JP2017507411 A JP 2017507411A
Authority
JP
Japan
Prior art keywords
instance
dynamic software
processor
software operation
inline cache
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
JP2016547602A
Other languages
English (en)
Other versions
JP6293910B2 (ja
JP2017507411A5 (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 JP2017507411A publication Critical patent/JP2017507411A/ja
Publication of JP2017507411A5 publication Critical patent/JP2017507411A5/ja
Application granted granted Critical
Publication of JP6293910B2 publication Critical patent/JP6293910B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution
    • G06F9/4491Optimising based on receiver type
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)
  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Abstract

態様は、動的言語でのインラインキャッシュのためのハードウェアアクセラレーションのためのコンピューティングデバイス、システム、および方法を含む。インラインキャッシュが、動的ソフトウェア動作のインスタンス用に初期化され得る。動的ソフトウェア動作の初期化されたインスタンスの呼出しが、インラインキャッシュハードウェアアクセラレータによって実行され得る。インラインキャッシュは、そのデータが現行であると判断するために調べられ得る。データが現行であるとき、動的ソフトウェア動作の初期化されたインスタンスは、関連インラインキャッシュデータを使って実行され得る。データが現行でないとき、動的ソフトウェア動作の前に初期化されたインスタンスの現行でないデータを含む、新たなインラインキャッシュが、動的ソフトウェア動作のインスタンス用に初期化され得る。インラインキャッシュハードウェアアクセラレータは、プロセッサパイプラインに接続されたインラインキャッシュパイプライン上のインラインキャッシュメモリ、コプロセッサ、および/または機能ユニットを含み得る。

Description

関連出願
本出願は、その内容全体が参照によって本明細書に組み込まれる、2014年1月23日に出願された「Hardware Acceleration For Inline Caches In Dynamic Languages」という名称の米国仮出願第61/930,808号の優先権の利益を主張する。
JavaScript(登録商標)、Python、およびRubyなどの動的プログラミング言語はしばしば、コードをコンパイルする間に他の言語が実行し得るランタイムにおける共通する挙動を実行するのに使われる。動的プログラミング言語は、ソフトウェアプログラムの柔軟性を増し、しばしば、追加ランタイムコンパイルにより実行が遅くなる。インラインキャッシュは、共通する挙動用の共通テンプレートから「高速コード」を生成することによって、動的言語に対するコード実行オーバーヘッドを削減するのに頻繁に使われる技法である。ただし、インラインキャッシュは、追加インラインキャッシュ化コードおよび定数値を記憶することによって、プログラムのメモリ使用を増大させる。特にモバイルデバイスにとっては、メモリは制限のあるリソースである。
様々な態様は、コンピューティングデバイス上の動的言語ソフトウェアの処理速度を増大させるための方法および装置に焦点を当てている。態様方法は、動的ソフトウェア動作の第1のインスタンス用の第1のインラインキャッシュをプロセッサによって初期化するステップと、第1のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成されたメモリ中に、第1のインラインキャッシュを格納するステップと、コプロセッサ中で、動的ソフトウェア動作の第2のインスタンスを受信するステップと、動的ソフトウェア動作の第1のインスタンスと動的ソフトウェア動作の第2のインスタンスが同じかどうかを、コプロセッサによって判断するステップと、動的ソフトウェア動作の第1のインスタンスと動的ソフトウェア動作の第2のインスタンスが同じであると判断したことに応答して、メモリからの第1のインラインキャッシュを使って、動的ソフトウェア動作の第2のインスタンスをコプロセッサによって実行するステップと、動的ソフトウェア動作の第2のインスタンスをコプロセッサによって実行した結果をプロセッサに戻すステップとを含み得る。
ある態様では、動的ソフトウェア動作の第1のインスタンスと動的ソフトウェア動作の第2のインスタンスが同じかどうか判断するステップは、動的ソフトウェア動作の第1のインスタンスに関連した第1のオブジェクト実装を、動的ソフトウェア動作の第2のインスタンスに関連した第2のオブジェクト実装と比較するステップと、第1のオブジェクト実装と第2のオブジェクト実装が同じであるかどうか判断するステップとを含み得る。
ある態様方法は、動的ソフトウェア動作の第1のインスタンスと動的ソフトウェア動作の第2のインスタンスが異なると判断したことに応答して、初期化された第1のインラインキャッシュと置き換わるように構成された、第1のインラインキャッシュを含む、動的ソフトウェア動作の第2のインスタンス用の第2のインラインキャッシュを初期化するステップと、第2のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成されたメモリ中に、第2のインラインキャッシュを格納するステップと、動的ソフトウェア動作の第1のインスタンスと動的ソフトウェア動作の第2のインスタンスが異なると判断したことに応答して、メモリからの第2のインラインキャッシュを使って、コプロセッサによって動的ソフトウェア動作の第2のインスタンスを実行するステップとをさらに含み得る。
ある態様方法は、第1のインラインキャッシュが動的ソフトウェア動作の第1のインスタンス用に存在するかどうか判断するステップをさらに含んでよく、ここで、動的ソフトウェア動作の第1のインスタンス用の第1のインラインキャッシュをプロセッサによって初期化するステップは、動的ソフトウェア動作の第1のインスタンス用の第1のインラインキャッシュが存在しないと判断したことに応答して、動的ソフトウェア動作の第1のインスタンス用の第1のインラインキャッシュをプロセッサによって初期化するステップを含み得る。
ある態様では、動的ソフトウェア動作の第1のインスタンス用の第1のインラインキャッシュをプロセッサによって初期化するステップは、動的ソフトウェア動作の第1のインスタンスに関する、オブジェクト実装のデータを識別するまで、動的ソフトウェア動作のためのオブジェクト実装を横断するステップと、動的ソフトウェア動作の第1のインスタンスの動的ソフトウェア動作を実行するステップと、動的ソフトウェア動作の第1のインスタンスの結果を戻すステップとを含み得る。
ある態様では、コプロセッサによって動的ソフトウェア動作の第2のインスタンスを実行した結果をプロセッサに戻すステップは、結果をプロセッサに直接戻すステップを含み得る。
ある態様方法では、コプロセッサによって動的ソフトウェア動作の第2のインスタンスを実行した結果を戻すステップは、プロセッサおよびコプロセッサによってアクセス可能なデータキャッシュを通して間接的に、プロセッサに結果を戻すステップを含み得る。
ある態様では、第1のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成されたメモリ中に第1のインラインキャッシュを格納するステップは、プロセッサパイプラインに接続されたインラインキャッシュパイプライン上に配設されたメモリにおいて、プロセッサパイプライン上に配設されたプロセッサから第1のインラインキャッシュを受け取るステップを含んでよく、動的ソフトウェア動作の第2のインスタンスをコプロセッサにおいて受信するステップは、プロセッサパイプラインに接続されたインラインキャッシュパイプライン上に配設されたコプロセッサにおいて、プロセッサパイプライン上に配設されたプロセッサから動的ソフトウェア動作の第2のインスタンスを受信するステップを含んでよく、コプロセッサによって動的ソフトウェア動作の第2のインスタンスを実行した結果を戻すステップは、動的ソフトウェア動作の第2のインスタンスを実行した結果を、インラインキャッシュパイプライン上に配設されたコプロセッサから、インラインキャッシュパイプラインに接続されたプロセッサパイプライン上に配設されたプロセッサに送るステップを含んでよい。
ある態様方法は、コンパイラによって、コプロセッサ用の実行可能動作を生成するステップと、動的ソフトウェア動作の第1のインスタンス用の第1のインラインキャッシュをプロセッサによって初期化すること、第1のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成されたメモリ中に第1のインラインキャッシュを格納すること、動的ソフトウェア動作の第2のインスタンスをコプロセッサ中で受信すること、動的ソフトウェア動作の第1のインスタンスと動的ソフトウェア動作の第2のインスタンスが同じかどうか判断すること、動的ソフトウェア動作の第1のインスタンスと動的ソフトウェア動作の第2のインスタンスが同じであると判断したことに応答して、メモリからの第1のインラインキャッシュを使って、動的ソフトウェア動作の第2のインスタンスをコプロセッサによって実行すること、およびコプロセッサによって動的ソフトウェア動作の第2のインスタンスを実行した結果を戻すことを含み得る動作を実施するための、生成された実行可能動作をコプロセッサに実行させるよう、プロセッサに命令するステップとを含み得る。
ある態様は、互いに通信可能に接続された、プロセッサと、メモリと、コプロセッサとを有するコンピューティングデバイスを含み、プロセッサおよびコプロセッサは、上述した態様方法のうちの1つまたは複数の、動作を実施するためのプロセッサ実行可能命令を有して構成される。
ある態様は、プロセッサおよびコプロセッサに、上述した態様方法のうちの1つまたは複数の、動作を実施させるためのプロセッサ実行可能ソフトウェア命令を記憶した非一時的プロセッサ可読媒体を含む。
ある態様は、上述した態様方法のうちの1つまたは複数の、機能を実施するための手段を有するコンピューティングデバイスを含む。
本明細書に組み込まれ、本明細書の一部を構成している添付の図面は、本発明の例示的な態様を示すものであり、上で与えられた全般的な説明、および下で与えられる詳細な説明とともに、本発明の特徴を説明するのに役立つ。
ある態様による、動的言語でのインラインキャッシュのためのハードウェアアクセラレーションのための、プロセッサパイプラインに取り付けられたインラインキャッシュハードウェアアクセラレータおよびインラインキャッシュメモリを有するコンピューティングデバイスを示す構成要素ブロック図である。 別の態様による、動的言語でのインラインキャッシュのためのハードウェアアクセラレーションのための、プロセッサパイプラインに取り付けられたインラインキャッシュハードウェアアクセラレータおよびインラインキャッシュメモリを有するコンピューティングデバイスを示す構成要素ブロック図である。 ある態様による、動的言語でのインラインキャッシュのためのハードウェアアクセラレーションのための、プロセッサパイプラインに取り付けられたコプロセッサおよびインラインキャッシュメモリを有するコンピューティングデバイスを示す構成要素ブロック図である。 ある態様による、動的言語でのインラインキャッシュのためのハードウェアアクセラレーションのための、プロセッサパイプラインに取り付けられたコプロセッサおよびインラインキャッシュメモリを有するコンピューティングデバイスを示す構成要素ブロック図である。 別の態様による、動的言語でのインラインキャッシュのためのハードウェアアクセラレーションのための、プロセッサパイプラインに取り付けられた機能ユニットおよびインラインキャッシュメモリを有するコンピューティングデバイスを示す構成要素ブロック図である。 ある態様による、動的言語でのインラインキャッシュのためのハードウェアアクセラレーションのための、プロセッサパイプラインに取り付けられたインラインキャッシュメモリを有するコンピューティングデバイスを示す構成要素ブロック図である。 動的言語でのインラインキャッシュのためのハードウェアアクセラレーションを使う、インラインキャッシュコードおよび定数初期化を使用するための態様方法を示すプロセスフロー図である。 動的言語でのインラインキャッシュのための、プロセッサによるインラインキャッシュコードおよび定数の使用のための態様方法を示すプロセスフロー図である。 動的言語でのインラインキャッシュのための、機能ユニットによるインラインキャッシュコードおよび定数の使用のための態様方法を示すプロセスフロー図である。 様々な態様とともに使用するのに適した例示的なモバイルコンピューティングデバイスの構成要素ブロック図である。 様々な態様とともに使用するのに適した例示的なコンピューティングデバイスを示す構成要素ブロック図である。 様々な態様とともに使用するのに適した例示的なサーバデバイスを示す構成要素ブロック図である。
添付の図面を参照して様々な態様について詳細に説明する。可能な場合はどこでも、同じ参照番号は、同じまたは同様の部分を指すように図面全体を通して使用される。特定の例および実装形態へと行われる言及は、説明を目的とし、本発明の範囲または特許請求の範囲を限定するものではない。
「例示的」という言葉は、本明細書では、「例、事例、または例示として役立つ」ことを意味するように使用される。「例示的」として本明細書で説明する任意の実装形態は、必ずしも他の実装形態よりも好ましいか、または有利であると解釈されるべきではない。
「コンピューティングデバイス」という用語は、本明細書において、セルラー電話、スマートフォン、パーソナルまたはモバイルマルチメディアプレーヤー、携帯情報端末(PDA)、ラップトップコンピュータ、タブレットコンピュータ、ファブレット、スマートブック、ウルトラブック、パームトップコンピュータ、ワイヤレス電子メール受信機、マルチメディアインターネット対応セルラー電話、ワイヤレスゲームコントローラ、デスクトップコンピュータ、サーバ、ならびに、メモリおよびプログラム可能プロセッサを含む同様の個人用または商用電子デバイスのうちの、任意の1つまたはすべてを指すために、互換的に使用される。
「システムオンチップ」(SoC)および「集積回路」(IC)という用語は、一般に、限定はしないが、1つまたは複数のハードウェアコア、メモリユニット、および通信インターフェースを含む、相互接続電子回路のセットを指すために、本明細書で互換的に使用される。ハードウェアコアは、汎用プロセッサ、中央処理装置(CPU)、デジタル信号プロセッサ(DSP)、グラフィック処理装置(GPU)、加速処理装置(APU:accelerated processing unit)、補助プロセッサ、シングルコアプロセッサ、およびマルチコアプロセッサなど、様々な異なるタイプのプロセッサを含むことができる。ハードウェアコアはさらに、フィールドプログラマブルゲートアレイ(FPGA)、特定用途向け集積回路(ASCI)、他のプログラマブル論理デバイス、ディスクリートゲートロジック、トランジスタロジック、性能監視ハードウェア(performance monitoring hardware)、監視ハードウェア(watchdog hardware)、および時間基準など、他のハードウェアおよびハードウェアの組合せを具現化することができる。集積回路は、集積回路の構成要素がシリコンなどの単体の半導体材料に存在するように構成され得る。そのような構成は、ICコンポーネントがシングルチップにあると言われることもある。
インラインキャッシングとは、JavaScript(登録商標)、PHP、Python、およびRubyなどの言語のための動的コンパイルをスピードアップするのに使われる技法である。コンパイラ(たとえば、静的コンパイラ、ランタイムコンパイラ、または動的コンパイラ)が、共通する挙動を呈するバイトコードのパターンを識別することができ、実行可能コードを生成するのにコードテンプレートを使うことができる。生成されたコードは、何らかのオブジェクト情報とともにパラメータ化され、インラインキャッシュの中へ記憶され得る。コンパイラは、オブジェクトが、生成されたコードと合致するかどうかを調べるための監視を置き、インラインキャッシュからコードを取り出し、そのコードを呼び出すことができる。インラインキャッシュコードは、同じシーケンスを繰り返し生成する必要をなくし得る。
ただし、インラインキャッシングは、異なる1組のパフォーマンス問題をもたらす。典型的なコンピューティングデバイス(またはコンピューティングシステム)において、インラインキャッシュ項目は依然として、プロセッサによって実行され、メモリ中に記憶される。また、同じインラインキャッシュ項目が、適切なパラメータを使うときに正しい結果を与える可能性があるとき、共通タスクの多くが、様々なオブジェクトについてインラインキャッシュ項目を生成する場合がある。したがって、インラインキャッシング技法は、プロセッサ、メモリおよび/またはパイプラインを乱し、コンピューティングおよび電力リソースを使い果たす場合がある。
様々な態様は、コンピューティングデバイス上の動的言語ソフトウェアの処理速度を増大させるための方法、デバイス、および非一時的プロセッサ可読記憶媒体を含む。動的言語でのインラインキャッシュのためのハードウェアアクセラレーションは、共通タスクについてのインラインキャッシュ項目を管理するのに、専用リソースを使用し、アプリケーションプロセッサ、パイプライン、およびメモリなど、コンピューティングデバイスの典型的な構成要素の負担を取り除くことができる。具体的には、インラインキャッシュハードウェアアクセラレータは、少なくとも何らかの専用メモリおよび何らかの専用処理を含み得る。専用メモリは、個別メモリとして、データキャッシュの一部として、またはシステムメモリの一部として実装されてよい。専用処理は、既存のプロセッサ実行パイプラインに対する拡張として、プロセッサ機能ユニットとして、既存のコプロセッサインターフェースを通してコアプロセッサと通信するコプロセッサとして、または固有インターフェースを通してプロセッサと通信する個別ユニットとして実装されてよい。動的言語でのインラインキャッシュのためのハードウェアアクセラレーションは、いくつかのタスクがハードウェアアクセラレーションに専用であり、他のタスク、おそらく比較的共通しないタスクは、コンピューティングデバイスの典型的な構成要素によって管理され続け得るように、共通インラインキャッシングとともに実装されてよい。
動的言語でのインラインキャッシュのためのハードウェアアクセラレーションのための構成要素は、別個であってよいが、コンピューティングデバイスの典型的な構成要素に接続されてよい。たとえば、コンピューティングデバイスは、プロセッサおよびデータキャッシュなど、他の様々な構成要素の間で信号を送信するためのプロセッサパイプラインを含み得る。動的言語でのインラインキャッシュのためのハードウェアアクセラレーションのための構成要素は、動的言語でのインラインキャッシュのためのハードウェアアクセラレーションのための構成要素に、互いへ、およびコンピューティングデバイスの典型的な構成要素へ信号を送信させるインラインキャッシュパイプラインによって互いに、およびプロセッサパイプラインに接続され得る。この配置により、動的言語でのインラインキャッシュのためのハードウェアアクセラレーションは、典型的な構成要素との通信が必要になるまで、典型的な構成要素の動作を妨げずに動作することができるようになり得る。動的言語でのインラインキャッシュのためのハードウェアアクセラレーションのための構成要素は、典型的な構成要素のうちのいくつかと、接続されたパイプラインを介して直接、または他の典型的な構成要素を通して間接的に通信することができる。
図1は、ある態様による、動的言語でのインラインキャッシュのためのハードウェアアクセラレーションのための、プロセッサパイプラインに取り付けられたインラインキャッシュハードウェアアクセラレータおよびインラインキャッシュメモリを有するコンピューティングデバイスを示す。コンピューティングデバイスは、プロセッサ10、たとえば累算器またはスタックもしくはレジスタファイルを記憶するための、レジスタまたはメモリ12、データキャッシュ14、インラインキャッシュハードウェアアクセラレータ16、インラインキャッシュメモリ18、プロセッサパイプライン20a、20b、20c、およびインラインキャッシュパイプライン22a、22bを含み得る。プロセッサ10は、上述した様々な異なるタイプのプロセッサのうちの1つまたは複数であってよい。プロセッサ10は、コンパイルおよび/または解釈された実行可能動作をソフトウェアプログラムから実行するように構成され得る。ある態様では、ソフトウェアプログラムは、動的プログラミング言語で書かれてよく、実行可能動作は、ランタイムにコンパイルまたは解釈され得る。プロセッサ10は、動的プログラミング言語ソフトウェアプログラムの部分を実行するために、コンピューティングデバイスの他の構成要素を管理し、それらの構成要素と対話するための命令のセットを実行するようにも構成され得る。
メモリ12は、コンピューティングデバイスの様々な状態についての状態値を記憶するように構成され得る。メモリ12中の状態値ストアは、プロセッサ10による読取りおよび書込み動作のためにアクセス可能であり得る。データキャッシュ14は、プロセッサ10によって実行される実行可能動作に関連したデータを記憶するように構成され得る。データキャッシュ14中に記憶されたデータは、実行可能動作を実行するためにプロセッサ10に入力され、または実行された動作の結果、プロセッサ10によって出力され、コンピューティングデバイスの他の構成要素によって後で使うために、またはアクセスするために記憶され得る。プロセッサ10、メモリ12、およびデータキャッシュ14は、プロセッサパイプライン20a、20b、20cによって互いに接続され得る。プロセッサパイプライン20a、20b、20cは、それに接続された構成要素の間で、実行可能動作、コンピューティングデバイス状態、およびソフトウェアプログラムデータを表す信号を送信するように構成され得る。
インラインキャッシュハードウェアアクセラレータ16は、動的プログラミング言語ソフトウェアプログラムからの実行可能動作(または「動的ソフトウェア動作」)を処理する速度を増大させるように構成され得る。インラインキャッシュハードウェアアクセラレータ16の構成については、後でさらに詳しく論じる。インラインキャッシュメモリ18は、データを記憶し、取り出すための高速アクセスを与えるように構成されてよく、プロセッサ10によって実行される動的ソフトウェア動作のインスタンスに関連付けられた定数値を、少なくとも最初は記憶するように構成されてよい。動的ソフトウェア動作用のオブジェクトの同じインスタンスの将来の実行のために定数値が呼び戻され得るように、定数値は、動的ソフトウェア動作を実行するのに使われるオブジェクトの特定のインスタンスに関連付けられ得る。ある態様では、動的ソフトウェア動作は、1つの動作または動作のセットを含む場合があり、したがって、単一の動作および複数の動作への言及は、請求項において明示的に具陳されない限り、実行可能動作の数という点で、請求項の範囲を限定することを意図していない。
インラインキャッシュメモリ18は、この特定目的に専用であってよく、したがって、比較的小型であり高速のメモリであってよく、というのは、定数の記憶はたくさんの空間を必要としない場合があり、インラインキャッシュメモリ18に、読取りおよび書込み動作のためのクイックアクセスを与えると、動的ソフトウェア動作の処理速度の増大を促進する場合があるからである。インラインキャッシュメモリ18へのアクセスは、インラインキャッシュハードウェアアクセラレータ16に限定され得る。ある態様では、インラインキャッシュメモリ18は、インラインキャッシュハードウェアアクセラレータ16の一部として含まれ得る。インラインキャッシュパイプライン22a、22bは、インラインキャッシュハードウェアアクセラレータ16およびインラインキャッシュメモリ18を、プロセッサ10、メモリ12、およびデータキャッシュ14に接続することができる。インラインキャッシュパイプライン22a、22bは、コンピューティングデバイスの他の構成要素に直接接続することができ、またはプロセッサパイプライン20a、20b、20cに接続することができる。インラインキャッシュパイプライン22a、22bは、動的ソフトウェア動作を実行するのに使われるデータ、コンピューティングデバイス状態、および/またはインラインキャッシュメモリ18上に記憶された定数値を含む、動的ソフトウェアの実行から生じたデータを表す信号を送信するように構成され得る。
図2は、ある態様による、動的言語でのインラインキャッシュのためのハードウェアアクセラレーションのための、プロセッサパイプラインに取り付けられたインラインキャッシュハードウェアアクセラレータおよびインラインキャッシュメモリを有するコンピューティングデバイスを示す。図1に示すコンピューティングデバイスと同様、コンピューティングデバイスは、プロセッサ10、レジスタまたはメモリ12、データキャッシュ14、インラインキャッシュハードウェアアクセラレータ16、インラインキャッシュメモリ18、プロセッサパイプライン20a、20b、20c、およびインラインキャッシュパイプライン22a、22bを含み得る。ある態様では、インラインキャッシュメモリ18は、インラインキャッシュハードウェアアクセラレータ16とは別個であってよい。様々な態様では、インラインキャッシュメモリ18は、スタンドアロンメモリ、キャッシュ階層の中に統合されたメモリ、またはコンピューティングデバイスのシステムメモリの一部分であってよい。コンピューティングデバイスは、インラインキャッシュハードウェアアクセラレータ16とインラインキャッシュメモリ18を接続するようにさらに構成されたインラインキャッシュパイプライン22cも含み得る。インラインキャッシュメモリ18は、インラインキャッシュハードウェアアクセラレータ16によって、およびプロセッサ10など、他の構成要素によって、インラインキャッシュハードウェアアクセラレータ16を通してアクセス可能であり得る。
図3は、ある態様による、動的言語でのインラインキャッシュのためのハードウェアアクセラレーションのための、プロセッサパイプラインに取り付けられたコプロセッサおよびインラインキャッシュメモリを有するコンピューティングデバイスを示す。図1に示すコンピューティングデバイスと同様、コンピューティングデバイスは、プロセッサ10、レジスタまたはメモリ12、データキャッシュ14、インラインキャッシュメモリ18、プロセッサパイプライン20a、20b、20c、およびインラインキャッシュパイプライン22a、22bを含み得る。ある態様では、インラインキャッシュハードウェアアクセラレータは、動的ソフトウェア動作を実行するように構成されたコプロセッサ30であってよい。プロセッサ10のようなコプロセッサ30は、上述した様々な異なるタイプのプロセッサのうちの1つまたは複数であってよい。ある態様では、コプロセッサ30は、1つまたは複数の動的ソフトウェア動作を実行するようにプログラムされたプログラム可能論理デバイスであってよい。ある態様では、プログラム可能コプロセッサ30は、異なる動的ソフトウェア動作を実行するように再プログラム可能であり得る。別の態様では、コンピューティングデバイスは、特定の動的ソフトウェア動作を実行するように各々が構成された複数のコプロセッサ30を含み得る。動的ソフトウェア動作は、典型的な実行可能動作であってよく、1つまたは複数のコプロセッサ30は、コンピューティングデバイスのための典型的な動的ソフトウェア動作に基づいて、コンピューティングデバイスに含まれるために設けられ得る。ある態様では、インラインキャッシュメモリ18は、コプロセッサ30の一部として含まれ、および/またはそれに専用であり得る。別の態様では、インラインキャッシュメモリ18は、複数のコプロセッサ30にわたって共有される1つまたは複数のインラインキャッシュメモリ18であってよい。ある態様では、コプロセッサ30は、プロセッサパイプライン20a、20b、20cの機能的拡張として実装され、インラインキャッシュメモリ18を初期化するため、インラインキャッシュメモリ18中に記憶されたコードを実行するため、および動的ソフトウェア動作の第1のインスタンス用のコードの存在をインラインキャッシュメモリ18に問い合わせるための命令を有し
て構成され得る。ある態様では、コプロセッサ30は、標準コプロセッサインターフェースを使ってプロセッサ10と通信するスタンドアロンユニットとして実装され得る。そのような通信は、初期値を転送すること、計算を開始すること、および出力結果を転送することを含み得る。別の態様では、コプロセッサ30は、拡張型インターフェースを使ってプロセッサ10と通信するスタンドアロンユニットとして実装されてよく、プロセッサ10は、コプロセッサ30により多くの情報(たとえば、オブジェクトマップ)を与えることができるようになる。
後でさらに詳しく説明するように、プロセッサ10は、動的ソフトウェア動作のインスタンスに関するデータをコプロセッサ30に渡すことができる。コプロセッサ30は、動的ソフトウェア動作のインスタンスに関する何らかのインラインキャッシュデータがあるかどうか判断することができる。コプロセッサ30が、動的ソフトウェア動作のインスタンスがまだ初期化されていない(すなわち、動的ソフトウェア動作が「初期化解除」されている)と、またはそのインスタンスが動的ソフトウェア動作の第1のインスタンスであると判断すると、コプロセッサ30は、プロセッサ10にシグナリングし、コプロセッサ30が動的ソフトウェア動作のインスタンスを処理することができないことを示してよい。コプロセッサ30は、インラインキャッシュメモリ18中に記憶されたデータを、プロセッサ10から受信されたデータと比較することによって、動的ソフトウェア動作のインスタンスが初期化解除されていると判断してよい。動的ソフトウェア動作のインスタンスについてのデータがインラインキャッシュメモリ18中にないとき、コプロセッサ30は、インスタンスが初期化解除されていると判断してよい。プロセッサ10は、動的ソフトウェア動作のインスタンスを初期化し、インスタンスの結果を定数値としてインラインキャッシュメモリ18へ記憶してよい。
動的ソフトウェア動作のインスタンスについてのデータがインラインキャッシュメモリ18中にあるとき、コプロセッサ30は、インスタンスが初期化されていると判断してよい。コプロセッサ30は次いで、動的ソフトウェア動作のインスタンスについての、インラインキャッシュメモリ18中に記憶されたデータが、インスタンスについての正しいデータであるかどうか判断すればよい。コプロセッサ30は、インラインキャッシュメモリ18中に記憶されたデータを、プロセッサ10から受信されたデータと比較することによって、記憶されたデータが、動的ソフトウェア動作のインスタンスについての正しいデータでないと判断する場合がある。動的ソフトウェア動作のインスタンスについて記憶されたデータが、プロセッサ10によって与えられたデータと一致しないとき、コプロセッサ30は、動的ソフトウェア動作のインスタンスについて記憶されたデータが正しいデータでないと判断してよく、結果として、プロセッサ10にシグナリングし、コプロセッサ30が動的ソフトウェア動作のインスタンスを処理することができないことを示してよい。プロセッサ10は次いで、動的ソフトウェア動作のこのインスタンスを初期化し、インスタンスの結果を別の定数値としてインラインキャッシュメモリ18へ記憶してよい。
動的ソフトウェア動作のインスタンスについての記憶されたデータは、動的ソフトウェア動作のための、オブジェクトマップなど、オブジェクト用の実装の変化により、プロセッサ10から受信されたデータと一致しない場合がある。そのような変化は、オブジェクトのインスタンスを、オブジェクトのインスタンス、または動的ソフトウェア動作のインスタンス向けの機能についての異なる結果を引き起こす異なる値に関連付けることができる。上の初期化解除されたインスタンスと同様、そのような変化により、動的ソフトウェア動作のインスタンスが初期化解除され得る。
動的ソフトウェア動作のインスタンスについてのデータがインラインキャッシュメモリ18中にあり、データが正しいデータであるとき、コプロセッサ30は、動的ソフトウェア動作のインスタンスについての定数値をプロセッサ10に戻してよい。ある態様では、動的ソフトウェア動作についてのインスタンスの上記初期化は、プロセッサ10が、動的ソフトウェア動作についてのインスタンスを、その結果を実装するために通常通り稼動させることを含み得る。いくつかの動的ソフトウェア動作は共通であり、動的ソフトウェア動作の様々なインスタンスが繰り返し呼び出される。多くの場合、動的ソフトウェア動作の同じインスタンスは繰り返し呼び出される。コプロセッサ30は、結果を記憶するのに専用のメモリ(すなわち、インラインキャッシュメモリ18)中に記憶された、所定またはあらかじめ算出された結果を、動的ソフトウェア動作の初期化されたインスタンスに与えることによって、動的ソフトウェア動作の速度を増大させるように構成され得る。
図4は、ある態様による、動的言語でのインラインキャッシュのためのハードウェアアクセラレーションのための、プロセッサパイプラインに取り付けられたコプロセッサおよびインラインキャッシュメモリを有するコンピューティングデバイスを示す。図3に示すコンピューティングデバイスと同様、コンピューティングデバイスは、プロセッサ10、レジスタまたはメモリ12、データキャッシュ14、インラインキャッシュメモリ18、プロセッサパイプライン20a、20b、20c、インラインキャッシュパイプライン22a、22b、およびコプロセッサ30を含み得る。ある態様では、インラインキャッシュメモリ18は、コプロセッサ30とは別個であってよい。コンピューティングデバイスは、図2でのように、コプロセッサ30とインラインキャッシュメモリ18を接続するようにさらに構成されたインラインキャッシュパイプライン22cも含み得る。インラインキャッシュメモリ18は、コプロセッサ30によって、およびプロセッサ10など、他の構成要素によって、コプロセッサ30を通してアクセス可能であり得る。ある態様では、インラインキャッシュメモリ18は、コプロセッサ30に専用であってよい。別の態様では、インラインキャッシュメモリ18は、複数のコプロセッサ30にわたって共有される1つまたは複数のインラインキャッシュメモリ18であってよい。図4に示すコンピューティングデバイスと図3に示すコンピューティングデバイスの構造の違いにかかわらず、コンピューティングデバイスおよびそれらの構成要素の動作はほぼ同様である。
コプロセッサ30を含む態様では、プロセッサ10は、コプロセッサ30と通信するように構成されてよく、プロセッサの命令セットアーキテクチャに対する変更を必要としなくてよい。ある態様では、動的ソフトウェア動作のインスタンスに関連付けられたデータが、プロセッサ10からコプロセッサ30に明示的に渡され得る。別の態様では、コプロセッサ30は、メモリ12およびデータキャッシュ14と直接通信することが可能であり得る。この直接通信により、コプロセッサ30は、動的ソフトウェア動作のインスタンスに関連付けられたそのデータを、プロセッサ10から、メモリ12およびデータキャッシュ14を経由して暗黙的に受信することができるようになり得る。プロセッサ10による、コプロセッサ30に対する関数呼出しは、ブロッキング型呼出しを含むことができ、一度にただ1つの呼出しが扱われ得る。プロセッサ10による、コプロセッサ30に対する関数呼出しは非ブロッキングまたは非同期型呼出しを含むことができ、それにより、インラインキャッシュパイプライン22a、22b、22c中で並行して複数の呼出しが可能になり得る。同様に、プロセッサ10による、コプロセッサ30に対する関数呼出しは並列型呼出しである場合があり、それにより、インラインキャッシュパイプライン22a、22b、22c中で同時に複数の呼出しが可能になり得る。
図5は、ある態様による、動的言語でのインラインキャッシュのためのハードウェアアクセラレーションのための、プロセッサパイプラインに取り付けられた機能ユニットおよびインラインキャッシュメモリを有するコンピューティングデバイスを示す。図2と同様、コンピューティングデバイスは、プロセッサ10、レジスタまたはメモリ12、データキャッシュ14、インラインキャッシュメモリ18、プロセッサパイプライン20a、20b、20c、およびインラインキャッシュパイプライン22a、22bを含み得る。ある態様では、インラインキャッシュハードウェアアクセラレータは、動的ソフトウェア動作を実行するように構成された機能ユニット50であってよい。機能ユニット50は、特定機能または算出を実施するように構成された回路であってよい。たとえば、機能ユニット50は、加算器または乗算器であってよい。1つまたは複数の機能ユニット50が、特定機能または算出を遂行するように組み合わされ得る。複数の機能ユニット50または機能ユニット50のグループは、様々な異なる動的ソフトウェア動作を実装するように構成され得る。機能ユニット50は、プロセッサ10の一体型構成要素であってよい。ある態様では、インラインキャッシュメモリ18は、機能ユニット50とは別個であってよい。コンピューティングデバイスは、機能ユニット50とインラインキャッシュメモリ18を接続するようにさらに構成されたインラインキャッシュパイプラインも含み得る。インラインキャッシュメモリ18は、機能ユニット50、および機能ユニット50を通してプロセッサ10など、他の構成要素によってアクセス可能であり得る。ある態様では、インラインキャッシュメモリ18は、機能ユニット50に専用であってよい。別の態様では、インラインキャッシュメモリ18は、複数の機能ユニット50にわたって共有される1つまたは複数のインラインキャッシュメモリ18であってよい。
後でさらに詳しく説明するように、プロセッサ10は、コプロセッサが上の説明における判断をどのように行うかと同様、動的ソフトウェア動作のインスタンスが初期化されるか、それとも初期化解除されるか判断することができる。動的ソフトウェア動作のインスタンスが初期化解除されると、プロセッサ10は、動的ソフトウェア動作のインスタンスを実行して、結果を判断することができる。プロセッサ10は、インラインキャッシュメモリ18上での動的ソフトウェア動作の実行されたインスタンスの結果を、動的ソフトウェア動作のインスタンスが初期化され得るように記憶してよい。プロセッサ10が、動的ソフトウェア動作のインスタンスが初期化されると判断すると、プロセッサ10は、動的ソフトウェア動作の初期化されたインスタンスに関するデータを、1つまたは複数の選択された機能ユニット50に渡してよい。プロセッサ10によって選択された機能ユニット50は、プロセッサ10によって受信された動的ソフトウェア動作を実行するように特に構成され得る。プロセッサ10は、動的ソフトウェア動作を適切な機能ユニット50と突き合わせ、適切なデータを選択された機能ユニット50に渡せばよい。機能ユニット50は、インラインキャッシュメモリ18上に記憶された動的ソフトウェア動作のインスタンスに関するインラインキャッシュデータを判断するように、プロセッサ10からのデータを使って動作し得る。機能ユニット50は、プロセッサ10からのデータを使い、機能ユニット50が実装するように構成されている動的ソフトウェア動作を実行することができる。動的ソフトウェア動作の初期化されたインスタンスの結果は、インラインキャッシュメモリ18上に記憶された定数値であってよく、動的ソフトウェア動作のインスタンスの実行を完了するために、プロセッサ10に渡され得る。
機能ユニット50を含む態様では、プロセッサ10は、機能ユニット50と通信するように構成されてもされなくてもよく、プロセッサの命令セットアーキテクチャに対する変更を必要とする場合もしない場合もある。ある態様では、動的ソフトウェア動作のインスタンスに関連付けられたデータが、プロセッサ10から機能ユニット50に明示的に渡され得る。別の態様では、機能ユニット50は、メモリ12およびデータキャッシュ14と直接通信することが可能であり得る。この直接通信により、機能ユニット50は、動的ソフトウェア動作のインスタンスに関連付けられたそのデータを、プロセッサ10から、メモリ12およびデータキャッシュ14を経由して暗黙的に受信することができるようになり得る。プロセッサ10による、機能ユニット50に対する関数呼出しは、ブロッキング型呼出しを含むことができ、一度にただ1つの呼出しが扱われ得る。プロセッサ10による、機能ユニット50に対する関数呼出しは非ブロッキングまたは非同期型呼出しを含むことができ、それにより、インラインキャッシュパイプライン22a、22b中で並行して複数の呼出しが可能になり得る。同様に、プロセッサ10による、機能ユニット50に対する関数呼出しは並列型呼出しである場合があり、それにより、インラインキャッシュパイプライン22a、22b中で同時に複数の呼出しが可能になり得る。
図6は、ある態様による、動的言語でのインラインキャッシュのためのハードウェアアクセラレーションのための、プロセッサパイプラインに取り付けられたインラインキャッシュメモリを有するコンピューティングデバイスを示す。図1に示すコンピューティングデバイスと同様、コンピューティングデバイスは、プロセッサ10、レジスタまたはメモリ12、データキャッシュ14、インラインキャッシュメモリ18、プロセッサパイプライン20a、20b、20c、およびインラインキャッシュパイプライン22aを含み得る。ある態様では、インラインキャッシュハードウェアアクセラレータは、動的ソフトウェア動作のインスタンスの結果を記憶するように構成されたインラインキャッシュメモリ18であってよい。ある態様では、インラインキャッシュメモリ18は、動的ソフトウェア動作の複数のインスタンス用に共有される1つまたは複数のインラインキャッシュメモリ18であってよく、1つもしくは複数のインラインキャッシュメモリ18は各々、同じ動的ソフトウェア動作の複数のインスタンスを記憶するのに専用であるか、または1つのインラインキャッシュメモリ18は、動的ソフトウェア動作すべてのインスタンスすべてを記憶するのに専用である。
後でさらに詳しく説明するように、プロセッサ10は、上で説明した判断をコプロセッサがどのように行うかと同様、動的ソフトウェア動作のインスタンスが初期化されるか、それとも初期化解除されるか判断することができる。動的ソフトウェア動作のインスタンスが初期化解除されると、プロセッサ10は、動的ソフトウェア動作のインスタンスを実行して、結果を判断することができる。プロセッサ10は、インラインキャッシュメモリ18上での動的ソフトウェア動作の実行されたインスタンスの結果を、動的ソフトウェア動作のインスタンスが初期化され得るように記憶してよい。プロセッサ10が、動的ソフトウェア動作のインスタンスが初期化されると判断すると、プロセッサ10は、動的ソフトウェア動作の初期化されたインスタンスについての、インラインキャッシュメモリ18上に記憶されたデータを、動作が初期化解除された場合にそうであるように、動作を完全に実行する必要なく、取り出すことができる。
前述の態様コンピューティングデバイスの各々において、プロセッサ10、レジスタまたはメモリ12、データキャッシュ14、インラインキャッシュハードウェアアクセラレータ16、インラインキャッシュメモリ18、プロセッサパイプライン20a、20b、20c、インラインキャッシュパイプライン22a、22b、22cおよびコプロセッサ30、ならびに機能ユニット50を含む構成要素は、様々な組合せで構成されてよい。構成要素の一部または全部は、個々の、または組み合わされた構成要素を備え得る。同様に、構成要素の一部または全部は、SoCまたは1つもしくは複数の集積回路の一部として含まれてよい。
図7は、動的言語でのインラインキャッシュのためのハードウェアアクセラレーションを使う、インラインキャッシュコードおよび定数初期化のための態様方法700を示す。コンピューティングデバイスならびにプロセッサ、レジスタまたはレジスタファイル用メモリ、データキャッシュ、インラインキャッシュハードウェアアクセラレータ、インラインキャッシュメモリ、プロセッサパイプライン、インラインキャッシュパイプライン、コプロセッサ、および機能ユニットを含む、コンピューティングデバイスの構成要素が、方法700を実行し得る。ブロック702において、コンピューティングデバイスは、動的言語実行可能プログラムを稼動させることができる。ある態様では、動的言語実行可能プログラムは、ウェブブラウザ、ウェブアプリケーション、またはスタンドアロンアプリケーションにおいて稼動され得る。ブロック704において、コンピューティングデバイスは、オブジェクト向けの機能、または動的ソフトウェア動作のインスタンスを実装することができる。データのロード、データの記憶、いくつかの機能の呼出し、およびデータに対するバイナリ動作の実施など、共通の動的ソフトウェア動作は、ハードウェアアクセラレーションのために含まれ得る動的ソフトウェア動作のタイプであり得る。ブロック706において、コンパイラ(たとえば、静的コンパイラ、ランタイムコンパイラ、または動的コンパイラ)が、プロセッサが、プロセッサまたはコプロセッサに、動的ソフトウェア動作のインスタンスのためにインラインキャッシュハードウェアアクセラレータと対話し、インラインキャッシュハードウェアアクセラレータを稼動させるよう命令するための実行可能命令を生成し得る。これらの命令は、プロセッサまたはコプロセッサに、直接またはインラインキャッシュハードウェアアクセラレータを通して、インラインキャッシュメモリから読取りおよび書込みを行わせ、インラインキャッシュハードウェアアクセラレータを、以下で説明するように機能させることができる。
判断ブロック708において、コンピューティングデバイスは、コンピューティングデバイスが、オブジェクト向けの機能、または動的ソフトウェア動作のインスタンスを前に稼動したことがあるかどうか判断することができる。ある態様では、コンピューティングデバイスは、これを、動的ソフトウェア動作のインスタンスに関連した、記憶されたデータについて、インラインキャッシュメモリを調べることによって遂行し得る。インラインキャッシュメモリ上の、動的ソフトウェア動作のインスタンスに関連したデータの判断された存在は、動的ソフトウェア動作のインスタンスが初期化されてよいことを、コンピューティングデバイスに対して知らせ得る。ただし、動的ソフトウェア動作が初期化されるという判断は、後で論じるさらなる判断なしでは、確かでない場合がある。たとえば、動的ソフトウェア動作のインスタンスに関連したデータは、記憶されていてよく、したがって、動的ソフトウェア動作の先行インスタンスが初期化されたが、データは現行でない場合があることを知らせ得る。
コンピューティングデバイスが、動的ソフトウェア動作のインスタンスが前に稼動されたと判断すると(すなわち、判断ブロック708=「Yes」)、コンピューティングデバイスは、判断ブロック710において、動的ソフトウェア動作のインスタンス向けのオブジェクト実装が変わったかどうか判断すればよい。動的ソフトウェア動作のインスタンスのオブジェクト実装が変わったかどうかの判断は、動的ソフトウェア動作のインスタンスについての、インラインキャッシュメモリ中に記憶されたデータが現行データであるかどうかを、コンピューティングデバイスに対して示し得る。コンピューティングデバイスが、動的ソフトウェア動作のインスタンス向けのオブジェクト実装が変わっていないと判断すると(すなわち、判断ブロック710=「No」)、コンピューティングデバイスは、ブロック712において、インラインキャッシュメモリ上に記憶された、動的ソフトウェア動作のインスタンスについての値をルックアップしてよい。動的ソフトウェア動作のインスタンスについて、データがインラインキャッシュメモリ中に存在し、データが現行であるという判断はともに、動的ソフトウェア動作のインスタンスが初期化されることを、コンピューティングデバイスに対して知らせ得る。ブロック722において、コンピューティングデバイスは、動的ソフトウェア動作の一部としてプロセッサによって要求された、インラインキャッシュメモリからのデータに対するどの動作も実行することができる。ブロック724において、コンピューティングデバイスは、動的ソフトウェア動作のインスタンスに関連したデータをプロセッサに戻せばよい。データは、直接、またはレジスタファイル用メモリおよび/もしくはデータキャッシュを通して間接的に、プロセッサに戻され得る。
コンピューティングデバイスが、動的ソフトウェア動作のインスタンスが前に稼動されなかったと判断すると(すなわち、判断ブロック708=「No」)、またはコンピューティングデバイスが、動的ソフトウェア動作のインスタンス向けのオブジェクト実装が変わったと判断すると(すなわち、判断ブロック710=「Yes」)、コンピューティングデバイスは、ブロック714において、動作のためのオブジェクト実装における、動作についての関連フィールドをルックアップすればよい。プロセッサが、動作用のオブジェクト値に関連付けられた適切なフィールドを見つけるまで、オブジェクト実装を項目ごとに横断するのが一般的であり得る。このプロセスは、時間がかかり、リソースを消費する場合があり、適切な値のインラインキャッシングは、動的ソフトウェア動作の将来のインスタンスのために、このステップの繰返しを避けるのを助ける。ハードウェアアクセラレーションは、この作業を、ハードウェアキャッシングに関与する処理の一部をプロセッサから引き受け、インラインハードウェアアクセラレータに割り当てることによって、またはインラインキャッシュ済みデータの記憶および取出しを簡素化することによって進める。
判断ブロック716において、コンピューティングデバイスは、インラインキャッシュデータが動的ソフトウェア動作のインスタンスについて存在するかどうか判断することができる。これが可能なのは、動的ソフトウェア動作の、前のインスタンスが初期化されている可能性があるが、動的動作のインスタンスについての現行データは、前に初期化されたインスタンスのものと合致しない可能性があるからである。コンピューティングデバイスが、インラインキャッシュデータが動的ソフトウェア動作のインスタンスについて存在しないと判断すると(すなわち、判断ブロック716=「No」)、コンピューティングデバイスは、ブロック718において、動的ソフトウェア動作のインスタンスについてのインラインキャッシュデータを作成し、または初期化してよい。コンピューティングデバイスは、ブロック722へと続き、動的ソフトウェア動作のインスタンスの一部として、プロセッサによって要求された、データに対するどの動作も実行することができ、ブロック724の動作を実施して、インスタンスの結果を戻せばよい。
コンピューティングデバイスが、インラインキャッシュデータが動的ソフトウェア動作のインスタンスについて存在すると判断すると(すなわち、判断ブロック716=「Yes」)、コンピューティングデバイスは、ブロック720において、前のインスタンスについてのインラインキャッシュデータを含む、動的ソフトウェア動作のインスタンスについてのインラインキャッシュデータを作成または初期化してよい。たとえば、コンピューティングデバイスは、動的ソフトウェア動作の第1のインスタンスと動的ソフトウェア動作の第2のインスタンスが異なるとき、初期化された第1のインラインキャッシュと置き換わるように構成された、第1のインラインキャッシュを含む第2のインラインキャッシュを初期化してよい。コンピューティングデバイスは、ブロック722へと続き、動的ソフトウェア動作のインスタンスの一部として、プロセッサによって要求された、データに対するどの動作も実行することができ、ブロック724の動作を実施して、インスタンスの結果を戻せばよい。
様々な態様では、インラインキャッシュは、複数の割振りおよび置換えポリシーを有し得る。たとえば、ブロック718および720において、コンピューティングデバイスは、動的ソフトウェア動作のすべてのインスタンスについてのインラインキャッシュデータを初期化しなくてもよい。たとえば、インラインキャッシュデータは、動的ソフトウェア動作の第2の実行の後でのみ初期化され得る。様々なメトリックによる実行の頻度、時間および/もしくはリソースの点での実行の複雑さおよび/もしくはコスト、または稼動中のプログラムもしくはアプリケーションによる動作など、他の指定された基準は、動的ソフトウェア動作用に、インラインキャッシュデータがいつ初期化されてよいかを決定し得る。ある態様では、初期化されたインラインキャッシュデータは、様々な理由により、削除されるか、または初期化解除されてよい。たとえば、インラインキャッシュデータは、最も長時間使われていない、最もまれにしか使われていない、先入れ先出し、後入れ先出し、および古さなど、従来のポリシーによって、インラインキャッシュからの動作で、明示的に退去させられ得る。最も複雑でないおよび/もしくはコストがかからない、または最もインラインであるキャッシュメモリの使用など、他の基準も、インラインキャッシュデータを削除する要因になり得る。いくつかの態様では、インラインキャッシュメモリの性能または空間可用性が、インラインキャッシュデータがいつ削除を検討され得るかを決定し得る。初期化し、または初期化解除するためのいくつかの基準は、動的ソフトウェア動作についてのインラインキャッシュデータを初期化するか、それとも初期化解除するか判断する際、現行および/または履歴データを考慮し得る。削除されたインラインキャッシュデータは、記載した基準のうちのいずれかに従って再度初期化されてよく、他の、可能性としてはまだ初期化されていないインラインキャッシュデータよりも厳しい基準を満たすことを求められる場合があり、または少なくとも一定の期間、もしくは特定のイベントが起こるまで、初期化するのを防止され得る。たとえば、削除されたインラインキャッシュデータは、プログラムの次の稼動まで、もしくはコンピューティングデバイスのリブート時のように、インラインキャッシングがリセットされるまで、再度初期化するのを防止され得る。
図8は、動的言語でのインラインキャッシュのための、プロセッサによるインラインキャッシュコードおよび定数の使用のための態様方法800を示す。コンピューティングデバイスならびにプロセッサ、レジスタまたはレジスタファイル用メモリ、データキャッシュ、インラインキャッシュハードウェアアクセラレータ、インラインキャッシュメモリ、プロセッサパイプライン、インラインキャッシュパイプライン、コプロセッサ、および機能ユニットを含む、コンピューティングデバイスの構成要素が、方法800を実行し得る。ブロック802において、コンピューティングデバイスは、オブジェクトのインスタンス向けの関数呼出し、または動的ソフトウェア動作のインスタンスを受信し得る。判断ブロック804において、コンピューティングデバイスは、受信データが、たとえば小さい整数ではなくオブジェクトであるかどうか判断することができる。コンピューティングデバイスが、受信データがオブジェクトではないと判断すると(すなわち、判断ブロック804=「No」)、コンピューティングデバイスは、ブロック816において、関数呼出しの制御をプロセッサに戻せばよい。
コンピューティングデバイスが、受信データがオブジェクトであると判断すると(すなわち、判断ブロック804=「Yes」)、コンピューティングデバイスは、ブロック806において、動的ソフトウェア動作のインスタンス用の現行オブジェクト実装をロードしてよい。ブロック808において、コンピューティングデバイスは、動的ソフトウェア動作のインスタンス用の、予期されるオブジェクト実装をロードすることができる。予期されるオブジェクト実装は、動的ソフトウェア動作の、前のインスタンスを初期化するのに使われるオブジェクト実装であり得る。判断ブロック810において、コンピューティングデバイスは、現行オブジェクト実装と、予期されるオブジェクト実装が同じオブジェクト実装であるかどうか判断することができる。この判断は、インラインキャッシュ中のコードが生成されたとき、現行オブジェクトの符号化を、インラインキャッシュで記憶されたオブジェクトの符号化と比較することによって行われ得る。この符号化は、オブジェクトプロトタイプのアドレス、もしくはオブジェクトフィールドの符号化、またはオブジェクトの構造を一意に識別することができる他のどの機構であってもよい。オブジェクト実装は、動的ソフトウェア動作のインスタンスの初期化の後に変わることが可能であってよく、その結果は、動的ソフトウェア動作の現行インスタンス用のオブジェクト実装からのデータが、前のインスタンスからのデータとはもはや一致しない場合があることになり得る。動的ソフトウェア動作の、前のインスタンスに基づいて間違ったデータを戻すと、動的ソフトウェアの実行においてエラーを引き起こし得る。コンピューティングデバイスが、現行オブジェクト実装と、予期されるオブジェクト実装が異なると判断すると(すなわち、判断ブロック810=「No」)、コンピューティングデバイスは、ブロック816において、関数呼出しの制御をプロセッサに戻せばよい。
コンピューティングデバイスが、現行オブジェクト実装と、予期されるオブジェクト実装が同じであると判断すると(すなわち、判断ブロック810=「Yes」)、コンピューティングデバイスは、ブロック812において、インラインキャッシュデータを取り出してよい。ブロック814において、コンピューティングデバイスは、動的ソフトウェア動作のインスタンスに関連したデータをプロセッサに戻せばよい。データは、直接、またはレジスタファイル用メモリおよび/もしくはデータキャッシュを通して間接的に、プロセッサに戻され得る。
図9は、動的言語でのインラインキャッシュのための、機能ユニットによるインラインキャッシュコードおよび定数の使用のための態様方法900を示す。コンピューティングデバイスならびにプロセッサ、レジスタまたはレジスタファイル用メモリ、データキャッシュ、インラインキャッシュハードウェアアクセラレータ、インラインキャッシュメモリ、プロセッサパイプライン、インラインキャッシュパイプライン、コプロセッサ、および機能ユニットを含む、コンピューティングデバイスの構成要素が、方法900を実行し得る。ブロック902において、コンピューティングデバイスは、オブジェクトタイプをロードすることができる。オブジェクトタイプは、コンピューティングデバイスに対して、どのような動的ソフトウェア動作が稼動中であるかを示すことができる。ブロック904において、コンピューティングデバイスは、オブジェクト識別子をロードすることができる。オブジェクト識別子は、コンピューティングデバイスに対して、動的ソフトウェア動作の特定インスタンスが稼動中であることを示すことができ、たとえば、入力値を含む。インスタンスからの情報を使って、ブロック906において、コンピューティングデバイスは、動的ソフトウェア動作のインスタンス用のインラインキャッシュデータをロードすることができる。ブロック908において、コンピューティングデバイスは、インスタンス用のデータに対して動的ソフトウェア動作を実行することができる。コンピューティングデバイスは、オブジェクトタイプ、オブジェクト識別子、およびインラインキャッシュデータを、動的ソフトウェア動作を実行するためのパラメータとして使うことができる。ブロック910において、コンピューティングデバイスは、動的ソフトウェア動作のインスタンスに関連したデータをプロセッサに戻せばよい。データは、直接、またはレジスタファイル用メモリおよび/もしくはデータキャッシュを通して間接的に、プロセッサに戻され得る。
図10は、様々な態様とともに使用するのに適した例示的なモバイルコンピューティングデバイスを示す。モバイルコンピューティングデバイス1000は、タッチスクリーンコントローラ1004および内部メモリ1006に結合されたプロセッサ1002を含む場合がある。プロセッサ1002は、汎用または特定の処理タスクに指定された1つまたは複数のマルチコア集積回路であり得る。内部メモリ1006は揮発性または不揮発性メモリであってよく、また、セキュアおよび/もしくは暗号化メモリであっても、または非セキュアおよび/もしくは非暗号化メモリであっても、あるいはそれらの任意の組合せであってもよい。タッチスクリーンコントローラ1004およびプロセッサ1002は、抵抗感知タッチスクリーン、容量感知タッチスクリーン、赤外線感知タッチスクリーンなどの、タッチスクリーンパネル1012に結合される場合もある。加えて、モバイルコンピューティングデバイス1000のディスプレイは、タッチスクリーン機能を有する必要はない。
モバイルコンピューティングデバイス1000は、互いに結合され、かつ/またはプロセッサ1002に結合された、通信を送信および受信するための1つまたは複数の無線信号トランシーバ1008(たとえば、Peanut、Bluetooth(登録商標)、Zigbee、Wi-Fi、RF無線)と、アンテナ1010とを有する場合がある。トランシーバ1008およびアンテナ1010は、様々なワイヤレス送信のプロトコルスタックおよびインターフェースを実装するために、上述の回路とともに使用される場合がある。モバイルコンピューティングデバイス1000は、セルラーネットワークを介する通信を可能にし、プロセッサに結合されたセルラーネットワークワイヤレスモデムチップ1016を含む場合がある。
モバイルコンピューティングデバイス1000は、プロセッサ1002に結合された周辺デバイス接続インターフェース1018を含む場合がある。周辺デバイス接続インターフェース1018は、1つのタイプの接続を受け入れるように単独で構成される場合があるか、または、USB、FireWire、Thunderbolt、もしくはPCIeなどの様々なタイプの物理接続および通信接続を共通もしくはプロプライエタリに受け入れるように、構成される場合がある。周辺デバイス接続インターフェース1018は、同様に構成された周辺デバイス接続ポート(図示せず)に結合される場合もある。
モバイルコンピューティングデバイス1000は、オーディオ出力を提供するためのスピーカー1014を含む場合もある。モバイルコンピューティングデバイス1000は、本明細書で論じられた構成要素のすべてまたはいくつかを収容するための、プラスチック、金属、または材料の組合せから構築された筐体1020を含む場合もある。モバイルコンピューティングデバイス1000は、使い捨てまたは充電可能なバッテリーなどの、プロセッサ1002に結合された電源1022を含む場合もある。充電可能なバッテリーは、モバイルデバイス1000の外部にある電源から充電電流を受けるために、周辺デバイス接続ポートに結合される場合もある。モバイルコンピューティングデバイス1000は、ユーザ入力を受け取るための物理ボタン1024を含む場合もある。モバイルコンピューティングデバイス1000は、モバイルデバイス1000をオンオフするための電源ボタン1026を含む場合もある。
上述の様々な態様はまた、図11に示すラップトップコンピューティングデバイス1100などの様々な他のタイプのコンピューティングデバイス内に実装される場合がある。多くのラップトップコンピュータは、コンピュータのポインティングデバイスとして働くタッチパッドのタッチ面1117を含み、したがって、タッチスクリーンディスプレイを装備した上述のコンピューティングデバイス上で実装されるものと同様のドラッグジェスチャ、スクロールジェスチャ、およびフリックジェスチャを受け取ることができる。ラップトップコンピューティングデバイス1100は通常、揮発性メモリ1112、およびフラッシュメモリのディスクドライブ1113などの大容量不揮発性メモリに結合されたプロセッサ1111を含む。加えて、コンピューティングデバイスデバイス1100は、プロセッサ1111に結合されたワイヤレスデータリンクおよび/またはセルラー電話トランシーバ1116に接続できる、電磁放射を送受信するための1つまたは複数のアンテナ1108を有することができる。コンピューティングデバイス1100は、プロセッサ1111に結合されたフロッピーディスクドライブ1114およびコンパクトディスク(CD)ドライブ1115を含む場合もある。ノートブック構成では、コンピューティングデバイスの筐体は、すべてがプロセッサ1111に結合された、タッチパッド1117、キーボード1118、およびディスプレイ1119を含む。コンピューティングデバイスの他の構成には、よく知られているように、(たとえば、USB入力を介して)プロセッサに結合されたコンピュータマウスまたはトラックボールが含まれ得、それらは様々な態様と連携して使用される場合もある。デスクトップコンピュータも同様に、1つまたは複数の別個であるが接続可能な部分において構成要素を分離および結合することを含む、様々な構成によるこれらのコンピューティングデバイス構成要素を含むことができる。
様々な実施形態はまた、図12に示されるサーバ1200などの、種々の市販のサーバデバイスのいずれでも実装され得る。そのようなサーバ1200は通常、揮発性メモリ1202と、ディスクドライブ1204のような大容量の不揮発性メモリとに結合された、プロセッサ1201を含む。サーバ1200はまた、プロセッサ1201に結合されたフロッピーディスクドライブ、コンパクトディスク(CD)またはDVDディスクドライブ1206を含み得る。サーバ1200はまた、他のブロードキャストシステムコンピュータおよびサーバに結合されたローカルエリアネットワーク、インターネット、公衆交換電話網、ならびに/またはセルラーデータネットワーク(たとえば、CDMA、TDMA、GSM(登録商標)、PCS、3G、4G、LTE、もしくは任意の他のタイプのセルラーデータネットワーク)など、ネットワーク1205とのネットワークインターフェース接続を確立するための、プロセッサ1201に結合されたネットワークアクセスポート1203を含み得る。
上記の方法の説明およびプロセスフロー図は、単に説明のための例として提供され、様々な態様の操作が提示された順序で実施されなければならないことを要求または暗示するものではない。当業者には理解されるように、上記の態様における操作の順序は、任意の順序でも実施することができる。「その後」、「次いで」、「次に」などのような語は、動作の順序を限定するものではなく、これらの語は単に、本方法の説明を通して読者を導くために使用される。さらに、特許請求要素に対して単数形で行われるいかなる言及も、その要素を単数に限定するものとして解釈すべきではない。
様々な態様に関して説明した様々な例示的な論理ブロック、モジュール、回路およびアルゴリズム動作は、電子ハードウェア、コンピュータソフトウェア、または両方の組合せとして実装され得る。ハードウェアおよびソフトウェアのこの互換性を明確に示すために、様々な例示的な構成要素、ブロック、モジュール、回路および動作について、概してそれらの機能性に関して上記で説明してきた。そのような機能性がハードウェアとして実装されるか、それともソフトウェアとして実装されるかは、特定の適用例および全体的なシステムに課された設計制約で決まる。当業者は、説明した機能性を特定の適用例ごとに様々な方式で実装し得るが、そのような実装決定は、本発明の範囲からの逸脱を引き起こすと解釈されるべきではない。
本明細書に開示された態様に関して記載された様々な例示的な論理、論理ブロック、モジュール、および回路を実装するために使用されるハードウェアは、汎用プロセッサ、デジタル信号プロセッサ(DSP)、特定用途向け集積回路(ASIC)、フィールドプログラマブルゲートアレイ(FPGA)もしくは他のプログラマブル論理デバイス、個別ゲートもしくはトランジスタ論理、個別のハードウェア構成要素、または、本明細書に記載された機能を実施するように設計されたそれらの任意の組合せで、実装または実施され得る。汎用プロセッサはマイクロプロセッサであり得るが、代替として、プロセッサは、任意の従来型プロセッサ、コントローラ、マイクロコントローラ、または状態機械であり得る。プロセッサは、コンピューティングデバイスの組合せ、たとえばDSPとマイクロプロセッサの組合せ、複数のマイクロプロセッサ、DSPコアと連結した1つもしくは複数のマイクロプロセッサ、または任意の他のそのような構成として実装されてもよい。代替として、いくつかの動作または方法は、所与の機能に固有の回路によって実施され得る。
1つまたは複数の態様では、記載の機能は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せで実装され得る。ソフトウェアで実装される場合、機能は、非一時的コンピュータ可読媒体上または非一時的プロセッサ可読媒体上の1つまたは複数の命令、動作、またはコードとして記憶されてもよい。本明細書で開示する方法またはアルゴリズムの動作は、非一時的コンピュータ可読記憶媒体またはプロセッサ可読記憶媒体上に常駐することができるプロセッサ実行可能命令または動作を含むプロセッサ実行可能ソフトウェアモジュールにおいて具体化され得る。非一時的なコンピュータ可読記憶媒体またはプロセッサ可読記憶媒体は、コンピュータまたはプロセッサによってアクセスされ得る任意の記憶媒体であり得る。限定ではなく例として、そのような非一時的コンピュータ可読媒体またはプロセッサ可読媒体は、RAM、ROM、EEPROM、FLASHメモリ、CD-ROMもしくは他の光ディスクストレージ、磁気ディスクストレージもしくは他の磁気記憶デバイス、または命令、動作、もしくはデータ構造の形態で所望のプログラムコードを記憶するために使用され得、コンピュータによってアクセスされ得る任意の他の媒体を含む場合がある。本明細書で使用する場合、ディスク(disk)およびディスク(disc)は、コンパクトディスク(CD)、レーザーディスク(登録商標)、光ディスク、デジタル多用途ディスク(DVD)、フロッピーディスク、およびブルーレイディスクを含み、ディスク(disk)は、通常、磁気的にデータを再生するが、ディスク(disc)は、レーザーで光学的にデータを再生する。上記の組合せも、非一時的コンピュータ可読媒体およびプロセッサ可読媒体の範囲内に含まれる。加えて、方法またはアルゴリズムの動作は、コンピュータプログラム製品に組み込まれる場合がある、非一時的プロセッサ可読媒体および/またはコンピュータ可読媒体上のコード、命令、および/または動作の1つまたは任意の組合せまたはセットとして存在する場合がある。
開示された態様の上記の説明は、任意の当業者が本発明を作成または使用することができるように提供される。これらの態様に対する様々な修正は、当業者には容易に明らかであり、本明細書で定義された一般的な原理は、本発明の要旨または範囲から逸脱することなく、他の態様に適用される場合がある。したがって、本発明は、本明細書に示された態様に限定されるものではなく、以下の特許請求の範囲、ならびに、本明細書で開示された原理および新規の特徴と一致する最も広い範囲を与えられるべきである。
10 プロセッサ
12 レジスタ、メモリ
14 データキャッシュ
16 インラインキャッシュハードウェアアクセラレータ
18 インラインキャッシュメモリ
20a プロセッサパイプライン
20b プロセッサパイプライン
20c プロセッサパイプライン
22a インラインキャッシュパイプライン
22b インラインキャッシュパイプライン
22c インラインキャッシュパイプライン
30 コプロセッサ
50 機能ユニット
1000 モバイルコンピューティングデバイス、モバイルデバイス
1002 プロセッサ
1004 タッチスクリーンコントローラ
1006 内部メモリ
1008 無線信号トランシーバ、トランシーバ
1010 アンテナ
1012 タッチスクリーンパネル
1014 スピーカー
1016 セルラーネットワークワイヤレスモデムチップ
1018 周辺デバイス接続インターフェース
1020 筐体
1022 電源
1024 物理ボタン
1026 電源ボタン
1100 ラップトップコンピューティングデバイス
1108 アンテナ
1111 プロセッサ
1112 揮発性メモリ
1113 ディスクドライブ
1114 フロッピーディスクドライブ
1115 コンパクトディスク(CD)ドライブ
1116 ワイヤレスデータリンク、セルラー電話トランシーバ
1117 タッチ面、タッチパッド
1118 キーボード
1119 ディスプレイ
1200 サーバ
1201 プロセッサ
1202 揮発性メモリ
1203 ネットワークアクセスポート
1204 ディスクドライブ
1205 ネットワーク
1206 フロッピーディスクドライブ、コンパクトディスク(CD)またはDVDディスクドライブ

Claims (30)

  1. コンピューティングデバイス上の動的言語ソフトウェアの処理速度を増大させるための方法であって、
    動的ソフトウェア動作の第1のインスタンス用の第1のインラインキャッシュをプロセッサによって初期化するステップと、
    前記第1のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成されたメモリ中に、前記第1のインラインキャッシュを格納するステップと、
    コプロセッサ中で、前記動的ソフトウェア動作の第2のインスタンスを受信するステップと、
    前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうかを、前記コプロセッサによって判断するステップと、
    前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じであると判断したことに応答して、前記メモリからの前記第1のインラインキャッシュを使って、前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサによって実行するステップと、
    前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサによって実行した結果を前記プロセッサに戻すステップとを含む方法。
  2. 前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうか判断するステップは、
    前記動的ソフトウェア動作の前記第1のインスタンスに関連した第1のオブジェクト実装を、前記動的ソフトウェア動作の前記第2のインスタンスに関連した第2のオブジェクト実装と比較するステップと、
    前記第1のオブジェクト実装と前記第2のオブジェクト実装が同じであるかどうか判断するステップとを含む、請求項1に記載の方法。
  3. 前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが異なると判断したことに応答して、前記初期化された第1のインラインキャッシュと置き換わるように構成された、前記第1のインラインキャッシュを含む、前記動的ソフトウェア動作の前記第2のインスタンス用の第2のインラインキャッシュを初期化するステップと、
    前記第2のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成された前記メモリ中に、前記第2のインラインキャッシュを格納するステップと、
    前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが異なると判断したことに応答して、前記メモリからの前記第2のインラインキャッシュを使って、前記コプロセッサによって前記動的ソフトウェア動作の前記第2のインスタンスを実行するステップとをさらに含む、請求項1に記載の方法。
  4. 前記第1のインラインキャッシュが前記動的ソフトウェア動作の前記第1のインスタンス用に存在するかどうか判断するステップをさらに含み、前記動的ソフトウェア動作の前記第1のインスタンス用の前記第1のインラインキャッシュを前記プロセッサによって初期化するステップは、前記動的ソフトウェア動作の前記第1のインスタンス用の前記第1のインラインキャッシュが存在しないと判断したことに応答して、前記動的ソフトウェア動作の前記第1のインスタンス用の前記第1のインラインキャッシュを前記プロセッサによって初期化するステップを含む、請求項1に記載の方法。
  5. 前記動的ソフトウェア動作の前記第1のインスタンス用の前記第1のインラインキャッシュを前記プロセッサによって初期化するステップは、
    前記動的ソフトウェア動作の前記第1のインスタンスに関する、オブジェクト実装のデータを識別するまで、前記動的ソフトウェア動作のための前記オブジェクト実装を横断するステップと、
    前記動的ソフトウェア動作の前記第1のインスタンスの前記動的ソフトウェア動作を実行するステップと、
    前記動的ソフトウェア動作の前記第1のインスタンスの結果を戻すステップとを含む、請求項1に記載の方法。
  6. 前記コプロセッサによって前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を、前記プロセッサに戻すステップは、前記結果を前記プロセッサに直接戻すステップを含む、請求項1に記載の方法。
  7. 前記コプロセッサによって前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を戻すステップは、前記結果を、前記プロセッサおよび前記コプロセッサによってアクセス可能なデータキャッシュを通して間接的に前記プロセッサに戻すステップを含む、請求項1に記載の方法。
  8. 前記第1のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成された前記メモリ中に前記第1のインラインキャッシュを格納するステップは、プロセッサパイプラインに接続されたインラインキャッシュパイプライン上に配設された前記メモリにおいて、前記プロセッサパイプライン上に配設された前記プロセッサから前記第1のインラインキャッシュを受け取るステップを含み、
    前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサにおいて受信するステップは、前記プロセッサパイプラインに接続された前記インラインキャッシュパイプライン上に配設された前記コプロセッサにおいて、前記プロセッサパイプライン上に配設された前記プロセッサから前記動的ソフトウェア動作の前記第2のインスタンスを受信するステップを含み、
    前記コプロセッサによって前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を戻すステップは、前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を、前記インラインキャッシュパイプライン上に配設された前記コプロセッサから、前記インラインキャッシュパイプラインに接続された前記プロセッサパイプライン上に配設された前記プロセッサに送るステップを含む、請求項1に記載の方法。
  9. コンパイラによって、前記コプロセッサ用の実行可能動作を生成するステップと、
    動作を実施するための前記生成された実行可能動作を前記コプロセッサに実行させるよう、前記プロセッサに命令するステップとをさらに含み、前記動作は、
    前記動的ソフトウェア動作の前記第1のインスタンス用の前記第1のインラインキャッシュをプロセッサによって初期化すること、
    前記第1のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成された前記メモリ中に前記第1のインラインキャッシュを格納すること、
    前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサ中で受信すること、
    前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうか判断すること、
    前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じであると判断したことに応答して、前記メモリからの前記第1のインラインキャッシュを使って、前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサによって実行すること、および
    前記コプロセッサによって前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を戻すことを含む、請求項1に記載の方法。
  10. プロセッサと、
    前記プロセッサに通信可能に接続された少なくとも1つのインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成されたメモリと、
    前記プロセッサおよび前記メモリに通信可能に接続されたコプロセッサとを備えるコンピューティングデバイスであって、
    前記プロセッサは、
    動的ソフトウェア動作の第1のインスタンス用の第1のインラインキャッシュを初期化すること、
    前記第1のインラインキャッシュを前記メモリ中に格納することを含む動作を実施するためのプロセッサ実行可能命令を有して構成され、
    前記コプロセッサは、
    前記動的ソフトウェア動作の第2のインスタンスを受信すること、
    前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうか判断すること、
    前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じであると判断したことに応答して、前記メモリからの前記第1のインラインキャッシュを使って、前記動的ソフトウェア動作の前記第2のインスタンスを実行すること、および
    前記動的ソフトウェア動作の前記第2のインスタンスを実行した結果を前記プロセッサに戻すことを含む動作を実施するためのプロセッサ実行可能命令を有して構成される、コンピューティングデバイス。
  11. 前記コプロセッサは、前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうか判断することが、
    前記動的ソフトウェア動作の前記第1のインスタンスに関連した第1のオブジェクト実装を、前記動的ソフトウェア動作の前記第2のインスタンスに関連した第2のオブジェクト実装と比較すること、および
    前記第1のオブジェクト実装と前記第2のオブジェクト実装が同じであるかどうか判断することを含むような動作を実施するためのプロセッサ実行可能命令を有してさらに構成される、請求項10に記載のコンピューティングデバイス。
  12. 前記プロセッサは、
    前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが異なると判断したことに応答して、前記初期化された第1のインラインキャッシュと置き換わるように構成された、前記第1のインラインキャッシュを含む、前記動的ソフトウェア動作の前記第2のインスタンス用の第2のインラインキャッシュを初期化すること、
    前記第2のインラインキャッシュを前記メモリ中に格納することを含む動作を実施するためのプロセッサ実行可能命令を有してさらに構成され、
    前記コプロセッサは、前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが異なると判断したことに応答して、前記メモリからの前記第2のインラインキャッシュを使って、前記動的ソフトウェア動作の前記第2のインスタンスを実行することを含む動作を実施するためのプロセッサ実行可能命令を有してさらに構成される、請求項10に記載のコンピューティングデバイス。
  13. 前記コプロセッサは、前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を前記プロセッサに戻すことが、前記結果を前記プロセッサに直接戻すことを含むような動作を実施するためのプロセッサ実行可能命令を有してさらに構成される、請求項10に記載のコンピューティングデバイス。
  14. 前記プロセッサおよびコプロセッサに通信可能に接続されたデータキャッシュをさらに備え、前記コプロセッサは、前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を前記プロセッサに戻すことが、前記プロセッサおよび前記コプロセッサにとってアクセス可能な前記データキャッシュを通して間接的に、前記プロセッサに前記結果を戻すことを含むような動作を実施するためのプロセッサ実行可能命令を有してさらに構成される、請求項10に記載のコンピューティングデバイス。
  15. 前記プロセッサに通信可能に接続されたプロセッサパイプラインと、
    前記プロセッサパイプライン、前記コプロセッサ、および前記メモリに通信可能に接続されたインラインキャッシュパイプラインとをさらに備え、
    前記プロセッサは、前記第1のインラインキャッシュを前記メモリ中に格納することが、前記プロセッサパイプラインおよび前記インラインキャッシュパイプラインを介して、前記第1のインラインキャッシュを前記プロセッサから前記メモリに送ることを含むような動作を実施するためのプロセッサ実行可能命令を有してさらに構成され、
    前記コプロセッサは、
    前記動的ソフトウェア動作の前記第2のインスタンスを受信することが、前記プロセッサからの前記動的ソフトウェア動作の前記第2のインスタンスを、前記プロセッサパイプラインおよび前記インラインキャッシュパイプラインを介して、配設された前記コプロセッサにおいて受信することを含み、
    前記コプロセッサによって前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を戻すことが、前記インラインキャッシュパイプラインおよび前記プロセッサパイプラインを介して、前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を前記コプロセッサから前記プロセッサに送ることを含むような動作を実施するためのプロセッサ実行可能命令を有してさらに構成される、請求項10に記載のコンピューティングデバイス。
  16. 前記プロセッサは、
    コンパイラを使って、前記コプロセッサ用の実行可能動作を生成すること、
    動作を実施するための前記生成された実行可能動作を実行するよう前記コプロセッサに命令することを含む動作を実施するためのプロセッサ実行可能命令を有してさらに構成され、前記動作は、
    前記動的ソフトウェア動作の前記第1のインスタンス用の前記第1のインラインキャッシュを初期化すること、
    前記第1のインラインキャッシュを前記メモリ中に格納すること、
    前記動的ソフトウェア動作の前記第2のインスタンスを受信すること、
    前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうか判断すること、
    前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じであると判断したことに応答して、前記メモリからの前記第1のインラインキャッシュを使って、前記動的ソフトウェア動作の前記第2のインスタンスを実行すること、および
    前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を前記プロセッサに戻すことを含む、請求項10に記載のコンピューティングデバイス。
  17. プロセッサおよびコプロセッサに動作を実施させるためのプロセッサ実行可能ソフトウェア命令を記憶した非一時的プロセッサ可読媒体であって、前記動作は、
    動的ソフトウェア動作の第1のインスタンス用の第1のインラインキャッシュを前記プロセッサによって初期化すること、
    前記第1のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成されたメモリ中に、前記第1のインラインキャッシュを格納すること、
    コプロセッサ中で、前記動的ソフトウェア動作の第2のインスタンスを受信すること、
    前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうかを、前記コプロセッサによって判断すること、
    前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じであると判断したことに応答して、前記メモリからの前記第1のインラインキャッシュを使って、前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサによって実行すること、および
    前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサによって実行した結果をプロセッサに戻すことを含む、非一時的プロセッサ可読媒体。
  18. 前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記プロセッサおよびコプロセッサに、前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうか判断することが、
    前記動的ソフトウェア動作の前記第1のインスタンスに関連した第1のオブジェクト実装を、前記動的ソフトウェア動作の前記第2のインスタンスに関連した第2のオブジェクト実装と比較すること、および
    前記第1のオブジェクト実装と前記第2のオブジェクト実装が同じであるかどうか判断することを含むような動作を実施させるように構成される、請求項17に記載の非一時的プロセッサ可読媒体。
  19. 前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記プロセッサおよびコプロセッサに、
    前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが異なると判断したことに応答して、前記初期化された第1のインラインキャッシュと置き換わるように構成された、前記第1のインラインキャッシュを含む、前記動的ソフトウェア動作の前記第2のインスタンス用の第2のインラインキャッシュを初期化すること、
    前記第2のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成された前記メモリ中に、前記第2のインラインキャッシュを格納すること、
    前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが異なると判断したことに応答して、前記メモリからの前記第2のインラインキャッシュを使って、前記コプロセッサによって前記動的ソフトウェア動作の前記第2のインスタンスを実行することをさらに含む動作を実施させるように構成される、請求項17に記載の非一時的プロセッサ可読媒体。
  20. 前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記プロセッサおよびコプロセッサに、前記コプロセッサによって前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を前記プロセッサに戻すことが、前記結果を前記プロセッサに直接戻すことを含むような動作を実施させるように構成される、請求項17に記載の非一時的プロセッサ可読媒体。
  21. 前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記プロセッサおよびコプロセッサに、前記コプロセッサによって前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を戻すことが、前記プロセッサおよび前記コプロセッサによってアクセス可能なデータキャッシュを通して間接的に、前記プロセッサに前記結果を戻すことを含むような動作を実施させるように構成される、請求項17に記載の非一時的プロセッサ可読媒体。
  22. 前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記プロセッサおよびコプロセッサに、
    前記第1のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成された前記メモリ中に前記第1のインラインキャッシュを格納することが、プロセッサパイプラインに接続されたインラインキャッシュパイプライン上に配設された前記メモリにおいて、前記プロセッサパイプライン上に配設された前記プロセッサから前記第1のインラインキャッシュを受け取ることを含み、
    前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサにおいて受信することが、前記プロセッサパイプラインに接続された前記インラインキャッシュパイプライン上に配設された前記コプロセッサにおいて、前記プロセッサパイプライン上に配設された前記プロセッサから前記動的ソフトウェア動作の前記第2のインスタンスを受信することを含み、
    前記コプロセッサによって前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を戻すことが、前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を、前記インラインキャッシュパイプライン上に配設された前記コプロセッサから、前記インラインキャッシュパイプラインに接続された前記プロセッサパイプライン上に配設された前記プロセッサに送ることを含むような動作を実施させるように構成される、請求項17に記載の非一時的プロセッサ可読媒体。
  23. 前記記憶されたプロセッサ実行可能ソフトウェア命令が、
    コンパイラによって、前記コプロセッサ用の実行可能動作を生成すること、および
    動作を実施するための前記生成された実行可能動作を前記コプロセッサに実行させるよう前記プロセッサに命令することをさらに含む動作を前記プロセッサおよびコプロセッサに実施させるように構成され、前記動作は、
    前記動的ソフトウェア動作の前記第1のインスタンス用の前記第1のインラインキャッシュをプロセッサによって初期化すること、
    前記第1のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成された前記メモリ中に前記第1のインラインキャッシュを格納すること、
    前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサ中で受信すること、
    前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうか判断すること、
    前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じであると判断したことに応答して、前記メモリからの前記第1のインラインキャッシュを使って、前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサによって実行すること、および
    前記コプロセッサによって、前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を戻すことを含む、請求項17に記載の非一時的プロセッサ可読媒体。
  24. 動的ソフトウェア動作の第1のインスタンス用の第1のインラインキャッシュを初期化するための手段と、
    前記第1のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成された前記第1のインラインキャッシュを格納するための手段と、
    前記動的ソフトウェア動作の第2のインスタンスを受信するための手段と、
    前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうか判断するための手段と、
    前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じであると判断したことに応答して、前記第1のインラインキャッシュを格納するための前記手段からの前記第1のインラインキャッシュを使って、前記動的ソフトウェア動作の前記第2のインスタンスを実行するための手段と、
    前記動的ソフトウェア動作の前記第2のインスタンスを実行した結果を戻すための手段とを備えるコンピューティングデバイス。
  25. 前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうか判断するための手段は、
    前記動的ソフトウェア動作の前記第1のインスタンスに関連した第1のオブジェクト実装を、前記動的ソフトウェア動作の前記第2のインスタンスに関連した第2のオブジェクト実装と比較するための手段と、
    前記第1のオブジェクト実装と前記第2のオブジェクト実装が同じであるかどうか判断するための手段とを備える、請求項24に記載のコンピューティングデバイス。
  26. 前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが異なると判断したことに応答して、前記初期化された第1のインラインキャッシュと置き換わるように構成された、前記第1のインラインキャッシュを含む、前記動的ソフトウェア動作の前記第2のインスタンス用の第2のインラインキャッシュを初期化するための手段と、
    前記第2のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成された前記第2のインラインキャッシュを格納するための手段と、
    前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが異なると判断したことに応答して、前記第2のインラインキャッシュを格納するための前記手段からの前記第2のインラインキャッシュを使って、前記動的ソフトウェア動作の前記第2のインスタンスを実行するための手段とをさらに備える、請求項24に記載のコンピューティングデバイス。
  27. 前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を戻すための手段は、前記結果をプロセッサに直接戻すための手段を備える、請求項24に記載のコンピューティングデバイス。
  28. 前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を戻すための手段は、プロセッサおよびコプロセッサにアクセス可能なデータキャッシュを通して間接的に、前記プロセッサに前記結果を戻すための手段を備える、請求項24に記載のコンピューティングデバイス。
  29. 前記第1のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成された、前記第1のインラインキャッシュを格納するための手段は、プロセッサパイプライン上に配設されたプロセッサからの前記第1のインラインキャッシュを、前記プロセッサパイプラインに接続されたインラインキャッシュパイプライン上の、前記第1のインラインキャッシュを格納するための手段において受信するための手段を備え、
    前記動的ソフトウェア動作の前記第2のインスタンスを受信するための手段は、前記プロセッサパイプライン上に配設された前記プロセッサからの、前記動的ソフトウェア動作の前記第2のインスタンスを、前記プロセッサパイプラインに接続された前記インラインキャッシュパイプライン上に配設された、前記動的ソフトウェア動作の前記第2のインスタンスを受信するための手段において受信するための手段を備え、
    前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を戻すための手段は、前記インラインキャッシュパイプライン上に配設された、前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を、前記インラインキャッシュパイプラインに接続された前記プロセッサパイプライン上に配設された前記プロセッサに送るための手段を備える、請求項24に記載のコンピューティングデバイス。
  30. コンパイラによって実行可能動作を生成するための手段と、
    前記生成された実行可能動作を実行するための手段に、動作を実施させるよう命令するための手段とをさらに備え、前記動作は、
    前記動的ソフトウェア動作の前記第1のインスタンス用の前記第1のインラインキャッシュを初期化すること、
    前記第1のインラインキャッシュの格納および取出しのための高速アクセスを与えるための前記第1のインラインキャッシュを格納すること、
    前記動的ソフトウェア動作の前記第2のインスタンスを受信すること、
    前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうか判断すること、
    前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じであると判断したことに応答して、前記第1のインラインキャッシュを使って、前記動的ソフトウェア動作の前記第2のインスタンスを実行すること、および
    前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を戻すことを含む、請求項24に記載のコンピューティングデバイス。
JP2016547602A 2014-01-23 2015-01-22 動的言語でのインラインキャッシュのためのハードウェアアクセラレーション Expired - Fee Related JP6293910B2 (ja)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201461930808P 2014-01-23 2014-01-23
US61/930,808 2014-01-23
US14/262,852 2014-04-28
US14/262,852 US9710388B2 (en) 2014-01-23 2014-04-28 Hardware acceleration for inline caches in dynamic languages
PCT/US2015/012527 WO2015112762A1 (en) 2014-01-23 2015-01-22 Hardware acceleration for inline caches in dynamic languages

Publications (3)

Publication Number Publication Date
JP2017507411A true JP2017507411A (ja) 2017-03-16
JP2017507411A5 JP2017507411A5 (ja) 2017-09-28
JP6293910B2 JP6293910B2 (ja) 2018-03-14

Family

ID=53544933

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016547602A Expired - Fee Related JP6293910B2 (ja) 2014-01-23 2015-01-22 動的言語でのインラインキャッシュのためのハードウェアアクセラレーション

Country Status (6)

Country Link
US (1) US9710388B2 (ja)
EP (1) EP3097478A1 (ja)
JP (1) JP6293910B2 (ja)
KR (1) KR20160113142A (ja)
CN (1) CN106415485B (ja)
WO (1) WO2015112762A1 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9740504B2 (en) 2014-01-23 2017-08-22 Qualcomm Incorporated Hardware acceleration for inline caches in dynamic languages
US10031760B1 (en) * 2016-05-20 2018-07-24 Xilinx, Inc. Boot and configuration management for accelerators
CN111966333A (zh) * 2020-07-28 2020-11-20 锐达互动科技股份有限公司 一种插入动态模板背景的实现方法、装置、设备和介质
CN117008810A (zh) * 2022-04-27 2023-11-07 华为技术有限公司 一种数据处理方法、装置及相关设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012506094A (ja) * 2008-10-15 2012-03-08 マイクロソフト コーポレーション ランタイムにおいて生成したコードのキャッシュへの格納

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20020087798A1 (en) * 2000-11-15 2002-07-04 Vijayakumar Perincherry System and method for adaptive data caching
US7353364B1 (en) 2004-06-30 2008-04-01 Sun Microsystems, Inc. Apparatus and method for sharing a functional unit execution resource among a plurality of functional units
US7949826B2 (en) 2007-07-05 2011-05-24 International Business Machines Corporation Runtime machine supported method level caching
US9063749B2 (en) * 2011-05-27 2015-06-23 Qualcomm Incorporated Hardware support for hashtables in dynamic languages
US20130113809A1 (en) * 2011-11-07 2013-05-09 Nvidia Corporation Technique for inter-procedural memory address space optimization in gpu computing compiler
US9128732B2 (en) 2012-02-03 2015-09-08 Apple Inc. Selective randomization for non-deterministically compiled code
US9251071B2 (en) 2013-08-30 2016-02-02 Apple Inc. Concurrent inline cache optimization in accessing dynamically typed objects
US9740504B2 (en) 2014-01-23 2017-08-22 Qualcomm Incorporated Hardware acceleration for inline caches in dynamic languages

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2012506094A (ja) * 2008-10-15 2012-03-08 マイクロソフト コーポレーション ランタイムにおいて生成したコードのキャッシュへの格納

Also Published As

Publication number Publication date
US9710388B2 (en) 2017-07-18
CN106415485B (zh) 2019-11-22
JP6293910B2 (ja) 2018-03-14
CN106415485A (zh) 2017-02-15
WO2015112762A1 (en) 2015-07-30
US20150205726A1 (en) 2015-07-23
KR20160113142A (ko) 2016-09-28
EP3097478A1 (en) 2016-11-30

Similar Documents

Publication Publication Date Title
US9355050B2 (en) Secure, fast and normal virtual interrupt direct assignment in a virtualized interrupt controller in a mobile system-on-chip
US11093647B2 (en) Method and device for executing system scheduling
JP6293910B2 (ja) 動的言語でのインラインキャッシュのためのハードウェアアクセラレーション
US10168957B2 (en) Directed placemat of data in memory
US11138034B2 (en) Method and apparatus for collecting information, and method and apparatus for releasing memory
CN111475262B (zh) 区块链中事务请求处理方法、装置、设备和介质
US10169105B2 (en) Method for simplified task-based runtime for efficient parallel computing
US20150268993A1 (en) Method for Exploiting Parallelism in Nested Parallel Patterns in Task-based Systems
US9183065B1 (en) Providing access to an application programming interface through a named pipe
JP2017509950A (ja) 動的言語でのインラインキャッシュのためのハードウェアアクセラレーション
CN109791510B (zh) 在异构计算中管理数据流
US10241838B2 (en) Domain based resource isolation in multi-core systems
US10078611B1 (en) Smart handling of input/output interrupts
US9535713B2 (en) Manipulating rules for adding new devices
US20170364400A1 (en) Method for debugging static memory corruption
CN111857825A (zh) 指令执行方法、装置、电子设备和计算机可读存储介质
EP2907064B1 (en) License information access based on developer profiles
US10216524B2 (en) System and method for providing fine-grained memory cacheability during a pre-OS operating environment

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20170821

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20170821

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20170821

A975 Report on accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A971005

Effective date: 20170822

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20170904

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20171204

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20171227

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20180214

R150 Certificate of patent or registration of utility model

Ref document number: 6293910

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees