From bd31f59ce78b195bf437980ab28cdf6c478e1ee6 Mon Sep 17 00:00:00 2001 From: "Maxxi (none)" <git@qi0.de> Date: Wed, 29 Apr 2020 12:53:13 +0200 Subject: [PATCH] Memdebug: count memory allocs --- include/clFFT.h | 2 ++ src/fft_execute.cpp | 9 ++++++--- src/fft_internal.h | 3 +++ src/fft_setup.cpp | 24 ++++++++++++++++++++++-- 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/include/clFFT.h b/include/clFFT.h index e1f46aa..527e39f 100644 --- a/include/clFFT.h +++ b/include/clFFT.h @@ -194,6 +194,8 @@ cl_int clFFT_1DTwistPlannar(clFFT_Plan Plan, cl_command_queue queue, cl_mem arra void clFFT_DumpPlan( clFFT_Plan plan, FILE *file); +size_t getMallocSize( void ); + #ifdef __cplusplus } #endif diff --git a/src/fft_execute.cpp b/src/fft_execute.cpp index 79dbf96..7dc7d4c 100644 --- a/src/fft_execute.cpp +++ b/src/fft_execute.cpp @@ -79,9 +79,10 @@ allocateTemporaryBufferInterleaved(cl_fft_plan *plan, cl_uint batchSize) size_t tmpLength = plan->n.x * plan->n.y * plan->n.z * batchSize * 2 * sizeof(cl_float); if(plan->tempmemobj) + mallocsize -= sizeof(plan->tempmemobj); clReleaseMemObject(plan->tempmemobj); - plan->tempmemobj = clCreateBuffer(plan->context, CL_MEM_READ_WRITE, tmpLength, NULL, &err); + plan->tempmemobj = CreateBuffer(plan->context, CL_MEM_READ_WRITE, tmpLength, NULL, &err); } return err; } @@ -97,13 +98,15 @@ allocateTemporaryBufferPlannar(cl_fft_plan *plan, cl_uint batchSize) size_t tmpLength = plan->n.x * plan->n.y * plan->n.z * batchSize * sizeof(cl_float); if(plan->tempmemobj_real) + mallocsize -= sizeof(plan->tempmemobj_real); clReleaseMemObject(plan->tempmemobj_real); if(plan->tempmemobj_imag) + mallocsize -= sizeof(plan->tempmemobj_imag); clReleaseMemObject(plan->tempmemobj_imag); - plan->tempmemobj_real = clCreateBuffer(plan->context, CL_MEM_READ_WRITE, tmpLength, NULL, &err); - plan->tempmemobj_imag = clCreateBuffer(plan->context, CL_MEM_READ_WRITE, tmpLength, NULL, &terr); + plan->tempmemobj_real = CreateBuffer(plan->context, CL_MEM_READ_WRITE, tmpLength, NULL, &err); + plan->tempmemobj_imag = CreateBuffer(plan->context, CL_MEM_READ_WRITE, tmpLength, NULL, &terr); err |= terr; } return err; diff --git a/src/fft_internal.h b/src/fft_internal.h index 8178374..9775ff7 100644 --- a/src/fft_internal.h +++ b/src/fft_internal.h @@ -70,6 +70,7 @@ using namespace std; +extern size_t mallocsize; typedef enum kernel_dir_t { cl_fft_kernel_x, @@ -186,4 +187,6 @@ typedef struct void FFT1D(cl_fft_plan *plan, cl_fft_kernel_dir dir); +cl_mem CreateBuffer (cl_context context, cl_mem_flags flags, size_t size, void *host_ptr, cl_int *errcode_ret); + #endif diff --git a/src/fft_setup.cpp b/src/fft_setup.cpp index 942e852..40c147c 100644 --- a/src/fft_setup.cpp +++ b/src/fft_setup.cpp @@ -76,6 +76,8 @@ using namespace std; extern void getKernelWorkDimensions(cl_fft_plan *plan, cl_fft_kernel_info *kernelInfo, cl_int *batchSize, size_t *gWorkItems, size_t *lWorkItems); +size_t mallocsize = 0; + static void getBlockConfigAndKernelString(cl_fft_plan *plan) { @@ -162,27 +164,32 @@ destroy_plan(cl_fft_plan *Plan) } if(Plan->tempmemobj) { + mallocsize -= sizeof(Plan->tempmemobj); clReleaseMemObject(Plan->tempmemobj); Plan->tempmemobj = NULL; } if(Plan->tempmemobj_real) { + mallocsize -= sizeof(Plan->tempmemobj_real); clReleaseMemObject(Plan->tempmemobj_real); Plan->tempmemobj_real = NULL; } if(Plan->tempmemobj_imag) { + mallocsize -= sizeof(Plan->tempmemobj_imag); clReleaseMemObject(Plan->tempmemobj_imag); Plan->tempmemobj_imag = NULL; } if(Plan->cossin_LUT_d1) { + mallocsize -= sizeof(Plan->cossin_LUT_d1); clReleaseMemObject(Plan->cossin_LUT_d1); } if(Plan->cossin_LUT_d2) { + mallocsize -= sizeof(Plan->cossin_LUT_d2); clReleaseMemObject(Plan->cossin_LUT_d2); } @@ -310,7 +317,7 @@ int precomputeSinCosLUTs(cl_fft_plan * plan,cl_int *error_code) { tmpLUT_cossin1[i*2] =(float)cos(PI2 * (float) i / (float)N); tmpLUT_cossin1[i*2+1]=(float)sin(PI2 * (float) i / (float)N); } - plan->cossin_LUT_d1 = clCreateBuffer(plan->context,CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, plan->N1*2*sizeof(float),tmpLUT_cossin1, &err); + plan->cossin_LUT_d1 = CreateBuffer(plan->context,CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, plan->N1*2*sizeof(float),tmpLUT_cossin1, &err); if( err != CL_SUCCESS) { @@ -327,7 +334,7 @@ int precomputeSinCosLUTs(cl_fft_plan * plan,cl_int *error_code) { tmpLUT_cossin2[2*i] =(float)cos(PI2 * (float) i / (float) plan->N2); tmpLUT_cossin2[2*i+1]=(float)sin(PI2 * (float) i / (float) plan->N2); } - plan->cossin_LUT_d2 = clCreateBuffer(plan->context,CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, plan->N2*2*sizeof(float),tmpLUT_cossin2, &err); + plan->cossin_LUT_d2 = CreateBuffer(plan->context,CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, plan->N2*2*sizeof(float),tmpLUT_cossin2, &err); if( err != CL_SUCCESS) { if(error_code) @@ -526,3 +533,16 @@ void clFFT_DumpPlan( clFFT_Plan Plan, FILE *file) } fprintf(out, "%s\n", plan->kernel_string->c_str()); } + + +cl_mem CreateBuffer (cl_context context, cl_mem_flags flags, size_t size, void *host_ptr, cl_int *errcode_ret) +{ + cl_mem ret = clCreateBuffer(context, flags, size, host_ptr, errcode_ret); + mallocsize += size; + return ret; +} + +size_t getMallocSize( void ) +{ + return mallocsize; +} -- GitLab