2011-12-08 12 views
1

私は、CUDAを使用してGPUでの流体シミュレーションのためのいくつかの粒子技術を実装することに興味があります。CUDA環境でのGPUでの可視化

私の経験から、CPU上の計算物理学で視覚化を行う通常の方法は、必要な時間ステップごとにプログラム/アプリケーション出力データファイル(.vtkファイルなど)を作成し、次のようなデータ視覚化ツールを使用して視覚化することです。 ParaViewまたはVisIt

GPUでビジュアライゼーションを直接行う方法はありますか?タイム・ステップごとのデータ・ファイルをCPUに送り返し続ける必要があるので、プログラム終了後にParaView/Visitを使用できますか?もしそうなら、パフォーマンス上のペナルティはありませんか?

高性能コンピューティングのためのGPUベースのビジュアライゼーションを行うための一般的な方法をここにリストしておくと、本当に役立ちます。

注:グラフィックカードGTX 570とTesla C2050を私の仕事のほとんどに使用します。私はCUDA 4.0を使用しています。

答えて

5

CUDA < - > OpenGLは非常に簡単です。

あなたはこのようなOpenGLの頂点バッファを作成します。

unsigned int _vbo; 
cudaGraphicsResource *_vb_resource; 

glGenBuffers(1, &_vbo); 
glBindBuffer(GL_ARRAY_BUFFER, _vbo); 
glBufferData(GL_ARRAY_BUFFER, size, NULL, GL_DYNAMIC_DRAW); 

CUDAに登録:あなたの可視化カーネルを呼び出す前に

cudaGraphicsGLRegisterBuffer(_vb_resource, _vbo, FLAGS); 

マップを:

vertex_t *ptr = NULL; 
size_t size; 
cudaGraphicsMapResources(1, &_vb_resource, 0); 
cudaGraphicsResourceGetMappedPointer(ptr, &size, _vb_resource); 

はあなたを呼び出します頂点バッファを引数とするカーネル:

0お使いの頂点バッファ

cudaGraphicsUnmapResources(1, &_vb_resource, 0); 

とあなたの完了アンマップ

visData<<<BLOCKS, THREADS>>>(data, ptr); 

。 OpenGLでデータをレンダリングできるようになりました。

はマーティンベケットにより投稿されたサンプルを見てください

はまた、CUDAは、DirectX 10および11と相互運用することができます(でも9が、これは廃止され、憂鬱)。それは難しいことではありません。

編集:少しヒント: vsyncを無効にすると、計算パフォーマンスが向上する可能性があります。 vsyncはデフォルトで有効になっています。あなたは

は、WindowsとLinux上でVSYNCを無効にするために使用される表示のVSYNC率(60Hzの)に自分の計算fpsレートをドロップしますレンダリングや計算のVSYNCのためのスレッド上でのみ持っている場合は使用します。

// turn off vsync 
#ifndef _WIN32 
    // or just try it for non Windows 
    if (glXGetProcAddress((const GLubyte*) "glXSwapIntervalMESA") != NULL) 
     ((void (*)(int))glXGetProcAddress((const GLubyte*) "glXSwapIntervalMESA"))(0); 
    else if (glXGetProcAddress((const GLubyte*) "glXSwapIntervalSGI") != NULL) 
     ((void (*)(int))glXGetProcAddress((const GLubyte*) "glXSwapIntervalSGI"))(0); 
#else 
    wglSwapIntervalEXT(0); 
#endif 
4

クーダ、驚くことではないがplays very nicely with opengl

ですから、CUDAはVBOにあなたの結果を書き込むとOpenGLでのシーンをレンダリングすることができ、またはそれはテクスチャに直接マップタイプの結果である場合

関連する問題