'新'内存不足,分配的内存很少

时间:2015-04-25 20:17:26

标签: c++ memory valgrind

我正在研究一个大型科学代码,以便在群集上以非交互方式运行。该代码使用单例方案将大矩阵存储在存储器中,以便重复进行未来的乘法运算。最近代码一直崩溃,通常在分配某些类型的这些矩阵后不久,我们的异常处理程序返回输出如下:

  ## std :: bad_alloc在TerminateHandler中被捕获##########      

新的内存不足   峰值RSS内存= 905179136字节
  当前RSS内存= 905179136字节

     ################################################## #####

每个进程应该至少有16 GB的RAM可用,因此很难看到我们如何已经耗尽了905179136字节的内存;此外,操作代码以使用更多或更少的内存导致程序仍然崩溃,但具有更小(更大)的值,用于峰值RSS内存'报道。

我可以想到两种可能性:

  1. 内存碎片。
  2. 一个非常大的'新的'因某些原因提出请求,如果提供服务,我们将超过16 GB。
  3. 这可能与CUDA应用程序有关,并且矩阵正在CPU上构建,以便发送到GPU然后被删除。然而,GPU报告没有错误。

    不幸的是,我无法在测试中重现错误,并且在崩溃之前在valgrind或gdb内运行的速度非常慢(即挂钟时间的几天)队列系统会导致我的工作失败。我的问题是如何区分这些可能性,或者其他可能存在的可能性?特别是有一些方法可以报告所有来电的大小'?'

0 个答案:

没有答案