我正在研究一种遗传算法,我想尝试将一些函数放入 cuda 中,看看是否可以实现值得的加速。
目前的数据结构是一棵节点树,其中函数节点包含指向它们可能拥有的任何子节点的指针向量。我相信我需要将这棵树折叠成一个链表,可能是节点的向量(不是指针)。这些节点将包含指向其子节点的整数索引列表。通过这种方式,我可以将结构按值传递给 cuda。
root/ (0)
├── add (1)
│ ├── 5 (2)
│ └── divide (3)
│ ├── 10 (4)
│ └── 5.7 (5)
└── multiply (6)
├── 1.2 (7)
└── 77 (8)
它可以很容易地展平,但我担心进行这些更改将需要一些自定义函数,并且可能比 node->childNode[x] 样式结构的计算成本更高。
例如,如果我想用数字 7 替换除法及其子结构,我需要:
- 流行成员 4,5
- 将索引 3 处的除数更改为数字 7。
- 更新根函数,使其第二个子函数的引用现在为 4。
- 更新乘法函数,现在在 4,即子节点现在在 5 和 6
肯定有更好的办法?我不是 C++ 专家,所以我正在寻找建议和代码示例会非常有帮助!