首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >openCL和崩溃,有没有更好的方法来发现内存泄漏?(JOCL)

openCL和崩溃,有没有更好的方法来发现内存泄漏?(JOCL)
EN

Stack Overflow用户
提问于 2011-02-02 00:27:48
回答 2查看 1K关注 0票数 1

我审计我的openCL调用代码已经有一段时间了,我没有发现任何内存泄漏。注意,我使用的是JOCL,所以我有一堆JUnit测试。如果我单独运行我的任何测试,或者如果我运行任何测试的4/5,它总是通过,但如果我在我的三个显卡较弱的计算机中的一个上运行所有测试,它总是失败。我认为这一定是一个内存泄漏问题。openCL就是众所周知的漏洞吗?除了在调试器中跟踪我的代码之外,还有更好的方法来查找内存泄漏吗?

我在较弱的机器上得到这个错误。如果我在JUnit测试中增加内存使用量,我也可以在更强大的机器上获得它,如果我将其设置得足够高,这是预期的。当这种情况发生在我较弱的机器上时,如果所有其他测试都在它之前运行,那么它将随机地在小于1MB的GPU内存测试中失败。我使用的是Nvidia的260.19.36驱动程序。

代码语言:javascript
运行
复制
[junit] CL_MEM_OBJECT_ALLOCATION_FAILURE
[junit] org.jocl.CLException: CL_MEM_OBJECT_ALLOCATION_FAILURE
EN

回答 2

Stack Overflow用户

发布于 2011-02-02 03:21:55

在处理内存泄漏问题时(不管您的项目中使用了什么框架),最好还是看一些东西。

  • 你有OutOfMemoryException吗?如果是这样的话,您可能没有一个JVM变量集来告诉-Xmin从多少内存开始。如果开始时堆太少,而堆增长太快,那么实际上可能会使JVM崩溃。所以你可以试着使用它,

  • ,你知道你消耗了多少内存吗?您可以让您的应用程序转储当前的内存使用情况,或者记录gc运行的次数。如果您的gc使用率非常高,要么您需要调优gc,要么您可能有漏洞。
  • 找了一个应用程序分析器(在我们的例子中,我们是一个很大的应用程序分析器商店,所以我们使用他们的分析器,但我相信有免费的)。这可以帮助您在常规应用程序使用期间导航堆,如果您怀疑存在泄漏。它将准确地显示您使用了多少堆,以及哪些对象倾向于“摆弄”而不被清理。

我知道这些是通用的。但当我们怀疑内存泄漏时,它们是我们首先检查的检查表。

票数 0
EN

Stack Overflow用户

发布于 2011-04-21 02:41:43

由于缺少动态内存的概念,OpenCL代码(内核代码)不会给您带来任何内存泄漏。这种效果只能来自JOCL、Java或所用设备的底层供应商库。供应商的库不太可能是原因,但一个新版本的驱动程序和库是一个猜测。

某些类在OpenCL设备上分配内存,而不释放它。您确定在抛出异常的情况下也释放OpenCL内存吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4865158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档