prefetch instructions in Hotspot
Mahmood Naderan
nt_mahmood at yahoo.com
Wed Apr 2 12:59:40 UTC 2014
Vlad,
I added the decelerations and can be verified as below
mahmood at orca:~$ grep -r "public native" /usr/lib/jvm/java-6-openjdk-amd64/sun/misc/Unsafe.java
public native void prefetchRead (Object o, long offset);
public native void prefetchWrite(Object o, long offset);
public native int getInt(Object o, long offset);
public native void putInt(Object o, long offset, int x);
public native Object getObject(Object o, long offset);
public native void putObject(Object o, long offset, Object x);
public native boolean getBoolean(Object o, long offset);
public native void putBoolean(Object o, long offset, boolean x);
public native byte getByte(Object o, long offset);
public native void putByte(Object o, long offset, byte x);
public native short getShort(Object o, long offset);
public native void putShort(Object o, long offset, short x);
public native char getChar(Object o, long offset);
public native void putChar(Object o, long offset, char x);
public native long getLong(Object o, long offset);
public native void putLong(Object o, long offset, long x);
public native float getFloat(Object o, long offset);
public native void putFloat(Object o, long offset, float x);
public native double getDouble(Object o, long offset);
public native void putDouble(Object o, long offset, double x);
public native byte getByte(long address);
public native void putByte(long address, byte x);
public native short getShort(long address);
public native void putShort(long address, short x);
public native char getChar(long address);
public native void putChar(long address, char x);
public native int getInt(long address);
public native void putInt(long address, int x);
public native long getLong(long address);
public native void putLong(long address, long x);
public native float getFloat(long address);
public native void putFloat(long address, float x);
public native double getDouble(long address);
public native void putDouble(long address, double x);
public native long getAddress(long address);
public native void putAddress(long address, long x);
public native long allocateMemory(long bytes);
public native long reallocateMemory(long address, long bytes);
public native void setMemory(long address, long bytes, byte value);
public native void copyMemory(Object srcBase, long srcOffset,
public native void freeMemory(long address);
public native long staticFieldOffset(Field f);
public native long objectFieldOffset(Field f);
public native Object staticFieldBase(Field f);
public native void ensureClassInitialized(Class c);
public native int arrayBaseOffset(Class arrayClass);
public native int arrayIndexScale(Class arrayClass);
public native int addressSize();
public native int pageSize();
public native Class defineClass(String name, byte[] b, int off, int len,
public native Class defineClass(String name, byte[] b, int off, int len);
public native Object allocateInstance(Class cls)
public native void monitorEnter(Object o);
public native void monitorExit(Object o);
public native boolean tryMonitorEnter(Object o);
public native void throwException(Throwable ee);
public native Object getObjectVolatile(Object o, long offset);
public native void putObjectVolatile(Object o, long offset, Object x);
public native int getIntVolatile(Object o, long offset);
public native void putIntVolatile(Object o, long offset, int x);
public native boolean getBooleanVolatile(Object o, long offset);
public native void putBooleanVolatile(Object o, long offset, boolean x);
public native byte getByteVolatile(Object o, long offset);
public native void putByteVolatile(Object o, long offset, byte x);
public native short getShortVolatile(Object o, long offset);
public native void putShortVolatile(Object o, long offset, short x);
public native char getCharVolatile(Object o, long offset);
public native void putCharVolatile(Object o, long offset, char x);
public native long getLongVolatile(Object o, long offset);
public native void putLongVolatile(Object o, long offset, long x);
public native float getFloatVolatile(Object o, long offset);
public native void putFloatVolatile(Object o, long offset, float x);
public native double getDoubleVolatile(Object o, long offset);
public native void putDoubleVolatile(Object o, long offset, double x);
public native void putOrderedObject(Object o, long offset, Object x);
public native void putOrderedInt(Object o, long offset, int x);
public native void putOrderedLong(Object o, long offset, long x);
public native void unpark(Object thread);
public native void park(boolean isAbsolute, long time);
public native int getLoadAverage(double[] loadavg, int nelems);
mahmood at orca:~$ grep -r "public static" /usr/lib/jvm/java-6-openjdk-amd64/sun/misc/Unsafe.java
public static native void prefetchReadStatic (Object o, long offset);
public static native void prefetchWriteStatic(Object o, long offset);
public static Unsafe getUnsafe() {
public static final int INVALID_FIELD_OFFSET = -1;
But there is no library_call.cpp in /usr/lib/jvm/java-6-openjdk-amd64
Regards,
Mahmood
On Monday, March 31, 2014 11:58 PM, Vladimir Kozlov <vladimir.kozlov at oracle.com> wrote:
Hi Mahmood
You don't need anything additional if you can build and execute java from sources you have.
Do you want to use readPrefetch from java code?
If yes, you need to add declarations into jdk/src/share/classessun/misc/Unsafe.java:
public native void prefetchRead (Object o, long offset);
public native void prefetchWrite(Object o, long offset);
public static native void prefetchReadStatic (Object o, long offset);
public static native void prefetchWriteStatic(Object o, long offset);
And we already have corresponding intrinsics in Hotspot:
hotspot/src/share/vm/opto/library_call.cpp
LibraryCallKit::inline_unsafe_prefetch()
Regards,
Vladimir
On 3/31/14 5:38 AM, Mahmood Naderan wrote:
> Hi,
>
> I have some naive questions so any answer to the following questions are appreciated.
>
> 1- I have open-jdk 1.6 and 1.7. Do I have to install additional things?
>
> 2- I want to use some intrinsics (readPrefetch) but there are little information on how to use the intrinsics. Is there any example for that? The only thing I see is https://bugs.openjdk.java.net/browse/JDK-2146656
>
>
> Regards,
> Mahmood
>
More information about the hotspot-dev
mailing list