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を返します。

Arrow_Fdw関連

関数 戻り値 説明
pgstrom.arrow_fdw_truncate(regclass) bool 指定されたArrow_Fdw外部テーブルの内容を全て消去します。Arrow_Fdw外部テーブルはwritableである必要があります。

GPUデータフレーム関数

関数 戻り値 説明
pgstrom.arrow_fdw_export_cupy(regclass, text[], int) text 指定された列のArrow_Fdw外部テーブルの内容をcuPyのデータフレーム(cupy.ndarray)としてエクスポートします。GPUバッファはセッション終了時に自動的に解放されます。
pgstrom.arrow_fdw_export_cupy_pinned(regclass, text[], int) text 指定された列のArrow_Fdw外部テーブルの内容をcuPyのデータフレーム(cupy.ndarray)としてエクスポートします。GPUバッファはピンニングされ、セッション終了後も有効です。
pgstrom.arrow_fdw_put_gpu_buffer(text) bool 上記の関数でエクスポートされたGPUバッファを解放します。
pgstrom.arrow_fdw_unpin_gpu_buffer(text) bool 上記の関数でエクスポートされたGPUバッファのピンニングを解除します。

テストデータ生成関数

関数 戻り値 説明
pgstrom.random_setseed(int) void 乱数の系列を初期化します。
pgstrom.random_int(float=0.0, bigint=0, bigint=INT_MAX) bigint bigint型のランダムデータを指定の範囲内で生成します。
pgstrom.random_float(float=0.0, float=0.0, float=1.0) float float型のランダムデータを指定の範囲内で生成します。
pgstrom.random_date(float=0.0, date='2015-01-01', date='2025-12-31') date date型のランダムデータを指定の範囲内で生成します。
pgstrom.random_time(float=0.0, time='00:00:00', time='23:59:59') time time型のランダムデータを指定の範囲内で生成します。
pgstrom.random_timetz(float=0.0, time='00:00:00', time='23:59:59') timetz timetz型のランダムデータを指定の範囲内で生成します。
pgstrom.random_timestamp(float=0.0, timestamp='2015-01-01', timestamp='2025-01-01') timestamp timestamp型のランダムデータを指定の範囲内で生成します。
pgstrom.random_macaddr(float=0.0, macaddr='ab:cd:00:00:00', macaddr='ab:cd:ff:ff:ff:ff') macaddr macaddr型のランダムデータを指定の範囲内で生成します。
pgstrom.random_inet(float=0.0, inet='192.168.0.1/16') inet inet型のランダムデータを指定の範囲内で生成します。
pgstrom.random_text(float=0.0, text='test_**') text text型のランダムデータを生成します。第二引数の'*'文字をランダムに置き換えます。
pgstrom.random_text_len(float=0.0, int=10) text text型のランダムデータを指定文字列長の範囲内で生成します。
pgstrom.random_int4range(float=0.0, bigint=0, bigint=INT_MAX) int4range int4range型のランダムデータを指定の範囲内で生成します。
pgstrom.random_int8range(float=0.0, bigint=0, bigint=LONG_MAX) int8range int8range型のランダムデータを指定の範囲内で生成します。
pgstrom.random_tsrange(float=0.0, timestamp='2015-01-01', timestamp='2025-01-01') tsrange tsrange型のランダムデータを指定の範囲内で生成します。
pgstrom.random_tstzrange(float=0.0, timestamptz='2015-01-01', timestamptz='2025-01-01') tstzrange tstzrange型のランダムデータを指定の範囲内で生成します。
pgstrom.random_daterange(float=0.0, date='2015-01-01', date='2025-12-31') daterange daterange型のランダムデータを指定の範囲内で生成します。

その他の関数

関数 戻り値 説明
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デバイスメモリ領域の情報を出力します。 現在のところ、Arrow_FdwのPython連携機能がこれを使用しています。

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