ARRAY型のANY()でCUDA_ERROR_MISALIGNED_ADDRESS発生
Closed this issue · 3 comments
0-kaz commented
以下のクエリでCUDA_ERROR_MISALIGNED_ADDRESSが発生します。
SELECT id,x INTO test01g FROM regtest_data
WHERE 72 = ANY(x);
DROP TABLE IF EXISTS regtest_data;
CREATE TABLE regtest_data (
id int,
x int[]
);
SELECT pgstrom.random_setseed(20190630);
INSERT INTO regtest_data (
SELECT x, array[pgstrom.random_int(2,0,1000),
pgstrom.random_int(2,0,1000),
pgstrom.random_int(2,0,1000)]
FROM generate_series(1,5000) x
);
SET pg_strom.enabled = on;
SELECT id,x INTO test01g FROM regtest_data
WHERE 72 = ANY(x);
参考:EXPLAIN結果
QUERY PLAN
-------------------------------------------------------------------------------
Custom Scan (GpuScan) on regtest_data (cost=100.00..147.11 rows=20 width=37)
GPU Projection: id, x
GPU Scan Quals: (72 = ANY (x)) [rows: 5000 -> 20]
(3 rows)
kaigai commented
あらー。PostgreSQLの配列型ってヘッダ1バイトの後ろにデータが詰まってる事もあるから、油断するとすぐmisalignedなっちゃうのよね。。。
kaigai commented
325b6b4d187d7473399c7c623db7c132650a5a08
で修正。
スカラ―値ならアライメントが保証されているんですが、配列の要素として int4 などインラインデータ型が参照される時にアライン保証がないという話でした。
0-kaz commented
確認できました。クローズします。