Answers:
每当尝试并行化程序时,您都必须平衡许多成本,但主要是
如果您的计算令人尴尬地并行,那么通信成本将非常低(仅输入和输出),并且管理成本也将非常低。
如果计算之间存在相互依赖性,则通信成本可能会大大增加。如果您有一个复杂的算法,对于任何给定的计算都需要花费不同的时间才能完成,那么当您尝试有效利用现有资源时,管理的复杂性就会提高。
与任何形式的优化一样,关键是进行基准测试。查看不使用MPI时的性能,使用MPI和一个流程时的性能,然后查看其扩展方式。
如果您正在使用CUDA打,试着给它多少更多的数据。此处的一项测试导致负加速。我们为它提供了1000倍的数据,并且GP-GPU版本几乎同时完成,而运行在主CPU上的版本花费了1000倍的时间。
我建议您执行以下操作:
使用和不使用并行化,对代码的时间执行情况进行概要分析。如果您对如何执行操作有疑问,可以更好地描述您的代码,我们将为您提供帮助。
现在,您可以专注于并行运行较慢的部分。您应该意识到,进程之间的通信可能很慢。正如Mark和Sean所指出的那样,仅仅将问题划分为多个线程并不意味着这样做会很有效。您必须更深入地研究它。但是,如果您分析代码,则可能会帮助您查找任何现有的错误。我的两分钱。
如果您更详细地说明正在执行的操作(例如,使用工作流程),则可能有人可以为您提供更好的说明。