SlideShare a Scribd company logo
1 of 23
Download to read offline
浮動小数点列(IEEE754)を圧縮したい	
2013/9/1	
  
maropu@DSIRNLP#4	
  	
  
1
本日の概要	
•  背景と動機	
  
•  浮動小数点(IEEE754)表現に関して	
  
–  IEEE754に関する雑談	
  
•  圧縮方法の概要と設計	
  
•  簡単な性能評価	
  
•  参考	
  
2
皆さんfloat/doubleは使いますよね?	
•  類似度、時間、地理情報・・・・の表現に	
  
3	
double *data = new double[10000];	
これをコンパクトにシリアライズすることが本日の目的
浮動小数点列圧縮の応用	
•  数値計算分野では一般的?[1][2][3]	
  
•  Enterprise向けではあまり応用例を聞かない	
  
–  特にRDBMS分野では・・・	
  
4
浮動小数点列圧縮の応用	
•  Ex.)	
  Amazon	
  RedshiN	
  
–  サポートしている型*	
  
•  SMALLINT,	
  INTEGER,	
  BIGINT,	
  DECIMAL,	
  REAL,	
  DOUBLE	
  PRECISION,	
  
BOOLEAN,	
  CHAR,	
  VARCHAR,	
  DATE,	
  TIMESTAMP	
  
–  サポートしている圧縮形式	
  
•  BYTEDICT,	
  DELTA,	
  DELTA32K,	
  MOSTLY8,	
  MOSTLY16,	
  MOSTLY32,	
  
RAW,	
  RUNLENGTH,	
  TEXT255,	
  TEXT32K	
  
•  READ/DOUBLE	
  PRECISIONに対応した圧縮形式がない?	
  
5	
*http://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_NEW.html
浮動小数点表現の形式	
•  浮動小数点表現の様々な形式*	
  
IEEE754	
  
最も有名な標準規格	
  
符号/指数部/仮数部が単精度で1/8/23bit、倍精度で1/11/52bit	
  
	
  
80bit拡張倍精度	
  
x87内部で利用されている	
  
指数部15bit、仮数部64bitで表現	
  
正規化された仮数部の最上位bitは省略されない	
  
	
  
IBM形式	
  
IBM	
  System360等のMFで主に使われた形式	
  
指数部が2ではなく16のべき乗	
  
単精度で指数部7bit、仮数部24bitで表現	
  
6	
*Wikipeadia: http://ja.wikipedia.org/wiki/浮動小数点
余談1	
  最近のx64のIEEE754の計算	
•  デフォルトではSSEを利用した浮動小数点計算	
  
7	
例: double c = 1.0 + 2.0;	
# gcc -S -masm=intel -o - xxx.cc
movabs rax, 4607182418800017408
mov QWORD PTR [rbp-24], rax
movabs rax, 4611686018427387904
mov QWORD PTR [rbp-16], rax
movsd xmm0, QWORD PTR [rbp-24]
addsd xmm0, QWORD PTR [rbp-16]	
IEEE754形式
余談1	
  最近のx64のIEEE754の計算	
•  ‘-­‐mfpmath=387’でx87の80bit拡張倍精度計算	
  
8	
例: double c = 1.0 + 2.0;	
# gcc -S -mfpmath=387 -masm=intel -o - xxx.cc
movabs rax, 4607182418800017408
mov QWORD PTR [rbp-24], rax
movabs rax, 4611686018427387904
mov QWORD PTR [rbp-16], rax
fld QWORD PTR [rbp-24]
fadd QWORD PTR [rbp-16]
fstp QWORD PTR [rbp-8]	
FPUスタックモデルによる演算
余談2	
  IEEE754の整数隣接性	
•  隣りあう浮動小数点数は整数表現でも隣接	
  [4]	
  
–  IEEE754規格化以前では無い特性だったらしい	
  
	
  
9
余談2	
  IEEE754の整数隣接性	
•  Ex.)	
  浮動小数点列の並び替えの改善	
  
–  順序等価な整数に変換して処理	
  
–  浮動小数点比較ucmisdと整数比較cmpのコスト[6]	
  
•  ucomisd:	
  latency	
  6-­‐7,	
  throughput	
  2	
  
•  cmp:	
  latency	
  1,	
  throughput	
  1	
  
10	
Radix Tricks	
uint32_t flipFloat(uint32_t ieee754) {
uint32_t mask = (ieee754  31) | 0x80000000;
return ieee754 ^ mask;
}	
CUDAのRadixSortのサンプル実装で利用
- http://docs.nvidia.com/cuda/cuda-samples/index.html
余談3	
  IEEE754とコンパイラ最適化	
•  浮動小数点はcommutahveではない	
  
–  丸め誤差や桁落ちの影響	
  
