Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java openCL和崩溃,有没有更好的方法来发现内存泄漏?(约克)_Java_Memory Leaks_Find_Opencl - Fatal编程技术网

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

Java openCL和崩溃,有没有更好的方法来发现内存泄漏?(约克),java,memory-leaks,find,opencl,Java,Memory Leaks,Find,Opencl,我已经审核了我的openCL调用代码一段时间了,我找不到任何内存泄漏。注意,我使用的是JOCL,所以我有一系列JUnit测试。如果我单独运行我的任何测试,或者如果我运行我的任何测试的4/5,它总是通过,但是如果我在三个图形卡较弱的盒子中的一个上运行所有测试,它总是失败。我想这一定是内存泄漏问题。openCL刚刚被认为存在漏洞吗?有没有比在调试器中跟踪代码更好的方法来查找内存泄漏 我在我的盒子上发现了这个错误。如果我在JUnit测试中增加内存使用量,我也可以在更强的测试框中得到它,如果我把它设置得

我已经审核了我的openCL调用代码一段时间了,我找不到任何内存泄漏。注意,我使用的是JOCL,所以我有一系列JUnit测试。如果我单独运行我的任何测试,或者如果我运行我的任何测试的4/5,它总是通过,但是如果我在三个图形卡较弱的盒子中的一个上运行所有测试,它总是失败。我想这一定是内存泄漏问题。openCL刚刚被认为存在漏洞吗?有没有比在调试器中跟踪代码更好的方法来查找内存泄漏

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

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

当遇到内存泄漏时(无论项目中使用了什么框架),最好看几件事

  • 您是否遇到了OutOfMemory异常?如果是,可能您没有一个-Xmin JMV变量集来告诉JVM从多少内存开始。如果一开始就太少,堆增长太快,实际上可能会使JVM崩溃。所以你可以试着玩这个
  • 你知道你消耗了多少内存吗?您可以让应用程序转储当前内存使用情况或记录gc运行的次数。如果您的gc运行得非常高,那么您需要调整gc,或者可能存在泄漏
  • 找到一个应用程序探查器(在我们的例子中,我们是一个沉重的IBM商店,所以我们使用他们的探查器,但我肯定有免费的)。如果怀疑存在泄漏,这可以帮助您在常规应用程序使用期间导航堆。它将精确地显示您正在使用多少堆,以及什么对象倾向于“交给”而不被清理
我知道这些都是通用的。但是,当我们怀疑内存泄漏时,它们是我们首先检查的清单。

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


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

我觉得因为我使用的是GPU,所以我不知道如何应用这些可靠的技术。老实说,我希望我能在GPU上使用Valgrind,但我相信还没有这个功能……你确定你正确地释放了所有CL对象吗?你可以看一看,它在低级别api的基础上提供了一个高级别api,大大简化了使用,降低了泄漏风险。我相信我正在正确释放我的所有CL对象,但是代码中一定有什么地方出了问题。如果您确信您正在正确地发布所有内容,那么剩下的唯一因素就是CL实现中的错误或jocl.org中的错误。我们正在测试所有CL实现,从未遇到过这种情况(但我们使用jocl.jogamp.org)?你说撞车是什么意思?资源不足异常还是SEGFULTS?