JP2021057007A - ヘテロisaプラットフォーム上の高度な機能へのハードウェア及びソフトウェア協調オプトインの方法 - Google Patents

ヘテロisaプラットフォーム上の高度な機能へのハードウェア及びソフトウェア協調オプトインの方法 Download PDF

Info

Publication number
JP2021057007A
JP2021057007A JP2020105539A JP2020105539A JP2021057007A JP 2021057007 A JP2021057007 A JP 2021057007A JP 2020105539 A JP2020105539 A JP 2020105539A JP 2020105539 A JP2020105539 A JP 2020105539A JP 2021057007 A JP2021057007 A JP 2021057007A
Authority
JP
Japan
Prior art keywords
processor
function
processing element
application
instruction set
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.)
Pending
Application number
JP2020105539A
Other languages
English (en)
Inventor
オプファーマン トビー
Opferman Toby
オプファーマン トビー
ハーシュ イスラエル
Harsh Israel
ハーシュ イスラエル
ワイスマン エリエゼル
Eliezer Weissmann
ワイスマン エリエゼル
バレンタイン ロバート
Valentine Robert
バレンタイン ロバート
キャメロン アーノルド ラッセル
Cameron ARNOLD Russell
キャメロン アーノルド ラッセル
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
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 Intel Corp filed Critical Intel Corp
Publication of JP2021057007A publication Critical patent/JP2021057007A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5055Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering software capabilities, i.e. software resources associated or available to the machine
    • 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/30098Register arrangements
    • 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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • 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/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • G06F9/3879Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
    • 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/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • 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
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

【課題】機能を有効化して、異なる機能を提供可能なプロセッサの部分にオプトイン及びオプトアウトするプロセッサの制御技術を提供する。【解決手段】システム10において、プロセッサ12は、実行される「オプトイン」及び「オプトアウト」を有効化する特定のレジスタを含む。オプトインは、概して、特定の機能(例えば、命令セットアーキテクチャ)がリクエストされる場合を指す。アプリケーションは、これらのプロセッサ又はコアが提供できる任意の機能又は関数に関連する命令セットアーキテクチャなどの特定の命令セットアーキテクチャにオプトインすることをリクエストする。プロセッサは、提供される命令セットアーキテクチャ(例えば、機能)を有効化する。【選択図】図1

Description