•  ‘gcc	
  -­‐-­‐fast-­‐math’計算順序最適化	
  
–  精度は悪くなるが、コンパイラ最適化がかかりやすくなる	
  
–  ベクトル化とかFMA(積和演算)	
  
11
閑話休題	
12
圧縮方法の概要と設計	
•  ‘09年に提案されているFPCの概要を紹介	
  
•  FPCの概要	
  
–  数値解析処理で発生する浮動小数点列を圧縮	
  
•  天気、気候、地震等の予測処理など	
  
–  圧縮率よりもスループット(復元速度)を重視した設計	
  
–  事前与えられたPredicatorによる予測値と実値との差分を
記録することで圧縮	
  
•  FCMとDFCMの2種類のPredicatorを用いて推定	
  
13
Predicator(FCMとDFCM)の設計	
•  FCMの概要	
  
–  過去の浮動小数点列からHash	
  Tableを構築	
  
–  直近の値(Hash値)に対応したHash	
  Tableのエントリを予想値に	
  
14	
unsigned long long true_value;
unsigned long long fcm_prediction;
unsigned long long fcm[table_size];
fcm_prediction = fcm[fcm_hash];
fcm[fcm_hash] = true_value;
fcm_hash = ((fcm_hash  6) ^ (true_value  48))  (table_size - 1);
val_fcm = true_value ^ fcm_prediction;
Predicator(FCMとDFCM)の設計	
•  FCMの概要	
  
–  過去の浮動小数点列からHash	
  Tableを構築	
  
–  直近の値(Hash値)に対応したHash	
  Tableのエントリを予想値に	
  
15	
unsigned long long true_value;
unsigned long long fcm_prediction;
unsigned long long fcm[table_size];
fcm_prediction = fcm[fcm_hash];
fcm[fcm_hash] = true_value;
fcm_hash = ((fcm_hash  6) ^ (true_value  48))  (table_size - 1);
val_fcm = true_value ^ fcm_prediction;
IEEE754形式の整数値	
過去の系列から構築するHash Table
※table_sizeは入力パラメータ
Predicator(FCMとDFCM)の設計	
•  FCMの概要	
  
–  過去の浮動小数点列からHash	
  Tableを構築	
  
–  直近の値(Hash値)に対応したHash	
  Tableのエントリを予想値に	
  
16	
unsigned long long true_value;
unsigned long long fcm_prediction;
unsigned long long fcm[table_size];
fcm_prediction = fcm[fcm_hash];
fcm[fcm_hash] = true_value;
fcm_hash = ((fcm_hash  6) ^ (true_value  48))  (table_size - 1);
val_fcm = true_value ^ fcm_prediction;
1つ前のHash値と現在値の(ランダム性の小さい)上位16bitから再計算	
1つ前の値から計算したHash値
Predicator(FCMとDFCM)の設計	
•  FCMの概要	
  
–  過去の浮動小数点列からHash	
  Tableを構築	
  
–  直近の値(Hash値)に対応したHash	
  Tableのエントリを予想値に	
  
17	
unsigned long long true_value;
unsigned long long fcm_prediction;
unsigned long long fcm[table_size];
fcm_prediction = fcm[fcm_hash];
fcm[fcm_hash] = true_value;
fcm_hash = ((fcm_hash  6) ^ (true_value  48))  (table_size - 1);
val_fcm = true_value ^ fcm_prediction;
実値と推定値とのXOR
→結果(val_fcm)の先頭に続く0を間引いて保存することで圧縮
Predicator(FCMとDFCM)の設計	
•  ‘D(Differencial)’FCMの概要	
  
–  基本的な処理はFCMと同じ	
  
–  推定値をそのままの値を用いるのではなく差分値を利用	
  
–  Hash値計算のシフト量を再調整	
  
18	
unsigned long long true_value;
unsigned long long dfcm_prediction;
unsigned long long dfcm[table_size];
dfcm_prediction = dfcm[fcm_hash] + last_value;
dfcm[dfcm_hash] = true_value - last_value;
dfcm_hash = ((dfcm_hash  2) ^ (true_value  40))  (table_size - 1);
val_dfcm = true_value ^ dfcm_prediction;
圧縮データのシリアライズ	
•  val_fcmとval_dfcmの小さいほうを保存	
  
–  整数圧縮のVariable-­‐Byteを適用	
  
–  選択したPredicator(1bit)と必要バイト数(3bit)を記録	
  
19	
[1]のFigure 1から引用
FPCの圧縮率	
•  数値計算分野のテストデータ	
  [3]	
  
–  温度や数値シュミレーション等のデータ列	
  
20
FPCの復元速度のスループット	
•  数値計算分野のテストデータ	
  [3]	
  
–  温度や数値シュミレーション等のデータ列	
  
