RFR (XS) JDK-6961433: Revisit need to disable Windows C++ compiler optimisation of sharedRuntimeTrig.cpp

Vladimir Kozlov vladimir.kozlov at oracle.com
Thu Jun 12 16:01:38 UTC 2014


Thank you for running all these tests, Lois.

I agree with these changes now.

Thanks,
Vladimir

On 6/12/14 6:59 AM, Lois Foltan wrote:
> On 5/30/2014 11:32 AM, Lois Foltan wrote:
>>
>> On 5/29/2014 9:37 PM, Vladimir Kozlov wrote:
>>> Hi Lois,
>>>
>>> What about sharedRuntimeTrans.cpp which also have switch off pragma?
>>
>> Hi Vladimir,
>>
>> Thank you for the review.  Yes, I am aware that sharedRuntimeTrans.cpp has a switch off pragma, but for certain
>> reasons the bug, JDK-6961433 was focused in on sharedRuntimeTrig.cpp.  After successfully testing the removal within
>> sharedRuntimeTrig, I think it is then reasonable for us to look at the possibility of removing the pragma within
>> sharedRuntimeTrans.cpp as well.
>>
>>>
>>> Changes look correct but I am a little nervous. We were burned very hard recently when we implemented exp/pow using
>>> x87 instructions in C2.
>>>
>>> Also we switch off optimization in makefiles for these files (I don't know why):
>>>
>>> # The copied fdlibm routines in sharedRuntimeTrig.o must not be optimized
>>> OPT_CFLAGS/sharedRuntimeTrig.o = $(OPT_CFLAGS/NOOPT)
>>> # The copied fdlibm routines in sharedRuntimeTrans.o must not be optimized
>>> OPT_CFLAGS/sharedRuntimeTrans.o = $(OPT_CFLAGS/NOOPT)
>>
>> Good point, I did see this.  We switch off optimization in the makefiles for what seems to be the g++ compilers on
>> linux & mac.  The Solaris and Windows makefiles do not explicity turn off optimization for these two files.  But of
>> course on Windows the switch off pragma is present in the files.
>>
>>>
>>> And I don't see performance results. Can you write tests similar to next to measure performance and, most
>>> importantly, that sum result is the same?
>>
>> Makes sense, let me try to do something reasonable to measure the performance and when I have completed I will
>> resubmit the RFR.
>
> Hi Vladimir,
>
> As a follow up on this RFR, I have successfully run 3 RefWorkload runs of 10 iterations each on a Windows 7 64 bit
> machine with and without this change.  No significant degradations were seen or have been seen in some of the tests I
> have run like ExpTime.java you included below.
>
> I have also entered a new bug, JDK-8046696 <https://bugs.openjdk.java.net/browse/JDK-8046696>, to look at removing the
> #pragma optimize off within runtime/sharedRuntimeTrans.cpp as well.
>
> So at this point I have Dan & Coleen's positive review and just need your okay to go forward with this change.
>
> Thanks,
> Lois
>
>>
>> Thanks again,
>> Lois
>>
>>>
>>> Thanks,
>>> Vladimir
>>>
>>> expintr$ cat ExpTime.java
>>> import java.lang.Math;
>>> import java.util.Random;
>>>
>>> public class ExpTime {
>>>
>>> static double[] buffer;
>>>
>>> public static void main(String[] args) {
>>>   buffer = new double[1000];
>>>   Random rand = new Random(435437646);
>>>   for(int i=0; i<1000; i++) {
>>>      buffer[i] = rand.nextDouble()*10;
>>>   }
>>>
>>>   double sum = 0.0;
>>>   for (int j = 0; j < 10; j++) {
>>>     sum += test(10000);
>>>   }
>>>   System.out.println("Warmup done...");
>>>   long start = System.currentTimeMillis();
>>>   sum += test(300000*5000);
>>>   long elapsedTimeMillis = System.currentTimeMillis()-start;
>>>   System.out.println("Iterations Per Micro Second:" + (300 * 5000)/elapsedTimeMillis+" ipus");
>>>   System.out.println("Sum:" + sum);
>>> }
>>>
>>> private static double test(int len) {
>>>    double sum = 0.0;
>>>    for (int k = 0; k < len; k++) {
>>>       sum +=  Math.exp(buffer[(k)%1000]);
>>>    }
>>>    return sum;
>>> }
>>> }
>>>
>>> On 5/29/14 11:25 AM, Lois Foltan wrote:
>>>> Hello,
>>>>
>>>> Please review the following fix:
>>>>
>>>> Webrev:
>>>>      http://cr.openjdk.java.net/~lfoltan/bug_jdk6961433/
>>>>
>>>> Bug: Revisit need to disable Windows C++ compiler optimisation of
>>>> sharedRuntimeTrig.cpp
>>>>      https://bugs.openjdk.java.net/browse/JDK-6961433
>>>>
>>>> Summary of fix:
>>>> Remove WIN32 specific pragma optimize "off" within sharedRuntimeTrig.cpp
>>>> which resulted in the file being compiled with no optimizations.  The
>>>> SAFEBUF macro definition is also being removed.  It was a workaround
>>>> caused by the pragma being in effect. The problem report indicates that
>>>> this pragma was added in the VS2003/VS2005 time frame.  Where or how the
>>>> C++ compiler optimization manifested itself could not be located. Thank
>>>> you to Dan Daugherty for completing a historical search to try to track
>>>> this down.  His search is posted in the problem report.  Also, thank you
>>>> to Vladimir Koslov for proposing ideas on how this should be tested.
>>>> Since VS2010 & higher should not have this optimization issue, the
>>>> pragma is being removed early in JDK 9 so it can benefit from continual
>>>> full testing.
>>>>
>>>> Tests:
>>>> JPRT build & test
>>>> vm.quick.testlist via Adhoc Aurora testing on Windows 32 & 64 bit - runs
>>>> with/without -Xint
>>>> JDK java/lang & java/util - runs with/without -Xint
>>>> Hotspot JTREG - runs with/without -Xint
>>>> Built full JDK 9 fastdebug and production images with this Hotspot
>>>> change, resulting image used for testing.
>>
>


More information about the hotspot-runtime-dev mailing list