(57)【特許請求の範囲】
【請求項１】
コンピューティングデバイス上の動的言語ソフトウェアの処理速度を増大させるための方法であって、
動的ソフトウェア動作の第1のインスタンス用の第1のインラインキャッシュをプロセッサによって初期化するステップと、
前記第1のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成されたメモリ中に、前記第1のインラインキャッシュを格納するステップと、
コプロセッサ中で、前記動的ソフトウェア動作の第2のインスタンスを受信するステップと、
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうかを、前記コプロセッサによって判断するステップと、
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じであると判断したことに応答して、前記メモリからの前記第1のインラインキャッシュを使って、前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサによって実行するステップと、
前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサによって実行した結果を前記プロセッサに戻すステップとを含む方法。
【請求項２】
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうか判断するステップは、
前記動的ソフトウェア動作の前記第1のインスタンスに関連した第1のオブジェクト実装を、前記動的ソフトウェア動作の前記第2のインスタンスに関連した第2のオブジェクト実装と比較するステップと、
前記第1のオブジェクト実装と前記第2のオブジェクト実装が同じであるかどうか判断するステップとを含む、請求項1に記載の方法。
【請求項３】
前記動的ソフトウェア動作の前記第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のインスタンスに関する、オブジェクト実装のデータを識別するまで、前記動的ソフトウェア動作のための前記オブジェクト実装を横断するステップと、
前記動的ソフトウェア動作の前記第1のインスタンスの前記動的ソフトウェア動作を実行するステップと、
前記動的ソフトウェア動作の前記第1のインスタンスの結果を戻すステップとを含む、請求項1に記載の方法。
【請求項６】
前記コプロセッサによって前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を、前記プロセッサに戻すステップは、前記結果を前記プロセッサに直接戻すステップを含む、請求項1に記載の方法。
【請求項７】
前記コプロセッサによって前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を戻すステップは、前記結果を、前記プロセッサおよび前記コプロセッサにとってアクセス可能なデータキャッシュを通して間接的に前記プロセッサに戻すステップを含む、請求項1に記載の方法。
【請求項８】
前記第1のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成された前記メモリ中に前記第1のインラインキャッシュを格納するステップは、プロセッサパイプラインに接続されたインラインキャッシュパイプライン上に配設された前記メモリにおいて、前記プロセッサパイプライン上に配設された前記プロセッサから前記第1のインラインキャッシュを受け取るステップを含み、
前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサにおいて受信するステップは、前記プロセッサパイプラインに接続された前記インラインキャッシュパイプライン上に配設された前記コプロセッサにおいて、前記プロセッサパイプライン上に配設された前記プロセッサから前記動的ソフトウェア動作の前記第2のインスタンスを受信するステップを含み、
前記コプロセッサによって前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を戻すステップは、前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を、前記インラインキャッシュパイプライン上に配設された前記コプロセッサから、前記インラインキャッシュパイプラインに接続された前記プロセッサパイプライン上に配設された前記プロセッサに送るステップを含む、請求項1に記載の方法。
【請求項９】
コンパイラによって、前記コプロセッサ用の実行可能動作を生成するステップと、
前記プロセッサによる前記動的ソフトウェア動作の前記第1のインスタンス用の前記第1のインラインキャッシュを初期化すること、
前記第1のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成された前記メモリ中に前記第1のインラインキャッシュを格納すること、
前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサ中で受信すること、
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうか判断すること、
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じであると判断したことに応答して、前記メモリからの前記第1のインラインキャッシュを使って、前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサによって実行すること、および
前記コプロセッサによって前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を戻すこと
を含む動作を実施するために、前記生成された実行可能動作を前記コプロセッサに実行させるよう前記プロセッサに命令するステップと
を含む、請求項1に記載の方法。
【請求項１０】
プロセッサと、
前記プロセッサに通信可能に接続された少なくとも1つのインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成されたメモリと、
前記プロセッサおよび前記メモリに通信可能に接続されたコプロセッサとを備えるコンピューティングデバイスであって、
前記プロセッサは、
動的ソフトウェア動作の第1のインスタンス用の第1のインラインキャッシュを初期化すること、および
前記第1のインラインキャッシュを前記メモリ中に格納することを含む動作を実施するためのプロセッサ実行可能命令を有して構成され、
前記コプロセッサは、
前記動的ソフトウェア動作の第2のインスタンスを受信すること、
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうか判断すること、
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じであると判断したことに応答して、前記メモリからの前記第1のインラインキャッシュを使って、前記動的ソフトウェア動作の前記第2のインスタンスを実行すること、および
前記動的ソフトウェア動作の前記第2のインスタンスを実行した結果を前記プロセッサに戻すことを含む動作を実施するためのプロセッサ実行可能命令を有して構成される、コンピューティングデバイス。
【請求項１１】
前記コプロセッサは、前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうか判断することが、
前記動的ソフトウェア動作の前記第1のインスタンスに関連した第1のオブジェクト実装を、前記動的ソフトウェア動作の前記第2のインスタンスに関連した第2のオブジェクト実装と比較すること、および
前記第1のオブジェクト実装と前記第2のオブジェクト実装が同じであるかどうか判断することを含むような動作を実施するためのプロセッサ実行可能命令を有してさらに構成される、請求項10に記載のコンピューティングデバイス。
【請求項１２】
前記プロセッサは、
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが異なると判断したことに応答して、前記初期化された第1のインラインキャッシュと置き換わるように構成された、前記第1のインラインキャッシュを含む、前記動的ソフトウェア動作の前記第2のインスタンス用の第2のインラインキャッシュを初期化すること、および
前記第2のインラインキャッシュを前記メモリ中に格納すること
を含む動作を実施するためのプロセッサ実行可能命令を有してさらに構成され、
前記コプロセッサは、
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが異なると判断したことに応答して、前記メモリからの前記第2のインラインキャッシュを使って、前記動的ソフトウェア動作の前記第2のインスタンスを実行することを含む動作を実施するためのプロセッサ実行可能命令を有してさらに構成される、請求項10に記載のコンピューティングデバイス。
【請求項１３】
前記コプロセッサは、前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を前記プロセッサに戻すことが、前記結果を前記プロセッサに直接戻すことを含むような動作を実施するためのプロセッサ実行可能命令を有してさらに構成される、請求項10に記載のコンピューティングデバイス。
【請求項１４】
前記プロセッサおよび前記コプロセッサに通信可能に接続されたデータキャッシュをさらに備え、前記コプロセッサは、前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を前記プロセッサに戻すことが、前記プロセッサおよび前記コプロセッサにとってアクセス可能な前記データキャッシュを通して間接的に、前記プロセッサに前記結果を戻すことを含むような動作を実施するためのプロセッサ実行可能命令を有してさらに構成される、請求項10に記載のコンピューティングデバイス。
【請求項１５】
前記プロセッサに通信可能に接続されたプロセッサパイプラインと、
前記プロセッサパイプライン、前記コプロセッサ、および前記メモリに通信可能に接続されたインラインキャッシュパイプラインとをさらに備え、
前記プロセッサは、
前記第1のインラインキャッシュを前記メモリ中に格納することが、前記プロセッサパイプラインおよび前記インラインキャッシュパイプラインを介して、前記第1のインラインキャッシュを前記プロセッサから前記メモリに送ることを含むような動作を実施するためのプロセッサ実行可能命令を有してさらに構成され、
前記コプロセッサは、
前記動的ソフトウェア動作の前記第2のインスタンスを受信することが、前記プロセッサからの前記動的ソフトウェア動作の前記第2のインスタンスを、前記プロセッサパイプラインおよび前記インラインキャッシュパイプラインを介して、配設された前記コプロセッサにおいて受信することを含み、
前記コプロセッサによって前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を戻すことが、前記インラインキャッシュパイプラインおよび前記プロセッサパイプラインを介して、前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を前記コプロセッサから前記プロセッサに送ることを含むような動作を実施するためのプロセッサ実行可能命令を有してさらに構成される、請求項10に記載のコンピューティングデバイス。
【請求項１６】
前記プロセッサは、
コンパイラを使って、前記コプロセッサ用の実行可能動作を生成することと、
前記コプロセッサに、
前記動的ソフトウェア動作の前記第1のインスタンス用の前記第1のインラインキャッシュを初期化すること、
前記第1のインラインキャッシュを前記メモリ中に格納すること、
前記動的ソフトウェア動作の前記第2のインスタンスを受信すること、
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうか判断すること、
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じであると判断したことに応答して、前記メモリからの前記第1のインラインキャッシュを使って、前記動的ソフトウェア動作の前記第2のインスタンスを実行すること、および
前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を前記プロセッサに戻すこと
を含む動作を実施するために前記生成された実行可能動作を実行するよう命令することとを含む動作を実施するためのプロセッサ実行可能命令を有してさらに構成される、請求項10に記載のコンピューティングデバイス。
【請求項１７】
プロセッサおよびコプロセッサに動作を実施させるためのプロセッサ実行可能ソフトウェア命令を記憶した非一時的プロセッサ可読媒体であって、前記動作は、
動的ソフトウェア動作の第1のインスタンス用の第1のインラインキャッシュを前記プロセッサによって初期化すること、
前記第1のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成されたメモリ中に、前記第1のインラインキャッシュを格納すること、
前記コプロセッサ中で、前記動的ソフトウェア動作の第2のインスタンスを受信すること、
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうかを、前記コプロセッサによって判断すること、
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じであると判断したことに応答して、前記メモリからの前記第1のインラインキャッシュを使って、前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサによって実行すること、および
前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサによって実行した結果をプロセッサに戻すことを含む、非一時的プロセッサ可読媒体。
【請求項１８】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記プロセッサおよび前記コプロセッサに、前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうか判断することが、
前記動的ソフトウェア動作の前記第1のインスタンスに関連した第1のオブジェクト実装を、前記動的ソフトウェア動作の前記第2のインスタンスに関連した第2のオブジェクト実装と比較すること、および
前記第1のオブジェクト実装と前記第2のオブジェクト実装が同じであるかどうか判断することを含むような動作を実施させるように構成される、請求項17に記載の非一時的プロセッサ可読媒体。
【請求項１９】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記プロセッサおよび前記コプロセッサに、
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが異なると判断したことに応答して、前記初期化された第1のインラインキャッシュと置き換わるように構成された、前記第1のインラインキャッシュを含む、前記動的ソフトウェア動作の前記第2のインスタンス用の第2のインラインキャッシュを初期化すること、
前記第2のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成された前記メモリ中に、前記第2のインラインキャッシュを格納すること、および
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが異なると判断したことに応答して、前記メモリからの前記第2のインラインキャッシュを使って、前記コプロセッサによって前記動的ソフトウェア動作の前記第2のインスタンスを実行すること
をさらに含む動作を実施させるように構成される、請求項17に記載の非一時的プロセッサ可読媒体。
【請求項２０】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記プロセッサおよび前記コプロセッサに、前記コプロセッサによって前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を前記プロセッサに戻すことが、前記結果を前記プロセッサに直接戻すことを含むような動作を実施させるように構成される、請求項17に記載の非一時的プロセッサ可読媒体。
【請求項２１】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記プロセッサおよび前記コプロセッサに、前記コプロセッサによって前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を戻すことが、前記プロセッサおよび前記コプロセッサにとってアクセス可能なデータキャッシュを通して間接的に、前記プロセッサに前記結果を戻すことを含むような動作を実施させるように構成される、請求項17に記載の非一時的プロセッサ可読媒体。
【請求項２２】
前記記憶されたプロセッサ実行可能ソフトウェア命令は、前記プロセッサおよび前記コプロセッサに、
前記第1のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成された前記メモリ中に前記第1のインラインキャッシュを格納することが、プロセッサパイプラインに接続されたインラインキャッシュパイプライン上に配設された前記メモリにおいて、前記プロセッサパイプライン上に配設された前記プロセッサから前記第1のインラインキャッシュを受け取ることを含み、
前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサにおいて受信することが、前記プロセッサパイプラインに接続された前記インラインキャッシュパイプライン上に配設された前記コプロセッサにおいて、前記プロセッサパイプライン上に配設された前記プロセッサから前記動的ソフトウェア動作の前記第2のインスタンスを受信することを含み、
前記コプロセッサによって前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を戻すことが、前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を、前記インラインキャッシュパイプライン上に配設された前記コプロセッサから、前記インラインキャッシュパイプラインに接続された前記プロセッサパイプライン上に配設された前記プロセッサに送ることを含むような動作を実施させるように構成される、請求項17に記載の非一時的プロセッサ可読媒体。
【請求項２３】
前記記憶されたプロセッサ実行可能ソフトウェア命令が、
コンパイラによって、前記コプロセッサ用の実行可能動作を生成することと、
前記プロセッサによる前記動的ソフトウェア動作の前記第1のインスタンス用の前記第1のインラインキャッシュを初期化すること、
前記第1のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成された前記メモリ中に前記第1のインラインキャッシュを格納すること、
前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサ中で受信すること、
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうか判断すること、
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じであると判断したことに応答して、前記メモリからの前記第1のインラインキャッシュを使って、前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサによって実行すること、および
前記コプロセッサによって前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を戻すこと
を含む動作を実施するために、前記生成された実行可能動作を前記コプロセッサに実行させるよう前記プロセッサに命令することと
をさらに含む動作を前記プロセッサおよびコプロセッサに実施させるように構成される、請求項17に記載の非一時的プロセッサ可読媒体。
【請求項２４】
動的ソフトウェア動作の第1のインスタンス用の第1のインラインキャッシュをプロセッサにより初期化するための手段と、
前記第1のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成された前記第1のインラインキャッシュを格納するための手段と、
コプロセッサ中で、前記動的ソフトウェア動作の第2のインスタンスを受信するための手段と、
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうかを、前記コプロセッサによって判断するための手段と、
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じであると判断したことに応答して、前記第1のインラインキャッシュを格納するための前記手段からの前記第1のインラインキャッシュを使って、前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサによって実行するための手段と、
前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサによって実行した結果を前記プロセッサに戻すための手段とを備える、コンピューティングデバイス。
【請求項２５】
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうか判断するための手段は、
前記動的ソフトウェア動作の前記第1のインスタンスに関連した第1のオブジェクト実装を、前記動的ソフトウェア動作の前記第2のインスタンスに関連した第2のオブジェクト実装と比較するための手段と、
前記第1のオブジェクト実装と前記第2のオブジェクト実装が同じであるかどうか判断するための手段とを備える、請求項24に記載のコンピューティングデバイス。
【請求項２６】
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが異なると判断したことに応答して、前記初期化された第1のインラインキャッシュと置き換わるように構成された、前記第1のインラインキャッシュを含む、前記動的ソフトウェア動作の前記第2のインスタンス用の第2のインラインキャッシュを初期化するための手段と、
前記第2のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成された前記第2のインラインキャッシュを格納するための手段と、
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが異なると判断したことに応答して、前記第2のインラインキャッシュを格納するための前記手段からの前記第2のインラインキャッシュを使って、前記動的ソフトウェア動作の前記第2のインスタンスを実行するための手段とをさらに備える、請求項24に記載のコンピューティングデバイス。
【請求項２７】
前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を戻すための手段は、前記結果を前記プロセッサに直接戻すための手段を備える、請求項24に記載のコンピューティングデバイス。
【請求項２８】
前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を戻すための手段は、前記プロセッサおよび前記コプロセッサにとってアクセス可能なデータキャッシュを通して間接的に、前記プロセッサに前記結果を戻すための手段を備える、請求項24に記載のコンピューティングデバイス。
【請求項２９】
前記第1のインラインキャッシュの格納および取出しのための高速アクセスを与えるように構成された、前記第1のインラインキャッシュを格納するための手段は、プロセッサパイプライン上に配設された前記プロセッサからの前記第1のインラインキャッシュを、前記プロセッサパイプラインに接続されたインラインキャッシュパイプライン上の、前記第1のインラインキャッシュを格納するための手段において受信するための手段を備え、
前記動的ソフトウェア動作の前記第2のインスタンスを受信するための手段は、前記プロセッサパイプライン上に配設された前記プロセッサからの、前記動的ソフトウェア動作の前記第2のインスタンスを、前記プロセッサパイプラインに接続された前記インラインキャッシュパイプライン上に配設された、前記動的ソフトウェア動作の前記第2のインスタンスを受信するための手段において受信するための手段を備え、
前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を戻すための手段は、前記インラインキャッシュパイプライン上に配設された、前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を、前記インラインキャッシュパイプラインに接続された前記プロセッサパイプライン上に配設された前記プロセッサに送るための手段を備える、請求項24に記載のコンピューティングデバイス。
【請求項３０】
コンパイラによって、前記コプロセッサ用の実行可能動作を生成するための手段と、
前記プロセッサによる前記動的ソフトウェア動作の前記第1のインスタンス用の前記第1のインラインキャッシュを初期化すること、
前記第1のインラインキャッシュの格納および取出しのための高速アクセスを与えるための前記第1のインラインキャッシュを格納すること、
前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサ中で受信すること、
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じかどうか判断すること、
前記動的ソフトウェア動作の前記第1のインスタンスと前記動的ソフトウェア動作の前記第2のインスタンスが同じであると判断したことに応答して、前記第1のインラインキャッシュを使って、前記動的ソフトウェア動作の前記第2のインスタンスを前記コプロセッサによって実行すること、および
前記コプロセッサによって前記動的ソフトウェア動作の前記第2のインスタンスを実行した前記結果を戻すこと
を含む動作を、前記コプロセッサに、実施させるよう前記プロセッサに命令するための手段と
をさらに備える、請求項24に記載のコンピューティングデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願
本出願は、その内容全体が参照によって本明細書に組み込まれる、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ディスクドライブ
【図１】
0006293910.tif 000002
【図２】
0006293910.tif 000003
【図３】
0006293910.tif 000004
【図４】
0006293910.tif 000005
【図５】
0006293910.tif 000006
【図６】
0006293910.tif 000007
【図７】
0006293910.tif 000008
【図８】
0006293910.tif 000009
【図９】
0006293910.tif 000010
【図１０】
0006293910.tif 000011
【図１１】
0006293910.tif 000012
【図１２】
0006293910.tif 000013