RFR: 8279508: Auto-vectorize Math.round API [v2]
Jatin Bhateja
jbhateja at openjdk.java.net
Sun Feb 13 02:55:14 UTC 2022
On Fri, 21 Jan 2022 00:49:04 GMT, Sandhya Viswanathan <sviswanathan at openjdk.org> wrote:
> The JVM currently initializes the x86 mxcsr to round to nearest even, see below in stubGenerator_x86_64.cpp: // Round to nearest (even), 64-bit mode, exceptions masked StubRoutines::x86::_mxcsr_std = 0x1F80; The above works for Math.rint which is specified to be round to nearest even. Please see: https://www.intel.com/content/www/us/en/developer/articles/technical/intel-sdm.html : section 4.8.4
>
> The rounding mode needed for Math.round is round to positive infinity which needs a different x86 mxcsr initialization(0x5F80).
Hi @sviswa7 ,
As per JLS 17 section 15.4 Java follows round to nearest rounding policy for all floating point operations except conversion to integer and remainder where it uses round toward zero.
So it may not be feasible to modify global MXCSR.RC setting, also modifying MXCSR setting just before rounding and re-setting back to its original value after operation will also not work as OOO processor is free to re-order LMXCSR instruction if used without any barriers and thus it may also influence other floating point operation.
I am pushing an incremental patch which is vectorizes existing rounding APIs and is showing significant gain over existing implementation.
Best Regards,
Jatin
-------------
PR: https://git.openjdk.java.net/jdk/pull/7094
More information about the hotspot-compiler-dev
mailing list