我一直在审核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
答案 0 :(得分:0)
当接近内存泄漏时(无论项目中使用了哪些框架),最好先查看一些内容。
我知道这些是通用的。但是当我们怀疑内存泄漏时,它们是我们首先检查的清单。
答案 1 :(得分:0)
由于缺少动态内存的概念,OpenCL代码(内核代码)不应该为您带来任何内存泄漏。效果只能来自JOCL,Java或所用设备的底层供应商库。供应商库不太可能是原因,但新版本的驱动程序和库是猜测。
某些类在OpenCL设备上分配内存而不释放它。您确定,在抛出异常的情况下,您还可以释放OpenCL内存吗?