21	
Intel Core i5-3427U 1.80GHz
今後・・・	
•  結構圧縮率は良いので・・・	
  
–  リファクタリングしたい	
  
–  (サーバ環境で)復元速度の評価をしたい	
  
–  他の整数圧縮を利用して改善したい	
  
–  ・・・	
  
•  maropu先生の次回作にご期待ください	
  
22
参考にした資料	
•  [1]	
  The	
  FPC	
  Double-­‐Precision	
  Floahng-­‐Point	
  Compression	
  	
  Algorithm	
  and	
  its	
  
Implementahon	
  
–  hmp://www.csl.cornell.edu/~burtscher/research/FPC/	
  
•  [2]	
  Floahng-­‐Point	
  Data	
  Compression	
  at	
  75	
  Gb/s	
  on	
  a	
  GPU	
  
–  hmp://dl.acm.org/citahon.cfm?id=1964179.1964189	
  	
  
•  [3]	
  Scienhfic	
  IEEE	
  754	
  64-­‐Bit	
  Double-­‐Precision	
  Floahng-­‐Point	
  Datasets	
  
–  hmp://www.csl.cornell.edu/~burtscher/research/FPC/datasets.html	
  
•  [4]	
  Comparing	
  Floahng	
  Point	
  Numbers,	
  2012	
  Edihon	
  
–  hmp://randomascii.wordpress.com/2012/02/25/comparing-­‐floahng-­‐point-­‐
numbers-­‐2012-­‐edihon/	
  
•  [5]	
  Radix	
  Tricks	
  
–  hmp://stereopsis.com/radix.html	
  
•  [6]	
  Intel®	
  64	
  and	
  IA-­‐32	
  Architectures	
  Ophmizahon	
  Reference	
  Manual	
  
–  hmp://www.intel.com/content/dam/doc/manual/64-­‐ia-­‐32-­‐architectures-­‐ophmizahon-­‐
manual.pdf	
  
•  [7]	
  Auto-­‐vectorizahon	
  with	
  gcc	
  4.7	
  
–  hmp://locklessinc.com/arhcles/vectorize/	
  
23

More Related Content

What's hot

条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
MITSUNARI Shigeo
 

What's hot (20)

GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
GPUが100倍速いという神話をぶち殺せたらいいな ver.2013
 
Gstreamer Basics
Gstreamer BasicsGstreamer Basics
Gstreamer Basics
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
CPU / GPU高速化セミナー!性能モデルの理論と実践:実践編
 
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
CEDEC 2016 Metal と Vulkan を用いた水彩画レンダリング技法の紹介
 
暗号技術の実装と数学
暗号技術の実装と数学暗号技術の実装と数学
暗号技術の実装と数学
 
CXL_説明_公開用.pdf
CXL_説明_公開用.pdfCXL_説明_公開用.pdf
CXL_説明_公開用.pdf
 
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
 
マルチコアを用いた画像処理
マルチコアを用いた画像処理マルチコアを用いた画像処理
マルチコアを用いた画像処理
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
 
条件分岐とcmovとmaxps
条件分岐とcmovとmaxps条件分岐とcmovとmaxps
条件分岐とcmovとmaxps
 
中3女子でもわかる constexpr
中3女子でもわかる constexpr中3女子でもわかる constexpr
中3女子でもわかる constexpr
 
なぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリングなぜなにリアルタイムレンダリング
なぜなにリアルタイムレンダリング
 
AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較AlmaLinux と Rocky Linux の誕生経緯&比較
AlmaLinux と Rocky Linux の誕生経緯&比較
 
ネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分けネットワーク ゲームにおけるTCPとUDPの使い分け
ネットワーク ゲームにおけるTCPとUDPの使い分け
 
分散システムについて語らせてくれ
分散システムについて語らせてくれ分散システムについて語らせてくれ
分散システムについて語らせてくれ
 
やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013
 
OpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみたOpenVRやOpenXRの基本的なことを調べてみた
OpenVRやOpenXRの基本的なことを調べてみた
 
SSH力をつけよう
SSH力をつけようSSH力をつけよう
SSH力をつけよう
 
Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門Halide による画像処理プログラミング入門
Halide による画像処理プログラミング入門
 
高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装高速な倍精度指数関数expの実装
高速な倍精度指数関数expの実装
 

Viewers also liked

整数列圧縮
整数列圧縮整数列圧縮
整数列圧縮
JAVA DM
 
Javaにおけるデータシリアライズと圧縮
Javaにおけるデータシリアライズと圧縮Javaにおけるデータシリアライズと圧縮
Javaにおけるデータシリアライズと圧縮
moai kids
 
研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法
Takeshi Yamamuro
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
Takeshi Yamamuro
 
