SQLオブジェクト

本章ではPG-Stromが独自に提供するSQLオブジェクトについて説明します。

デバイス情報関数

関数 戻り値 説明
gpu_device_name(int = 0) text 指定したGPUデバイスの名前を返します
gpu_global_memsize(int = 0) bigint 指定したGPUデバイスのデバイスメモリ容量を返します
gpu_max_blocksize(int = 0) int 指定したGPUデバイスにおけるブロックサイズの最大値を返します。現在サポート対象のGPUでは1024です。
gpu_warp_size(int = 0) int 指定したGPUデバイスにおけるワープサイズを返します。現在サポート対象のGPUでは32です。
gpu_max_shared_memory_perblock(int = 0) int 指定したGPUデバイスにおけるブロックあたり共有メモリの最大値を返します。
gpu_num_registers_perblock(int = 0) int 指定したGPUデバイスにおけるブロックあたりレジスタ数を返します。
gpu_num_multiptocessors(int = 0) int 指定したGPUデバイスにおけるSM(Streaming Multiprocessor)ユニットの数を返します。
gpu_num_cuda_cores(int = 0) int 指定したGPUデバイスにおけるCUDAコア数を返します。
gpu_cc_major(int = 0) int 指定したGPUデバイスのCC(Compute Capability)メジャーバージョンを返します。
gpu_cc_minor(int = 0) int 指定したGPUデバイスのCC(Compute Capability)マイナーバージョンを返します。
gpu_pci_id(int = 0) int 指定したGPUデバイスが接続されているPCIバスIDを返します。

配列ベース行列サポート

PL/CUDA関数と行列データを受け渡しするために、PostgreSQLの配列型を使用する事ができます。 固定長の論理値/数値型データでNULLを含まない二次元配列は(配列データ型のヘッダ領域を除いて)フラットなデータ構造を持っており、行列のインデックスによって各要素のアドレスを一意に特定する事ができます。 PG-Stromは配列ベースの行列を取り扱うためのSQL関数をいくつか提供しています。

型キャスト

変換先 変換元 説明
int[] bit ビット列型を32bit整数値の配列に変換します。不足するビットは0で埋められます。
bit int[] int配列をビット列型に変換します。

配列ベース行列関数

関数/演算子 返り値 説明
array_matrix_validation(anyarray) bool 配列が配列ベース行列の条件を満足しているかどうかチェックします。
array_matrix_height(anyarray) int 配列ベース行列の高さを返します。
array_matrix_width(anyarray) int 配列ベース行列の幅を返します。
array_vector_rawsize(regtype,int) bigint 指定のデータ型で長さNのベクトルを作成した場合のサイズを返します。
array_matrix_rawsize(regtype,int,int) bigint 指定のデータ型で高さH幅Wの行列を作成した場合のサイズを返します。
array_cube_rawsize(regtype,int,int,int) bigint 指定のデータ型で高さH幅W深さDのキューブを作成した場合のサイズを返します。
type_len(regtype) bigint 指定のデータ型のサイズを返します。
composite_type_rawsize(LEN,...) bigint 指定のデータ長の並びで複合型を定義した時に必要なサイズを返します。type_len()を組み合わせて使用する事を想定しています。
LENint,bigintのいずれか
matrix_unnest(anyarray) record 集合を返す関数で、配列ベース行列の先頭行から順に1行ずつ取り出します。PostgreSQLはレコードの型情報を持っていませんので、ROW()句によって型情報を与える必要があります。
rbind(MATRIX,MATRIX) MATRIX 配列ベース行列を縦方向に結合します。
MATRIXbool,int2,int4,int8,float4,float8いずれかの配列型
rbind(TYPE,MATRIX) MATRIX 配列ベース行列の先頭行にスカラ値を結合します。複数列が存在する場合、先頭行の全ての列に同じスカラ値がセットされます。
MATRIXbool,int2,int4,int8,float4,float8いずれかの配列型
TYPEMATRIXの要素型
rbind(MATRIX,TYPE) MATRIX 配列ベース行列の末尾行にスカラ値を結合します。複数列が存在する場合、末尾行の全ての列に同じスカラ値がセットされます。
MATRIXbool,int2,int4,int8,float4,float8いずれかの配列型
TYPEMATRIXの要素型
cbind(MATRIX,MATRIX) MATRIX 配列ベース行列を横方向に結合します。
MATRIXbool,int2,int4,int8,float4,float8いずれかの配列型
cbind(TYPE,MATRIX) MATRIX 配列ベース行列の左側にスカラ値を結合します。複数行が存在する場合、左端の全ての行に同じスカラ値がセットされます。
MATRIXbool,int2,int4,int8,float4,float8いずれかの配列型
TYPEMATRIXの要素型
cbind(MATRIX,TYPE) MATRIX 配列ベース行列の右側にスカラ値を結合します。複数行が存在する場合、右端の全ての行に同じスカラ値がセットされます。
MATRIXbool,int2,int4,int8,float4,float8いずれかの配列型
TYPEMATRIXの要素型
transpose(MATRIX) MATRIX 配列ベース行列を転置します。
MATRIXbool,int2,int4,int8,float4,float8いずれかの配列型

集約関数

関数/演算子 返り値 説明
array_matrix(TYPE,...) TYPE[] 可変長引数の集約関数です。M個の引数でN行が入力されると、M列xN行の配列ベース行列を返します。
TYPEbool,int2,int4,int8,float4,float8のいずれかです。
array_matrix(bit) int[] ビット列を32bit整数値の組と見なして、int4[]型の配列ベース行列として返す集約関数です。
rbind(MATRIX) MATRIX 入力された配列ベース行列を縦に連結する集約関数です。
MATRIXbool,int2,int4,int8,float4,float8いずれかの配列型
cbind(MATRIX) MATRIX 入力された配列ベース行列を横に連結する集約関数です。
MATRIXbool,int2,int4,int8,float4,float8いずれかの配列型