本開示は、プロセッサの制御に関し、より具体的には、機能を有効化して、異なる機能を提供可能なプロセッサの部分にオプトイン及びオプトアウトする技術に関する。
このセクションは、本開示の様々な態様に関連し得る技術の様々な態様を読者に紹介することを意図しており、それらは以下において説明及び/又はクレームされる。この議論は、本開示の様々な態様のより良好な理解を促進するための背景情報を読者に提供するのに役立つと考えられる。従って、これらの記述は、この観点から読まれるべきであり、従来技術の承認として読まれるべきではないことが理解され得る。
プロセッサは、命令セットアーキテクチャ(ISA)のような命令セットから命令を実行してよい。命令セットは、プログラミングに関連するコンピュータアーキテクチャの部分であり、概して、ネイティブデータタイプ、命令、レジスタアーキテクチャ、アドレス指定モード、メモリアーキテクチャ、割り込み及び例外処理ならびに外部入力及び出力(I/O)を含む。命令セットは、特定のプロセッサ又はプロセッサの一部(例えば、コア)が提供できる関数、機能、又は性能を定義してもよい。
プロセッサは、オペレーティングシステムと同様にプログラム又はアプリケーションを実行するなどの様々なタスクを実行するためにソフトウェア命令を実行してよい。幾つかの場合では、実行中のアプリケーションは、システムコールを実行してよく、そのアプリケーションは、例えば、オペレーティングシステムのカーネルがサービスを提供すること、プロセッサによって実行されるタスクをスケジューリングすることなどをリクエストしてよい。そのようなシステムコールを実行することは、プロセッサの効率を下げ得る。例えば、システムコールに応答して、プロセッサは、1つのタスクを実行するのを中止してシステムコールを対処してよい。後で、プロセッサは、タスクを実行するのを再開してよい。従って、プロセッサが対処するシステムコールの数を減らすことは、速く、より効率的なプロセッサの開発を促進してよい。
本開示の様々な態様は、以下の詳細な説明を読み、図面を参照すると、より良好に理解され得る。
ある実施形態による様々なレジスタを含むプロセッサのブロック図である。
ある実施形態による、図1のプロセッサ及び図1のプロセッサにより実行される様々なソフトウェア要素を示す概略図のブロック図である。
ある実施形態による、機能(例えば、命令セットアーキテクチャ)にオプトインするための処理のフロー図である。
ある実施形態によるコンテキストスイッチを実行するための処理のフロー図である。
1又は複数の特定の実施形態が後述される。これらの実施形態の簡潔な説明を提供するために、実際の実装のすべての特徴が本明細書に記載されているわけではない。そのような実際の実装の開発では、エンジニアリング又は設計プロジェクトのように、実装ごとに異なり得るシステム関連及びビジネス関連の制約への準拠など、開発者固有の目標を達成するために、実装固有の多数の決定を行う必要があることが理解されよう。さらに、そのような開発努力は複雑で時間がかかる可能性があるが、それにもかかわらず、本開示の利益を享受する当業者にとっては、設計、製造、及び製造の日常的な仕事であることは理解されよう。
本開示の様々な実施形態の要素を導入する場合、冠詞「a」、「an」、及び「the」は、1又は複数の要素があることを意味することを意図している。「備える」、「含む」、及び「有する」という用語は、包括的であることを意図し、リストされた要素以外の追加の要素が存在する可能性があることを意味してよい。さらに、本開示の「一実施形態」又は「実施形態」への参照は、列挙された特徴をまた組み込む追加の実施形態の存在を除外するものとして解釈されることを意図されないことを理解されたい。さらに、B「に基づく」Aというフレーズは、Aが少なくとも部分的にBに基づくことを意味することを意図している。さらに、特に明記しない限り、「又は」という用語は、包括的(例えば、論理OR)であることを意図しており、排他的(例えば、論理XOR)であることを意図していない。換言すると、A「又は」Bというフレーズは、A、B、又はA及びBの両方を意味することを意図している。
プロセッサ(例えば、1又は複数のコアを有する)は、命令(例えば、命令のスレッド(ソフトウェアスレッド))を実行して、データ操作する、例えば、算術、論理、又は他の関数を実行してよい。例えば、ソフトウェアは、実行される動作をリクエストしてよく、ハードウェアプロセッサ(例えば、これらの1又は複数のコア)は、リクエストに応答して動作を実行してよい。特定の実施形態では、複数の動作が、単一の命令の実行により実現される。一実施形態では、プロセッサの論理処理要素(例えば、コア)が、命令の各スレッドを実行する。本明細書において用語「命令(instruction)」は、マクロ命令(例えば、実行のためにプロセッサに提供される命令)又はマイクロ命令(例えば、マクロ命令を復号するプロセッサのデコーダから得られる命令)を意味してよいことに留意されたい。
プロセッサは、異なる命令セットアーキテクチャに関連してよいいくつかの論理処理要素(例えば、コア)含んでよい。換言すると、プロセッサの異なるコアは、異なる性能を有してよい。例えば、第1命令アーキテクチャセットを有する1つのコアは、別の命令セットアーキテクチャに関連する別のコアとは異なる計算又は決定を作成できてよい。異なるプロセッサ又はプロセッサの部分(例えば、異なるコア)に関連する異なる命令セットアーキテクチャがある場合、これは、環境内の要素(例えば、互いに通信可能に結合されるシングルプロセッサ又はマルチプロセッサ内のコア)が複数の命令セットアーキテクチャをサポートすることを示す「異種環境」と呼ばれてよい。
処理(例えば、ソフトウェアスレッド)は、プロセッサのコアを使用して対処されてよい。例えば、コアは、プロセッサにより実行されるアプリケーションなどのソフトウェアによりコールされる計算を実行してよい。幾つかの場合では、ソフトウェアは、使用される特定の命令セットアーキテクチャをリクエストしてよい。例えば、特定のタイプの計算を実行する又は特定のタイプの決定を作成するために、特定の命令セットアーキテクチャが必要とされてよい。
本明細書で説明されるように、プロセッサは、実行される「オプトイン」及び「オプトアウト」を有効化する特定のレジスタを含んでよい。以下で説明されるように、オプトインは、概して、特定の機能(例えば、命令セットアーキテクチャ)がリクエストされる場合を指す。例えば、アプリケーションは、これらのプロセッサ又はコアが提供できる任意の機能又は関数に関連する命令セットアーキテクチャなどの特定の命令セットアーキテクチャにオプトインすることをリクエストしてよい。プロセッサは、提供される命令セットアーキテクチャ(例えば、機能)を有効化するよう構成されることができ、その点で、機能がオプトインされていると言ってよい。さらに、ソフトウェアは、プロセッサがもはや命令セットアーキテクチャを提供しないよう構成されることを意味するオプトアウトされる機能をリクエストしてもよい。本明細書で説明されるように、機能は、プロセッサの効率及び処理速度を高め得るシステムコールを実行することなく、オプトイン(及びオプトアウト)されてよい。
上述を念頭において、図1は、プロセッサ12、メモリ14、及びストレージデバイス16を含むシステム10を示す。図示されるように、プロセッサ12は、メモリ14及びストレージデバイス16に通信可能に結合される。プロセッサ12は、限定されないが、マイクロプロセッサ、デジタル信号プロセッサ(DSP)、マイクロコントローラ、又は特定用途向け集積回路(ASIC)などの様々なタイプのプロセッサであってよい。
プロセッサ12は、メモリ14及び/又はストレージデバイス16などの適当な製造品に格納されたプログラム又は命令を実行してよい。例えば、ストレージデバイス16は、プロセッサ12が実行し得るオペレーティングシステム(OS)18及び1又は複数のアプリケーション20を含んでよい。プロセッサ12に対する命令に加えて、メモリ14及び/又はストレージデバイス16は、プロセッサ12により処理されるデータを格納してもよい。例として、メモリ14は、ランダムアクセスメモリ(RAM)を含んでよく、ストレージデバイス16は、リードオンリメモリ(ROM)、フラッシュメモリ、ハードドライブ、光ディスクなどのようなリライタブル不揮発性メモリを含んでよい。
プロセッサ12は、1又は複数の処理要素22(例えば、第1処理要素22A、第2処理要素22B、及び第n処理要素22C、ただしnは2より大きい整数)を含んでよい。処理要素22A−Cは、プロセッサ12のコアであってよい。例えば、プロセッサ12がクアッドコアプロセッサである実施形態では、プロセッサ12は、4つのコア(例えば、4つの処理要素22)を含む。
プロセッサ12は、例えば、メモリ14内のデータにアクセスすることに加えて又はその代わりとして動作を実行する1又は複数のデータレジスタ26を含んでもよいレジスタ24を含んでもよい。例えば、データレジスタ26は、プロセッサ12がアプリケーション20を実行している場合に、アプリケーション20に関連するデータを格納するために利用されてよい1又は複数のアプリケーションレジスタ28を含んでよい。レジスタ24は、構成及び/又は制御レジスタであってよい1又は複数のモデル固有レジスタ30を含んでもよい。いくつかの実施形態では、モデル固有レジスタ30は、通常、プロセッサ12上で動作するOS18のリクエスト時にのみ書き込まれる。例えば、幾つかの場合では、OS18又はプロセッサ12が特権モード(例えば、カーネルモード)で動作し、非特権モード(例えば、ユーザモード)において動作しない場合に、モデル固有レジスタ30は書き込まれてよい。データレジスタ26(例えば、ユーザ機能制御レジスタ32)に含まれるレジスタ及びモデル固有レジスタ30(例えば、機能有効化マスクレジスタ34、カーネル機能制御レジスタ36、及び機能状態レジスタ38)は、以下でさらに詳細に説明される。
さらに、レジスタ24のいくつかは、特定の処理要素22に関連してよい。例えば、第1処理要素22Aは、1セットのデータレジスタ26及び1セットのモデル固有レジスタ30を利用してよく、一方、第2処理要素22Bは、第1処理要素22Aとは異なるデータレジスタ26及び異なるモデル固有レジスタ30を利用してよい。換言すると、特定のデータレジスタ26及びモデル固有レジスタ30は、特定の処理要素22A−Cに割り当てられてよく又はそれらにより使用されてよい。例えば、アプリケーション20に関連する処理(例えば、ソフトウェアスレッド)が第1処理要素22Aにより実行されている場合、第1処理要素22Aは、特定のデータレジスタ26のアプリケーションレジスタ28を使用してよい。
上記のとおり、処理要素22A−Cは、異なる命令セットアーキテクチャをサポートしてよく、これは、処理要素22のいくつかは、他の処理要素22が実行できなくてよい特定の関数を実行できてよいことを意味する。本明細書で説明するとおり、命令セットアーキテクチャによってサポートされる様々な機能又は関数の「オプトイン」及び「オプトアウト」にアプリケーション20を有効化するために、様々なレジスタが利用されてよい。例えば、アプリケーション20は、第1命令セットアーキテクチャに関連する又はサポートしてよい第1処理要素22Aを使用して、実行されてよい。幾つかの場合では、アプリケーション20は、特定の命令セットアーキテクチャ又は特定の命令セットアーキテクチャによって提供される関数を使用するためにコールしてよい。例えば、特定のタスクを実行するために、アプリケーション20は、タスクを完了するための特定の命令セットアーキテクチャ又は特定の命令セットアーキテクチャによって提供される関数を利用する必要があってよい。以下で説明されるように、レジスタ24は、アプリケーション20又はアプリケーション20に関連する処理(例えば、ソフトウェアスレッド)を有効化するために利用して、(例えば、第1処理要素22Aがリクエストされた関数を提供することができる場合)リクエストされた関数を提供するためにアプリケーション20を実行している処理要素(例えば、第1処理要素22A)を有効化する、また、例えば、第1処理要素22Aがリクエストされた命令セットアーキテクチャをサポートしない場合に、別の処理要素(例えば、第2処理要素22B)を使用するアプリケーション20を実行するか否か決定してよい。これを念頭において、レジスタ24についてさらに詳細に説明する。
示されるように、モデル固有レジスタ30は、1又は複数の機能有効化マスクレジスタ34を含んでよく、これはOS18がアプリケーション20に有効化を許可するであろう特定の機能を定義してよい。例えば、機能有効化マスクレジスタ34は、各機能が利用されることができるか否かを定義するために、論理0又は論理1として定義されてよい命令セットアーキテクチャによりサポートされる特定の機能に関連するビットを含んでよい。換言すると、OS18(例えば、オペレーティングシステムのカーネルを介して)は、処理要素22が提供できる機能、アプリケーション20が利用を許可されるであろう提供されることができる機能のうちのどれかを決定してよい。例えば、幾つかの場合では、命令セットアーキテクチャは処理要素22を有効化して2つの異なる機能を提供してよく、2つの機能は、同時に提供されることができないコンフリクトする機能であってよい。従って、機能有効化マスクレジスタ34は、アプリケーション20が利用してよい機能を定義してよい。
説明に役立てるため、図2が提供される。具体的に、図2は、プロセッサ12により実行される様々なソフトウェア要素が、どのように互いに(及びプロセッサ12自体と)相互作用してよいかを概略図に示している。しかしながら、ソフトウェア要素を検討する前に、図2は境界線60を含むことに留意されたい。境界線60の上に見つけられるソフトウェア要素は、「ユーザモード」ソフトウェア要素と言われてよく、境界線60の下に位置するソフトウェア要素は、「カーネルモード」要素と言われてよい。一般的に言えば、プロセッサ12は、ユーザモード及びカーネルモードで動作してよい。通常、ユーザモードは、カーネルモードより限定され、実行されているコード(例えば、アプリケーション20などのユーザプログラム)は通常、カーネルモードと比較してハードウェア(例えば、プロセッサ12、メモリ14)へのアクセスが比較的少ないことを意味する。反対に、カーネルモードでは、通常、プロセッサ12及びメモリ14へのアクセスが多い。例として、プロセッサ12がカーネルモードにある間、OS18の関数が頻繁に実行される。
示されるように、ユーザモードのソフトウェア要素は、互いに通信してよいアプリケーション(複数可)20及びオペレーティングシステムのアプリケーションプログラミングインタフェース(OS API)62を含む。例えば、関数へのアクセスをリクエストするために、アプリケーション20はOS API62からのアクセスをリクエストしてよい。概して、OS API62は、異なるソフトウェア要素の間の通信を有効化する関数のセットであってよい。換言すると、OS API62は、アプリケーション20及びカーネルモードソフトウェア要素であるオペレーティングシステムのカーネル64の間の仲介として機能してよい。OSカーネル64は、プロセッサ12及びメモリ14の動作を管理するソフトウェアであってよい。例えば、OSカーネル64は、OS18を制御するために使用されるOS18の部分及びOS18を実行するために使用されるハードウェア要素(例えば、プロセッサ12及びメモリ14)であってよい。具体的に、OSカーネル64は、プロセッサ12の処理要素22に命令を提供してよい。処理要素22に含まれるデコーダ66(例えば、デコーダ回路)は、受信した命令を復号してよく、実行ユニット68(例えば、処理要素22に含まれる回路)は復号された命令を実行して、レジスタ24の1つへの値の読み出し又は書き込みなどの1又は複数の動作を実行してよい。
幾つかの場合では、アプリケーション20は、システムコールを発生させてよい。例えば、アプリケーション20は、OSカーネル64がOS18又はプロセッサ12にアプリケーションのためのサービスを提供させるリクエストをする場合(例えば、ストレージデバイス16へのアクセスを提供する又はプロセッサ12により実行されるタスクをスケジューリングする)、システムコールが行われてよい。システムコールを実行することは、プロセッサの効率を下げ得る。例えば、プロセッサ12は、ユーザモードにおける動作に戻るようスイッチする前に、リクエストに対処するために、ユーザモードにおける動作からカーネルモードにおける動作にスイッチすべきであってよい。より具体的には、システムコールは、OSカーネル64に、ユーザモードにおける動作からカーネルモードにおける動作に変更させる割り込み又はトラップであってよい。カーネルモードになると、OSカーネル64は、アプリケーション20により作成されるリクエストに対処してよい。すなわち、プロセッサ12がシステムコールの前に処理していた処理を完了するのにより長い時間を必要とするから、システムコールを実行すると、プロセッサ12にユーザモードに関連する処理(例えば、アプリケーション20に関連する処理)の実行を中止させ、それにより、プロセッサ12の効率を下げ得る。
OSカーネル64に加えて、カーネルモードソフトウェア要素は、プロセッサ12又はメモリ14などのハードウェアにソフトウェア(例えば、アプリケーション20)インタフェースを提供するドライバであってよい1又は複数のカーネルAPI70を含んでもよい。本明細書で説明するとおり、カーネルAPI70及びOS API62は、システムコールを実行することなく、レジスタ24を読み出し及び書き込みさせてもよい。例えば、後述するように、アプリケーションが特定の機能(例えば、特定の命令セットアーキテクチャにより提供される)へのアクセスをリクエストする場合、OS API62及びカーネルAPI70は、システムコールが実行されることなく、1又は複数のレジスタ24にチェックされ(例えば、読み出し)又は修正(例えば、書き込み)させてよい。
図1に戻ると、データレジスタ26は、1又は複数のユーザ機能制御レジスタ32を含んでよく、モデル固有レジスタ30は、1又は複数のカーネル機能制御レジスタ36を含んでよい。ユーザ機能制御レジスタ32及びカーネル機能制御レジスタ36は、特定の機能及び処理要素22のタイプ(例えば、プロセッサ12に含まれるコアのタイプ)を表すビットをそれぞれ含んでよい。いくつかの実施形態では、ユーザ機能制御レジスタ32に対して、ビットは、例えば機能有効化マスクレジスタ34に含まれるそれらだけであってもよい。これは、アプリケーション20が使用してよいことをOS18が判断する関数のサブセットのみを利用できるようにアプリケーション20を有効化するよう実行する。従って、ユーザ機能制御レジスタ32及びカーネル機能制御レジスタ36内の1又は複数のビットの値を変更することにより、プロセッサ12上で実行されているソフトウェアは、処理要素22A−Cの命令セットアーキテクチャにより提供される様々な機能をオプトイン及びオプトアウトできてよい。すなわち、処理要素22A−Cを処理することで、ユーザ機能制御レジスタ32及びカーネル機能制御レジスタ36の1又は複数の値が修正された後、特定の機能又は関数を提供又は提供するのを中止できてよい。
レジスタ24の説明を継続すると、モデル固有レジスタ30は、1又は複数の機能状態レジスタ38を含んでもよい。機能状態レジスタ38は、ハードウェアエラー情報に関する情報及びソフトウェアを有効化してフォールトに関する独自のエラー情報を提供するソフトウェア利用可能ビットを提供する。例えば、図3に対して以下で詳述されるように、命令が受信されて読み出される又はユーザ機能制御レジスタ32又はカーネル機能制御レジスタ36のビットの値を修正する場合、機能状態レジスタ38は、命令が首尾よく実装された又はフォールトなどのエラーをもたらしたか否かに関する情報を提供してよい。さらに、機能状態レジスタ38がモデル固有レジスタ30に含まれるものとして説明されるが、他の実施形態では、機能状態レジスタ38はデータレジスタ26内に含まれてよいことに留意されたい。
継続して図面を参照すると、図3は、機能(例えば、特定の命令セットアーキテクチャによりサポートされる機能)をオプトインするための処理100のフローチャートである。処理100は、OS18及びアプリケーション20などのストレージデバイス16のメモリ14上に格納された命令を実行することにより、プロセッサ12により実行されてよい。より具体的に、処理100は、プロセッサ12及びプロセッサ12のハードウェア要素(例えば、処理要素22A−C)又はシステム10(例えば、メモリ14)によって実行されるソフトウェア要素を使用して実行されてよい。
処理ブロック102にて、アプリケーション20はオプトインする機能を列挙してよい。例えば、アプリケーション20は、処理要素22A−Cにより提供されることができる機能(例えば、命令セットアーキテクチャ)を決定し、1又は複数の機能を利用することをリクエストしてよい。より具体例として、アプリケーション20は、命令セットアーキテクチャ(例えば、x86命令セットアーキテクチャ)への拡張(又は複数の拡張)の例であるIntel(登録商標) Advanced Vector Extensions 512 (AVX−512)へのオプトインをリクエストしてよく、これによりアプリケーションはAVX−512を利用してよい。
処理ブロック104にて、アプリケーション20は、OS API62をコールして、特定の機能にオプトインするようリクエストしてよい。例えば、AVX−512に対するオプトインの例を継続すると、アプリケーション20はOS API62をコールして、AXV−512へのオプトインをリクエストしてよい。
処理ブロック106にて、OS API62は、オプトインされる1又は複数の特徴に対応するユーザ機能制御レジスタ32の1又は複数のビットをセットしてよい。換言すると、OS API62は、1又は複数のビットの値を修正して、リクエストされた機能が提供されるのを有効化してよい。例えば、OS API62は、ユーザ機能制御レジスタ32の1又は複数のビットをセットして、処理要素22がAVX−512を利用するのを有効化してよい。
上記のとおり、OS API62は、システムコールを行うことなく、ユーザ機能制御レジスタ32の1又は複数のビットをセットしてよい。換言すると、OS API62は、ユーザ機能制御レジスタ32のビットを、OSカーネル64による介入なく、修正させてよい。
決定ブロック108にて、実行ユニット68(又はプロセッサ12に含まれる制御回路)は、ブロック106にてセットされた1又は複数のビットがセットされるのを許可されるか否かを判断してよい。例えば、実行ユニット68(又はプロセッサ12に含まれる制御回路)は、OS18が現在の処理要素22にリクエストされた機能(例えば、機能有効化マスクレジスタ34に示されてよいように)を提供するのを禁止していることを判断してよく、この場合に、機能制御レジスタの1又は複数のビットは、リクエストされた値にセットされるのを許可されなくてよい。1又は複数のビットがセット(例えば、アプリケーション20によりリクエストされた値に)されるのを許可されていないと判断される場合、処理ブロック110にて、実行ユニット68は、機能状態レジスタ38に、無効ビットがセットされた(例えば、無効ビットステータスを提供する)及び/又は無効ビットが試行された(例えば、アプリケーション20が無許可ビットの修正をリクエストした)ことを示させてよい。さらに、処理ブロック112にて、フォールトが発生してよく、この場合に、OS18(例えば、OSカーネル64を介して)どのようにフォールトを解決するか判断してよい。例えば、機能状態レジスタ38に基づいて、OSカーネル64は、処理100を終了し、エラーを返し、別の動作を実行してよい。例えば、幾つかの場合では、OSカーネル64は、機能有効化マスクレジスタ34を更新して、1又は複数のビットがセットされるのを許可してよく、その場合に、処理100は、決定ブロック114に継続する処理ブロック106にリターンしてよい。
決定ブロック108にて、機能制御レジスタの1又は複数のビットがセットされるのを許可されていると判断される場合、決定ブロック114にて、実行ユニット68(又はプロセッサ12に含まれる制御回路)は、現在の処理要素がリクエストされた機能(複数可)をサポートするか否か判断してよい。例えば、アプリケーション20を実行している処理要素22(すなわち、現在の処理要素)のデコーダ66は、OS API62から命令を受信して、ユーザ機能制御レジスタ32の1又は複数のビットを修正してよく、これにより、現在の処理要素22は、特定の機能(例えば、AVX−512)を提供するであろう。実行ユニット68は、現在の処理要素22の機能有効化マスクレジスタ34をチェックすることにより、現在の処理要素22がリクエストされた機能をサポートするか否かを判断して、リクエストされた機能が提供されることができるか否か判断してよい。
実行ユニット68は、現在の処理要素22がリクエストされた機能(例えば、命令セットアーキテクチャ)をサポートしないと判断する場合、処理ブロック116にて、実行ユニット68は、機能状態レジスタ38にリクエストされた機能又は命令セットアーキテクチャが現在の処理要素22によりサポートされないことを示させてよい。例えば、ユーザ機能制御レジスタ32のビットは、修正されなくてよく、機能状態レジスタ38は、リクエストされたビットが修正されなかったことを示す値を返してよい。指示は、特にリクエストされた機能が現在の処理要素によりサポートされないことを示すフォールトであってよい。例えば、機能状態レジスタがリクエストされたビットが修正されなかったことを示す値を返すことに応答して、処理ブロック118にて、フォールトが発生してよく、その場合に、OS18(例えば、OSカーネル64を介して)フォールトを解決してよい。
例えば、処理ブロック120にて、OSカーネル64は、リクエストされた機能をサポートする又はそれを提供することができる処理要素22を決定してよい。より具体的には、OS API62は、ユーザ機能制御レジスタ32をチェックして、リクエストされたビットが修正されたか否か判断する又は機能状態レジスタ38が、リクエストされ修正(例えば、ビット値に変更)が実装されたか否かを示すか否かを判断してよい。OS API62が、リクエストされたビットが修正されなかったと判断する場合(すなわち、リクエストされた機能が首尾よくオプトインされなかった)、フォールトが発生してよい。フォールトに応答して、OS API62は、システムコールを実行してよく、OSカーネル64はフォールトを解決してよい。例えば、OSカーネル64は、リクエストされた機能を提供することができるプロセッサ12の別の処理要素22を決定してよく、処理ブロック122にて、OSカーネル64は、現在の処理要素としてリクエストされた機能をサポートする別の処理要素をセットしてよく、処理100は、(例えば、機能制御レジスタの1又は複数のビットをセットする命令を再開することにより)処理ブロック106にリターンしてよい。AVX−512をオプトインする例を継続すると、現在の処理要素22が、AVX−512をサポートしない(又はOS18によりAVX−512を提供するのを禁止されている)場合、AVX−512を提供できる別の処理要素22が決定されてよく(例えば、別の処理要素22により利用される機能有効化マスクレジスタのビット及び/又はユーザ機能制御レジスタ32のビットに基づいて)、他の処理要素22が現在の処理要素としてセットされてよい。より具体的には、処理(例えば、ソフトウェアスレッド)は、リクエストされた機能をサポートする処理要素22に再スケジュールされてよい(例えば、実行ユニット68により)。さらに、機能状態レジスタ38は、今後の使用のためにクリアされてよい。例えば、別の処理要素が現在の処理要素としてセットされた後、機能状態レジスタ38は、新たな現在の処理要素の機能制御レジスタのビットをセットするために命令を再開する前にクリアされてよい。
決定ブロック114にて、実行ユニット68が、現在の処理要素がリクエストされた機能(例えば、命令セットアーキテクチャ)をサポートすると判断する場合、次に、処理ブロック124にて、実行ユニット68は、リクエストされた機能に関連するユーザ機能制御レジスタ32のビットを修正させるであろう。さらに、機能状態レジスタ38は、ビットが首尾よく修正されたことを示してよい。
処理ブロック126にて、OS API62は、機能状態レジスタをチェックして、リクエストされた機能に関連するユーザ機能制御レジスタ32のビットが修正されたか否かを、例えば、ユーザ機能制御レジスタ32のビットが修正されたか否かを示すための機能状態レジスタ38をチェックすることにより、判断してよい。現在の処理要素は、リクエストされた機能をサポートするので(決定ブロック114にて判断されるように)、機能状態レジスタ38は、現在の処理要素22がここでリクエストされた機能(例えば、AVX−512)を提供できることを意味するよう、リクエストされた機能に関連するビットが修正されることを示さなければならない。さらに、処理ブロック128に、OS API62は、リクエストされた機能に対するオプトインが成功したことをアプリケーション20に示してよい。さらに、処理ブロック130にて、アプリケーション20はオプトインする機能を利用してよい。例えば、アプリケーションは、AVX−512を使用してよい。
処理ブロック132により示されるように、いくつかの実施形態では、機能がオプトインされた後、コンテキストスイッチを発生してよい。コンテキストスイッチは、現在の処理要素22が、1つの処理(例えば、アプリケーション20に関連する動作を実行するなどのソフトウェアスレッド)を実行するために利用されている状況から別の処理を実行する状況に変わる状況を指す。コンテキストスイッチの後、元の処理が再開されてよい(例えば、別のコンテキストスイッチを介して又は別の処理要素22を利用することにより)。
コンテキストスイッチがどのように処理されてよいかについてより多くのコンテキストを提供するのに役立てるために、図4が提供される。具体的に、図4は、ソフトウェア命令(例えば、OS18及びアプリケーション20)を実行することによりプロセッサ12により実行されてよいコンテキストスイッチを処理するための処理150である。
処理ブロック152にて、コンテキストスイッチの出現が検出されてよい。例えば、処理要素22は、第1動作(例えば、オプトインされた機能を使用するアプリケーションに関連する)を実行することから第2の異なる動作にスイッチしてよい。
処理ブロック154にて、レジスタ24の状態は保存されてよい。具体的に、現在の処理要素22に関連する又はそれにより使用されるユーザ機能制御レジスタ32、カーネル機能制御レジスタ36、及び機能状態レジスタ38の状態が保存されてよい。いくつかの実施形態では、処理ブロック154に関連する動作が、処理ブロック152の動作の実行中に実行されてよい。処理ブロック156にて、コンテキストスイッチが行われてよい。例えば、現在の処理要素22は、1つの処理(例えば、ソフトウェアスレッド)を実行することから別の処理(例えば、異なるソフトウェアスレッド)にスイッチしてよい。
元の処理を再開することとの関連で、OS API62又はOSカーネル64は、ユーザ機能制御レジスタ32、カーネル機能制御レジスタ36、又は両方が修正されているか否か(例えば、発生した特定のコンテキストスイッチ及び第1動作がユーザモード又はカーネルモードに関連するか否かに基づいて)判断してよい。機能制御レジスタ(例えば、ユーザ機能制御レジスタ32又はカーネル機能制御レジスタ36)が修正されていないと判断される場合、コンテキストスイッチが発生する前に第1動作を実行していた処理要素22が、第1動作を実行するのを再開してよい。より具体的に、メモリ14に格納されるレジスタ24のビットの前の値が、レジスタ24(例えば、アプリケーションレジスタ28のビット)内で第1動作に関連する値に戻されてよく、処理要素22は、第1処理の実行を再開してよい。
しかしながら、決定ブロック158にて、機能制御レジスタが修正された(例えば、元々オプトインされた機能がオプトアウトされた)と判断されると、第1処理に対する共通性が処理ブロック162にてセットされてよい。換言すると、プロセッサ12は、第1動作を再開するのを優先してよいが、異なる処理要素上で実行してよい。処理ブロック164にて、第1動作は、別の処理要素上で再開されてよい。例えば、別の処理要素22上で第1動作を再開するために、処理ブロック116、118、120および122に関して説明した動作が実行されてよく、機能は、異なる処理要素上でオプトインされてよく、異なる処理要素22は第1動作を実行するよう利用されてよい。
処理100及び処理150が機能をオプトインするアプリケーション20との関連で説明される一方、処理100及び処理150は、カーネルモードにおいて動作する間にオプトインが発生する場合に実行されてよいことに留意されたい。例えば、カーネルAPI70は、カーネル機能制御レジスタ36の1又は複数のビットに、ユーザ機能制御レジスタ32に対して前述した同様の方式で修正させることにより、カーネルモードにおいて動作している場合に、機能をオプトインするために利用されてよい。さらに、同様の処理が、機能をオプトアウトするために実行されてよいことに留意されたい。例えば、機能をオプトアウトするために、アプリケーション20は、アプリケーション20がもはや使用を望まない機能(例えば、オプトアウトする機能)を列挙してよく、OS API62をコールしてオプトアウトを実行してよい。OS API62は、例えば、命令をデコーダ66に提供し、実行ユニット68にユーザ機能制御レジスタ32のビットが修正されるよう命令させることにより、ユーザ機能制御レジスタ32のビットを(例えば、値をオプトアウトするために)修正させてよい。機能状態レジスタ38は、ビットが首尾よく修正されたことを示す値を返してよい。OS API62は、機能状態レジスタ38により提供される値をチェックして、ビットが修正されたことを確認し、それにより、機能がオプトアウトされていることを示してよい。OS API62は、機能がオプトアウト(例えば、正常にオプトアウト)されていることをアプリケーション20に示してもよい。
さらに、処理動作は特定の順序で説明されているが、上にある動作の処理が必要に応じて実行される限り、他の動作が説明される動作の間で実行されてよく、説明される動作が調整されて、これにより、それらが僅かに異なる時間で発生してよく又は説明される動作が、処理に関連する様々な間隔で処理動作が出現するのを許可するシステムに割り当てられてよいことを理解されたい。
さらに、機能のオプトイン及びオプトアウトがシングルプロセッサ(例えば、プロセッサ12)との関連で前述されているが、本明細書で説明される技術は、例えば、互いに通信可能に結合されるマルチプロセッサを含むシステムに適用されてよい。例えば、2つのプロセッサを含むシステムにおいて、1つのプロセッサは、第1命令セットアーキテクチャを提供することができてよく(例えば、第1機能に対応するそれ)、別のプロセッサが、第2機能に対応する第2命令セットアーキテクチャを提供してよい。第1プロセッサ上で実行されているプログラム(例えば、プロセッサがユーザモードで動作しているときに使用されるアプリケーション又はプロセッサがカーネルモードで動作しているときに使用されるソフトウェア)は、命令セットアーキテクチャ(例えば、機能)を使用することをリクエストしてよい。第1プロセッサがリクエストされた命令セットアーキテクチャをサポートせず、第2プロセッサがリクエストされた命令セットアーキテクチャをサポートする場合に、処理(例えば、特定の決定をリクエストするプログラミングスレッド又はオプトインを実行する必要のある計算)が、第2プロセッサに提供されてよく、オプトインが第2プロセッサ上で実行されてよい。
オプトインの後、第2プロセッサは、処理(例えば、ソフトウェアスレッド)を実行してよい。
従って、例えば、ソフトウェアが、リクエストされた機能を提供できるプロセッサ又はこれらの一部によって実行される場合に、本明細書で説明される技術は、1又は複数のプロセッサ上で実行されるソフトウェアを有効化して、システムコールを使用することなく機能をオプトイン及びオプトアウトしてよい。例えば、プロセッサのユーザモードに関連するソフトウェア及びプロセッサのカーネルモードに関連するソフトウェアの両方は、プロセッサの機能制御レジスタの値ビットが特定の機能(例えば、命令セットアーキテクチャ)を有効化及び無効化させてよい。システムコールは、リクエストされた機能を利用するためにソフトウェアを有効化する必要がないので、プロセッサ上で発生するシステムコールの数が減少されてよく、それにより、プロセッサを有効化してより効率的に動作させてよい。
本開示に記載される実施形態は、様々な修正及び代替形態の影響を受けやすく、特定の実施形態が、例として図面に示され、本明細書で詳細に説明されている。しかしながら、本開示は、開示された特定の形態に限定されることを意図されないことが理解され得る。本開示は、以下の添付の特許請求の範囲によって定義されるように、本開示の趣旨及び範囲に含まれるすべての修正、等価物、及び代替物を網羅するものである。さらに、本明細書で提示及び主張される技術は、現在の技術分野を明らかに改善する、実際の性質の材料対象及び具体例に参照及び適用されており、抽象的、無形、または純粋に理論的ではない。さらに、本明細書の末尾に添付された請求項が、「[関数]を[実行]するための手段…」又は「[関数]を[実行]するためのステップ…」として指定された1又は複数の要素を含む場合、そのような要素は米国特許法第112条(f)の下で解釈されるべきであることを意図する。しかしながら、他の方式で指定された要素を含む請求項については、そのような要素は米国特許法第112条(f)に基づいて解釈されるものではないことを意図する。
本明細書によれば、以下の各項目に記載の構成もまた開示される。
[項目1]
プロセッサであって、
1又は複数の命令セットアーキテクチャに関連する1又は複数の処理要素を備え、前記プロセッサは、
前記1又は複数の処理要素の第1処理要素により実行されるアプリケーションからリクエストを受信し、命令セットアーキテクチャに関連する機能を有効化する、及び、
前記機能が前記第1処理要素に関連する命令セットアーキテクチャに関連する場合にシステムコールを発生することなく前記アプリケーションが前記機能を利用できるようにする、
ように構成される、プロセッサ。
[項目2]
前記1又は複数の処理要素は、第2処理要素を含み、
前記第1処理要素は、前記1又は複数の命令セットアーキテクチャの第1サブセットに関連し、
前記第2命令セットアーキテクチャは、前記1又は複数の命令セットアーキテクチャの前記第1サブセットと異なる前記1又は複数の命令セットアーキテクチャの第2のサブセットに関連する、
項目1に記載のプロセッサ。
[項目3]
前記プロセッサにより実行されるオペレーティングシステムがアプリケーションに利用を許可する複数の機能を示す複数のビットを含む機能有効化マスクレジスタであり、前記複数の機能は前記機能を含む、機能有効化マスクレジスタと、
前記第1処理要素が現在、前記アプリケーションが前記機能を利用できるように構成されているか否かを示す少なくとも1つのビットを含む機能制御レジスタと、
を備える、項目1に記載のプロセッサ。
[項目4]
前記プロセッサは、
前記第1処理要素が、前記機能有効化マスクレジスタの前記複数のビットに基づいて前記機能を提供することができるか否か判断し、
前記機能制御レジスタの前記少なくとも1つのビットのビット値を少なくとも変更させることにより、前記アプリケーションが前記機能を利用できるようにする、
よう構成される、項目3に記載のプロセッサ。
[項目5]
前記少なくとも1つのビット値への前記変更が発生したか否かを示すよう構成される機能状態レジスタを備える、項目4に記載のプロセッサ。
[項目6]
前記第1処理要素が前記機能を提供することができないことの判断に応答して、前記プロセッサは、
前記第2処理要素が前記機能を提供できるか否かを判断し、
前記リクエストに関連するソフトウェアスレッドを、前記第2処理要素により対処させ、
前記第2処理要素に前記機能を提供させる、
ように構成される、項目4に記載のプロセッサ。
[項目7]
前記プロセッサは、
前記アプリケーションが前記機能を使用可能となった後、前記第1処理要素を使用して、前記アプリケーションに関連する第1ソフトウェアスレッドの処理を開始し、
前記第1処理要素を使用して、第2ソフトウェアスレッドを処理し、
前記機能制御レジスタの前記少なくとも1つのビットの現在値に基づいて、前記第1処理要素が、前記アプリケーションが前記機能を利用できるように構成されているか否かを判断し、
前記第1ソフトウェアスレッドの処理を再開する、
ように構成される、項目4に記載のプロセッサ。
[項目8]
前記第1処理要素が、前記アプリケーションが前記機能を利用できるように構成されていると判断すると、前記第1処理要素を利用すること、及び、
前記第1処理要素が、前記アプリケーションが前記機能を利用できるように構成されていないと判断すると、前記第2処理要素を利用すること、
により、前記プロセッサは、前記第1ソフトウェアスレッドの処理を再開するように構成される、項目7に記載のプロセッサ。
[項目9]
前記プロセッサは、マイクロプロセッサを備え、
前記1又は複数の処理要素は、前記マイクロプロセッサの1又は複数のコアを含む、項目1に記載のプロセッサ。
[項目10]
実行されると、プロセッサに、
前記プロセッサの第1処理要素により実行されるアプリケーションからリクエストを受信して、命令セットアーキテクチャによりサポートされる機能を有効化にする手順であり、前記第1処理要素は、第1命令セットアーキテクチャに関連し、前記プロセッサの第2処理要素は、第2命令セットアーキテクチャに関連する、手順と、
前記機能が前記第1命令セットアーキテクチャによりサポートされている場合、システムコールを発生することなく、前記アプリケーションが前記機能を利用できるようにする手順と、
を実行させるように構成された命令を備える非一時的コンピュータ可読媒体。
[項目11]
前記プロセッサは、前記プロセッサのユーザモードに関連する1又は複数のユーザモードレジスタ及び前記プロセッサのカーネルモードに関連する1又は複数のモデル固有レジスタを備える、項目10に記載の非一時的コンピュータ可読媒体。
[項目12]
前記1又は複数のモデル固有レジスタは、前記プロセッサにより実行されるオペレーティングシステムがアプリケーションに利用を許可する複数の機能を示す複数のビットを含む機能有効化マスクレジスタを含み、前記複数の機能は前記機能を含み、
前記1又は複数のユーザモードレジスタは、前記プロセッサが前記ユーザモードで動作している場合に、前記第1処理要素が現在、前記機能を提供するように構成されているか否かを示す少なくとも1つのビットを含む機能制御レジスタを含む、
項目11に記載の非一時的コンピュータ可読媒体。
[項目13]
前記1又は複数のモデル固有レジスタは、前記プロセッサが前記カーネルモードで動作している場合に、前記第1処理要素が現在、前記機能を提供するよう構成されているか否かを示す1又は複数のビットを含むカーネル機能制御レジスタを含む、項目12に記載の非一時的コンピュータ可読媒体。
[項目14]
前記命令は、前記プロセッサに、前記第1処理要素が前記複数のビットの少なくとも1つのビット値に基づいて前記機能をサポートするか否かを判断させるよう構成される、項目12に記載の非一時的コンピュータ可読媒体。
[項目15]
前記命令は、実行されると、前記第1処理要素が、前記機能をサポートしない、又は前記アプリケーションが前記機能を利用できるように構成されていない場合に、フォールトを発生させるよう構成される、項目10に記載の非一時的コンピュータ可読媒体。
[項目16]
前記アプリケーションは、ユーザモードアプリケーションである、項目10に記載の非一時的コンピュータ可読媒体。
[項目17]
命令セットアーキテクチャに関連する機能を利用するためにリクエストを受信する段階であり、前記リクエストは、ソフトウェアスレッドを含む又はそれに含まれる、段階と、
前記リクエストを受信することに応答して、アプリケーションプログラミングインタフェースを介して、システムコールを実行することなく、前記機能に関連するレジスタのビットの修正をリクエストする段階と、
前記ソフトウェアスレッドを処理している処理要素が前記機能をサポートするか否か判断する段階と、
前記処理要素が前記機能をサポートする場合に、前記レジスタの前記ビットを修正させることによって、前記機能がアプリケーションにより利用されることを許可する段階と、
を含むプロセッサ実装方法。
[項目18]
前記アプリケーションプログラミングインタフェースによって、前記ビットが修正されているか否か判断する段階と、
前記アプリケーションが前記機能を利用し得る前記リクエストを送信した前記アプリケーションに指示を提供する段階と、
を備える、項目17に記載のプロセッサ実装方法。
[項目19]
第2レジスタの1又は複数のビットが、前記ビットが修正されていることを示すか否か判断することにより、前記ビットが修正されているか否かを判断する段階を備える、項目17に記載のプロセッサ実装方法。
[項目20]
前記処理要素は、プロセッサのコアを含む、項目17に記載のプロセッサ実装方法。

