タグ付けされた質問 「performance」

3
コンピューティングシェーダーは、画像フィルタリングのピクセルシェーダーよりも効率的ですか?
ブラー、SSAO、ブルームなどの画像フィルタリング操作は、通常、ピクセルシェーダーと「収集」操作を使用して行われます。各ピクセルシェーダーの呼び出しは、隣接するピクセル値にアクセスするために多数のテクスチャフェッチを発行し、単一のピクセルの価値を計算します結果。このアプローチには、多くの冗長なフェッチが行われるという理論上の非効率があります。近くのシェーダー呼び出しは、同じテクセルの多くを再フェッチします。 別の方法は、計算シェーダーを使用することです。これらには、シェーダー呼び出しのグループ全体で少量のメモリを共有できるという潜在的な利点があります。たとえば、各呼び出しで1つのテクセルをフェッチして共有メモリに保存し、そこから結果を計算できます。これは、高速かもしれませんし、そうでないかもしれません。 質問は、どのような状況下で(実際に)コンピューティングシェーダーメソッドがピクセルシェーダーメソッドよりも実際に高速であるかということです。カーネルのサイズ、どんな種類のフィルタリング操作などに依存しますか?明らかに、答えはGPUのモデルによって異なりますが、一般的な傾向があるかどうか聞いてみたいと思います。

2
状態を変更するコストはいくらですか?
プログラマーは、特定の操作のコストについてかなり良い考えを持っているはずです。たとえば、CPUでの命令のコスト、L1、L2、またはL3キャッシュミスのコスト、LHSのコストなどです。 グラフィックに関して言えば、私はそれらが何であるかほとんどわからないことに気付きます。コストで注文すると、状態の変化は次のようになることを心に留めています。 シェーダーの均一な変更。 アクティブな頂点バッファーの変更。 アクティブテクスチャユニットの変更。 アクティブシェーダープログラムの変更。 アクティブなフレームバッファの変更。 しかし、それは非常に大雑把な経験則であり、正確でさえないかもしれません。単位、ns、クロックサイクル、または命令の数を入れようとすると、どれくらいのことを言っているのでしょうか?

3
ベクターグラフィックスとビットマップまたはラスターグラフィックスのパフォーマンス
ベクトルグラフィックスを使用することもありますが、それは単にある場合には少しだけ見た目がいいからであり、また、ビットマップ/ラスタグラフィックスを使用する場合もあります。 私は疑問に思っていましたが、これら2つのオプションの間にパフォーマンスの大きな違いはありますか?

1
フラグメントシェーダーでこれが非常に遅いのはなぜですか?
私はいくつかのFPS測定コードをWebGLでセットアップしました(このSO回答に基づいて)、フラグメントシェーダーのパフォーマンスに奇妙な点を発見しました。このコードは、1024x1024のキャンバス上に単一のクワッド(または2つの三角形)をレンダリングするだけなので、すべての魔法はフラグメントシェーダーで発生します。 このシンプルなシェーダー(GLSL。頂点シェーダーは単なるパススルーです)を検討してください。 // some definitions void main() { float seed = uSeed; float x = vPos.x; float y = vPos.y; float value = 1.0; // Nothing to see here... gl_FragColor = vec4(value, value, value, 1.0); } したがって、これは白いキャンバスをレンダリングするだけです。私のマシンでは平均で約30 fpsです。 それでは、数値演算を増やし、数オクターブの位置依存ノイズに基づいて各フラグメントを計算しましょう。 void main() { float seed = uSeed; float x = vPos.x; …

3
ゲームでピクセルを直接描画できるのに、OpenGLやDirectXなどのグラフィックフレームワークがあるのはなぜですか?
ゲームやその他のグラフィックを多用するアプリケーションは、OpenGLやDirectXなどのフレームワークを使用します。また、ピクセルシェーダーやDX12などの機能が必要です。 しかし、ピクセル単位ですべてを描画できるのに、なぜこれらすべてのフレームワークとGPU機能が必要なのでしょうか? まず、ゲームはピクセル単位で描画されるようにコンパイルする必要があります。これにより、ゲームの実行可能サイズが大きくなる可能性がありますが、より高速で、32ビットカラーGPU(古いものでも)で動作しますか? 最初の3Dゲームはピクセルごとに描かれたのは知っていますが、なぜ今はそうしていないのですか?

