データ型

PG-Stromは以下のデータ型をGPUで利用する事ができます。

標準の数値データ型

SQLデータ型 内部データ形式 データ長 備考
smallint cl_short 2 bytes
integer cl_int 4 bytes
bigint cl_long 8 bytes
real cl_float 4 bytes
float cl_double 8 bytes
numeric cl_ulong 可変長 64bitの内部形式にマップ

Note

GPUがnumeric型のデータを処理する際、実装上の理由からこれを64bitの内部表現に変換して処理します。 これら内部表現への/からの変換は透過的に行われますが、例えば、桁数の大きなnumeric型のデータは表現する事ができないため、PG-StromはCPU側でのフォールバック処理を試みます。したがって、桁数の大きなnumeric型のデータをGPUに与えると却って実行速度が低下してしまう事になります。 これを避けるには、GUCパラメータpg_strom.enable_numeric_typeを使用してnumericデータ型を含む演算式をGPUで実行しないように設定します。

標準の日付時刻型

SQLデータ型 内部データ形式 データ長 備考
date DateADT 4 bytes
time TimeADT 8 bytes
timetz TimeTzADT 12 bytes
timestamp Timestamp 8 bytes
timestamptz TimestampTz 8 bytes
interval Interval 16 bytes time interval

標準の可変長データ型

SQLデータ型 内部データ形式 データ長 備考
bpchar varlena * 可変長
varchar varlena * 可変長
bytea varlena * 可変長
text varlena * 可変長

標準の雑多なデータ型

SQLデータ型 内部データ形式 データ長 備考
boolean cl_bool 1 byte
money cl_long 8 bytes
uuid pg_uuid 16 bytes
macaddr macaddr 6 bytes
inet inet_struct 7 bytes or 19 bytes
cidr inet_struct 7 bytes or 19 bytes

標準の範囲型

SQLデータ型 内部データ形式 データ長 備考
int4range __int4range 14 bytes
int8range __int8range 22 bytes
tsrange __tsrange 22 bytes
tstzrange __tstzrange 22 bytes
daterange __daterange 14 bytes

PG-Stromが追加で提供するデータ型

SQLデータ型 内部データ形式 データ長 備考
float2 half_t 2 bytes 半精度浮動小数点数
reggstore cl_uint 4 bytes gstore_fdwのregclass型。PL/CUDA関数呼出しで特別な扱い。

デバイス関数と演算子

型キャスト

destination type source type description
bool int4
int2 int4,int8,float2,float4,float8,numeric
int4 int2,int8,float2,float4,float8,numeric
int8 int2,int4,float2,float4,float8,numeric
float2 int2,int4,int8,float4,float8,numeric
float4 int2,int4,int8,float2,float8,numeric
float8 int2,int4,int8,float2,float4,numeric
numeric int2,int4,int8,float2,float4,float8
money int4,int8,numeric
inet cidr
date timestamp,timestamptz
time timetz,timestamp,timestamptz
timetz time,timestamptz
timestamp date,timestamptz
timestamptz date,timestamp

関数と演算子

数値型演算子

function/operator description
TYPE = TYPE Comparison of two values
TYPE is any of int2,int4,int8
COMP is any of =,<>,<,<=,>=,>
TYPE = TYPE Comparison of two values
TYPE is any of float2,float4,float8
COMP is any of =,<>,<,<=,>=,>
numeric COMP numeric Comparison of two values
COMP is any of =,<>,<,<=,>=,>
TYPE + TYPE Arithemetic addition
TYPE is any of int2,int4,int8,float2,float4,float8,numeric
TYPE - TYPE Arithemetic substract
TYPE is any of int2,int4,int8,float2,float4,float8,numeric
TYPE * TYPE Arithemetic multiplication
TYPE is any of int2,int4,int8,float2,float4,float8,numeric
TYPE / TYPE Arithemetic division
TYPE is any of int2,int4,int8,float2,float4,float8,numeric
TYPE % TYPE Reminer operator
TYPE is any of int2,int4,int8
TYPE & TYPE Bitwise AND
TYPE is any of int2,int4,int8
TYPE | TYPE Bitwise OR
TYPE is any of int2,int4,int8
TYPE # TYPE Bitwise XOR
TYPE is any of int2,int4,int8
~ TYPE Bitwise NOT
TYPE is any if int2,int4,int8
TYPE >> int4 Right shift
TYPE is any of int2,int4,int8
TYPE << int4 Left shift
TYPE is any of int2,int4,int8
+ TYPE Unary plus
TYPE is any of int2,int4,int8,float2,float4,float8,numeric
- TYPE Unary minus
TYPE is any of int2,int4,int8,float2,float4,float8,numeric
@TYPE Absolute value
TYPE is any of int2,int4,int8,float2,float4,float8,numeric

