Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

(JP) Row-Store メタ情報形式の構造問題 #14

Closed
kaigai opened this issue May 14, 2014 · 1 comment
Closed

(JP) Row-Store メタ情報形式の構造問題 #14

kaigai opened this issue May 14, 2014 · 1 comment

Comments

@kaigai
Copy link
Contributor

kaigai commented May 14, 2014

typedef struct {
cl_uint length; /* length of this kernel row_store /
cl_uint ncols; /
number of columns in the source relation /
cl_uint nrows; /
number of rows in this store /
kern_colmeta colmeta[FLEXIBLE_ARRAY_MEMBER]; /
metadata of columns */
} kern_row_store;

row-store 上に保持しているタプルのデータ形式を表現する kern_colmeta フィールドの形式に問題。
column-storeにキャッシュされている列か否かを示すフラグをkern_colmeta->flags に持っていたが、column-storeで使用する列は問い合わせの度に変わるので、本来は row-store に保持すべき情報ではない。
GpuScanでは bytea 型の KPARAM_0 を持つようにし、この中にどの列が参照されたのかを示すフラグを持つ事で、デバイス上の row => column 変換でコピーすべき列が明らかになる。

@kaigai
Copy link
Contributor Author

kaigai commented May 14, 2014

当該修正の過程で、row-storeのusageカウンタが正しく初期化されていない問題が顕在化。
row-storeのcolmeta[]配列の長さを無視していたため、場合によってはrow-storeへのタプル追記によってcolmeta[]配列が破壊されてしまい、それによって kernel 内の row=>column 変換が誤動作、クラッシュする事があった。修正済み。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant