多线程搜索的解决方案空间很大
Multi-threading search of a large solution space
我必须在大的解决方案空间(枚举特定顺序的所有拉丁方)中搜索有效的解决方案。我正在尝试多线程(boost::thread)。我将解空间划分为子空间,并研究单个线程中的特定子空间。这样做效果很好,因为线程之间没有依赖关系。
但现在我想将所有有效的解决方案保存在一个列表中。最好是使用单个列表(共享数据)并用互斥对象包围它,还是应该为每个线程创建列表(本地数据)并在线程完成后加入列表?
对于更高的订单,可能有数百万个有效的解决方案。因此,该过程要么涉及大量互斥锁/解锁,要么涉及每个线程占用大量内存。
谢谢,Daniel Dekkers
根据您的解释,您希望在算法结束时连接本地列表。如果每个线程都要找到许多解决方案,那么在互斥体中使用会大大降低计算速度。根据我对你的理解,现在你应该认为内存相当便宜,但如果不知道解决方案的大小,很难确定。
还可以有内存空间最小的列表合并算法(即通过一次复制少量数据),这可以解决小内存占用问题。
话虽如此,您的问题也有混合解决方案。例如,您可以创建一个共享容器并对其进行分区,以便为每个线程分配分区,无论是交错的还是块中的。这将允许您删除每次访问互斥,但需要一个复杂的容器增长机制(因为似乎不可能事先知道有多少解决方案)。
相关文章:
- 运行同一解决方案的另一个项目的项目
- Project Euler问题4的错误解决方案
- 计算每个节点的树高,帮助我解释这个代码解决方案
- C++:Application.cpp中抛出了未解析的外部符号(解决方案在问题的末尾,供未来的读者参考)
- visual c++,如何获取解决方案目录中的代码
- 有没有办法在远程设备上打开和编辑visual Studio 2017解决方案
- C++Matching Brackets 2解决方案不起作用
- 在 ubuntu3 上C++ goto 定义有什么解决方案吗16.04?
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 我的固定时间步长与增量时间和插值的解决方案是错误的吗?
- 无法在问题解决方案中执行输出逻辑
- 最大的回文产品 - 程序未运行,编写解决方案但无法理解问题
- 从预序遍历构造 bst 的 c++ 和 python 解决方案之间的区别
- 在一个解决方案中针对第三方静态库 (Creo) 的不同版本(版本)进行构建
- 是否有可能实现O(N)时间和O(1)空间解决方案,以实现C++中的字符串循环移位
- 是否有一个很好的方法可以在C 11中打印出像JSON一样的Trie结构(仅迭代解决方案)的扁平命名空间
- 命名空间在C 中碰撞,坚持寻找解决方案
- 解决方案与命名空间/ADL 事物的标准一致性
- 优化DP解决方案的空间复杂性
- 多线程搜索的解决方案空间很大