JP2010287254A - タスクのスケジューリングを支援する装置 - Google Patents

タスクのスケジューリングを支援する装置 Download PDF

Info

Publication number
JP2010287254A
JP2010287254A JP2010186585A JP2010186585A JP2010287254A JP 2010287254 A JP2010287254 A JP 2010287254A JP 2010186585 A JP2010186585 A JP 2010186585A JP 2010186585 A JP2010186585 A JP 2010186585A JP 2010287254 A JP2010287254 A JP 2010287254A
Authority
JP
Japan
Prior art keywords
coprocessor
memory
context
buffer
task
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
JP2010186585A
Other languages
English (en)
Other versions
JP5335743B2 (ja
Inventor
Anuj B Gosalia
ビー.ゴサリア アヌジ
Steve Pronovost
プロノボスト スティーブ
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.)
Microsoft Corp
Original Assignee
Microsoft 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 Microsoft Corp filed Critical Microsoft Corp
Publication of JP2010287254A publication Critical patent/JP2010287254A/ja
Application granted granted Critical
Publication of JP5335743B2 publication Critical patent/JP5335743B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

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/5038Allocation 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 the execution order of a plurality of tasks, e.g. taking priority or time dependency constraints into consideration
    • 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/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • 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
    • 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/461Saving or restoring of program or task context
    • 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/54Interprogram communication
    • G06F9/544Buffers; Shared memory; Pipes
    • 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/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Advance Control (AREA)
  • Image Processing (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】 GPU内のコンテキスト切り替えを効率的にサポートするシステムおよび方法を提供すること。
【解決手段】 コプロセッサの処理をスケジューリングし、これによって、アプリケーションが、スケジューラにタスクをサブミットでき、スケジューラが、各アプリケーションが資格を与えられる処理の量および処理の順序を判定できる、システムおよび方法を提供する。この目的に関して、処理を必要とするタスクを、メモリマネージャによって管理される物理メモリまたは仮想メモリに保管することができる。本発明は、特定のタスクが処理の準備ができているかどうかを判定するさまざまな技法も提供する。「実行リスト」を使用して、コプロセッサが、タスクの間または割込みの後で時間を浪費しないことを保証することができる。
【選択図】 図2

Description

本発明は、コンピュータプロセッサに関し、具体的には、コプロセッサの処理をスケジューリングするハードウェアおよびソフトウェアに関する。
多くのコンピュータシステムに、現在、コプロセッサ、たとえばグラフィックス処理ユニット(GPU)が含まれる。コプロセッサは、マイクロプロセッサなどの中央処理装置(CPU)と共にシステムのマザーボード上にある場合があり、別々のグラフィックスカードにある場合がある。コプロセッサは、その処理タスクを実行する際に、しばしば、補助メモリ、たとえばビデオメモリにアクセスする。現在のコプロセッサは、しばしば、ゲームおよびコンピュータ支援設計(CAD)などのアプリケーションをサポート(支援)するために3次元グラフィックス計算を実行するように最適化される。現在のコンピュータシステムおよびコプロセッサは、単一のグラフィック集中型アプリケーションを実行するときに適当に動作するが、複数のグラフィック集中型アプリケーションを実行するときに、問題が生じる場合がある。
これの理由の1つが、通常のコプロセッサが、作業負荷を効率的にスケジューリングする能力を有しないことである。現在のコプロセッサによって、通常は、協力的マルチタスキングが実施されるが、これは、現在コプロセッサを制御しているアプリケーションが、他のアプリケーションに制御を与えなければならないタイプのマルチタスキングである。アプリケーションは、制御を放棄できない場合に、効果的にコプロセッサを「独占する」ことができる。単一のグラフィック集中型プログラムを実行するときには、これは大きな問題ではなかったが、コプロセッサを独占するという問題は、複数のアプリケーションがコプロセッサの使用を試みるときに深刻になる。
動作の間で処理を配分するという問題は、複数の動作の洗練されたスケジューリングが必要になるCPUに関して対処されてきたが、コプロセッサのスケジューリングは、有効に対処されなかった。これは、コプロセッサが、一般に、現在のシステムにおいて、計算的に重く時間がかかる動作をCPUからそらし、CPUに他の機能のためのより多くの処理時間を与えるためのリソースとみなされるからである。そのような計算的に重い動作は、しばしば、グラフィックス動作であり、これは、かなりの処理能力を必要とすることがわかっている。アプリケーションの洗練度が高まるにつれて、アプリケーションは、しばしば、堅牢な計算アクティビティを処理するために、コプロセッサにさらに頼ることを必要とする。この信頼の増加によって、コプロセッサリソースの知的な配分に含まれる技術的障壁を打破する、まだ予測されていない必要が生じる。これらおよび他の理由から、コプロセッサタスクおよびコプロセッサリソースの他の使用を効率的にスケジューリングするシステムおよび方法が望ましい。
この理由から、GPU内のコンテキスト切り替えを効率的にサポートするシステムおよび方法が望ましい。
一実施形態では、そのようなシステムおよび方法によって、コプロセッサコンテキストごとのアドレス空間が使用される。コプロセッサによって、通常は、専用のグラフィックスメモリ(たとえばグラフィックスカード上のメモリ)、またはGPUの使用のために割り当てられたコンピュータのメインシステムメモリの一部、あるいはこの2つの組合せが使用される。コプロセッサごとのコンテキストアドレス空間を有するシステムでは、アプリケーションまたはスレッドのそれぞれにそれ自体のメモリのビューを与えるようにGPUを構成することができる。たとえば、メモリにロードされるテクスチャのアドレスは、特定のアプリケーションがそのテクスチャを必要とする限り、一定のままにすることができる。
本発明のさまざまな実施形態によれば、処理を必要とするさまざまなタスクの間での切り替えをサポートすることによって、コプロセッサが、まず高優先順位のタスクを扱い、複数のタスクの間で処理を配分することができる。複数のグラフィック集中型アプリケーションを実行するときに、コプロセッサによって、複数のアプリケーションをサービスするためにコンテキストをシフトすることができる。本発明を用いると、さらに、アプリケーションごとに、処理を必要とするタスクのリスト、たとえばキューを維持できるようになる。これらのタスクを、スケジューラにサブミットすることができ、スケジューラは、各アプリケーションがどれほどの処理を受け取る資格を与えられるかを決定することができる。この処理に関して、システムは、実際の物理メモリ内またはメモリマネージャによって管理される仮想メモリ内でタスクリストを維持することができる。特定のタスクが処理の準備ができているかどうか、またはメモリリソースのミスアライメント(misalignment)に起因してフォールト(fault)が発生する可能性が高いかどうかを判定する、さまざまな技法も提供される。「実行リスト(run list)」を使用して、タスクの間または割込みの後にコプロセッサが待たないことを保証することができる。本発明は、アプリケーションが、メモリのうちで主要なシステム動作の正しい機能を維持するために必要な部分を修正できなくすることによって、コンピュータシステムのセキュリティを保証する技法も提供する。本発明の上記および他の態様および長所を、下で詳細に説明する。
コプロセッサに関する処理をスケジューリングする従来技術の手法を示す概念図である。 本発明によるコプロセッサスケジューリングの改善を示す例示的な図である。 概念的に図2に示されたスケジューリングの改善をもたらすのに用いられるコンピューティングコンポーネントを示すより詳細な図である。 図3のステップを機能シーケンスに組み合わせるさまざまな非制限的な可能な方法を示す擬似コードアルゴリズムを示す図である。 図3のステップを機能シーケンスに組み合わせるさまざまな非制限的な可能な方法を示す擬似コードアルゴリズムを示す図である。 スケジューラが、提供される情報を使用して、本発明による直接メモリアクセス(DMA)バッファ内で使用されるメモリリソースのタイムラインを定義する方法を示す図である。 本発明による準備ワーカースレッドと補助メモリマネージャの間の動きを示すアルゴリズムを示す図である。 本発明による、ページングバッファを準備し、ページングバッファに関するCPU前処理を処理するワーカースレッドを示すページングバッファの準備を示す例示的な図である。 本発明による、ページングバッファ内のフェンスの処理を含む、ワーカースレッド内で行うことができるイベントのチェーンを表すアルゴリズムを示す図である。 コプロセッサコンテキストの仮想アドレス空間を提供でき、さまざまなコプロセッサコンテキストの間で物理メモリを管理してコプロセッサコンテキストがメモリの公平な分け前を得られるようにすることができる、カーネルモードの補助メモリマネージャ「VidMm」を示す図である。 本発明による基本的なスケジューリングモデルを示す図である。 本発明による高度なスケジューリングモデルを示す図である。 高度なスケジューリングモデルを実施することができるアクションのシーケンスを例示的に示す図である。 高度なスケジューリングモデルを実施することができるアクションのシーケンスを例示的に示す図である。 可変長フラットページテーブルと共に本発明の使用を示す図である。 マルチレベルページテーブルと共に本発明の使用を示す図である。 サーフェスレベルフォールトをサポートする高度なスケジューリングモデルと共にスケジューラによって維持される例示的処理を示す図である。 本発明と共にサーフェスレベルフォールトが実施されるときに同時に処理することができる、それぞれがそれ自体のDMAリングを有する複数のコンテキストを示す図である。 図16の構成要素と共に本発明の動作を示す、有用であることを示すことができるさまざまな追加の特徴を含む擬似コードアルゴリズムを示す図である。 図16の構成要素と共に本発明の動作を示す、有用であることを示すことができるさまざまな追加の特徴を含む擬似コードアルゴリズムを示す図である。 図16の構成要素と共に本発明の動作を示す、有用であることを示すことができるさまざまな追加の特徴を含む擬似コードアルゴリズムを示す図である。 本発明による実行リストの使用を概念的に著す図である。 本発明に従って使用されるスケジューラによって読取可能な指定されたシステムメモリ位置にコンテキスト切り替えヒストリを書き込むことができるハードウェアの動作を示す図である。 特権的コマンドをコプロセッサコンテキストリングに直接に挿入することによって特権的DMAチャネルをサポートするハードウェア手法を示す図である。 間接参照コマンドのビットがリングバッファに挿入される、コプロセッサでの限定DMAバッファ対特権的DMAバッファのサポートの手法を示す図である。 現在のディスプレイサーフェスに関してコプロセッサに照会する方法を示す図である。 即時フリップが本発明と共に使用されるときのフリップのキューイングに好ましい手法を示す図である。 2つまたはそれ以上のプロセッサがレンダリング中に有効な内容を使用できることを保証するためにリソースへのアクセスを同期化する例示的な技法を示す図である。 イベントヒストリバッファのさまざまな実施形態を示す図である。 補助メモリ内のどこにでもリダイレクトできるPCIアパーチャを使用する、コプロセッサコンテキストごとの仮想アドレス空間をサポートする好ましい方法を示す図である。
複数のそのようなシステムおよび方法が、Steve Pronovostにより2003年2月18日に提出された"Video Memory Manager Rectangular Heap"という名称の米国特許出願、Steve Pronovostにより2003年2月18日に提出された"Video Memory Manager Architecture"という名称の米国特許出願、Steve Pronovostにより2003年2月18日に提出された"GPU Scheduler Overview"という名称の米国特許仮出願第60/448402号明細書に記載されている。
本発明によって達成される複数の改善を、図1および図2の比較を介して概念的に示すことができる。図1に、コプロセッサに関するタスクスケジューリングの従来技術の手法を示す。さまざまなアプリケーション、たとえばアプリケーション1、アプリケーション2、およびアプリケーション3からアクセスできるバッファが設けられる。アプリケーションは、コプロセッサに関するタスクをバッファにロードすることができ、これらのタスクを、前にサブミットされたタスクが完了した後に、コプロセッサによって処理することができる。図からわかるように、この手法では、コプロセッサの潜在的な「独占(hogging)」が未解決のままである。図1では、アプリケーション1(APP.1)が、コプロセッサを独占している。APP.1は、コプロセッサが8つのタスクを扱うことを要求するが、他の2つのアプリケーションは、組み合わせても3つのタスクだけの操作を要求している。複数のアプリケーションがコプロセッサを必要とする、これに似た状況では、図2に示されたものなどのシステムによって、改善された機能性を提供することができる。
図2に、本発明によるシステムおよび方法を示すが、これによって、各アプリケーション、たとえばアプリケーション1、アプリケーション2、およびアプリケーション3が、それ自体のバッファすなわち、図2の「第1バッファ」を維持することができる。これらのバッファ(下では「コマンドバッファ」と称する)は、スケジューリングプロセスにサブミットされ、スケジューリングプロセスは、さまざまなタスクをコプロセッサに渡すときを決定することができる。図2に示すように、スケジューリングプロセスは、この例では、タスクを「第2バッファ」に挿入している。単純にするために、図2の「第2バッファ」を、単一のバッファとして図示する。しかし、実際には、図2の「第2バッファ」の機能を実行するために、複数のバッファが必要になる場合がある。図2の第2バッファによって、アプリケーション1がコプロセッサリソースを独占できないように、コプロセッサに渡されるタスクが分割されている。スケジューリングプロセスは、アプリケーション1のコプロセッサの第1タスクを許可し、次にアプリケーション2、次にアプリケーション3、次に再びアプリケーション1を許可している。
図2に概念的に示されたシステムおよび方法の実施形態は、図1に示されたものより複雑であるが、本明細書で開示される改善は、一般に、図2に示された基本概念をサポートする方向に向けられる。本発明の実施形態のより詳細な説明に移るが、参照を簡単にするために、下記の用語定義を示す。
コマンドバッファ − ユーザモードドライバによって構築されるバッファ。このバッファは、レンダリングアプリケーションのコンテキスト内で割り当てられる通常のページング可能メモリとすることができる。
DMAバッファ − 「直接メモリアクセス」バッファ。カーネルモードドライバによって構築されるバッファ。このバッファは、コマンドバッファの概念に基づくものとすることができる。一般に、このバッファは、カーネルページング可能メモリから割り当てられ、カーネルだけに可視である。これに関して、ページをコプロセッサが読み取れるようになる前に、ページをロックし、アパーチャを介してマッピングすることができる。
ページングバッファ − カーネルモードドライバによって構築されるバッファ。このバッファは、特定のDMAバッファに必要なメモリリソースのページイン、追出し、および移動に使用することができる。ページングバッファは、対応するDMAバッファの前に即座に実行されるように構成することができる。
リングバッファ − これは、コプロセッサコンテキスト固有のバッファである。DMAバッファへの指示を、このバッファに挿入することができる。これに関して、コプロセッサは、そのようなリングバッファから、実行されるコマンドをフェッチすることができる。リングバッファには、一般に、DMAバッファからのコマンド読取を開始し、DMAバッファが完全に処理されたならばリングバッファに戻るようにコプロセッサに指示するリダイレクション命令が含まれる。
補助メモリ − 一般に、コプロセッサによる使用専用であり、物理システムメモリの一部である必要がないメモリ。これは、たとえば、グラフィックスカードにあるローカルビデオメモリとすることができる。これは、システムメモリアパーチャを介してマッピングされたメモリなど、他のコプロセッサ可読メモリとすることもできる。このメモリは、通常は、統合型またはUMA式のグラフィックスデバイスには存在しない。このメモリは、GART様ページテーブルベースのアパーチャを介してアクセスされない。
システムメモリアパーチャ − これは、物理システムメモリのサブセットである。これは、GART様ページテーブルベースのアパーチャを介してコプロセッサに可視とすることができる。CPUは、システムメモリアパーチャと独立に物理システムメモリにアクセス可能とすることができる。概念的に類似する例が、アパーチャを介してアクセスされる、Accelerated Graphics Port(「AGP」)メモリ、Peripheral Component Interconnect(「PCI」)Expressメモリ、またはUnified Memory Architecture(「UMA」)メモリである。
本発明のさまざまな実施形態のより詳細な図を、図3に示す。図3は、概念的に図2に示された機能を提供するために組み合わせることができるさまざまなソフトウェアオブジェクトおよびハードウェアオブジェクトの概略図である。図3に、下で説明する一連のシーケンシャルステップが示されている。これらのステップは、本発明を明瞭に説明し、使用可能にするためにシーケンシャルに提示されるものであって、本発明の実践に必要なシーケンスを表すものと解釈するべきではない。順序は、当技術分野で既知のまたは将来に開発される実践に従って変更することができる。下の説明は、図3のシステムおよび方法の概要から始まり、図3のいくつかの態様のより詳細な説明に進む。
図3のステップ1は、アプリケーションプログラムインターフェース(「API」)へのアプリケーション呼出しを表す。アプリケーションは、ユーザにとってのソフトウェアを構成するファイルの任意の組とすることができる。APIは、通常は、オペレーティングシステムカーネルと通信するのにアプリケーションによって使用される言語およびメッセージフォーマットであるが、データベース管理システム(DBMS)などの他の制御プログラムとの通信のフォーマットまたは通信プロトコルも指す。本発明と共に使用される例示的なAPIの1つが、MICROSOFT(登録商標)社によって開発されたDirect3D Runtime APIである。
ステップ2は、APIからユーザモードドライバへの呼出しを表す。ユーザモードドライバは、一般に、ソフトウェアまたはハードウェアのいずれかとすることができる周辺サブルーチンへソフトウェアシステム(しばしばオペレーティングシステムである)をリンクすることができるプログラムルーチン(またはハードウェア)である。ここで、ユーザモードドライバは、ステップ1からの元の呼出しに対応するAPIパラメータを含めることができる、APIからの呼出しを受け取る。ステップ3は、ユーザモードドライバによって生成されるレンダリングコマンドの、コマンドバッファへの累積を表す。バッファは、中間リポジトリとしての使用のために予約されたメモリの領域である。データエリアおよびプロセッサまたはコプロセッサなどの2つの位置の間での処理のための転送を待っている間に、データを一時的にバッファに保持することができる。ユーザモードドライバによって生成されるコマンドバッファ内容の詳細は、下でさらに説明するように、ハードウェア固有DMAバッファへの変換を容易にするように選択することができる。また、コマンドバッファを定義する際に、「テクスチャ」または「頂点バッファ」などのメモリリソースへの直接メモリ参照を省略することが有用である場合がある。その代わりに、独立ハードウェアベンダ(「IHV」)が、任意選択としてハンドルを含むコマンドバッファを定義することができ、カーネルインターフェースによって、メモリリソースが作成される時にコマンドバッファへのメモリ参照を提供することができる。
ステップ4は、コマンドバッファのフラッシュを表す。「フラッシュ」は、単純に、累積されたレンダリングコマンドについてコマンドバッファを空にすることを指す。レンダリングコマンドは、図3に示されたコプロセッサカーネルに渡すために、図示のようにAPIに送り返すことができる。フラッシュは、コマンドバッファが満杯になり、着信レンダリングコマンドの空きが必要であるため、即時処理を必要とする高優先順位レンダリングコマンドがコマンドバッファに存在するため、などを含むがこれに制限されない理由で行うことができる。
ステップ5は、APIによる、コプロセッサカーネルへの累積されたコマンドバッファのフラッシュを表す。カーネルは、一般に、オペレーティングシステムの中核部分すなわち、任意選択としてメモリ、ファイル、および周辺デバイスを管理し、アプリケーションを起動でき、システムリソースを割り当てることができる部分として知られる。コプロセッサカーネルを、プライマリシステムカーネル、または別々のコプロセッサ固有のカーネル、あるいは、たとえば、MICROSOFT(登録商標)DirectX Kernel(「DXG」)などの特定のタイプのカーネルを含む、任意のタイプのカーネルとすることができることを諒解されたい。
ステップ6は、カーネルモードドライバへのコマンドバッファのサブミットを表す。コプロセッサカーネル。コプロセッサカーネルは、コマンドバッファをカーネルモードドライバに向けることができる。カーネルモードドライバは、一般に、ユーザモードドライバに関して上で説明したドライバとすることができるが、カーネルモードドライバは、名前が示すように、カーネルモードで動作することができる。これに関して、カーネルモードドライバは、コマンドバッファをDMAバッファに変換する責任を負うことができる。IHVは、コマンドバッファの正しい確認およびカーネルモードで割り当てられたDMAバッファへの正しいコピーを確実にする適当な機構を提供することを検討することができる。DMAバッファは、最終的にコプロセッサ向けのコマンドの集合であり、したがって、コプロセッサおよびサポートするハードウェアと正しくインターフェースしなければならないという点で、ハードウェア固有とすることができる。
図3を横切る、ユーザモードとカーネルモードを分離する水平線に留意されたい。この線によって示されるように、本発明は、システムのセキュリティのために実施される、コンピュータメモリ割り当ての従来のレイアウト内で動作することができる。ユーザモードは、非特権的メモリであり、アプリケーションによってアクセスできる。その一方で、カーネルモードは、特権的であり、アプリケーションによってアクセスできない。カーネルモードで割り当てられたDMAバッファは、理論的にはあらゆるメモリ空間にマッピングできるが、アプリケーションのプライベートプロセス空間へのマッピングが、セキュリティリスクにつながる可能性があることに留意されたい。これは、アプリケーションのプライベートプロセス空間内のスレッドによって参照される仮想アドレスの内容を、修正できるからである。言い換えると、DMAバッファの内容を、確認された時とハードウェアによって処理される時の間に修正することができる。
ステップ7に示されているように、カーネルモードドライバによって、DMAバッファによって使用されるメモリリソースのリストを作ることもできる。これは、コマンドバッファの確認の一部として達成することができる。このリストには、たとえば、リストのさまざまなメモリリソースのカーネルハンドル、およびメモリリソースが参照されるバッファ位置を含めることができる。このリストに、リストされたメモリリソースの期待されるコンテキスト状態も含めることができる。これによって、現在のハードウェア状態(たとえば、「現在のレンダターゲット」、「現在のZバッファ」など)の一部であるメモリリソースを、DMAバッファの先頭に再プログラムされるリストの一部とすることができる。というのは、コプロセッサにサブミットされた最後のDMAバッファ以降に位置を変更された可能性があるからである。
ステップ8は、メモリリソースリストと共に、DMAバッファをコプロセッサカーネルに送ることを表す。コプロセッサカーネルは、ステップ9に示されているようにコプロセッサスケジューラにDMAバッファをサブミットすることができ、ステップ10に示されているようにユーザモードに戻ることができる。
コプロセッサスケジューラは、一般に、コプロセッサのタスク(コプロセッサに送られるさまざまなDMAバッファおよび他の作業で具体化される)のフローをスケジューリングする責任を負う。コプロセッサスケジューラの機能性は、潜在的に非常に広範囲であり、この説明には、コプロセッサスケジューラが実行できる多数の潜在的な機能が含まれる。コプロセッサスケジューラを、コプロセッサスケジューラまたは単にスケジューラのいずれかと呼称することができる。さまざまな実施形態で、図3に示されているように、スケジューラによって、DMAバッファをコプロセッサにサブミットする前に、1つまたは複数の機能を実行することができる。ステップ11aは、スケジューラの一機能が、処理の準備ができたDMAバッファのサブミットであることを動的に示す。
ステップ11bは、準備済みDMAバッファのリストに追加されるか、次に実行されるとスケジューラが決定したDMAバッファの選択を表す。これに関して、スケジューラは、DMAバッファを準備スレッドに渡すことができる。準備スレッドは、本明細書で使用される用語として、一般に、正しいメモリリソースがDMAバッファの処理を引き受けるようにする機能を提供する。第1に、準備スレッドは、補助メモリマネージャプロセス(図示せず)を呼び出して、現在補助メモリにないすべての必要なメモリオブジェクト(グラフィックスに関しては「サーフェス」)をページングするのに十分な位置を判定する(これがステップ12である)。用語「補助メモリ」が、コプロセッサによる使用に割り当てられたメモリを指すことに留意されたい。GPUコプロセッサの場合に、補助メモリを、しばしば、「ビデオメモリ」と呼ぶ。
DMAバッファによって要求されるメモリリソースの一部が、使用可能な補助メモリに同時にはおさまらない可能性がある。補助メモリマネージャが、様々な理由からこの点で補助メモリにすべてのサーフェスを持ち込めない可能性がある。これが発生する場合には、さらなる処理を行って、補助メモリにより多くの空きを設けるか、その代わりにまたは空きの作成と組み合わせて、DMAバッファを複数のフラグメントに分割することができる。この場合に、準備スレッドによって、ドライバ事前定義分割点を使用して、バッファを分割し、このより小さいDMAバッファが必要とするメモリリソースのサブセットを突き止めるのを試みることができる。
DMAバッファに十分な補助メモリが突き止められたならば、準備スレッドによって、ステップ13に示されているように、カーネルモードドライバを呼び出すことができる。当業者が諒解するように、これは、ステップ6、7、および8に関して述べたカーネルモードドライバとするか、別々のカーネルモードドライバとすることができる。
ステップ14には、カーネルモードドライバによって、処理を待っているDMAバッファのページングバッファを構築できることが示されている。カーネルモードドライバによって、準備スレッドからの処理コマンドに基づいてこのページングバッファを構築することができる。ページングバッファは、上で定義したように、メモリリソースのページングのためのバッファである。「ページング」は、マッピングハードウェアを使用してメモリのブロック(ページ)の物理アドレスを変更することを指す。ページングバッファは、一般的に言って、メモリリソースをそれに割り当てられた位置に移動するコプロセッサ命令を含むDMAバッファである。ページングバッファは、DMAバッファが必要とするメモリリソースを正しいメモリ位置に移す機能をサービスし、このメモリ位置から、必要なときにコプロセッサによってそのリソースにアクセスすることができる。ページングバッファが正しく生成された場合に、特定のコプロセッサタスクに関する必要なすべてのメモリリソース(すなわちDMAバッファ)の位置がわかる。
ステップ15は、ページングバッファが生成されたことの準備スレッドへの通知を表す。ステップ16は、ページングバッファの準備ができたことのスケジューラへのシグナルを表す。スケジューラは、この時点で、次のDMAバッファの処理の準備ができていると仮定することができ、あるいは、処理のためにコプロセッサに送る前に、DMAバッファに対するさらなる準備動作を行うために進行することができる。たとえば、元のDMAバッファの作成以降にメモリ位置が変更されている可能性があるので、スケジューラは、この点でカーネルモードドライバをもう一度呼び出して、メモリリソースの実際の位置を用いてDMAバッファをパッチできるようにすることができる。最後に、スケジューラは、ページングバッファ(存在する場合に)およびDMAバッファの両方を、処理のためにコプロセッサ(および他の任意の補助ハードウェア)にサブミットすることができる。
上で説明したステップ1から16は、ハードウェア、ソフトウェア、およびその組合せを介して実施することができる。これに関して、図4(A)および4(B)に、擬似アルゴリズムの形式で図3のステップを全般的に示す。図4(A)および4(B)は、本発明に関して実践することができる潜在的な擬似アルゴリズムステップの網羅的なリストではなく、図4(A)および4(B)のすべてのステップが本発明の実践に必要と解釈するべきではない。そうではなく、図4(A)および4(B)は、本発明の教示における暗示的なリストである。
図3に関して提供した上の説明は、本発明のさまざまな実施形態の説明である。しかし、上で説明した本発明の実施形態に関して、複数の利益が発見された。この説明の残りは、さまざまな改善を可能にし、本発明の実践で生じる可能性がある困難を克服するためのものである。
スケジューリングの考慮事項
前に定義した動作(上のステップ1から16を参照されたい)の一部またはすべてを、DMAバッファがハードウェアにサブミットされる前に行うことができる。しかし、これらの動作の一部は、DMAバッファがハードウェアにサブミットされるまで実行が困難である場合がある。たとえば、メモリリソースの位置は、DMAバッファがコプロセッサにサブミットされる直前まで、判定が困難である可能性がある。これは、補助メモリリソースが、コプロセッサで実行されるときに各DMAバッファと共に移動される可能性があるからである。
上のステップ1から16に含まれる動作の一部は、時間がかかり、したがって、たとえばスケジューラが次に実行するタスクを選択した後など、割込み時に行うことができない場合がある。同様に、まさに時間がかかるので、コプロセッサが他のタスクで忙しい間は、中央処理装置(「CPU」)で実行することが有益である。これによって、コプロセッサ長時間停止状態(starvation)が最小限になる。コプロセッサ長時間停止状態は、単に、コプロセッサが処理機能を処理せずに費やされる時間を指す。この問題に応答して、スケジューラと共に「ワーカースレッド」を利用することが有益である可能性がある。ワーカースレッドによって、時間のかかるセットアップ作業の一部を処理するのに役立つ機能を実行することができる。ワーカースレッドは、本発明の他のプロセスに関する動作の例について図4(B)の擬似アルゴリズムに追加された。
このスケジューリングの考慮事項に加え、図3のシステムで任意の所与の時に、動作中のDMAバッファ(すなわち、コプロセッサによって現在処理されつつあるDMAバッファ)、準備されつつあるDMAバッファ、および準備される準備ができているDMAバッファのリストが存在する可能性がある。スケジューラへのサブミットの際に、新しいDMAバッファを、レディキュー(ready queue)に挿入し、その優先順位に応じて適当に順序付けることができる。しかし、新しいDMAバッファが、スケジューラにサブミットされるときに、コプロセッサの次のタスクとして選択されたDMAバッファを先取りできない場合に、本発明のさまざまな実施形態によって、機能性を高めることができる。これの理由は、DMAバッファの準備に、補助メモリとの間でのメモリリソースのページングが伴う可能性があるからである。したがって、処理に関して選択された次のDMAバッファの先取りによって、補助メモリマネージャの永続状態の変化がもたらされる可能性がある。準備されるタスクが先取りされる可能性がある場合には、新たに選ばれたDMAバッファの準備に起因する、補助メモリマネージャの永続状態に対する変更を元に戻すことがもたらされる可能性がある。DMAバッファタスクの動作の途中での補助メモリに対する変更を元に戻すことは、普通ではない可能性があり、潜在的に頻繁なコプロセッサ長時間停止状態につながる可能性がある。
DMAバッファの分割
コマンドバッファが、APIによってコプロセッサカーネルにサブミットされるときに、カーネルモードドライバは、ハードウェア固有のDMAバッファおよびそのDMAバッファを実行するのに必要なメモリリソースのリストを生成する役割を担うことができる。特定のDMAバッファフォーマットが、IHVによって定義される場合があるが、ソフトウェアプロバイダは、自身がカーネルモードドライバのリソースリストのフォーマットを定義する作業を知ることができる。
メモリリソースリストによって、DMAバッファによって使用できる異なるメモリリソースのタイムライン(timeline)情報を提供することができる。スケジューラは、このメモリリソースリストを使用して、DMAバッファがコプロセッサ上で実行される前にすべての必要なメモリリソースをページインし、DMAバッファによって同時に大量のリソースが使用されるときなど、必要な場合にDMAバッファを分割することができる。
DMAバッファが、スケジューラによって分割される場合に、カーネルモードドライバは、メモリリソースリスト内でタイムライン情報を供給することによって、これを容易にする。これは、ドライバに、DMAバッファ内の「オフセット」を指定させることによって行うことができる。オフセットは、そのオフセットでのメモリリソースの使用法を指定するメモリリソース識別子を挿入することによって、メモリリソースがプログラムされているときに送ることができる。メモリリソースは、DMAバッファ内に複数回現れることができるので、同一のメモリリソースが、メモリリソースリストに複数回現れる場合がある。DMAバッファ内のメモリリソースへの参照のそれぞれによって、1つのエントリがリソースリストに追加される。
本来、ハンドル/オフセットリストは、DMAバッファを分割する必要があるメモリリソースに関する十分な情報をスケジューラに与えるのに十分でない可能性がある。DMAバッファで特定のメモリリソースが必要なときを正確に知るために、スケジューラが、メモリリソースが別のリソースによって置換されるときに関する情報を必要とする場合もある。たとえば、DMAバッファの先頭で第1テクスチャステージに使用される第1のテクスチャ、テクスチャAが、途中で第2のテクスチャ、テクスチャBによって置換され、その後、DMAバッファの最後でテクスチャAに戻される。スケジューラは、この追加情報を使用して、より少ないメモリリソースを使用する量でDMAバッファを分割することができる。しかし、上で説明したシナリオでは、テクスチャBも、第1テクスチャステージでプログラミングされる可能性があり、この場合には、テクスチャAと同時に使用されており、DMAバッファの別々のサブセットに分離するべきではない。
上で説明した洗練された方法でDMAバッファを分割するのに必要な「微細な粒子(finer grain)」の時間情報を達成するために、スケジューラによって、DMAバッファ全体のメモリリソースの使用状況に関する情報を使用することができる。これは、一実施形態では、カーネルモードドライバによって、メモリリソースリスト内のエントリごとにリソース識別子を供給することによって達成することができる。リソース識別子は、単純に、特定のメモリリソースがどのように使用されるかを表す整数値である。たとえば、0の値によって、メモリリソースがレンダターゲットとして使用されることを示すことができ、1の値によって、リソースがZバッファとして使用されることを示すことができる。この情報を用いて、スケジューラは、テクスチャBによってテクスチャAが置換されるか(たとえば、両方が同一のリソース識別子を有する)、またはテクスチャBがテクスチャAと同時に使用される(たとえば、AおよびBが異なるリソース識別子を有する)かどうかを判定することができる。リソース識別子の実際の値およびその意味は、IHVが定義するか、ソフトウェアアーキテクチャで供給することができる。リソース識別子として使用される値が、0ベースになることを保証し、ドライバ初期化の時にそのドライバが使用する最大のリソース識別子の値をドライバが指定することが有用になる可能性がある。
図5に、DMAバッファ内で使用されるメモリリソースのタイムラインを定義するために供給される情報をスケジューラがどのように使用できるかを示す。スケジューラは、タイムラインの使用に進んで、バッファ分割点を定義することができる。一般に、DMAバッファが、現在のメモリリソース(すなわち、前のDMAバッファの末尾で最新であったメモリリソース)の、「セットアップ」または識別プロセスを開始しなければならないことに留意することが重要である可能性がある。これの理由は、前のDMAバッファが実行されてから後に、メモリリソースが移動され、したがって、再プログラムが必要である場合があるからである。メモリリソースは、DMAバッファが処理のためにスケジューリングされる時までに、再プログラムされる必要がある場合がある。
図5に示されたメモリリソースリストに、任意の数のフィールドを含めることができる。下の表に、有用なフィールドの非網羅的リストを示す。
ページング
一般に、DMAバッファによって参照されるメモリリソースは、コプロセッサによる実行のためにDMAバッファがサブミットされる前に、メモリ内に持ち込まれる。参照されるメモリリソースをメモリ内に持ち込むことを、リソースのページングと称する。ページングに、上で説明した準備ワーカースレッドと、カーネルモードドライバなどのドライバの間の対話を含めることができる。準備ワーカースレッドと補助メモリマネージャの間の動きを示す擬似アルゴリズムについて、図6を参照されたい。
ページングステップは、通常は、処理についてDMAバッファが選択され、特定のDMAバッファに関するリソースのリストが生成されているときに行われる。ページングは、メモリリソースを補助メモリに入れる方法と、補助メモリのどこにそれを置くかを決定するために行われる。
ページング処理を、補助メモリマネージャによって処理することができる。補助メモリマネージャは、特定の割り当ての作成時にカーネルモードドライバによって任意選択として供給されるヒントを使用することができる。このヒントは、メモリリソースに関してメモリ内の適当な位置を見つけるために作成されたものである。
メモリリソースのページングに関連する複数の問題がある。すべてのリソースを持ち込むのに使用可能な十分な空き補助メモリがない場合があり、その場合には、現在メモリ内にあるリソースを追い出すことができる。補助メモリ内の他のオブジェクトを追い出した後であっても、DMAバッファ用のメモリが不十分である場合がある。その場合には、DMAバッファを複数のより小さい部分に分割することができ、これによって、必要なメモリリソースが減る。
ページング中に、補助メモリマネージャは、適当な位置にメモリリソースを置くのに使用することができるコマンドのリストを構築することができる。そのコマンドのリストは、たとえば下記の動作から構築することができる。
1)追出し:別のリソースのための空きを作るために、特定のメモリリソースを現在のセグメントからシステムメモリに移動する;
2)ページイン:特定のメモリリソースをシステムメモリから補助メモリ内の空き位置に持ち込む;
3)再配置:特定のメモリリソースをある補助メモリ位置から別の補助メモリ位置に移動する。
補助メモリマネージャは、メモリ配置問題を解決するために、これらの動作のどれでも使用することを許可されることができる。この非網羅的なコマンドリストは、ページング動作中に補助メモリマネージャによって生成し、後にスケジューラによってページングバッファを生成するのに使用することができる。補助メモリマネージャは、再配置、追出し、またはページイン、あるいは他の方法で移動されるまたは他の方法で変更されるメモリリソースについてコマンドリスト内のエントリを生成することができる。これに関して、本発明のさまざまな実施形態によって、コマンドリスト内に下記のフィールドを設けることができる。
ページングバッファ生成
上で説明したコマンドラインを使用して、スケジューラによってページングバッファを生成して、コマンドを実行することができる。本発明に関連して使用されるページングバッファのさまざまな実施形態は、図7に示されているように実施することができる。
図7からわかるように、コマンドの中には、実行の前に前処理を必要とするものと、前処理なしで処理できるものがある。前処理は、ワーカースレッドを含む複数の方法で行うことができる。コマンドの前処理で、ページングバッファの一部が処理されるまで待つ必要がある場合があることに留意されたい。図7に示されたモデルでは、ワーカースレッドによって、ページングバッファを準備し、ページングバッファに関するCPU前処理を処理する。CPU前処理が、ページングバッファでの動作の前に必要なときには、ワーカースレッドによって、コプロセッサでのページングバッファに対する動作がブロックされる。その後、ワーカースレッドによって、ページングバッファを再始動する前にCPU要求がサブミットされて、動作が完了する。
したがって、コマンドリスト内のコマンドごとに、下記のアクションが適当である可能性がある:
ページングバッファ生成時の前処理;
ページングバッファ内の同期ポイントでのCPU処理;
メモリリソースを移動する「Blit」コマンド;
ページングバッファが完了した後のCPU作業の後処理。
可能なアクションの上のリストに関して、ページングバッファ自体に、CPUが作業を処理している間にコプロセッサに停止するように要求するコマンドを含めることができる。そのような、割込みを生成し、コプロセッサを停止させるコマンドを、本明細書では「ブロッキングフェンス」と称する。ページングバッファ内のどのコマンドにも、その前または後にブロッキングフェンスを置くことができる。割込みは望ましくないので、CPUがコプロセッサに割り込む回数は、ポスト動作フェンスをバッファの末尾に集めることによって減らされる。ポスト動作フェンス(または「ポストフェンス」)がバッファの末尾の前に必要である場合は、スケジューラによって検出され、ポストフェンスが実行済みであることを必要とするコマンドのプリ動作フェンス(または「プリフェンス」)にマージされる。
補助メモリの一貫性を維持するために、ページングバッファの処理で外部割込みを許可しないことが有利になる場合がある。したがって、ページングバッファが実行を完了する前にカンタム(quantum)が満了する場合には、ページングバッファを、完了までコプロセッサの制御下に留まらせることができる。
ページングバッファ内のフェンスの処理を含む、ワーカースレッド内で行うことができるイベントのチェーンを表す擬似アルゴリズムについて、図8を参照されたい。図8に関して、下の表に、コマンドリスト内に現れる可能性がある一般化されたコマンドと、前処理、ページングバッファ生成、および生成され得る終了フェンスに関するコマンドのタイプのありそうな分岐のリストを示す。下の表は、役に立つ例示としてのみ提供され、可能なコマンドのタイプまたはこれらのコマンドに関して発生し得るアクションの網羅的なリストであることを意図されたものではない。
本明細書で提示するスケジューリングモデルが、コプロセッサをビジーに保つためにかなりの量の自明でないCPU処理を必要とする可能性があることに留意されたい。この作業は、少なくとも部分的に、現在存在するコプロセッサハードウェアの機能によって必要とされる。将来のグラフィックスハードウェアは、より強力なメモリ仮想化およびコプロセッサスケジューリングを有するように設計される可能性がある。これに関して、複数の長所に到達しており、これらの長所も本発明に関して開示される。ハードウェア機能のそれぞれについて、改善の動機および上で説明したスケジューリングモデルに対する影響を説明する。いくつかの改善は、特定の実施手法に基づいて提示される。これらの手法のすべてが必ずしも将来のモデルでサポートされるのではないが、特定の手法が実践される場合に、そのときに、改善を実施手法に適合させる基準を提供する方法で、さまざまな改善を本明細書で説明する。
割込み可能なハードウェア
コプロセッサスケジューリングの信頼性を高めるために、コプロセッサによって、DMAバッファ全体より微細な粒度での割込みをサポートすることができる。たとえば、コプロセッサおよびサポートするハードウェアによって、三角形の処理の前または後だけではなく、三角形の処理の中での割込みをサポートすることができる。
そのような割込み可能ハードウェアのさまざまな実施形態で、好ましい設計手法は、コプロセッサコンテキストの補助メモリへの自動的な保存および復元を介してコプロセッサの潜在的に完全な仮想化を提供することとすることができる。各コプロセッサコンテキストは、制限ではなく例として、プライベートアドレス空間、DMAバッファが累積されるプライベートリングバッファ、およびコプロセッサコンテキストが実行中でないときにハードウェアの状態が保存されるメモリのプライベート部分を有することができる。この設定でのコンテキスト切り替えをサポートするために、スケジューラによって、保存されたコンテキストの補助メモリ内の物理アドレスをメモリマップ式レジスタを介してコプロセッサに与えることができる。コプロセッサは、そのコプロセッサコンテキストをロードし、すべてのメモリリソースが有効であることを検証し、リングバッファに累積されたDMAバッファを実行し、必要なリソースに出会うときにそのリソースをフォールトにする。
上記に関して、さらに、カーネルモードドライバによって、実行されていないコプロセサコンテキストの状態を照会することを可能にすることができる。これは、「実行リスト」イベントトレース(下で説明する)を使用することによるか、照会手段によって、保存されたコンテキストを検査することによって行うことができる。これに関して、ドライバによって、(1)コプロセッサがもっとも最近に特定のコンテキストから切り替えられた理由(たとえば、空、新しい実行リスト、ページフォールト)、(2)ハードウェアによって使用中のメモリリソースのリスト(サーフェスレベルフォールトがサポートされる場合)、(3)フォールトアドレス(ページレベルフォールトがサポートされる場合、および(4)特定のコンテキストを実行していたコプロセサクロックサイクル数などの有用な情報を判定することができる。
さらに、カーネルモードドライバによって、現在実行されていないコンテキストのリングに、新しいDMAバッファを挿入できるようにすることができる。保存されたコンテキスト内で、リングの位置、そのコンテキストに保管されたページテーブルまたは他の物理メモリ参照を修正できることも可能である。そのような修正は、たとえば、メモリ内のリソースの移動に続いて必要になる可能性がある。
コプロセッサコンテキストごとの仮想アドレス空間
上で説明した基本的なスケジューリングモデルの複雑さの一部は、コプロセッサコンテキストが共通のコプロセッサアドレス空間を共有している可能性があるという事実に起因する。このアドレス空間を仮想化することによって、よりスマートなシステムを提供することができる。アドレス空間の仮想化では、補助メモリマネージャによって、メモリを移動することができ、リソースを補助メモリから完全に追い出すことさえできる。これは、リソースに関する実際にコプロセッサから可視のアドレスを、その寿命の間に変更できることを意味する。したがって、ユーザモードで構築されるコマンドバッファは、コマンドバッファが実行のためにスケジューリングされるまでアドレスが未知である可能性があるので、そのアドレスによって割り当てを直接に参照することができない。
たとえば、上で説明した基本スケジューリングモデルの下記の要素を、コプロセッサコンテキストごとのアドレス空間のユーザを介して除去することができる。
1)ハンドルを実際のメモリ位置に置換することによるコマンドバッファのパッチ
2)メモリアクセスに関するコマンドバッファの確認
3)カーネルモードでのメモリリソースリストの構築
4)別々のコマンドバッファおよびDMAバッファの作成
5)割り込まれたDMAバッファのリソースの割込み前の位置への移動
プロセッサコンテキストごとの仮想アドレス空間を提供する際に、特定のコプロセッサコンテキスト内での割り当てによって、そのコンテキストのアドレス空間内の独自のアドレスを得ることができる。このアドレスは、割り当ての寿命の間に変更する必要がない。したがって、コマンドバッファによって、このアドレスを直接に参照することができ、パッチは不要である。コマンドバッファを確認し、DMAバッファにコピーする必要もなくなる。DMAバッファでのメモリ参照は、コプロセッサの仮想アドレス空間内であり、そのアドレス空間が、実際にすべてのコプロセッサコンテキストについてプライベートなので、有効性に関してメモリ参照を確認する必要はなく、したがって、アプリケーションに可視でないDMAバッファ内のコマンドバッファの確認された内容を隠蔽する必要はない。割り当てまたは追い出された割り当てによって占められていないアドレス空間(ハンドルまたは実アドレス)は、ハードウェアによってダミーページにリダイレクトされるか、アクセスフォールトを引き起こすことができる。これによって、コンテキストが、アクセスすると思われないメモリにアクセスできないので、カーネルモードメモリのセキュリティが保たれる。
コプロセッサコンテキストごとの仮想アドレス空間の長所の一部は、次の通りである。各割り当てが、割り当て時にコプロセッサに可視のアドレス(またはハンドル)を得る。コマンドバッファがなく、DMAバッファは、ユーザモードドライバに直接に可視であり、ユーザモードドライバによって書き込まれる。DMAバッファは、それが使用する割り当てのアドレス(またはハンドル)を直接に参照する。ページングに使用されるリソースリストは、ユーザモードドライバによって構築される。
図3および対応する説明に示された本発明のさまざまな実施形態のモデルを想起されたい。このモデルを、割込み可能ハードウェアおよび/またはプロセッサコンテキストごとの仮想アドレス空間を使用してさらに改善することができる。これに関して、次の節で、本発明の追加の長所によってさらに改善されることを除いて図3の概念に似た概念を説明する。
サーフェスの割り当ておよび割り当て解除
高度なモデルで、カーネルモードのビデオメモリマネージャ「VidMm」などの補助メモリマネージャによって、コプロセッサコンテキストに関する仮想アドレス空間を提供でき、さまざまなコプロセッサコンテキストの間で、これらがメモリの公平な分け前を得られるように物理メモリを管理することができる。基本モデルの割り当て方式に対するこの改善のさまざまな実施形態を、図9に示す。図9には、当業者に馴染みのある用語を使用して本発明の実施形態を示す。というのは、これが、当技術分野で認識された概念に対応するからである。たとえば、「VidMm」は、ビデオメモリマネージャであり、「サンク(Thunk)インターフェース」は、サンクインターフェースである。しかし、この用語は、本発明をより明瞭に説明するのに使用されるが、本発明を制限する意図の表明と解釈するべきではないことに留意されたい。したがって、「VidMm」は、任意の補助メモリに関するメモリマネージャとすることができ、「サンクインターフェース」は、任意の適当なインターフェースとすることができる。
図9に関して、高度なモデルを用いると、DMAバッファをアプリケーションのアドレス空間に直接にマッピングできるようになり、これによって、任意選択として、DMAバッファをユーザモードドライバから直接にアクセス可能にすることができる。ユーザモードドライバは、アクセスする必要がある各メモリリソースの永久仮想アドレスまたはハンドルを使用して(したがってパッチが不要になる)レンダリングプリミティブをDMAバッファに直接にバッチ化する。ユーザモードドライバによって、DMAバッファによって使用されるメモリリソースのリストも構築され、したがって、補助メモリマネージャは、DMAバッファがスケジューリングされる前にこれらのリソースを補助メモリバッファに持ち込むことができる。悪意のあるアプリケーションがリソースリストを修正する場合に、リソースの正しい組が、正しくページインされなくなる。これによって必ずしもメモリ保護モデルが壊されないことに留意されたい。というのは、有効なメモリを参照していないアドレス空間の範囲が、ダミーメモリページを参照することまたはハードウェアにフォールトにすることのいずれかのために必要になる可能性があり、指定されたコプロセッサコンテキストの実行を停止させるからである。どちらの場合でも、壊れたリソースリストによって、コプロセッサコンテキストが別のコンテキストのメモリにアクセスできるようになることがもたらされることはない。
高度なモデルでは、ユーザモードドライバが、DMAバッファをカーネルモードドライバにサブミットし、カーネルモードライバが、DMAバッファをスケジューラにサブミットする。メモリマネージャにリソースリスト内のリソースをページングするように要求した後に、スケジューラは、DMAバッファをそのままハードウェアに送る。
高度なモデルでのスケジューリング
高度なモデルでのスケジューリングは、基本モデルでのスケジューリングに非常に似ている。DMAバッファがコプロセッサにサブミットされる前にDMAバッファを準備するワーカースレッドが依然としてある。しかし、高度なモデルでワーカースレッドによって達成できる作業は、ページング動作だけに制限される必要がある。
基本モデルのスケジューリングおよび高度なモデルのスケジューリングの実施形態について、図10および図11を参照されたい。これから明らかにするように、高度なモデルは、2つのスケジューリングオプションを有する。デマンドフォールトなしでスケジューリングするときには、準備フェーズを実施することができる。しかし、高度なモードでデマンドフォールトを使用するときには、準備フェーズは不要である。
さらに、図12(A)、12(B)、および12(C)に、高度なスケジューリングモデルを実施することができる擬似コードを示す流れ図を示す。
高度なモデルでのページング
高度なモデルでのページングは、基本モデルのページングと異なる。高度なモデルでは、ページングされる割り当てのアドレスが、既に知られており、メモリマネージャは、単に、それを有効にする必要がある。リソースリスト内の割り当てを有効にするために、メモリマネージャは、空いている物理補助メモリの範囲を見つけ、ドライバに、ページテーブルまたはハンドルをその範囲にマッピングするように要求する必要がある。必要であれば、物理メモリの範囲が連続するページのセットになることを要求することができる。
割り当てを有効にするのに使用可能な物理ビデオメモリが不十分な場合には、本明細書でVidMmと称する補助メモリマネージャは、追出しについて、現在有効な割り当てをマークすることができる。割り当てが追い出されるときに、そのコンテキストが、システムメモリ(まだシステムメモリ内になかったと仮定して)に転送され、その後、その仮想アドレスまたはハンドルが、無効にされる。
仮想アドレス空間
当技術分野で既知または将来に開発される、仮想アドレス空間の提供に関する技法のいずれかを、本発明と共に使用することができる。そのようなアドレス空間を使用できる方法を示すために、共通の仮想アドレス空間技法を使用する2つの例を、本明細書で示す。コプロセッサの仮想アドレス空間を作成する複数の方法があり、当業者が本明細書の例から外挿できることを理解されたい。これに関して、可変長フラットページテーブルおよびマルチレベルページテーブルを使用する仮想アドレス空間を、本明細書で説明する。
可変長フラットページテーブル。可変長フラットページテーブルと連合しての本発明の使用を、図13に示す。この方法では、コプロセッサのアドレス空間が、フラットページテーブルの使用を介して仮想化される。仮想アドレス空間を、事前定義のメモリ量、たとえば4KBのページに分割することができる。仮想アドレス空間内のページごとに、1つのページテーブルが設けられ、このページテーブルには、関連する物理メモリの物理アドレスおよび位置(たとえば、Accelerated Graphics Port(AGP)、Peripheral Component Interconnect(PCI)、またはビデオ)を指定するための識別子、たとえば64ビットエントリが含まれる。一実施形態では、コプロセッサによってサポートされるページサイズが、任意ではなく、コプロセッサページテーブルによってシステムメモリページを参照できるようにするために、4KBでなければならない。さらに、この実施形態では、コプロセッサページテーブルによって、同一のアドレス空間から、ローカルビデオメモリとシステムメモリの両方をアドレッシングできなければならない。コプロセッサは、単一のサーフェスに属するすべてのページを単一のタイプのメモリにマッピングすることを要求することができる。たとえば、コプロセッサは、特定のレンダターゲットに属するすべてのページを、ローカルビデオメモリにマッピングすることを要求することができる。しかし、サーフェスをさまざまな物理メモリタイプ(AGP、ローカルビデオなど)にマッピングするページテーブルエントリが、ページテーブルに存在することができる。
PCIアダプタおよびAGPアダプタについて、各ページテーブルエントリの例示的実施形態に、32ビットが含まれ、4GB物理アドレス空間全体をコプロセッサに可視にすることができる。PCI−Expressタイプのアダプタを使用する実施形態について、コプロセッサは、64ビットアドレッシングサイクルをサポートすることができる。各ページテーブルエントリに、40ビット以上を含めて、それぞれテラバイト単位のメモリをアドレッシングすることができる。マザーボード上の40ビット以上の物理アドレス信号線を利用する64ビットシステムを実施する実施形態では、対応するビデオアダプタがこのアドレス空間全体をアドレッシングできない場合に、性能ペナルティを経験する場合がある。したがって、64ビットのフルサポートが推奨される。
フラットページテーブル法は、ページディレクトリがなく巨大なページテーブルだけがあることを除いて、現在INTEL(登録商標)社の8086(x86)ファミリCPUで使用可能な仮想化機構に似ている。
有効な割り当てに関連しない仮想アドレスを、ダミーページにリダイレクトして、悪意のあるDMAバッファが、コプロセッサに、アクセスするべきではないメモリを強制的にアクセスさせることを防ぐことができる。ハードウェアによって、エントリが有効であることを指定する有効ビットを、ページテーブルエントリのそれぞれで実施することができる。
ページテーブルは、関連するコプロセッサコンテキストがコプロセッサ上で現在実行中でないときに、再配置可能とすることができる。コンテキストが実行中でないときに、VidMmによって、ページテーブルをシステムメモリに追い出すことができる。コンテキストが、再実行の準備ができたときに、ページテーブルをビデオメモリの、潜在的に異なる位置に戻すことができる。ドライバは、保存されたコプロセッサコンテキスト内のページテーブルの位置を更新することもできる。
この実施形態で、すべてのメモリアクセスを、コプロセッサ仮想アドレスを介して行うことができる。しかし、これは、本発明がそのようなアクセスを必要とすることを意味するのではない。ある要素を、他の方法でアクセスすることができ、他の方法でアクセスされる場合により高い機能性を提供することができる。仮想アドレス方式から除外できるいくつかの項目の例が、下記である。
1)ページテーブル自体を、物理アドレスを介して参照することができる。
2)陰極線管(CRT)を、連続するメモリ範囲について物理アドレスにプログラムすることができる。
3)仮想印刷エンジン(VPE)によって、物理アドレスに直接にDMAを実行することができる。
4)オーバーレイは、物理アドレスから直接に読み取ることができる。
5)コプロセッサコンテキストを、物理アドレスを介して参照することができる。
6)プライマリリングバッファを、物理アドレスを介して参照することができる。
コンテキスト切り替え中に、コプロセッサによって、復元されるコンテキストによって使用される仮想アドレスを再変換することができる。これによって、これらのアドレスがコンテキスト切り替えの前と同一の物理ページを参照するという潜在的に誤った仮定をコプロセッサにさせるのではなく、メモリリソースが正しいプレーンに配置されることが保証される。また、本発明のさまざまな実施形態に関して、単一のページテーブル内または複数のページテーブルにまたがる複数のエントリが、同一の物理ページを参照できるようにすることが有益であることにも留意されたい。
さまざまな実施形態で、コプロセッサによって、ページテーブルの現在のサイズを与えるリミットレジスタ(limit register)を実施することができる。ページテーブルの末尾を超えるメモリ参照のすべてが、コプロセッサによって無効なアクセスとみなされ、それなりに処理される。ページテーブルは、2のべきで拡張可能であり、一実施形態で、少なくとも2GBのアドレス空間(2MBのページテーブル)をサポートすることができる。
コプロセッサコンテキストに関連する仮想アドレス空間が断片化された場合に、API、たとえばMICROSOFT(登録商標)Direct3Dランタイムによって、ガーベジコレクションを実行して、アドレス空間および関連するページテーブルのサイズを減らすことができる。上位仮想アドレスでの割り当てが、削除され、低位アドレスに再割り当てされる。
本発明と共に可変長フラットページテーブルを使用して仮想アドレス空間を実施することの長所および短所は、当業者に明白である。要約すると、フラットページテーブルを使用することの長所の1つが、物理メモリに対する1レベルの間接参照だけがあることである。もう1つの長所は、ページの不連続の組を用いてページングを解決できることである。しかし、短所もある。たとえば、コプロセッサが動作中であるときに、一般に、ページテーブル全体がメモリ内に存在する必要がある。また、ページテーブルによって、かなりの量のメモリが消費される可能性がある。ページテーブルは、一般にメモリ内のページの連続する組を必要とするので、配置に不便である可能性がある。
マルチレベルページテーブル。マルチレベルページテーブルと共の本発明の使用を、図14に示す。マルチレベルページテーブルは、全般的に、可変長フラットページテーブルに類似するものとすることができるが、マルチレベルページテーブルでは、仮想アドレスのインデックス部分が、複数のテーブルにまたがって分割される。たとえば、さまざまな実施形態で、32ビットアドレス空間を使用することができる。この情況では、ハードウェアが、2レベル間接参照を有することが要求される場合がある。間接参照の第1レベルを、ページディレクトリと呼び、第2レベルを、ページテーブルと呼ぶ。コプロセッサが特定のコンテキストを実行しているときに、リソースリスト内の割り当てが必要とするそのコンテキストのページディレクトリおよびページテーブルだけが、メモリ内に存在する必要がある。
本発明と共に複数レベルページテーブルを設けることの長所の1つが、ページの不連続の組を用いてページングを解決できることであることを諒解されたい。また、割り当てによって、システムメモリおよびローカルビデオメモリからのページを混合することができ、使用中のページディレクトリおよびページテーブルだけがメモリに存在する必要があり、ページディレクトリおよびページテーブルが、それぞれ1ページだけを必要とする(複数ページの連続的な割り当ては不要である)。しかし、これらの長所にもかかわらず、メモリへのアクセスが2つの間接参照を必要とするという短所が残っている。
サーフェスレベルフォールト
コプロセッサコンテキストごとの仮想アドレス空間の追加によって、高度なスケジューリングモデルが、適度に良好に動作し、一般に、特にメモリ圧迫がほとんどまたはまったくないときに、大きいCPUオーバーヘッドを必要としない。ほとんどの場合に、DMAバッファをスケジューラにサブミットできるときに、そのバッファによって参照されるリソースが、既にメモリ内に存在し、したがって、DMAバッファは、ページングスレッドによるページングをまったく必要としない。しかし、スケジューリングに関して、タイムキーピング(time keeping)の精度を高めることによって、モデルをさらに改善することができる。
本発明を実施する際に出会う問題の1つが、特定のDMAバッファの実行にどれだけの時間を要するかを前もって知ることが可能でない場合があることである。これは、準備される次のDMAバッファに関するスケジューラによる潜在的に悪い選択をもたらす可能性がある。現在のコンテキスト以上の優先順位の他のコンテキストがない場合、またはその優先順位の他のすべてのコンテキストが空である場合に、スケジューラは、現在のコンテキストから次のDMAバッファを選択することができる。そうでない場合には、スケジューラは、現在のコンテキスト以上の優先順位を有する次のコンテキストから次のDMAバッファを選択することができる。しかし、その選択が、正確である保証はない。次に高い優先順位のコンテキストからDMAバッファを選択するときに、スケジューラは、現在のコンテキストのDMAバッファが、1カンタムより長く実行されると仮定することができる。そのとおりでない場合には、スケジューラは、あまりにも早くそのハードウェアコンテキストから切り替える可能性がある。現在のDMAバッファが、1カンタム未満だけ実行される場合には、スケジューラは、現在のコンテキストから次のDMAバッファを選択するべきであった(これによってコプロセッサの使用効率が最大になるからである)。
メモリ圧迫がほとんどまたはまったくないときに、一般に、次のDMAバッファの潜在的な候補の両方が、既にすべてのリソースをメモリ内に有する可能性があり、したがって、どちらのバッファもページングを必要としない可能性が高い。そのシナリオでは、スケジューラが、最初のDMAバッファのカンタムが終了するときに誤りを理解し、即座に考えを変え、コプロセッサに正しいDMAバッファを与えることができる。
しかし、メモリ圧迫の下では、このモデルは安定性が下がる可能性がある。次のDMAバッファの「サイズ決定」が、滑らかな動作を保証する際の有利なステップになる可能性がある。メモリ圧迫の下で、前に説明したシナリオでは、おそらく、次のDMAバッファの2つの潜在的な候補の1つが、あるページングを必要とし、したがって、準備スレッドに送られる。その場合に、スケジューラが、最後に「考えを変え」、この2つのDMAバッファを入れ替えることが賢明である。しかし、そのような変更を行うことができ、そのような実践が、本発明の説明の範囲から出ないことに留意されたい。たとえば、次のDMAバッファの準備が完了し、他の潜在的なDMAバッファ候補がページングを必要としないシナリオでは、DMAバッファを交換することができる。これは、補助メモリマネージャによる共有可能な割り当てのある特別なサポートを暗示する可能性があるが、明らかに可能である。
上で説明した潜在的なタイムキーピングエラー自体は、それほど悪くはなく、後続カンタム中に、コンテキストに失われた処理時間を与えることによって対処することができる。また、ほとんどの場合に、DMAバッファに、複数のコプロセッサカンタムにわたる実行に十分なコマンドが含まれ、したがって、各コンテキストがそのすべてのカンタムを得ることができる。しかし、メモリ圧迫の下では、補助メモリマネージャが、各コンテキストの作業セットを減らすために、DMAバッファをより小さいバッファに分割することを強制される(上で説明したように)可能性がある。そのようなDMAバッファの分割によって、DMAバッファのサイズが減り、それに対応して、上で説明したカンタム化の問題が増える。
メモリ圧迫の下で生じる可能性があるもう1つの問題は、潜在的に、DMAバッファによって実際に使用される、ページインされるより多くのメモリがあるので、このモデルによって人工的に余分の圧迫が引き起こされる可能性があることである。ページインされた余分のメモリのすべてが、潜在的に、次のカンタムの前に追い出され、もう一度ページインされる必要が生じる。これは、ページングアクティビティが既に高いときに、さらに増加したページングアクティビティにつながる可能性がある。基本モデルおよび高度なモデルでは、補助メモリマネージャが、適当な追出しポリシを選択することによって、ページングの増加の問題に対処することができる。たとえば、軽いメモリ圧迫の下で、各コンテキストは、その作業セット内に適度な量のメモリを有する可能性が高い。他のコンテキストからメモリを追い出す前に、補助メモリマネージャは、まず現在のコンテキストからメモリを追い出すことと、使用可能な作業セットにおさまるようにDMAバッファを分割することを試みる。特定のコンテキストのDMAバッファが、その最小サイズに分割されたならば、補助メモリマネージャは、別のコンテキストからメモリを追い出さざるを得なくなる可能性がある。
この問題を解決するのに好ましい手法の1つが、コプロセッサが必要とするメモリのデマンドフォールト(demand faulting)を可能にすることである。この方法で、コプロセッサが必要とするメモリのサブセットだけがメモリに存在する必要があることを保証することができる。
高度なモデルについて提案されるフォールトのレベルは、サーフェス粒度のレベルである。しかし、任意のレベルのフォールトが、本発明と共に使用するのに適当である可能性があることを理解されたい。また、ページテーブルハードウェアの場合に、ハードウェアは、割り当てが有効であるかどうかを判定するために、割り当ての最初のページの状態だけを調べることができることに留意されたい。というのは、補助メモリマネージャが、割り当て全体を同時にメモリに持ち込めるからである。
さまざまな実施形態で、ハードウェアによって、下記のいずれかのときにページフォールトを生成することができる。
1)無効なリングバッファまたはDMAバッファを参照しているコンテキストへのコンテキスト切り替えが発生する。
2)プリミティブが描かれようとしており、必要なメモリリソースの一部が存在しない(たとえば、頂点シェーダコード、頂点バッファ、テクスチャ)。
第2の情況で、ハードウェアが、すべての三角形をレンダリングする前に、現在のメモリリソースを再サンプリングする必要がある場合があることに留意されたい。補助メモリマネージャが、コプロセッサの動作中を含めて、任意の時に仮想アドレスまたはハンドルを無効化する可能性がある。ハードウェアが、現在使用しているメモリリソースのすべてについて照会できるようにする可能性があることも期待される。補助メモリマネージャは、その情報を使用して、特定の割り当てがハードウェアによって使用中であるときを判定することができる。補助メモリマネージャは、割り当てが、コプロセッサによって現在使用中のリソースのリストに現れる場合に、その仮想アドレスまたはハンドルを無効化した後に、コプロセッサがその割り当てにアクセスできないので、その割り当てを安全に追い出せると仮定する可能性がある。それを行う試みによって、ページフォールトが引き起こされる可能性がある。
本発明に関連するサーフェスレベルフォールトの使用のさらなる説明を、サーフェスレベルフォールトモデルの以下のより詳細な説明によって提供する。以下のモデルは、ある実施形態の例であり、本発明の潜在的な使用または本明細書で提供されるスケジューリングモデルのコンテキストの外部の他の応用例に関するサーフェスレベルフォールトの概念の潜在的な使用に対する制限と解釈するべきではない。
第1に、メモリリソースに関する割り当て方式は、本明細書のコプロセッサコンテキストごとの仮想アドレス空間の節で説明したものと同一とすることができる。詳細についてはその節を参照されたい。
第2に、DMAバッファのレンダリングコマンド方式およびリソースリストも、本明細書のコプロセッサコンテキストごとの仮想アドレス空間の節で説明したものと同一とすることができる。このモデルでは、グラフィックハードウェアがサーフェルレベルフォールトをサポートする場合であっても、リソースリストが必要である。補助メモリマネージャ(本明細書では「VidMm」)は、リソースリストを使用して、メモリ割り当てに関する使用状況情報を獲得する。その使用状況情報を用いて、VidMmが、メモリ内に空間を作る必要があるときに、追出しの候補を決定することができる。
サーフェスレベルフォールトの追加に関して、リソースリストに関するセキュリティの懸念事項はなく、したがって、ユーザモードでリソースリストを構築することができる。悪意のあるアプリケーションが、リソースリストに無効なデータを入れた場合に、発生し得る最悪の事態は、悪意のあるアプリケーションの性能が悪くなることである。VidMmは、追出しの候補に関する非論理的な選択を行う可能性があり、これによって、そのアプリケーションに関する余分なページングアクティビティがもたらされる。
サーフェスのデマンドフォールトを用いるスケジューリングモデルは、多くの点で、サーフェスレベルフォールトを使用しないモデルと異なる可能性がある。一般に、レディリスト内のプロセスは、コプロセッサに直接にサブミットでき、準備フェーズが不要である。スケジューラは、ページフォールトの解決を必要とするコンテキストの、専用のリストおよびページングスレッドを維持することができる。ページング動作に使用される、VidMm固有のコプロセッサコンテキストがある。最後に、コンテキストにサブミットされるDMAバッファは、単一の作業アイテムを形成するように連結される。
このモデルでは、準備フェーズを除去することができる。スケジューラは、あるコンテキストから別のコンテキストに直接に切り替えるようにコプロセッサに要求することができ、すべてのコンテキストがいつでも実行の準備ができていると仮定することができる。切り替え先のコンテキストの、一部のメモリリソースがメモリ内に存在しない場合には、ハードウェアがフォールトすることができ、コンテキストが、リスト(図15のインページリストなど)に追加され、したがって、ページングスレッドが、そのフォールトの解決について作業を開始することができる。
このモデルに関してスケジューラによって維持される例示的なプロセスのリストを、図15に示す。図15を参照すると、フォールトが発生するときに、フォールトを引き起こしたコンテキストを、インページリストに追加することができる。その後、ページングスレッドによって、そのフォールトが解決される。ページングスレッドによって、最初に解決される、フォールトした最高の優先順位のコンテキストを選択することができる。周期的な優先順位ブーストを使用して、低い優先順位のコンテキストが、そのフォールトを解決されるのに十分に高い優先順位を最終的に得ることを保証することができる。フォールトが、インページワーカースレッドによって解決されている間に、スケジューラによって、コプロセッサでの実行の準備ができているコンテキストをスケジューリングすることができる。コプロセッサが働いている間に、インページワーカースレッドは、ドライバを呼び出して割り当てをアドレスにマッピングするかアンマップすることによって、ビデオメモリを操作することができる。
コプロセッサによって現在使用されている割り当てが、無効化される可能性がある。コプロセッサがその割り当てに次にアクセスしようとする時に、フォールトが発生しなければならない。しかし、コプロセッサは、任意の時に即座にフォールトすることができないので(たとえば、一部のコプロセッサは、三角形の間で現在の割り当ての状態を再サンプリングするだけである)、コプロセッサが、無効化された後のある時に割り当てを使用することを必要とする可能性がある。
それが起こらないようにするために、VidMmによって、次のコンテキスト切り替えまで、割り当てのメモリが、仮想アドレスまたはハンドルが無効化される場合であっても、有効のままになることを保証することができる。これは、ページングに起因するメモリ転送を、VidMm専用のコプロセッサコンテキストで行わせることによって達成することができる。メモリ転送が、別々のコンテキストで行われるので、メモリのコンテキストが変更される前にコンテキストが切り替えられることを確信することができる。システムメモリを参照する仮想アドレスまたはハンドルについて、追出し中のメモリ転送はない。その場合に、VidMmによって、コプロセッサコンテキストがVidMmの専用コンテキストに切り替えられるまで、システムメモリをピン止めすることによってシステムメモリが有効なままになることを保証することができる。
VidMm専用コプロセッサコンテキストは、システムメモリとビデオメモリの間のメモリ転送を行うのにVidMmによって使用される通常のコプロセッサコンテキストである。VidMmコンテキストは、インページリスト内の最高優先順位のアイテムの優先順位をとる可変優先順位コンテキストである。すべてのページング動作を単一のコンテキストに直列化させることによって、VidMmの同期化モデルが単純になる。
このモデルでのもう1つの興味深い相違は、特定のコンテキストについてサブミットされるDMAバッファのすべを連結して、単一のタスクを形成できる方法である。前のモデルでは、各DMAバッファによって、1つの作業アイテムが形成され、各コンテキストによって、これらの作業アイテムのリストが維持される。スケジューラは、必ずしもコンテキストをスケジューリングせず、コンテキストに関連する特定の作業アイテムをスケジューリングする(かつ、その準備を開始する)。作業アイテムが完了の機会を得る前に、スケジューラが、次の作業アイテムを選択しなければならない。各作業アイテムは、サブミットされる前に準備されなければならず、したがって、スケジューラは、次の作業アイテムをどれにしなければならないかを前もって知らなければならないが、これは常に可能ではない。
サーフェスレベルフォールトを用いると、DMAバッファは準備の必要がない。このゆえに、スケジューラは、コンテキストを作業アイテムの集合とみなす必要がない。そうではなく、スケジューラは、実際にコンテキストをスケジューリングし、コンテキストは、コプロセッサの制御を得たならば、コプロセッサの制御を持ち続けることができる。いくつかの、例えば下記のイベントによって、プロセッサのコンテキスト制御を停止させることができる。
1)コプロセッサが、現在キューイングされているすべてのコマンドを完了する
2)コプロセッサが、無効なメモリアクセスによって引き起こされるページフォールトを生成する
3)スケジューラが、異なるコンテキストへの切り替えを要求する
4)コプロセッサが、DMAストリーム内の無効なコマンドに続いて無効動作割込みを生成する
図16に、上記による、本発明のさまざまな実施形態を示す図が与えられている。図16を参照すると、左右に、第1のコンテキストの挿入から第2のコンテキストの挿入までの、同一のハードウェア環境での進行が示されている。左側では、スケジューラが、特定のDMAバッファをコプロセッサコンテキスト#1のリングに挿入するようにカーネルドライバに要求する。リングは、ドライバによって修正され、コプロセッサの末尾が更新されて、新しい値を参照するようになる。コプロセッサコンテキスト#1へのDMAバッファの挿入は、コプロセッサコンテキスト#1固有のロックの保護の下で行われる。したがって、他のスレッドは、他のコプロセッサコンテキストのリングにDMAバッファを挿入することができる。
右側では、スケジューラが、コプロセッサコンテキスト#2のリングに特定のDMAバッファを挿入するようにカーネルモードドライバに要求する。しかし、このリングは既に満杯であり、したがって、スレッドBは、リングに空きができるまでブロックされる。スレッドBが待つという事実によって、スレッドAそれ自体のリングに新しいDMAバッファを挿入できなくなるのではないことに留意されたい。
このモデルでは、各コンテキストが、実行されるDMAバッファの諸部分へのリダイレクトを含めることができるそれ自体のDMAリングを有する。サブミット時に、スケジューラは、サブミットされたDMAバッファをそのコンテキストのリングに追加することを試みることができる。リングが既に満杯である場合には、スケジューラは、もう1つのサブミットに十分なスペースがリングにできるまで待つことができる。この待機によって、サブミットされる特定のコンテキストへのさらなるサブミットだけがブロックされることに留意されたい。他のコンテキストへのサブミットは、ブロックされない。言い換えると、複数のスレッドが、それ自体のコンテキストに並列に作業アイテムを追加することができる。
新しいDMAバッファを、実行中のコンテキストのキューに追加することができるので、コプロセッサは、コンテキストが空であることを報告する割込みを生成する前に、キューの末尾を再サンプリングすることができる。もちろん、コプロセッサがキューをサンプリングした直後にDMAバッファがキューに追加される可能性がある。しかし、割込み生成の直前のキューの末尾のサンプリングによって、これが発生する可能性が減り、スケジューリングの精度が高まる。スケジューラは、コンテキストが空であることを通知されたときに、実際にそうであるかどうかを知るために、ドライバに照会する。ドライバが、現在キューに入れられている、まだ処理されていないコマンドがあるかどうかを判定するために、保存されたコプロセッサコンテキストにアクセスすることができなければならない。図17に、このモデルを記述した擬似コードアルゴリズムを示す。
後で詳細に説明するように、限定DMAバッファ対特権的DMAバッファという概念を導入して、システムセキュリティを危険にさらさずにユーザモードでDMAバッファを直接に構築できるようにすると同時に、カーネルモードドライバが特権的コマンドを含むDMAバファを構築できるようにする。
このモデルによって表されるさまざまな実施形態を、本明細書の後の節で詳細に説明する限定メモリ対特権的メモリという概念と共に使用することができる。さしあたり、前に提示したメモリ仮想化モデルで、限定DMAバッファ対特権的DMAバッファによってアクセスできるメモリの間に区別がなく、すべての仮想メモリがアクセス可能なので、このモデルで問題が生じる可能性があることに留意されたい。これは、ページテーブルまたはリングバッファなどのメモリリソースを、コプロセッサ仮想アドレス空間を介して適当に可視にすることができないことを意味する。というのは、それによって、悪意のあるアプリケーションがページテーブルまたはリングバッファを上書きできるようになるからである。このゆえに、あるタイプのリソースについて物理アドレッシングをサポートし、他のタイプのリソースについて仮想アドレッシングをサポートするハードウェアを設計することができる。
この問題に対する異なる手法が、特権的メモリという概念を追加することである。さまざまな実施形態で、特権的メモリに、特権的DMAバッファからのみアクセスでき、コプロセッサは、限定DMAバッファから特権的メモリ位置へのアクセスが試みられる場合に、ページフォールトを引き起こすことができる。その一方で、特権的DMAバッファからは、特権的メモリおよび非特権的メモリの両方に無差別にアクセスすることができる。特権的メモリをサポートするために、ハードウェアが、ハンドルごとに(ハンドルベース仮想化の場合に)またはページごとに(ページテーブルベースの仮想化の場合に)メモリが特権的であるかどうかを指定する機構を有しなければならない。
特権的メモリをサポートするために、ページテーブルを有し、サーフェスレベルフォールトをサポートするコプロセッサは、もはや、メモリリソースのベースアドレスだけに基づいてフォールトすることができない。コプロセッサは、現在のリソースに含まれるすべてのページテーブルエントリを調べ、そのすべてが正しい保護ビットをセットされていることを確認しなければならない。メモリリソースの最初のページだけを検査することによって、潜在的に、悪意のあるアプリケーションが、限定DMAバッファで指定した限定メモリベースアドレスに続く特権的メモリにアクセスできるようになる。
実行リスト
前に提示したデマンドフォールトモデルは、複数のイベントをシグナリングするために割込みを激しく使用する可能性がある。ページフォールトなど、これらのイベントの一部は、メモリ圧迫の下で非常に頻繁に発生する可能性がある。割込みが発生する時と、コプロセッサがCPUによって新しいタスクを与えられる時の間に、コプロセッサが長時間停止状態を生じる可能性がある。割込み待ち時間を隠蔽し、コプロセッサを動作状態に保つために、実行リストという概念が導入された。
実行リストは、単に、CPUの介入なしにコプロセッサによって実行することができるコプロセッサコンテキストのリストである。コンテキストは、与えられた順序で、または本発明の実践に好都合であることがわかった任意の順序で実行することができる。コプロセッサは、たとえば下記など、本発明と共に実施できるさまざまな理由のいずれかについて、実行リスト内のあるコンテキストから次のコンテキストに切り替えることができる。
1)現在のコンテキストが空である、すなわち、行うべきことが残っていない。
2)現在のコンテキストが、ページフォールトを生成した。
3)現在のコンテキストが、一般保護フォールト(コプロセッサによってサポートされる場合に)を生成した。
4)コプロセッサが、新しい実行リストに切り替えることを要求された。
さまざまな実施形態で、コプロセッサは、実行リスト内のあるアイテムから次のアイテムに切り替えるときに、CPUに割り込むが、停止せず、リスト内の次のアイテムにコンテキストを切り替えることができ、その実行を開始することができる。実行リストの先頭は、スケジューラが最初に実行を試みることができるコンテキストとすることができ、実行リストの他の要素は、部分的に、割込み待ち時間中にコプロセッサを動作状態に保つために置くことができる。CPUは、コプロセッサがリストの先頭から他に切り替えたことを知らせる割込みを受け取るや否や、新しい実行リストを構築し、コプロセッサに送ることができる。
コプロセッサは、リストの先頭から切り替えるときに、生成した割込みがCPUに進む間に、実行リストの次のコンテキストの実行を開始することができる。CPUが生成する新しい実行リストの先頭は、コプロセッサが切り替えた先のコンテキストと異なる場合がある。その場合には、コプロセッサは、もう一度切り替える必要があり、そのコンテキストで有用な作業を行う時間がない場合がある。
しかし、コンテキスト優先順位が、最後の実行リストが構築されてから変更されていないので、CPUによって構築される新しい実行リストの先頭のコンテキストを、前の実行リストの第2要素と同一にすることができる。その場合には、コプロセッサは、すでに正しいコンテキストの処理を意外に早く開始している。
実行リストの概念を表す図を、図18に示す。実行リストが、本発明のさまざまな実施形態に含まれるときに、スケジューラの実行中コンテキストを、現在の実行リストによって置換することができる。保留中実行リストと称する第2の実行リストを導入して、実行リスト切り替えの同期化を単純にする。現在の実行リストは、ハードウェアが現在実行しているとスケジューラが仮定することができるコンテキストのリストであり、保留中実行リストは、スケジューラがある実行リストから別の実行リストにハードウェアを変更することを望むときに使用される過渡的な実行リストである。スケジューラは、新しい実行リストに切り替えることを望むときに、保留中実行リストを構築し、それに切り替えるようにコプロセッサに要求する。スケジューラが、コプロセッサが新しい実行リストの実行を開始したことの確認をコプロセッサから(割込みを介して)受け取ったならば、保留中実行リストが、新しい現在の実行リストになり、保留中実行リストを空にすることができる。
保留中実行リストが空であるときに、ハードウェアは、現在の実行リストのコンテキストを実行しているか、アイドルである可能性がある。保留中実行リストが空でないときには、スケジューラは、遷移が行われたことの確認をコプロセッサから受け取るまで、ハードウェアが現在どの実行リストを実行しているかを知らない可能性がある。
ある種のイベントは、スケジューラが実行リストの優先順位を付けなおすことを必要とする場合がある。たとえば、ページフォールトが解決され、高い優先順位のコプロセッサコンテキストの実行の準備ができる場合がある。そのようなイベントの同期化を単純にするために、スケジューラが従うことのできる一般的なルールは、前のイベントによってサブミットされた保留中実行リストがまだない場合に限って、新しい実行リスト(保留中実行リスト)をサブミットすることである。ある保留中リストの別の保留中リストへの置換の試みは、同期化が難しい。というのは、リストが、既にコプロセッサに与えられており、したがって、遷移がいつでも発生する可能性があり、スケジューラが、その事実の後でなければ通知されないからである。
後者の場合に、実行リストの優先順位の付けなおしを、コンテキスト切り替えハンドラに委譲することができる。将来のある点で、保留中リストから実行中のリストへの遷移をシグナリングするためにハンドラを呼び出すことができ、その時点で、ハンドラが、優先順位が変更された場合に、新しい実行リストを生成して、ハードウェアに送ることができる。
実行リスト切り替えの同期化。ある実行リストモデルでは、グラフィックスハードウェアが、コンテキストを切り替えるときに割込みを生成することができる。割込みの引渡および処理は、瞬間的ではないので、CPUが実際に割り込まれる前に複数の割込みが生成される可能性がある。同期化が正しく行われない場合に、スケジューラが混乱し、不正なスケジューリング判断を行う可能性がある。
区別するようにスケジューラに指示することができる2つのクリティカルなイベントが、第1に、コプロセッサが実行リストの先頭から他に切り替えるときと、第2に、コプロセッサが保留中実行リストに切り替えるときである。このイベントを区別することは、各コンテキスト切り替えにおける単純な割込みからの情報だけでは困難になる可能性がある。この点をさらに示すために、次の例を検討されたい:コプロセッサが、現在、コンテキスト1−3−5−2からなる実行リストAを実行しており、スケジューラが、コンテキスト4−1−3−2からなる実行リストBに変更することを望む。下記の2つのシナリオが発生する可能性がある:
シナリオ#1
コプロセッサが、現在、実行リストA(1−3−5−2)を実行している。
コンテキスト4に関するコマンドがサブミットされるが、コンテキスト4は、アイドルであり、コンテキスト1より高い優先順位である。実行リストB(4−1−3−2)が生成され、スケジューラが、実行リストBをコプロセッサにサブミットする。
コンテキスト#1は、コプロセッサが、実行リストBからのコンテキスト#4に遷移するまで実行される。
コプロセッサが、遷移をシグナリングする割込みを生成する。
コプロセッサが、コンテキスト#4から#1に遷移し、その後、CPUが割り込まれる前に#3に遷移する。
CPUが、割り込まれ、コンテキスト切り替えハンドラが呼び出される。
ドライバが、現在のコプロセッサコンテキストをサンプリングするが、これは#3である。
シナリオ#2
コプロセッサが、現在、実行リストA(1−3−5−2)を実行している。
コンテキスト4に関するコマンドがサブミットされるが、コンテキスト4は、アイドルであり、コンテキスト1より高い優先順位である。スケジューラが、実行リストBをコプロセッサにサブミットする。
スケジューラが、実行リストBを構築するのにビジーである間に、コプロセッサがコンテキスト#3に遷移する。
コプロセッサが、コンテキスト#3への遷移をシグナリングする割込みを生成する。
CPUが、割り込まれ、コンテキスト切り替えハンドラが呼び出される。
ドライバが現在のコプロセッサコンテキストをサンプリングするが、これは#3である。
どちらの場合でも、コンテキスト切り替え割込みの時の現在実行されているコンテキストは、#3である。しかし、スケジューラは、追加情報がなければ、この2つのシナリオを区別できないことに留意されたい。第1のシナリオでは、コプロセッサが、実行リストBの先頭から切り替え、したがって、スケジューラは、実行リストCを生成し、それに切り替えるようにコプロセッサに要求する必要がある。しかし、第2のシナリオでは、第2の実行リストがまだ開始されておらず、したがって、スケジューラは待たなければならない。
上の例から、コンテキスト切り替え割込みだけでは、スケジューリングモデルで実行リストを正しくサポートするのに十分でない場合があることが示される。このシナリオを区別するために、さらなる情報が必要である。次の節で、この問題に対処するいくつかの方法を、そのような問題に対処するのに有用にすることができるハードウェアサポートと共に詳細に説明する。
2要素実行リスト。この同期化手法は、コプロセッサがある追加機能をサポートすることを必要とする。2要素実行リストの実施形態に関してサポートできる特徴の中に、下記がある。
1)2要素の実行リスト。
2)各コンテキスト切り替え(コンテキストXからXへのにせのコンテキスト切り替えを含む)に割込みを生成する能力。
3)VidMmが任意の時に現在実行されているコプロセッサコンテキストを照会する方法。
4)割込みの前に、進行中のコプロセッサコンテキストをメモリに保存すること。
5)スケジューラがコンテキスト切り替えの理由を判定できるようにするためにCPUによってコンテキストが可読になる方法でのコプロセッサコンテキストの保存。
ハードウェアを使用して上の機能をサポートすることができるが、スケジューラが通常のコンテキスト切り替えと実行リスト切り替えを区別できるようにするのに、そのような特殊なハードウェアが必要ではないことに留意されたい。代わりに、スケジューラは、実行リストを構成するときに単純なルールの組を必ず守ることによって、この2つのイベントを区別することができる。特定のルールは、本発明のさまざまな実施形態について変化する可能性があるが、この機能をもたらす例示的なルールは、第1に、現在の実行リストの最初のコンテキストが、新しい保留中実行リストに現れることができないことと、第2に、現在の実行リストの第2のコンテキストが、新しい保留中実行リストの先頭でない場合に、新しい保留中実行リストにこれを含めてはならないことである。下に、この2つの例示的ルールに従うときに、スケジューラが、あるコンテキストから別のコンテキストへの遷移中に行う仮定の表を示す。下の表では、実行リストAが、コンテキスト1−2からなり、第2の実行リストBが、コンテキスト2−3からなり、第3の実行リストCが、コンテキスト3−4からなる。
実行リストを実施するこの方法は、おそらく最も単純であり、必ずしもかなりの追加ハードウェアサポートを必要としない。しかし、上の表の実行リストが、サイズを制限され(2を超えるサイズの拡張は、実用的でなくなる可能性がある)、クリティカルでないいくつかの情報が、コンテキスト切り替え中に失われる可能性があることに留意されたい。たとえば、スケジューラが、必ずAからCへの遷移でコンテキスト#2が実行されたかどうかを知るとは限らない。それが実行され、ページフォールトを引き起こしたが、別のコンテキスト切り替えによって割込みを隠される可能性がある。その場合に、スケジューラは、コンテキスト#2がフォールトを生成したことを知らず、再スケジューリングする。
スケジューリングイベントのコプロセッサトレース。実行リストは、スケジューリング情報のあるヒストリ情報がハードウェアによってスケジューラに供給されるときに、簡単にサイズNまで拡張することができる。単純な割込みの問題の1つが、複数の割込みが一緒に強制される可能性があることであり、何がおきて割込みが引き起こされたかを正確に判定できない可能性があることである。これは、本発明の方法と共に、ハードウェア機能によって対処することができる。コンテキスト切り替えヒストリを、スケジューラによって可読の指定されたシステムメモリ位置に書き込むことができるハードウェアを実施することによって。本発明のこの態様を説明するために、下記のシナリオを検討されたい。
1)スケジューラが、実行リストA(1−2−3−4−5)をスケジューリングする。
2)コンテキスト#1のタイムカンタムが満了し、スケジューラが、新しい実行リストB(2−3−4−5−1)を送る。
3)CPUでカンタム満了を処理している間に、コプロセッサが、コンテキスト#1が空になるのでコンテキスト#1について完了し、したがってコンテキスト#2に遷移する。コプロセッサは、このイベントについてコンテキスト切り替え割込みを生成した。
4)コプロセッサが、新しい実行リストに関する通知をCPUから受け取り、したがって、それに遷移した。コプロセッサが、このイベントに関するコンテキスト切り替え割込みを生成した。
5)新しい実行リストのコンテキスト#2のレンダリングコマンドを処理している間に、コプロセッサが、ページフォールトに出会い、したがって、コンテキスト#3に遷移した。コプロセッサが、このイベントに関するコンテキスト切り替え割込みを生成した。
6)コンテキスト#3が、ページフォールトを発生し、したがって、コプロセッサが、コンテキスト#4に切り替えた。コプロセッサが、このイベントに関するコンテキスト切り替え割込みを生成した。
7)CPUが、最終的にコンテキスト切り替えについて割り込まれる。最初の割込みが送出されて以来、4つのコンテキスト切り替えが実際に発生した。
図19に、上のシナリオでのハードウェアヒストリ機構の動作を示す。そのようなヒストリ機構をサポートするために、下記のタスクを実行できるようにハードウェアを構成することができる。これらのタスクは、制限ではなく例として提供される。
1)ヒストリバッファのベースアドレスを指定する。コプロセッサごとに単一のヒストリバッファを設けることができる。好ましい実施形態では、これを、PCIメモリまたはAGPメモリのいずれかのシステムメモリ位置とすることができる。これを、オペレーティングシステムによって4KB境界に整列することができる。PCI expressシステムについて、このバッファへのアクセスは、スヌープサイクルを用いて実施することができ、したがって、システムメモリバッファを、より効率的なCPU読取のためにキャッシュ可能にすることができることが好ましい。
2)ヒストリバッファのサイズを指定する。ヒストリバッファは、実行リストのサイズの少なくとも2倍の長さとすることができる。これは、現在の実行リストおよび保留中実行リストの両方が、割込みが発生する前に完了する、ワーストケースシナリオを処理するのに十分なスペースがバッファ内にあることを保証するためである。
3)コプロセッサ書込ポインタを指定するが、これはヒストリバッファに書き込まれた最後のイベントの直後のアドレスとすることができる。VidMmは、コプロセッサが稼動している時を含めて、いつでもこのポインタを照会できるものとすることができる。スケジューラが常にコヒーレントなデータを得ることを保証するために、ポインタが更新される前に、ヒストリバッファ内のデータをメモリに正しくフラッシュすることができる。
さまざまな実施形態によって、ユーザモードで構築されるDMAバッファから不可視になるようにヒストリバッファを構成することができる。ヒストリバッファが、限定DMAバッファから可視の場合には、悪意のあるアプリケーションが、ヒストリバッファを上書きし、スケジューラを壊し、おそらくはシステムクラッシュまたはさらに悪い結果をもたらすことができる。このゆえに、これらの実施形態のヒストリバッファは、物理アドレスを介してハードウェアによって参照される、または特権的DMAバッファだけに可視の仮想アドレスを介して参照されるのいずれかとすることができる。これらの実施形態では、コプロセッサが、CPU介入なしでヒストリバッファの末尾でラップアラウンドすることを要求することができる。
上で説明した実施形態による実行リストによって、コプロセッサが同一の理由で同一のコンテキストで複数回フォールトできるようするための必要のすべてが除去されるわけでないことに留意されたい。これの理由の1つが、スケジューラが、一般に、コプロセッサが現在の実行リストの実行でビジーである間に新しい実行リストを構築することである。スケジューラは、前の実行リストに既に存在するコンテキストを新しい実行リストに含める必要がある場合があるので、繰り返されるコンテキストの状態が、構築される実行リストに置かれた時と、実行リストがコプロセッサにサブミットされた時の間に変化する可能性があることがありえる。
限定DMA対特権的DMA
高度なスケジューリングモデルでのメモリ保護の導入に伴って、コプロセッサに送られるDMAバッファが、主として、実行中のアプリケーションのプロセス内部のユーザモードドライバによって構築される可能性がある。これらのDMAバッファは、アプリケーションのプロセス内でマッピングされる可能性があり、ユーザモードドライバは、これらに直接に書き込むことができるが、カーネルドライバは、これを確認することができない。DMAバッファは、誤ってその仮想アドレスにアクセスするアプリケーションによって、または悪意のあるアプリケーションによって故意に、書き込まれる可能性がある。ドライバモデルがセキュアであることを可能にするために、すなわち、アプリケーションが、するべきではないリソースにアクセスできなくするために、ユーザモードで構築されるDMAバッファを、行うことが許可されるものに関して制限することができる。具体的に言うと、組み込まれるDMAバッファは、下記の例示的な方法で制限された機能性を有することができる。
1)仮想アドレスへの参照だけを含めることができ、物理アドレスへの参照はまったく(フェンスを含めて)含めることができない。
2)現在のディスプレイ(たとえば、CRT、随意アクセス制御(DAC)、Technical Document Management System(TDMS)、Television−Out Port(TV−OUT)、Internet2(I2C)バス)に影響する命令を含めることを許可されることができない。
3)アダプタ全般(たとえば位相ロックループ(PLL))に影響する命令を含めることができない。
4)限られた電源管理および/または構成スペースを有することができる。
5)コンテキスト切り替えを防ぐ命令を含めることを許可されることができない。
ユーザモードで構築されるDMAバッファでプログラム可能なレジスタの正確な組は、ハードウェアによって変化する可能性が高い。しかし、ハードウェアにかかわらずに、レジスタが一般的な規則に従うことができる、すなわち、そのようなDMAバッファは、リソースおよびフェンスへの仮想アドレス参照を使用するレンダリング動作だけを許可しなければならない。強化されたセキュリティをもたらすために、そのようなDMAバッファに、アプリケーションがアクセスするべきではないメモリ、またはある潜在的に破滅的で回復不能な方法でハードウェアに影響することができるメモリをアプリケーションが使用することを許可しないことを要求することができる。
ユーザモードで構築されるDMAバッファが、ある機能性にアクセスできなくするために、複数の手法をコプロセッサ内で実施することができる。これらの手法は、機能性の性質および機能性がアプリケーションのコプロセッサコンテキストストリームにキューイングされる必要があるかどうかに非常に依存する。ある種の特権的動作は、一般に、ユーザモードで構築されるDMAバッファ(たとえばアプリケーションレンダリング)およびカーネルモードで構築されるDMAバッファ(たとえばキューイングされたフリップ)の両方を含むコプロセッサコンテキストストリーム内でキューイングされることを必要とする。
キューイングされる必要がない機能性。ほとんどの特権的機能性は、アプリケーションコプロセッサコンテキストストリームでキューイングされることを必要としない。下記などの機能性は、キューイングされることを必要としない。
1)CRTタイミングのプログラミング。
2)DACのルックアップテーブルの更新(DAC LUTのプログラミングが、特権的機能性である必要が絶対にないことに留意されたい。というのは、どのアプリケーションでも、望むならば、プライマリスクリーンにレンダリングすることができ、ルックアップテーブル(LUT)の再プログラミングによって、そうでなければアクセスできない情報へのアクセスをアプリケーションがユーザに与えられるようにはならないからである。
3)ディスプレイ出力のプログラミング(TDMS、TV−OUT、…)
4)子デバイス/モニタとの通信(I2C、…)
5)クロックのプログラミング(PLL)
6)コプロセッサの電源状態の変更
7)コプロセッサの構成(構成スペース、BIOS、…)
この機能性は、通常は、アプリケーションレンダリングストリームと完全に独立のシステムイベント(たとえば、ブート、解像度変更、pnp検出、電源管理)の後に必要になる。したがって、この機能性は、特定のアプリケーションのコプロセッサコンテキストでキューイングされることを必要としない。この機能性は、特定のシステムイベントが発生しているときに、ユーザモードドライバからの介入を一切伴わずに、カーネルモードドライバ自体によって使用することができる。
そのような機能性について、IHVは、メモリマップ式入出力(MMIO)だけを介して基礎になるレジスタのすべてをアクセス可能にすることを決定することができる。レジスタは、一般に、カーネル空間だけにマッピングされるので、アプリケーションまたはユーザモードドライバがそれにアクセスすることを不可能にすることができ、したがって、この機能性が有効に保護される。
もう1つの手法は、コプロセッサコンテキストごとの特権レベルを実施することである。この手法では、コンテキストに、行えることを制限されるものと、そうでないものがある。そのシナリオでは、ユーザモードで構築されるアプリケーションのDMAバッファが、限定コンテキストにキューイングされる。その一方で、カーネルモードドライバは、特権的コンテキストを使用して、特権的機能性をサブミットすることができる。
キューイングされることを必要とする機能性。ユーザモードで構築されるDMAバッファに挿入できるコマンドは限られているので、コプロセッサが限定DMAバッファ(前の条件を遵守するDMAバッファ)および特権的DMAバッファの両方をサポートすることを要求するように、高度なモデルを実施することができる。特権的DMAバッファは、コプロセッサコンテキストのレンダリングストリームに沿った特権的機能性のキューイングを可能にするために必要である。
特権的DMAバッファには、非特権的DMAバッファに見られる命令のどれでも含めることができる。本発明のさまざまな好ましい実施形態によって、下記(後の節で詳細に説明する)を少なくとも可能にする特権的DMAバッファを実施することができる。
1)特権フェンスの挿入
2)フリップ命令の挿入
3)「コンテキスト切り替えなし」領域の挿入
さらに、特権的DMAバッファによって、IHVが望むすべてのハードウェアレジスタをプログラムすることができ、必要な場合に仮想メモリおよび物理メモリの両方にアクセスすることができる。特権的DMAバッファは、ユーザモードで構成することができず、可視にすることもできない。信頼されるカーネルコンポーネントだけが、特権的DMAバッファにアクセスでき、これを構築することができる。
次の節に、特権的DMAバッファを実施する可能な3つの方法を示すが、次の節は、本発明を実施できるさまざまな方法を制限せずに、特権的DMAバッファの実施という概念を説明することを意図されたものである。
1.DMAバッファは、カーネルモードでのみ構築される
特殊なハードウェアサポートを必要としない特権的DMAバッファをサポートする方法の1つが、ハードウェアに送られる実際のDMAバッファをカーネルモードで構築することを要求することである。このシナリオでは、ユーザモードドライバが、DMAバッファによく似たコマンドバッファを構築し、カーネルモードドライバにサブミットする。カーネルモードドライバは、このコマンドバッファを確認し、カーネルモードでのみ可視のDMAバッファにコピーする。確認中に、カーネルモードドライバは、特権的命令が存在しないことを検証する。これは、基本モデルで要求される確認に似ているが、メモリが仮想化されるので、メモリアクセスに関する確認は不要である。
2.リングへの直接の特権的コマンドの挿入
おそらく、特権的DMAチャネルをサポートする最も簡単なハードウェア手法は、特権的コマンドをコプロセッサコンテキストリングに直接に挿入することである。リング自体は、既に特権的チャネルであり、カーネルモードからのみアクセス可能である。これを、図20の図に示す。
3.間接参照を介する特権の指定
コプロセッサ内で限定DMAバッファ対特権的DMAバッファをサポートする異なる手法を、図21に示す。これを参照して、開始アドレスおよび終了アドレスの両方をDWORDに整列できることに留意されたい。アドレスの未使用ビットは、フラグの指定に再利用することができる。開始アドレスの第1ビットによって、リダイレクトされるDMAバッファが特権的DMAバッファであることを指定することができる。セキュリティを強化するために、特権的DMAバッファによって、補助メモリ内の物理アドレスを参照することができる。限定DMAバッファによって、コプロセッサコンテキスト仮想アドレス空間内の仮想アドレスを参照することができる。
この手法では、間接参照コマンドの1ビットを、リングバッファに挿入することができる。このビットによって、実行されるDMAバッファが特権的DMAバッファであるか否かが示される。これは、リングバッファ自体を、コプロセッサによって物理アドレスを使用して参照することができ、コプロセッサ仮想アドレス空間内で不可視にすることができることを意味する。プライマリリングバッファをコプロセッサ仮想アドレス空間内で可視にすることを許可することによって、悪意のあるアプリケーションが、プライマリリングバッファを上書きできるようになり、特権レベルでコマンドを実行できるようになり、これは、実質上、ほとんどのコンピューティング環境でのセキュリティ侵害と等しい。これに関して、特権的DMAバッファを、物理アドレスを介して参照し、限定DMAバッファのように仮想アドレスで可視でなくすることができる。
DMA制御命令
スケジューラおよび補助メモリマネージャが、コプロセッサコンテキストの進行を追跡し、そのコンテキストのDMAストリーム内の命令のフローを制御するために、DMAストリーム内で下記の例示的命令をサポートするようにコプロセッサを構成することができる。
1)フェンス(限定および特権的の両方)
2)トラップ
3)コンテキスト切り替えの許可/禁止
フェンス。フェンスは、DMAストリームに挿入することができる、あるデータ(たとえば64ビットのデータ)およびアドレスの両方を含む命令とすることができる。この命令が、コプロセッサによってストリームから読み取られるときに、コプロセッサが、フェンスに関連するデータを指定されたアドレスに書き込む。コプロセッサは、フェンスのデータをメモリに書き込む前に、フェンス命令に先立つプリミティブからのピクセルが、回収され、既にメモリに正しく書き込まれていることを保証しなければならない。これが、コプロセッサがパイプライン全体を停止させることを必要とすることを意味しないことに留意されたい。フェンス命令に続くプリミティブは、コプロセッサがフェンスの前の命令の最後のピクセルが回収されるのを待っている間に実行することができる。
上の説明にあてはまるフェンスのすべてを、本発明と共に使用することができるが、特に2タイプのフェンスすなわち、通常のフェンスおよび特権的フェンスを本明細書でさらに説明する。
通常のフェンスは、ユーザモードドライバによって作成されたDMAバッファに挿入できるフェンスである。DMAバッファの内容は、ユーザモードから来るので、信頼されない。したがって、そのようなDMAバッファ内のフェンスは、そのコプロセッサコンテキストのアドレス空間の仮想アドレスを参照することができるが、物理アドレスを参照することはできない。そのような仮想アドレスへのアクセスが、コプロセッサによってアクセスされる他の仮想アドレスと同一のメモリ確認機構によって束縛されることは言うまでもない。
特権的フェンスは、カーネルモードで作成された(カーネルモードでのみ可視の)DMAバッファに挿入することだけができるフェンスである。そのようなフェンスは、システムのセキュリティを高めるために、メモリ内の物理アドレスを参照することができる。フェンスのターゲットアドレスが、コプロセッサコンテキストのアドレス空間内で可視である場合には、悪意のあるアプリケーションが、そのメモリ位置に対してグラフィック動作を実行でき、したがって、カーネルモードコードが受け取ることを期待する内容をオーバーライドすることができる。潜在的なセキュリティ問題に対するもう1つの解決策が、非特権的DMAバッファから仮想アドレスにアクセスできるかどうかを示す、PTE内の特権ビットを有することである。しかし、上の第1の手法は、早期のハードウェア生成についてより単純と思われる。
特権的DMAバッファに、通常のフェンスと特権的フェンスの両方を含めることができることに留意されたい。しかし、特権的DMAバッファに通常のフェンスが含まれるときに、DMAバッファを生成するカーネルコンポーネントに、それが挿入したフェンスが絶対に可視にならないことがわかっている。
IHVは、フラッシュを必要とする内部バッファの数を最小にするために、余分なタイプのフェンスをサポートすると決定することができる。下記のタイプのフェンスは、この目的のためにサポートすることができるフェンスの例である(すべてのタイプについて、特権的および非特権的の両方をサポートしなければならないことに留意されたい):
1.書込フェンス
書込フェンスは、前に説明したタイプのフェンスであり、唯一の必要なフェンスタイプである。書込フェンスによって、フェンス命令の前に処理されるすべてのメモリ書込が、グローバルに可視になる(すなわち、それらがキャッシュからフラッシュされ、メモリコントローラから肯定応答が受け取られている)ことが保証される。
2.読取フェンス
読取フェンスは、書込フェンスに似た、より軽いタイプのフェンスである。読取フェンスによって、フェンスの前のレンダリング動作に関するメモリ読取のすべてが終了することが保証されるが、一部の書込が、まだ未解決である可能性がある。読取フェンスがサポートされる場合には、スケジューラは、これを使用して、非レンダターゲット割り当ての寿命を制御する。
3.トップオブパイプ(top−of−pipe)フェンス
トップオブパイプフェンスは、非常に軽量のフェンスである。トップオブパイプフェンスのサポートは、任意選択である。トップオブパイプフェンスによって、DMAバッファ内でフェンス命令の前の最後のバイトが、コプロセッサによって読み取られた(必ずしも処理されていない)ことだけが保証される。コプロセッサは、フェンスが処理された後に(そのDMAバッファンの内容がもはや有効でなくなるので)、DMAバッファのうちでトップオブパイプフェンスに先立つ部分を再読み取りしない場合がある。サポートされる場合に、このタイプのフェンスは、DMAバッファの寿命を制御するのにスケジューラによって使用される。
トラップ。トラップは、本発明のさまざまな実施形態で実施することができる。トラップは、コプロセッサによって処理されるときにCPU割込みを生成できる、DMAバッファに挿入された命令とすることができる。コプロセッサがCPUに割り込む前に、トラップ命令に先立つプリミティブからのすべてのピクセルが、回収され、メモリに正しく書き込まれていることを保証する(フェンス命令からのメモリ書込を含むことができる動作)ことが賢明である。これが、コプロセッサがパイプライン全体を停止させる必要があることを意味しないことに留意されたい。トラップ命令に続くプリミティブは、コプロセッサがトラップの前の命令の最後のピクセルが回収されるのを待っている間に実行することができる。
トラップ命令は、特権的命令である必要はなく、ユーザモードドライバによって直接に構築されるものを含むすべてのDMAバッファに挿入することができる。
コンテキスト切り替えの許可/禁止。サブトライアングル(sub−triangle)割込みをサポートするハードウェアについて、コンテキスト切り替えを許可または禁止する命令を設けることができる。コンテキスト切り替えが禁止されている間は、コプロセッサは、一般に、現在のコプロセッサコンテキストから切り替えてはならない。コプロセッサは、CPUによって新しい実行リストが提供される場合に現在の実行リストの情報を更新することを要求される場合があるが、コプロセッサは、コンテキスト切り替えが再度許可されるまで、新しい実行リストへのコンテキスト切り替えを延期することができる。OSは、コンテキスト切り替えが禁止されているときに下記のルールが残ることを保証することができる。
1)特権的DMAバッファだけが処理される。
2)コンテキスト切り替え命令がDMAストリームに存在しない。
3)DMAストリームの命令が使い果たされない。
4)ページフォールトが発生しない(ページレベルフォールトがサポートされる場合)。
多くのコンピュータシステムで、コンテキスト切り替えの禁止および許可は、特権的DMAバッファ内にのみ存在することができる特権的命令である。これらの命令の使用のシナリオでは、割り込まれる可能性なしで、スケジューラがスクリーンに現れる動作(すなわちプレゼンテーションブリット)をスケジューリングできるようになる。そのような動作で割り込まれることは、容易に目につく時間期間にわたる画面上の可視のアーチファクトにつながる可能性がある。
コプロセッサが、DMAバッファ内で不測のエラーに出会う場合に、コンテキスト切り替えが禁止されていても、このDMAバッファからコンテキストを切り替えることができることに留意されたい。カーネルモードで構築されるDMAバッファだけに、割込み不能部分を含めることができるので、不測のエラーは、ドライバのバグまたはハードウェアのバグの結果である。コプロセッサが、これらのシナリオでコンテキストを切り替えない場合には、ディスプレイウォッチドッグがハングを把握し、システムを回復するためにコプロセッサをリセットする。
任意選択の制御命令。スケジューラは、上で説明した単純な制御命令を用いて高水準同期化プリミティブを構築することができるが、その結果を、さらに効率的にすることができる。多くのコンピュータシステムで、コプロセッサコンテキストは、同期化オブジェクトの所有権を得る前にCPUによって割り込まれる。同期化オブジェクトが高い頻度で取られ、解放される場合に、これが問題になる可能性がある。より効率的な同期化プリミティブを有するために、スケジューラは、コプロセサから特殊な命令を受け取ることができる。具体的に言うと、「ウェイト」命令および「シグナル」命令を適当な時に送出するようにコプロセッサを構成することができる。
ウェイト命令は、指定されたカウンタの値を検査できることをコプロセッサに知らせるためにDMAストリームに挿入される。カウンタが非ゼロの場合には、コプロセッサは、カウンタを減分し、現在のコプロセッサコンテキストの実行を継続する。カウンタがゼロの場合には、コプロセッサは、現在のコプロセッサコンテキストの命令ポインタをウェイト命令の前にリセットし、実行リストの次のコンテキストに切り替える。コプロセッサコンテキストが、ウェイト命令で停止する必要があり、後に再スケジューリングされるときに、コプロセッサは、そのウェイト命令を再実行することができる。というのは、ウェイト条件がまだ満足されていない可能性があるからである。
ウェイト命令は、1つのパラメータすなわち、比較/減分されるメモリ位置を指定する仮想アドレスを有することだけを必要とする。カウンタは、少なくとも32ビットとすることができ、任意の有効な仮想アドレスとすることができる。好ましい実施形態では、ウェイト命令を割込み不能とすることができる、すなわち、新しい実行リストがコプロセッサに与えられる場合に、コプロセッサは、ウェイト命令の前またはそれを実行した後のいずれかに新しい実行リストに切り替えることができる。ウェイト命令は、限定DMAバッファおよび特権的DMAバッファの両方に挿入することができる。
シグナル命令は、カウンタの値を更新できることをコプロセッサに知らせるためにDMAストリームに挿入することができる。コプロセッサは、カウンタの値を1つ増分することができる。コプロセッサは、加算中の潜在的なオーバーフローを無視することができる。その代わりに、コプロセッサが、ソフトウェアバグを追跡するのを助けるために、ストリーム内のエラーとしてオーバーフローを報告することができる。
シグナル命令は、1つのパラメータすなわち、更新されなければならないカウンタの仮想アドレスだけを有することを必要とする。カウンタサイズは、ウェイト命令のカウンタサイズと一致するようにすることができ、好ましい実施形態では、少なくとも32ビットである。シグナル命令は、限定DMAバッファおよび特権的DMAバッファの両方に挿入することができる。
フリップ
全画面アプリケーションが、パイプライン内のバブルなしでシームレスに動作できるようにするために、コプロセッサによって、フリップ(すなわち、ディスプレイのベースアドレスの変更)をキューイングする命令を提供することができる。ディスプレイサーフェスは、一般に、物理モデルから連続的に割り当てられ、仮想アドレスではなく物理アドレスを使用してCRTCによって参照される。したがって、フリップ命令を使用して、CRTCを、表示される新しい物理アドレスにプログラムすることができる。これは、物理アドレスであって仮想アドレスではないので、不良アプリケーションが、潜在的に、補助メモリのうちで別のアプリケーションまたはユーザに属する部分(秘密が含まれる可能性がある)を表示するようにCRTCをプログラムすることができる。このため、フリップ命令を実施して、宛先が確認されてからカーネルモデルドライバによってのみDMAストリームに挿入される特権的命令であることを保証することによって、ほとんどのコンピュータシステムのセキュリティを保護することができる。
フリップ機能と共に使用される本発明のさまざまな好ましい実施形態で、少なくとも2つのタイプのフリップ、すなわち、即時フリップおよびディスプレイリフレッシュと同期したフリップがサポートされる。コプロセッサは、即時フリップを処理するときに、可視のティアリング(tearing)が引き起こされる場合であっても、ディスプレイのベースアドレスを即座に更新することができる。コプロセッサは、同期式フリップを処理するときに、新しいベースアドレスをラッチすることができるが、次の垂直同期期間まで更新を延期する。垂直同期期間の間にコプロセッサによって複数の同期式フリップが処理される場合に、コプロセッサは、最新のフリップだけをラッチし、前のフリップを無視することができる。
同期式フリップを処理するときに、コプロセッサがグラフィックスパイプラインを停止させないように、さまざまな実施形態を構成することができる。OSは、現在可視のサーフェスに描画するレンダリングコマンドがリングバッファにキューイングされないことを保証する。ここで、下でさらに説明する「最適化されたフリップ」の情況で、これらの要件なしで他の実施形態を構成できることに留意されたい。
どのサーフェスが現在可視であるかを判定するために、ドライバは、まず、特定のキューイングされたフリップが行われたときを判定することができ、そのイベントについてスケジューラに通知する、すなわち、ディスプレイベースアドレスが変更された後にスケジューラに通知することができる。即時フリップについて、フリップが行われたときを判定するのは簡単である。というのは、DMAストリームからのフリップ命令の読取を、ディスプレイサーフェスの更新と同一のイベントとみなすことができるからである。DMAストリーム内でフリップ命令の後にフェンスおよび割込みを挿入して、特定のフリップが読み取られたことをスケジューラに通知することができる。
同期式フリップの場合には、どのサーフェスが現在可視であるかの判定が、より困難である。コプロセッサは、まず、DMAストリームからフリップ命令を読み取るが、後に、次の垂直同期期間にディスプレイサーフェスを更新する。その時にコプロセッサを停止させる必要をなくすために、ディスプレイサーフェス変更が有効になるときをスケジューラに通知する機構を設けることができる。
本発明と共に使用されるそのような通知の機構を設計する複数の方法がある。1つの潜在的に単純な手法を、図22に示す。図22に、現在のディスプレイサーフェスに関してコプロセッサに照会する方法を示す。図示の実施形態では、この機能を、MMIOレジスタによって提供されるものと考えることができる。図22のシステムは、最新の「ラッチ式ディスプレイサーフェス」ではなく、レジスタによって実際のディスプレイサーフェスが読み取られるときに、より高い信頼性につながる設計である。最新のラッチされたディスプレイサーフェスの照会は、コプロセッサが別のキューイングされたフリップを処理する、競争状態をもたらす可能性があり、これは画面のティアリングにつながる可能性がある。フリップ命令は、適当な技法を使用して生成することができる。本発明との互換性に関する唯一の一般的な要件は、実施される解像度によって、フリップが、有効になるまで肯定応答されないことを保証することである。
フリップのキューイング。最大限の性能を実現するために、高度なスケジューリングモデルを修正して、モニタを所有するアプリケーションのレンダリングストリームにフリップ動作をキューイングすることができる。nバッファリングを行うときに、スケジューラは、n−1個までのフリップをDMAストリームにキューイングすることを許可でき、n番目のフリップが挿入されようとするときにブロックすることができる。
これが意味するのは、ダブルバッファリングにおいて、スケジューラが、アプリケーションが1つのフリップをキューイングするのを許可することができ、コプロセッサが現在のフレームのレンダリングおよびそのフリップの処理/肯定応答を終了する間に次のフレームのDMAバッファの準備を継続させることができることである。これは、アプリケーションが、次のフレームのDMAバッファの準備を終了し、第2のフリップをサブミットする時まで、第1のフリップがコプロセッサによって肯定応答されるまでアプリケーションをブロックできることも意味する。
即時フリップが、スケジューラによって使用されるときに、フリップをキューイングする機構は、上で説明したように働く。しかし、同期式フリップを使用するときには、スケジューラは、フリップn−1を超えてキューイングされるDMAバッファも特別に処理することができる。実際、フリップを超えるDMAバッファは、一般に、現在可視のサーフェスにレンダリングされる。ほとんどのシステムで、現在キューイングされているフリップの数がn−2以下になるまで、これらのDMAバッファを処理しないことが賢明である。
この問題に対処する最も単純な手法は、n−1個ではなく、n−2個のフリップだけをキューイングできるようにすることである。しかし、この解決策は、ダブルバッファリングの場合に、フリップをキューイングできず、したがって、対応するフリップが処理されるまで、各フレームが完了した後にアプリケーションをブロックする必要があることも意味する。
この設定での好ましい手法を、図23に示す。図からわかるように、n−1個のフリップのキューイングが、許可される。フリップn−1の後にキューイングされたDMAバッファが実行されないようにするために、スケジューラは、そのコプロセッサコンテキストについて仮想リングバッファにDMAバッファを累積することができる。スケジューラは、現在キューイングされているフリップの数がn−2に減るまで待って、これらのフリップをそのコプロセッサコンテキストの実際のリングにサブミットする。
同時に複数のアプリケーションが動作しているときに、コプロセッサは、図23に示されているように停止する必要がない場合がある。コプロセッサは、一般に、特定のコプロセッサコンテキストからのDMAバッファの処理を停止するが、スケジューラは、実行される他のコプロセッサコンテキストをスケジューリングすることができ、効果的にコプロセッサをビジーに保つ。しかし、単一のアプリケーションが実行されているとき、たとえば、全画面ゲームをプレイしているときに、コプロセッサは、これらのインターバル中に停止する可能性がある。次の節で、サポートされる場合に停止時間を減らすためにスケジューラによって使用される機構を説明する。
最適化されたフリップ。全画面アプリケーションについて最適化することを試みて、コプロセッサが停止するのに要する時間を最小限に減らすことが望まれる。図23を参照して、コプロセッサが、少なくとも2つの理由で停止する可能性があることを観察されたい:その理由は、第1に、フレームが完了したが、システムがフリップのためにvsyncを待っているため、第2に、フリップが完了したが、システムがCPUに通知するための割込みを待っているため、である。
第1の理由に起因する停止を減らすために、より多くのバッファを、フリップのチェーンに追加することができる。たとえば、ダブルバッファからトリプルバッファに移ることによって、そのような停止が大幅に減る。しかし、これを行うことは、必ずしもドライバの制御下ではなく、不当なメモリ消費がもたらされる場合がある。
第2の理由に起因する停止を減らすために、この停止の必要を完全に除去するためにコプロセッサ機構を追加することが可能である。コプロセッサは、前にキューイングされたフリップが処理されるまでコプロセッサを停止させるウェイトオンフリップ命令を提供することができる。そのような命令がサポートされるときに、スケジューラは、フリップをキューイングするために全画面アプリケーションについてその命令を使用することができ、CPUは、各フリップの後でDMAストリームを再開する必要がなくなる。
高水準の同期化オブジェクト
前に定義した制御命令を使用して、スケジューラによって、クリティカルセクションおよびミューテクスなどの高水準の同期化オブジェクトを構築することができる。スケジューラは、待機の条件が満たされたならば、CPUによって明示的に再スケジューリングされるまで、選択されたDMAバッファを実行されないように保護することによって、そのような同期化プリミティブを実施することができる。オブジェクトの待機は、フェンスなど、スケジューラによって実施することができる。論理的にフェンスに続くDMAバッファを、スケジューラによってキューイングすることができるが、待機条件が満たされるまで、コプロセッサコンテキストのリングにサブミットすることはできない。オブジェクトを待つようになったならば、シグナリングされるまで、スケジューラによってコプロセッサコンテキストをその特定のオブジェクトのウェイトリストに移動することができる。コプロセッサコンテキストDMAストリームに、割込みコマンドが続くフェンスを挿入することによって、オブジェクトにシグナリングすることができる。そのような割込みを受け取るときに、スケジューラは、どのオブジェクトがシグナリングされているかを識別し、待っているコプロセッサコンテキストをレディキューに戻さなければならないかどうかを判定することができる。コプロセッサコンテキストをレディキューに戻すときに、スケジューラは、リングからしまわれたDMAバッファを挿入する。
たとえば、アプリケーションが、生産者(プロデューサ)と消費者(コンシューマ)の間で共有されるサーフェスを有し、アプリケーションが、リソースへのアクセスを同期化し、その結果、コンシューマがレンダリング中に必ず有効な内容を使用するようにする必要がある、本発明の実施形態を検討されたい。このシナリオを同期化する1つの潜在的な方法を、図24に示す。
図24に移ると、スケジューラ側で、同期化を、たとえば下記のカーネルサンクスを介して実施することができ、このカーネルサンクは、任意の組合せでまたは他のアクションと組み合わせて実施することができる。
1)CreateSynchronizationObject:同期化オブジェクトのカーネル追跡構造体を作成する。後続の待機/解放/削除呼出しで使用することができるオブジェクトへのハンドルをユーザモードに返す。
2)DeleteSynchronizationObject:前に作成されたオブジェクトを破棄する。
3)WaitOnSingleObject/WaitOnMultipleObject:現在のコプロセッサコンテキストのDMAストリームに同期化待機イベントを挿入する。待たれているオブジェクトへの参照と共にイベントをスケジューライベントヒストリに挿入する。
4)ReleaseObject/SignalObject:現在のコプロセッサコンテキストのDMAストリームに同期化シグナルイベントを挿入する(フェンス/割込み)。解放されるかシグナリングされるオブジェクトへの参照と共にイベントをスケジューライベントヒストリに挿入する。
図24の例をミューテクスに適用すると、コプロセッサが、DMAストリーム内の同期化イベントを処理したならば、スケジューラは、下記のアクションを実行することができ、これらのアクションも、任意の組合せでまたは他のアクションと組み合わせて実施することができる。
1)待機時に:ミューテクスの状態を検査する。ミューテクスが現在とられていない場合には、ミューテクスをとり、コプロセッサスレッドをスケジューラのレディキューに戻す。ミューテクスがすでに取られている場合には、コプロセッサスレッドをそのミューテクスの待機キューに入れる。
2)シグナリング時に:他のコプロセッサスレッドがミューテクスを待っているかどうかを検査する。他のいくつかのスレッドが待っている場合には、リストの最初の待っているスレッドをとり、スケジューラのレディリストに戻す。待っているスレッドがない場合には、ミューテクスをとられていない状態に戻す。
この機構を使用して、スケジューラが構築することができる。たとえば、スケジューラによって構築できる下記のタイプの同期化プリミティブを検討されたい。
ミューテクス:1時に1つのコプロセッサスレッドだけが、共有リソースへのアクセス権を有することができる
セマフォ:指定された数のコプロセッサスレッドが、同時に共有リソースへのアクセス権を有することができる。
通知イベント:複数のコプロセサスレッドが、別のコプロセッサスレッドからのシグナルを待つことができる。
いくつかのシナリオで、アプリケーションを構成して、コプロセッサがレンダリング命令の処理を終えたときの通知を要求することができる。これをサポートするために、スケジューラは、ドライバが、それがサブミットしているDMAバッファに関する通知を要求できるようにすることができる。ドライバは、サブミット時にCPU同期化イベントを指定することができ、このイベントは、サブミットされたDMAバッファについてコプロセッサが終了した後にシグナリングすることができる。スケジューラは、所与のコプロセッサコンテキストのリングに所与のDMAバッファを挿入することができ、その後、リングにユーザモードコプロセッサイベント通知(フェンスとそれに続く割込み)を追加することができる。コプロセッサイベントがコプロセッサによって処理されるときに、スケジューラは、関連するCPU同期化イベントをシグナリングすることができる。
スケジューライベントヒストリバッファ
スケジューラは、上で説明した同期化機構を複数の目的に使用することができる。割込みによってコプロセッサが停止しないので、CPUは、通知のサブセットだけを見る必要があり、したがって、一部の通知を、一緒に圧搾することができる。DMAバッファ内のすべての通知に正しく応答するために、スケジューラは、挿入されたイベントのヒストリを、これらのイベントを処理するのに必要なすべてのパラメータと共に維持することができる。
イベントヒストリバッファは、単に、スケジューラ処理を必要とし、そのコンテキストのDMAストリームに挿入されたすべてのイベントを追跡するイベント情報構造のコプロセッサコンテキストごとの配列とすることができる。スケジューラフェンスが、スケジューラによってイベントを同期化するのに使用されるフェンスであることに留意されたい。コプロセッサコンテキストごとに1つのフェンスを設けることができ、セキュリティを保つために、フェンスを、特権的命令を介してのみ更新が許可されるようにすることができる。いずれの場合でも、そのようなイベントは、フェンス命令およびそれに続く割込み命令としてDMAストリームに挿入することができる。
各フェンス割込み時に、スケジューラは、まず、現在のフェンスを判定し、次に、イベントヒストリバッファを調べて、どのイベントが発生したかを判定することができる。この判定は、関連するフェンスに基づいて行うことができる。スケジューラは、フェンス割込みの処理に進むことができる。図25に、イベントヒストリバッファのさまざまな実施形態を示す。
任意の数のイベントをサポートすることができる。下の表に、現在サポートされているイベントの一部を示すが、この表は、潜在的にサポートされるイベントの数またはタイプを制限することを意図されたものではない。
プログラマブルPCIアパーチャ
現在のコプロセッサは、PCI仕様によって許可される限度に非常に近いところまでPCIアパーチャを公開している。将来の世代のコプロセッサは、アパーチャを介して公開できるものより多くのオンボードの補助メモリを有する。したがって、将来に、すべての補助メモリが同時にPCIアパーチャを介して可視になると仮定することができなくなる。
この制限を回避できる複数の方法がある。コプロセッサコンテキストごとの仮想アドレス空間をサポートする高度なスケジューリングモデルに好ましい方法は、補助メモリのどこにでも4KB粒度でリダイレクトできるPCIアパーチャを使用することである。これを図26に示す。
図26に示された、PCIアパーチャページテーブルは、コプロセッサページテーブルと独立とすることができる。コプロセッサ自体があるコンテキストから別のコンテキストに切り替えつつある間に、複数のCPUプロセスが動作し、PCIアパーチャの一部にアクセスしている可能性がある。PCIアパーチャのページテーブルは、すべてのプロセッサコンテキストの間の共有リソースであり、補助メモリから割り当てられる。ドライバは、マップ/アンマップDDIを提供して、補助メモリマネージャVidMmが、動作中のアプリケーションの間でPCIアパーチャアドレス空間を管理できるようにすることができる。PCIアパーチャのページテーブルを、コプロセッサによって、物理アドレスを使用して参照することができる。
PCIアパーチャが、アドレス空間をローカル補助メモリだけにリダイレクトするように構成される可能性があることに留意されたい。VidMmが、そのアパーチャを介するのではなく、必ずシステムメモリを直接にマッピングするので、アドレス空間をシステムメモリにリダイレクトする必要はない。
ページレベルフォールト
前に説明したサーフェスレベルフォールトは、ほとんどの場合に良好に働くことができるが、改善できるシナリオがある。たとえば、サーフェスレベルフォールトを使用すると、非常に大きいデータセットを使用するあるアプリケーションが、同時にメモリ内にデータセット全体を置くことができず、したがって正しく機能しない場合がある。高度なモデルで実施できるこれに対する解決策が、ページレベルフォールト機構である。
ページレベルフォールトを用いると、モデルは、前の節で説明したものと同様に働く。主要な相違は、ページフォールトがVidMmに報告され、VidMmによって処理される方法にある。サーフェスレベルフォールトでは、コプロセッサが、進行するために必要とするリソースのリスト全体を指定する必要がある(あるリソースのページングが別の必要なリソースを追い出すことを意味する無限ループを除去するために)場合があるが、ページレベルフォールトに対し、コプロセッサが仮想アドレスのリストを公開する必要がない。ページレベルフォールトでは、コプロセッサは、フォールトした仮想アドレスを報告するだけでよい。VidMmは、このアドレスがどの割り当ての一部であるかを見つけ、この特定のページだけが常駐にされる必要があるかどうか、またはあるプリフェッチが必要であるかどうかを判断することができる。複数のページが、単一ピクセルによって要求されるときには、複数のフォールトがその単一ピクセルに関して生成される可能性がある。また、そのピクセルによって要求されるページが、別のページがページインされるときに追い出される可能性がある。しかし、アプリケーションの作業セットが、1ピクセルに必要になる可能性があるページの最大個数より十分に大きい限り、ページフォールトを介するループの可能性は、非常に低い。
最後に、本明細書に記載のさまざまな技法を、ハードウェアまたはソフトウェア、あるいは、適当な場合にこの両方の組合せに関して実施できることを理解されたい。したがって、本発明の方法および装置、あるいはそのある態様または部分が、フロッピ(R)ディスク、CD−ROM、ハードドライブ、または他のマシン可読記憶媒体などの有形の媒体で実施されるプログラムコード(すなわち命令)の形式をとることができ、プログラムコードが、コンピュータなどのマシンにロードされ、これによって実行されるときに、そのマシンが、本発明を実施する装置になる。プログラム可能コンピュータでのプログラムコード実行の場合に、コンピューティングデバイスに、一般に、プロセッサ、プロセッサによって読取可能な記憶媒体(揮発性および不揮発性のメモリおよび/または記憶要素を含む)、少なくとも1つの入力デバイス、および少なくとも1つの出力デバイスが含まれる。たとえばデータ処理API、再利用可能なコントロール、および類似物など、本発明のユーザインターフェース技法を実施または使用することができる1つまたは複数のプログラムは、コンピュータシステムと通信するための、高水準手続き型プログラミング言語または高水準オブジェクト指向プログラミング言語で実施されることが好ましい。しかし、望まれる場合に、プログラムをアセンブリ言語またはマシン語で実施することができる。どの場合でも、言語は、コンパイルされる言語または解釈されるものとすることができ、ハードウェア実施形態と組み合わされる。
例示的実施形態では、独立型コンピュータシステムに関する本発明の使用に言及したが、本発明は、それに制限されるのではなく、ネットワーク環境または分散コンピューティング環境など、任意のコンピューティング環境に関して実施することができる。さらに、本発明は、複数の処理チップまたはデバイスの中またはこれにまたがって実施することができ、記憶は、同様に複数のデバイスにまたがって行うことができる。そのようなデバイスに、パーソナルコンピュータ、ネットワークサーバ、ハンドヘルドデバイス、スーパーコンピュータ、あるいは、自動車または航空機などの他のシステムに一体化されたコンピュータを含めることができる。
したがって、本発明は、単一の実施形態に制限されるのではなく、請求項による幅および範囲において解釈されなければならない。