数学関数

functions/operators description
cbrt(float8) cube root
dcbrt(float8) cube root
ceil(float8) nearest integer greater than or equal to argument
ceiling(float8) nearest integer greater than or equal to argument
exp(float8) exponential
dexp(float8) exponential
floor(float8) nearest integer less than or equal to argument
ln(float8) natural logarithm
dlog1(float8) natural logarithm
log(float8) base 10 logarithm
dlog10(float8) base 10 logarithm
pi() circumference ratio
power(float8,float8) power
pow(float8,float8) power
dpow(float8,float8) power
round(float8) round to the nearest integer
dround(float8) round to the nearest integer
sign(float8) sign of the argument
sqrt(float8) square root
dsqrt(float8) square root
trunc(float8) truncate toward zero
dtrunc(float8) truncate toward zero

三角関数

functions/operators description
degrees(float8) radians to degrees
radians(float8) degrees to radians
acos(float8) inverse cosine
asin(float8) inverse sine
atan(float8) inverse tangent
atan2(float8,float8) inverse tangent of arg1 / arg2
cos(float8) cosine
cot(float8) cotangent
sin(float8) sine
tan(float8) tangent

日付/時刻型演算子

functions/operators description
date COMP date COMP is any of =,<>,<,<=,>=,>
date COMP timestamp COMP is any of =,<>,<,<=,>=,>
date COMP timestamptz COMP is any of =,<>,<,<=,>=,>
time COMP time COMP is any of =,<>,<,<=,>=,>
timetz COMP timetz COMP is any of =,<>,<,<=,>=,>
timestamp COMP timestamp COMP is any of =,<>,<,<=,>=,>
timestamp COMP date COMP is any of =,<>,<,<=,>=,>
timestamptz COMP timestamptz COMP is any of =,<>,<,<=,>=,>
timestamptz COMP date COMP is any of =,<>,<,<=,>=,>
timestamp COMP timestamptz COMP is any of =,<>,<,<=,>=,>
timestamptz COMP timestamp COMP is any of =,<>,<,<=,>=,>
interval COMP interval COMP is any of =,<>,<,<=,>=,>
date OP int4 OP is either of +,-
int4 + date
date - date
date + time
date + timetz
time + date
time - time
timestamp - timestamp
timetz OP interval OP is either of +,-
timestamptz OP interval OP is either of +,-
overlaps(TYPE,TYPE,TYPE,TYPE) TYPE is any of time,timetz,timestamp,timestamptz
extract(text FROM TYPE) TYPE is any of time,timetz,timestamp,timestamptz,interval
now()
- interval unary minus operator
interval OP interval OP is either of +,-

文字列関数/演算子

functions/operators description
{text,bpchar} COMP {text,bpchar} COMP is either of =,<>
{text,bpchar} COMP {text,bpchar} COMP is either of <,<=,>=,>
Only available on no-locale or UTF-8
length(TYPE) length of the string
TYPE is either of text,bpchar
TYPE LIKE text TYPE is either of text,bpchar
TYPE NOT LIKE text TYPE is either of text,bpchar
TYPE ILIKE text TYPE is either of text,bpchar
Only available on no-locale or UTF-8
TYPE NOT ILIKE text TYPE is either of text,bpchar
Only available on no-locale or UTF-8

ネットワーク関数/演算子

functions/operators description
macaddr COMP macaddr COMP is any of =,<>,<,<=,>=,>
macaddr & macaddr Bitwise AND operator
macaddr | macaddr Bitwise OR operator
~ macaddr Bitwise NOT operator
trunc(macaddr) Set last 3 bytes to zero
inet COMP inet COMP is any of =,<>,<,<=,>=,>
inet INCL inet INCL is any of <<,<<=,>>,>>=,&&
~ inet
inet & inet
inet | inet
inet + int8
inet - int8
inet - inet
broadcast(inet)
family(inet)
hostmask(inet)
masklen(inet)
netmask(inet)
network(inet)
set_masklen(cidr,int)
set_masklen(inet,int)
inet_same_family(inet, inet)
inet_merge(inet,inet)

