2012-02-10 14 views
1

GPUの並列処理能力の使い方を知りたいです。しかし、私はグラフィックを作ることを熱望していません!私はCgのチュートリアルを試しましたが、グラフィックス用語では重いようです。さらに、私はそのようなプログラムをどのように入出力に接続できるのか把握していないようです。シンプルなGPUプログラミング(Cg?)

2つのファイルから2つの大きな整数配列を読み込み、最後の2つの要素を追加して新しい配列を作成し、それは別のファイルにあります。私はそれをテストし、私は、C++でそれをコーディングする方法をthatsのなかった:

#include <iostream> 
#include <fstream> 
using namespace std; 


int main(void) 
{ 
    const int N=10000000; 
    int a[N],b[N],c[N]; 
    ifstream a_source ("file_a",ios::binary); 
    ifstream b_source ("file_a",ios::binary); 
    ofstream c_target ("file_a",ios::binary); 

    a_source.read((char*)a,N*sizeof(int)); 
    b_source.read((char*)b,N*sizeof(int)); 

    for(int i=0;i<N;i++) 
     c[i]=a[i]+b[i]; 

    c_target.write((char*)c,N*sizeof(int)); 
    return 0; 
} 

私は、このためのCgを使用する方法を詳しく説明していただけますか?

+2

Cgで死んでいますか?私が覚えている限り、これは純粋にシェーダ言語なので、汎用GPUプログラミングには必ずしも適していません。代わりにCUDAまたはOpenCLを見てください。 (注意:あなたの特定の例は、もちろん些細なシェーダですが、グラフィック用に開発されたAPIの代わりに汎用APIを使用する方が理にかなっていると思います)。 –

+0

CgはグラフィックスではC、GPUではCではありません。 GPGPUを使ってGPGPUを実行したい場合は、グラフィックス処理の仕組みやGPGPUのマッピング方法を知る必要があります。 – KillianDS

答えて

2

Cgは実際にはCUDAを使用する方が良いですが、フラグメントシェーダーでCgを使用するとデッドセットになる場合は、this基本的な例(2Dグリッドベースの計算)をご覧ください。

+0

+1問題は、Cg/GLSLがシェーディング言語であることです。つまり、PCのRAMからGPUにデータを転送できるようにOpenGLを学習する必要があります。営業担当者は、この複雑さをすべて隠しているCUDAを実際に調査する必要があります。しかし、覚えている限り、CUDAはNVIDIAのGPUSでのみ利用可能です。 – karlphillip

+0

CUDAはnVidia GPUでのみ利用可能ですが、クロスGPUプラットフォームのバージョンは* OpenCL *(OpenGLのメーカから)です。 – cmannett85

+0

私はCUDAを選んだのは、それがCgのようなnVidia製品であり、素晴らしいツールとチュートリアルがあるからです:) – Necrolis

0

はあなたがあなたのコードの中に配置する必要がありtehの余分effordに比べて、二重precissionを使用する際に高速化が最小限であることに注意する必要がありますC++ AMP一般にhttp://blogs.msdn.com/b/vcblog/archive/2011/06/15/introducing-amp.aspx

を見ているようにしてください。これは、コンパイラスイッチでオンにできる6コアSSEソリューションと比較した場合です(パフォーマンス分析のためにインテルのVTuneを使用しているmauybe)

関連する問題