heterodb/pg-strom

array_append実行でCUDA_ERROR_ASSERT

Closed this issue · 2 comments

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;

fd4ba98d06806b5c220bee0455079e559e996e3a で修正しました。

array と composite 型をGPUで次ステップへ運ぶ(例えば、Scan -> Projectionとか、Join1 -> Join2みたいな)際に使うバッファのオフセットが、他のものと重複していた。そのため、GPUのタイミング問題でメモリ破壊が起こったり起こらなかったり。
原因は、codegen.c で devtype_info をセットアップする時の kvec_sizeof の初期化漏れ。

確認しました。ご対応ありがとうございました。