通貨型演算子

functions/operators description
money COMP money COMP is any of =,<>,<,<=,>=,>
money OP money OP is any of +,-,/
money * TYPE TYPE is any of int2,int4,float2,float4,float8
TYPE * money TYPE is any of int2,int4,float2,float4,float8
money / TYPE TYPE is any of int2,int4,float2,float4,float8

uuid型演算子

functions/operators description
uuid COMP uuid COMP is any of =,<>,<,<=,>=,>

範囲型演算子

functions/operators description
RANGE = RANGE RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
RANGE <> RANGE RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
RANGE < RANGE RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
RANGE <= RANGE RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
RANGE > RANGE RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
RANGE >= RANGE RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
RANGE @ RANGE RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
RANGE @ TYPE RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
TYPE is element type of RANGE.
RANGE <@RANGE RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
TYPE <@RANGE RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
TYPE is element type of RANGE.
RANGE && RANGE RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
RANGE << RANGE RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
RANGE >> RANGE RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
RANGE &< RANGE RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
RANGE &> RANGE RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
RANGE -|- RANGE RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
RANGE + RANGE RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
RANGE * RANGE RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
RANGE - RANGE RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
lower(RANGE) RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
upper(RANGE) RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
isempty(RANGE) RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
lower_inc(RANGE) RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
upper_inc(RANGE) RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
lower_inf(RANGE) RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
upper_inf(RANGE) RANGE is any of int4range,int8range,tsrange,tstzrange,daterange
range_merge(RANGE,RANGE) RANGE is any of int4range,int8range,tsrange,tstzrange,daterange

その他のデバイス関数

functions/operators result description
as_int8(float8) int8 Re-interpret double-precision floating point bit-pattern as 64bit integer value
as_int4(float4) int4 Re-interpret single-precision floating point bit-pattern as 32bit integer value
as_int2(float2) int2 Re-interpret half-precision floating point bit-pattern as 16bit integer value
as_float8(int8) float8 Re-interpret 64bit integer bit-pattern as double-precision floating point value
as_float4(int4) float4 Re-interpret 32bit integer bit-pattern as single-precision floating point value
as_float2(int2) float2 Re-interpret 16bit integer bit-pattern as half-precision floating point value

PG-Strom独自の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の場合、読出し中のブロック番号

GUCパラメータ

本節ではPG-Stromの提供する設定パラメータについて説明します。

特定機能の有効化/無効化

パラメータ名 初期値 説明
pg_strom.enabled bool on PG-Strom機能全体を一括して有効化/無効化する。
pg_strom.enable_gpuscan bool on GpuScanによるスキャンを有効化/無効化する。
pg_strom.enable_gpuhashjoin bool on HashJoinによるGpuJoinを有効化/無効化する。
pg_strom.enable_gpunestloop bool on NestLoopによるGpuJoinを有効化/無効化する。
pg_strom.enable_gpupreagg bool on GpuPreAggによる集約処理を有効化/無効化する。
pg_strom.pullup_outer_scan bool on GpuPreAgg/GpuJoin直下の実行計画が全件スキャンである場合に、上位ノードでスキャン処理も行い、CPU/RAM⇔GPU間のデータ転送を省略するかどうかを制御する。
pg_strom.pullup_outer_join bool on GpuPreAgg直下がGpuJoinである場合に、JOIN処理を上位の実行計画に引き上げ、CPU⇔GPU間のデータ転送を省略するかどうかを制御する。
pg_strom.enable_numeric_type bool on GPUでnumericデータ型を含む演算式を処理するかどうかを制御する。
pg_strom.cpu_fallback bool off GPUプログラムが"CPU再実行"エラーを返したときに、実際にCPUでの再実行を試みるかどうかを制御する。
pg_strom.nvme_strom_enabled bool on SSD-to-GPUダイレクトSQL実行機能を有効化/無効化する。
pg_strom.nvme_strom_threshold int 自動 SSD-to-GPUダイレクトSQL実行機能を発動させるテーブルサイズの閾値を設定する。

オプティマイザに関する設定

