Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Vector API from Project Panama

Avatar for bitterfox bitterfox
November 17, 2018

Vector API from Project Panama

Avatar for bitterfox

bitterfox

November 17, 2018
Tweet

Other Decks in Programming

Transcript

  1. Who am I • 吉田真也 – LINE Corp. Dev 1

    center • Serverside of LINE Messaging – OpenJDK Committer contributed to • Project Lambda • Project Kulla(jshell)
  2. OpenJDK significant projects • Amber: Improve Java language • Valhalla:

    Better memory layout for value type – Value type、ジェネリクスのジェネリクスの特殊化の特殊化特殊化(List<int>)) • Loom: Light-weight thread, million threads in Java app – 継続、ジェネリクスのFiber • ZGC: Very low latency and TB scale GC • Panama: Native from Java
  3. Project Panama overview Java Native library CPU JNI Java level

    API(Vector API) HotSpot(JIT) Better FFI than JNI
  4. ベクトル演算演算/命令を • SIMD – 複数のデータをの特殊化データをを1~n clockn clockで 同時に計算に計算計算 – 科学計算や機械学習では機械学習ではでは

    とっても大事大事 • 昔はスパコンの技はスの特殊化パコンの技術の特殊化技術 • 今ははGPU、ジェネリクスのCPUに計算も大事 – Intel CPUだとAVX系 A 0 A 1 A 2 A 3 B 0 B 1 B 2 B 3 + A 0 A 1 A 2 A 3 B 0 B 1 B 2 B 3 * - / + SISD SIMD n clo ck n clock
  5. 自動ベクトル化コンベクトル演算化の特殊化罠 • 自動ベクトル化コンベクトル演算化コンの技術パイラの特殊化制約、ジェネリクスの限界 – 一般に逐次コードをに計算逐次コードをベクトコードをベクトル命令を機械的に並列化するのに計算並列化するの特殊化は難しいしい – まだまだ研究された途上 – Project Sumatra・・・

    • 自動ベクトル化コンベクトル演算化コンの技術パイラの特殊化気分次コードをベクト第 – JVMに計算な技術れな技術い僕達には予測が難しに計算は予測が難しいが難しい難しいしい – コードをベクトル命令の特殊化メンの技術テナンの技術スの特殊化性 • 少しコードを変えしコードをベクトル命令を変えると劇的に遅えると劇的に並列化するのに計算遅くなったりくな技術ったり
  6. Vector API Species<E, S>) S extends Shape Vector API Vector<E,

    S> S extends Shape Shape Species<E, S> S extends Shape S64Bit S128Bit S256Bit S512Bit IntVector<S> S extends Shape IntSpecies<S> S extends Shape Int64Vector Int128Vector Int256Vector Int512Vector
  7. Vector API + Valhalla Species<E, S>) S extends Shape Vector<E,

    S> S extends Shape Shape Species<E, S> S extends Shape S64Bit S128Bit S256Bit S512Bit
  8. # for each type and shape Vector<T, S>) S64Bit S128Bit

    S256Bit S512Bit Byte 8 16 32 64 Short 4 8 16 32 Int 2 4 8 16 Long 1 2 4 8 Float 2 4 8 16 Double 1 2 4 8
  9. Mask • 分岐を表現を表現 Mask m = v.equal(0); vw = v.add(w,

    m) // mの特殊化true(vの特殊化0)の特殊化ところだけ演算さ れる • Demo
  10. Current status • JEP – http://openjdk.java.net/jeps/338 – Incubator module: jdk.incubator.vector

    • API – Arithmetic, shift/rotate, trigonometric – Comparison, blend, mask – Casts, rebracket, reshape – Reduction, extraction, insertion – Rearrange • Implementation – X86 64 bit: SSE/AVX/AVX2/AVX512 – Almost complete(scatter, gather in progress)