データ型
PG-Stromは以下のデータ型をGPUで利用する事ができます。
数値データ型
int1[データ長: 1byte]- 8bit整数型。PG-Stromによる独自拡張
int2(別名smallint) [データ長: 2bytes]- 16bit整数型
int4(別名int) [データ長: 4bytes]- 32bit整数型
int8(別名bigint) [データ長: 8bytes]- 64bit整数型
float2[データ長: 2bytes]- 半精度浮動小数点型。PG-Stromによる独自拡張
Note
GPUでは半精度浮動小数点型がハードウェアでサポートされていますが、CPU(x86_64プロセッサ)では未対応です。そのため、float2データ型をCPUで処理する場合には、これを一度floatやdouble型に変換した上で演算を行います。そのため、GPUのようにfloat2の方が演算速度で有利という事はありません。機械学習や統計解析用途にデータ量を抑制するための機能です。
float4(別名real) [データ長: 4bytes]- 単精度浮動小数点型
float8(別名double precision) [データ長: 8bytes]- 倍精度浮動小数点型
numeric[データ長: 可変]- 実数型。GPU側では128bit固定小数点として扱われる。
Note
GPUがnumeric型のデータを処理する際、実装上の理由からこれを128bit固定少数点の内部表現に変換して処理します。(これは Apache Arrow のDecimal型と同一の形式です)
これら内部表現への/からの変換は透過的に行われますが、例えば、桁数の大きなnumeric型のデータは表現する事ができないため、PG-StromはCPU側でのフォールバック処理を試みます。したがって、桁数の大きなnumeric型のデータをGPUに与えると却って実行速度が低下してしまう事になります。
これを避けるには、GUCパラメータpg_strom.enable_numeric_typeを使用してnumericデータ型を含む演算式をGPUで実行しないように設定します。
日付時刻型
date[データ長: 4bytes]- 日付データ型
time(別名time without time zone) [データ長: 8bytes]- 時刻データ型
timetz(別名time with time zone) [データ長: 12bytes]- 時刻データ型(タイムゾーン付き)
timestamp(別名timestamp without time zone) [データ長: 8bytes]- タイムスタンプ型
timestamptz(別名timestamp with time zone) [データ長: 8bytes]- タイムスタンプ型(タイムゾーン付き)
interval[データ長: 16bytes]- 時間間隔型
可変長データ型
bpchar[データ長: 可変長]- 可変長テキスト型(空白パディングあり)
varchar[データ長: 可変長]- 可変長テキスト型
text[データ長: 可変長]- 可変長テキスト型
bytea[データ長: 可変長]- 可変長バイナリ型
非構造データ型
jsonb[length: 可変長]- バイナリインデックスを内包するJSONデータ型
Note
jsonbデータ型をGPUで処理させる場合には、次の2つの点に留意してください。
実際に参照されない属性もストレージから読み出し、GPUに転送する必要があるため、I/Oバスの利用効率は必ずしも良くないデータ型である事。データ長がTOAST化の閾値(通常は2kB弱)を越えてしまった場合、jsonbデータ全体がTOASTテーブルへ書き出されるため、GPU側では処理できず非効率なCPU-fallback処理を呼び出してしまう事。
後者の問題に対しては、テーブルのストレージオプションtoast_tuple_targetを拡大し、TOAST化の閾値を引き上げる事である程度は回避する事も可能です。
雑多なデータ型
boolean[データ長: 1byte]- 論理値データ型
money[データ長: 8bytes]- 通貨データ型
uuid[データ長: 16bytes]- UUIDデータ型
macaddr[データ長: 6bytes]- ネットワークMACアドレス型
inet[データ長: 7 or 19bytes]- ネットワークアドレス型
cidr[データ長: 7 or 19butes]- ネットワークアドレス型
cube[データ長: 可変長]contrib/cubeによって提供される拡張データ型
ジオメトリ型
geometry[データ長: 可変]- PostGISジオメトリオブジェクト
box2df[データ長: 16bytes]- 2次元バウンディングボックス(GiSTインデックス用)