Page 205 - 《软件学报》2026年第4期
P. 205

1646                                                       软件学报  2026  年第  37  卷第  4  期


                 置  [23,30,31,40] . 与之前的多样性方法类似, 并行  FO  技术也会通过在不同线程上沿不同的求解方向搜索, 据此产生具
                 有互补性的配置.

                                               表 7 并行   FO  冷重启的加速比分析

                                                                                             平均加速比
                    kissat-MAB+FO(p)版本  t  #SAT  PAR2 (SAT)  #UNS  PAR2 (UNS)  #ALL  PAR2 (ALL)
                                                                                           SAT  UNS  ALL
                                        1  151     2 510   121     2 558   272     3 670   1.0  1.0  1.0
                                        2  161     1 986   123     2 440   284     3 376   4.2  1.13  2.8
                                        4  168     1 477   123     2 404   291     3 120   12.5  1.16  7.5
                     kissat-MAB+FO(p)   8  176     1 190   125     2 317   301     2 951   10.0  1.18  6.1
                                       16  177     1 024   124     2 320   301     2 872   15.0  1.22  8.9
                                       32  182     766     125     2 209   307     2 707   26.8  1.32  15.5
                                       64  183     667     125     2 231   308     2 668   27.5  1.35  16.0
                                        1  151     2 510   121     2 558   272     3 670   1.0  1.0  1.0
                                        2  162     1 958   126     2 159   288     3 259   3.5  1.3  2.5
                                        4  167     1 618   127     1 984   294     3 032   7.5  1.9  5.0
                  kissat-MAB+FO(p)+子句共享
                                        8  171     1 329   129     1 723   300     2 797   9.4  2.9  6.5
                        (LBD  ⩽ 2)
                                       16  178     924     133     1 436   311     2 498   17.0  4.6  11.5
                                       32  180     770     131     1 493   311     2 445   22.1  6.6  15.4
                                       64  184     583     133     1 354   317     2 304   29.0  9.4  20.5
                                        1  151     2 510   121     2 558   272     3 670   1.0  1.0  1.0
                                        2  163     1 859   128     1 987   291     3 148   2.6  1.6  2.2
                                        4  167     1 603   130     1 785   297     2 951   5.8  2.2  4.2
                  kissat-MAB+FO(p)+子句共享
                                        8  173     1 197   131     1 556   304     2 672   10.2  3.4  7.2
                        (LBD  ⩽ 3)
                                       16  178     911     134     1 316   312     2 447   20.7  5.2  13.9
                                       32  177     948     135     1 169   312     2 410   20.0  8.0  14.7
                                       64  182     662     140     891     322     2 171   35.5  11.0  24.8

                    (1) 并行  FO  多样性产生方法是一种轻量级, 易于实现, 且可以支持所有               CDCL  算法的策略. 相比之下, 基于参
                 数的多样性策略需要人工选择不同的互补参数, 且不同求解器的参数种类和数量都不同.
                    (2) 并行  FO  多样性策略的产生不会影响求解器的综合性能. 根据前人的观点, 随机扰乱测试实例会小幅扰动
                 求解器的性能, 但不会影响求解器的排名             [45] . 相比之下, 基于参数的方法, 有可能会使得部分求解器的性能变弱,
                 不利于求解.
                    (3) 并行  FO  有良好的拓展性和动态适应性. 基于该方法可以很快地将一个串行                    CDCL  求解器拓展到任意核
                 心数目的并行求解器上. 当使用的核心数目场景发生变化时, 无需修改代码. 且基于本文方法的求解器, 加速比在
                 到达  64  核心时, 仍然在持续增高, 有进一步增长的潜力. 相比之下, 面对不同线程数, 之前的方法需要人工选择参
                 数并调参, 甚至会面临参数数量不足以分配给所有线程的情形.
                  4.2   并行  FO  的共享子句选择
                    目前, 基于多样性的并行        SAT  求解器通常采用子句共享技术在线程之间交互学习子句, 用于剪枝高维度搜索
                 空间, 以减少不同的线程重复搜索同一空间的概率. 此外, 在多个线程之间“共享学习到的子句”的思想类似于当前
                 热重启之间“保留高质量的学习子句”的想法. 即清空所有子句的                    FC  技术的冷重启技术类似于不采用子句共享技
                 术; 保留质量在    LBD  ⩽ ρ 学习子句的  FC  冷重启技术类似于线程间共享一部分            LBD  ⩽ ρ 的学习子句.
                    这引起了我们对研究“FC        中学习子句的阈值规律是否也适用于并行子句共享”的兴趣.
                    根据表   3  的结果, LBD  ⩽ 3 的学习子句具有最高的综合性能收益. 本文在             PaInleSS  框架  [30] 的帮助下, 分别在
                 kissat-MAB+FO(p) 的基础上, 实现了线程间简单的子句共享技术, 分别仅简单共享                 LBD  ⩽ 2 和  LBD  ⩽ 3 学习子句
                 的子句.
                    子句共享技术的实现: 每一个线程均设置一个读入共享内存和一个输出共享内存. 每个线程会收集                                 LBD  ⩽ ρ
                 的学习子句, 存储于该线程的输出共享内存. 每隔              0.75 s, 每个线程的输出共享内存会将收集到的学习子句分发给
   200   201   202   203   204   205   206   207   208   209   210