PostgreSQL

Asymmetric Partition-wise JOIN

久々に PostgreSQL 本体機能へのパッチを投げたので、それの解説をしてみる。PostgreSQL: Re: Asymmetric partition-wise JOIN 背景:Partition-wise JOIN PostgreSQLのパーティションを使ったときに、全く同一のパーティションの切り方をして、かつパーティ…

技術負債を返した話(Pre-built GPU Binary対応)

最もプリミティブなPG-Stromの処理は、ユーザが入力したSQLを元にCUDA CのGPUプログラムを自動生成し、これを実行時コンパイル。ここで生成されたGPUバイナリを用いて、ストレージから読み出したデータをGPUで並列処理するという一連の流れである。 後にJOIN…

PL/CUDAを使ってロジスティック回帰分析を実装してみた

PostgreSQL Advent Calendar 2018の6日目です。PG-Stromはアナリティクス向けにPL/CUDAというユーザ定義SQL関数を実装する機能を持っており、SQL処理の中で計算ヘビーな部分をCUDA Cで記述したGPUプログラムで実行させるという事ができる。 SQL関数としてPL/…

PostgreSQLとcupyを繋ぐ~機械学習基盤としてのPG-Stromその①~

世間の機械学習屋さんは、機械学習・統計解析のライブラリにデータを食わせる時に、どうやってデータを入力しているのだろうか? 話を聞くに、データを一度CSV形式に落とし込んで、それをPythonスクリプトで読み込むというパターンが多いようではある。ただ…

スキャン速度10GB/sへの挑戦~その③~

ちょっと前(2017年10月)に以下のような記事を書いた。 kaigai.hatenablog.comこの時点では、SeqRead 2.2GB/s の Intel SSD 750(400GB) を3枚束ねて、理論帯域6.6GB/sに対してクエリ処理のスループット6.2GB/s程度までは能力を引き出す事ができていた。 デ…

gstore_fdw: GPUメモリをSQLで読み書き、そして…。

昨年、PGconf.ASIAで発表したPL/CUDAによる創薬ワークロードの高速化実験のテーマであるが、 kaigai.hatenablog.com 実測したベンチマークを見ると、奇妙な傾向が見てとれる。 このワークロードにおける計算量は「Qの行数×Dの行数」であるので、Dの行数が同…

GpuJoin + GpuPreAgg combined kernel

以下のクエリは、t0とt1の2つのテーブルをJOINし、その結果をGROUP BYして出力するものである。 しかし、EXPLAIN ANALYZEの出力には奇妙な点がある。 postgres=# explain analyze select cat,count(*),avg(ax) from t0 natural join t1 group by cat; QUERY …

Pascal以降のUnified Memoryを使いたおす。

今でこそTESLA P40に24GBのRAMが載り、コンシューマ向けでもGTX1080Tiに11GBのRAMが搭載されてたりと、GPU側でも10GBを越えるメモリを積むことは珍しくなくなってきた*1。 長らく自分の開発環境で頑張ってくれたGTX980は(当時のハイエンド製品だったにも関…

AWSのP2.*インスタンスで PG-Strom を試す

従前、AWSの提供するGPUインスタンス g2.* に搭載されているGPUはGRID K520というちょっと古いモデルで、PG-Stromは非対応だった。 理由は、一年ほど前にComputing Capability 3.5以降で対応のDynamic Parallelism機能を使うように全面的に作り直したからで…

PL/CUDAによるIn-database Analytics ~創薬におけるワークロードを例として~

やや場違い感が否めないが、今週、CBI学会(計算情報化学生物学会)の2016年大会でポスター発表を行ってきた。発表タイトルは『Efficient Similarity Search Using Multiple Reference Molecules on PG-Strom architecture』というもので、要は、創薬分野…

同期DMAと非同期DMA

おっとっと、やらかしてしまった(但し、良い方に)。PG-Strom + NVMe-Stromでのパフォーマンス計測の際に、SSDからロードしたデータ以外に、例えばテーブル定義情報や定数パラメータといったSQLの実行に必要な情報は一般的なRAM-to-GPU DMAで転送していたの…

(EN) GpuScan + SSD-to-GPU Direct DMA

An article for none-Japanese readers....What I'm recently working on is a feature to load data blocks from NVMe-SSD to GPU using peer-to-peer DMA. It allows to bypass the CPU/RAM under a series of data loading process, thus, also allows to…

GpuScan + SSD-to-GPU Direct DMA

前回の動いた!SSD-to-GPU Direct DMA - KaiGaiの俺メモの記事では、Intel SSD 750とNVIDIA Quadro K1200を使って、Raw-I/OでのSSD-to-GPU Direct DMAが動くところまでを紹介した。この時点で測定できたSSD-to-GPU Direct DMAのスループットは概ね1400MB/s程…

オレオレ Demand Paging

現在の PG-Strom のアーキテクチャは、PostgreSQLの各バックグラウンドプロセスが個別にCUDAコンテキストを作成し、GPUデバイスメモリを作るという構成になっている。 これは、設計の単純化、特にエラーパスのシンプル化により、全体的なソフトウェアの品質…

PL/CUDAとmatrix型

PG-Stromには↓のような利点があるが、 SQLから自動的にGPU用バイナリ命令列を生成するため、GPUプログラミングを意識する必要がない、 PostgreSQLの行指向データを用いるため、既存DBからデータの移行を必要としない。 その裏返しとして、同時に↓のような特…

SSD-to-GPU Peer-to-Peer DMAとバッファ管理(その2)

前回の続き。PCI-E接続のSSDからのP2P DMAでCPU/RAMを介さずにGPU RAMへデータを転送するという要素技術自体は目新しいものではない。かつてFusion-io(現: SunDisk)もやっていたし、NVMe規格に準拠したものであれば標準のドライバに少し手を加えてP2P DMA…

SSD-to-GPU Peer-to-Peer DMAとバッファ管理(その1)

昨年の暮れ、JPUGカンファレンスのLTで『SQL+GPU+SSD=∞』と題したスピーチを行った。 SQL+GPU+SSD=∞ (Japanese) from Kohei KaiGai www.slideshare.netこれはかいつまんで言えば、ストレージからデータをCPU+RAMへとロードするより前に一旦GPUへとデータを転…

Dynamic ParallelismでGpuJoinはどう変わるか

NVIDIA GPUのKepler/Maxwell世代で*1対応となったDynamic Parallelismという機能がある。GPUデバイス上で動作するプログラム(Kernel関数と呼ぶ)を起動する際には、そのKernel関数を実行するために同時に何個のスレッドを起動するかを指定する。 例えば、10…

俺様スキャンの並列実行

PostgreSQL v9.6からはパラレルスキャンが導入される事になっている。この機能をざっくり説明すると 共有メモリ上に『次に読むブロックの番号』という状態を作っておく。 Gatherノードが複数のワーカープロセスを起動する。 各ワーカーで実行されるSeqScanが…

TargetListの計算をGPUで行う。

正月休みの宿題だった機能を実装できた。(注:ちゃんと動くとは言っていない)PG-Stromを使って数式の評価をGPUにオフロードする場合、WHERE句やJOIN..ON句のオフロードには対応していたものの、TargetListに複雑な演算式を含む場合、これは完全にCPU側で処…

PostgreSQLのデータ構造はなぜ並列プロセッサ向きではないか。

今年もPostgreSQL Advent Calendar 2015に参加しています。前からちょくちょく『PG-StromってXeon Phiだとどーなんですか?』的な質問を受ける事があんですが、データ構造から見て難しいので『勘弁!』という理由を紹介してみたいと思います。PostgreSQLのレ…

GpuNestedLoop

現時点でPG-Stromが対応しているワークロードは以下の4つ。 全件探索 (GpuScan) 表結合 (GpuHashJoin) 集約演算 (GpuPreAgg) ソート (GpuSort) これに、GPU内の計算処理で使うデータ型や関数が対応しているかどうかで、GPUオフロードできるかどうかが決まる…

並列Aggregateに向けて

PostgreSQL Advent Calendar 2014に参加しています。 数日前、SimonがPgSQL-Hackersに面白いパッチを投げてきた。曰く、 KaiGai, David Rowley and myself have all made mention of various ways we could optimize aggregates. Following WIP patch adds a…

AWSでPG-Strom

PG-Stromを動かそうという時に、GPU自体は安価で手に入れやすい部品なのだけども、普段使いのLinuxサーバにそうそう都合よくGPUが挿さっている人はマジョリティではないかもしれない。という事で、簡単にPG-Stromをお試しするために、AWSでのAMIイメージを作…

PG-Stromなう

最近、方々で『GPUイイよ!GPU!』と言って回っている訳ですが、今現在、PG-Stromの開発がどんなもんじゃいというのをまとめておこうと思います。振り返ってみると、2012年1月、最初にPG-Stromのプロトタイプを作ってみた時は、まさにPG-Strom管理下の外部テ…