SlideShare une entreprise Scribd logo
1  sur  47
© 2019 NTT DATA Corporation 1 © 2019 NTT DATA Corporation
NTTデータ テクノロジーカンファレンス 2019
JavaでCPUを使い倒す!
~Java 9以降のCPU最適化を覗いてみる~
2019年9月5日
株式会社NTTデータ 技術開発本部 先進基盤技術グループ 末永 恭正
#NTTDATATC
© 2019 NTT DATA Corporation 2 #NTTDATATC
“プログラムを動かす”ということ
© 2019 NTT DATA Corporation 3 #NTTDATATC
プログラムの表現方法は1つではない
There’s more than one way to do it
• Perlのモットー
• Perlに限らず、どのプログラミング言語にも言えること
public void sayHelloWorld(){
System.out.println(“Hello World”);
}
public void sayHelloWorld(){
var out = new FileOutputStream(FileDescriptor.out);
try{
out.write(“Hello World¥n”.getBytes());
}
catch(IOException e){
e.printStackTrace();
}
}
© 2019 NTT DATA Corporation 4 #NTTDATATC
プログラムをCPUで動かす方法も1つではない
処理はCPUが行う
同じプログラムでもCPUの動かし方は何通りも存在する
public void addArray(int[] a, int[] b, int[] result){
for(int i = 0; i < 8; i++){
result[i] = a[i] + b[i];
}
}
mov $7, %rcx # Loop index ([7] to [0])
1:
mov (%rax, %rcx, 4), %esi # Load a[i]
add (%rbx, %rcx, 4), %esi # a[i] + b[i]
mov %esi, (%rdi, %rcx, 4) # Store result
sub $1, %rcx # Decrement index
jns 1b
vmovdqa (%rax), %ymm1 # Load a[]
vpaddd (%rbx), %ymm1, %ymm2 # a[] + b[]
vmovdqa %ymm2, (%rdi) # Store result
© 2019 NTT DATA Corporation 5 #NTTDATATC
CPUに”いい感じに”仕事してもらう
• 効率のいいロジックを書く
• 効率のいいAPI、ライブラリなどを利用する
• コンパイラ最適化
• 様々な最適化手法
• 特定CPUにターゲティングした最適化
• プロファイリング
• 動作状況把握(分岐、引数、コールパス、etc…)
• JVMは実行時プロファイルに基づいて機械語を生成
• Just-In-Time: JIT
© 2019 NTT DATA Corporation 6 #NTTDATATC
Javaプログラムのコンパイル
javac=バイトコード生成(≠機械語生成)
• JVMが解釈可能なバイトコード「のみ」を生成
• JVMなしでは(OSが直接)実行できない
• バイトコード最適化は意味がない可能性あり
• JITによる最適化で効果が消える or 悪化する可能性あり
• 一部処理(文字列結合など)はjavacが効率よいものへ
自動変換
© 2019 NTT DATA Corporation 7 #NTTDATATC
バイトコードの実行
HotSpot(OpenJDK / Oracle JDKのJVM)の場合
1. インタープリタ
– バイトコードを逐次実行
– 実行状態をプロファイルして蓄積
2. JITコンパイル
– 複数の最適化レベルに分けて機械語に翻訳(Tier 1~4)
– メソッド全体、または一部を機械語へマルっと翻訳
– 処理によっては決まった機械語へマルっと置き換え
本日のテーマ
© 2019 NTT DATA Corporation 8 #NTTDATATC
JavaとCPU
© 2019 NTT DATA Corporation 9 #NTTDATATC
OpenJDKとチップベンダ
様々なチップベンダがOpenJDKコミュニティへパッチを寄贈
• Intel
• AMD
• Arm
• Qualcomm
• Huawei
© 2019 NTT DATA Corporation 10 #NTTDATATC
JavaとIntel製CPUのリリース時期
2014 2015 2016 2017 2018 2019
JDK 8
2014/03
JDK 9
2017/09
JDK 10
2018/03
JDK 11
2018/09
JDK 12
2019/03
JDK 13
2019/09
Broadwell
2014 Q3
Skylake
2015 Q3
Kaby Lake
2017 Q1
Coffee Lake
2017 Q4
Whiskey Lake
2018 Q3
Cascade Lake
2019 Q2
VNNIAVX-512
Ice Lake
2019 Q3
© 2019 NTT DATA Corporation 11 #NTTDATATC
JDK 8までのx86(拡張命令含む)への対応状況
• 暗号処理(AES-NI)
• 同期処理(TSX)
• SIMD
• SSEやAVXを活用したJIT生成コードのベクタライズ
• 文字列処理など、一部APIの処理置換
• Intelの最適化マニュアルに基づく改善
© 2019 NTT DATA Corporation 12 #NTTDATATC
OpenJDK 9
2017/09 – 2018/03
<< EOL’ed >>
© 2019 NTT DATA Corporation 13 #NTTDATATC
JITのコード生成に関する主な改善内容
• SIMD命令サポート
• JDK-8081247: AVX 512 extended support
• JDK-8144771: Use AVX3 instructions for string compare
• JDK-8154975: Update for vectorizedMismatch with AVX512
• JDK-8139340: SuperWord enhancement to support vector conditional move (CMovVD ) on Intel AVX cpu
• 数学ライブラリの改善
• JDK-8135028: support for vectorizing double precision sqrt
• JDK-8132207: update for x86 exp in the math lib
• JDK-8139575: update for x86 log in the math lib
• JDK-8145688: update for x86 pow in the math lib
• JDK-8143353: update for x86 sin and cos in the math lib
• JDK-8154122: Intrinsify fused mac operations on x86
• セキュリティ系ライブラリの改善
• JDK-8134553: CRC32C implementations for x86/x64 targets
• JDK-8143925: enhancing CounterMode.crypt() for AESCrypt.implEncryptBlock()
• JDK-8150767: Enables SHA Extensions on x86
• JDK-8152354: Update for x86 AES CBC Decryption
• JDK-8154495: Update for x86 SHA256 using AVX2
• JDK-8165381: Update for x86 SHA512 using AVX2
© 2019 NTT DATA Corporation 14 #NTTDATATC
AVX 512への対応
• 512ビットレジスタを使ったIntelのSIMD命令
• 2016年からXeon Phiに導入
• 一部のハイエンド向けプロセッサへも2017年から導入
• AVX512BWやAVX512DQなど複数の仕様が存在
• プロセッサによって使える命令が異なる場合あり
• Core i5など「一般向け」への導入は2019年から
© 2019 NTT DATA Corporation 15 #NTTDATATC
AVX 512:ループ処理のベクタライズ
:
vpaddd 0x50(%r8,%rbx,4),%ymm0,%ymm0
:
vpaddd 0x70(%r8,%rbx,4),%ymm0,%ymm0
:
:
vpaddd 0x90(%r8,%rbp,4),%zmm0,%zmm0
:
vpaddd 0xd0(%r8,%rbp,4),%zmm0,%zmm0
:
public void addArray(int[] a, int[] b, int[] result){
for(int i = 0; i < a.length; i++){
result[i] = a[i] + b[i];
}
}
• ZMMレジスタを使った64バイトずつの処理
• ループ処理がより効率的に!
0x70-0x50=0x20(32バイト) 0xd0-0x90=0x40(64バイト)
AVX 2 AVX 512
© 2019 NTT DATA Corporation 16 #NTTDATATC
AVX 512:文字列処理
longString.compareTo(anotherLongString);
• SIMDを使った最適化でよく出てくるネタの1つ
• JavaでもcompareTo()やindexOf()等のString操作は
よく最適化される
ランダムな文字列の比較で1.22倍の性能向上
© 2019 NTT DATA Corporation 17 #NTTDATATC
FMAへの対応
• Fused Multiply-Addの略
• 積和演算
• MAC(Multiply Accumulate)とも呼ばれる
• 信号処理でよく出てくるパターン
• C言語でもC99からfma()が導入
• 計算が速いだけでなく、浮動小数の丸め誤差の影響縮小
• Java 9からMath::fmaもAPIの仲間入り
このメソッド呼び出しを最適化
© 2019 NTT DATA Corporation 18 #NTTDATATC
例:FIRフィルタ
𝑦𝑦[𝑛𝑛] = �
𝑖𝑖=0
𝑁𝑁−1
𝐴𝐴 𝑖𝑖 𝐵𝐵[𝑛𝑛 − 𝑖𝑖]
public double calcFIR(double[] a, double[] b){
int N = a.length;
int n = N – 1;
double result = 0.0d;
for(int i = 0; i < N; i++) {
result += a[i] * b[n – i];
}
return result;
}
public double calcFIR(double[] a, double[] b){
int N = a.length;
int n = N – 1;
double result = 0.0d;
for(int i = 0; i < N; i++) {
result = Math.fma(a[i], b[n – i], result);
}
return result;
}
普通に計算 FMA利用
© 2019 NTT DATA Corporation 19 #NTTDATATC
例:FIRフィルタ
result += a[i] * b[n – i]; result = Math.fma(a[i], b[n – i], result);
vmulsd %xmm2,%xmm1,%xmm1
vaddsd %xmm0,%xmm1,%xmm1
vfmadd231sd %xmm2,%xmm1,%xmm0
JITコンパイル JITコンパイル
250112.3323524159 250112.33235242742
計算結果 計算結果
• 普通に計算した場合でもベクタライズされる
• 普通に計算:2命令、FMA:1命令
• 計算結果も若干違う!
普通に計算 FMA利用
N=1,000,000、Randomで生成した配列の計算例
© 2019 NTT DATA Corporation 20 #NTTDATATC
SHA計算
• Secure Hash Algorithm
• TLS通信などでおなじみ
• ハッシュサイズに応じて仕様が複数存在
• プロセッサのSHA-NIサポートが必須
• ただし、SHA-256とSHA-512はAVX 2のみで最適化実施
• プログラムを変更しなくても性能が稼げる!
• JDK付属のセキュリティプロバイダ(SUN)の利用が条件
MessageDigest.getInstance(“SHA-512”);
© 2019 NTT DATA Corporation 21 #NTTDATATC
OpenJDK 10
2018/03 – 2018/09
<< EOL’ed >>
© 2019 NTT DATA Corporation 22 #NTTDATATC
JITのコード生成に関する主な改善内容
• SIMD命令サポート
• JDK-8178811: Minimize the AVX <-> SSE transition penalty through generation of vzeroupper instruction on x86
• JDK-8192846: Support cmov vectorization for float
• 数学ライブラリの改善
• JDK-8181616: FMA Vectorization on x86
• JDK-8190800: Support vectorization of Math.sqrt() on floats
© 2019 NTT DATA Corporation 23 #NTTDATATC
ペナルティの改善
Intelの最適化マニュアルより
意訳: AVX命令とSSE命令が連続して実行されるときはVZEROUPPERしようね!
© 2019 NTT DATA Corporation 24 #NTTDATATC
ペナルティの改善
ココをゼロクリア
XMM (128bit)
YMM (256bit)
2551280
• SSEレジスタとAVXレジスタは一部を共有
• レガシーSSE(VEXプリフィックスなし)
実行でCPUステートに関するペナルティ発生
• 上位128bitをクリアすることで
ペナルティを回避
※CPU世代によって異なります
127
SPECjvm 2008で3%の性能改善
© 2019 NTT DATA Corporation 25 #NTTDATATC
OpenJDK 11
2018/09 –
<< Long Term Support (LTS) >>
© 2019 NTT DATA Corporation 26 #NTTDATATC
JITのコード生成に関する主な改善内容
• SIMD命令サポート
• JDK-8199421: Add support for vector popcount
• JDK-8201193: Use XMM/YMM for objects initialization
• セキュリティ系ライブラリの改善
• JDK-8205398: AES CBC decryption algorithm using AVX512 instructions
© 2019 NTT DATA Corporation 27 #NTTDATATC
オブジェクト初期化
• HotSpotはJavaオブジェクトの初期化にERMS
(Enhanced REP MOVSB)を利用
• 最適化ガイドにも書いてある、妥当な方法
• glibcのmemcpy実装などでも使われている
• ERMSをサポートしないプロセッサ向けにSSE/AVX命令
を使ったオブジェクト初期化が実装された
• コントリビューターはAMD EPYC向けを意図
• Ivy Bridge以降のIntelプロセッサは影響なし
© 2019 NTT DATA Corporation 28 #NTTDATATC
将来導入予定の命令への対応
• Intelの将来的な命令セット拡張リファレンスで
Ice Lakeから導入が予定されている命令への対応
• VAES :AES CBC暗号の復号高速化
• VPOPCNTDQ :Integer::bitCountの高速化
© 2019 NTT DATA Corporation 29 #NTTDATATC
OpenJDK 12
2019/03 – 2019/09
© 2019 NTT DATA Corporation 30 #NTTDATATC
JITのコード生成に関する主な改善内容
• SIMD命令サポート
• JDK-8210764: Update avx512 implementation
• セキュリティ系ライブラリの改善
• JDK-8214074: Optimize Ghash using AVX instructions
• その他、CPUを意識した修正
• JDK-8213479: Missing x86_64.ad patterns for 8-bit logical operators with destination in memory
• JDK-8214751: X86: Support for VNNI Instructions
© 2019 NTT DATA Corporation 31 #NTTDATATC
VNNI
• Vector Neural Network Instructions
• Intel DL Boost
• AVX 512の拡張
• ディープラーニングの推論性能を向上させる拡張命令
• Cascade Lake以降のプロセッサで利用可能
© 2019 NTT DATA Corporation 32 #NTTDATATC
VNNI
public void mulAdd(short[] in1, short[] in2, int[] out){
for(int i = 0; i < N; i++){
out[i] += ((in1[2*i] * in2[2*i]) + (in1[2*i+1] * in2[2*i+1]));
}
}
vpmaddwd %ymm0,%ymm1,%ymm0
vpaddd 0x10(%r13,%rbx,4),%ymm0,%ymm0
vpdpwssd %zmm1,%zmm2,%zmm0
• ZMMレジスタを使った64バイトずつの処理
• 掛けて足して(vpmaddwd)また足す(vpaddd)が
VNNIが提供する1命令(vpdpwssd)に
Whiskey Lake Cascade Lake
© 2019 NTT DATA Corporation 33 #NTTDATATC
OpenJDK 13
2019/09 – 2020/03
© 2019 NTT DATA Corporation 34 #NTTDATATC
JITのコード生成に関する主な改善内容
• SIMD命令サポート
• JDK-8215483: Off heap memory accesses should be vectorized
• 数学ライブラリの改善
• JDK-8217561: X86: Add floating-point Math.min/max intrinsics
• その他、CPUを意識した修正
• JDK-8216580: Fix generation of VNNI vector code by allowing adjacent LoadS nodes to be isomorphic
• JDK-8222074: Enhance auto vectorization for x86
• JDK-8217909: Make unused r12 register (without compressed oops) available to regalloc in C2
© 2019 NTT DATA Corporation 35 #NTTDATATC
レジスタの有効活用
• 圧縮Oopのヒープ情報保持目的に使っていたレジスタを
無効時に自由に使えるようにした修正
• -XX:UseCompressedOops
• 32GB以下のヒープサイズで動作するポインタ圧縮機能
• 使えるレジスタが増える=ロード/ストアの効率化
• JDK 13のリリースノートにも掲載予定
© 2019 NTT DATA Corporation 36 #NTTDATATC
レジスタの有効活用
movzbl 0x18(%r9),%r8d
;*iand {reexecute=0 rethrow=0 return_oop=0}
; - java.lang.StringLatin1::hashCode@31 (line 196)
; - java.lang.String::hashCode@29 (line 1513)
mov %r11d,%edx
add $0xfffffff9,%edx
String::hashCodeの例 ※出力を整形しています
movzbl 0x18(%r13),%edi
;*iand {reexecute=0 rethrow=0 return_oop=0}
; - java.lang.StringLatin1::hashCode@31 (line 197)
; - java.lang.String::hashCode@27 (line 1533)
mov %ebp,%r12d
add $0xfffffff9,%r12d
JDK 12
JDK 13
© 2019 NTT DATA Corporation 37 #NTTDATATC
Math::min/max
• 元々はJavadocの仕様に未準拠の動きの是正
• ±0.0
• NaN
• 比較処理が細かくなったため、AVXを使うようになった
Haswellで25%、Skylake-Xで75%の性能向上
© 2019 NTT DATA Corporation 38 #NTTDATATC
JIT生成コードを眺めてみる
© 2019 NTT DATA Corporation 39 #NTTDATATC
hsdis
• HotSpotのJIT生成コードをディスアセンブル
• 公式にはバイナリ未配布
• OpenJDKのソースから自分でビルドして利用する
• 仮に配布されていても最新版をビルドするのがオススメ
• 新しい命令に対応していない可能性があるため
https://www.slideshare.net/YaSuenag/java-9-62345544/68
© 2019 NTT DATA Corporation 40 #NTTDATATC
hsdis for Linux
1. OpenJDKソースコードの入手
2. binutilsソースコードの入手
3. <OpenJDKソース>/src/utils/hsdisの下でmake
$ make BINUTILS=<binutilsソース> ARCH=amd64
© 2019 NTT DATA Corporation 41 #NTTDATATC
hsdis for Windows
1. WSLをインストール
– ディストロは何でもOK
※ここではUbuntu 18.04 LTSを例にします
2. MinGWのインストール
3. OpenJDKソースコードの入手
4. binutilsソースコードの入手
5. <OpenJDKソース>/src/utils/hsdisの下でmake
# apt-get install gcc-mingw-w64-x86-64
$ make BINUTILS=<binutilsソース> MINGW=x86_64-w64-mingw32
© 2019 NTT DATA Corporation 42 #NTTDATATC
配置
ビルドすると出来上がるライブラリをコピー
• Linux
build/linux-amd64/hsdis-amd64.soを
$JAVA_HOME/lib/server/へコピー
• Windows
build/windows-amd64/hsdis-amd64.dllを
%JAVA_HOME%¥bin¥serverへコピー
© 2019 NTT DATA Corporation 43 #NTTDATATC
実行
• –XX:+PrintAssembly
• JITにかかったコードすべてをディスアセンブル
• 出力が膨大
• –XX:CompilerDirectivesFile=<JSONファイル>
• Java 9から導入されたJITコンパイラの挙動指定方法
• https://docs.oracle.com/javase/jp/12/vm/writing-directives.html
• 後からjcmdで設定/変更が可能 [
{
“match”: “FMATest.calcFIRFMA”,
“PrintAssembly”: true
}
]
-XX:+UnlockDiagnosticVMOptionsに加えて
以下のいずれかを使用する
© 2019 NTT DATA Corporation 44 #NTTDATATC
まとめ
© 2019 NTT DATA Corporation 45 #NTTDATATC
まとめ
• Javaは継続的に進化
• 様々なチップベンダもOpenJDKの開発に参画
• JITコンパイラは新たなCPU命令を使って
プログラムをより効率的に動かそうとする
• 将来リリースされるCPU向け最適化も先取り
© 2019 NTT DATA Corporation 46 #NTTDATATC
まとめ
• 新しいJava&新しいCPUで幸せになれるかも
• CPUが古ければJITは新たな命令を使えない
• Javaが古ければJITは新たな命令を知らない
• 効果はプログラムの作りや動きに強く依存する
(何でも、必ず速くなるとは限らない)
• Java APIを優先的に使うと幸せになれるかも
• JavaクラスライブラリはHotSpotと密に連携している
• 最小/最大、配列操作のようなものでもAPI呼び出し限定の
JIT最適化が発生することがある
• 機械語レベルの最適化はロジックの最適化が終わってから!
© 2019 NTT DATA Corporation本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。

Contenu connexe

Tendances

アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションMasahiko Sawada
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!mosa siru
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話Kumazaki Hiroki
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Masahito Zembutsu
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことAmazon Web Services Japan
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説増田 亨
 
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)NTT DATA Technology & Innovation
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean ArchitectureAtsushi Nakamura
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方増田 亨
 
インフラCICDの勘所
インフラCICDの勘所インフラCICDの勘所
インフラCICDの勘所Toru Makabe
 
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
ClassLoader Leak Patterns
ClassLoader Leak PatternsClassLoader Leak Patterns
ClassLoader Leak Patternsnekop
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Kohei Tokunaga
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところY Watanabe
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)NTT DATA Technology & Innovation
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなKentaro Matsui
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)NTT DATA Technology & Innovation
 

Tendances (20)

アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 
マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!マイクロにしすぎた結果がこれだよ!
マイクロにしすぎた結果がこれだよ!
 
本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話本当は恐ろしい分散システムの話
本当は恐ろしい分散システムの話
 
Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編Dockerfile を書くためのベストプラクティス解説編
Dockerfile を書くためのベストプラクティス解説編
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
Docker Compose 徹底解説
Docker Compose 徹底解説Docker Compose 徹底解説
Docker Compose 徹底解説
 
ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説ドメイン駆動設計サンプルコードの徹底解説
ドメイン駆動設計サンプルコードの徹底解説
 
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
オレ流のOpenJDKの開発環境(JJUG CCC 2019 Fall講演資料)
 
