这样的代码:
__constant char a[1] = "x";
...
__local char b[1];
async_work_group_copy(b, a, 1, 0);
抛出编译错误:
no instance of overloaded function "async_work_group_copy" matches the argument list
所以似乎这个函数不能用于从__constant
地址空间复制。我对吗?如果是,那么将__constant
数据复制到__local
内存以便更快访问的首选方法是什么?现在我使用一个简单的for循环,其中每个工作项复制几个元素。
答案 0 :(得分:1)
async_work_group_copy()
被定义为仅在本地和全局内存之间复制(请参阅此处:http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/)。
据我所知,没有方法可以执行从常量到本地内存的批量复制。也许原因是常量内存实际上缓存在我所知道的所有GPU上,这实际上意味着它以与本地内存相同的速度工作。
vloadn()
系列函数可以为所有类型的内存加载整个向量,包括常量,这样可以部分匹配您需要的内容。但是,它不是批量复制。