06 Mar 2019 3439字 12分
如果这篇博客帮助到你,可以请我喝一杯咖啡~
CC BY 4.0 (除特别声明或转载文章外)
习题
1.1为求全局总和例子中的my_first_i和my_last_i推导一个公式。需要注意的是:在循环中,应该给各个核分配数目大致相同的计算元素。 ( 提示: 先考虑 n 能被 p 整除的情况)。for (my_i = my_first_i my_i < my_last_i; ++my_i)
{
my_x = Compute_next_value(...);
my_sum += my_x;
}
可以看出对于每个核心$i$,其对应累加的范围是左闭合区间$[my_first_i,my_last_i)$。
假设所有$p$个核心的编号是$0,1,\dots,p-1$,显然对于除了最后一个核心之外,其余核心的区间长度都应当是$\lceil\frac{n}{p}\rceil$,其中$\lceil\rceil$表示向上取整。
因此,可以得到结果:对于每个核心$i$,显然有$my_first_i=(i-1)\times\lceil\frac{n}{p}\rceil$;
对于最后一个核心$i=p$,显然有$my_last_i=n-1$
对于除了最后一个核心之外的每个核心$i$,有$my_last_i=my_first_(i+1)=i\times\lceil\frac{n}{p}\rceil$
1.6
在下列情况中,推到公式求出 0 号核执行接受与加法操作的次数。最初的求全局总和的伪代码