Slide keieisystem2012
Slide keieisystem2012Slide keieisystem2012
Slide keieisystem2012
ISE_SE_HOSEI
 
できるプログラマーを本気で育てるSwift超入門iosプログラマーへの第一歩
できるプログラマーを本気で育てるSwift超入門iosプログラマーへの第一歩できるプログラマーを本気で育てるSwift超入門iosプログラマーへの第一歩
できるプログラマーを本気で育てるSwift超入門iosプログラマーへの第一歩
technologicarts
 
図解入門最新マーケティング・リサーチがよーくわかる本(3)
図解入門最新マーケティング・リサーチがよーくわかる本(3)図解入門最新マーケティング・リサーチがよーくわかる本(3)
図解入門最新マーケティング・リサーチがよーくわかる本(3)
MROC Japan
 
kagami_comput2015_12
kagami_comput2015_12kagami_comput2015_12
kagami_comput2015_12
swkagami
 

Viewers also liked (20)

整数列圧縮
整数列圧縮整数列圧縮
整数列圧縮
 
Javaにおけるデータシリアライズと圧縮
Javaにおけるデータシリアライズと圧縮Javaにおけるデータシリアライズと圧縮
Javaにおけるデータシリアライズと圧縮
 
研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法研究動向から考えるx86/x64最適化手法
研究動向から考えるx86/x64最適化手法
 
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
LLVMで遊ぶ(整数圧縮とか、x86向けの自動ベクトル化とか)
 
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl汎用性と高速性を目指したペアリング暗号ライブラリ mcl
汎用性と高速性を目指したペアリング暗号ライブラリ mcl
 
計算機理論入門03
計算機理論入門03計算機理論入門03
計算機理論入門03
 
計算機理論入門07
計算機理論入門07計算機理論入門07
計算機理論入門07
 
Slide keieisystem2012
Slide keieisystem2012Slide keieisystem2012
Slide keieisystem2012
 
計算機理論入門04
計算機理論入門04計算機理論入門04
計算機理論入門04
 
情報の表現~コンピュータでの数値の表現
情報の表現~コンピュータでの数値の表現情報の表現~コンピュータでの数値の表現
情報の表現~コンピュータでの数値の表現
 
計算機理論入門05
計算機理論入門05計算機理論入門05
計算機理論入門05
 
AtCoder Regular Contest 018 解説
AtCoder Regular Contest 018 解説AtCoder Regular Contest 018 解説
AtCoder Regular Contest 018 解説
 
浮動小数点数の話 2013年度版
浮動小数点数の話 2013年度版浮動小数点数の話 2013年度版
浮動小数点数の話 2013年度版
 
Treasure Dataを支える技術 - MessagePack編
Treasure Dataを支える技術 - MessagePack編Treasure Dataを支える技術 - MessagePack編
Treasure Dataを支える技術 - MessagePack編
 
Cvim saisentan 半精度浮動小数点数 half
Cvim saisentan 半精度浮動小数点数 halfCvim saisentan 半精度浮動小数点数 half
Cvim saisentan 半精度浮動小数点数 half
 
できるプログラマーを本気で育てるSwift超入門iosプログラマーへの第一歩
できるプログラマーを本気で育てるSwift超入門iosプログラマーへの第一歩できるプログラマーを本気で育てるSwift超入門iosプログラマーへの第一歩
できるプログラマーを本気で育てるSwift超入門iosプログラマーへの第一歩
 
図解入門最新マーケティング・リサーチがよーくわかる本(3)
図解入門最新マーケティング・リサーチがよーくわかる本(3)図解入門最新マーケティング・リサーチがよーくわかる本(3)
図解入門最新マーケティング・リサーチがよーくわかる本(3)
 
Java数値(浮動小数点)課題勉強会
Java数値(浮動小数点)課題勉強会Java数値(浮動小数点)課題勉強会
Java数値(浮動小数点)課題勉強会
 
kagami_comput2015_12
kagami_comput2015_12kagami_comput2015_12
kagami_comput2015_12
 
LLVM最適化のこつ
LLVM最適化のこつLLVM最適化のこつ
LLVM最適化のこつ
 

Similar to 浮動小数点(IEEE754)を圧縮したい@dsirnlp#4

HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
akirahiguchi
 
C base design methodology with s dx and xilinx ml
C base design methodology with s dx and xilinx ml C base design methodology with s dx and xilinx ml
C base design methodology with s dx and xilinx ml
ssuser3a4b8c
 
130710 02
130710 02130710 02
130710 02
openrtm
 
20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public
Kazuaki Ishizaki
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編
Miki Shimogai
 
Or seminar2011final
Or seminar2011finalOr seminar2011final
Or seminar2011final
Mikio Kubo
 
C11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
C11,12 SQL Server 2012 Performance Tuning by Yukio KumazawaC11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
C11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
Insight Technology, Inc.
 

