-
Notifications
You must be signed in to change notification settings - Fork 7.9k
Commit 6cc21c4
Optimize pack()
Instead of using lookup tables, we can use a combination of shifts and
byte swapping to achieve the same thing in less cycles and with less
code.
Benchmark files
---------------
pack1.php:
```php
for ($i = 0; $i < 10_000_000; ++$i) {
pack("J", 0x7FFFFFFFFFFFFFFF);
}
```
pack2.php:
```php
for ($i = 0; $i < 4000000; ++$i) {
pack("nvc*", 0x1234, 0x5678, 65, 66);
}
```
On an i7-4790:
```
Benchmark 1: ./sapi/cli/php pack1.php
Time (mean ± σ): 408.8 ms ± 3.4 ms [User: 406.1 ms, System: 1.6 ms]
Range (min ... max): 403.6 ms ... 413.6 ms 10 runs
Benchmark 2: ./sapi/cli/php_old pack1.php
Time (mean ± σ): 451.7 ms ± 7.7 ms [User: 448.5 ms, System: 2.0 ms]
Range (min ... max): 442.8 ms ... 461.2 ms 10 runs
Summary
./sapi/cli/php pack1.php ran
1.11 ± 0.02 times faster than ./sapi/cli/php_old pack1.php
Benchmark 1: ./sapi/cli/php pack2.php
Time (mean ± σ): 239.3 ms ± 6.0 ms [User: 236.2 ms, System: 2.3 ms]
Range (min ... max): 233.2 ms ... 256.8 ms 12 runs
Benchmark 2: ./sapi/cli/php_old pack2.php
Time (mean ± σ): 271.9 ms ± 3.3 ms [User: 269.7 ms, System: 1.3 ms]
Range (min ... max): 267.4 ms ... 279.0 ms 11 runs
Summary
./sapi/cli/php pack2.php ran
1.14 ± 0.03 times faster than ./sapi/cli/php_old pack2.php
```
On an i7-1185G7:
```
Benchmark 1: ./sapi/cli/php pack1.php
Time (mean ± σ): 263.7 ms ± 1.8 ms [User: 262.6 ms, System: 0.9 ms]
Range (min ... max): 261.5 ms ... 268.2 ms 11 runs
Benchmark 2: ./sapi/cli/php_old pack1.php
Time (mean ± σ): 303.3 ms ± 6.5 ms [User: 300.7 ms, System: 2.3 ms]
Range (min ... max): 297.4 ms ... 318.1 ms 10 runs
Summary
./sapi/cli/php pack1.php ran
1.15 ± 0.03 times faster than ./sapi/cli/php_old pack1.php
Benchmark 1: ./sapi/cli/php pack2.php
Time (mean ± σ): 156.7 ms ± 2.9 ms [User: 154.7 ms, System: 1.7 ms]
Range (min ... max): 151.6 ms ... 164.7 ms 19 runs
Benchmark 2: ./sapi/cli/php_old pack2.php
Time (mean ± σ): 174.6 ms ± 3.3 ms [User: 171.9 ms, System: 2.3 ms]
Range (min ... max): 170.7 ms ... 180.4 ms 17 runs
Summary
./sapi/cli/php pack2.php ran
1.11 ± 0.03 times faster than ./sapi/cli/php_old pack2.php
```
Closes GH-18524.
Co-authored-by: divinity76 <divinity76@gmail.com>1 parent 45215d0 commit 6cc21c4
File tree
6 files changed
+47
-200
lines changed- ext/standard
6 files changed
+47
-200
lines changedOriginal file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
2 | 2 |
| |
3 | 3 |
| |
4 | 4 |
| |
5 | + | ||
6 | + | ||
7 | + | ||
5 | 8 |
| |
6 | 9 |
| |
7 | 10 |
| |
|
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
619 | 619 |
| |
620 | 620 |
| |
621 | 621 |
| |
622 | + | ||
622 | 623 |
| |
623 | 624 |
| |
624 | 625 |
| |
|
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
299 | 299 |
| |
300 | 300 |
| |
301 | 301 |
| |
302 | - | ||
303 | 302 |
| |
304 | 303 |
| |
305 | 304 |
| |
|
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
19 | 19 |
| |
20 | 20 |
| |
21 | 21 |
| |
22 | - | ||
23 | 22 |
| |
24 | 23 |
| |
25 | 24 |
| |
| |||
30 | 29 |
| |
31 | 30 |
| |
32 | 31 |
| |
32 | + | ||
33 | + | ||
34 | + | ||
35 | + | ||
36 | + | ||
33 | 37 |
| |
34 | - | ||
38 | + | ||
39 | + | ||
35 | 40 |
| |
36 | - | ||
41 | + | ||
42 | + | ||
43 | + | ||
44 | + | ||
45 | + | ||
46 | + | ||
47 | + | ||
48 | + | ||
37 | 49 |
| |
38 | 50 |
| |
39 | 51 |
| |
| |||
42 | 54 |
| |
43 | 55 |
| |
44 | 56 |
| |
45 | - | ||
46 | - | ||
47 | - | ||
48 | - | ||
49 | - | ||
50 | - | ||
51 | - | ||
52 | - | ||
53 | - | ||
54 | - | ||
55 | - | ||
56 | - | ||
57 | - | ||
58 | - | ||
59 | - | ||
60 | - | ||
61 | - | ||
62 | - | ||
63 | - | ||
64 | - | ||
65 | - | ||
66 | - | ||
67 | - | ||
68 | 57 |
| |
69 | - | ||
58 | + | ||
70 | 59 |
| |
71 | - | ||
72 | - | ||
73 | - | ||
74 | - | ||
75 | - | ||
60 | + | ||
76 | 61 |
| |
77 | - | ||
78 | - | ||
62 | + | ||
63 | + | ||
64 | + | ||
65 | + | ||
66 | + | ||
67 | + | ||
68 | + | ||
69 | + | ||
70 | + | ||
79 | 71 |
| |
72 | + | ||
73 | + | ||
80 | 74 |
| |
81 | 75 |
| |
82 | 76 |
| |
| |||
88 | 82 |
| |
89 | 83 |
| |
90 | 84 |
| |
91 | - | ||
92 | - | ||
93 | - | ||
94 | - | ||
85 | + | ||
95 | 86 |
| |
96 | 87 |
| |
97 | 88 |
| |
| |||
509 | 500 |
| |
510 | 501 |
| |
511 | 502 |
| |
512 | - | ||
503 | + | ||
513 | 504 |
| |
514 | 505 |
| |
515 | 506 |
| |
| |||
518 | 509 |
| |
519 | 510 |
| |
520 | 511 |
| |
521 | - | ||
512 | + | ||
522 | 513 |
| |
523 | 514 |
| |
524 | - | ||
515 | + | ||
525 | 516 |
| |
526 | - | ||
517 | + | ||
527 | 518 |
| |
528 | 519 |
| |
529 | 520 |
| |
530 | - | ||
521 | + | ||
531 | 522 |
| |
532 | 523 |
| |
533 | 524 |
| |
| |||
536 | 527 |
| |
537 | 528 |
| |
538 | 529 |
| |
539 | - | ||
530 | + | ||
540 | 531 |
| |
541 | 532 |
| |
542 | 533 |
| |
| |||
545 | 536 |
| |
546 | 537 |
| |
547 | 538 |
| |
548 | - | ||
539 | + | ||
549 | 540 |
| |
550 | 541 |
| |
551 | - | ||
542 | + | ||
552 | 543 |
| |
553 | - | ||
544 | + | ||
554 | 545 |
| |
555 | 546 |
| |
556 | 547 |
| |
557 | - | ||
548 | + | ||
558 | 549 |
| |
559 | 550 |
| |
560 | 551 |
| |
| |||
565 | 556 |
| |
566 | 557 |
| |
567 | 558 |
| |
568 | - | ||
559 | + | ||
569 | 560 |
| |
570 | 561 |
| |
571 | - | ||
562 | + | ||
572 | 563 |
| |
573 | - | ||
564 | + | ||
574 | 565 |
| |
575 | 566 |
| |
576 | 567 |
| |
577 | - | ||
568 | + | ||
578 | 569 |
| |
579 | 570 |
| |
580 | 571 |
| |
| |||
1178 | 1169 |
| |
1179 | 1170 |
| |
1180 | 1171 |
| |
1181 | - | ||
1182 | - | ||
1183 | - | ||
1184 | - | ||
1185 | - | ||
1186 | - | ||
1187 | - | ||
1188 | - | ||
1189 | - | ||
1190 | - | ||
1191 | - | ||
1192 | - | ||
1193 | - | ||
1194 | - | ||
1195 | - | ||
1196 | - | ||
1197 | - | ||
1198 | - | ||
1199 | - | ||
1200 | - | ||
1201 | - | ||
1202 | - | ||
1203 | - | ||
1204 | - | ||
1205 | - | ||
1206 | - | ||
1207 | - | ||
1208 | - | ||
1209 | - | ||
1210 | - | ||
1211 | - | ||
1212 | - | ||
1213 | - | ||
1214 | - | ||
1215 | - | ||
1216 | - | ||
1217 | - | ||
1218 | - | ||
1219 | - | ||
1220 | - | ||
1221 | - | ||
1222 | - | ||
1223 | - | ||
1224 | - | ||
1225 | - | ||
1226 | - | ||
1227 | - | ||
1228 | - | ||
1229 | - | ||
1230 | - | ||
1231 | - | ||
1232 | - | ||
1233 | - | ||
1234 | - | ||
1235 | - | ||
1236 | - | ||
1237 | - | ||
1238 | - | ||
1239 | - | ||
1240 | - | ||
1241 | - | ||
1242 | - | ||
1243 | - | ||
1244 | - | ||
1245 | - | ||
1246 | - | ||
1247 | - | ||
1248 | - | ||
1249 | - | ||
1250 | - | ||
1251 | - | ||
1252 | - | ||
1253 | - | ||
1254 | - | ||
1255 | - | ||
1256 | - | ||
1257 | - | ||
1258 | - | ||
1259 | - | ||
1260 | - | ||
1261 | - | ||
1262 | - | ||
1263 | - | ||
1264 | - | ||
1265 | - | ||
1266 | - | ||
1267 | - | ||
1268 | - | ||
1269 | - | ||
1270 | - | ||
1271 | - | ||
1272 | - | ||
1273 | - | ||
1274 | - | ||
1275 | - | ||
1276 | - | ||
1277 | - | ||
1278 | - | ||
1279 | - | ||
1280 | - | ||
1281 | - | ||
1282 | - | ||
1283 | - | ||
1284 | - | ||
1285 | - | ||
1286 | - | ||
1287 | - | ||
1288 | - | ||
1289 | - | ||
1290 | - | ||
1291 | - | ||
1292 | - | ||
1293 | - | ||
1294 | - | ||
1295 | - | ||
1296 | - | ||
1297 | - | ||
1298 | - | ||
1299 | - | ||
1300 | - | ||
1301 | - | ||
1302 | - | ||
1303 | - | ||
1304 | - |
This file was deleted.
Original file line number | Diff line number | Diff line change | |
---|---|---|---|
| |||
29 | 29 |
| |
30 | 30 |
| |
31 | 31 |
| |
32 | - | ||
33 | 32 |
| |
34 | 33 |
| |
35 | 34 |
| |
|
0 commit comments