Claims (25)

  1. コプロセッサによる処理のためにタスクのスケジューリングを支援する装置であって、
    中央処理装置(CPU)と、
    コプロセッサと、
    前記コプロセッサによる処理のためにタスクを生成する1つまたは複数のアプリケーションであって、前記タスクは、まず、アプリケーション固有メモリ位置に保管される1つまたは複数のアプリケーションと、
    前記タスクが処理される順序を判定するスケジューラプロセスとを備え、前記順序は、第1アプリケーションと1つまたは複数の他のアプリケーションとの間の任意の相対優先順位、ならびに前記第1アプリケーションおよび1つまたは複数の他のアプリケーションが資格を与えられる処理時間の対応する量を考慮に入れることを特徴とする装置。
  2. 前記コプロセッサは、GPUであることを特徴とする請求項に記載の装置。
  3. 前記コプロセッサは、タスク情報をコプロセッサによりアクセス可能なメモリ位置に自動的に保存することによって、タスクの処理中に割込みを支援することを特徴とする請求項に記載の装置。
  4. 1つまたは複数のタスクのプライベートアドレス空間、タスクが累積されるプライベートリングバッファ、およびタスクが処理されていないときにハードウェア状態が保存されるコプロセッサによりアクセス可能なメモリのプライベート部分の少なくとも1つをさらに備えることを特徴とする請求項に記載の装置。
  5. 前記コプロッサは、前記スケジューラプロセスによって読み取り可能な指定されたシステムメモリ位置に、タスクからタスクへのコプロセッサ切り替えのヒストリに関する情報を保管することができることを特徴とする請求項に記載の装置。
  6. 前記コプロセッサは、前記システムメモリ位置にタスクからタスクへのコプロセッサ切り替えの前記ヒストリに関する情報を保管する前に、前記システムメモリ位置のベースアドレスを指定することを特徴とする請求項に記載の装置。
  7. 前記コプロセッサは、前記システムメモリ位置にタスクからタスクへのコプロセッサ切り替えの前記ヒストリに関する情報を保管する前に、前記システムメモリ位置のサイズを指定することを特徴とする請求項に記載の装置。
  8. 前記コプロセッサは、前記システムメモリ位置のどこに前記コプロセッサが次に書き込まなければならないかを示す書込ポインタを指定することを特徴とする請求項に記載の装置。
  9. 前記コプロセッサは、前記コプロセッサにフェンス命令で指定されるアドレスに前記フェンス命令に関連するデータを書き込ませるフェンス命令を支援することを特徴とする請求項に記載の装置。
  10. 前記コプロセッサは、前記コプロセッサによって処理されるときにCPU割込みを生成することができるトラップ命令を支援することを特徴とする請求項に記載の装置。
  11. 前記コプロセッサは、コンテキスト切り替えが禁止されるときに前記コプロセッサが現在のコプロセッサタスクから切り替えないようにするコンテキスト切り替え許可/禁止命令を支援することを特徴とする請求項に記載の装置。
  12. コプロセッシングスケジューラと共に使用されるコプロセッサであって、
    スケジューラプロセスによってそれにサブミットされるタスクを処理するコプロセッサであって、前記スケジューラプロセスは、前記タスクの処理を要求するアプリケーションの優先順位に従って前記コプロセッサにタスクをサブミットし、前記優先順位は、1つまたは複数のアプリケーションが資格を与えられるコプロセッサ時間の量を決定するコプロセッサ
    を備えることを特徴とするコプロセッサ。
  13. 前記タスクは、まず、アプリケーション固有メモリ位置に保管されることを特徴とする請求項12に記載のコプロセッサ。
  14. 前記コプロセッサは、コンテキストごとのアドレス空間内にタスクに関する情報を保管し、さらに、タスクに関する前記情報は、1つまたは複数の間に入るタスクを処理した後に前記コプロセッサが前記タスクまたは前記タスクの一部を処理できるようにすることを特徴とする請求項12に記載のコプロセッサ。
  15. 前記コプロセッサは、切り替えイベントが発生するときに実行リストの後続タスクに即座に切り替えることによって、前記実行リストからのタスクを処理することを特徴とする請求項12に記載のコプロセッサ。
  16. 切り替えイベントが、前にサブミットされたタスクの処理の完了、タスクの処理でのページフォールト、タスクの処理での一般保護フォールト、および中央処理装置(CPU)による新しい実行リストへの切り替えの要求の少なくとも1つを含むことを特徴とする請求項15に記載のコプロセッサ。
  17. 前記コプロセッサは、GPUを含むことを特徴とする請求項12に記載のコプロセッサ。
  18. 前記コプロセッサは、メモリマネージャによって、コプロセッサ可読メモリ内のメモリリソースにアクセスすることを特徴とする請求項12に記載のコプロセッサ。
  19. 前記メモリリソースは、仮想メモリアドレスへの参照を含むことを特徴とする請求項18に記載のコプロセッサ。
  20. ユーザモードドライバがシステムセキュリティを危険にさらさずにDMAバッファを構築できるようにすることによってコプロセッサタスクの効率的なスケジューリングを可能にするコンピューティングシステムであって、
    コプロセッサと、
    特権的メモリとして指定されたメモリと、
    限定DMAバッファを構築するユーザモードドライバであって、前記コプロセッサは、前記限定DMAバッファを処理しているときに前記特権的メモリにアクセスできないユーザモードドライバと、
    特権的DMAバッファを構築するカーネルモードであって、前記コプロセッサは、前記特権的DMAバッファを処理しているときに前記特権的メモリにアクセスできるカーネルモードと
    を備えることを特徴とするコンピューティングシステム。
  21. 前記コプロセッサは、GPUであることを特徴とする請求項20に記載のコンピューティングシステム。
  22. ハンドルごとの基準でメモリが特権的メモリとして指定されるかどうかを指定する機構およびページごとの基準でメモリが特権的メモリとして指定されるかどうかを指定する機構の1つをさらに備えることを特徴とする請求項20に記載のコンピューティングシステム。
  23. 前記コプロセッサは、特権的メモリとして指定されたメモリにアクセスするように前記限定DMAバッファが前記コプロセッサに指示する場合に、ページフォールトを生成することを特徴とする請求項20に記載のコンピューティングシステム。
  24. 前記限定DMAバッファの特徴は、仮想アドレスへの参照だけを含むこと、現在の表示に影響する命令を含まないこと、アダプタに影響する命令を含まないこと、限られた電源管理を有すること、限られた構成スペースを有すること、およびコンテキスト切り替えを防ぐ命令を含まないことの1つを含むことを特徴とする請求項20に記載のコンピューティングシステム。
  25. 特権的メモリとして指定される前記メモリは、コプロセッサコンテキストごとの基準で特権があるものとして指定されることを特徴とする請求項20に記載のコンピューティングシステム。
