シェーダーは正確には何に使用できますか?


8

私は実際には3Dの人間ではありません。Three.jsの例ではシェーダーを少ししか使用していませんが、これまでのところ、方程式のグラフィカルな部分にのみ使用されているようです。

ただし、(かなり不可解な)Wikipediaの記事やその他の情報源から、これらは単なるグラフィック効果以外にも使用できる、つまりGPUのプログラミング(Wikipedia)に使用できると私は信じています。

つまり、GPUはまだプロセッサですよね?より大きく、より高速なベクトル操作のためのより大きく異なる命令セットを備えていますが、それでもプロセッサです。シェーダーを使用して通常のプログラムを作成できますか(ビデオメモリにアクセスできる場合)。

編集:通常のプログラム== "アプリケーション"、つまり、ウィンドウ/コンソールプログラムを作成するか、少なくとも画面に何かを描画する方法を持っています。


2
「通常のプログラム」とはどういう意味ですか
クラベミール

2
+1ゲーム開発に関する最もかわいい質問で、世界観を再考することができました。
knight666

1
"=="は比較演算子であり、代入演算子ではありません:)
kravemir

2
ええ、私は知っています、それを使用することはまだ有効です。説明を定義に「割り当てる」のではなく、それらを同等にしたかったのです。
jcora

回答:


13

もともと、専用のグラフィックス処理ハードウェアには、固定された固定された一連の機能がありました。入力ジオメトリを受け取り、非常に特定の処理を行って変換およびラスタライズし、結果を画面にブラストします。時間の経過とともに、この機能はパラメータ化され、最終的にはプログラム可能になりました。「シェーダー」は、ジオメトリの変換とシェーディングを制御するため、GPUで実行されるプログラムに使用される用語になりました。

GPUハードウェアが進化するにつれて、ますます多くのものがプログラム可能になり、今では書き込むことができる種類のシェーダーの大部分は、画面上の何かの実際のシェーディングに間接的にしか寄与していません(ここでは、ジオメトリやハルシェーダーなどについて言及しています) )。これにより、GPUは、大規模な並行処理ストリームベースの処理を行うためのデバイスとして一般化されました。そのため、GPUとシェーダーの目的は、一般的に、ある種の派手なグラフィック効果を実装することですが、特定の種類の汎用計算(特に、並列計算に適したもの)を実行するために使用されます。これは、汎用GPUプログラミングまたは「GPGPU」と呼ばれることがよくあります。

ただし、GPUは依然として高度に専門化されており、CPUが実行できる機能の多くを実行できません。また、システム内の残りのハードウェアへの接続も制限されているため、「通常の」プログラム(コンソール出力やマウス入力など)を完全にGPUで完全に作成することはできません。レンダリングとして解釈されることを意図していないGPUで計算を実行できますが、それ自体はスタンドアロンCPUではありません。


5

GPUはCPUに何をすべきかを伝えることができません。CPUが読み取るメモリに結果を提供できます。

シェーダー/ GPGPU は次の用途には使用できません

  • CPU割り込みとして実装されているため、CPUなしで直接ユーザー入力を取得する
  • アプリケーションはカーネルによって管理され、CPUによって実行されるため、任意のアプリケーションの作成
  • ウィンドウマネージャ/サーバーはCPUで実行されるため、任意のウィンドウの作成

シェーダー/ GPGPU は以下に使用できます

  • 画面/ウィンドウに描画するが、CPUで制御する必要がある
  • ビデオのデコード/エンコード
  • プロのグラフィックエディターでの画像処理 -ぼかし、エッジのシャープ化など、さまざまな効果の並列実行可能効果
  • 物理計算

OpenCLを参照してください。非グラフィック計算にシェーダーを利用できます。

コメントに基づいて編集:

シェーダーは、グラフィックスのレンダリングにのみ使用されます。GPUで非グラフィックス計算を実行することをGPGPUと呼びます。


最後の点は正確ではありません。物理演算にシェーダーを使用しておらず、OpenCLやCUDAのようなGPGPU APIを使用しています。
dreta

@dretaはい。それは本当です。彼の質問に基づいて、彼はシェーダーをハードウェア-処理ユニットとして意味していると思います。彼は「それでもプロセッサーだ」と言った。
クラベミール

2
それでは、彼が間違っていることを修正してください。なぜ彼の誤解を認めているのですか、彼はレンダリングの第一人者ではなく、シェーダーは曖昧ではなく、特定の役割を持っていると
言いました

-4

シンプル。グラフィックスプロセッシングユニットは最終的にシェーダーを取得しました。これはプログラム可能になったので、効果はますます豪華になりました。最終的にGPU全体がSIMDユニットになりました。

SIMDは、シングルインストルメンテーションマルチプルデータを意味します。現在、GPUはツリーのようなものです。X個のコアがあり、それぞれY個のコアがあり、Z個のコアがあります。ツリーを下に行くほど、メモリが高速で小さくなり、計算の並列性とシンペラ性が向上します。

つまり、GPUは一種のGeneral Purpuse GPUになっています。I / O、メモリ管理、スケジューリングは処理できますが、中央処理装置ではないため、CPUと呼ばれていません。

言うまでもなく、GPGPUのパワーは、分割可能な並列操作を大量のデータに対して一度に実行する必要があることから生じます。そのため、ほとんどの一般的なソフトウェアには役に立たないものの、nVidiaはGPGPUをCPUにする作業に取り組んでいます。彼らは、GPUをARM CPUとして公開できると信じています。この変換手法は、コアがRISCであるx86 CPUの内部にもあります。

OpenCL、CUDA、DirectXは、スプリットパーソナリティプログラミング言語のようなものです。たとえば、OpenCLはCPUで実行されますが、SIMDの恩恵を受けている「爆弾」(「カーネル」)をGPUにオフロードします。

それがすべてのFusion / Sandy Bridge CPU-GPUスタイルになるまでに長くはかからないでしょう。


3
-1。あなたの言葉の選択は、その答えの質を劇的に低下させます。
bummzack

単語の選択自体は意味がありません:en.wikipedia.org/wiki/On_Denotingしたがって、質は質問ではなく論理であるので、質は低下しません。それは実際には最も正しい答えです。
Vincent

2
言葉の選択は非常に重要です。あなたが不快な言葉を使うなら、あなたの答えは良いとは見なされません。価値のある答えを持っている人は、それが雄弁でエレガントであることを確認するために時間を費やすでしょう。
ジョナサンピトレ

言語に問題がある場合は、回答を編集してください。サイトを改善するかどうかは、皆次第です。
Tetrad

論理的な理解の要求が二院制の哲学的ゾンビからのものである場合、知識は力と等しいので、それは関係なく私を満足させるでしょう。論理よりも感情を大切にする二院生に知識を譲りたくありません。それは答えを改善するだけです。
Vincent
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.