我正在调用一个函数并将两个输出保存到变量中,但这个过程需要时间,因为输出是通过求解 ODE 生成的。
是否可以使用多个内核来更快地运行函数,以便更快地保存值?如果是这样,有人可以提供一个简单的例子吗?
谢谢
简单地在多个内核上运行相同的代码不会使其运行得更快。这实际上取决于您执行的任务类型。在确定代码是否从并行处理中受益之前,您需要找到以下一些问题的答案:
-
计算序列中的步骤是否相关?换句话说,代码的一部分是否依赖于前一部分完成的计算?或者其中一些可以并行计算吗?查看阿姆达尔定律,了解根据您可以并行化的代码量,预期会有多大的加速
-
您的代码是否涉及对磁盘和内存的大量读取/写入?还是只是大量的计算?如果您正在对磁盘执行大量读取和权限,则在线程等待磁盘时创建多个进程以执行其他工作可能会导致显著的加速。但同样,这取决于你对上一点关于序列依赖性的回答
-
您的代码当前需要多长时间才能运行?创建多个进程的开销是否会超过按顺序运行所需的时间?在您的问题中,您没有给出具体时间 - 如果您谈论的是加快需要几秒钟的任务,那么与整个任务的时间相比,创建多个进程所需的时间可能很重要。但是,如果您谈论的是需要几分钟的任务,那么开销就不会那么大。
-
您是否考虑过您的代码是数据并行还是任务并行?如果是这样,您可以决定是否要使用 CPU 或 GPU 进行并行化。对于大型数学运算,请查看基于 CPU 的 Numpy 和基于 GPU 的操作的 Cupy。