Skip to content

memory leak in core.cu::Render #23

@GoogleCodeExporter

Description

@GoogleCodeExporter
Hi, 
I was wondering if you free pDevScene etc. in your rendering call or if it is 
already reimplemented otherwise.

Regardless,
my code looks something like this:


And I found that no dev pointer gets freed, which after several thousand 
iteration fills up the gpu memory to the brim.

best regards
Christoph

void Render(const int& Type, CScene& Scene, CTiming& RenderImageTimer, CTiming& 
BlurImageTimer, CTiming& PostProcessImageTimer, CTiming& DenoiseImageTimer)
{
    CScene* pDevScene = NULL;

    HandleCudaError(cudaMalloc(&pDevScene, sizeof(CScene)), "alloc dev scene failed");
    HandleCudaError(cudaMemcpy(pDevScene, &Scene, sizeof(CScene), cudaMemcpyHostToDevice));

    if (Scene.m_Camera.m_Focus.m_Type == 0)
        Scene.m_Camera.m_Focus.m_FocalDistance = NearestIntersection(pDevScene);

    HandleCudaError(cudaMemcpy(pDevScene, &Scene, sizeof(CScene), cudaMemcpyHostToDevice));

    CCudaView* pDevView = NULL;

    HandleCudaError(cudaMalloc(&pDevView, sizeof(CCudaView)));
    HandleCudaError(cudaMemcpy(pDevView, &gRenderCanvasView, sizeof(CCudaView), cudaMemcpyHostToDevice));


    CCudaInstantRadiosity* pDevIR= NULL;

    HandleCudaError(cudaMalloc(&pDevIR, sizeof(CCudaInstantRadiosity)));
    HandleCudaError(cudaMemcpy(pDevIR, &gInstantRadiosity, sizeof(CCudaInstantRadiosity), cudaMemcpyHostToDevice));


    CCudaTimer TmrRender;

    bool VPLRender = true;  
    switch (VPLRender)
    {
        case false:
        {
            SingleScattering(&Scene, pDevScene, pDevView);
            break;
        }

        case true:
        {
            RenderVPL(&Scene, pDevScene, pDevIR, gpVPLArray, gpAVSMArray, pDevView);        
            break;
        }
    }

    HandleCudaError(cudaFree(pDevIR),"Error freeing pDevIR");

    RenderImageTimer.AddDuration(TmrRender.ElapsedTime());

    CCudaTimer TmrBlur;
    Blur(&Scene, pDevScene, pDevView);
    BlurImageTimer.AddDuration(TmrBlur.ElapsedTime());

    CCudaTimer TmrPostProcess;
    Estimate(&Scene, pDevScene, pDevView);
    PostProcessImageTimer.AddDuration(TmrPostProcess.ElapsedTime());

    ToneMap(&Scene, pDevScene, pDevView);

    CCudaTimer TmrDenoise;
    Denoise(&Scene, pDevScene, pDevView);
    DenoiseImageTimer.AddDuration(TmrDenoise.ElapsedTime());


    HandleCudaError(cudaFree(pDevView),"Error freeing pDevView");
    HandleCudaError(cudaFree(pDevScene),"Error freeing pDevScene");

}

Original issue reported on code.google.com by [email protected] on 10 Aug 2012 at 1:07

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions