Commit 7b55041
committed
Refactor:maptool:Compress the tiles of a map in parallel
Phase 13 writes the zip file and needs 58 to 66 percent of the time of a
conversion. Measurements on five country maps show that the phase does
almost nothing but deflate: it moves 5.6 to 7.3 MB/s, and an isolated
benchmark of zlib level 9 on real tile data gives 6.0 MB/s.
The tiles of a slice do not depend on each other, and process_slice()
already holds the whole slice in memory. This change compresses
thread_count tiles at the same time and then writes them in the order of
the list.
write_zipmember() is now two functions. zip_compress_member() computes
the CRC and the compressed data. It only reads zip_info, so threads can
call it at the same time. write_zipmember_compressed() writes the result
and must keep the order of the members, because the position of a member
in the file depends on the members before it.
The output does not change. The order of the members and the parameters
of deflate stay the same. A run with one thread gives a file that is
identical to the file of the version before this change, byte for byte.
A run with 8 or 20 threads gives a file in which every member has a
correct CRC.
A batch holds no more than thread_count tiles, so the memory for the
compressed data stays small against the memory for the slice.
Measurement of the compression of a map of Luxembourg, 117.8 MB of tile
data on a machine with 20 cores:
threads time factor
1 18.4 s 1.00
4 8.1 s 2.24
8 4.9 s 3.55
20 3.0 s 6.031 parent 88c943c commit 7b55041
3 files changed
Lines changed: 193 additions & 43 deletions
File tree
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
412 | 412 | | |
413 | 413 | | |
414 | 414 | | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
| 422 | + | |
| 423 | + | |
| 424 | + | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
| 428 | + | |
| 429 | + | |
| 430 | + | |
| 431 | + | |
| 432 | + | |
| 433 | + | |
| 434 | + | |
| 435 | + | |
| 436 | + | |
| 437 | + | |
415 | 438 | | |
| 439 | + | |
| 440 | + | |
416 | 441 | | |
417 | 442 | | |
418 | 443 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
300 | 300 | | |
301 | 301 | | |
302 | 302 | | |
| 303 | + | |
| 304 | + | |
| 305 | + | |
| 306 | + | |
| 307 | + | |
| 308 | + | |
| 309 | + | |
| 310 | + | |
| 311 | + | |
| 312 | + | |
| 313 | + | |
| 314 | + | |
| 315 | + | |
| 316 | + | |
| 317 | + | |
| 318 | + | |
| 319 | + | |
| 320 | + | |
| 321 | + | |
| 322 | + | |
| 323 | + | |
| 324 | + | |
| 325 | + | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
| 331 | + | |
| 332 | + | |
| 333 | + | |
| 334 | + | |
| 335 | + | |
| 336 | + | |
| 337 | + | |
| 338 | + | |
| 339 | + | |
| 340 | + | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
| 346 | + | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
| 381 | + | |
| 382 | + | |
303 | 383 | | |
304 | 384 | | |
305 | 385 | | |
| 386 | + | |
306 | 387 | | |
307 | | - | |
| 388 | + | |
308 | 389 | | |
309 | 390 | | |
310 | 391 | | |
| |||
332 | 413 | | |
333 | 414 | | |
334 | 415 | | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
| 419 | + | |
| 420 | + | |
| 421 | + | |
335 | 422 | | |
336 | 423 | | |
337 | 424 | | |
338 | | - | |
339 | | - | |
340 | | - | |
341 | | - | |
342 | | - | |
343 | | - | |
344 | | - | |
345 | | - | |
346 | | - | |
| 425 | + | |
| 426 | + | |
| 427 | + | |
347 | 428 | | |
| 429 | + | |
348 | 430 | | |
| 431 | + | |
| 432 | + | |
349 | 433 | | |
350 | 434 | | |
351 | 435 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
81 | 81 | | |
82 | 82 | | |
83 | 83 | | |
84 | | - | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
85 | 138 | | |
86 | 139 | | |
87 | 140 | | |
| |||
95 | 148 | | |
96 | 149 | | |
97 | 150 | | |
98 | | - | |
99 | | - | |
100 | | - | |
101 | | - | |
102 | | - | |
103 | | - | |
104 | | - | |
105 | | - | |
106 | | - | |
107 | | - | |
108 | | - | |
109 | | - | |
110 | | - | |
111 | | - | |
112 | | - | |
113 | | - | |
114 | | - | |
115 | | - | |
116 | | - | |
117 | | - | |
118 | | - | |
119 | | - | |
120 | | - | |
121 | | - | |
122 | | - | |
123 | | - | |
124 | | - | |
125 | | - | |
126 | | - | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
127 | 161 | | |
128 | 162 | | |
129 | 163 | | |
| |||
138 | 172 | | |
139 | 173 | | |
140 | 174 | | |
141 | | - | |
142 | | - | |
| 175 | + | |
| 176 | + | |
143 | 177 | | |
144 | 178 | | |
145 | 179 | | |
| |||
148 | 182 | | |
149 | 183 | | |
150 | 184 | | |
151 | | - | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
152 | 193 | | |
153 | 194 | | |
154 | 195 | | |
| |||
0 commit comments