gpt4 book ai didi

c++ - 我可以将结构数组别名为结构成员数组吗?

转载 作者:行者123 更新时间:2023-11-27 23:43:28 24 4
gpt4 key购买 nike

我想知道是否可以在另一个数组中创建/复制结构的特定成员的“虚拟”数组。假设我们有一个结构

struct foo {
int value;
char character;
};

现在假设有一个包含此结构 foo 的数组,并且我有一个操作需要将所有 int 值 加在一起。这通常很容易通过循环将所有值与指针相加。问题是我正在使用 OpenCL 并且需要将数组复制到某个设备。在 OpenCL 中,这是使用

clEnqueueWriteBuffer(cmdQueue, buffer, CL_TRUE, 0, datasize, A, 0, NULL, NULL);

这会将数组 buffer 复制到设备。复制整个结构数组没有意义,因为这会花费更多时间,因为它还会发送不需要的 character。它还会占用 OpenCL 设备上的更多空间。因此是否可以将的“数组”作为数组直接从结构复制到设备?

我知道我可以在主机 (CPU) 上创建一个包含所有值的新数组,然后将该数组复制到 OpenCL 设备,但随后我会花时间复制到本地 int-数组,然后将该数组复制到 OpenCL 设备。

是否可以直接从 foo 结构数组复制一个“虚拟”value 数组,只包含 int 值s?

请注意,这是我的实际问题的一个非常简化的示例,并且希望避免从一开始就将 value 放在单独的数组中,然后结构将指向该数组。我非常怀疑这是可能的,如果我的解释有道理,但期待反馈!

最佳答案

没有。

clEnqueueWriteBuffer 需要一个连续的容器。您不能创建“虚拟”连续容器。

[I] like to avoid having the values in a separate array from the beginning.

此时,您必须分析和比较两种实现方式:一种是按原样复制带有多余数据的数组,另一种是创建有用数据的本地拷贝以发送。比较选择。

关于c++ - 我可以将结构数组别名为结构成员数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52588547/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com