ブログ@nnaka2992

データベースってなんだよ

コンパイルとベクトル化による最適化のパフォーマンスを比較した論文を読みました

この記事の趣旨

2018年に発表された"Everything You Always Wanted to Know About Compiled and Vectorized Queries But Were Afraid to Ask"という論文を読みました。 最新のクエリエンジンの特性をまとめ、どのようなワークロードに向くのかという指針を示すないようです。

Everything You Always Wanted to Know About Compiled and Vectorized Queries But Were Afraid to Ask

Timo Kersten, Viktor Leis, Alfons Kemper, Thomas Neumann, Andrew Pavlo, Peter Boncz

著者について

Timo Kersten, Viktor Leis, Alfons Kemper, Thomas Neumann, Andrew Pavlo, Peter Bonczのグループによる 論文。

いずれも大規模データにおけるクエリパフォーマスや最適化に関する研究を行なっている。

問題意識

分析ワークロードに向いた最新のクエリエンジンはベクトル化またはデータ中心のコード生成に基づいている。 どちらのモデルも従来のエンジンに比べオーバーヘッドが少く、非常に効率的なものの概念的には 大きく異なっている。

この2つのモデルの違いは、DBMSの実行エンジンのソースコードの構成とその性能 特性を決定する基本的なもので、クエリ実行モデルを超える多くの設計で異なる。

本論文はことなる2つのモデルを再実装し、環境差異のないマシンで実行することで それぞれのモデルがどのように違うのか。どのような用途に最適なのかを検証している。

手法

検証手法は著者らがC++で再実装したデータ中心モデルの「Taper」とベクトル化中心の「Tectorwise」を 同一のマシンでパフォーマンス検証を行っている。

検証項目は以下から成る 1. インメモリOLAPワークロードでのマイクロアーキテクチャ分析 1. SIMDの利点の検証 1. マルチコアCPUにおけるクエリ並列化 1. 異なるハードウェアでのパフォーマンス

結果

  1. インメモリOLAPワークロードでのマイクロアーキテクチャ分析
    全体的にはほぼ同レベルのパフォーマンスを発揮する一方で、対象となるクエリによって異なる特徴を示した。 アグリゲーション処理ではTectorwiseが優位になるが、ハッシュ処理がメインになる処理ではTaperが優位性を示す。 これはTectorwiseのベクトル化処理ではキャッシュミスを隠しパフォーマンスを向上させる一方で、 ハッシュ処理は単純なループなためである。 Taperはハッシュ処理において複雑なループを行なう一方、ブランチミスによるキャッシュ失敗に大きなペナルティがあるため である。

    Figure 3: Performance – TPC-H SF=1, 1 thread
    Figure 3: Performance – TPC-H SF=1, 1 thread

  2. SIMDの利点の検証
    SIMDを評価するにはTectorwiseのみを用いた。 SIMDではスカラーなデータをベクトルに変換するペナルティは少く、最大8.4倍の性能向上が確認された。
    しかし複雑なクエリでは少ない性能向上に留まった。 これはOLAPクエリのパフォーマンス向上はデータアクセスに縛られる為である。

    Figure 6: Scalar vs. SIMD Selection in Tectorwise – (a) 40% selectivity. (b) Secondary selection: Input selection vector selects 40% and selection selects 40%. (c) Runtime of TPC-H Q6, SF=1
    Figure 6: Scalar vs. SIMD Selection in Tectorwise

  3. マルチコアCPUにおけるクエリ並列化
    TyperとTectorwiseの比較に用いたクエリで実験したところ、Hyperでは11.7倍、Tectorwise7.2倍の平均高速化が測定された。 いずれのモデルもスケールに対応している。またインメモリワークロードにおける実験で示された、それぞれのクエリの得意不得意 はマルチコアにも引きつがれている。

  4. 異なるハードウェアでのパフォーマンス
    Intel Skylake、Intel Knights Landing、AMD Ryzenで対照実験を行なったものの、 いずれのハードウェアでもTyper、Tectorwiseともに有効に動作した。

作業時間

  • read
    • 29:26
    • 29:26
  • author
    • 33:23
    • 3:57
  • summary
    • 76:37
    • 42:44

感想

VoectorwiseとHyperのいずれを使うべきか。どちらが優れているかといった疑問に答えるないようだった。