問題タブ [gpgpu]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cuda - CPUとしてのGPUの実現可能性?
CUDAのようなCPUイニシアチブとしてのGPUの将来はどうなると思いますか?彼らは主流になり、業界で次に採用される流行になると思いますか?Appleは、GPUを使用してCPUタスクを実行するための新しいフレームワークを構築しており、科学分野のNvidiasCUDAプロジェクトで多くの成功を収めています。学生がこの分野に時間を費やすことを提案しますか?
cuda - 一般的なプログラミング タスクはどの程度 GPU に変換されますか?
私は最近、一般的なプログラミングに最新のグラフィックス カードで利用できる処理能力を最大限に活用する方法を確立するためのプロジェクトに取り組み始めました。フィールド汎用 GPU プログラミング (GPGPU) は、GPU 計算モデルにうまく適合するため、多くの重い数学を使用する科学的アプリケーションに大きな偏りがあるようです。これはすべて良いことですが、ほとんどの人はシミュレーション ソフトウェアなどの実行にすべての時間を費やしているわけではないため、大衆向けの GPU 対応ソフトウェアを簡単に構築するための共通の基盤を作成できるのではないかと考えました。
これは、私が提起したい質問につながります。プログラムによって実行される最も一般的な種類の作業は何ですか? 作業が GPU プログラミングに非常にうまく変換される必要はありません。パフォーマンスのわずかな改善は喜んで受け入れます (何もしないよりは少しでも良いでしょう?)。
すでに考えているテーマがいくつかあります。
- データ管理 - データベースなどからの大量のデータの操作。
- 表計算形式のプログラム (上記と多少関連があります)。
- GUI プログラミング (関連するコードにアクセスすることは不可能かもしれませんが)。
- 並べ替えや検索などの一般的なアルゴリズム。
- 共通コレクション (およびデータ操作アルゴリズムとの統合)
他に非常に一般的なコーディング タスクはどれですか? 書かれているコードの多くは、在庫管理や実際の「オブジェクト」の追跡のカテゴリのものではないかと思います。
私は業界での経験がないので、自分が思っているよりも頻繁に行われているが、外部製品として具体化されていない基本的なタイプのコードがいくつかあると考えました。
高レベルのプログラミング タスクと特定の低レベル操作の両方が高く評価されます。
cuda - GPGPU の使用に成功しましたか?
nVidia CUDAなどを使用してGPGPUを利用するアプリケーションを作成した人がいるかどうか知りたいです。もしそうなら、どのような問題を発見し、標準の CPU と比較してどのようなパフォーマンスの向上を達成しましたか?
directx - Direct3D テクスチャおよびサーフェスからのリードバックの実行
D3D テクスチャとサーフェスからシステム メモリにデータを戻す方法を理解する必要があります。そのようなことを行うための最速の方法と方法は何ですか?
また、サブレクトが 1 つだけ必要な場合、全体をシステム メモリに読み戻すことなく、その部分だけを読み戻すにはどうすればよいでしょうか。
要するに、以下をシステムメモリにコピーする方法の簡潔な説明を探しています:
- テクスチャ_
- テクスチャのサブセット_
- 表面_
- サーフェスのサブセット_
- D3DUSAGE_RENDERTARGETテクスチャ
- D3DUSAGE_RENDERTARGETテクスチャのサブセット
これは Direct3D 9 ですが、D3D の新しいバージョンに関する回答もいただければ幸いです。
c# - C# メソッドを C++ メソッドに変換する
GPU で実行するために、一般的な C# コード構造を C++ CUDA コードにマッピングするためのさまざまなオプションを検討しています。システムの構造は次のとおりです (矢印はメソッド呼び出しを表します)。
C# プログラム -> C# GPU ライブラリ -> C++ CUDA 実装ライブラリ
GPU ライブラリのメソッドは次のようになります。
これは、各要素に対して関数を実行する ICollection<> 型の拡張メソッドです。ただし、私がやりたいことは、C++ ライブラリを呼び出して、GPU でメソッドを実行させることです。これには、何らかの形で関数を C++ コードに変換する必要があります。これは可能ですか?
詳しく説明すると、私のライブラリのユーザーが任意のコードを含むメソッドを (C# で) 実行した場合、このコードを CUDA で実行できるように C++ の同等のものに変換したいと考えています。これを行う簡単な方法はないと感じていますが、それを行う方法、または同じ効果を達成する方法があるかどうかを知りたい.
私が疑問に思っていたことの 1 つは、式で変換する関数をキャプチャし、これを使用して C++ の同等物にマップすることです。誰でもこれについて経験がありますか?
c++ - 任意の値型の操作
この記事では、C# で + 演算子が定義された任意の値型を追加できるようにする方法について説明します。本質的に、次のコードを許可します。
T 型に '+' 演算子の定義があるという保証がないため、このコードはコンパイルされませんが、次のようなコードで効果が得られます。
リンクをたどって、Num クラスがこれをどのように実現しているかを確認してください。とにかく、質問に進みます。C または C++ で同じ効果を達成する方法はありますか? 好奇心旺盛な人のために、私が解決しようとしている問題は、より多くの型で動作できるようにすることで、CUDA カーネルをより柔軟/一般的にできるようにすることです。
更新: .NET については、Marc Gravell が、演算子の問題を非常にエレガントに解決するユーティリティ ライブラリを作成しました。
directx - 今すぐ CUDA アプリを作成するべきですか、それとも DirectX 11 を待つべきですか?
Windows 7 はおそらく来年の 10 月に RTM に移行する (そして DirectX 11 も) ので、DirectX 11 の明示的な GPGPU 機能、つまりクロスプラットフォーム (Windows/Linux/Mac/Whatever ではなく ATI/Nvidia) になるのを待つ価値があるでしょうか? ; または、今CUDAアプリケーションを作成する必要がありますか?
c# - CUDA ドライバー API と CUDA ランタイム
CUDA アプリケーションを作成する場合、次の図に示すように、ドライバー レベルまたはランタイム レベルで作業できます (ライブラリは、高度な数学用の CUFFT および CUBLAS です)。
(ソース: tomshw.it )
この 2 つのトレードオフは、低レベルの API のパフォーマンスが向上することですが、コードの複雑さが増すという犠牲を払っていると思います。具体的な違いは何ですか?高レベル API では実行できない重要な点はありますか?
私は C# との相互運用に CUDA.net を使用しており、ドライバー API のコピーとしてビルドされています。これにより、C# でかなり複雑なコードを大量に記述することが奨励されますが、C++ に相当するものはランタイム API を使用するとより単純になります。このやり方で何か得があるのだろうか?私が理解できる利点の 1 つは、インテリジェントなエラー処理を他の C# コードと簡単に統合できることです。
c# - 非同期ジョブが完了するまでブロックする方法
NVIDIA の CUDA を使用して特定の作業タスクを GPU にオフロードする C# ライブラリに取り組んでいます。この例は、拡張メソッドを使用して 2 つの配列を一緒に追加することです。
このコードの作業は GPU 上で行われます。ただし、結果が必要な場合にのみCPUブロックでコードが実行されるように、非同期で実行したいと思います(結果がまだGPUで終了していない場合)。これを行うために、非同期実行を隠す ExecutionResult クラスを作成しました。使用中、これは次のようになります。
最後の行で、データの準備がまだ完了していない場合、プログラムはブロックされます。スレッドの同期などの経験があまりないため、ExecutionResult クラス内でこのブロッキング動作を実装する最善の方法については確信が持てません。
コンストラクターに渡されるアクションは、GPU で実際の作業を実行する非同期メソッドです。ネストされた Action は、非同期コールバック メソッドです。
私の主な関心事は、コンバーターで行われる待機を最適/最もエレガントに処理する方法ですが、問題全体を攻撃するためのより適切な方法があるかどうかです。さらに詳しく説明したり説明したりする必要がある場合は、コメントを残してください。
cuda - CUDAメモリのトラブル
特別なフラグなしでcubinファイルにコンパイルしているCUDAカーネルがあります。
コンパイルされますが、次のメッセージが表示されます。
アドバイザリ:グローバルメモリスペースを想定して、ポインタが何を指しているのかわかりません
一時的なcppファイルの行への参照。一見恣意的に見えるコードをコメントアウトすることで、これを機能させることができます。これは私には意味がありません。
カーネルは次のとおりです。
回線を入れ替えたら
この行の最初のforループの後
予告なしにコンパイルされます。これは、ラインの上のループの一見ランダムな部分をコメントアウトすることによっても達成できます。また、ローカルメモリアレイを通常のアレイに置き換えてみましたが、効果はありません。誰かが問題が何であるか教えてもらえますか?
システムはVista64ビットであり、その価値はあります。
編集:コードを修正して実際に機能するようにしましたが、それでもコンパイラー通知が生成されます。少なくとも正確さに関しては、警告が問題であるようには見えません(パフォーマンスに影響を与える可能性があります)。