我试图设置新的__local float但是当我将float的大小作为参数传递时我得到错误。
此代码提供错误:
int TILE_DIM = get_local_size(0)*get_local_size(1); //local size
__local float buffer[TILE_DIM];
此代码不会:
int TILE_DIM = get_local_size(0)*get_local_size(1); //local size
__local float buffer[512];
答案 0 :(得分:2)
必须始终在内核运行之前分配本地内存。因此,没有可能具有内核运行时长度的数组。但是,您可以将指针传递给(未初始化的)getPage(id: number) : Observable<Page>{
// ...using get request
return this.http.get(this.pagesUrl)
// ...and calling .json() on the response to return data
.map((res:Response) => res.json())
// ... do antoher map an return the correct object
.map((data: Array<any>) => {
return data.find(x => x.id === id)
})
//...errors if any
.catch((error:any) => Observable.throw(error.json().error || 'Server error'));
}
内存作为内核的参数。可以在clSetKernelArg()调用中设置此长度。 (查看链接文档以获取有关本地内存内核参数的详细信息。)因此,它是每个排队内核的可变长度,但不是每个工作组。
答案 1 :(得分:2)
__local
数组的大小可以传递给options
参数中的clBuildProgram:"-DTILE_DIM=512"
例如:
clBuildProgram(program, 1, &device.device_id, "-DTILE_DIM=512", NULL, NULL);
这样可以在内核构建时确定本地数组的大小。