RFR: 8149365: memory copy does not prefetch on backwards copy

Edward Nevill edward.nevill at gmail.com
Mon Feb 8 14:37:26 UTC 2016


Hi,

The following webrev

http://cr.openjdk.java.net/~enevill/8149365/webrev.0/

adds support for prefetch on backwards copies (previously prefetch was only done on forwards copies).

It also fixes a 'feature' where the command line option -XX:PrefetchCopyIntervalInBytes=N is ignored and the value 256 always used instead.

I have benchmarked it using the following test progam

http://cr.openjdk.java.net/~enevill/8149365/ArrayCopyTest.java

Which allows you to test memory copies of different sizes from a start size to an end size in step units. The test does both backwards and forwards copies.

Usage:

java ArrayCopyTest <iters> <start> <end> <step>

I have generated the results obtained before and after the above patch on 4 different partners HW (A,B,C,D) and a summary of the results is available at

http://people.linaro.org/~edward.nevill/prefetch/prefetch.pdf

For partner A I tested 3 ranges

0-64 bytes in units of 1
0-512 bytes in units of 8
0-4096 bytes in units of 64

The latter 2 clearly show the benefit of prefetching on backwards copies.

For partners B, C & D, I only tested 0-4096 bytes in units of 64. I also tested B, C & D with -XX:PrefetchCopyIntervalInBytes=0. On these 3 partners disabling prefetch seemed to have no effect indicating that either prefetch is not implemented, or it implements automatic hardware prefetch.

A summary of the results is that it improves performance significantly on partner A and has no effect on partners B,C & D.

OK to push?

Ed.





More information about the hotspot-compiler-dev mailing list