3
OpenGLと3Dアニメーションソフトウェアのレンダリングの違い
OpenGLなどを使用すると、かなりリアルな外観のものを「リアルタイム」60 FPSでレンダリングできます。ただし、たとえばMayaや3ds Maxで同じシーンのビデオを作成しようとすると、同じ解像度とFPSであっても、レンダリングに非常に長い時間がかかります。 これら2つのタイプのレンダリングが同じ結果に対して異なる時間を要するのはなぜですか? 注:はい、3Dアニメーションソフトウェアは、リアルタイムで実行できるものよりも非常に優れた画像を生成できることを理解しています。しかし、この質問のために、私は平等な複雑さのシーンに言及しています。

1
一定の条件はシェーダーの切り替えよりもコストがかかりますか?
一般的に、シェーダーでの分岐は良いアイデアではありません。しかし今では、描画呼び出し全体に対して一定の条件を持つシェーダーがあります。したがって、実行されるブランチは、1つの描画呼び出しに対して常に同じです。 そのような種類の分岐は、これらの分岐なしで複数のシェーダーを持ち、それらを切り替えるよりもまだ高価ですか?

1
遠近法の正しい補間を無効にする場合(noperspective)
GLSLでは、頂点属性の遠近法による正しい補間がデフォルト設定です-noperspective修飾子を使用して、特定の頂点属性に対してそれを無効にできます。後処理シェーダー以外では、パースペクティブの正しい補間が無効になっているのを見たことがありません。他の使用例はありますか?また、パフォーマンス面でも違いはありますか?

1
シェーダーのループパフォーマンス
動的ループ関数をシェーダーに統合するための最良の方法は何ですか? まず、動的配列は不可能であるようです。では、最大サイズの配列を作成し、その一部のみを埋めるか、定義済みのサイズで配列を定義する方が良いでしょうか? 次に、この配列を反復処理する最良の方法は何ですか? 4〜128回の反復で、展開されたループまたは動的ループを使用する方が良いですか。また、事前定義された最大反復回数まで展開してから、などの条件で停止できることも確認しましたif (i == myCurrentMaximumIterationNumber)。

1
フラグメントシェーダーでテクスチャ座標を計算すると、テクスチャへのアクセスがはるかに遅くなるのはなぜですか?
GLSLでテクスチャを使用する場合、頂点シェーダーで最終的なテクスチャ座標を計算し、varyings を使用してそれらをフラグメントシェーダーに渡すのが最善です。y座標の単純な反転の例: // Vertex shader attribute vec2 texture; varying highp vec2 texCoord; // ... void main() { texCoord = vec2(texture.x, 1.0-texture.y); // ... } // Fragment shader varying highp vec2 textureCoordinates; uniform sampler2D tex; // ... void main() { highp vec4 texColor = texture2D(tex, texCoord); // ... } Y座標の反転、またはvec2(0.5)テクスチャ座標への追加などのさらに単純な操作がフラグメントシェーダーで実行される場合、テクスチャアクセスは非常に遅くなります。どうして? 注意として、たとえば、2つのテクスチャをブレンドして、それらの加重和を使用すると、時間の点ではるかに安価であり、各ピクセルに対して実行する必要があるため、テクスチャ座標自体の計算はそれほどコストがかかるとは思われません。

1
AMDがSSDをGPUボードに配置したことで、なぜレイテンシがそれほど減ったのですか?
AMDは最近、いくつかのM2 SSDを搭載した興味深いRadeon Proボードのニュースを発表しています。 より詳細なストーリーのいくつか(ここまたはここなど)が指摘しているように、メリットは主に高帯域幅から発生するわけではありません(M2はそれぞれ4つのPCIeレーン上にあるため、ボード自体の16レーンコネクタはさらに多くのはずです)。低レイテンシから。 このストーリーには、「これによりメモリアクセスのレイテンシが10分の1になる」という主張が含まれています。 私の質問は基本的に:GPUボード上のPCIe接続SSDは、システムPCIeバス上のメインシステムRAMまたはストレージデバイスにアクセスするGPUよりもレイテンシを大幅に短くする必要があるのはなぜですか?メインシステムの「邪魔になる」とは何ですか。また、オンボードSSDの方がはるかに高速にアクセスできます。

