array_append実行でCUDA_ERROR_ASSERT
Closed this issue · 2 comments
0-kaz commented
UPDATE句でarray_appendを実行すると、エラーが発生する。
エラーが生じず、無応答となる場合もある。
発生頻度は稀だが、UPDATEのSQLを繰り返し連続して実行すると、3~20回程度で必ず発生している。
UPDATE regtest_data
SET x = array_append(x, pgstrom.random_int(2,0,1000)::int)
WHERE id % 7 = 4;
発生したエラーメッセージ
ERROR: gpu_service.c:1997 failed on cuEventSynchronize: CUDA_ERROR_ASSERT
HINT: device at GPU-0, function at gpuservHandleGpuTaskExec
全体
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;
UPDATE regtest_data
SET x = array_append(x, pgstrom.random_int(2,0,1000)::int)
WHERE id % 7 = 4;
kaigai commented
fd4ba98d06806b5c220bee0455079e559e996e3a
で修正しました。
array と composite 型をGPUで次ステップへ運ぶ(例えば、Scan -> Projectionとか、Join1 -> Join2みたいな)際に使うバッファのオフセットが、他のものと重複していた。そのため、GPUのタイミング問題でメモリ破壊が起こったり起こらなかったり。
原因は、codegen.c で devtype_info をセットアップする時の kvec_sizeof の初期化漏れ。
0-kaz commented
確認しました。ご対応ありがとうございました。