[PATCH] D55585: RFC: [LLD][COFF] Parallel GHASH generation at link-time

Alexandre Ganea via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Jan 14 14:02:57 PST 2019


aganea added a comment.

Just for reference, added timings for `/hasher:(xxhash|crc)` in the comment above.

`xxHash` is using `llvm::xxHash()`.
`crc` is a naive implementation with two concatenated crc32 values, using the SSE4.2 intrinsic `_mm_crc32_u32` - thus using only two instructions per 4 bytes. However this creates about 0.0001% hash collisions, which would not be suitable for this.

Also providing timings for a 2.2 GHz, 36-cores Intel Xeon Skylake:

Dataset 2, large EXE, the resulting PDB is 2 GB:

| (trunk) lld-link ...                             |                                      | Type Merging: 34582 ms ( 52.7%) | Total Link Time: 65572 ms (100.0%) |
| (this patch) lld-link ... /hasher:sha1 (default) | Global hashing: **6910** ms ( 14.8%) | Type Merging: 12573 ms ( 26.9%) | Total Link Time: 46768 ms          |
| (this patch) lld-link ... /hasher:md5            | Global hashing: **5785** ms ( 12.6%) | Type Merging: 12479 ms ( 27.2%) | Total Link Time: 45902 ms          |
| (this patch) lld-link ... /hasher:cityhash       | Global hashing: **5153** ms ( 11.5%) | Type Merging: 12008 ms ( 26.8%) | Total Link Time: 44728 ms          |
| (this patch) lld-link ... /hasher:xxhash         | Global hashing: **5041** ms ( 10.9%) | Type Merging: 11917 ms ( 25.9%) | Total Link Time: 46057 ms          |
| (this patch) lld-link ... /hasher:crc            | Global hashing: **4994** ms ( 11.1%) | Type Merging: 12089 ms ( 26.8%) | Total Link Time: 45076 ms          |
|

Even though the global hashing is faster than the 6-cores, the single-threaded parts drag timings down because of the slower CPU frequency.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D55585/new/

https://reviews.llvm.org/D55585





More information about the llvm-commits mailing list