パラメータ名 初期値 説明
pg_strom.chunk_size int 65534kB PG-Stromが1回のGPUカーネル呼び出しで処理するデータブロックの大きさです。かつては変更可能でしたが、ほとんど意味がないため、現在では約64MBに固定されています。
pg_strom.gpu_setup_cost real 4000 GPUデバイスの初期化に要するコストとして使用する値。
pg_strom.gpu_dma_cost real 10 チャンク(64MB)あたりのDMA転送に要するコストとして使用する値。
pg_strom.gpu_operator_cost real 0.00015 GPUの演算式あたりの処理コストとして使用する値。cpu_operator_costよりも大きな値を設定してしまうと、いかなるサイズのテーブルに対してもPG-Stromが選択されることはなくなる。

エグゼキュータに関する設定

パラメータ名 初期値 説明
pg_strom.global_max_async_tasks int 160 PG-StromがGPU実行キューに投入する事ができる非同期タスクのシステム全体での最大値。
pg_strom.local_max_async_tasks int 8 PG-StromがGPU実行キューに投入する事ができる非同期タスクのプロセス毎の最大値。CPUパラレル処理と併用する場合、この上限値は個々のバックグラウンドワーカー毎に適用されます。したがって、バッチジョブ全体ではpg_strom.local_max_async_tasksよりも多くの非同期タスクが実行されることになります。
pg_strom.max_number_of_gpucontext int 自動 GPUデバイスを抽象化した内部データ構造 GpuContext の数を指定します。通常、初期値を変更する必要はありません。

列指向キャッシュ関連の設定

パラメータ名 初期値 説明
pg_strom.ccache_base_dir string '/dev/shm' 列指向キャッシュを保持するファイルシステム上のパスを指定します。通常、tmpfsがマウントされている/dev/shmを変更する必要はありません。
pg_strom.ccache_databases string '' 列指向キャッシュの非同期ビルドを行う対象データベースをカンマ区切りで指定します。pgstrom_ccache_prewarm()によるマニュアルでのキャッシュビルドには影響しません。
pg_strom.ccache_num_builders int 2 列指向キャッシュの非同期ビルドを行うワーカープロセス数を指定します。少なくともpg_strom.ccache_databasesで設定するデータベースの数以上にワーカーが必要です。
pg_strom.ccache_log_output bool false 列指向キャッシュの非同期ビルダーがログメッセージを出力するかどうかを制御します。
pg_strom.ccache_total_size int 自動 列指向キャッシュの上限を kB 単位で指定します。区画サイズの75%またはシステムの物理メモリの66%のいずれか小さな方がデフォルト値です。

gstore_fdw関連の設定

パラメータ名 初期値 説明
pg_strom.gstore_max_relations int 100 gstore_fdwを用いた外部表数の上限です。パラメータの更新には再起動が必要です。

GPUプログラムの生成とビルドに関連する設定

パラメータ名 初期値 説明
pg_strom.program_cache_size int 256MB ビルド済みのGPUプログラムをキャッシュしておくための共有メモリ領域のサイズです。パラメータの更新には再起動が必要です。
pg_strom.num_program_builders int 2 GPUプログラムを非同期ビルドするためのバックグラウンドプロセスの数を指定します。パラメータの更新には再起動が必要です。
pg_strom.debug_jit_compile_options bool off GPUプログラムのJITコンパイル時に、デバッグオプション(行番号とシンボル情報)を含めるかどうかを指定します。GPUコアダンプ等を用いた複雑なバグの解析に有用ですが、性能のデグレードを引き起こすため、通常は使用すべきでありません。

GPUデバイスに関連する設定

パラメータ名 初期値 説明
pg_strom.cuda_visible_devices string '' PostgreSQLの起動時に特定のGPUデバイスだけを認識させてい場合は、カンマ区切りでGPUデバイス番号を記述します。これは環境変数CUDA_VISIBLE_DEVICESを設定するのと同等です。
pg_strom.gpu_memory_segment_size int 512MB PG-StromがGPUメモリをアロケーションする際に、1回のCUDA API呼び出しで獲得するGPUデバイスメモリのサイズを指定します。この値が大きいとAPI呼び出しのオーバーヘッドは減らせますが、デバイスメモリのロスは大きくなります。
pg_strom.max_num_preserved_gpu_memory int 2048 確保済みGPUデバイスメモリのセグメント数の上限を指定します。通常は初期値を変更する必要はありません。