我需要在一个多核(和多线程)机器上运行多个作业。我使用GNU Parallel 实用程序来分发任务以加速执行速度。
要执行的命令可在名为 "commands" 的文件中找到。我使用以下命令来运行 GNU Parallel。
cat commands | parallel -j +0
根据这个位置的指导 - gnu parallel,此命令应该使用所有核心来运行此任务。我的机器有2个内核和每个内核2个线程。然而,系统监视器显示有4个CPU(CPU1和CPU2属于Core1,CPU3和CPU4属于Core2)。 每个作业(模拟)在单个内核上运行大约需要20秒。我使用上述GNU并行实用程序同时运行了2个作业。我注意到,在系统监视器中,如果将2个作业分配给cpu1和cpu2(即同一内核),显然没有加速效果。它们需要大约40秒才能完成,这是它们顺序运行时需要的时间。但是,有时该工具会将2个作业分配给 CPU1 和 CPU3 或 CPU4(即,2个作业被分配给 2 个不同的内核)。在这种情况下,两个作业都可以在20秒钟内并行完成。
现在,我想知道是否有一种方式可以强制该工具在不同的“核心”上运行而不是在同一核心上的不同“线程”。任何帮助都将不胜感激。 谢谢!
cat commands | parallel -j +0
根据这个位置的指导 - gnu parallel,此命令应该使用所有核心来运行此任务。我的机器有2个内核和每个内核2个线程。然而,系统监视器显示有4个CPU(CPU1和CPU2属于Core1,CPU3和CPU4属于Core2)。 每个作业(模拟)在单个内核上运行大约需要20秒。我使用上述GNU并行实用程序同时运行了2个作业。我注意到,在系统监视器中,如果将2个作业分配给cpu1和cpu2(即同一内核),显然没有加速效果。它们需要大约40秒才能完成,这是它们顺序运行时需要的时间。但是,有时该工具会将2个作业分配给 CPU1 和 CPU3 或 CPU4(即,2个作业被分配给 2 个不同的内核)。在这种情况下,两个作业都可以在20秒钟内并行完成。
现在,我想知道是否有一种方式可以强制该工具在不同的“核心”上运行而不是在同一核心上的不同“线程”。任何帮助都将不胜感激。 谢谢!