【发布时间】:2020-12-09 23:31:37
【问题描述】:
元胞自动机的以下并行计算是否需要互斥锁?
我认为在使用并行线程时写入共享资源时总是建议使用互斥锁。
互斥锁大大减慢了程序的速度,但是否需要它来确保二维数组 (futureOcean) 中的数据保持安全/一致?
当互斥锁在写操作期间锁定futureOcean时:
2 threads: 163.352990 seconds
5 threads: 515.739237 seconds
10threads: 1021.035517 seconds
不使用互斥锁:
2 threads: 65.817534 seconds
10threads: 93.822217 seconds
我正在实现一个元胞自动机模型,特别是鱼、鲨鱼和海洋模拟。
我有一个名为 ocean 的 1000x600 二维数组,显然代表海洋。
还有一个名为futureOcean 的1000x600 二维数组,它将存储currentGeneration + 1 的每个单元格的状态。
最初ocean 填充有:
- 50% 水,即 0 值。
- 25% 的鱼,即正整数值
- 25% 鲨鱼,即负整数值
处理单代涉及处理ocean中每个单元格的规则。
每次计算当前单元格的新值时,我都会将其未来值存储在第二个二维数组 (futureOcean) 中,在 row/column 的位置,原始值在 ocean 内。所以futureOcean中的每个单元格每一代只会更新一次。
我这样做了 20000 次(几代人)。
【问题讨论】:
标签: c multithreading parallel-processing cellular-automata