【问题标题】:CUDA OPENGL Interoperability: cudaGLSetGLDeviceCUDA OPENGL 互操作性:cudaGLSetGLDevice
【发布时间】:2011-12-03 11:49:53
【问题描述】:

按照 CUDA 4.0 的编程指南,我调用 cudaGLSetGLDevice 在任何其他运行时调用之前。但是下一个 cuda 调用 cudaMalloc 返回“所有支持 CUDA 的设备都忙或不可用。”

此外,在 NVIDIA 论坛 (http://forums.nvidia.com/index.php?showtopic=186399) 中,一位用户表示: “在多 GPU 系统中,虽然你会在 CUDA 中遇到更大的缺陷...... a) 当 CUDA 上下文和 OpenGL 上下文位于不同的设备上时,您不能进行 CUDA/GL 互操作(根据我的经验,未记录且不受支持) b) 您不能在非 Windows 机器上进行 GL 设备关联。 c) 您不能在消费类设备上进行 GL 设备关联(仅限 Quadro/Tesla)”

这是真的吗?我最后的工作必须在 linux 多 GPU 系统上运行。我必须更改图形库才能使用?在这种情况下,你有什么建议?

操作系统:Opensuse 11.4 64 位

显卡:GeForce 9600M GT

司机:275.21

【问题讨论】:

    标签: opengl interop cuda multi-gpu


    【解决方案1】:

    Cuda and OpenGL Interop

    我不得不用 gl* 的负担来替换一个简单的 cudaMalloc()。

    尽管如此,它工作得很好。

    // The lattice as a GL Buffer
    GLuint gridVBO = 0;
    struct cudaGraphicsResource *gridVBO_CUDA = NULL;
    
    // Ask for GL memory buffers
    glGenBuffers(1, &gridVBO);
    glBindBuffer(GL_ARRAY_BUFFER, gridVBO);
    const size_t size = L * L * sizeof(unsigned char);
    glBufferData(GL_ARRAY_BUFFER, size, NULL, GL_DYNAMIC_DRAW);
    glBindBuffer(GL_ARRAY_BUFFER, gridVBO);
    glBindBuffer(GL_ARRAY_BUFFER, 0);
    cutilSafeCall(cudaGraphicsGLRegisterBuffer(&gridVBO_CUDA, gridVBO, cudaGraphicsMapFlagsWriteDiscard));
    
    // Map the GL buffer to a device pointer 
    unsigned char *grid = NULL;
    cutilSafeCall(cudaGraphicsMapResources(1, &gridVBO_CUDA, 0));
    size_t num_bytes = 0;
    cutilSafeCall(cudaGraphicsResourceGetMappedPointer((void **) &grid,
                         &num_bytes, gridVBO_CUDA));
    
    // Execution configuration
    dim3 dimBlock(TILE_X, TILE_Y);
    dim3 dimGrid(L/TILE_X, L/TILE_Y);
    
    // Kernel call
    kernel<<<dimGrid, dimBlock>>>(grid);
    cutilCheckMsg("Kernel launch failed");
    
    // Unmap buffer object
    cutilSafeCall(cudaGraphicsUnmapResources(1, &gridVBO_CUDA, 0));
    

    【讨论】:

      猜你喜欢
      • 2013-04-04
      • 2011-09-22
      • 2015-08-03
      • 1970-01-01
      • 2013-10-15
      • 2013-04-30
      • 2016-12-04
      • 2016-01-25
      • 2011-07-23
      相关资源
      最近更新 更多