using MPI: C++ std::bad_alloc

using MPI: C++ std::bad_alloc

本文关键字:alloc bad C++ MPI using std      更新时间:2023-10-16

我正在使用超级计算机,使用MPI。但问题是……c++有一个程序,它打开文件的数据,并读取到vector<long>v1

    //open file
    ...
   vector<long>v1;
   while (!f1.eof()){
      //input data into 
      v1.push_back(s1);
   }

好吧,当数据文件只包含5000万个"长数字"时,它工作得很好。但是,当数据文件包含超过7500万个"长数字"时,它就会异常失败:

   std::bad_alloc();

如何改善这一点?

此外,使用多个处理器(超过100个)

不要使用矢量。vector要求它的所有元素都能容纳在连续的内存位置中,它不适合非常大的集合。使用正确的数据结构取决于您的访问模式,list将工作,但它会浪费大量内存(每个long存储两个指针)。也许您想要将long s分成100个左右的组,并创建这些组的链表。同样,正确的答案取决于你实际的外部问题。

虽然我对超级计算机没有太多的经验,但我可以告诉您,std::bad_alloc应该只在系统资源耗尽时发生。

在这种情况下,您可能已经达到了计算机对堆施加的限制(从操作系统的角度来看,或者从物理的角度来看{最后是一样的}),因为您的向量将在堆上动态分配元素。

您可以尝试使用top或类似的命令来监视您的资源使用情况,并根据您实际使用的情况检查您的系统设置。

另一个注意事项-如果你知道它将使用多少元素,你应该创建你的vector并调用reserve() -这将大大提高你的效率。