Claims (26)

  1. プロセッサであって、
    1又は複数の命令セットアーキテクチャに関連する1又は複数の処理要素を備え、前記プロセッサは、
    前記1又は複数の処理要素の第1処理要素により実行されるアプリケーションからリクエストを受信し、命令セットアーキテクチャに関連する機能を有効化する、及び、
    前記機能が前記第1処理要素に関連する命令セットアーキテクチャに関連する場合にシステムコールを発生することなく前記アプリケーションが前記機能を利用できるようにする、
    ように構成される、プロセッサ。
  2. 前記1又は複数の処理要素は、第2処理要素を含み、
    前記第1処理要素は、前記1又は複数の命令セットアーキテクチャの第1サブセットに関連し、
    前記第2処理要素は、前記1又は複数の命令セットアーキテクチャの前記第1サブセットと異なる前記1又は複数の命令セットアーキテクチャの第2のサブセットに関連する、
    請求項1に記載のプロセッサ。
  3. 前記プロセッサにより実行されるオペレーティングシステムが前記アプリケーションに利用を許可する複数の機能を示す複数のビットを含む機能有効化マスクレジスタであり、前記複数の機能は前記機能を含む、機能有効化マスクレジスタと、
    前記第1処理要素が現在、前記アプリケーションが前記機能を利用できるように構成されているか否かを示す少なくとも1つのビットを含む機能制御レジスタと、
    を備える、請求項2に記載のプロセッサ。
  4. 前記プロセッサは、
    前記第1処理要素が、前記機能有効化マスクレジスタの前記複数のビットに基づいて前記機能を提供することができるか否か判断し、
    前記機能制御レジスタの前記少なくとも1つのビットの少なくとも1つのビット値を変更させることにより、前記アプリケーションが前記機能を利用できるようにする、
    よう構成される、請求項3に記載のプロセッサ。
  5. 前記少なくとも1つのビット値への前記変更が発生したか否かを示すよう構成される機能状態レジスタを備える、請求項4に記載のプロセッサ。
  6. 前記第1処理要素が前記機能を提供することができないことの判断に応答して、前記プロセッサは、
    前記第2処理要素が前記機能を提供できるか否かを判断し、
    前記リクエストに関連するソフトウェアスレッドを、前記第2処理要素により対処させ、
    前記第2処理要素に前記機能を提供させる、
    ように構成される、請求項4に記載のプロセッサ。
  7. 前記プロセッサは、
    前記アプリケーションが前記機能を使用可能となった後、前記第1処理要素を使用して、前記アプリケーションに関連する第1ソフトウェアスレッドの処理を開始し、
    前記第1処理要素を使用して、第2ソフトウェアスレッドを処理し、
    前記機能制御レジスタの前記少なくとも1つのビットの現在値に基づいて、前記第1処理要素が、前記アプリケーションが前記機能を利用できるように構成されているか否かを判断し、
    前記第1ソフトウェアスレッドの処理を再開する、
    ように構成される、請求項4に記載のプロセッサ。
  8. 前記第1処理要素が、前記アプリケーションが前記機能を利用できるように構成されていると判断すると、前記第1処理要素を利用すること、及び、
    前記第1処理要素が、前記アプリケーションが前記機能を利用できるように構成されていないと判断すると、前記第2処理要素を利用すること、
    により、前記プロセッサは、前記第1ソフトウェアスレッドの処理を再開するように構成される、請求項7に記載のプロセッサ。
  9. 前記プロセッサは、マイクロプロセッサを備え、
    前記1又は複数の処理要素は、前記マイクロプロセッサの1又は複数のコアを含む、請求項1から8のいずれか一項に記載のプロセッサ。
  10. 実行されると、プロセッサに、
    前記プロセッサの第1処理要素により実行されるアプリケーションからリクエストを受信して、命令セットアーキテクチャによりサポートされる機能を有効化にする手順であり、前記第1処理要素は、第1命令セットアーキテクチャに関連し、前記プロセッサの第2処理要素は、第2命令セットアーキテクチャに関連する、手順と、
    前記機能が前記第1命令セットアーキテクチャによりサポートされている場合、システムコールを発生することなく、前記アプリケーションが前記機能を利用できるようにする手順と、
    を実行させるように構成された命令を備えるプログラム。
  11. 前記プロセッサは、前記プロセッサのユーザモードに関連する1又は複数のユーザモードレジスタ及び前記プロセッサのカーネルモードに関連する1又は複数のモデル固有レジスタを備える、請求項10に記載のプログラム。
  12. 前記1又は複数のモデル固有レジスタは、前記プロセッサにより実行されるオペレーティングシステムが前記アプリケーションに利用を許可する複数の機能を示す複数のビットを含む機能有効化マスクレジスタを含み、前記複数の機能は前記機能を含み、
    前記1又は複数のユーザモードレジスタは、前記プロセッサが前記ユーザモードで動作している場合に、前記第1処理要素が現在、前記機能を提供するように構成されているか否かを示す少なくとも1つのビットを含む機能制御レジスタを含む、
    請求項11に記載のプログラム。
  13. 前記1又は複数のモデル固有レジスタは、前記プロセッサが前記カーネルモードで動作している場合に、前記第1処理要素が現在、前記機能を提供するよう構成されているか否かを示す1又は複数のビットを含むカーネル機能制御レジスタを含む、請求項12に記載のプログラム。
  14. 前記命令は、前記プロセッサに、前記第1処理要素が前記複数のビットの少なくとも1つのビット値に基づいて前記機能をサポートするか否かを判断させるよう構成される、請求項12に記載のプログラム。
  15. 前記命令は、実行されると、前記第1処理要素が、前記機能をサポートしない、又は前記アプリケーションが前記機能を利用できるように構成されていない場合に、フォールトを発生させるよう構成される、請求項10に記載のプログラム。
  16. 前記アプリケーションは、ユーザモードアプリケーションである、請求項10から15のいずれか一項に記載のプログラム。
  17. 命令セットアーキテクチャに関連する機能を利用するためにリクエストを受信する段階であり、前記リクエストは、ソフトウェアスレッドを含む又はそれに含まれる、段階と、
    前記リクエストを受信することに応答して、アプリケーションプログラミングインタフェースを介して、システムコールを実行することなく、前記機能に関連するレジスタのビットの修正をリクエストする段階と、
    前記ソフトウェアスレッドを処理している処理要素が前記機能をサポートするか否か判断する段階と、
    前記処理要素が前記機能をサポートする場合に、前記レジスタの前記ビットを修正させることによって、前記機能がアプリケーションにより利用されることを許可する段階と、
    を含むプロセッサ実装方法。
  18. 前記アプリケーションプログラミングインタフェースによって、前記ビットが修正されているか否か判断する段階と、
    前記アプリケーションが前記機能を利用し得る前記リクエストを送信した前記アプリケーションに指示を提供する段階と、
    を備える、請求項17に記載のプロセッサ実装方法。
  19. 第2レジスタの1又は複数のビットが、前記ビットが修正されていることを示すか否か判断することにより、前記ビットが修正されているか否かを判断する段階を備える、請求項17に記載のプロセッサ実装方法。
  20. 前記処理要素は、プロセッサのコアを含む、請求項17から19のいずれか一項に記載のプロセッサ実装方法。
  21. アプリケーションを実行するための第1処理手段と、
    機能が前記第1処理手段に関連する命令セットアーキテクチャに関連する場合に、命令セットアーキテクチャに関連する前記機能を有効化し、システムコールを発生することなく前記アプリケーションが前記機能を利用できるようにするための手段と、
    を備えるプロセッサ。
  22. 前記プロセッサは、第2処理手段を備え、前記第1処理手段は、第1命令セットアーキテクチャに関連し、前記第2処理手段は、前記第1命令セットアーキテクチャと異なる第2命令セットアーキテクチャに関連する、請求項21に記載のプロセッサ。
  23. 前記プロセッサにより実行されるオペレーティングシステムが前記アプリケーションに利用を許可する複数の機能を示すための手段であり、前記複数の機能は前記機能を含む、手段と、
    第1プロセッサコアが現在、前記アプリケーションが前記機能を利用できるように構成されるか否かを示す手段と、
    を備える、請求項22に記載のプロセッサ。
  24. 第1命令セットアーキテクチャに関連する第1プロセッサコアと、
    第2命令セットアーキテクチャに関連する第2プロセッサコアと、
    前記第1プロセッサコア、前記第2プロセッサコア、又は両方により実行されるオペレーティングシステムが、前記第1プロセッサコア上で実行されるアプリケーションに利用を許可する複数の機能を示す複数のビットを含む機能有効化マスクレジスタと、
    前記アプリケーションからリクエストされると、第1処理要素が現在、前記アプリケーションに前記複数の機能のうちの機能を利用できるように構成されるか否かを示す少なくとも1つのビットを含む機能制御レジスタと、
    を備えるシステム。
  25. 前記機能制御レジスタの前記少なくとも1つのビットの変更が発生したか否かを示すように構成される機能状態レジスタを備える、請求項24に記載のシステム。
  26. 請求項10から16のいずれか一項に記載のプログラムを格納する非一時的コンピュータ可読媒体。
