并行推回矢量的矢量
Parallel push back to a vector of vector
本文关键字:并行 更新时间:2023-10-16
我有一个向量。我以并行方式构造此向量,向量中的每个索引由单个线程处理。类似于这个:
vector<vector<int> > global_vec(10, vector<int>({}));
#pragma omp parallel for schedule(dynamic)
for(int i = 0; i < 10; i++)
{
for(int j = 0; j < i * 5; j++)
{
global_vec[i].push_back(i);
}
}
我知道如果我事先知道每个向量的大小,我可以在开始时分配所需的大小,然后就不会有问题。但这不能由我完成,我需要动态地反击。这个线程安全吗?
提前谢谢。
是的,这是线程安全的,因为内部向量仅由一个线程修改。您可以省略导数schedule(dynamic)
,但仍被保存。
如果您使用 std::iota
摆脱内部循环,这会变得更加清晰。
vector<vector<int> > global_vec(10, vector<int>({}));
#pragma omp parallel for schedule(dynamic)
for(int i = 0; i < 10; i++)
{
global_vec[i].resize(i * 5) ;
std::iota(global_vec[i].begin(), global_vec[i].end(), 0);
}
附言。如果外部向量具有固定大小,请考虑改用std::array<vector<int>, 10>
。
相关文章:
- C++17中的并行执行策略
- 并行用于C++17中数组索引范围内的循环
- 如何在Elixir中调用递归函数并行
- OpenMP:并行更新数组总是需要减少数组吗
- 如何使用OpenMP并行这两个循环
- 如何使用OpenMP并行化此矩阵时间矢量运算
- 如何使用OpenMP使这个循环并行
- 遍历并行数组以确定C++中的最大数字
- 为什么 openmp 的并行不适用于矢量化色彩空间转换?
- 如何在 Mac 上使用 c++17 并行标准库算法?
- 并行标准::复制复杂性
- 如何使用 MPI 的远程内存访问 (RMA) 功能并行化数据聚合?
- 在C++中使用并行化的预期速度是多少(不是 OpenMp,而是 <thread>)
- 如何在 C++17 STL 并行算法中处理调度?
- OpenMP 与有序和关键指令并行
- OpenMP for 循环并行性问题
- 两个连续的 OpenMP 并行区域会相互减慢速度
- C++17:如何在并行 STL 中获取工作项的索引
- 如何使用 OpenMP 并行化最近邻搜索
- 如何使用 winsock2 实现与 c++ 的多个并行连接?