我正在尝试优化C程序picosat,这是一个SAT求解器。我的上一个程序运行了24小时,因此优化可能会让我安全。
注意:picosat只是单线程!多线程SAT解决是一个悬而未决的问题。
我的计划是尝试使用多个C编译器编译picosat,以查看哪个编译器生成最快的代码。
但是,我在编译时失败了
有关如何优化性能的任何提示?到目前为止,我只应用了-O3
,仅仅为了完整性,-O4
没有改善性能。
如果重要,这是我的CPU:
processor : 23
vendor_id : GenuineIntel
cpu family : 6
model : 44
model name : Intel(R) Xeon(R) CPU X5650 @ 2.67GHz
stepping : 2
microcode : 0x10
cpu MHz : 1596.000
cache size : 12288 KB
physical id : 1
siblings : 12
core id : 10
cpu cores : 6
apicid : 53
initial apicid : 53
fpu : yes
fpu_exception : yes
cpuid level : 11
wp : yes
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid dca sse4_1 sse4_2 popcnt aes lahf_lm arat epb dtherm tpr_shadow vnmi flexpriority ept vpid
bogomips : 5333.19
clflush size : 64
cache_alignment : 64
address sizes : 40 bits physical, 48 bits virtual
power management:
答案 0 :(得分:1)
正如一些评论指出的那样,该代码对于编译进行优化并不是特别容易。如果您希望进行任何重大改进,则需要开始更改代码。减少力量将是一个容易开始的地方,可能会减少几个小时的计算。
答案 1 :(得分:1)
早在2012年,我使用 Microsoft Visual Studio 2010 Express 在 Windows 下编译了Picosat 936
。
这并不容易。特别是,如果你想编译64位地址空间,内存对齐和地址算法是棘手的。 Linux 下的编译应该更容易。
你可以看看Plingeling,这是一个在同一所大学开发的多线程SAT求解器。
在许多情况下,Plingeling 比(老年人) Picosat 更快。
其他快速SAT解算器为Riss3g,Cryptominisat或Z3。
SAT Competition 2013提供了对SAT解决艺术当前状态的一个很好的概述。
如果您的SAT解决运行时间过长,则可能值得改进您的问题编码。成功的SAT编码技术在this paper中进行了审核。