我编写了一个 c++ openmp 代码,它在并行区域中有一个动态分配的内存私有变量,该区域在 while 循环中。动态分配的内存在每个循环的并行区域结束时被释放。在每次分配和释放之后,我正在通过 linux 机器上的 /proc/self/stat 文件监视内存。我发现驻留集大小的内存更少。为什么会这样?代码类似于 -
float *dynm;
while(condition)
{
pragma omp parallel shared(list of variables) private(dynm)
{
read_values_from_/proc/self/stat_print_rss;
dynm = new float[size];
read_values_from_/proc/self/stat_print_rss;
pragma omp for schedule(static, chunk) nowait
for(counter)
{
do_operation;
}
delete []dynm;
read_values_from_/proc/self/stat_print_rss;
}
}