ドライバがロードされる前に、CPUはどのようにGPUと通信しますか?[複製]


24

私が理解しているように、GPUには独自の命令セットがあり、その命令はグラフィックスドライバーによって生成されます。その後、GPU命令がGPUに送信されます。それでは、ドライバーがロードされる前にグラフィック通信はどのように機能しますか?コンピューターが基本的な表示タスクを実行できるようにするために、GPUが最低限実装しなければならない基本命令はありますか?


回答:


34

「基本的な指示はありますか...」はい、正確に。すべてのGPUは、いくつかのシンプルなインターフェイスのいずれかを実装する必要があります-それらは「命令セット」と呼ばれるにはあまりにも原始的です-OSに含まれるプラットフォームファームウェア(「BIOS」または「UEFI」) 。最近の「シンプルなインターフェース」の通常の選択は「VGA」(「Video Graphics Array」)です。これは、元々その規格のビデオカード用に定義されたレジスタレベルのインターフェースです。(現在30歳以上!)

たとえば、Windowsシステムのデバイスマネージャーがグラフィックスカードを「Microsoft Basic Video Adapter」として識別した場合、OSはカードの特定のドライバーを見つけることができず、代わりにVGA互換ドライバーをロードしました。

まあ、技術的には、Windowsは常にそのドライバーをロードし(たとえば、ブート進行画面を表示できるように)、その後(ブートのかなり後期に)グラフィックスカードの「実際の」ドライバーを識別してロードします。

VGA規格は、いくつかの低解像度のグラフィックモードとテキストモードのみをサポートし、GPUで「プログラムの実行」または「命令」と呼ぶことも含まれません。基本的に、システムファームウェアまたは「ベースビデオドライバー」は、単にそれを目的のモードにし、ビットマップにビットを書き込みます。ビットマップのビットは、画面上のピクセルに直接対応します。線または曲線を描くために実行する必要がある演算は、CPUで実行されます。これは非常に低レベルで遅い方法で、画面に物を表示します。ただし、ファームウェアの表示やファームウェアとの簡単なやり取り、OSインストールや初期の起動進行画面などには十分です。

ウィキペディア:ビデオグラフィックスアレイ


1
完全な状況は複雑です。非常に最初の「VGA」カードは、実際にはそのような制限がありました。長い間、Windows NTは800x600のサポートを必要としていましたが、はい、わずか16色です。それはかなりひどく見えました!リンクしたウィキペディアの記事を参照してください。
ジェイミーハンラハン

9
Windows は、基本アダプターにVESA BIOS拡張(VBE)を使用する可能性が高くなります。VBEはかなり広くサポートされており、16〜24ビットの色と最大1600x1200ピクセルが可能です。
8bittree

3
ブートストラップの非常に初期の段階が終了した後、Windowsはに対して BIOS / UEFIコードをきっぱり呼び出さないため、VESA BIOS拡張ではありません。
ジェイミーハンラハン

2
私のラップトップを含むいくつかのコンピューターで、「スピニングドット」のWindowsブート画面が非常に低い解像度(320x200、つまりVGAの256色モード)で始まり、すぐに高解像度に切り替わります。
アルテリウス

1
16色で800x600でもVGAの能力を超えています。VGAは640x480 16色で最大になりました。ただし、グラフィックチップメーカーはこれを超えて、独自の独自モードを備えながら、色と解像度を高める「SuperVGA」、別名SVGAモードを追加します。VESAはこれらの独自のモードにアクセスする標準的な方法を求めて登場しましたが、これはPCが主にGUIで駆動されるようになった頃で、ドライバーが適切な選択でした。また、3Dアクセラレーションが追加され始めた時期でもありました。そのため、ほとんどのカードはVESA互換になりましたが、誰もそれについて語りませんでした。
1

16

古いハードウェアがどのように機能したかを説明することにより、このすべての背後にある「ブードゥー」を解消しようとします。最近のGPUはこのようには機能しませんが、CPUとグラフィックスカードのインターフェイスをエミュレートします。

tl; dr

80年代および90年代初期のグラフィックチップ/カードは、命令を実行せず、むしろ固定回路を備えていたため、クロックスピードに比べて非常に迅速に出力を生成する必要がありました。彼らは行ったとおりにRAMからデータを吸い出しただけなので、CPUはRAMの適切な場所にデータをダンプするだけで、グラフィックスチップはそれを拾い上げて画面に表示します。CPUは、グラフィックチップ上のさまざまな構成変数を設定することもできます。

詳細:

80年代には、ホームコンピューターには、いくつかの固定された動作を備えた本当に「ダム」なグラフィックチップがありました。パイプラインを逆方向に通過する場合、最も意味があります。

CRTモニター

これらのモニターにはアナログ入力が必要でした。言い換えれば、より高い電圧=より明るい出力です。カラーモニターには3つのチャネル(赤、緑、青(または、たとえばYUVまたはYIQ)がありました。これらの電圧は電子ビームの強度を調整しました。シンプルなもの。

CRTモニターは、文字通り電磁石を使用して電子ビームを左から右に偏向し、次に少し下から始めて左から右に、というように上から下へと続きます。その後、先頭に戻って繰り返します。

DAC

グラフィックチップには「デジタルアナログ」コンバーター(非常に一般的な電気部品)がありました。これにより、デジタル値(2、4、8ビットなど)がモニターに供給できる電圧に変換されました。

走査

グラフィックスチップは、適切な値をDACに送信して、適切なタイミングで対応する電圧を出力できるように、電子ビームを「維持」する必要がありました。(これにはクロックは使用されましたが、ここでは説明しません。)ここで命令を実行する時間はありませんでした。すべてがハードワイヤードであり、少数の固定数のクロックサイクルがかかりました。

ビデオモード

初期のチップはそれほど高速ではなく、RAMが制限されていました。このため、背景色、フォントの選択、カーソルの位置とサイズ、パレットの選択、スプライトなど、さまざまなモードやその他の構成パラメーターを選択できる傾向がありました。ほとんどが高解像度の「文字のみ」モードと低解像度のピクセル単位モードを提供していました。

3つの注目すべきVGAモードは次のとおりです。

  • 16(ish)カラー80x25テキストモード(これは基本的にBIOSのロード画面のようです)
  • 16色640 x 480高解像度モード
  • 256色320x200ハイカラーモード

ペイントピクセル

非常に大まかに、グラフィックシステムに応じて、パイプラインは次のようになります。

現在のピクセル位置⇒文字/フォント/スプライト/ピクセル/設定データを処理⇒ピクセル値⇒パレット⇒DAC

いくつかのRAMの場所から読み取る必要があるのは、その2番目のステップです。たとえば、テキストモードでは、1バイト文字が検索されます。これにより、フォントテーブルへのインデックスが形成されます。このテーブルから少し調べて、そのピクセルを前景色にするか背景色にするかを示します。その前景/背景色を取得するために、3番目のバイトがフェッチされます。全体として、RAMから3バイトが読み取られます。

しかし、この「フロー」は、前述のフローとまったく同じように配置された単純な固定回路のセットです。

メモリバスインターフェース

Intel CPUには、IOバスと呼ばれるこの厄介なレガシーなものがありますが、重要ではないので、そこにないふりをします。

CPUは、メモリバス上でREADまたはWRITE要求とアドレスをブロードキャストすることにより、RAMにアクセスします。有効なアドレスのほとんどはRAMからの応答を引き出しますが、特定の範囲は代わりにデバイスによって処理されます。たとえば、特定のアドレスから読み取ると、キーボードのキー入力に関する情報が得られる場合があります。

「グラフィック範囲」の適切な部分に書き込むことで、画面の内容を書き込むことができ、グラフィックカードの構成パラメーターを設定することもできます。「ダム」グラフィックチップは、命令を実行しません。それはただ動き続け、数バイトが回路を流れて電圧を出力します。

VGAでは、実際はグラフィックカードにRAM があります。これは、グラフィックRAMに書き込まれる前に前処理されたデータにグラフィックカードを構成して、状況によってパフォーマンスを向上できるためです。

VESA

VGA後のグラフィックスカードは、より高い解像度と良好な色深度を提供しましたが、同様の原理で機能しました。多くの最新のグラフィックスカードは、これとの互換性を提供して、起動中の解像度を高めます。しかし、VGAは事実上すべてのカードがエミュレートする「確実な」ものです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.