3

実行に約 24 時間かかるプログラムがあります。これはすべて VB.net で書かれており、長さは約 2000 行です。すでにマルチスレッド化されており、これは完全に機能します (汗と涙の後で)。私は通常、10 個のスレッドでプロセスを実行しますが、処理時間を短縮するためにそれを増やしたいと考えています。これは、GPU を使用する場所です。情報を見つけるために考えられる関連するすべてのものをGoogleで検索しましたが、運はありません。

私が望んでいるのは、いくつかの一般的な操作を行い、処理のためにいくつかのスレッドを GPU に送信する vb.net プロジェクトの基本的な例です。理想的には、私はそれにお金を払う必要はありません。次のようなものです:

'Do some initial processing eg.
dim x as integer
dim y as integer
dim z as integer
x=int(textbox1.text)
y=int(textbox2.text)
z=x*y
'Do some multi-threaded operations on the gpu eg.
'show some output to the user once this has finished.

ヘルプやリンクは大歓迎です。私はC++や他の言語でそれについての記事をたくさん読んだことがありますが、他の言語を理解するのは苦手です!

皆さんありがとう!

フレイザー

4

1 に答える 1

4

VB.NET コンパイラは GPU にコンパイルしません。中間言語 (IL) にコンパイルし、実行時にターゲット アーキテクチャ用にジャスト イン タイム コンパイル (JIT) します。現在、x86、x64、および ARM ターゲットのみがサポートされています。CUDAfy (以下を参照) は IL を受け取り、それを CUDA C コードに変換します。次に、これが NVCC でコンパイルされ、GPU が実行できるコードが生成されます。これは、AMD では CUDA がサポートされていないため、NVidia GPU に限定されることを意味することに注意してください。

同じアプローチを採用した他のプロジェクトがあります。たとえば、Copperheadの Python から CUDA へのトランスレータです。

CUDAfy - FFT などの追加ライブラリを備えた CUDA API 上のラッパー。商用バージョンもあります。これは実際に

CUDAfy トランスレータ SharpDevelop の逆コンパイラ ILSpy をベースとして使用して、トランスレータは .NET コードを CUDA C に変換します。

.NET 言語から GPU を使用できるようにするプロジェクトは他にもあります。例えば:

NMath - .NET から使用でき、GPU 対応の数学ライブラリのセット。

他にもあるかもしれませんが、これらが主なもののようです。CUDAfy を使用することにした場合でも、CUDA について十分に理解し、アルゴリズムを移植して GPU データ並列モデルに適合させるために GPU がどのように機能するかを理解するために、ある程度の時間を費やす必要があります。数学ライブラリの 1 つを使用してすぐに実行できるものでない限り。

.NET 言語から GPU にアクセスする場合、依然としてパフォーマンス ヒットがあることを認識しておくことが重要です。.NET マネージ ランタイムからネイティブ ランタイムにデータを移動 (マーシャリング) するためのコストを支払う必要があります。ここでのオーバーヘッドは、サイズだけでなく、データの種類と、変換せずにマーシャリングできるかどうかにも大きく依存します。これは、CPU から GPU などにデータを移動するコストに追加されます。

于 2013-09-08T00:31:31.340 に答える