c++ - 在并行 C++ 中建立内存

标签 c++ memory parallel-processing

我有一个问题,我想针对非并行系统测试并行系统。

在系统 1 中,我这样建立内存:

std::vector<double>* p_val_vec_main = new std::vector<double>(*mpStages);
std::vector<double>* p_val_vec_slave = new std::vector<double>(*mpStages-1);
std::vector<std::vector<double> >* p_mat_cache =
     new std::vector<std::vector<double> >(3, std::vector<double>());

这些 vector 被传递,并在重复的 RAII 系统中使用,因此产生了指针和新语法。

在系统 2(并行系统)中,我试图建立并行的 3 个 vector ,因为没有 - 假定 - 重叠:

#pragma omp parallel
{
    std::vector<double>* p_val_vec_main = new std::vector<double>(*mpStages);
    std::vector<double>* p_val_vec_slave = new std::vector<double>(*mpStages-1);
    std::vector<std::vector<double> >* p_mat_cache =
    new std::vector<std::vector<double> >(3, std::vector<double>());
}

然而,我第一次在 pragma block 外引用“p_val_vec_main”,但在 pragma block 所在的方法内,在系统 2 中的有效元素上,我收到错误代码:

error: 'p_val_vec_main' was not declared in this scope

想知道是否有人知道为什么会这样?关于这可能是什么,我唯一的想法可能是本地/全局冲突。

最佳答案

您遇到的问题是您仅在系统 2 上使用的 #pragma omp parallel block 创建了一个隐藏指针的附加作用域级别(在左大括号和右大括号之间)变量 p_val_vec_main (和其他变量)来自它前后的任何语句。这是使用 omp parallel 的必要部分,因为 OpenMP 在内部将 parallel block 内的语句转换为函数,因此在该 block 内声明的任何变量都成为函数局部变量。

如果您想在 omp parallel block 内初始化 vector 但在 block 外使用它们,则需要在更高级别的范围内声明指针,如下所示:

std::vector<double>* p_val_vec_main;
std::vector<double>* p_val_vec_slave;
std::vector<std::vector<double> >* p_mat_cache;
#pragma omp parallel
{
    p_val_vec_main = new std::vector<double>(*mpStages);
    p_val_vec_slave = new std::vector<double>(*mpStages-1);
    p_mat_cache =
    new std::vector<std::vector<double> >(3, std::vector<double>());
}
//p_val_vec_main can be used here

关于c++ - 在并行 C++ 中建立内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40772353/

相关文章:

c++ - MSVC C/C++ 编译器未定义行为警告

vba - 当我使用按钮运行宏时,由于内存不足,excel 无法完成

c - 在 C : Is it faster to access a char* = malloc() used like a 2D array than an array[][]?

linux - 找出一个进程在 linux 中使用了多少额外的物理内存

javascript - 无法在函数内调用非内置函数

python - 并行化一系列生成器

c++ - 函数调用给我错误表达式必须有类类型

c++ - 什么时候为类成员释放使用 alloca 分配的内存?

c++ - 使用 QLockFile::setStaleLockTime() 但锁不会过时?

r - base R 中的行操作问题