I've finally found some time to return to this and have a new version of the patch which looks more promising:

http://cr.openjdk.java.net/~mikael/webrevs/8141491/webrev.02/webrev/

This uses memcpy to read/write the native data and the preliminary benchmark numbers on linux/x64 shows the expected performance. I'll work on verifying that it doesn't impact other platforms negatively over the next days/weeks.

Btw, I also played around with implementing it in pure Java, but there are some issues getting C2 to correctly vectorize the loop given the native data accesses, so the native code seems to be needed for now.

Cheers,
Mikael

On 2015-11-25 13:32, Mikael Vidstedt wrote:

Have you looked anything at the performance of the generated code? As you may have seen I was playing around with an alternative implementation[1] which has the benefit of being pure C++ without compiler specific hints. That said, when I did some initial benchmarking of that it did seem like the performance impact was significant. I didn't have time to look at more in detail why, and will not have time to return to that until late next week earliest. It would be interesting to understand what type of performance you see with your patch.

Cheers,
Mikael


[1] http://cr.openjdk.java.net/~mikael/webrevs/8141491/webrev.01/webrev/jdk.patch

On 2015-11-25 11:42, Coleen Phillimore wrote:
Sending to core-libs mailing list.

On 11/25/15 2:19 PM, Alexander Smundak wrote:
Please take a look at
http://cr.openjdk.java.net/~asmundak/8141491/jdk/webrev.00
that fixes the problem.

It utilizes the ability of some (GCC and Clang) to declare data
alignment explicitly.
I have verified it works on x86_64 Linux by running
jdk/test/java/nio/Buffer/Basic.java test

I need a sponsor.

Sasha



Reply via email to