gpt4 book ai didi

cuda - CUDA环境中GPU上的可视化

转载 作者:行者123 更新时间:2023-12-01 01:45:43 26 4
gpt4 key购买 nike

我有兴趣在使用CUDA的GPU上实现一些粒子技术来进行流体模拟。

根据我的经验,在CPU上进行计算物理可视化的通常方法是在每个需要的时间步制作程序/应用程序输出数据文件(例如.vtk文件),并使用数据可视化工具(例如 ParaView

有没有办法直接在GPU上进行可视化?我是否必须一直将每步数据文件发送回CPU,以便在程序退出后可以对它们使用ParaView / VisIt?如果是的话,会不会有性能损失?

如果可以在此处列出一些流行的进行基于GPU的可视化以进行高性能计算的方法,那将非常有帮助。

注意:我将在大部分工作中使用图形卡GTX 570和Tesla C2050。我正在使用CUDA 4.0。

最佳答案

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);


以顶点缓冲区作为参数调用内核:

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


取消映射您的顶点缓冲区

cudaGraphicsUnmapResources(1, &_vb_resource, 0);


和你完成。 OpenGL现在可以渲染您的数据。

CUDA也可以与DirectX 10和11互操作(即使是9,但已弃用并令人沮丧)

看看Martin Beckett发布的样本。这不是那么棘手。

编辑:一点提示:
禁用vsync可能会导致更好的计算性能。默认情况下,vsync已启用。如果您仅在线程上进行渲染和计算,则vsync会将您的计算fps速率降低到所用显示器的垂直同步速率(60Hz)

要在Windows和Linux上禁用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

关于cuda - CUDA环境中GPU上的可视化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8424582/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com