小编Gio*_*San的帖子

如何提高多线程效率?

简要回顾:我有一个 C++ 多线程数独求解器,我想提高效率,我需要你的帮助。

我正在 C++ 中的多线程中实现一个蛮力数独求解器。主要结构是一棵树,所有逻辑是这样的:我开始读取输入中的初始矩阵,这将是我的根节点,然后我找到第一个空单元格,我找到所有可能适合该位置的数字,然后对于每种可能性,我都会创建父节点的一个子节点,以便每个节点对于每个可能的数字都有一个子节点。树以这种方式继续增长,直到遇到一个解决方案,即一个节点没有更多的空闲单元(所以它是满的),并且节点网格满足数独的所有规则。

我尝试在多线程中像这样实现这个算法:我按照上面的逻辑顺序执行完全相同的逻辑,但每次都执行一个步骤,存储我遇到的所有孩子直到那一刻(每个孩子都是一条路径,所以是一棵树)在一个向量中。如果孩子少于用户选择的线程,那么我会按顺序解决它们,然后再做一步(孩子会长大)。当我的孩子多于线程时,我会为每个线程拆分孩子,然后用他的部分(即一棵树)开始每个线程。

现在,考虑到“蛮力”方法和“仅标准库”要求是强制性的,所以我不能以不同的方式做,但我当然可以改变如何实现这一点的逻辑。

问题是:我怎样才能提高这个程序的效率?欢迎所有仅使用 std lib 的建议。

#define UNASSIGNED 0
#define N 9
#define ERROR_PAIR std::make_pair(-1, -1)

using namespace std;

atomic<bool> solutionFound{false};

//Each node has a sudokuMatrix and some sub-trees
struct Node {
    vector<vector<int>> grid;
    vector<Node *> child;
};


Node *newNode(const vector<vector<int>> &newGrid) {
    Node *temp = new Node;
    temp->grid = newGrid;
    return temp;
}

//Check if a number can be inserted in a given position
bool canInsert(const int &val, const int &row_, const int …
Run Code Online (Sandbox Code Playgroud)

c++ performance multithreading

2
推荐指数
1
解决办法
106
查看次数

标签 统计

c++ ×1

multithreading ×1

performance ×1