о: «Проверьте это:. Devgurus.amd.com/thread/136242 Valgrind не может иметь дело с распределителями пользовательской памяти по дизайну, который OpenCL, скорее всего, с использованием»
цитатой из ссылки Дано: « поведение не для свободных пулов на выходе можно было бы назвать ошибкой библиотеки ».
Если вы хотите создать пул памяти и выделить из него, то вперед; но вы все равно должны должным образом освободить его. Сложность пула памяти в целом не менее сложна, чем сложность регулярной ссылки на память и заслуживает хотя бы того же внимания, если не больше, а затем регулярных ссылок. Кроме того, 8-байтовая структура вряд ли будет пулом памяти.
У Тима Ребенка будет точка о том, как вы используете clGetPlatformIds, если он был предназначен для возврата выделенной памяти. Однако, прочитав http://www.khronos.org/registry/cl/sdk/1.0/docs/man/xhtml/clGetPlatformIDs.html, я недостаточно убежден, что это должно быть так.
Возможно, утечка может быть серьезной, может накапливаться или не накапливаться путем последовательных вызовов, но вам может быть предоставлена возможность сообщить об ошибке в nvidia в надежде, что они исправят ее или найдут другой opencl реализации для развития. Тем не менее, могут быть причины, по которым библиотека opencl создает ссылки на данные, которые с точки зрения valgrind не используются.
К сожалению, это все еще оставляет нас с утечкой памяти, вызванной внешним фактором, который мы не можем контролировать, и это все равно оставляет нас с избыточным выходом valgrind.
Скажите, что вы достаточно уверены, что не несёте ответственность за эту утечку (скажем, мы знаем, что инженер nvidia выделил случайное значение в OpenCL.so, которое он не освободил, чтобы злить вас). Valgrind имеет флаг -gen-suppressions = yes, с помощью которого вы можете подавлять предупреждения о конкретных предупреждениях, которые вы можете вернуть к valgrind, используя -suppressions = $ filename. Прочтите страницу valgrind для получения более подробной информации о том, как она работает.
Будьте очень осторожны при использовании подавлений. Очевидно, что подавление ошибок не устраняет их, и либеральное использование механизма приведет к ситуациям, когда вы подавляете ошибки, сделанные вашим кодом, а не nvidia или valgrind. Не подавляйте предупреждения, о которых вы не совсем уверены в том, откуда они пришли, или регулярно подтверждаете свои подавления.
Проверьте это: http://devgurus.amd.com/thread/136242. valgrind не может обрабатывать специализированные распределители памяти по дизайну, которые, вероятно, использует OpenCL. – Thomas
Зачем потеть более 8 байт? есть ли более значительная утечка? –
Вы не говорите, как вы используете функцию clGetPlatformId(). Чтобы подсчитать количество платформ или получить идентификатор платформы? Если вы получаете идентификатор платформы, вы должны ожидать выделения памяти. Итак, зачем потеть более 8 байт? Есть ли более значительная утечка? –