JP2010186585A 2003-02-18 2010-08-23 タスクのスケジューリングを支援する装置 Expired - Fee Related JP5335743B2 (ja)

Applications Claiming Priority (10)

Application Number Priority Date Filing Date Title
US44840003P 2003-02-18 2003-02-18
US44840203P 2003-02-18 2003-02-18
US44839903P 2003-02-18 2003-02-18
US60/448,400 2003-02-18
US60/448,402 2003-02-18
US60/448,399 2003-02-18
US47451303P 2003-05-29 2003-05-29
US60/474,513 2003-05-29
US10/763,777 2004-01-22
US10/763,777 US7673304B2 (en) 2003-02-18 2004-01-22 Multithreaded kernel for graphics processing unit

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2004042172A Division JP4979880B2 (ja) 2003-02-18 2004-02-18 グラフィックス処理ユニットのマルチスレッド式カーネル

Publications (2)

Publication Number Publication Date
JP2010287254A true JP2010287254A (ja) 2010-12-24
JP5335743B2 JP5335743B2 (ja) 2013-11-06

Family

ID=32738973

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2004042172A Expired - Fee Related JP4979880B2 (ja) 2003-02-18 2004-02-18 グラフィックス処理ユニットのマルチスレッド式カーネル
JP2010186585A Expired - Fee Related JP5335743B2 (ja) 2003-02-18 2010-08-23 タスクのスケジューリングを支援する装置

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2004042172A Expired - Fee Related JP4979880B2 (ja) 2003-02-18 2004-02-18 グラフィックス処理ユニットのマルチスレッド式カーネル

