gpt4 book ai didi

c++ - 使用 Cilk 数组表示法和 STL vector

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:48:46 24 4
gpt4 key购买 nike

我正在学习使用 C++ 的 Cilk Plus 扩展(在 gcc 上)进行并行编程。我读过的最简单的重构之一是使用 Cilk 数组表示法,即使用它执行与顺序无关的 vector 运算。

即:c[:] = a[:] + b[:]

而不是:for (unsigned i = 0; i < a.size(); ++i) c[i] = a[i] + b[i];

我有一个大量使用 std::vector 的大型代码对象而不是数组。是否可以将此概念与 std::vector 一起使用? ?

考虑a , b , 和 c成为std::vector<double>长度相等,我试过这些但没有成功:

1.

c[:] = a[:] + b[:]

2.

double* aArr = &a[0];
double* bArr = &b[0];
double* cArr = &c[0];
cArr[:] = aArr[:] + bArr[:]

都返回

start-index and length fields necessary for using array notations in pointers or records

我知道方法 #2 指向没有长度信息的 vector ,但是有什么解决方法吗?

编辑:

首选有效的解决方案。例如,可以定义一个数组并使用 std::copy将值从 vector 复制到数组,使用 Cilk 数组表示法执行加法,然后将值复制回 vector 。这可能比仅进行原始的逐元素加法成本更高。

最佳答案

这可能不是最好/最优雅的答案(如果有,请发布替代方案),但使用上述方法 #2 和索引开始/长度规范似乎确实有效。像这样:

double* aArr = &a[0];
double* bArr = &b[0];
double* cArr = &c[0];
cArr[0:c.size()] = aArr[0:c.size()] + bArr[0:c.size()]

当然,我需要注意 vector 长度是否匹配,但它编译了,到目前为止,似乎返回了相同的答案。

关于c++ - 使用 Cilk 数组表示法和 STL vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33263624/

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