世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture世界一わかりやすいClean Architecture
世界一わかりやすいClean Architecture
 
ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方ドメイン駆動設計のための Spring の上手な使い方
ドメイン駆動設計のための Spring の上手な使い方
 
Mavenの真実とウソ
Mavenの真実とウソMavenの真実とウソ
Mavenの真実とウソ
 
インフラCICDの勘所
インフラCICDの勘所インフラCICDの勘所
インフラCICDの勘所
 
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
 
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
ClassLoader Leak Patterns
ClassLoader Leak PatternsClassLoader Leak Patterns
ClassLoader Leak Patterns
 
Dockerからcontainerdへの移行
Dockerからcontainerdへの移行Dockerからcontainerdへの移行
Dockerからcontainerdへの移行
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
テスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるなテスト文字列に「うんこ」と入れるな
テスト文字列に「うんこ」と入れるな
 
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
モノリスからマイクロサービスへの移行 ~ストラングラーパターンの検証~(Spring Fest 2020講演資料)
 

Similaire à JavaでCPUを使い倒す! ~Java 9 以降の CPU 最適化を覗いてみる~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)

Toward Scalable and Powerful CloudStack
Toward Scalable and Powerful CloudStackToward Scalable and Powerful CloudStack
Toward Scalable and Powerful CloudStackTakashi Kanai
 
