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 17:23:21 UTC 2014
Great, thank you!
Lois
On 6/12/2014 12:01 PM, Vladimir Kozlov wrote:
> 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