且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《高性能科学与工程计算》——2.6 习题

更新时间:2022-08-17 13:39:22

本节书摘来自华章计算机《高性能科学与工程计算》一书中的第2章,第2.6节,作者:(德)Georg Hager Gerhard Wellein 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.6 习题

2.1 分支的危险。考虑下面的基准代码:


《高性能科学与工程计算》——2.6 习题


《高性能科学与工程计算》——2.6 习题https://yqfile.alicdn.com/b34ef7329f77e3095d794fb706cc66abb67a8c06.png" >

相对于标准向量三元组,请分析条件分支在下面情况下对性能的影响。数组C的值初始化为:a)正值、b)负值、c)[-1,1]的任意值,并分别存放在L1 cache、L2 cache和内存中。
2.2 递归能SIMD向量化吗?在1.2.3节我们通过下面循环代码学习了循环体依赖对流水线的影响:


《高性能科学与工程计算》——2.6 习题

如果A是一个单精度浮点数数组,当offset取何值时,该循环可被SIMD向量化(如图1-8所示)。
2.3 栈上的延迟构造。在2.5.2节的延迟构造例子中,如果我们使用标准C的double数组,而不是使用std::vector。数组被声明时的区别在哪里?
2.4 快速赋值。在2.5.2节静态构造例子中,我们指出静态对象std::vector<>只有在长度为常量时才具有优势。如果长度可变,赋值操作会导致内存的重新分配,真的是这样吗?