【发布时间】:2016-11-08 01:38:44
【问题描述】:
比如,这段sn-p的代码能正常编译执行吗?
int* end = local_buffer + BUFFER_SIZE;
for(int* x = local_buffer; x < end; ++x)
{
...
}
【问题讨论】:
-
可以,只要指针都在设备空间中。没问题。
比如,这段sn-p的代码能正常编译执行吗?
int* end = local_buffer + BUFFER_SIZE;
for(int* x = local_buffer; x < end; ++x)
{
...
}
【问题讨论】:
指针算法确实有效,但您需要使用适当的内存空间注释您的指针。所以你的示例代码很可能是错误的:如果local_buffer 被声明为
local int local_buffer[BUFFER_SIZE];
那么end 和x 变量的类型必须也有local 说明符:
local int* end = …;
for (local int* x = …
默认是global,如果你的指针指向本地或常量内存,这将导致事情严重失败。我发现许多 OpenCL 实现不会对此发出警告,因此您必须非常小心。
【讨论】: