Results 1 to 5 of 5

Thread: Memory leak problem in nVidia driver

  1. #1
    Junior Member
    Join Date
    Jan 2013
    Posts
    3

    Memory leak problem in nVidia driver

    Hi,

    I face a memory leak problem in nVidia driver.

    Environment:
    Windows7 64bit
    Quadro5000
    CUDA GPU COMPUTING SDK 4.0
    Driver ver.296.70

    Memory leak happens when you call the function clReleaseMemObject()
    after calling clCreateBuffer().

    And here is a sample code to verify that memory leak appers.

    Code :
    #include "CL/cl.h"
    #include <stdio.h>
    #include <string.h>
    #include <assert.h>
     
    int main(void)
    {
        cl_int ret;
        cl_platform_id platforms[16];
        cl_uint numPlatforms;
        ret = clGetPlatformIDs(16, platforms, &numPlatforms);
        assert(ret == CL_SUCCESS);
        assert(numPlatforms < 16);
     
        int index;
        for (index = 0; index < (int)numPlatforms; index++) {
            char name[256];
            size_t retSize;
            ret = clGetPlatformInfo(platforms[index], CL_PLATFORM_NAME, sizeof name, name, &retSize);
            assert(ret == CL_SUCCESS);
            if (strcmp(name, "NVIDIA CUDA") == 0) {
                break;
            }
        }
     
        cl_platform_id platform = platforms[index];
        cl_device_id device;
        cl_uint numDevices;
        ret = clGetDeviceIDs(platform, CL_DEVICE_TYPE_GPU, 1, &device, &numDevices);
        assert(ret == CL_SUCCESS);
     
        cl_context_properties props[] = {CL_CONTEXT_PLATFORM, (cl_context_properties)platform, 0};
        cl_context context = clCreateContext(props, 1, &device, NULL, NULL, &ret);
        assert(ret == CL_SUCCESS);
     
        const int COUNT_MAX = 10000000;
        for (int count = 0; count < COUNT_MAX; count++) {
                if ( count % 10000 == 0) printf("count=%d\n",count);
     
                cl_mem clmemory = clCreateBuffer(context, CL_MEM_READ_WRITE, 128*128*sizeof(int), NULL, &ret);
                assert(ret == CL_SUCCESS);
     
                ret = clReleaseMemObject(clmemory);
                assert(ret == CL_SUCCESS);
        }
        ret = clReleaseContext(context);
        assert(ret == CL_SUCCESS);
     
        return 0;
    }

    I found another thread "Possible Memory leak in nVidia driver" which is written about similar problem.
    Refering to that thread, I tried calling clReleaseEvent() before clReleaseMemObject(), but the problem could not be sovled.

    How can I avoid a memory leak problem?
    Is there anyone who has alternatives?

    Thanks,

  2. #2

    Re: Memory leak problem in nVidia driver

    How do you know it's leaking? On my system (Linux, 295.40, CUDA 4.2.1) the loop finishes and nvidia-smi shows that all memory is released after the process is finished.

  3. #3
    Junior Member
    Join Date
    Jan 2013
    Posts
    3

    Re: Memory leak problem in nVidia driver

    Tools I used are task manager and UMDH.

    That problem can be found only on Windows, not on Linux. I also checked it on Linux and I found that there was no leaking as you mentioned.

    Of course all memory is released after finishing the process.
    The problem is to increase the amount of used memory during the process is running.

  4. #4

    Re: Memory leak problem in nVidia driver

    It's not really fixing the root of your problem but I can only suggest to create the buffers upfront and re-use them through the course of your program.

  5. #5
    Junior Member
    Join Date
    Jan 2013
    Posts
    3

    Re: Memory leak problem in nVidia driver

    Thank you for your suggestion. I wish I could do so.

    As a result of various circumstances, I have some constraints to create program.
    One of them is about changing buffer size.
    OpenCL does not have API which re-size a buffer,
    so that my program releases memory objects and create them many times.

    Of course I checked up to create buffer with maximum size in advance,
    but read_image and write_image do not work well in case that there is a difference
    between size of image and one of calculation area.
    Because the sampler with CLK_NORMALIZED_COORDS_TRUE and
    image objects created by clCreateBuffer and clCreateImage2D are used in a program.

    Is there any other way to avoid this problem?

    Thanks,

Similar Threads

  1. Possible Memory leak in nVidia driver
    By Letinono in forum OpenCL
    Replies: 8
    Last Post: 01-16-2013, 08:39 AM
  2. Driver Nvidia 195.62 problem
    By ppitot in forum OpenCL
    Replies: 1
    Last Post: 02-14-2010, 05:10 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •