improved gcc-9 and gcc-10 decoding speed
the new alignment setting is better for gcc-9 and gcc-10 by about ~+5%. Unfortunately, it's worse for essentially all other compilers. Make the new alignment setting conditional to gcc-9+.
This commit is contained in:
@@ -1142,13 +1142,14 @@ ZSTD_decompressSequences_body( ZSTD_DCtx* dctx,
|
|||||||
* If you see most cycles served out of the DSB you've hit the good case.
|
* If you see most cycles served out of the DSB you've hit the good case.
|
||||||
* If it is pretty even then you may be in an okay case.
|
* If it is pretty even then you may be in an okay case.
|
||||||
*
|
*
|
||||||
* I've been able to reproduce this issue on the following CPUs:
|
* This issue has been reproduced on the following CPUs:
|
||||||
* - Kabylake: Macbook Pro (15-inch, 2019) 2.4 GHz Intel Core i9
|
* - Kabylake: Macbook Pro (15-inch, 2019) 2.4 GHz Intel Core i9
|
||||||
* Use Instruments->Counters to get DSB/MITE cycles.
|
* Use Instruments->Counters to get DSB/MITE cycles.
|
||||||
* I never got performance swings, but I was able to
|
* I never got performance swings, but I was able to
|
||||||
* go from the good case of mostly DSB to half of the
|
* go from the good case of mostly DSB to half of the
|
||||||
* cycles served from MITE.
|
* cycles served from MITE.
|
||||||
* - Coffeelake: Intel i9-9900k
|
* - Coffeelake: Intel i9-9900k
|
||||||
|
* - Coffeelake: Intel i7-9700k
|
||||||
*
|
*
|
||||||
* I haven't been able to reproduce the instability or DSB misses on any
|
* I haven't been able to reproduce the instability or DSB misses on any
|
||||||
* of the following CPUS:
|
* of the following CPUS:
|
||||||
@@ -1165,7 +1166,12 @@ ZSTD_decompressSequences_body( ZSTD_DCtx* dctx,
|
|||||||
__asm__("nop");
|
__asm__("nop");
|
||||||
__asm__(".p2align 5");
|
__asm__(".p2align 5");
|
||||||
__asm__("nop");
|
__asm__("nop");
|
||||||
|
# if __GNUC__ >= 9
|
||||||
|
/* better for gcc-9 and gcc-10, worse for clang and gcc-8 */
|
||||||
|
__asm__(".p2align 3");
|
||||||
|
# else
|
||||||
__asm__(".p2align 4");
|
__asm__(".p2align 4");
|
||||||
|
# endif
|
||||||
#endif
|
#endif
|
||||||
for ( ; ; ) {
|
for ( ; ; ) {
|
||||||
seq_t const sequence = ZSTD_decodeSequence(&seqState, isLongOffset);
|
seq_t const sequence = ZSTD_decodeSequence(&seqState, isLongOffset);
|
||||||
|
|||||||
Reference in New Issue
Block a user