Slide 1

Slide 1 text

Vector API from Project Panama

Slide 2

Slide 2 text

Who am I ● 吉田真也 – LINE Corp. Dev 1 center ● Serverside of LINE Messaging – OpenJDK Committer contributed to ● Project Lambda ● Project Kulla(jshell)

Slide 3

Slide 3 text

OpenJDK significant projects ● Amber: Improve Java language ● Valhalla: Better memory layout for value type – Value type、ジェネリクスのジェネリクスの特殊化の特殊化特殊化(List)) ● Loom: Light-weight thread, million threads in Java app – 継続、ジェネリクスのFiber ● ZGC: Very low latency and TB scale GC ● Panama: Native from Java

Slide 4

Slide 4 text

Project Panama overview Java Native library CPU JNI Java level API(Vector API) HotSpot(JIT) Better FFI than JNI

Slide 5

Slide 5 text

Vector API == java.util.Vector?

Slide 6

Slide 6 text

Vector API != java.util.Vector

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

ベクトル演算演算/命令を ● 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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

No content

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

自動ベクトル化コンベクトル演算化の特殊化罠 ● 自動ベクトル化コンベクトル演算化コンの技術パイラの特殊化制約、ジェネリクスの限界 – 一般に逐次コードをに計算逐次コードをベクトコードをベクトル命令を機械的に並列化するのに計算並列化するの特殊化は難しいしい – まだまだ研究された途上 – Project Sumatra・・・ ● 自動ベクトル化コンベクトル演算化コンの技術パイラの特殊化気分次コードをベクト第 – JVMに計算な技術れな技術い僕達には予測が難しに計算は予測が難しいが難しい難しいしい – コードをベクトル命令の特殊化メンの技術テナンの技術スの特殊化性 ● 少しコードを変えしコードをベクトル命令を変えると劇的に遅えると劇的に並列化するのに計算遅くなったりくな技術ったり

Slide 19

Slide 19 text

Vector API ● 発に研究された展的に並列化するのな技術開発に研究された者向けにけに計算CPUの特殊化SIMD命令をを使うためのえるAPI – 機械学習では、ジェネリクスの暗号、ジェネリクスのハッシュ値など値などな技術ど – JDK内でも使える場所でも大事使うためのえる場所がいっぱいが難しいいっぱい ● 究された極の目標は数値計の特殊化目標は数値計算の分は数のデータを値など計算の特殊化分野でもでも大事Javaを最強にするに計算する – Pythonに計算押され気味なのでされ気味なので・・・な技術の特殊化で・・・

Slide 20

Slide 20 text

Vector API Species) S extends Shape Vector API Vector S extends Shape Shape Species S extends Shape S64Bit S128Bit S256Bit S512Bit IntVector S extends Shape IntSpecies S extends Shape Int64Vector Int128Vector Int256Vector Int512Vector

Slide 21

Slide 21 text

Vector API + Valhalla Species) S extends Shape Vector S extends Shape Shape Species S extends Shape S64Bit S128Bit S256Bit S512Bit

Slide 22

Slide 22 text

# for each type and shape Vector) 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

Slide 23

Slide 23 text

Vector API demo ● 行列積

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

No content

Slide 26

Slide 26 text

No content

Slide 27

Slide 27 text

Mask ● 分岐を表現を表現 Mask m = v.equal(0); vw = v.add(w, m) // mの特殊化true(vの特殊化0)の特殊化ところだけ演算さ れる ● Demo

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

Implementation Detail ● v1.mul(v2) vpmulld ymm1, ymm2, ymm2

Slide 30

Slide 30 text

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)