7 Kasım 2021 Pazar

Just In Time Compilation - JIT Intrinsics Optimizasyonu - İçselleştirme

Giriş
Just In Time Compilation - JIT yaparken bir sürü optimizasyon yapılabilir. Bunlardan bir tanesi de Intrinsics Optimizasyonu. Intrinsic kelime anlamı olarak içselleştirme demek. Ya da ben böyle tercüme ettim :)

Yazılım dünyasında Intrinsic function denilince built-in function anlaşılır. Örneğin bash kabuğunda da bir sürü built-in metod ve değişken vardır.

Intrinsics Optimizasyonu Nedir?
Açıklaması şöyle. Yani JVM'deki bytecode yerine direkt daha hızlı assembly kodu kullanılabilir.
Depending on the architecture the JVM is running on, the bytecode may not even be used at all. The HotSpot JVM uses a concept called “intrinsics” which is a list of well-known methods that will be replaced with specific assembler instructions known to be fast. Good examples are the methods in java.lang.MathSystem#arraycopy or Object#getClass (see @HotSpotIntrinsicCandidate).
Bir başka açıklama şöyle.
The JIT knows about intrinsics, so it can inline the relevant machine instruction into the code it's JITing, and optimize around it as part of a hot loop.
HotSpot tarafından kullanılan Intrinsics  metodlar burada

Örnek
Math.sqrt metodundaki açıklama şöyle. Zaten açıklamada da Intrinsics Optimizasyonu yapılabileceği belirtiliyor. Yani Math.sqrt() metodu sanıldığı kadar yavaş değil.
// Note that hardware sqrt instructions
// frequently can be directly used by JITs
// and should be much faster than doing
// Math.sqrt in software.
Örnek
JDK'daki bazı sınıflarındaki kodlarda jdk.internal.vm.annotation.IntrinsicCandidate kullanılır. Şöyledir
@IntrinsicCandidate
public final long getAndAddLong(Object o, long offset, long delta) {
  long v;
  do {
    v = getLongVolatile(o, offset);
  } while (!weakCompareAndSetLong(o, offset, v, v + delta));
  return v;
}

Hiç yorum yok:

Yorum Gönder