PG-Strom Overview PG-Strom概要

This chapter introduces a brief overview of PG-Strom and developer community. 本章では、PG-Stromの概要、および開発者コミュニティについて紹介します。

What is PG-Strom PG-Stromとは?

PG-Strom is an extension designed for PostgreSQL v9.5 or later, to off-load a part of CPU intensive workloads to GPU (Graphic Processor Unit) devices, and execute them in parallel asynchronously. This module is designed to reduce response time of complicated queries executed on large data set (like, data analytics or batch processing), on the other hands, it is not preferable to run transactional workloads or heavy concurrent processing. PG-Stromとは、PostgreSQL v9.5および以降のバージョン向けに設計された拡張モジュールで、ユーザやアプリケーションからは透過的に、CPU負荷が中心となるSQLワークロードの一部をGPU(Graphic Processor Unit)デバイス上で非同期・並列実行する事を可能にします。 本モジュールは大規模なデータセット上で実行される複雑なクエリ(典型例としてはデータ解析やバッチ処理が該当します)の応答時間を短縮する事を目的として設計されていますが、更新系や同時多重処理には向いていません。 The core idea of PG-Strom is, the code generator that constructs GPU native binaries according to the supplied SQL queries on the fly and transparently, and execution engine that runs the GPU native binaries to the massive input data stream in parallel and asynchronously. These mechanisms enable to pull out capability of GPU devices that mount multi-hundred to multi-thousand cores per chip, to process the massive amount of records, transparently from the standpoint of users or applications. PG-Stromの中核を成すのは、SQL構文に対応したGPU用バイナリ命令列を動的かつ透過的に生成しコードジェネレータと、これを並列プロセッサで大量の入力データに対して非同期・並列実行する実行エンジンです。 これらの機能により、ユーザやアプリケーションの視点からは透過的に、数百~数千コアが実装されたGPUデバイスの能力を大量のレコードを処理するために利用する事が可能となります。 We define the role of PG-Strom is an intermediation between PostgreSQL and the recent evolution of semiconductor like GPU or SSD (Solid State Drive). 我々自身は、GPUやSSD(Solit State Drive)といった近年の半導体技術の進化と、PostgreSQLの間を橋渡しする事がPG-Stromの役割であると考えています。

Features of PG-Strom PG-Stromの機能

PG-Strom support the following SQL workloads. PG-Stromは以下のSQLワークロードに対応したいます。

Full Table Scan 全件スキャン
On full table scan with scan qualifiers, GPU runs evaluation of scan qualifier and filter out invisible rows. 条件句を含むテーブルの全件スキャンにおいて、条件句の評価と行の絞り込みをGPU側で行います。
Tables Join ジョイン
GPU runs relations joins. Parallel version of hash-join algorithm and simple (none parameterized) nest-loop algorithm are supported. It have advantages to relations join between a large table and relatively small tables; that expects fact-master table schema design we usually use transactional systems. テーブル同士の結合をGPU側で処理します。Hash-Joinアルゴリズムと単純Nest-Loopアルゴリズムが実装されており、非常に大きな一個のテーブルと、比較的サイズの小さな複数個のテーブルの結合において特に効果を発揮します。 これは一般的なトランザクションシステムで用いられる、ファクトテーブル-マスターテーブル構成を意図しています。
Group By/Aggregation 集約演算
GPU runs pre-processing of aggregate operations, to reduce the number of rows to be processed by CPU. In case when we make 1000 groups from 10 million rows and compute average of each group, for example, GPU can load a data chunk per million rows then return the number of rows and total sum for each groups, in the result, all CPU needs to process will be just 10,000 rows. GPU側で集約演算の前処理を行い、CPUが処理すべき行数を削減します。 例えば、1000万行から1000グループを抽出し、各グループの平均値を算出するとします。100万行ずつGPUにデータをロードし、1000グループ毎にレコード件数と総和を計算すれば、結果、CPUが処理しなければならない行数は僅か1万行という事になります。
Projection プロジェクション
When SQL query contains complicated mathematical formulas, GPU runs calculation of these expression on the device, then CPU just references the calculated results. It has advantages to execute statistical analytics workloads on SQL. 問合せが複雑な数式の計算を含む場合に、GPU側で計算処理を行い、CPU側では計算済みの結果を参照するようにします。統計解析処理をSQLで実行する時に効果を発揮します。

PG-Strom supports the data types below. See the Reference:Data Types リファレンス:データ型 for more details. PG-Stromは以下のデータ型に対応しています。詳細は Reference:Data Types リファレンス:データ型 を参照してください。

Numeric Data Types 数値データ型
smallint, int, bigint, real, float and numeric
Date and Time 日付時刻型
date, time, timetz, timestamp, timestamptz and interval
Text 文字列型
char(n), varchar(n), text and bytea
Others その他
bool, money

PG-Strom supports the functions and operators below. See Reference:Functions and Operators リファレンス:関数と演算子 for more details. PG-Stromは以下の関数・演算子に対応しています。詳細は Reference:Functions and Operators リファレンス:関数と演算子 を参照してください。

Arithmetic operations 算術演算子
It supports four arithmetic operations (+, -, *, /), logical operations (&, |) and so on for each data type. それぞれ対応するデータ型ごとに、四則演算(+, -, *, /)や、論理演算(&, |)などに対応しています。
Comparison operations 比較演算子
It supports larger/smaller comparison operators (=, <>, <, <=, >, >=) for each data type. Especially, equivalent operators (=) are internally used by join or aggregation. それぞれ対応するデータ型ごとに、大小比較演算(=, <>, <, <=, >, >=)に対応しています。 特に等価演算子(=)は、ジョインや集約演算の内部処理においても使用されます。
Mathematical functions 数学関数
Various mathematical functions that take float arguments are supported, like sqrt, ln, pow, sin. sqrt, ln, pow, sinなど、float型を引数に取る数学関数の多くに対応しています。
Aggregate functions 集約関数
Aggregate functions like min, max, avg, sum, stddev and etc are supported. min, max, avg, sum, stddevなどの集約関数に対応しています。
Pattern Matching パターンマッチング
LIKE operators is supported for pattern matching. LIKE句によるパターンマッチングに対応しています。

License ライセンス

PG-Strom is distributed under the GPLv2 (GNU Public License version 2). You can use, modify and redistribute the software freely, according to the license terms. Please reference the LICENSE file bundled in the software. Also note that PG-Strom has no warranty, and PG-Strom Development Team is not liable for any damage resulting from the use of this software. PG-StromはGPLv2(GNU Public License version 2)下で配布されており、ライセンス条項に従い、ソフトウェアを自由に利用、改変、再配布することができます。詳細は、ソフトウェアに同梱のLICENSEを参照してください。 また、PG-Stromは無保証であり、本ソフトウェアを用いた結果生じたいかなる損害に対してもPG-Strom Development Teamは責任を有しません。

Our Community コミュニティ

Development of PG-Strom stands on the master Git repository: PG-Stromの開発は、Gitリポジトリ を中心にして行われています。

Please open an issue on the issue tracker ( for bug report, new feature request, questions and so on. It is preferable to assign proper tags like "bug", "question" and etc... バグの報告、新機能の要望、質問などは、イシュートラッカー(でイシューをオープンしてください。『bug』、『question』などの適切なタグを付ける事が望ましいです。

PG-Strom is developed by PG-Strom Development Team, and they also hold its copyright. However, it does not mean you have to assign your copyright, because PG-Strom Development Team is not a legal entity, a generic name of all the contributors for PG-Strom development. It is a same way that Linux kernel, PostgreSQL and many other open source project works. PG-StromはPG-Strom Development Teamによって開発され、同時に著作権を保持しています。しかし、これはパッチの投稿に際してあなたに著作権の放棄を要求してはいません。PG-Strom Development Teamは法的主体ではなく、PG-Stromの開発に貢献した全ての開発者の総称であるからです。これは、Linux kernelやPostgreSQLなど他のOSSプロジェクトと同様です。