我有大约100个过程。每个进程包含10个输入(逻辑表达式),每个进程的任务是找到解决每个逻辑输入的最快启发式算法(我有大约5个启发式算法)。
单独运行每个进程时,结果与并行运行所有进程时不同(使用python p1.py&;python p2.py&;…)。例如,当单独运行进程时,输入1(在p1中)发现第一个启发式算法是最快的方法,但当并行运行时,相同的输入发现第五个启发式算法更快!
原因可能是CPU会在并行进程之间切换,并且会弄乱时间安排,所以它不能给出每个启发式算法用来解决输入的正确时间吗?
解决办法是什么?减少一半的进程数能减少错误的结果吗?(我在服务器上运行程序)
操作系统必须在数量少得多的cpu上调度所有进程。为此,它在每个CPU上运行一个进程,时间很短。之后,操作系统将进程调度出去,让其他进程运行,以便为进程分配公平的运行时间。因此,每个进程都必须等待CPU上一个正在运行的插槽。这些等待时间取决于等待运行的其他进程的数量,而且几乎不可预测。你知道吗
如果您使用时钟时间进行测量,等待时间将污染您的测量。为了更精确的测量,您可以询问操作系统进程使用了多少CPU时间。函数time.process_time()就是这样做的。你知道吗
在进程之间切换需要时间。多个进程访问相同的资源(文件、硬盘、CPU缓存、内存等)需要时间。对于CPU受限的进程,运行的进程比CPU多几个数量级会降低执行速度。如果启动的进程比CPU的数量稍微少一些,您将获得更好的结果。备用CPU仍然可以用于操作系统或其他一些无关程序所需的工作。你知道吗
相关问题 更多 >
编程相关推荐