Arm Neoverse solutions @Graviton2-AWS Japan Webinar Oct2020
Arm Neoverse solutions @Graviton2-AWS Japan Webinar Oct2020Arm Neoverse solutions @Graviton2-AWS Japan Webinar Oct2020
Arm Neoverse solutions @Graviton2-AWS Japan Webinar Oct2020Toshinori Kujiraoka
 
Speeding up Programs with OpenACC in GCC
Speeding up Programs with OpenACC in GCCSpeeding up Programs with OpenACC in GCC
Speeding up Programs with OpenACC in GCCinside-BigData.com
 
Connectivity is here (5 g, swarm,...). now, let's build interplanetary apps! (1)
Connectivity is here (5 g, swarm,...). now, let's build interplanetary apps! (1)Connectivity is here (5 g, swarm,...). now, let's build interplanetary apps! (1)
Connectivity is here (5 g, swarm,...). now, let's build interplanetary apps! (1)Samy Fodil
 
DATE 2020: Design, Automation and Test in Europe Conference
DATE 2020: Design, Automation and Test in Europe ConferenceDATE 2020: Design, Automation and Test in Europe Conference
DATE 2020: Design, Automation and Test in Europe ConferenceLEGATO project
 
Brain in the Cloud: Machine Learning on OpenStack & Kubernetes Done Right - E...
Brain in the Cloud: Machine Learning on OpenStack & Kubernetes Done Right - E...Brain in the Cloud: Machine Learning on OpenStack & Kubernetes Done Right - E...
Brain in the Cloud: Machine Learning on OpenStack & Kubernetes Done Right - E...Cloud Native Day Tel Aviv
 
“Acceleration of Deep Learning Using OpenVINO: 3D Seismic Case Study,” a Pres...
“Acceleration of Deep Learning Using OpenVINO: 3D Seismic Case Study,” a Pres...“Acceleration of Deep Learning Using OpenVINO: 3D Seismic Case Study,” a Pres...
“Acceleration of Deep Learning Using OpenVINO: 3D Seismic Case Study,” a Pres...Edge AI and Vision Alliance
 
Accelerating SDN/NFV with transparent offloading architecture
Accelerating SDN/NFV with transparent offloading architectureAccelerating SDN/NFV with transparent offloading architecture
Accelerating SDN/NFV with transparent offloading architectureOpen Networking Summits
 
Open power topics20191023
Open power topics20191023Open power topics20191023
Open power topics20191023Yutaka Kawai
 
No More Cumbersomeness: Automatic Predictive Modeling on Apache Spark with Ma...
No More Cumbersomeness: Automatic Predictive Modeling on Apache Spark with Ma...No More Cumbersomeness: Automatic Predictive Modeling on Apache Spark with Ma...
No More Cumbersomeness: Automatic Predictive Modeling on Apache Spark with Ma...Databricks
 
P4 Introduction
P4 Introduction P4 Introduction
P4 Introduction Netronome
 
TechWiseTV Workshop: Extending Intent-Based Networking to IoT
TechWiseTV Workshop: Extending Intent-Based Networking to IoTTechWiseTV Workshop: Extending Intent-Based Networking to IoT
TechWiseTV Workshop: Extending Intent-Based Networking to IoTRobb Boyd
 
PCCC23:日本AMD株式会社 テーマ1「AMD Instinct™ アクセラレーターの概要」
PCCC23:日本AMD株式会社 テーマ1「AMD Instinct™ アクセラレーターの概要」PCCC23:日本AMD株式会社 テーマ1「AMD Instinct™ アクセラレーターの概要」
PCCC23:日本AMD株式会社 テーマ1「AMD Instinct™ アクセラレーターの概要」PC Cluster Consortium
 
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”Databricks
 
Scaling Prometheus Metrics in Kubernetes with Telegraf | Chris Goller | Influ...
Scaling Prometheus Metrics in Kubernetes with Telegraf | Chris Goller | Influ...Scaling Prometheus Metrics in Kubernetes with Telegraf | Chris Goller | Influ...
Scaling Prometheus Metrics in Kubernetes with Telegraf | Chris Goller | Influ...InfluxData
 
Challenges of applying Blockchain to enterprise systems in NTTDATA
Challenges of applying Blockchain to enterprise systems in NTTDATAChallenges of applying Blockchain to enterprise systems in NTTDATA
Challenges of applying Blockchain to enterprise systems in NTTDATAHyperleger Tokyo Meetup
 