JP2020105539A 2019-09-27 2020-06-18 ヘテロisaプラットフォーム上の高度な機能へのハードウェア及びソフトウェア協調オプトインの方法 Pending JP2021057007A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/586,706 2019-09-27
US16/586,706 US11409572B2 (en) 2019-09-27 2019-09-27 Methods of hardware and software coordinated opt-in to advanced features on hetero ISA platforms

Publications (1)

Publication Number Publication Date
JP2021057007A true JP2021057007A (ja) 2021-04-08

Family

ID=71143549

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2020105539A Pending JP2021057007A (ja) 2019-09-27 2020-06-18 ヘテロisaプラットフォーム上の高度な機能へのハードウェア及びソフトウェア協調オプトインの方法

Country Status (5)

Country Link
US (2) US11409572B2 (ja)
EP (1) EP3798826A1 (ja)
JP (1) JP2021057007A (ja)
CN (1) CN112579162A (ja)
TW (1) TWI842919B (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US12026555B2 (en) * 2020-12-15 2024-07-02 International Business Machines Corporation Adjunct processor command-type filtering
US12014203B2 (en) * 2021-11-23 2024-06-18 VMware LLC Communications across privilege domains within a central processing unit core
US12008372B2 (en) * 2022-07-21 2024-06-11 VMware LLC Techniques for reducing CPU privilege boundary crossings

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8122229B2 (en) 2007-09-12 2012-02-21 Convey Computer Dispatch mechanism for dispatching instructions from a host processor to a co-processor
US8205066B2 (en) 2008-10-31 2012-06-19 Convey Computer Dynamically configured coprocessor for different extended instruction set personality specific to application program with shared memory storing instructions invisibly dispatched from host processor
US9311102B2 (en) * 2010-07-13 2016-04-12 Advanced Micro Devices, Inc. Dynamic control of SIMDs
MX2013002773A (es) * 2010-09-16 2013-04-05 Apple Inc Controlador de memoria con multiples puertos con puertos asociados con las clases de trafico.
WO2013101139A1 (en) 2011-12-30 2013-07-04 Intel Corporation Providing an asymmetric multicore processor system transparently to an operating system
US9361116B2 (en) * 2012-12-28 2016-06-07 Intel Corporation Apparatus and method for low-latency invocation of accelerators
US9417873B2 (en) * 2012-12-28 2016-08-16 Intel Corporation Apparatus and method for a hybrid latency-throughput processor
US20150007196A1 (en) 2013-06-28 2015-01-01 Intel Corporation Processors having heterogeneous cores with different instructions and/or architecural features that are presented to software as homogeneous virtual cores
US9720661B2 (en) * 2014-03-31 2017-08-01 International Businesss Machines Corporation Selectively controlling use of extended mode features
US11182315B2 (en) 2017-02-10 2021-11-23 Intel Corporation Apparatuses, methods, and systems for hardware control of processor performance levels
US10545793B2 (en) 2017-09-29 2020-01-28 Intel Corporation Thread scheduling using processing engine information

Also Published As

Publication number Publication date
CN112579162A (zh) 2021-03-30
TWI842919B (zh) 2024-05-21
US20220374278A1 (en) 2022-11-24
TW202113588A (zh) 2021-04-01
US11734079B2 (en) 2023-08-22
EP3798826A1 (en) 2021-03-31
US11409572B2 (en) 2022-08-09
US20210096908A1 (en) 2021-04-01

Similar Documents

Publication Publication Date Title
JP2021057007A (ja) ヘテロisaプラットフォーム上の高度な機能へのハードウェア及びソフトウェア協調オプトインの方法
US6209085B1 (en) Method and apparatus for performing process switching in multiprocessor computer systems
US9104425B2 (en) Apparatus and method for handling exception events
US7802252B2 (en) Method and apparatus for selecting the architecture level to which a processor appears to conform
KR101249693B1 (ko) 서브루틴 복귀 메카니즘 선택
GB2482701A (en) Detecting and suppressing illegal mode changes in a data processing system
KR102599689B1 (ko) 예외 마스크 갱신 명령 후 트랜잭션의 비중지 처리의 허가
JP2006092042A (ja) 情報処理装置及びコンテキスト切り替え方法
US20180267829A1 (en) Method for configuring an it system, corresponding computer program and it system
KR100498486B1 (ko) 쓰레드 바이너리 컴파일러에 의하여 프로그램에서 여러개의 쓰레드를 다이내믹하게 추출하는 컴퓨터 시스템 및그 동시 다중 쓰레딩 방법
US7890740B2 (en) Processor comprising a first and a second mode of operation and method of operating the same
US11144329B2 (en) Processor microcode with embedded jump table
US8732721B2 (en) Method for reducing trap overhead when executing a guest in a virtual machine
JP2694948B2 (ja) マイクロプログラム処理装置
JP2011070290A (ja) データプロセッサ
US12008372B2 (en) Techniques for reducing CPU privilege boundary crossings
JP7276755B2 (ja) 処理速度整合回路およびマイクロプロセッサ
JPH06324861A (ja) Cpu制御システム及び制御方法
JP7444610B2 (ja) コンテキスト・データ管理
JP4151497B2 (ja) パイプライン処理装置
JPH1021067A (ja) プログラムの動的修正方法
JPH10240702A (ja) 並列処理プロセッサおよびその処理方法
JPS6231432A (ja) マイクロ命令のモデイフアイ方式

Legal Events

Date Code Title Description
A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20230419

A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20230612

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20240522

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20240625

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20240819