2
最新のフィルレートと遅延レンダリングを使用しても、オクルージョンカリングは引き続き適切ですか?
たとえば、現在の最上位のGPUですが、GTX 980には驚異的な72.1ギガピクセル/秒のフィルレートがあり、背面から前面へのレンダリングやZバッファーチェックを行うと、とんでもないほど大きく、おそらく4kの解像度で。ポリゴン数に関して言えば、最近のGPUは、バッチ処理またはインスタンス化、あるいはその両方を行うと、数千から数億のテクスチャ付き三角形を滞りなく実行できます。 フォワードレンダリングでは、シェーダーが実行されるフラグメントの量がすぐに圧倒的になる可能性がありますが、遅延レンダリングでは、通常、解像度に応じてコストはほぼ一定であり、ほとんどのシェーディングまたは後処理エフェクトは、1080pでリアルタイムに実行できます。 いずれにせよ、今日の制限要因は最も一般的には描画呼び出し数とシェーディングコストであり、どちらも適切な遅延レンダリングとジオメトリバッチ処理によって比較的低く保たれているため、そのことを念頭に置くと、単なる裏面とアウト以外のものを選別しています。実質的な利点の錐台ポリゴン?多くの場合、コスト(CPU / GPU時間、プログラマー時間)が利点を上回らないのではないでしょうか。

3
頂点バッファオブジェクトがパフォーマンスを向上させるのはなぜですか?
私の基本的な理解から、頂点バッファーオブジェクトは次のように機能します(擬似コード)。 通常、正方形を描くと言いたい場合は、線の描画コマンドを発行できます。 line (0, 0) -> (1, 0) line (1, 0) -> (1, 1) line (1, 1) -> (0, 1) line (0, 1) -> (0, 0) VBOを使用すると、私が正しく理解していれば、頂点をVBOにロードします。 define VBO load (0,0) -> VBO load (1,0) -> VBO load (1,1) -> VBO load (0,1) -> VBO load (0,0) -> VBO その後、1つの描画コマンドを発行できます。 …

2
最新のGPUで頂点データを整理する最もパフォーマンスの高い方法
私が頂点で構成モデルでは、各持っていると言うposition、normal、tangent、およびtexcoord三角形がインデックストリプルによって指定された属性を、。 頂点の属性だけに注目すると、配列の構造と構造の配列という2つの広範な戦略に気づきます。また、構造体の配列は、特定の頂点の属性のメモリの局所性(したがってキャッシュの局所性)を増加させるため、優先されると聞きました。 これが実際にパフォーマンスを向上させるのですか?これが起こると私が考えることができる主な方法は、長い間キャッシュから削除された頂点データをラスタライザが取得する必要がある頂点インデックスによるものです。頂点データへのアクセスがこのようにランダムである場合、同じキャッシュライン上の頂点のすべての属性を保持すると、確実に処理が速くなりますが、これは、三角形の指定の順序を最適化することでほとんど軽減できる問題ではありませんか? さらに、最近のGPUは、多くのタイプの構造のベクトルよりも、同じタイプの長いベクトルをアンパックする方が優れている可能性があることを理解しています。インデックスの順序が最適化されている場合、配列構造のレイアウトが同じ頂点データの構造配列のレイアウトを一貫して上回ることは可能でしょうか?

1
フォワードレンダリングと遅延レンダリングのパフォーマンスのトレードオフはどのくらいですか?
フォワードレンダリングは、入力ジオメトリとライティング情報から直接表面フラグメントの輝度値を計算するプロセスです。遅延レンダリングは、そのプロセスを2つのステップに分割します。最初に、入力ジオメトリをラスタライズして構築されたマテリアルプロパティ(ジオメトリバッファ、またはGバッファ)を含むスクリーンスペースバッファを生成し、次にG-を組み合わせて各ピクセルの輝度値を生成します。照明情報を含むバッファ。 遅延レンダリングは、多くの場合、フォワードレンダリングの最適化として提示されます。1つの説明は、ライティングはかなり高価であり、オーバードローがある場合は画面に表示されないピクセルをライティングしているのに対し、マテリアルプロパティをGバッファに格納して後でライトする場合は、ライティングするピクセルのみをライティングするということです。実際に画面に表示されます。これはあなたにも、深さ、プリパスを行い、その後にデプステストセットで前方のレンダリングパスを行うことができますことを考えると、実際に延期の利点であるD3D11_COMPARISON_EQUALか、GL_EQUALまたは同等の? 遅延レンダリングには、GPUでより適切にスケジュールする可能性もあります。1つの大きなワープ/波面を小さなジオメトリ波面に分割し、その後小さな照明波面を使用すると、占有率が向上します(同時に飛行中の波面が増えます)。ただし、帯域幅の使用量も多くなります(多数のチャネルをGバッファーに書き込んでから、ライティング中にそれらを読み戻す)。ここでの詳細は明らかにGPUに大きく依存しますが、一般的な原則は何ですか? フォワードレンダリングと据え置きレンダリングのどちらを決定するかについて、他にパフォーマンスに関する考慮事項はありますか?(必要に応じて、各手法のバリエーションを使用できると想定します。つまり、前方向のタイルと遅延後のタイルを比較することもできます。)

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