0

私は、主に静的データを時間の経過とともに蓄積するプロセスを持っています。その多くは、何百万ものデータ要素です。データの小さな部分が時折変更される可能性がありますが、ほとんどの場合、データは変更されません。

ただし、ユーザーがこのデータの表示方法 (形状と色の両方) を自由に変更できるようにしたいと考えています。

データを GPU にデータとして保存する方法はありますか。次に、そのデータを GPU でレンダリング可能なものに変換する方法がいくつかあります。ユーザーはこれらのアルゴリズムから選択でき、データにまったく触れることなく効率的に交換できます。また、色 ID はデータに含まれますが、ユーザーはデータに触れることなく、各 ID が一致する色を変更できます。

したがって、たとえば、次のデータがある可能性があります。

[1000、602、1、1] [1003、602.5、2、2]

注: データは頂点ではなく、頂点に変換するために何らかの計算またはルックアップが必要になる場合があります。

ユーザーは視覚化アルゴリズムを選択できます。(0, 602, 0) と (3, 602.5, 100) にそれぞれ 2 つの立方体を表示するとします。ユーザーは、色 ID 1 = 青、2 = 緑を選択します。したがって、元の立方体は青で表示され、もう一方は緑で表示されます。

次に、データをまったく変更せずに、ユーザーが別の視覚化を選択すると、ユーザーがカラー マッピングを変更したため、球が (10, 602, 10) と (13, 602.5, 20) に表示され、色が異なります。 .

さらに別のビジュアライゼーションでは、すべてのデータ要素の間に線が表示されたり、4 つのセットごとに長方形が表示されたりする場合があります。

上記の説明は、簡単な方法で実行できるものですか? どのように行うのが最善でしょうか?

新しいデータを追加し、最後に追加することに注意してください。毎秒数千のバーストが発生する可能性があります。既存のデータの変更はよりまれであり、そのような場合のパフォーマンス ヒットは許容されます。ユーザーがアルゴリズムとカラー マッピングを変更することは比較的まれです。

クロスプラットフォーム API (OS と GPU 間) を使用してこれを行うことを好むので、OpenGL を想定しています。

4

2 に答える 2

1

データを VBO (GPU メモリ内) に保存し、変更時に更新することができます。

GPU 側では、ジオメトリ シェーダーを使用してより多くのジオメトリを生成できます。線から立方体、球体に切り替える方法はわかりませんが、各位置に三角形を描いている場合、GS は「余分な」三角形を出力できます (線と点についても同様です)。

色の変更機能に関しては、そのロジックを頂点シェーダーに焼き付けることができます。idx (1、2、...) は頂点属性である必要があります。VS が idx -> カラー マッピングを提供するテーブルを参照するようにします (これは小さなテクスチャとして保存できます)。テクスチャを更新して、その場でカラー マッピングを変更できます。

于 2013-04-10T06:35:51.543 に答える
0

あなたのようなアプリケーションには、CUDA と OpenCL という特別な GPGPU プログラミング インフラストラクチャがあります。OpenCL はクロスベンダー システムです。CUDA はクロスプラットフォームですが、NVidia GPU のみをサポートしています。また、OpenGL は、OpenGL-4.2 (計算シェーダー) で汎用計算機能を導入しました。

そしてその多く、何百万ものデータ要素

1 つの要素が 100 バイトを消費したとしても、100 MiB しか転送されません。最新の GPU は、ホスト システム メモリとの間で約 10 GiB/秒を転送できます。

上記の説明は、簡単な方法で実行できるものですか? どのように行うのが最善でしょうか?

はい、できます。ただし、問題を並列化し、そのメモリ アクセス パターンを GPU が好むものに対応させることができる場合にのみ、実際にパフォーマンスを確認できます。特にメモリ アクセス パターンが悪いと、パフォーマンスが数桁低下する可能性があります。

于 2013-04-10T11:10:42.903 に答える