"Deploying Deep Learning Models on Embedded Processors for Autonomous Systems...
"Deploying Deep Learning Models on Embedded Processors for Autonomous Systems..."Deploying Deep Learning Models on Embedded Processors for Autonomous Systems...
"Deploying Deep Learning Models on Embedded Processors for Autonomous Systems...Edge AI and Vision Alliance
 
“Getting Efficient DNN Inference Performance: Is It Really About the TOPS?,” ...
“Getting Efficient DNN Inference Performance: Is It Really About the TOPS?,” ...“Getting Efficient DNN Inference Performance: Is It Really About the TOPS?,” ...
“Getting Efficient DNN Inference Performance: Is It Really About the TOPS?,” ...Edge AI and Vision Alliance
 

Similaire à JavaでCPUを使い倒す! ~Java 9 以降の CPU 最適化を覗いてみる~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05) (20)

Toward Scalable and Powerful CloudStack
Toward Scalable and Powerful CloudStackToward Scalable and Powerful CloudStack
Toward Scalable and Powerful CloudStack
 
Arm Neoverse solutions @Graviton2-AWS Japan Webinar Oct2020
Arm Neoverse solutions @Graviton2-AWS Japan Webinar Oct2020Arm Neoverse solutions @Graviton2-AWS Japan Webinar Oct2020
Arm Neoverse solutions @Graviton2-AWS Japan Webinar Oct2020
 
Speeding up Programs with OpenACC in GCC
Speeding up Programs with OpenACC in GCCSpeeding up Programs with OpenACC in GCC
Speeding up Programs with OpenACC in GCC
 
Connectivity is here (5 g, swarm,...). now, let's build interplanetary apps! (1)
Connectivity is here (5 g, swarm,...). now, let's build interplanetary apps! (1)Connectivity is here (5 g, swarm,...). now, let's build interplanetary apps! (1)
Connectivity is here (5 g, swarm,...). now, let's build interplanetary apps! (1)
 
DATE 2020: Design, Automation and Test in Europe Conference
DATE 2020: Design, Automation and Test in Europe ConferenceDATE 2020: Design, Automation and Test in Europe Conference
DATE 2020: Design, Automation and Test in Europe Conference
 
Brain in the Cloud: Machine Learning on OpenStack & Kubernetes Done Right - E...
Brain in the Cloud: Machine Learning on OpenStack & Kubernetes Done Right - E...Brain in the Cloud: Machine Learning on OpenStack & Kubernetes Done Right - E...
Brain in the Cloud: Machine Learning on OpenStack & Kubernetes Done Right - E...
 
5G Network Introduction
5G Network Introduction5G Network Introduction
5G Network Introduction
 
Deep Learning Edge
Deep Learning Edge Deep Learning Edge
Deep Learning Edge
 
“Acceleration of Deep Learning Using OpenVINO: 3D Seismic Case Study,” a Pres...
“Acceleration of Deep Learning Using OpenVINO: 3D Seismic Case Study,” a Pres...“Acceleration of Deep Learning Using OpenVINO: 3D Seismic Case Study,” a Pres...
“Acceleration of Deep Learning Using OpenVINO: 3D Seismic Case Study,” a Pres...
 
Accelerating SDN/NFV with transparent offloading architecture
Accelerating SDN/NFV with transparent offloading architectureAccelerating SDN/NFV with transparent offloading architecture
Accelerating SDN/NFV with transparent offloading architecture
 
Open power topics20191023
Open power topics20191023Open power topics20191023
Open power topics20191023
 
No More Cumbersomeness: Automatic Predictive Modeling on Apache Spark with Ma...
No More Cumbersomeness: Automatic Predictive Modeling on Apache Spark with Ma...No More Cumbersomeness: Automatic Predictive Modeling on Apache Spark with Ma...
No More Cumbersomeness: Automatic Predictive Modeling on Apache Spark with Ma...
 
P4 Introduction
P4 Introduction P4 Introduction
P4 Introduction
 
TechWiseTV Workshop: Extending Intent-Based Networking to IoT
TechWiseTV Workshop: Extending Intent-Based Networking to IoTTechWiseTV Workshop: Extending Intent-Based Networking to IoT
TechWiseTV Workshop: Extending Intent-Based Networking to IoT
 
PCCC23:日本AMD株式会社 テーマ1「AMD Instinct™ アクセラレーターの概要」
PCCC23:日本AMD株式会社 テーマ1「AMD Instinct™ アクセラレーターの概要」PCCC23:日本AMD株式会社 テーマ1「AMD Instinct™ アクセラレーターの概要」
PCCC23:日本AMD株式会社 テーマ1「AMD Instinct™ アクセラレーターの概要」
 
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”
Accelerating Spark MLlib and DataFrame with Vector Processor “SX-Aurora TSUBASA”
 
Scaling Prometheus Metrics in Kubernetes with Telegraf | Chris Goller | Influ...
Scaling Prometheus Metrics in Kubernetes with Telegraf | Chris Goller | Influ...Scaling Prometheus Metrics in Kubernetes with Telegraf | Chris Goller | Influ...
Scaling Prometheus Metrics in Kubernetes with Telegraf | Chris Goller | Influ...
 
Challenges of applying Blockchain to enterprise systems in NTTDATA
Challenges of applying Blockchain to enterprise systems in NTTDATAChallenges of applying Blockchain to enterprise systems in NTTDATA
Challenges of applying Blockchain to enterprise systems in NTTDATA
 
"Deploying Deep Learning Models on Embedded Processors for Autonomous Systems...
"Deploying Deep Learning Models on Embedded Processors for Autonomous Systems..."Deploying Deep Learning Models on Embedded Processors for Autonomous Systems...
"Deploying Deep Learning Models on Embedded Processors for Autonomous Systems...
 
“Getting Efficient DNN Inference Performance: Is It Really About the TOPS?,” ...
“Getting Efficient DNN Inference Performance: Is It Really About the TOPS?,” ...“Getting Efficient DNN Inference Performance: Is It Really About the TOPS?,” ...
“Getting Efficient DNN Inference Performance: Is It Really About the TOPS?,” ...
 

Plus de NTT DATA Technology & Innovation

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NTT DATA Technology & Innovation
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)NTT DATA Technology & Innovation
 
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方NTT DATA Technology & Innovation
 
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...NTT DATA Technology & Innovation
 
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)NTT DATA Technology & Innovation
 
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)NTT DATA Technology & Innovation
 
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...NTT DATA Technology & Innovation
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)NTT DATA Technology & Innovation
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)NTT DATA Technology & Innovation
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...NTT DATA Technology & Innovation
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)NTT DATA Technology & Innovation
 
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)NTT DATA Technology & Innovation
 
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)NTT DATA Technology & Innovation
 
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...NTT DATA Technology & Innovation
 
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)NTT DATA Technology & Innovation
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)NTT DATA Technology & Innovation
 
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)NTT DATA Technology & Innovation
 

