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

Lois Foltan lois.foltan at oracle.com
Thu Jun 12 13:59:48 UTC 2014


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