灵活性和软件工程成本
要维持一个算法的可移植性和可扩展性,创建可变数目的任务是很关键的。组合时往往会使问题的任务数的变化范围受到限制。根据经验,为了能在映射阶段达到负载平衡,任务数至少比处理器数多一个数量级。可用分析模型结合实际经验讨论最优的任务数。当然,灵活性并不意味着必须创建大量的任务。粒度可由编译或运行时的参数控制。重要的是不要对任务数进行不必要的限制。
组合时的另一个问题是要尽量减少软件工程的代价,尤其是并行化一个串行程序时应尽量避免程序代码的大量修改。
增加任务的粒度可以减少通信开销,但组合时也要使算法保持足够的灵活性并要尽量减少软件工程的成本。这几个目的有时是相互矛盾的,要权衡其利弊。
|