使用Cilk数组表示法和STL向量
Using Cilk array notation and STL vectors
我正在学习使用Cilk Plus扩展到c++(在gcc上)的并行编程。我读过的最简单的重构之一是使用Cilk数组符号,即使用它执行顺序无关的向量操作。
。: 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和length字段
我知道方法#2使指针指向矢量没有长度信息,但有任何解决办法吗?
编辑:最好是一个有效的解决方案。例如,可以定义一个数组,并使用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()]
当然,我需要注意向量长度是否匹配,但它编译,到目前为止,似乎返回相同的答案。
相关文章:
- 具有 STL 向量类型成员的类的复制内存
- STL 向量无缘无故损坏,VC++ 2017
- 如何避免自定义 STL 向量类的智能指针 delete[] 异常?
- STL向量上出现奇怪的复制构造函数错误
- OpenMP 和不同的 STL 向量
- C++ STL 向量保留太多容量会消耗大量内存吗?
- 使用 boost Spirit 解析为 STL 向量
- C++ 在列表末尾插入元素的列表的 STL 向量
- C++ 使用数组初始化时的 STL 向量内存管理
- 仅编写 c++ stl 向量的第一个元素的正确方法
- 如何在<typename> <long> 不更改给定代码的情况下将自定义向量与 STL 向量相互转换?
- 限制指针访问STL ::向量元素
- 传递包裹在shared_ptr中的 STL 向量
- 如何将结构指针插入stl向量中并显示内容
- 将一个STL向量有效地分配给另一个STL矢量(WSL问题)
- erase() 不适用于结构/对象内的 STL 向量
- STL向量具有反向和pop/push_back成本
- 获取 STL 向量C++的地址
- Unique_ptr的 STL 向量 - 如何重置
- 带有 STL 向量的模板函数会因新的分配器而中断