Plus de NTT DATA Technology & Innovation (20)

NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
 
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
 
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
 
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
 
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
 
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
 
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
 
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
 
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
 

Dernier

AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherRemote DBA Services
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxRemote DBA Services
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024The Digital Insurer
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 

Dernier (20)

AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 

JavaでCPUを使い倒す! ~Java 9 以降の CPU 最適化を覗いてみる~(NTTデータ テクノロジーカンファレンス 2019 講演資料、2019/09/05)

  • 1. © 2019 NTT DATA Corporation 1 © 2019 NTT DATA Corporation NTTデータ テクノロジーカンファレンス 2019 JavaでCPUを使い倒す! ~Java 9以降のCPU最適化を覗いてみる~ 2019年9月5日 株式会社NTTデータ 技術開発本部 先進基盤技術グループ 末永 恭正 #NTTDATATC
  • 2. © 2019 NTT DATA Corporation 2 #NTTDATATC “プログラムを動かす”ということ
  • 3. © 2019 NTT DATA Corporation 3 #NTTDATATC プログラムの表現方法は1つではない There’s more than one way to do it • Perlのモットー • Perlに限らず、どのプログラミング言語にも言えること public void sayHelloWorld(){ System.out.println(“Hello World”); } public void sayHelloWorld(){ var out = new FileOutputStream(FileDescriptor.out); try{ out.write(“Hello World¥n”.getBytes()); } catch(IOException e){ e.printStackTrace(); } }
  • 4. © 2019 NTT DATA Corporation 4 #NTTDATATC プログラムをCPUで動かす方法も1つではない 処理はCPUが行う 同じプログラムでもCPUの動かし方は何通りも存在する public void addArray(int[] a, int[] b, int[] result){ for(int i = 0; i < 8; i++){ result[i] = a[i] + b[i]; } } mov $7, %rcx # Loop index ([7] to [0]) 1: mov (%rax, %rcx, 4), %esi # Load a[i] add (%rbx, %rcx, 4), %esi # a[i] + b[i] mov %esi, (%rdi, %rcx, 4) # Store result sub $1, %rcx # Decrement index jns 1b vmovdqa (%rax), %ymm1 # Load a[] vpaddd (%rbx), %ymm1, %ymm2 # a[] + b[] vmovdqa %ymm2, (%rdi) # Store result
  • 5. © 2019 NTT DATA Corporation 5 #NTTDATATC CPUに”いい感じに”仕事してもらう • 効率のいいロジックを書く • 効率のいいAPI、ライブラリなどを利用する • コンパイラ最適化 • 様々な最適化手法 • 特定CPUにターゲティングした最適化 • プロファイリング • 動作状況把握(分岐、引数、コールパス、etc…) • JVMは実行時プロファイルに基づいて機械語を生成 • Just-In-Time: JIT
  • 6. © 2019 NTT DATA Corporation 6 #NTTDATATC Javaプログラムのコンパイル javac=バイトコード生成(≠機械語生成) • JVMが解釈可能なバイトコード「のみ」を生成 • JVMなしでは(OSが直接)実行できない • バイトコード最適化は意味がない可能性あり • JITによる最適化で効果が消える or 悪化する可能性あり • 一部処理(文字列結合など)はjavacが効率よいものへ 自動変換
  • 7. © 2019 NTT DATA Corporation 7 #NTTDATATC バイトコードの実行 HotSpot(OpenJDK / Oracle JDKのJVM)の場合 1. インタープリタ – バイトコードを逐次実行 – 実行状態をプロファイルして蓄積 2. JITコンパイル – 複数の最適化レベルに分けて機械語に翻訳(Tier 1~4) – メソッド全体、または一部を機械語へマルっと翻訳 – 処理によっては決まった機械語へマルっと置き換え 本日のテーマ
  • 8. © 2019 NTT DATA Corporation 8 #NTTDATATC JavaとCPU
  • 9. © 2019 NTT DATA Corporation 9 #NTTDATATC OpenJDKとチップベンダ 様々なチップベンダがOpenJDKコミュニティへパッチを寄贈 • Intel • AMD • Arm • Qualcomm • Huawei
  • 10. © 2019 NTT DATA Corporation 10 #NTTDATATC JavaとIntel製CPUのリリース時期 2014 2015 2016 2017 2018 2019 JDK 8 2014/03 JDK 9 2017/09 JDK 10 2018/03 JDK 11 2018/09 JDK 12 2019/03 JDK 13 2019/09 Broadwell 2014 Q3 Skylake 2015 Q3 Kaby Lake 2017 Q1 Coffee Lake 2017 Q4 Whiskey Lake 2018 Q3 Cascade Lake 2019 Q2 VNNIAVX-512 Ice Lake 2019 Q3
  • 11. © 2019 NTT DATA Corporation 11 #NTTDATATC JDK 8までのx86(拡張命令含む)への対応状況 • 暗号処理(AES-NI) • 同期処理(TSX) • SIMD • SSEやAVXを活用したJIT生成コードのベクタライズ • 文字列処理など、一部APIの処理置換 • Intelの最適化マニュアルに基づく改善
  • 12. © 2019 NTT DATA Corporation 12 #NTTDATATC OpenJDK 9 2017/09 – 2018/03 << EOL’ed >>
  • 13. © 2019 NTT DATA Corporation 13 #NTTDATATC JITのコード生成に関する主な改善内容 • SIMD命令サポート • JDK-8081247: AVX 512 extended support • JDK-8144771: Use AVX3 instructions for string compare • JDK-8154975: Update for vectorizedMismatch with AVX512 • JDK-8139340: SuperWord enhancement to support vector conditional move (CMovVD ) on Intel AVX cpu • 数学ライブラリの改善 • JDK-8135028: support for vectorizing double precision sqrt • JDK-8132207: update for x86 exp in the math lib • JDK-8139575: update for x86 log in the math lib • JDK-8145688: update for x86 pow in the math lib • JDK-8143353: update for x86 sin and cos in the math lib • JDK-8154122: Intrinsify fused mac operations on x86 • セキュリティ系ライブラリの改善 • JDK-8134553: CRC32C implementations for x86/x64 targets • JDK-8143925: enhancing CounterMode.crypt() for AESCrypt.implEncryptBlock() • JDK-8150767: Enables SHA Extensions on x86 • JDK-8152354: Update for x86 AES CBC Decryption • JDK-8154495: Update for x86 SHA256 using AVX2 • JDK-8165381: Update for x86 SHA512 using AVX2
  • 14. © 2019 NTT DATA Corporation 14 #NTTDATATC AVX 512への対応 • 512ビットレジスタを使ったIntelのSIMD命令 • 2016年からXeon Phiに導入 • 一部のハイエンド向けプロセッサへも2017年から導入 • AVX512BWやAVX512DQなど複数の仕様が存在 • プロセッサによって使える命令が異なる場合あり • Core i5など「一般向け」への導入は2019年から
  • 15. © 2019 NTT DATA Corporation 15 #NTTDATATC AVX 512:ループ処理のベクタライズ : vpaddd 0x50(%r8,%rbx,4),%ymm0,%ymm0 : vpaddd 0x70(%r8,%rbx,4),%ymm0,%ymm0 : : vpaddd 0x90(%r8,%rbp,4),%zmm0,%zmm0 : vpaddd 0xd0(%r8,%rbp,4),%zmm0,%zmm0 : public void addArray(int[] a, int[] b, int[] result){ for(int i = 0; i < a.length; i++){ result[i] = a[i] + b[i]; } } • ZMMレジスタを使った64バイトずつの処理 • ループ処理がより効率的に! 0x70-0x50=0x20(32バイト) 0xd0-0x90=0x40(64バイト) AVX 2 AVX 512
  • 16. © 2019 NTT DATA Corporation 16 #NTTDATATC AVX 512:文字列処理 longString.compareTo(anotherLongString); • SIMDを使った最適化でよく出てくるネタの1つ • JavaでもcompareTo()やindexOf()等のString操作は よく最適化される ランダムな文字列の比較で1.22倍の性能向上
  • 17. © 2019 NTT DATA Corporation 17 #NTTDATATC FMAへの対応 • Fused Multiply-Addの略 • 積和演算 • MAC(Multiply Accumulate)とも呼ばれる • 信号処理でよく出てくるパターン • C言語でもC99からfma()が導入 • 計算が速いだけでなく、浮動小数の丸め誤差の影響縮小 • Java 9からMath::fmaもAPIの仲間入り このメソッド呼び出しを最適化
  • 18. © 2019 NTT DATA Corporation 18 #NTTDATATC 例:FIRフィルタ 𝑦𝑦[𝑛𝑛] = � 𝑖𝑖=0 𝑁𝑁−1 𝐴𝐴 𝑖𝑖 𝐵𝐵[𝑛𝑛 − 𝑖𝑖] public double calcFIR(double[] a, double[] b){ int N = a.length; int n = N – 1; double result = 0.0d; for(int i = 0; i < N; i++) { result += a[i] * b[n – i]; } return result; } public double calcFIR(double[] a, double[] b){ int N = a.length; int n = N – 1; double result = 0.0d; for(int i = 0; i < N; i++) { result = Math.fma(a[i], b[n – i], result); } return result; } 普通に計算 FMA利用
  • 19. © 2019 NTT DATA Corporation 19 #NTTDATATC 例:FIRフィルタ result += a[i] * b[n – i]; result = Math.fma(a[i], b[n – i], result); vmulsd %xmm2,%xmm1,%xmm1 vaddsd %xmm0,%xmm1,%xmm1 vfmadd231sd %xmm2,%xmm1,%xmm0 JITコンパイル JITコンパイル 250112.3323524159 250112.33235242742 計算結果 計算結果 • 普通に計算した場合でもベクタライズされる • 普通に計算:2命令、FMA:1命令 • 計算結果も若干違う! 普通に計算 FMA利用 N=1,000,000、Randomで生成した配列の計算例
  • 20. © 2019 NTT DATA Corporation 20 #NTTDATATC SHA計算 • Secure Hash Algorithm • TLS通信などでおなじみ • ハッシュサイズに応じて仕様が複数存在 • プロセッサのSHA-NIサポートが必須 • ただし、SHA-256とSHA-512はAVX 2のみで最適化実施 • プログラムを変更しなくても性能が稼げる! • JDK付属のセキュリティプロバイダ(SUN)の利用が条件 MessageDigest.getInstance(“SHA-512”);
  • 21. © 2019 NTT DATA Corporation 21 #NTTDATATC OpenJDK 10 2018/03 – 2018/09 << EOL’ed >>
  • 22. © 2019 NTT DATA Corporation 22 #NTTDATATC JITのコード生成に関する主な改善内容 • SIMD命令サポート • JDK-8178811: Minimize the AVX <-> SSE transition penalty through generation of vzeroupper instruction on x86 • JDK-8192846: Support cmov vectorization for float • 数学ライブラリの改善 • JDK-8181616: FMA Vectorization on x86 • JDK-8190800: Support vectorization of Math.sqrt() on floats
  • 23. © 2019 NTT DATA Corporation 23 #NTTDATATC ペナルティの改善 Intelの最適化マニュアルより 意訳: AVX命令とSSE命令が連続して実行されるときはVZEROUPPERしようね!
  • 24. © 2019 NTT DATA Corporation 24 #NTTDATATC ペナルティの改善 ココをゼロクリア XMM (128bit) YMM (256bit) 2551280 • SSEレジスタとAVXレジスタは一部を共有 • レガシーSSE(VEXプリフィックスなし) 実行でCPUステートに関するペナルティ発生 • 上位128bitをクリアすることで ペナルティを回避 ※CPU世代によって異なります 127 SPECjvm 2008で3%の性能改善
  • 25. © 2019 NTT DATA Corporation 25 #NTTDATATC OpenJDK 11 2018/09 – << Long Term Support (LTS) >>
  • 26. © 2019 NTT DATA Corporation 26 #NTTDATATC JITのコード生成に関する主な改善内容 • SIMD命令サポート • JDK-8199421: Add support for vector popcount • JDK-8201193: Use XMM/YMM for objects initialization • セキュリティ系ライブラリの改善 • JDK-8205398: AES CBC decryption algorithm using AVX512 instructions
  • 27. © 2019 NTT DATA Corporation 27 #NTTDATATC オブジェクト初期化 • HotSpotはJavaオブジェクトの初期化にERMS (Enhanced REP MOVSB)を利用 • 最適化ガイドにも書いてある、妥当な方法 • glibcのmemcpy実装などでも使われている • ERMSをサポートしないプロセッサ向けにSSE/AVX命令 を使ったオブジェクト初期化が実装された • コントリビューターはAMD EPYC向けを意図 • Ivy Bridge以降のIntelプロセッサは影響なし
  • 28. © 2019 NTT DATA Corporation 28 #NTTDATATC 将来導入予定の命令への対応 • Intelの将来的な命令セット拡張リファレンスで Ice Lakeから導入が予定されている命令への対応 • VAES :AES CBC暗号の復号高速化 • VPOPCNTDQ :Integer::bitCountの高速化
  • 29. © 2019 NTT DATA Corporation 29 #NTTDATATC OpenJDK 12 2019/03 – 2019/09
  • 30. © 2019 NTT DATA Corporation 30 #NTTDATATC JITのコード生成に関する主な改善内容 • SIMD命令サポート • JDK-8210764: Update avx512 implementation • セキュリティ系ライブラリの改善 • JDK-8214074: Optimize Ghash using AVX instructions • その他、CPUを意識した修正 • JDK-8213479: Missing x86_64.ad patterns for 8-bit logical operators with destination in memory • JDK-8214751: X86: Support for VNNI Instructions
  • 31. © 2019 NTT DATA Corporation 31 #NTTDATATC VNNI • Vector Neural Network Instructions • Intel DL Boost • AVX 512の拡張 • ディープラーニングの推論性能を向上させる拡張命令 • Cascade Lake以降のプロセッサで利用可能
  • 32. © 2019 NTT DATA Corporation 32 #NTTDATATC VNNI public void mulAdd(short[] in1, short[] in2, int[] out){ for(int i = 0; i < N; i++){ out[i] += ((in1[2*i] * in2[2*i]) + (in1[2*i+1] * in2[2*i+1])); } } vpmaddwd %ymm0,%ymm1,%ymm0 vpaddd 0x10(%r13,%rbx,4),%ymm0,%ymm0 vpdpwssd %zmm1,%zmm2,%zmm0 • ZMMレジスタを使った64バイトずつの処理 • 掛けて足して(vpmaddwd)また足す(vpaddd)が VNNIが提供する1命令(vpdpwssd)に Whiskey Lake Cascade Lake
  • 33. © 2019 NTT DATA Corporation 33 #NTTDATATC OpenJDK 13 2019/09 – 2020/03
  • 34. © 2019 NTT DATA Corporation 34 #NTTDATATC JITのコード生成に関する主な改善内容 • SIMD命令サポート • JDK-8215483: Off heap memory accesses should be vectorized • 数学ライブラリの改善 • JDK-8217561: X86: Add floating-point Math.min/max intrinsics • その他、CPUを意識した修正 • JDK-8216580: Fix generation of VNNI vector code by allowing adjacent LoadS nodes to be isomorphic • JDK-8222074: Enhance auto vectorization for x86 • JDK-8217909: Make unused r12 register (without compressed oops) available to regalloc in C2
  • 35. © 2019 NTT DATA Corporation 35 #NTTDATATC レジスタの有効活用 • 圧縮Oopのヒープ情報保持目的に使っていたレジスタを 無効時に自由に使えるようにした修正 • -XX:UseCompressedOops • 32GB以下のヒープサイズで動作するポインタ圧縮機能 • 使えるレジスタが増える=ロード/ストアの効率化 • JDK 13のリリースノートにも掲載予定
  • 36. © 2019 NTT DATA Corporation 36 #NTTDATATC レジスタの有効活用 movzbl 0x18(%r9),%r8d ;*iand {reexecute=0 rethrow=0 return_oop=0} ; - java.lang.StringLatin1::hashCode@31 (line 196) ; - java.lang.String::hashCode@29 (line 1513) mov %r11d,%edx add $0xfffffff9,%edx String::hashCodeの例 ※出力を整形しています movzbl 0x18(%r13),%edi ;*iand {reexecute=0 rethrow=0 return_oop=0} ; - java.lang.StringLatin1::hashCode@31 (line 197) ; - java.lang.String::hashCode@27 (line 1533) mov %ebp,%r12d add $0xfffffff9,%r12d JDK 12 JDK 13
  • 37. © 2019 NTT DATA Corporation 37 #NTTDATATC Math::min/max • 元々はJavadocの仕様に未準拠の動きの是正 • ±0.0 • NaN • 比較処理が細かくなったため、AVXを使うようになった Haswellで25%、Skylake-Xで75%の性能向上
  • 38. © 2019 NTT DATA Corporation 38 #NTTDATATC JIT生成コードを眺めてみる
  • 39. © 2019 NTT DATA Corporation 39 #NTTDATATC hsdis • HotSpotのJIT生成コードをディスアセンブル • 公式にはバイナリ未配布 • OpenJDKのソースから自分でビルドして利用する • 仮に配布されていても最新版をビルドするのがオススメ • 新しい命令に対応していない可能性があるため https://www.slideshare.net/YaSuenag/java-9-62345544/68
  • 40. © 2019 NTT DATA Corporation 40 #NTTDATATC hsdis for Linux 1. OpenJDKソースコードの入手 2. binutilsソースコードの入手 3. <OpenJDKソース>/src/utils/hsdisの下でmake $ make BINUTILS=<binutilsソース> ARCH=amd64
  • 41. © 2019 NTT DATA Corporation 41 #NTTDATATC hsdis for Windows 1. WSLをインストール – ディストロは何でもOK ※ここではUbuntu 18.04 LTSを例にします 2. MinGWのインストール 3. OpenJDKソースコードの入手 4. binutilsソースコードの入手 5. <OpenJDKソース>/src/utils/hsdisの下でmake # apt-get install gcc-mingw-w64-x86-64 $ make BINUTILS=<binutilsソース> MINGW=x86_64-w64-mingw32
  • 42. © 2019 NTT DATA Corporation 42 #NTTDATATC 配置 ビルドすると出来上がるライブラリをコピー • Linux build/linux-amd64/hsdis-amd64.soを $JAVA_HOME/lib/server/へコピー • Windows build/windows-amd64/hsdis-amd64.dllを %JAVA_HOME%¥bin¥serverへコピー
  • 43. © 2019 NTT DATA Corporation 43 #NTTDATATC 実行 • –XX:+PrintAssembly • JITにかかったコードすべてをディスアセンブル • 出力が膨大 • –XX:CompilerDirectivesFile=<JSONファイル> • Java 9から導入されたJITコンパイラの挙動指定方法 • https://docs.oracle.com/javase/jp/12/vm/writing-directives.html • 後からjcmdで設定/変更が可能 [ { “match”: “FMATest.calcFIRFMA”, “PrintAssembly”: true } ] -XX:+UnlockDiagnosticVMOptionsに加えて 以下のいずれかを使用する
  • 44. © 2019 NTT DATA Corporation 44 #NTTDATATC まとめ
  • 45. © 2019 NTT DATA Corporation 45 #NTTDATATC まとめ • Javaは継続的に進化 • 様々なチップベンダもOpenJDKの開発に参画 • JITコンパイラは新たなCPU命令を使って プログラムをより効率的に動かそうとする • 将来リリースされるCPU向け最適化も先取り
  • 46. © 2019 NTT DATA Corporation 46 #NTTDATATC まとめ • 新しいJava&新しいCPUで幸せになれるかも • CPUが古ければJITは新たな命令を使えない • Javaが古ければJITは新たな命令を知らない • 効果はプログラムの作りや動きに強く依存する (何でも、必ず速くなるとは限らない) • Java APIを優先的に使うと幸せになれるかも • JavaクラスライブラリはHotSpotと密に連携している • 最小/最大、配列操作のようなものでもAPI呼び出し限定の JIT最適化が発生することがある • 機械語レベルの最適化はロジックの最適化が終わってから!
  • 47. © 2019 NTT DATA Corporation本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。