【发布时间】:2016-03-02 14:10:38
【问题描述】:
我正在为一项任务对传统的生活游戏进行一些算法更改。
基本上,我目前有两种选择来实现多线程搜索算法,该算法提高了以前算法的效率。
- 要么使用两个线程搜索链表,然后将数据中继到另外两个线程进行处理(应用程序在四核上运行)
- 拥有一个庞大的预分配数组,该数组大部分为空,仅包含指向预定义结构的指针,在这种情况下,搜索可以更快地完成,并且在同步线程时不会出现问题。
更快的搜索是否会超过内存需求并减少计算时间?
需要说明的是,数组将大部分保持为空,但分配给它的总内存会远远大于链表,更不用说最远的非空数组元素的索引也可以存储,以便防止程序搜索整个数组。
我还应该提到,该数组存储指向活动单元格坐标的指针,因此仅在最坏情况下保持如此之大。我还计划忽略任何 NULL 值以跳过已删除的数组元素。
【问题讨论】:
-
很难确定,但是数组会受到非局部性的影响,即不能有效地使用缓存。但是如何从链表中找到邻居呢?
-
该程序使用一个 nxmx2 数组,第二层存储每个元素的邻居。由于每个活细胞都被引用,您可以检查活细胞的第二层及其邻居坐标以确定谁生死。该算法目前比传统算法快 2 倍
-
快速算法使用位图(一个 64 位整数表示 64 个单元格)并使用硬编码的二进制逻辑实现邻居计数。 (不记得是谁说的:如有疑问,请使用蛮力)。
标签: c arrays multithreading algorithm