Почему эта строка кода утечка памяти? - PullRequest
0 голосов
/ 07 августа 2011

Я нашел строку кода, в которой происходит утечка памяти в моем проекте.Это метод DllImport:

[DllImport("OpenCL")] public static extern Error clEnqueueNDRangeKernel(OpenCLCommandQueue command_queue, OpenCLKernel kernel, Int32 work_dim, [In] IntPtr[] global_work_offset, [In] IntPtr[] global_work_size, [In] IntPtr[] local_work_size, Int32 num_events_in_wait_list, [In] OpenCLEvent[] event_wait_list, out OpenCLEvent e);

Он вызывается с помощью этого кода:

OpenCLEvent e;

OpenCLDriver.clEnqueueNDRangeKernel(CommandQueue.OpenCLCommandQueue, OpenCLKernel, globalWorkSize.Length, globalWorkOffset, globalWorkSize, localWorkSize, eventWaitList.Count, eventWaitList.OpenCLEventArray, out e);

return null;

Такие вещи, как CommandQueue.OpenCLCommandQueue и другие аргументы, являются обычными свойствами или переменными, которые не могут пропускать память, за ними нет кода.

Я не понимаю, как clEnqueueNDRangeKernel может вызвать утечку памяти?Я что-то упустил?

Ответы [ 2 ]

2 голосов
/ 07 августа 2011

похоже, что в OpenCL возникла проблема утечки памяти с clEnqueueNDRangeKernel, известной с 2009 года, исправлено 2010 ...

http://www.opentk.com/node/1541?page=3
http://forums.amd.com/devforum/messageview.cfm?catid=390&threadid=122161&highlight_key=y

0 голосов
/ 03 февраля 2019

Вы можете добавить

clFinish(CommandQueue);

после

clEnqueueNDRangeKernel
...