15、基于C++模板和骨架的通用并行编程

基于C++模板和骨架的通用并行编程

1. 溢出向量计算与整体结果获取

溢出向量 $o$ 通过对 $spg’$ 应用 $scanr$ 骨架来计算:
$o = scanr(add\ op)\ spg’$
为了获得整体结果,将上式代入:
$CL - add(a, b) = zip(add)(a, zip(add)(b, o))$
其中:
$o = scanr(add\ op)(snoc(zip(get\ spg)(a, b), S))$
通过等式推理得到的骨架公式具有重要优势,由于 $add\ op$ 是可结合的,所有骨架($zip$ 和 $scanr$)都可并行化。

2. 从骨架到C++模板和STL
2.1 骨架与模板

骨架是通用的高阶函数,其参数函数的类型取决于数据结构的数据类型。在C++中,可使用模板机制实现骨架,复杂的函数参数可使用仿函数(实现了函数调用运算符 $operator()$ 的类)来实现。骨架通常不依赖于容器的具体表示,可应用于提供特定接口的任何数据结构。

STL采用迭代器的方法。STL迭代器指向容器的元素,并提供访问元素和在容器内移动迭代器的操作。迭代器支持的具体操作取决于底层数据结构,只有能高效实现的操作才会提供。STL迭代器相应地进行分类,例如双向链表提供双向迭代器,而向量迭代器属于随机访问迭代器类别。通常,STL算法操作由指向序列开始和结束的迭代器对描述的元素序列。实际上,STL提供了许多从函数式编程中已知的骨架,包括归约($accumulate$)、扫描($partial\ sum$)、映射和 $zip$($transform$ 的变体)。然而,大多

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值