是否可以将结构数组别名为结构成员数组?
Can I alias an array of structs to an array of struct members?
我想知道是否可以在另一个数组中创建/复制结构的特定成员的"虚拟"数组。假设我们有一个结构体
struct foo {
int value;
char character;
};
现在假设有一个包含此结构foo
的数组,并且我有一个需要将所有int value
相加的操作。这通常很容易,使用指针添加所有值的循环。问题是我正在使用 OpenCL,需要将数组复制到某个设备。在 OpenCL 中,这是使用
clEnqueueWriteBuffer(cmdQueue, buffer, CL_TRUE, 0, datasize, A, 0, NULL, NULL);
这会将数组buffer
复制到设备。复制整个结构数组是没有意义的,因为这会花费更多时间,因为它还会发送不需要的character
。它还会在 OpenCL 设备上占用更多空间。因此,是否可以将结构中的value
"数组"作为数组直接复制到设备?
我知道我可以在主机 (CPU( 上创建一个包含所有值的新数组,然后将该数组复制到 OpenCL 设备,但随后我会花时间复制到本地int
-array,然后将该数组复制到 OpenCL 设备。
是否可以直接从仅包含int value
s的foo
结构数组中复制value
的"虚拟"数组?
请注意,这是我实际问题的一个非常简单的示例,并希望避免从一开始就将value
放在单独的数组中,然后结构将指向该数组。我非常怀疑这是否可行,如果我的解释有意义,但期待反馈!
No.
clEnqueueWriteBuffer
需要一个连续的容器。不能创建"虚拟"连续容器。
[我] 喜欢避免从一开始就将值放在单独的数组中。
此时,您必须分析和比较两个实现:一个是按原样复制数组和多余的数据,另一个是创建要发送的有用数据的本地副本。比较和选择。
如果你有一个结构数组,你将需要一个只包含值的暂存缓冲区,这是CPU端的额外副本。
有时这样的工作是不可避免的,但如果可以的话,最好有多个连续值的数组。即使在纯 CPU 工作中,这对于 CPU 缓存来说通常也更有效,因为它避免了对不需要的成员的读/写,并且对于 SSE 等 SIMD 指令集来说通常更容易。
例如,您可以拥有相同长度的int *values
和char *chars
(更喜欢像std::vector
或std::unique_ptr<T[]>
这样的类型!(,那么复制很容易。
- 从函数中全局删除并重新实例化数组结构,而无需在编译时知道数组的大小
- 如何使用函数的输出初始化 const 数组结构字段?
- 传递数组结构、ofstream 和 interger 以运行
- 从文本文件中读取并输入到数组结构中,然后显示读取的数据C++
- 将文本文件读取到数组结构中
- C/C++中数组结构和数组结构的通用接口
- C++ MDC final-在字符类型的数组结构中按字母顺序对记录中的名称进行排序
- C++ 使用数组结构创建平衡的二叉搜索树
- C++:释放动态数组(结构成员)和指向此结构的指针的方法
- 使用 vector 在 c++ 中声明 3D 数组结构
- 数组结构无法正确打印
- 如何在C++中访问数组结构内部的数组结构
- CIN进入数组结构似乎什么也没输入
- ifstream将数组结构到txt文件中,然后尽可能将其提取为数组
- wlanapi-将WlanFreeMemory释放其WLAN_INTERFACE_INFO数组结构
- 显示数组结构 c++
- C++ 使用函数访问数组结构的方法是什么?
- 将庞大的数组结构复制到 GPU
- 如何封送包含字符矩阵的数组结构
- C++多维数组结构的对齐