2016-06-02 5 views
4

私はかなりの時間CPU命令がGPUとどのようにやりとりできるか疑問に思っています。私が理解しているように、CPUには理解して実行する特定の命令セット(マシンコード)があり、ドライバはCPUを介してGPUに通信するソフトウェアです。グラフィックスドライバはCPUからGPUにプログラムによってどのように通信しますか?

しかし、このソフトウェアはどのように通信しますか? CPUには、別のデバイスと通信するために明示的に指示する特定のアセンブリ命令が含まれていますか?

グラフィックカードに通信するためのアセンブリコードまたはC/C++コードを記述することはできますか?

+4

オープンソースのオペレーティングシステムがあることはご存知でしょうか? [ちょっと潜んで](https://github.com/torvalds/linux/tree/master/drivers/video/fbdev)。深い水ですが、非常に教育的です。 – unwind

+0

CPUは、ハードドライブ、マウスまたはキーボード、電源ボタン、またはサウンドチップとどのように通信しますか? – immibis

答えて

6

PC上のハードウェアデバイスと同様に、グラフィックスカードは特定のメモリアドレス、場合によっては入出力ポートへの読み書きに応答します。 PCIバスは、これらの割り当て方法を定義します。

グラフィックスカードと通信する特定のCPU命令はありません。メモリ位置に書き込む場合は通常の命令を使用し、ポートIOの場合は一般的な命令を使用します。どちらの場合も、メモリの場所を仮想アドレス空間に「マップ」するか、ポートにアクセスできるようにするためにCPUの設定が必要になります。

メモリ位置1234567への書き込みは、たとえばグラフィックカードにコマンドを示すように指示することができます。 (それはちょうど作った例です) あなたは確かにそれをしたあなた自身のドライバを書くことができましたが、あなたは異なるものにするためにカードが期待したものを正確に知る必要がありました。彼らはドライバソフトウェアに実装しています。一部のカードは他のカードよりも優れており、一部はリバースエンジニアリングされています。

-1

フォンノイマンアーキテクチャと同様に、メモリバスはハードウェアシステムの中心です。すべてのデバイスは、CPUを含むメモリバスと通信します。

メモリバスへの基本的な読み取り/書き込み操作と、ロック/バリアのような特別な操作しか発行できないCPUを見てみましょう。

他のデバイス、たとえばGPUはPCIインターフェイス経由でDMAによってメインメモリを読み書きできます。 GPUはまた、いくつかのレジスタをメインバスにマッピングし、マップされたレジスタが特定のコマンドを発行することができる特定のアドレスに書き込む。

一般に、すべてのデバイスはメインメモリバスを介して相互に通信します。

しかし、余分には、CPUにも割り込みインタフェースがありますが、それは疑問を超えています。

+0

これは主に真実かもしれませんが、本当にその質問に答えることはできません。 –

+2

実際には「大体真実」ではありません。インテル8080はI/Oバスを導入しましたが、それはもっと一般的です。さらに、これらは論理的であり、一般的な物理的な実装はメモリバスを持たない。代わりに、デバイスにPCIeレーンがあり、これはバスではなくポイントツーポイント接続で、これはDDRxメモリバス(一般的には複数形)とは別のものです – MSalters

+0

@MSaltersこの回答には最近、私は物事を明確にする必要があります。 1)DDRxメモリは確かにメモリバスではなく、CPU、PCIeまたは他のエンドポイントと同じメインバスに接続されたエンドポイントに過ぎません。 2)PCIeは間違いなくメインバスのエンドポイントです.p2pは内部で接続されています。つまり、すべてのPCIeがp2p接続でPCIeルートに接続されていますが、PCIeルートデバイスはエンドポイントとしてメインバスに接続されています。今日のモダンCPUはVon NeumannではなくNUMAです。主な違いは各CPUがそれぞれ独自のメインバスを持ち、それらがQPI経由で相互接続されていることです –

3

ええ、メモリアドレスは、コンピュータシステムの各デバイスにマッピングされています。基本的なことは、デバイスにマッピングされている特定のメモリ領域に書き込むと、デバイスが書き込まれることです。そのデバイスは、特定のレジスタおよび主メモリにマップされた他のプログラム可能な空間を有する。これらのレジスタを使用して、あなたのケースでGPUのようなデバイスを設定します。そして最後に巨大なデータ転送のために、明らかにGPUはDMA転送を使用したので、DMA転送が開始されるとCPUを介さずに動作することができます。

最終的にGPUや他のハードウェアデバイスと通信するには、GPUがインストールされているシステムアーキテクチャを調べる必要があります。および配分。

1

ビデオカードは、コンピュータの内部または外部の他のアイテムよりも魔法のようなものではありません。どのようにこのWebページを読んでいるのですか?インターフェース(イーサネット/インターネット)を介して少なくとも2台のコンピュータが互いに通信しています。メモリ、pcie(ビデオ、ハードディスク、usbなど)、usb(マウス、キーボードなど)、ネットワーク、すべての主要なCPUに接続されているインターフェイスを介して最終的にcpuの外部インターフェイス(より良い言葉)。

これらのデバイスの多くは純粋なロジックだと思うのですが、その周辺機器にルーティングされるアドレスにデータを書き込んだときに、そのアドレスとデータが何らかの動作を実行するロジックの塊を伝えるのは理にかなっているようです。しかし、ちょうど別のコンピュータによって提供されている1台のコンピュータでこのWebページを読むのと同じように、純粋な論理でなくても、データを移動するためのインターフェイスが必要です。 gpuだけでなく、コンピュータの中の多くのものがプロセッサを内蔵しているだけでなく、マウスやキーボードがおそらくハードディスクである可能性が高いネットワークインターフェイスがあり、ラップトップのバッテリパックは、よく(マックバッテリーは、きれいに再インストールした後にコンピュータに再感染するウイルスに感染しています)。

魔法はありません。あなたのコンピュータのこれらの他のプロセッサで実行されているソフトウェア/ファームウェアは、ロジックとは異なりません。彼らの仕事の一部は、メインCPUからコマンドを待つことです。マウスボタンの状態を教えてください。 Gpu私に三角形を描いてください。

ビデオのCPUに特別なアセンブリ言語の手順はありません。 cpuは壁の穴からビデオカードを知っていません、ドライバはそれがビデオカードにするために必要なデータ値を書き込むアドレス空間を通して、それが話す方法を知っているビデオカードのためのアドレス空間を知っている/もの。私に三角形を描画するには、いくつかのデータ項目が含まれているかもしれませんが、間違いなく3つのコーナー座標、おそらく塗りつぶし色、またはその周辺機器との通信インターフェースの定義の一部である可能性の高い直線です。

ここには魔法はありません。誰かにあなたのために何かをしてもらいたいのであれば、彼らが理解できるようにするためのリストを提供するでしょう(123メインストリートへ行き、あなたが今夜のパフォーマンスへの2枚のチケットを希望し、そのお金を払い戻し、変更とチケットを返却するという答えを人に伝えます)、ハードウェアを使用すれば、通信インターフェイスがその周辺機器に対して適切に定義されるので簡単です。

関連する問題