1
+ import subprocess
2
+ import time
3
+ import os
4
+ import seaborn as sns
5
+ import matplotlib .pyplot as plt
6
+ import numpy as np
7
+
8
+
9
+
10
+ TIMEOUT = 60 #seconds
11
+
12
+
13
+
14
+
15
+ examples = """division-by-zero-3-35-beaten.btor2 division-by-zero-3-35.c
16
+ cflobvdd-beaten.btor2 cflobvdd-multi-input-6.c return-from-loop-1-35-beaten.btor2
17
+ cflobvdd-bit-inversion-2-beaten.btor2 cflobvdd-rotorized.btor2 return-from-loop-1-35-rotorized.btor2
18
+ cflobvdd-bit-inversion-2-rotorized.btor2 cflobvdd.c return-from-loop-1-35.c
19
+ cflobvdd-bit-inversion-2.c cflobvdd-multi-input-6-rotorized.btor2 simple-assignment-1-35-beaten.btor2
20
+ cflobvdd-bit-inversion-3-beaten.btor2 division-by-zero-3-35-rotorized.btor2 simple-assignment-1-35-rotorized.btor2
21
+ cflobvdd-bit-inversion-3-rotorized.btor2 recursive-fibonacci-1-10.c simple-assignment-1-35.c
22
+ cflobvdd-bit-inversion-3.c invalid-memory-access-fail-2-35-beaten.btor2 simple-decreasing-loop-1-35-beaten.btor2
23
+ cflobvdd-bit-inversion-4-beaten.btor2 invalid-memory-access-fail-2-35-rotorized.btor2 simple-decreasing-loop-1-35-rotorized.btor2
24
+ cflobvdd-bit-inversion-4-rotorized.btor2 invalid-memory-access-fail-2-35.c simple-decreasing-loop-1-35.c
25
+ cflobvdd-bit-inversion-4.c memory-access-fail-1-35-beaten.btor2 simple-if-else-1-35-beaten.btor2
26
+ cflobvdd-bit-inversion-5-beaten.btor2 memory-access-fail-1-35-rotorized.btor2 simple-if-else-1-35-rotorized.btor2
27
+ cflobvdd-bit-inversion-5-rotorized.btor2 memory-access-fail-1-35.c simple-if-else-1-35.c
28
+ cflobvdd-bit-inversion-5.c nested-if-else-1-35-beaten.btor2 simple-if-else-reverse-1-35-beaten.btor2
29
+ cflobvdd-bit-inversion-6-beaten.btor2 nested-if-else-1-35-rotorized.btor2 simple-if-else-reverse-1-35-rotorized.btor2
30
+ cflobvdd-bit-inversion-6-rotorized.btor2 nested-if-else-1-35.c simple-if-else-reverse-1-35.c
31
+ cflobvdd-bit-inversion-6.c nested-if-else-reverse-1-35-beaten.btor2 simple-if-without-else-1-35-beaten.btor2
32
+ cflobvdd-multi-input-2-beaten.btor2 nested-if-else-reverse-1-35-rotorized.btor2 simple-if-without-else-1-35-rotorized.btor2
33
+ cflobvdd-multi-input-2-rotorized.btor2 nested-if-else-reverse-1-35.c simple-if-without-else-1-35.c
34
+ cflobvdd-multi-input-2.c nested-recursion-fail-1-35-beaten.btor2 simple-increasing-loop-1-35-beaten.btor2
35
+ cflobvdd-multi-input-3-beaten.btor2 nested-recursion-fail-1-35-rotorized.btor2 simple-increasing-loop-1-35-rotorized.btor2
36
+ cflobvdd-multi-input-3-rotorized.btor2 nested-recursion-fail-1-35.c simple-increasing-loop-1-35.c
37
+ cflobvdd-multi-input-3.c recursive-ackermann-1-35-beaten.btor2 three-level-nested-loop-fail-1-35-beaten.btor2
38
+ cflobvdd-multi-input-4-beaten.btor2 recursive-ackermann-1-35-rotorized.btor2 three-level-nested-loop-fail-1-35-rotorized.btor2
39
+ cflobvdd-multi-input-4-rotorized.btor2 recursive-ackermann-1-35.c three-level-nested-loop-fail-1-35.c
40
+ cflobvdd-multi-input-4.c recursive-factorial-fail-1-35-beaten.btor2 two-level-nested-loop-1-35-beaten.btor2
41
+ cflobvdd-multi-input-5-beaten.btor2 recursive-factorial-fail-1-35-rotorized.btor2 two-level-nested-loop-1-35-rotorized.btor2
42
+ cflobvdd-multi-input-5-rotorized.btor2 recursive-factorial-fail-1-35.c two-level-nested-loop-1-35.c
43
+ cflobvdd-multi-input-5.c recursive-fibonacci-1-10-beaten.btor2
44
+ cflobvdd-multi-input-6-beaten.btor2 recursive-fibonacci-1-10-rotorized.btor2""" .split ()
45
+ neu_examples = []
46
+ for i in range (len (examples )):
47
+ if examples [i ][- 1 ] == 'c' :
48
+ neu_examples .append ("examples/symbolic/" + examples [i ])
49
+ print (examples [i ])
50
+ examples = neu_examples
51
+
52
+
53
+ result32 = subprocess .run (["./rotor" , "-m32" , "-c" , "test.c" , "-o" , "test32.m" , "-" , "1" , "-o" , "test32.btor2" ], capture_output = True , text = True )
54
+ result64 = subprocess .run (["./rotor" , "-m64" , "-c" , "test.c" , "-o" , "test64.m" , "-" , "1" , "-o" , "test64.btor2" ], capture_output = True , text = True )
55
+ size = os .path .getsize ("test32.btor2" )
56
+ size2 = os .path .getsize ("test64.btor2" )
57
+
58
+ print (size )
59
+ print (size2 )
60
+
61
+ times32bit = []
62
+ times64bit = []
63
+
64
+ sizes32bit = []
65
+ sizes64bit = []
66
+
67
+ mems32bits = []
68
+ mems64bits = []
69
+
70
+
71
+ N = 2 * len (examples )
72
+ timedoutcnt32 = 0 # len(examples)
73
+ timedoutcnt64 = 0 # len(examples)
74
+ for examp in examples [:]:
75
+ print (examp )
76
+ examp2 = examp [:- 2 ]
77
+ result32 = subprocess .run (["./rotor" , "-m32" , "-c" , f"{ examp2 } .c" , "-o" , f"{ examp2 } 32.m" , "-" , "1" , "-o" , f"{ examp2 } 32.btor2" ], capture_output = True , text = True )
78
+ result64 = subprocess .run (["./rotor" , "-m64" , "-c" , f"{ examp2 } .c" , "-o" , f"{ examp2 } 64.m" , "-" , "1" , "-o" , f"{ examp2 } 64.btor2" ], capture_output = True , text = True )
79
+
80
+ size32 = os .path .getsize (f"{ examp2 } 32.btor2" )
81
+ size64 = os .path .getsize (f"{ examp2 } 64.btor2" )
82
+ sizes32bit .append (size32 )
83
+ sizes64bit .append (size64 )
84
+
85
+
86
+
87
+ print (examp [:- 2 ])
88
+ time1 = time .time ()
89
+ # cmnd = f"/usr/bin/time -v tools/bitme.py {examp2}32.btor2 -kmin 0 -kmax 120 -array 8 --unroll -propagate 8 --use-CFLOBVDD"
90
+ cmnd = f"/usr/bin/time -v tools/bitme.py { examp2 } 32.btor2 -kmin 0 -kmax 120 -array 8 --unroll -propagate 8 --use-CFLOBVDD --check-termination"
91
+ print (cmnd )
92
+ try :
93
+ bitme32 = subprocess .run (cmnd .split (), capture_output = True , text = True , timeout = TIMEOUT )
94
+ # mem32 = int(bitme32.stderr.replace('\t', "").split('\n')[9][36:])
95
+ print ("RRRrrrRRrRrrrRRRrrRrrrrRr@$3RWEfFDfrf3#$FE3f\n RRrrrRRrRrrrRRRrrRrrrrRr@$3RWEfFDfrf3#\n RRrrrRRrRrrrRRRrrRrrrrRr@$3RWEfFDfrf3#\n RRrrrRRrRrrrRRRrrRrrrrRr@$3RWEfFDfrf3#\n RRrrrRRrRrrrRRRrrRrrrrRr@$3RWEfFDfrf3#\n RRrrrRRrRrrrRRRrrRrrrrRr@$3RWEfFDfrf3#\n " )
96
+ except subprocess .TimeoutExpired :
97
+ print ("timedout" )
98
+ timedoutcnt32 += 1
99
+ except :
100
+ print ("Rsldkjvnsdlfkjsdfklj\n RRsldkjvnsdlfkjsdfklj\n rsldkjvnsdlfkjsdfklj\n rsldkjvnsdlfkjsdfklj\n rsldkjvnsdlfkjsdfklj\n Rsldkjvnsdlfkjsdfklj\n Rsldkjvnsdlfkjsdfklj\n rsldkjvnsdlfkjsdfklj\n Rsldkjvnsdlfkjsdfklj\n rrsldkjvnsdlfkjsdfklj\n rRsldkjvnsdlfkjsdfklj\n RRrsldkjvnsdlfkjsdfklj\n rsldkjvnsdlfkjsdfklj\n Rrrsldkjvnsdlfkjsdfklj\n rsldkjvnsdlfkjsdfklj\n rRr" )
101
+
102
+ time2 = time .time ()
103
+ # cmnd = f"/usr/bin/time -v tools/bitme.py {examp2}64.btor2 -kmin 0 -kmax 120 -array 8 --unroll -propagate 8 --use-CFLOBVDD"
104
+ cmnd = f"/usr/bin/time -v tools/bitme.py { examp2 } 64.btor2 -kmin 0 -kmax 120 -array 8 --unroll -propagate 8 --use-CFLOBVDD --check-termination"
105
+ try :
106
+ bitme64 = subprocess .run (cmnd .split (), capture_output = True , text = True , timeout = TIMEOUT )
107
+ # mem64 = int(bitme32.stderr.replace('\t', "").split('\n')[9][36:])
108
+ print ("RRRrrrRRrRrrrRRRrrRrrrrRr@$3RWEfFDfrf3#$FE3f\n RRrrrRRrRrrrRRRrrRrrrrRr@$3RWEfFDfrf3#\n RRrrrRRrRrrrRRRrrRrrrrRr@$3RWEfFDfrf3#\n RRrrrRRrRrrrRRRrrRrrrrRr@$3RWEfFDfrf3#\n RRrrrRRrRrrrRRRrrRrrrrRr@$3RWEfFDfrf3#\n RRrrrRRrRrrrRRRrrRrrrrRr@$3RWEfFDfrf3#\n " )
109
+ except subprocess .TimeoutExpired :
110
+ print ("timedout" )
111
+ timedoutcnt64 += 1
112
+ except :
113
+ print ("Rsldkjvnsdlfkjsdfklj\n RRsldkjvnsdlfkjsdfklj\n rsldkjvnsdlfkjsdfklj\n rsldkjvnsdlfkjsdfklj\n rsldkjvnsdlfkjsdfklj\n Rsldkjvnsdlfkjsdfklj\n Rsldkjvnsdlfkjsdfklj\n rsldkjvnsdlfkjsdfklj\n Rsldkjvnsdlfkjsdfklj\n rrsldkjvnsdlfkjsdfklj\n rRsldkjvnsdlfkjsdfklj\n RRrsldkjvnsdlfkjsdfklj\n rsldkjvnsdlfkjsdfklj\n Rrrsldkjvnsdlfkjsdfklj\n rsldkjvnsdlfkjsdfklj\n rRr" )
114
+ time3 = time .time ()
115
+
116
+
117
+
118
+ print ("32bit size:" , size32 )
119
+ print ("64bit size:" , size64 )
120
+ print ()
121
+ print ("32bit time:" , time2 - time1 )
122
+ print ("64bit time:" , time3 - time2 )
123
+ print ()
124
+ print ()
125
+ times32bit .append (time2 - time1 )
126
+ times64bit .append (time3 - time2 )
127
+
128
+
129
+
130
+
131
+ exp_samples3 = np .random .exponential (scale = 1.6 , size = 30 )
132
+ exp_samples = np .random .normal (scale = 1.0 , size = 30 )
133
+ x = np .linspace (0 , 10 , 100 )
134
+
135
+ fig , axs = plt .subplots (1 , 4 , figsize = (12 , 4 )) # 1 row, 3 columns
136
+
137
+ axs [0 ].bar (["successful" , "timedout32" , "timedout64" ], [N - timedoutcnt32 - timedoutcnt64 , timedoutcnt32 , timedoutcnt64 ], color = ["forestgreen" , "firebrick" , "darkorange" ])
138
+ axs [0 ].set_title ("Timedout experiments" )
139
+
140
+
141
+ sns .violinplot (data = [sizes32bit , sizes64bit ], ax = axs [1 ], split = True )
142
+ axs [1 ].set_xticks ([0 , 1 ])
143
+ axs [1 ].set_xticklabels (["32-bit" , "64-bit" ])
144
+ axs [1 ].set_title ("model size" )
145
+
146
+
147
+ sns .violinplot (data = [times32bit , times64bit ], ax = axs [2 ], split = True )
148
+ axs [2 ].set_xticks ([0 , 1 ])
149
+ axs [2 ].set_xticklabels (["32-bit" , "64-bit" ])
150
+ axs [2 ].set_title ("bitme time consumption" )
151
+
152
+
153
+ sns .violinplot (data = [exp_samples , exp_samples3 ], ax = axs [3 ], split = True )
154
+ axs [3 ].set_xticks ([0 , 1 ])
155
+ axs [3 ].set_xticklabels (["32-bit" , "64-bit" ])
156
+ axs [3 ].set_title ("bitme memory consumption" )
157
+
158
+
159
+
160
+
161
+
162
+
163
+ plt .tight_layout ()
164
+ plt .savefig ("plot.png" )
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+
173
+ """
174
+
175
+ tools/bitme.py examples/symbolic/division-by-zero-3-35-beaten.btor2 -kmin 0 -kmax 120 -array 8 --unroll -propagate 8 --use-CFLOBVDD
176
+ tools/bitme.py examples/symbolic/division-by-zero-3-35.btor2 -kmin 0 -kmax 120 -array 8 --unroll -propagate 8 --use-CFLOBVDD
177
+ tools/bitme.py examples/symbolic/recursive-fibonacci-1-1032.btor2 -kmin 0 -kmax 120 -array 8 --unroll -propagate 8 --use-CFLOBVDD
178
+
179
+ """
0 commit comments