openCL и сбой, есть ли лучший способ найти утечки памяти? (JOCL) - PullRequest
1 голос
/ 01 февраля 2011

Некоторое время я проверял свой вызывающий код для openCL и не могу найти утечек памяти.Обратите внимание, я использую JOCL, поэтому у меня есть куча тестов JUnit.Если я запускаю какой-либо из моих тестов по отдельности или если я запускаю 4/5 любого из моих тестов, он всегда проходит, но он всегда терпит неудачу, если я запускаю все свои тесты на одном из трех моих боксов с более слабой видеокартой.Я предполагаю, что это должно быть проблемой утечки памяти.Является ли openCL просто утечкой?Существуют ли более эффективные способы обнаружения утечек памяти, чем просто отслеживание моего кода в отладчике?

Я получаю эту ошибку на своем более слабом компьютере.Я также могу получить его на своих более сильных боксах, если увеличу использование памяти в моих тестах JUnit, что ожидается, если я сделаю его достаточно высоким.Когда это происходит на моем более слабом компьютере, он случайным образом завершится неудачей при тестах памяти GPU <1 МБ, если все остальные тесты выполнялись до него.Я использую драйвер Nvidia 260.19.36. </p>

[junit] CL_MEM_OBJECT_ALLOCATION_FAILURE
[junit] org.jocl.CLException: CL_MEM_OBJECT_ALLOCATION_FAILURE

Ответы [ 2 ]

0 голосов
/ 20 апреля 2011

Код OpenCL (код ядра) не должен вызывать утечку памяти из-за отсутствия концепции динамической памяти.Эффект может быть получен только из JOCL, Java или библиотек соответствующих поставщиков для используемых устройств.Библиотеки поставщиков вряд ли являются причиной, но новая версия драйверов и библиотек была предположительной.

Некоторые классы выделяют память на устройстве OpenCL, не освобождая ее.Вы уверены, что вы также освобождаете память OpenCL в случае возникновения исключений?

0 голосов
/ 01 февраля 2011

При приближении к утечке памяти (независимо от того, какие фреймворки используются в ваших проектах), полезно рассмотреть несколько вещей.

  • Получаете ли вы исключение OutOfMemoryException?Если да, возможно, у вас нет набора переменных -Xmin JMV, сообщающего JVM, с какого объема памяти начинать.Если вы начнете с небольшого количества, а куча будет расти слишком быстро, вы можете фактически потерпеть крах JVM.Так что вы можете попробовать поиграть с этим.
  • Знаете ли вы, сколько памяти вы потребляете?Вы можете сделать так, чтобы ваше приложение сбрасывало текущее использование памяти или записывало количество раз, когда ваш gc работает.Если ваш gc работает очень высоко, либо вам нужно настроить gc, либо, возможно, у вас есть утечка.
  • Найдите профилировщик приложений (в нашем случае, мы большой магазин IBM, поэтому мы используем их профилировщики,но я уверен, что есть бесплатные).Это может помочь вам перемещаться по куче во время регулярного использования приложения, если вы подозреваете утечку.Он точно покажет, сколько кучи вы используете, и какой объект стремится «обойти», а не очистить.

Я знаю, что это довольно обобщенно.Но они представляют собой контрольный список, который мы сначала проходим, когда подозреваем утечку памяти.

...