Country Status (4)

Country Link
US (4) US7673304B2 (ja)
EP (2) EP1450257A3 (ja)
JP (2) JP4979880B2 (ja)
CN (2) CN1538296B (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014504416A (ja) * 2010-12-15 2014-02-20 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 組み合わせたcpu/gpuアーキテクチャシステムにおけるデバイスの発見およびトポロジーのレポーティング
JP2017507398A (ja) * 2014-01-06 2017-03-16 ジョンソン コントロールズ テクノロジー カンパニーJohnson Controls Technology Company 複数のユーザインターフェース動作ドメインを有する車両
US9741090B2 (en) 2013-06-03 2017-08-22 Panasonic Intellectual Property Corporation Of America Graphics display processing device, graphics display processing method, and vehicle equipped with graphics display processing device

Families Citing this family (170)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6895520B1 (en) 2001-03-02 2005-05-17 Advanced Micro Devices, Inc. Performance and power optimization via block oriented performance measurement and control
US9849372B2 (en) * 2012-09-28 2017-12-26 Sony Interactive Entertainment Inc. Method and apparatus for improving efficiency without increasing latency in emulation of a legacy application title
US7673304B2 (en) * 2003-02-18 2010-03-02 Microsoft Corporation Multithreaded kernel for graphics processing unit
US7015913B1 (en) * 2003-06-27 2006-03-21 Nvidia Corporation Method and apparatus for multithreaded processing of data in a programmable graphics processor
US7239322B2 (en) 2003-09-29 2007-07-03 Ati Technologies Inc Multi-thread graphic processing system
US7676809B2 (en) * 2003-10-09 2010-03-09 International Business Machines Corporation System, apparatus and method of enhancing priority boosting of scheduled threads
US7725618B2 (en) * 2004-07-29 2010-05-25 International Business Machines Corporation Memory barriers primitives in an asymmetric heterogeneous multiprocessor environment
CN100451950C (zh) * 2004-08-27 2009-01-14 松下电器产业株式会社 信息处理装置、例外控制电路
US7369135B2 (en) * 2004-10-29 2008-05-06 Nvidia Corporation Memory management system having a forward progress bit
US7409719B2 (en) * 2004-12-21 2008-08-05 Microsoft Corporation Computer security management, such as in a virtual machine or hardened operating system
US7647557B2 (en) * 2005-06-29 2010-01-12 Intel Corporation Techniques for shuffling video information
US20070038939A1 (en) * 2005-07-11 2007-02-15 Challen Richard F Display servers and systems and methods of graphical display
US8817029B2 (en) * 2005-10-26 2014-08-26 Via Technologies, Inc. GPU pipeline synchronization and control system and method
US8087021B1 (en) * 2005-11-29 2011-12-27 Oracle America, Inc. Automated activity processing
US8212832B2 (en) * 2005-12-08 2012-07-03 Ati Technologies Ulc Method and apparatus with dynamic graphics surface memory allocation
US7656409B2 (en) * 2005-12-23 2010-02-02 Intel Corporation Graphics processing on a processor core
US7911474B2 (en) * 2006-04-03 2011-03-22 Siemens Medical Solutions Usa, Inc. Memory management system and method for GPU-based volume rendering
US8081184B1 (en) * 2006-05-05 2011-12-20 Nvidia Corporation Pixel shader program thread assembly
CN101071388B (zh) * 2006-05-12 2010-05-12 联想(北京)有限公司 一种进程隔离控制系统及方法
US7756911B2 (en) * 2006-06-09 2010-07-13 International Business Machines Corporation Method and system for executing a task and medium storing a program therefor
US7454596B2 (en) * 2006-06-29 2008-11-18 Intel Corporation Method and apparatus for partitioned pipelined fetching of multiple execution threads
US20080147915A1 (en) * 2006-09-29 2008-06-19 Alexander Kleymenov Management of memory buffers for computer programs
US8438365B2 (en) * 2006-10-06 2013-05-07 Calos Fund Limited Liability Company Efficient data loading in a data-parallel processor
JP2008102778A (ja) * 2006-10-19 2008-05-01 Fujitsu Ltd 情報処理装置、情報処理装置の制御方法及びプログラム
US8031198B1 (en) * 2006-10-31 2011-10-04 Nvidia Corporation Apparatus and method for servicing multiple graphics processing channels
US7830387B2 (en) * 2006-11-07 2010-11-09 Microsoft Corporation Parallel engine support in display driver model
US8056093B1 (en) * 2006-12-07 2011-11-08 Nvidia Corporation Asynchronous kernel processing for a graphics processing system
US7876328B2 (en) * 2007-02-08 2011-01-25 Via Technologies, Inc. Managing multiple contexts in a decentralized graphics processing unit
US7617386B2 (en) * 2007-04-17 2009-11-10 Xmos Limited Scheduling thread upon ready signal set when port transfers data on trigger time activation
US8861591B2 (en) * 2007-05-11 2014-10-14 Advanced Micro Devices, Inc. Software video encoder with GPU acceleration
US20080278595A1 (en) * 2007-05-11 2008-11-13 Advance Micro Devices, Inc. Video Data Capture and Streaming
US8233527B2 (en) * 2007-05-11 2012-07-31 Advanced Micro Devices, Inc. Software video transcoder with GPU acceleration
US8139070B1 (en) * 2007-10-03 2012-03-20 Matrox Graphics, Inc. Systems for and methods of context switching in a graphics processing system
US20090160867A1 (en) * 2007-12-19 2009-06-25 Advance Micro Devices, Inc. Autonomous Context Scheduler For Graphics Processing Units
JP2009157648A (ja) * 2007-12-26 2009-07-16 Softbank Mobile Corp 通信端末、通信方法および通信プログラム
US9418171B2 (en) 2008-03-04 2016-08-16 Apple Inc. Acceleration of rendering of web-based content
US8289333B2 (en) 2008-03-04 2012-10-16 Apple Inc. Multi-context graphics processing
US8477143B2 (en) 2008-03-04 2013-07-02 Apple Inc. Buffers for display acceleration
US8386664B2 (en) * 2008-05-22 2013-02-26 International Business Machines Corporation Reducing runtime coherency checking with global data flow analysis
GB2462860B (en) * 2008-08-22 2012-05-16 Advanced Risc Mach Ltd Apparatus and method for communicating between a central processing unit and a graphics processing unit
US8312433B2 (en) * 2008-12-15 2012-11-13 International Business Machines Corporation Operating system aided code coverage
US8698823B2 (en) * 2009-04-08 2014-04-15 Nvidia Corporation System and method for deadlock-free pipelining
US8413153B2 (en) * 2009-06-12 2013-04-02 Freescale Semiconductor Inc. Methods and systems for sharing common job information
US7970963B2 (en) * 2009-06-29 2011-06-28 Oracle America, Inc. Efficient buffer management in a multi-threaded network interface
US8484647B2 (en) 2009-07-24 2013-07-09 Apple Inc. Selectively adjusting CPU wait mode based on estimation of remaining work before task completion on GPU
EP2282264A1 (en) * 2009-07-24 2011-02-09 ProximusDA GmbH Scheduling and communication in computing systems
CN101996082B (zh) * 2009-08-28 2014-06-11 国际商业机器公司 协处理器系统和在本地存储器上加载应用程序的方法
US8310492B2 (en) * 2009-09-03 2012-11-13 Ati Technologies Ulc Hardware-based scheduling of GPU work
KR101080845B1 (ko) * 2009-10-30 2011-11-07 (주)지노게임즈 교착 상태의 방지를 위한 데이터 처리 방법 및 시스템
US8643655B2 (en) * 2009-11-12 2014-02-04 Nvidia Corporation Method and system for communicating with external device through processing unit in graphics system
CN101706741B (zh) * 2009-12-11 2012-10-24 中国人民解放军国防科学技术大学 一种基于负载平衡的cpu和gpu两级动态任务划分方法
US8681169B2 (en) * 2009-12-31 2014-03-25 Nvidia Corporation Sparse texture systems and methods
US8823724B2 (en) * 2009-12-31 2014-09-02 Nvidia Corporation Sparse texture systems and methods
US8860743B2 (en) * 2009-12-31 2014-10-14 Nvidia Corporation Sparse texture systems and methods
CN101833438A (zh) * 2010-04-19 2010-09-15 浙江大学 一种基于多重并行的数据通用处理方法
DE102010028227A1 (de) * 2010-04-27 2011-10-27 Robert Bosch Gmbh Coprozessor mit Ablaufsteuerung
EP2565786A4 (en) * 2010-04-30 2017-07-26 Nec Corporation Information processing device and task switching method
US8723877B2 (en) 2010-05-20 2014-05-13 Apple Inc. Subbuffer objects
US9058675B2 (en) 2010-05-29 2015-06-16 Intel Corporation Non-volatile storage for graphics hardware
CN102013191B (zh) * 2010-09-02 2012-10-03 东北师范大学 一种用于操作系统实验教学的智能教具
US8464104B2 (en) 2010-09-10 2013-06-11 International Business Machines Corporation Mobility of versioned workload partitions
US9176795B2 (en) * 2010-12-13 2015-11-03 Advanced Micro Devices, Inc. Graphics processing dispatch from user mode
US20120194526A1 (en) * 2010-12-15 2012-08-02 Benjamin Thomas Sander Task Scheduling
JP5737298B2 (ja) 2011-01-21 2015-06-17 富士通株式会社 スケジューリング方法およびスケジューリングシステム
EP2677377B1 (en) * 2011-01-31 2017-03-01 Toyota Jidosha Kabushiki Kaisha Safety control device and safety control method
US9633407B2 (en) * 2011-07-29 2017-04-25 Intel Corporation CPU/GPU synchronization mechanism
US20130254704A1 (en) * 2011-09-12 2013-09-26 Tao Zho Multiple Simultaneous Displays on the Same Screen
US8627036B2 (en) 2011-09-12 2014-01-07 Microsoft Corporation Memory management techniques
US9886312B2 (en) 2011-09-28 2018-02-06 Microsoft Technology Licensing, Llc Dynamic provisioning of virtual video memory based on virtual video controller configuration
US9652282B2 (en) * 2011-11-08 2017-05-16 Nvidia Corporation Software-assisted instruction level execution preemption
US10534606B2 (en) 2011-12-08 2020-01-14 Oracle International Corporation Run-length encoding decompression
US20130155077A1 (en) 2011-12-14 2013-06-20 Advanced Micro Devices, Inc. Policies for Shader Resource Allocation in a Shader Core
US9122522B2 (en) * 2011-12-14 2015-09-01 Advanced Micro Devices, Inc. Software mechanisms for managing task scheduling on an accelerated processing device (APD)
KR101869939B1 (ko) 2012-01-05 2018-06-21 삼성전자주식회사 멀티-쓰레딩을 사용하는 그래픽 처리를 위한 방법 및 장치
US8692832B2 (en) * 2012-01-23 2014-04-08 Microsoft Corporation Para-virtualized asymmetric GPU processors
US9256915B2 (en) * 2012-01-27 2016-02-09 Qualcomm Incorporated Graphics processing unit buffer management
US9384711B2 (en) 2012-02-15 2016-07-05 Microsoft Technology Licensing, Llc Speculative render ahead and caching in multiple passes
US9996394B2 (en) * 2012-03-01 2018-06-12 Microsoft Technology Licensing, Llc Scheduling accelerator tasks on accelerators using graphs
US20130307860A1 (en) * 2012-03-30 2013-11-21 Mostafa Hagog Preempting Fixed Function Media Devices
CN106708753B (zh) 2012-03-30 2021-04-02 英特尔公司 在使用共享虚拟存储器的处理器中加速操作的装置和方法
CN104221005B (zh) * 2012-03-30 2018-04-27 英特尔公司 用于从多线程发送请求至加速器的机制
CN108681519B (zh) * 2012-03-30 2022-04-08 英特尔公司 用于从多线程发送请求至加速器的机制
US9258276B2 (en) * 2012-05-22 2016-02-09 Xockets, Inc. Efficient packet handling, redirection, and inspection using offload processors
US9286122B2 (en) * 2012-05-31 2016-03-15 Microsoft Technology Licensing, Llc Display techniques using virtual surface allocation
US9177533B2 (en) 2012-05-31 2015-11-03 Microsoft Technology Licensing, Llc Virtual surface compaction
US9235925B2 (en) 2012-05-31 2016-01-12 Microsoft Technology Licensing, Llc Virtual surface rendering
US9230517B2 (en) 2012-05-31 2016-01-05 Microsoft Technology Licensing, Llc Virtual surface gutters
US9286118B2 (en) 2012-06-15 2016-03-15 Freescale Semiconductor, Inc. System and method for improved job processing to reduce contention for shared resources
US9104478B2 (en) 2012-06-15 2015-08-11 Freescale Semiconductor, Inc. System and method for improved job processing of a number of jobs belonging to communication streams within a data processor
US10002021B2 (en) 2012-07-20 2018-06-19 Qualcomm Incorporated Deferred preemption techniques for scheduling graphics processing unit command streams
CN102890643B (zh) * 2012-07-26 2015-01-21 上海交通大学 基于应用效果即时反馈的显卡虚拟化下的资源调度系统
CN104737130B (zh) 2012-08-22 2018-08-03 英派尔科技开发有限公司 多核架构中的资源分配
US9058268B1 (en) 2012-09-20 2015-06-16 Matrox Graphics Inc. Apparatus, system and method for memory management
CN103677984B (zh) * 2012-09-20 2016-12-21 中国科学院计算技术研究所 一种物联网计算任务调度系统及其方法
US10423424B2 (en) * 2012-09-28 2019-09-24 Nvidia Corporation Replicated stateless copy engine
US11013993B2 (en) 2012-09-28 2021-05-25 Sony Interactive Entertainment Inc. Pre-loading translated code in cloud based emulated applications
US9633230B2 (en) * 2012-10-11 2017-04-25 Intel Corporation Hardware assist for privilege access violation checks
US10140129B2 (en) 2012-12-28 2018-11-27 Intel Corporation Processing core having shared front end unit
US9417873B2 (en) 2012-12-28 2016-08-16 Intel Corporation Apparatus and method for a hybrid latency-throughput processor
US9361116B2 (en) 2012-12-28 2016-06-07 Intel Corporation Apparatus and method for low-latency invocation of accelerators
US10346195B2 (en) 2012-12-29 2019-07-09 Intel Corporation Apparatus and method for invocation of a multi threaded accelerator
US9250954B2 (en) * 2013-01-17 2016-02-02 Xockets, Inc. Offload processor modules for connection to system memory, and corresponding methods and systems
US9575634B2 (en) * 2013-03-04 2017-02-21 Facebook, Inc. Techniques for asynchronous rendering
US9632977B2 (en) 2013-03-13 2017-04-25 Nxp Usa, Inc. System and method for ordering packet transfers in a data processor
US9086813B2 (en) * 2013-03-15 2015-07-21 Qualcomm Incorporated Method and apparatus to save and restore system memory management unit (MMU) contexts
US9665409B2 (en) * 2013-05-29 2017-05-30 Citrix Systems, Inc. Methods and apparatus facilitating access to storage among multiple computers
US9307007B2 (en) 2013-06-14 2016-04-05 Microsoft Technology Licensing, Llc Content pre-render and pre-fetch techniques
US9563561B2 (en) * 2013-06-25 2017-02-07 Intel Corporation Initiation of cache flushes and invalidations on graphics processors
US9424079B2 (en) 2013-06-27 2016-08-23 Microsoft Technology Licensing, Llc Iteration support in a heterogeneous dataflow engine
US9507961B2 (en) 2013-07-01 2016-11-29 Qualcomm Incorporated System and method for providing secure access control to a graphics processing unit
CN104346298B (zh) * 2013-08-06 2018-12-25 北京数码视讯软件技术发展有限公司 基于智能卡的数据处理方法、装置及智能卡
US11113054B2 (en) 2013-09-10 2021-09-07 Oracle International Corporation Efficient hardware instructions for single instruction multiple data processors: fast fixed-length value compression
US20150109315A1 (en) * 2013-10-23 2015-04-23 Nvidia Corporation System, method, and computer program product for mapping tiles to physical memory locations
CN103559166A (zh) * 2013-11-11 2014-02-05 厦门亿联网络技术股份有限公司 一种多核之间的高速数据传输的方法
US9547767B2 (en) * 2013-11-13 2017-01-17 Via Technologies, Inc. Event-based apparatus and method for securing bios in a trusted computing system during execution
EP3072048A4 (en) * 2013-11-22 2017-08-16 Intel Corporation Method and apparatus to improve performance of chained tasks on a graphics processing unit
WO2015130282A1 (en) * 2014-02-27 2015-09-03 Hewlett-Packard Development Company, L. P. Communication between integrated graphics processing units
KR102114245B1 (ko) 2014-04-10 2020-06-05 삼성전자 주식회사 그래픽스 상태 관리 장치 및 방법
US9740464B2 (en) 2014-05-30 2017-08-22 Apple Inc. Unified intermediate representation
US10430169B2 (en) 2014-05-30 2019-10-01 Apple Inc. Language, function library, and compiler for graphical and non-graphical computation on a graphical processor unit
US10346941B2 (en) 2014-05-30 2019-07-09 Apple Inc. System and method for unified application programming interface and model
US10133597B2 (en) 2014-06-26 2018-11-20 Intel Corporation Intelligent GPU scheduling in a virtualization environment
US9928564B2 (en) * 2014-06-26 2018-03-27 Intel Corporation Efficient hardware mechanism to ensure shared resource data coherency across draw calls
US10521874B2 (en) * 2014-09-26 2019-12-31 Intel Corporation Method and apparatus for a highly efficient graphics processing unit (GPU) execution model
US9564108B2 (en) * 2014-10-20 2017-02-07 Amlogic Co., Limited Video frame processing on a mobile operating system
US9792663B2 (en) 2014-12-15 2017-10-17 Microsoft Technology Licensing, Llc User-defined command buffer formats supporting data-parallel translation
US10068306B2 (en) * 2014-12-18 2018-09-04 Intel Corporation Facilitating dynamic pipelining of workload executions on graphics processing units on computing devices
US9817776B2 (en) * 2015-01-19 2017-11-14 Microsoft Technology Licensing, Llc Memory descriptor list caching and pipeline processing
MA41915A (fr) * 2015-04-07 2018-02-13 Benjamin Gittins Unités de requête de transfert de mémoire programmable
CN106155811B (zh) * 2015-04-28 2020-01-07 阿里巴巴集团控股有限公司 资源服务装置、资源调度方法和装置
US10067954B2 (en) 2015-07-22 2018-09-04 Oracle International Corporation Use of dynamic dictionary encoding with an associated hash table to support many-to-many joins and aggregations
US10169105B2 (en) * 2015-07-30 2019-01-01 Qualcomm Incorporated Method for simplified task-based runtime for efficient parallel computing
US10176548B2 (en) * 2015-12-18 2019-01-08 Ati Technologies Ulc Graphics context scheduling based on flip queue management
US10061832B2 (en) 2016-11-28 2018-08-28 Oracle International Corporation Database tuple-encoding-aware data partitioning in a direct memory access engine
US10402425B2 (en) 2016-03-18 2019-09-03 Oracle International Corporation Tuple encoding aware direct memory access engine for scratchpad enabled multi-core processors
US10061714B2 (en) 2016-03-18 2018-08-28 Oracle International Corporation Tuple encoding aware direct memory access engine for scratchpad enabled multicore processors
US10055358B2 (en) 2016-03-18 2018-08-21 Oracle International Corporation Run length encoding aware direct memory access filtering engine for scratchpad enabled multicore processors
US10599488B2 (en) * 2016-06-29 2020-03-24 Oracle International Corporation Multi-purpose events for notification and sequence control in multi-core processor systems
US10380058B2 (en) 2016-09-06 2019-08-13 Oracle International Corporation Processor core to coprocessor interface with FIFO semantics
US10783102B2 (en) 2016-10-11 2020-09-22 Oracle International Corporation Dynamically configurable high performance database-aware hash engine
US10176114B2 (en) 2016-11-28 2019-01-08 Oracle International Corporation Row identification number generation in database direct memory access engine
US10459859B2 (en) 2016-11-28 2019-10-29 Oracle International Corporation Multicast copy ring for database direct memory access filtering engine
US10725947B2 (en) 2016-11-29 2020-07-28 Oracle International Corporation Bit vector gather row count calculation and handling in direct memory access engine
CN108984264B (zh) * 2017-06-02 2022-11-15 阿里巴巴集团控股有限公司 虚拟gpu的实现方法、装置及系统
KR20200029510A (ko) * 2017-08-08 2020-03-18 삼성전자주식회사 네트워크에서 메모리 요구 사항을 결정하는 방법 및 장치
US10423478B2 (en) * 2017-08-29 2019-09-24 Red Hat, Inc. Security enhanced out of process user space handling of hardware events
US10846223B2 (en) * 2017-10-19 2020-11-24 Lenovo Enterprise Solutions (Singapore) Pte. Ltd Cache coherency between a device and a processor
CN109697114B (zh) * 2017-10-20 2023-07-28 伊姆西Ip控股有限责任公司 用于应用迁移的方法和机器
US10437735B2 (en) 2017-12-13 2019-10-08 Red Hat, Inc. Process isolation for out of process page fault handling
US11132145B2 (en) * 2018-03-14 2021-09-28 Apple Inc. Techniques for reducing write amplification on solid state storage devices (SSDs)
CN110389826B (zh) * 2018-04-20 2023-03-31 伊姆西Ip控股有限责任公司 用于处理计算任务的方法、设备和计算程序产品
CN108874468B (zh) * 2018-06-20 2021-03-26 深圳市腾讯网络信息技术有限公司 应用程序的加载方法、装置、计算机设备及存储介质
GB2570743B (en) 2018-06-29 2021-06-23 Imagination Tech Ltd Tile assignment to processing cores within a graphics processing unit
CN109445847B (zh) * 2018-07-09 2021-09-17 北京东土科技股份有限公司 工业服务器微内核架构实现方法
US11138009B2 (en) * 2018-08-10 2021-10-05 Nvidia Corporation Robust, efficient multiprocessor-coprocessor interface
KR20200027204A (ko) * 2018-09-04 2020-03-12 삼성전자주식회사 전자장치 및 그 제어방법
DE102018217581A1 (de) * 2018-10-15 2020-04-16 Robert Bosch Gmbh Verfahren zur Steuerung einer Produktionsanlage, Computerprogramm, maschinenlesbares Speichermedium, elektronische Steuereinheit sowie Produktionsanlage
CN110399215A (zh) * 2019-06-25 2019-11-01 苏州浪潮智能科技有限公司 一种协处理器、一种电子设备及一种数据处理方法
DE102020117505A1 (de) * 2019-07-27 2021-01-28 Analog Devices International Unlimited Company Autonomes system zum einreihen von jobs in eine warteschlange für hardware -beschleuniger
US11397612B2 (en) 2019-07-27 2022-07-26 Analog Devices International Unlimited Company Autonomous job queueing system for hardware accelerators
US11481255B2 (en) 2019-09-10 2022-10-25 International Business Machines Corporation Management of memory pages for a set of non-consecutive work elements in work queue designated by a sliding window for execution on a coherent accelerator
CN110750304B (zh) * 2019-09-30 2022-04-12 百富计算机技术(深圳)有限公司 提升任务切换效率的方法及终端设备
US11416961B2 (en) 2020-05-29 2022-08-16 Samsung Electronics Co., Ltd. Variable entry transitional ring storage for efficiently accessing graphics states
US20220044350A1 (en) * 2020-08-07 2022-02-10 Advanced Micro Devices, Inc. Graphics processing unit with selective two-level binning
US11335296B2 (en) 2020-09-14 2022-05-17 Apple Inc. Low-latency context switch systems and methods
CN112506676B (zh) * 2020-12-02 2024-04-05 深圳市广和通无线股份有限公司 进程间的数据传输方法、计算机设备和存储介质
CN112579254B (zh) * 2020-12-08 2022-03-29 成都海光微电子技术有限公司 图形处理器的仿真方法、装置、电子设备和存储介质
CN113448698B (zh) * 2020-12-24 2024-04-02 北京新氧科技有限公司 业务模块相互调用的实现方法、装置、设备及存储介质
CN113253664B (zh) * 2021-07-02 2021-10-15 峰岹科技(深圳)股份有限公司 协处理器、协处理器控制方法、终端及存储介质
CN113747060B (zh) * 2021-08-12 2022-10-21 荣耀终端有限公司 图像处理的方法、设备、存储介质

Citations (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0212523A (ja) * 1988-04-20 1990-01-17 Internatl Business Mach Corp <Ibm> コンピユータ・デイスプレイ・システム
JPH0312768A (ja) * 1989-06-09 1991-01-21 Hitachi Micro Comput Eng Ltd I/oコントローラ
JPH04299389A (ja) * 1990-09-14 1992-10-22 Hughes Aircraft Co ディスプレイシステム
JPH05135147A (ja) * 1991-05-16 1993-06-01 Internatl Business Mach Corp <Ibm> グラフイツクス・システムにおけるピツク方法および装置
JPH07234821A (ja) * 1993-12-27 1995-09-05 Toshiba Corp ページング装置およびディスプレイコントローラ
JPH07271344A (ja) * 1994-03-29 1995-10-20 Hitachi Ltd グラフィック表示装置
JPH10207723A (ja) * 1996-12-30 1998-08-07 Hewlett Packard Co <Hp> 仮想装置アクセス・システム
JP2000215068A (ja) * 1999-01-21 2000-08-04 Matsushita Electric Ind Co Ltd マルチタスクスケジュ―リング装置
JP2000285246A (ja) * 1999-03-31 2000-10-13 Toshiba Corp 情報処理装置
JP2001092657A (ja) * 1999-09-22 2001-04-06 Toshiba Corp 中央演算装置、コンパイル方法、及びコンパイルプログラムを記録した記録媒体
JP2001521219A (ja) * 1997-10-23 2001-11-06 インターナショナル・ビジネス・マシーンズ・コーポレーション マルチスレッド式プロセッサでのスレッド優先順位の変更
JP2002183750A (ja) * 2000-10-04 2002-06-28 Terarikon Inc レンダリングシステム及びレンダリング方法
JP2002529850A (ja) * 1998-11-09 2002-09-10 インテル コーポレイション システムにおける要求のスケジューリング

Family Cites Families (72)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4713748A (en) * 1985-02-12 1987-12-15 Texas Instruments Incorporated Microprocessor with block move instruction
US4992958A (en) 1988-06-27 1991-02-12 Hitachi, Ltd. Method and apparatus for controlling printer
US5016161A (en) * 1989-04-12 1991-05-14 Sun Microsystems, Inc. Method and apparatus for the flow control of devices
JPH03202941A (ja) * 1989-12-28 1991-09-04 Toshiba Corp 情報処理装置
US5253340A (en) * 1990-01-19 1993-10-12 Canon Kabushiki Kaisha Data processing apparatus having a graphics device with priority scheduling of drawing requests
JPH0418638A (ja) 1990-05-11 1992-01-22 Fujitsu Ltd 静的メモリ割当て処理方法
US5220653A (en) 1990-10-26 1993-06-15 International Business Machines Corporation Scheduling input/output operations in multitasking systems
JPH04311233A (ja) * 1991-04-09 1992-11-04 Nec Corp アドレス変換装置
US5630128A (en) 1991-08-09 1997-05-13 International Business Machines Corporation Controlled scheduling of program threads in a multitasking operating system
US5437017A (en) * 1992-10-09 1995-07-25 International Business Machines Corporation Method and system for maintaining translation lookaside buffer coherency in a multiprocessor data processing system
JPH08180001A (ja) 1994-04-12 1996-07-12 Mitsubishi Electric Corp 通信方式及び通信方法及びネットワークインタフェース
US5777629A (en) 1995-03-24 1998-07-07 3Dlabs Inc. Ltd. Graphics subsystem with smart direct-memory-access operation
US5794037A (en) * 1995-05-01 1998-08-11 Intergraph Corporation Direct access to slave processing by unprotected application using context saving and restoration
US5748468A (en) * 1995-05-04 1998-05-05 Microsoft Corporation Prioritized co-processor resource manager and method
US5918050A (en) 1995-05-05 1999-06-29 Nvidia Corporation Apparatus accessed at a physical I/O address for address and data translation and for context switching of I/O devices in response to commands from application programs
US5887190A (en) * 1995-05-15 1999-03-23 Nvidia Corporation System for determining from a command storing in a storage circuit an application program which has initiated the command to determine an input/output device address
US5852443A (en) 1995-08-04 1998-12-22 Microsoft Corporation Method and system for memory decomposition in a graphics rendering system
US5742797A (en) 1995-08-11 1998-04-21 International Business Machines Corporation Dynamic off-screen display memory manager
US5854637A (en) 1995-08-17 1998-12-29 Intel Corporation Method and apparatus for managing access to a computer system memory shared by a graphics controller and a memory controller
US5797115A (en) * 1995-08-24 1998-08-18 Fuller; Billy Measuring direct and indirect usage of a central processing unit
US5696927A (en) 1995-12-21 1997-12-09 Advanced Micro Devices, Inc. Memory paging system and method including compressed page mapping hierarchy
US5864713A (en) 1996-02-12 1999-01-26 Hewlett-Packard Company Method for determining if data should be written at the beginning of a buffer depending on space available after unread data in the buffer
EP0892972A1 (en) * 1996-04-12 1999-01-27 Intergraph Corporation High-speed video frame buffer using single port memory chips where pixel intensity values for display regions are stored at consecutive addresses of memory blocks
US6049329A (en) 1996-06-04 2000-04-11 International Business Machines Corporartion Method of and system for facilitating user input into a small GUI window using a stylus
US5983332A (en) 1996-07-01 1999-11-09 Sun Microsystems, Inc. Asynchronous transfer mode (ATM) segmentation and reassembly unit virtual address translation unit architecture
US5826079A (en) * 1996-07-05 1998-10-20 Ncr Corporation Method for improving the execution efficiency of frequently communicating processes utilizing affinity process scheduling by identifying and assigning the frequently communicating processes to the same processor
US6061711A (en) * 1996-08-19 2000-05-09 Samsung Electronics, Inc. Efficient context saving and restoring in a multi-tasking computing system environment
US6317134B1 (en) * 1996-09-13 2001-11-13 Silicon Graphics, Inc. System software for use in a graphics computer system having a shared system memory and supporting DM Pbuffers and other constructs aliased as DM buffers
US6070002A (en) * 1996-09-13 2000-05-30 Silicon Graphics, Inc. System software for use in a graphics computer system having a shared system memory
US5761506A (en) * 1996-09-20 1998-06-02 Bay Networks, Inc. Method and apparatus for handling cache misses in a computer system
US5930827A (en) 1996-12-02 1999-07-27 Intel Corporation Method and apparatus for dynamic memory management by association of free memory blocks using a binary tree organized in an address and size dependent manner
JPH10294834A (ja) 1997-04-18 1998-11-04 Fuji Xerox Co Ltd 画像形成装置の制御方法
US6349320B1 (en) * 1997-06-03 2002-02-19 Fmr Corp. Computer executable workflow management and control system
US6069638A (en) 1997-06-25 2000-05-30 Micron Electronics, Inc. System for accelerated graphics port address remapping interface to main memory
US6708273B1 (en) 1997-09-16 2004-03-16 Safenet, Inc. Apparatus and method for implementing IPSEC transforms within an integrated circuit
US6704871B1 (en) 1997-09-16 2004-03-09 Safenet, Inc. Cryptographic co-processor
US6075546A (en) 1997-11-10 2000-06-13 Silicon Grahphics, Inc. Packetized command interface to graphics processor
US6065071A (en) 1998-03-26 2000-05-16 Nvidia Corporation Method and apparatus for trapping unimplemented operations in input/output devices
US6081854A (en) 1998-03-26 2000-06-27 Nvidia Corporation System for providing fast transfers to input/output device by assuring commands from only one application program reside in FIFO
US6023738A (en) 1998-03-30 2000-02-08 Nvidia Corporation Method and apparatus for accelerating the transfer of graphical images
US6092124A (en) 1998-04-17 2000-07-18 Nvidia Corporation Method and apparatus for accelerating the rendering of images
US6496916B1 (en) * 1998-04-17 2002-12-17 Agere Systems Inc. System for flexible memory paging in partitioning memory
US6092127A (en) * 1998-05-15 2000-07-18 Hewlett-Packard Company Dynamic allocation and reallocation of buffers in links of chained DMA operations by receiving notification of buffer full and maintaining a queue of buffers available
US6480952B2 (en) * 1998-05-26 2002-11-12 Advanced Micro Devices, Inc. Emulation coprocessor
US6065089A (en) * 1998-06-25 2000-05-16 Lsi Logic Corporation Method and apparatus for coalescing I/O interrupts that efficiently balances performance and latency
US6252600B1 (en) 1998-10-02 2001-06-26 International Business Machines Corporation Computer graphics system with dual FIFO interface
JP2002527800A (ja) * 1998-10-02 2002-08-27 インターナショナル・ビジネス・マシーンズ・コーポレーション 会話ブラウザおよび会話システム
US6295602B1 (en) 1998-12-30 2001-09-25 Spyrus, Inc. Event-driven serialization of access to shared resources
US6496912B1 (en) 1999-03-25 2002-12-17 Microsoft Corporation System, method, and software for memory management with intelligent trimming of pages of working sets
US6650333B1 (en) 1999-06-09 2003-11-18 3Dlabs Inc., Ltd. Multi-pool texture memory management
US6493837B1 (en) * 1999-07-16 2002-12-10 Microsoft Corporation Using log buffers to trace an event in a computer system
US6437788B1 (en) 1999-07-16 2002-08-20 International Business Machines Corporation Synchronizing graphics texture management in a computer system using threads
US6137126A (en) * 1999-08-17 2000-10-24 Advanced Micro Devices, Inc. Method to reduce gate-to-local interconnect capacitance using a low dielectric constant material for LDD spacer
US6518973B1 (en) 1999-08-31 2003-02-11 Microsoft Corporation Method, system, and computer program product for efficient buffer level management of memory-buffered graphics data
US6604156B1 (en) 1999-09-15 2003-08-05 Koninklijke Philips Electronics N.V. Message buffer full handling in a CAN device that employs reconfigurable message buffers
US6446186B1 (en) 1999-10-27 2002-09-03 Nvidia Corporation Method, apparatus and article of manufacture for mapping physical memory in a virtual address system
US6525739B1 (en) 1999-12-02 2003-02-25 Intel Corporation Method and apparatus to reuse physical memory overlapping a graphics aperture range
US6600493B1 (en) 1999-12-29 2003-07-29 Intel Corporation Allocating memory based on memory device organization
US6477612B1 (en) 2000-02-08 2002-11-05 Microsoft Corporation Providing access to physical memory allocated to a process by selectively mapping pages of the physical memory with virtual memory allocated to the process
TW501045B (en) * 2000-03-03 2002-09-01 Sony Computer Entertainment Inc Entertainment device and computer system having exchangeability
US7397949B2 (en) 2000-06-21 2008-07-08 Microsoft Corporation Serial storage of ink and its properties
US6782432B1 (en) 2000-06-30 2004-08-24 Intel Corporation Automatic state savings in a graphics pipeline
TW531706B (en) 2000-07-20 2003-05-11 Ibm Method and apparatus in a data processing system for dynamic graphics context switching
US6859208B1 (en) 2000-09-29 2005-02-22 Intel Corporation Shared translation address caching
US6798421B2 (en) 2001-02-28 2004-09-28 3D Labs, Inc. Ltd. Same tile method
US7234144B2 (en) 2002-01-04 2007-06-19 Microsoft Corporation Methods and system for managing computational resources of a coprocessor in a computing system
US7448036B2 (en) * 2002-05-02 2008-11-04 International Business Machines Corporation System and method for thread scheduling with weak preemption policy
US7673304B2 (en) * 2003-02-18 2010-03-02 Microsoft Corporation Multithreaded kernel for graphics processing unit
US20040231000A1 (en) 2003-02-18 2004-11-18 Gossalia Anuj B. Video aperture management
US7421694B2 (en) 2003-02-18 2008-09-02 Microsoft Corporation Systems and methods for enhancing performance of a coprocessor
US6947051B2 (en) 2003-02-18 2005-09-20 Microsoft Corporation Video memory management
US7444637B2 (en) 2003-02-18 2008-10-28 Microsoft Corporation Systems and methods for scheduling coprocessor resources in a computing system

Patent Citations (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0212523A (ja) * 1988-04-20 1990-01-17 Internatl Business Mach Corp <Ibm> コンピユータ・デイスプレイ・システム
US5113180A (en) * 1988-04-20 1992-05-12 International Business Machines Corporation Virtual display adapter
JPH0312768A (ja) * 1989-06-09 1991-01-21 Hitachi Micro Comput Eng Ltd I/oコントローラ
JPH04299389A (ja) * 1990-09-14 1992-10-22 Hughes Aircraft Co ディスプレイシステム
JPH05135147A (ja) * 1991-05-16 1993-06-01 Internatl Business Mach Corp <Ibm> グラフイツクス・システムにおけるピツク方法および装置
JPH07234821A (ja) * 1993-12-27 1995-09-05 Toshiba Corp ページング装置およびディスプレイコントローラ
JPH07271344A (ja) * 1994-03-29 1995-10-20 Hitachi Ltd グラフィック表示装置
JPH10207723A (ja) * 1996-12-30 1998-08-07 Hewlett Packard Co <Hp> 仮想装置アクセス・システム
JP2001521219A (ja) * 1997-10-23 2001-11-06 インターナショナル・ビジネス・マシーンズ・コーポレーション マルチスレッド式プロセッサでのスレッド優先順位の変更
JP2002529850A (ja) * 1998-11-09 2002-09-10 インテル コーポレイション システムにおける要求のスケジューリング
JP2000215068A (ja) * 1999-01-21 2000-08-04 Matsushita Electric Ind Co Ltd マルチタスクスケジュ―リング装置
JP2000285246A (ja) * 1999-03-31 2000-10-13 Toshiba Corp 情報処理装置
JP2001092657A (ja) * 1999-09-22 2001-04-06 Toshiba Corp 中央演算装置、コンパイル方法、及びコンパイルプログラムを記録した記録媒体
JP2002183750A (ja) * 2000-10-04 2002-06-28 Terarikon Inc レンダリングシステム及びレンダリング方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JPN6011026025; 池井 満: 「IA-64プロセッサ基本講座」 第1版, 20000825, 77〜79頁、106〜107頁, 株式会社オーム社 *

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2014504416A (ja) * 2010-12-15 2014-02-20 アドバンスト・マイクロ・ディバイシズ・インコーポレイテッド 組み合わせたcpu/gpuアーキテクチャシステムにおけるデバイスの発見およびトポロジーのレポーティング
US9741090B2 (en) 2013-06-03 2017-08-22 Panasonic Intellectual Property Corporation Of America Graphics display processing device, graphics display processing method, and vehicle equipped with graphics display processing device
JP2017507398A (ja) * 2014-01-06 2017-03-16 ジョンソン コントロールズ テクノロジー カンパニーJohnson Controls Technology Company 複数のユーザインターフェース動作ドメインを有する車両

Also Published As

Publication number Publication date
EP2560097A3 (en) 2016-02-10
EP1450257A3 (en) 2007-09-05
US20080301687A1 (en) 2008-12-04
US20160259671A1 (en) 2016-09-08
JP5335743B2 (ja) 2013-11-06
US7673304B2 (en) 2010-03-02
US20040160446A1 (en) 2004-08-19
EP2560097A2 (en) 2013-02-20
CN101894044B (zh) 2012-05-09
EP1450257A2 (en) 2004-08-25
US9298498B2 (en) 2016-03-29
US8671411B2 (en) 2014-03-11
US20100122259A1 (en) 2010-05-13
JP4979880B2 (ja) 2012-07-18
CN101894044A (zh) 2010-11-24
JP2004272894A (ja) 2004-09-30
CN1538296B (zh) 2010-05-26
CN1538296A (zh) 2004-10-20

Similar Documents

Publication Publication Date Title
JP5335743B2 (ja) タスクのスケジューリングを支援する装置
JP5091215B2 (ja) コプロセッサの性能を強化するシステムおよび方法
US10915364B2 (en) Technique for computational nested parallelism
JP5170782B2 (ja) ヘテロジニアス処理ユニットのための集中デバイス仮想化レイヤ
US8719543B2 (en) Systems and methods implementing non-shared page tables for sharing memory resources managed by a main operating system with accelerator devices
US6947051B2 (en) Video memory management
US9436504B2 (en) Techniques for managing the execution order of multiple nested tasks executing on a parallel processor
US8578129B2 (en) Infrastructure support for accelerated processing device memory paging without operating system integration
US20110161620A1 (en) Systems and methods implementing shared page tables for sharing memory resources managed by a main operating system with accelerator devices
US7661115B2 (en) Method, apparatus and program storage device for preserving locked pages in memory when in user mode
US20090217269A1 (en) System, method and computer program product for providing multiple quiesce state machines
KR100988395B1 (ko) 태스크 스케줄링 방법, 태스크 스케줄링 지원 장치, 코프로세싱 스케줄러에 관련하여 사용하기 위한 코프로세서, 및 컴퓨터 판독가능 저장 매체
US8458438B2 (en) System, method and computer program product for providing quiesce filtering for shared memory
KR101130361B1 (ko) 코프로세서 내의 연산을 스트림라인하는 방법
Groote et al. Computer Organization
JPH06309183A (ja) グラフィックス資源共用アクセス方法および装置

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20110527

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110825

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110830

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110927

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110930

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20111027

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20120615

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20120918

RD13 Notification of appointment of power of sub attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7433

Effective date: 20130214

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A821

Effective date: 20130214

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20130319

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20130614

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20130731

R150 Certificate of patent or registration of utility model

Ref document number: 5335743

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313113

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

LAPS Cancellation because of no payment of annual fees