Similar to 浮動小数点(IEEE754)を圧縮したい@dsirnlp#4 (20)

Prelude to Halide
Prelude to HalidePrelude to Halide
Prelude to Halide
 
TVM の紹介
TVM の紹介TVM の紹介
TVM の紹介
 
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
CPU / GPU高速化セミナー!性能モデルの理論と実践:理論編
 
第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)第11回 配信講義 計算科学技術特論B(2022)
第11回 配信講義 計算科学技術特論B(2022)
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 
C base design methodology with s dx and xilinx ml
C base design methodology with s dx and xilinx ml C base design methodology with s dx and xilinx ml
C base design methodology with s dx and xilinx ml
 
130710 02
130710 02130710 02
130710 02
 
20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public20180109 titech lecture_ishizaki_public
20180109 titech lecture_ishizaki_public
 
ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装ディープラーニングフレームワーク とChainerの実装
ディープラーニングフレームワーク とChainerの実装
 
20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public20141224 titech lecture_ishizaki_public
20141224 titech lecture_ishizaki_public
 
CAメインフレーム システムリソース削減に貢献する製品について
CAメインフレーム システムリソース削減に貢献する製品についてCAメインフレーム システムリソース削減に貢献する製品について
CAメインフレーム システムリソース削減に貢献する製品について
 
8 並列計算に向けた pcセッティング
8 並列計算に向けた pcセッティング8 並列計算に向けた pcセッティング
8 並列計算に向けた pcセッティング
 
SQLチューニング入門 入門編
SQLチューニング入門 入門編SQLチューニング入門 入門編
SQLチューニング入門 入門編
 
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
2018年度 若手技術者向け講座 大量データの扱い・ストアド・メモリ管理
 
「カラム型」が実現するビッグデータの高速処理
「カラム型」が実現するビッグデータの高速処理「カラム型」が実現するビッグデータの高速処理
「カラム型」が実現するビッグデータの高速処理
 
「カラム型」が実現するビッグデータの高速処理
「カラム型」が実現するビッグデータの高速処理「カラム型」が実現するビッグデータの高速処理
「カラム型」が実現するビッグデータの高速処理
 
Or seminar2011final
Or seminar2011finalOr seminar2011final
Or seminar2011final
 
ADVENTURE_Solid Ver.1.2の概要
ADVENTURE_Solid Ver.1.2の概要ADVENTURE_Solid Ver.1.2の概要
ADVENTURE_Solid Ver.1.2の概要
 
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
TPC-DSから学ぶPostgreSQLの弱点と今後の展望TPC-DSから学ぶPostgreSQLの弱点と今後の展望
TPC-DSから学ぶPostgreSQLの弱点と今後の展望
 
C11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
C11,12 SQL Server 2012 Performance Tuning by Yukio KumazawaC11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
C11,12 SQL Server 2012 Performance Tuning by Yukio Kumazawa
 

More from Takeshi Yamamuro

An Experimental Study of Bitmap Compression vs. Inverted List Compression
An Experimental Study of Bitmap Compression vs. Inverted List CompressionAn Experimental Study of Bitmap Compression vs. Inverted List Compression
An Experimental Study of Bitmap Compression vs. Inverted List Compression
Takeshi Yamamuro
 
VLDB2013 R1 Emerging Hardware
VLDB2013 R1 Emerging HardwareVLDB2013 R1 Emerging Hardware
VLDB2013 R1 Emerging Hardware
Takeshi Yamamuro
 
Introduction to Modern Analytical DB
Introduction to Modern Analytical DBIntroduction to Modern Analytical DB
Introduction to Modern Analytical DB
Takeshi Yamamuro
 
SIGMOD’12勉強会 -Session 7-
SIGMOD’12勉強会 -Session 7-SIGMOD’12勉強会 -Session 7-
SIGMOD’12勉強会 -Session 7-
Takeshi Yamamuro
 
A x86-optimized rank&select dictionary for bit sequences
A x86-optimized rank&select dictionary for bit sequencesA x86-optimized rank&select dictionary for bit sequences
A x86-optimized rank&select dictionary for bit sequences
Takeshi Yamamuro
 
VLDB’11勉強会 -Session 9-
VLDB’11勉強会 -Session 9-VLDB’11勉強会 -Session 9-
VLDB’11勉強会 -Session 9-
Takeshi Yamamuro
 
VLDB'10勉強会 -Session 20-
VLDB'10勉強会 -Session 20-VLDB'10勉強会 -Session 20-
VLDB'10勉強会 -Session 20-
Takeshi Yamamuro
 
VLDB'10勉強会 -Session 2-
VLDB'10勉強会 -Session 2-VLDB'10勉強会 -Session 2-
VLDB'10勉強会 -Session 2-
Takeshi Yamamuro
 

