gpt4 book ai didi

c++ - 遍历 2D 矩阵的可并行算法,同时了解 col/row-wise 邻域

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:27:55 25 4
gpt4 key购买 nike

我有一个相当大的N*N整数矩阵Matrix2D(假设内存充足),

1,在每个行/列中,我需要记录元素的col/row索引,如果它的值不同于它是右/下邻居。

2,我想找到一个可并行化的最优算法,最好是通过 OMP。

所以,最后我会有一些数据结构,比如,

std::vector<std::vector<int>>   RowWiseDiscontinuity(N);// N= #of rows
std::vector<std::vector<int>> ColWiseDiscontinuity(N);// N= #of cols

其中内部 std::vector<int>记录行/列索引。

我把我的串行版本放在这里但是发现很难并行化 OMP...有人可以提供一些想法如何使用 omp 实现遍历这个 2D 矩阵吗?

代码片段,

std::vector<std::vector<int>>   RowWiseDiscontinuity(N);// N= #of rows
std::vector<std::vector<int>> ColWiseDiscontinuity(N);// N= #of cols
std::vector<int> TempX1;
std::vector<int> TempX2;
for (int y=0; y<N; ++y)
{
TempX1.clear();
for (int x =0; x<N; ++x)
{
int value = Matrix2D(x,y);
TempX1.push_back(value);
}

auto iter1 = TempX1.begin();
auto iter2 = TempX2.begin();

if (y>0)
for (int x =0; x<N; ++x)
{
if (*iter1 !=*(iter1+1))
{
RowWiseDiscontinuity[y].push_back(x); //Critical for OMP
}
++iter1;
++iter2;
if (*iter1 != *iter2)
{
ColWiseDiscontinuity[x].push_back(y); //Critical for OMP
}
}

TempX2.swap(TempX1); // proceed to next row, remember previous

}

最佳答案

我会创建另一个数组,它包含列和行方面的最近邻居。显然,这必须作为第一步完成。我建议创建一个包含所需索引的二维数组对 (pair)。我会做一个成对的 vector ,而不是两个 vector 。对是可并行化的并且很容易排序。

vector<vector<pair<int, int>>> elements(N);

关于c++ - 遍历 2D 矩阵的可并行算法,同时了解 col/row-wise 邻域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47348693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com