1 为课本1.3节求全局总和例子中的my_first_i和my_last_i推导一个公式。需要注意的是:在循环中,应该给各个核分配数目大致相同的计算元素。分n能被p整除和不能被整除两种情况。
quotient = n / p;
remainder = n % p;
if (my_rank < remainder) {
my_n_count = quotient + 1;
my_first_i = my_rank * my_n_count;
} else {
my_n_count = quotient;
my_first_i = my_rank * my_n_count + remainder;
}
my_last_i = my_first_i + my_n_count;
2 全局总和例子中的第一部分(每个核对分配给它的计算值求和),通常认为是数据并行的例子;而第一个求全局总和例子的第二个部分(各个核将他们计算出的部分和发送给master核,master核将这些部分再累加求和),认为是任务并行。第二个全局和例子中的第二部分(各个核使用树形结构累加他们的部分和),是数据并行的例子还是任务并行的例子?为什么?
该示例是任务和数据并行的组合。 在树结构全局求和的每个阶段,核心都在计算部分求和。 这可以看作是数据并行。 此外,在每个阶段,有两种类型的任务。 一些内核正在发送它们的总和,而一些内核正在接收另一个内核的部分总和。 这可以看作是任务并行。
3 假如系里老师要为学生举办一个聚会。
a. 在准备聚会的时候,如何分配各种任务给各个老师,以实现任务并行?设计一个方案使得各个任务能够同时进行。
b. 我们希望其中的一项任务是清理聚会场地,那么该如何分配清扫任务以实现数据并行?
c. 设计一个任务并行和数据并行结合的方案来准备聚会(如果教师的工作量太大,可以让助教来帮忙)
( a )为派对打扫场地,带来食物,安排布置,制作派对海报等。
( b ) 有几个地方需要清洁。 我们可以将它们分配给教员。
( c )例如,我们可以将准备食物和饮料的任务分配给一些学院。 那么,这个组可以根据食物的种类来划分:有些人可以负责开胃小菜,有些人负责三明治,有些人负责酒等。