More from Takeshi Yamamuro (20)

LT: Spark 3.1 Feature Expectation
LT: Spark 3.1 Feature ExpectationLT: Spark 3.1 Feature Expectation
LT: Spark 3.1 Feature Expectation
 
Apache Spark + Arrow
Apache Spark + ArrowApache Spark + Arrow
Apache Spark + Arrow
 
Quick Overview of Upcoming Spark 3.0 + α
Quick Overview of Upcoming Spark 3.0 + αQuick Overview of Upcoming Spark 3.0 + α
Quick Overview of Upcoming Spark 3.0 + α
 
MLflowによる機械学習モデルのライフサイクルの管理
MLflowによる機械学習モデルのライフサイクルの管理MLflowによる機械学習モデルのライフサイクルの管理
MLflowによる機械学習モデルのライフサイクルの管理
 
Taming Distributed/Parallel Query Execution Engine of Apache Spark
Taming Distributed/Parallel Query Execution Engine of Apache SparkTaming Distributed/Parallel Query Execution Engine of Apache Spark
Taming Distributed/Parallel Query Execution Engine of Apache Spark
 
LLJVM: LLVM bitcode to JVM bytecode
LLJVM: LLVM bitcode to JVM bytecodeLLJVM: LLVM bitcode to JVM bytecode
LLJVM: LLVM bitcode to JVM bytecode
 
20180417 hivemall meetup#4
20180417 hivemall meetup#420180417 hivemall meetup#4
20180417 hivemall meetup#4
 
An Experimental Study of Bitmap Compression vs. Inverted List Compression
An Experimental Study of Bitmap Compression vs. Inverted List CompressionAn Experimental Study of Bitmap Compression vs. Inverted List Compression
An Experimental Study of Bitmap Compression vs. Inverted List Compression
 
Sparkのクエリ処理系と周辺の話題
Sparkのクエリ処理系と周辺の話題Sparkのクエリ処理系と周辺の話題
Sparkのクエリ処理系と周辺の話題
 
20160908 hivemall meetup
20160908 hivemall meetup20160908 hivemall meetup
20160908 hivemall meetup
 
20150513 legobease
20150513 legobease20150513 legobease
20150513 legobease
 
20150516 icde2015 r19-4
20150516 icde2015 r19-420150516 icde2015 r19-4
20150516 icde2015 r19-4
 
VLDB2013 R1 Emerging Hardware
VLDB2013 R1 Emerging HardwareVLDB2013 R1 Emerging Hardware
VLDB2013 R1 Emerging Hardware
 
Introduction to Modern Analytical DB
Introduction to Modern Analytical DBIntroduction to Modern Analytical DB
Introduction to Modern Analytical DB
 
SIGMOD’12勉強会 -Session 7-
SIGMOD’12勉強会 -Session 7-SIGMOD’12勉強会 -Session 7-
SIGMOD’12勉強会 -Session 7-
 
A x86-optimized rank&select dictionary for bit sequences
A x86-optimized rank&select dictionary for bit sequencesA x86-optimized rank&select dictionary for bit sequences
A x86-optimized rank&select dictionary for bit sequences
 
VAST-Tree, EDBT'12
VAST-Tree, EDBT'12VAST-Tree, EDBT'12
VAST-Tree, EDBT'12
 
VLDB’11勉強会 -Session 9-
VLDB’11勉強会 -Session 9-VLDB’11勉強会 -Session 9-
VLDB’11勉強会 -Session 9-
 
VLDB'10勉強会 -Session 20-
VLDB'10勉強会 -Session 20-VLDB'10勉強会 -Session 20-
VLDB'10勉強会 -Session 20-
 
VLDB'10勉強会 -Session 2-
VLDB'10勉強会 -Session 2-VLDB'10勉強会 -Session 2-
VLDB'10勉強会 -Session 2-
 

