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

Vector API from Project Panama

14a4ab18309f42260b1e85236634ac11?s=47 bitterfox
November 17, 2018

Vector API from Project Panama

14a4ab18309f42260b1e85236634ac11?s=128

bitterfox

November 17, 2018
Tweet

Transcript

  1. Vector API from Project Panama

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

    center • Serverside of LINE Messaging – OpenJDK Committer contributed to • Project Lambda • Project Kulla(jshell)
  3. 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
  4. Project Panama overview Java Native library CPU JNI Java level

    API(Vector API) HotSpot(JIT) Better FFI than JNI
  5. Vector API == java.util.Vector?

  6. Vector API != java.util.Vector

  7. Vector API == ベクトル演算演算/命令をを Javaから使うための使うためのうための特殊化API

  8. ベクトル演算演算/命令を • 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
  9. 自動ベクトル化コンベクトル演算化コンの技術パイラ • 逐次コードをベクトコードをベクトル命令をベクトル演算命令をを使うためのうように計算最適化する – 夢のような技術の特殊化ような技術技術 – 80年代に活発に研究さに計算活発に研究されたに計算研究されたされた • HotSpotに計算も大事も大事ちろん搭載搭載

  10. 自動ベクトル化コンベクトル演算化 Demo • Dot product • 行列積 A^2 A*A A

    A A*A A A*A A A A
  11. None
  12. None
  13. None
  14. None
  15. None
  16. None
  17. None
  18. 自動ベクトル化コンベクトル演算化の特殊化罠 • 自動ベクトル化コンベクトル演算化コンの技術パイラの特殊化制約、ジェネリクスの限界 – 一般に逐次コードをに計算逐次コードをベクトコードをベクトル命令を機械的に並列化するのに計算並列化するの特殊化は難しいしい – まだまだ研究された途上 – Project Sumatra・・・

    • 自動ベクトル化コンベクトル演算化コンの技術パイラの特殊化気分次コードをベクト第 – JVMに計算な技術れな技術い僕達には予測が難しに計算は予測が難しいが難しい難しいしい – コードをベクトル命令の特殊化メンの技術テナンの技術スの特殊化性 • 少しコードを変えしコードをベクトル命令を変えると劇的に遅えると劇的に並列化するのに計算遅くなったりくな技術ったり
  19. Vector API • 発に研究された展的に並列化するのな技術開発に研究された者向けにけに計算CPUの特殊化SIMD命令をを使うためのえるAPI – 機械学習では、ジェネリクスの暗号、ジェネリクスのハッシュ値など値などな技術ど – JDK内でも使える場所でも大事使うためのえる場所がいっぱいが難しいいっぱい • 究された極の目標は数値計の特殊化目標は数値計算の分は数のデータを値など計算の特殊化分野でもでも大事Javaを最強にするに計算する

    – Pythonに計算押され気味なのでされ気味なので・・・な技術の特殊化で・・・
  20. 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
  21. 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
  22. # 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
  23. Vector API demo • 行列積

  24. None
  25. None
  26. None
  27. Mask • 分岐を表現を表現 Mask m = v.equal(0); vw = v.add(w,

    m) // mの特殊化true(vの特殊化0)の特殊化ところだけ演算さ れる • Demo
  28. None
  29. Implementation Detail • v1.mul(v2) vpmulld ymm1, ymm2, ymm2

  30. 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)