スキャン速度10GB/sへの挑戦~その④ 完結編~

今回のエントリは、ここ1年ほど取り組んでいた PG-Strom による大量データのスキャン・集計処理性能改善の取り組みが、当面の目標であったシングルノード10GB/sを達成したという完結編です。(長かった) 要素技術:SSD-to-GPUダイレクトSQL 先ず、PG-Strom…

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

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

時系列データ/BRINインデックス対応

PG-StromにBRINインデックス対応機能を実装してみた。まずは、以下のEXPLAIN ANALYZEの実行結果をご覧いただきたい。 条件句で参照しているymd列は日付型(date)で、テーブルにデータを挿入する際には意図的に日付順にINSERTを行っている。 postgres=# EXPL…

Partition-wise GpuJoin/GpuPreAgg

PostgreSQL v10以降ではテーブルパーティショニングの機能が入っており、値の範囲、または値のリストによってテーブルをいくつかのパーティションに分割する事が可能となっている。遅まきながら、PG-Stromにパーティションを意識した実行計画を作成するよう…

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

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

gstore_fdwの圧縮オプション

昨年11月に、GPUメモリをSQLで読み書きするための新機能『gstore_fdw』というものを実装した。*1これは、PostgreSQLのFDW(Foreign Data Wrapper)の機能を利用して、SELECTが実行された時にはGPUメモリから読み出した内容をPostgreSQLの内部データ表現に…

PostgreSQL v11新機能先取り:Hash-PartitioningとParallel-Append

今回のエントリーは PostgreSQL Advent Calendar 2017 - Qiita に参加しています。PG-Stromの視点からも、PostgreSQL v11には首を長くして待っていた機能が2つ入っている。その1:Hash-Partitioning github.comその2:Parallel-Append github.comHash-Part…

GTCJapan雑感と、ちょっとした思い付き。

12月12日(火)~13日(水)にかけて、お台場のヒルトンホテルでGPU Technology Conference Japanが開催された。(関係者の皆様、お疲れさまでした!) www.gputechconf.jp当方の出番は、初日夕方の INCEPTION AI Startup Summit というスタートアップ19社のプレ…

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

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

カスタムロジックをWHERE句で使う

しばらくSSD-to-GPUダイレクトSQL実行の開発にどっぷり時間を突っ込んでいたので、久々にPL/CUDAネタ。この辺のネタや、 kaigai.hatenablog.comこの辺のネタで kaigai.hatenablog.com紹介したように、PG-Stromはユーザ定義関数をCUDA Cで記述するための機能…

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

一年半ほど前、次のようなエントリーを書いた。kaigai.hatenablog.comかいつまんで言うと、多段JOINのように、実際に実行してみないと結果行数が明らかではなく、かつ、ステップ(k+1)の最適な問題サイズがステップkの結果に依存する場合、Kepler以降のGPUで…

GpuJoinの結果バッファ問題を考える。

GPUでSQLのJOIN処理を実装する場合、一つ悩ましい問題は、JOINの結果生成されるレコード数は実際に実行してみなければ正確には分からないという点である。 JOINを処理した結果、行数が減る事もあれば増える事もある。減るパターンはまだ良いとして、時として…

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は(当時のハイエンド製品だったにも関…

NECを退職し、新会社を立ち上げました。

ご報告が遅れましたが、6月30日付で新卒の2003年から14年あまり勤務したNECを退職しました。 また、本日、東京法務局品川出張所においてヘテロDB株式会社の登記申請を行い、また、併せて新会社のチーフアーキテクト兼代表取締役社長に就任しました。今後は、…

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

PCIe直結のNVMe-SSDは、コントローラの性能にもよるものの、PCIe x4接続のコンシューマ製品であれば一枚あたり1.8GB/s~3.5GB/s、PCIe x8接続のエンタープライズ製品であれば一枚あたり5.0GB/s~6.0GB/sものスループットを出すことができる。ただ、実際には…

GTC2017 - 個人的トピック

個人的トピックまとめ。 ポスター発表 今回、急遽渡米することを決めた理由がこのポスター発表。セッションやトレーニングと並行して、GTCではGPUを用いた研究開発ネタのポスター展示が行われており、今年は約140件のポスター展示が採択されている。 このう…

GTC2017 - Tesla V100 と CUDA9.0

今年のGTCはジェンスン・ファンCEOの基調講演が3日目に設定されており、そこでVolta世代の新製品 Tesla V100 と、それを搭載するDGX-1などサーバ製品とGPUクラウドが発表された。 4日間の日程のうち、情報の解禁が3日目の正午なので、その後は慌ただしくVolt…

Posters flying on GTC2017

I'm on GTC(GPU Technology Conference) this year again. I didn't plan to trip because of travel budget, so only posters are submitted and approved. (Posters are shown regardless of the attendance of the presenter.)But I got an e-mail below.…

進捗)SSD-to-GPU ダイレクトSQL実行機能

ここ暫くブログでまとめていなかった、SSD-to-GPUダイレクトSQL実行機能の進捗について。この機能をかいつまんで言うと、NVMe-SSDに格納されているPostgreSQLのデータブロックをGPU RAMに直接転送し、そこでSQLのWHERE句/JOIN/GROUP BYを実行することで見か…

PCIeスロット接続型NVMe-SSDまとめ(2017年4月時点)

SSD

PCIeスロット接続型のNVMe-SSDのスペック等、各社どうだったけな~と探すものの、案外まとまった情報がないので自分でまとめてみた。ブックマーク代わりです。 基本的に各社のWebに掲載されているカタログスペックを転記。手作業なので内容の正確さに関して…

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

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

2017年の開発ロードマップについて考える

あけましておめでとうございました。(やや出遅れ感)新年という事で、この一年、どういった技術開発に取り組んでいきたいかをざーっと書き出してみる事にする。 これらのうち、いくつかはPostgreSQL本体機能の強化を伴うものであったりするので、ある程度計…

Beyond the 1GB limitation of varlena

This article is a part of the PostgreSQL Advent Calendar 2016.According to the request by Joe Conway (@josepheconway), I wrote this article in English.I like to share the discussion we had at the PostgreSQL developer unconference on the da…

PGconf.SV 2016 and PL/CUDA

I've participated PGconf Silicon Valley 2016 held at the South San Francisco Conference Center. I could have a presentation here. Its title is PL/CUDA - Fusion of HPC Grade Power with In-Database Analytics. Its slides are below: https://ww…

PL/CUDAでk-means法を実装する

前回のエントリでは、CBI学会で発表を行った、PL/CUDAによる類似化合物の検索について説明した。今回は、コレとはまた別のワークロードに対する応用という事で、クラスタリング処理のIn-Database実装に挑戦してみた。 トライしてみたのは k-means法 によるク…

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程…