浮動小数点(IEEE754)を圧縮したい@dsirnlp#4

  • 2. 本日の概要 •  背景と動機   •  浮動小数点(IEEE754)表現に関して   –  IEEE754に関する雑談   •  圧縮方法の概要と設計   •  簡単な性能評価   •  参考   2
  • 3. 皆さんfloat/doubleは使いますよね? •  類似度、時間、地理情報・・・・の表現に   3 double *data = new double[10000]; これをコンパクトにシリアライズすることが本日の目的
  • 4. 浮動小数点列圧縮の応用 •  数値計算分野では一般的?[1][2][3]   •  Enterprise向けではあまり応用例を聞かない   –  特にRDBMS分野では・・・   4
  • 5. 浮動小数点列圧縮の応用 •  Ex.)  Amazon  RedshiN   –  サポートしている型*   •  SMALLINT,  INTEGER,  BIGINT,  DECIMAL,  REAL,  DOUBLE  PRECISION,   BOOLEAN,  CHAR,  VARCHAR,  DATE,  TIMESTAMP   –  サポートしている圧縮形式   •  BYTEDICT,  DELTA,  DELTA32K,  MOSTLY8,  MOSTLY16,  MOSTLY32,   RAW,  RUNLENGTH,  TEXT255,  TEXT32K   •  READ/DOUBLE  PRECISIONに対応した圧縮形式がない?   5 *http://docs.aws.amazon.com/redshift/latest/dg/r_CREATE_TABLE_NEW.html
  • 6. 浮動小数点表現の形式 •  浮動小数点表現の様々な形式*   IEEE754   最も有名な標準規格   符号/指数部/仮数部が単精度で1/8/23bit、倍精度で1/11/52bit     80bit拡張倍精度   x87内部で利用されている   指数部15bit、仮数部64bitで表現   正規化された仮数部の最上位bitは省略されない     IBM形式   IBM  System360等のMFで主に使われた形式   指数部が2ではなく16のべき乗   単精度で指数部7bit、仮数部24bitで表現   6 *Wikipeadia: http://ja.wikipedia.org/wiki/浮動小数点
  • 7. 余談1  最近のx64のIEEE754の計算 •  デフォルトではSSEを利用した浮動小数点計算   7 例: double c = 1.0 + 2.0; # gcc -S -masm=intel -o - xxx.cc movabs rax, 4607182418800017408 mov QWORD PTR [rbp-24], rax movabs rax, 4611686018427387904 mov QWORD PTR [rbp-16], rax movsd xmm0, QWORD PTR [rbp-24] addsd xmm0, QWORD PTR [rbp-16] IEEE754形式
  • 8. 余談1  最近のx64のIEEE754の計算 •  ‘-­‐mfpmath=387’でx87の80bit拡張倍精度計算   8 例: double c = 1.0 + 2.0; # gcc -S -mfpmath=387 -masm=intel -o - xxx.cc movabs rax, 4607182418800017408 mov QWORD PTR [rbp-24], rax movabs rax, 4611686018427387904 mov QWORD PTR [rbp-16], rax fld QWORD PTR [rbp-24] fadd QWORD PTR [rbp-16] fstp QWORD PTR [rbp-8] FPUスタックモデルによる演算
  • 9. 余談2  IEEE754の整数隣接性 •  隣りあう浮動小数点数は整数表現でも隣接  [4]   –  IEEE754規格化以前では無い特性だったらしい     9
  • 10. 余談2  IEEE754の整数隣接性 •  Ex.)  浮動小数点列の並び替えの改善   –  順序等価な整数に変換して処理   –  浮動小数点比較ucmisdと整数比較cmpのコスト[6]   •  ucomisd:  latency  6-­‐7,  throughput  2   •  cmp:  latency  1,  throughput  1   10 Radix Tricks uint32_t flipFloat(uint32_t ieee754) { uint32_t mask = (ieee754 31) | 0x80000000; return ieee754 ^ mask; } CUDAのRadixSortのサンプル実装で利用 - http://docs.nvidia.com/cuda/cuda-samples/index.html
  • 11. 余談3  IEEE754とコンパイラ最適化 •  浮動小数点はcommutahveではない   –  丸め誤差や桁落ちの影響   •  ‘gcc  -­‐-­‐fast-­‐math’計算順序最適化   –  精度は悪くなるが、コンパイラ最適化がかかりやすくなる   –  ベクトル化とかFMA(積和演算)   11
  • 13. 圧縮方法の概要と設計 •  ‘09年に提案されているFPCの概要を紹介   •  FPCの概要   –  数値解析処理で発生する浮動小数点列を圧縮   •  天気、気候、地震等の予測処理など   –  圧縮率よりもスループット(復元速度)を重視した設計   –  事前与えられたPredicatorによる予測値と実値との差分を 記録することで圧縮   •  FCMとDFCMの2種類のPredicatorを用いて推定   13
  • 14. Predicator(FCMとDFCM)の設計 •  FCMの概要   –  過去の浮動小数点列からHash  Tableを構築   –  直近の値(Hash値)に対応したHash  Tableのエントリを予想値に   14 unsigned long long true_value; unsigned long long fcm_prediction; unsigned long long fcm[table_size]; fcm_prediction = fcm[fcm_hash]; fcm[fcm_hash] = true_value; fcm_hash = ((fcm_hash 6) ^ (true_value 48)) (table_size - 1); val_fcm = true_value ^ fcm_prediction;
  • 15. Predicator(FCMとDFCM)の設計 •  FCMの概要   –  過去の浮動小数点列からHash  Tableを構築   –  直近の値(Hash値)に対応したHash  Tableのエントリを予想値に   15 unsigned long long true_value; unsigned long long fcm_prediction; unsigned long long fcm[table_size]; fcm_prediction = fcm[fcm_hash]; fcm[fcm_hash] = true_value; fcm_hash = ((fcm_hash 6) ^ (true_value 48)) (table_size - 1); val_fcm = true_value ^ fcm_prediction; IEEE754形式の整数値 過去の系列から構築するHash Table ※table_sizeは入力パラメータ
  • 16. Predicator(FCMとDFCM)の設計 •  FCMの概要   –  過去の浮動小数点列からHash  Tableを構築   –  直近の値(Hash値)に対応したHash  Tableのエントリを予想値に   16 unsigned long long true_value; unsigned long long fcm_prediction; unsigned long long fcm[table_size]; fcm_prediction = fcm[fcm_hash]; fcm[fcm_hash] = true_value; fcm_hash = ((fcm_hash 6) ^ (true_value 48)) (table_size - 1); val_fcm = true_value ^ fcm_prediction; 1つ前のHash値と現在値の(ランダム性の小さい)上位16bitから再計算 1つ前の値から計算したHash値
  • 17. Predicator(FCMとDFCM)の設計 •  FCMの概要   –  過去の浮動小数点列からHash  Tableを構築   –  直近の値(Hash値)に対応したHash  Tableのエントリを予想値に   17 unsigned long long true_value; unsigned long long fcm_prediction; unsigned long long fcm[table_size]; fcm_prediction = fcm[fcm_hash]; fcm[fcm_hash] = true_value; fcm_hash = ((fcm_hash 6) ^ (true_value 48)) (table_size - 1); val_fcm = true_value ^ fcm_prediction; 実値と推定値とのXOR →結果(val_fcm)の先頭に続く0を間引いて保存することで圧縮
  • 18. Predicator(FCMとDFCM)の設計 •  ‘D(Differencial)’FCMの概要   –  基本的な処理はFCMと同じ   –  推定値をそのままの値を用いるのではなく差分値を利用   –  Hash値計算のシフト量を再調整   18 unsigned long long true_value; unsigned long long dfcm_prediction; unsigned long long dfcm[table_size]; dfcm_prediction = dfcm[fcm_hash] + last_value; dfcm[dfcm_hash] = true_value - last_value; dfcm_hash = ((dfcm_hash 2) ^ (true_value 40)) (table_size - 1); val_dfcm = true_value ^ dfcm_prediction;
  • 19. 圧縮データのシリアライズ •  val_fcmとval_dfcmの小さいほうを保存   –  整数圧縮のVariable-­‐Byteを適用   –  選択したPredicator(1bit)と必要バイト数(3bit)を記録   19 [1]のFigure 1から引用
  • 20. FPCの圧縮率 •  数値計算分野のテストデータ  [3]   –  温度や数値シュミレーション等のデータ列   20
  • 21. FPCの復元速度のスループット •  数値計算分野のテストデータ  [3]   –  温度や数値シュミレーション等のデータ列   21 Intel Core i5-3427U 1.80GHz
  • 22. 今後・・・ •  結構圧縮率は良いので・・・   –  リファクタリングしたい   –  (サーバ環境で)復元速度の評価をしたい   –  他の整数圧縮を利用して改善したい   –  ・・・   •  maropu先生の次回作にご期待ください   22
  • 23. 参考にした資料 •  [1]  The  FPC  Double-­‐Precision  Floahng-­‐Point  Compression    Algorithm  and  its   Implementahon   –  hmp://www.csl.cornell.edu/~burtscher/research/FPC/   •  [2]  Floahng-­‐Point  Data  Compression  at  75  Gb/s  on  a  GPU   –  hmp://dl.acm.org/citahon.cfm?id=1964179.1964189     •  [3]  Scienhfic  IEEE  754  64-­‐Bit  Double-­‐Precision  Floahng-­‐Point  Datasets   –  hmp://www.csl.cornell.edu/~burtscher/research/FPC/datasets.html   •  [4]  Comparing  Floahng  Point  Numbers,  2012  Edihon   –  hmp://randomascii.wordpress.com/2012/02/25/comparing-­‐floahng-­‐point-­‐ numbers-­‐2012-­‐edihon/   •  [5]  Radix  Tricks   –  hmp://stereopsis.com/radix.html   •  [6]  Intel®  64  and  IA-­‐32  Architectures  Ophmizahon  Reference  Manual   –  hmp://www.intel.com/content/dam/doc/manual/64-­‐ia-­‐32-­‐architectures-­‐ophmizahon-­‐ manual.pdf   •  [7]  Auto-­‐vectorizahon  with  gcc  4.7   –  hmp://locklessinc.com/arhcles/vectorize/   23