【发布时间】:2014-01-14 09:12:14
【问题描述】:
如何将连续的常量全局内存块复制到(一块连续的)私有内存?我需要 memcpy 之类的东西,然后用于在不同的 OpenCL 地址空间之间复制字节。我知道块的大小和数据连续存储在全局和本地/私有内存中,所以,总的来说,这应该是可能的,对吧?
在我的具体问题中,我有一个结构类型的常量全局数组,其中包含 int、float 甚至另一种结构类型。为了防止将结构的每个成员与全局内存分开(这很慢),我想在私有内存中拥有一个完整数组元素的副本。不幸的是,像 privatestruct = globalstruct[i] 这样的操作不会导致完整结构的深层复制。
当然,我不是第一个提出这个或类似问题的人,所以 stackoverflow 上有几个线程讨论相关问题。但是,实际上所有答案都建议使用 async_work_group_copy 这不能是通用答案,因为它仅被定义为干净的内置数据类型,而不是混合结构、结构结构或任何(例如按位)用户定义的内存解释.无论如何,它是为本地内存准备的。
非常感谢您的任何建议!
【问题讨论】:
-
我在设计中使用了结构体。访问慢没问题。这完全取决于您如何访问结构,以及是否以合并的方式进行访问。也许您使用的结构不是最有效的模式。我建议您使用 async_work_group_copy() 但将指针转换为通用类型。然后,如果您知道结构的大小,那么以后使用它(在另一次转换之后)应该没有问题。
-
谢谢!我会试试这个......结构的目的是让线程所需的所有输入数据都连续位于内存中,所以我没有太多可以优化的地方
标签: memory struct opencl memcpy