その他の関数

関数 戻り値 説明
pgstrom_ccache_enabled(regclass) text 指定したテーブルに対するインメモリ列キャッシュを有効にします。
pgstrom_ccache_disabled(regclass) text 指定したテーブルに対するインメモリ列キャッシュを無効にします。
pgstrom_ccache_prewarm(regclass) int 指定したテーブルに対するインメモリ列キャッシュを同期的に構築します。キャッシュ使用量の上限に達した時は、その時点で終了します。
関数 戻り値 説明
gstore_fdw_format(reggstore) text gstore_fdw外部テーブルの内部データ形式を返します。
gstore_fdw_nitems(reggstore) bigint gstore_fdw外部テーブルの行数を返します。
gstore_fdw_nattrs(reggstore) bigint gstore_fdw外部テーブルの列数を返します。
gstore_fdw_rawsize(reggstore) bigint gstore_fdw外部テーブルのバイト単位のサイズを返します。
関数 戻り値 説明
gstore_export_ipchandle(reggstore) bytea gstore_fdwのGPUデバイスメモリ領域のIPCハンドラを返します。
lo_import_gpu(int, bytea, bigint, bigint, oid=0) oid 外部アプリケーションの確保したGPUデバイスメモリ領域をマップし、その内容をラージオブジェクトへインポートします。
lo_export_gpu(oid, int, bytea, bigint, bigint) bigint 外部アプリケーションの確保したGPUデバイスメモリ領域をマップし、ラージオブジェクトの内容を当該領域へエクスポートします。
関数 戻り値 説明
plcuda_kernel_max_blocksz int PL/CUDA関数のヘルパーとして呼ばれた場合、当該GPUカーネルの最大ブロックサイズを返す。
plcuda_kernel_static_shmsz() int PL/CUDA関数のヘルパーとして呼ばれた場合、当該GPUカーネルが静的に確保したブロックあたり共有メモリサイズを返す。
plcuda_kernel_dynamic_shmsz() int PL/CUDA関数のヘルパーとして呼ばれた場合、当該GPUカーネルが動的に確保する事のできるブロックあたり共有メモリサイズを返す。
plcuda_kernel_const_memsz() int PL/CUDA関数のヘルパーとして呼ばれた場合、当該GPUカーネルが静的に確保したコンスタントメモリのサイズを返す。
plcuda_kernel_local_memsz() int PL/CUDA関数のヘルパーとして呼ばれた場合、当該GPUカーネルが使用するスレッドあたりローカルメモリのサイズを返す。
関数 戻り値 説明
pgstrom.license_validation() text 商用サブスクリプションを手動でロードします。
pgstrom.license_query() text 現在ロードされている商用サブスクリプションを表示します。

システムビュー

PG-Stromは内部状態をユーザやアプリケーションに出力するためのシステムビューをいくつか提供しています。 これらのシステムビューは将来のバージョンで情報が追加される可能性があります。そのため、アプリケーションからSELECT * FROM ...によってこれらシステムビューを参照する事は避けてください。

pgstrom.device_info

pgstrom.device_infoシステムビューは、PG-Stromが認識しているGPUのデバイス属性値を出力します。 GPUはモデルごとにコア数やメモリ容量、最大スレッド数などのスペックが異なっており、PL/CUDA関数などで直接GPUのプログラミングを行う場合には、これらの情報を元にソフトウェアを最適化する必要があります。

名前 データ型 説明
device_nr int GPUデバイス番号
aindex int 属性インデックス
attribute text デバイス属性名
value text デバイス属性値

pgstrom.device_preserved_meminfo

pgstrom.device_preserved_meminfoシステムビューは、複数のPostgreSQLバックエンドプロセスから共有するために予め確保済みのGPUデバイスメモリ領域の情報を出力します。 現在のところ、gstore_fdwのみが本機能を使用しています。

名前 データ型 説明
device_nr int GPUデバイス番号
handle bytea 確保済みGPUデバイスメモリのIPCハンドラ
owner regrole 確保済みGPUデバイスメモリの作成者
length bigint 確保済みGPUデバイスメモリのバイト単位の長さ
ctime timestamp with time zone 確保済みGPUデバイスメモリの作成時刻

pgstrom.ccache_info

pgstrom.ccache_infoシステムビューは、列指向キャッシュの各チャンク(128MB単位)の情報を出力します。

名前 データ型 説明
database_id oid データベースID
table_id regclass テーブルID
block_nr int チャンクの先頭ブロック番号
nitems bigint チャンクに含まれる行数
length bigint キャッシュされたチャンクのサイズ
ctime timestamp with time zone チャンク作成時刻
atime timestamp with time zone チャンク最終アクセス時刻

pgstrom.ccache_builder_info

pgstrom.ccache_builder_infoシステムビューは、列指向キャッシュの非同期ビルダープロセスの情報を出力します。

名前 データ型 説明
builder_id int 列指向キャッシュ非同期ビルダーのID
state text ビルダープロセスの状態。(shutdown: 停止中、startup: 起動中、loading: 列指向キャッシュの構築中、sleep: 一時停止中)
database_id oid ビルダープロセスが割り当てられているデータベースID
table_id regclass stateloadingの場合、読出し中のテーブルID
block_nr int stateloadingの場合、読出し中のブロック番号