Parallel processing 使用GNU并行在多核上运行并行作业

Parallel processing 使用GNU并行在多核上运行并行作业,parallel-processing,gnu,multicore,Parallel Processing,Gnu,Multicore,我需要在多核(和多线程)机器上运行多个作业。我正在使用将作业分布到各个核心以加快任务的速度。 要执行的命令位于名为“命令”的文件中。我使用以下命令来运行GNU并行程序 cat命令|并行-j+0 根据该位置的指导,该命令应使用所有内核来运行该任务。我的机器有2个内核,每个内核有2个线程。然而,系统监视器显示4个CPU(CPU1和CPU2属于core1,CPU3和CPU4属于core2)。 每个作业(模拟)在单个内核上运行大约需要20秒。我使用这个GNU并行实用程序和上面的命令并行运行了2个作业。我

我需要在多核(和多线程)机器上运行多个作业。我正在使用将作业分布到各个核心以加快任务的速度。 要执行的命令位于名为“命令”的文件中。我使用以下命令来运行GNU并行程序

cat命令|并行-j+0

根据该位置的指导,该命令应使用所有内核来运行该任务。我的机器有2个内核,每个内核有2个线程。然而,系统监视器显示4个CPU(CPU1和CPU2属于core1,CPU3和CPU4属于core2)。 每个作业(模拟)在单个内核上运行大约需要20秒。我使用这个GNU并行实用程序和上面的命令并行运行了2个作业。我在系统监视器中观察到,如果将这两个作业分配给cpu1和cpu2(即相同的核心),则显然没有加速。它们需要大约40秒才能完成,这大约是按顺序运行所需的时间。但是,有时该工具会将这两个作业分配给CPU1和CPU3或CPU4(这意味着,将两个作业分配给两个不同的内核)。在这种情况下,两个作业在20秒内并行完成

现在,我想知道是否有一种方法可以强制工具在不同的“核心”上运行,而不是在同一个核心上的不同“线程”上运行。感谢您的帮助。
谢谢

GNU并行生成进程。它不决定在哪个内核上运行它。你的操作系统可以做到这一点。GNU/Linux通过让进程在同一物理CPU的内核上生成以节省电源,从而使节能成为可能:

echo 1 > /sys/devices/system/cpu/sched_mc_power_savings
(见附件)

如果您的计算机设置为省电,则您可能会遇到这种情况

GNU/Linux还可以控制进程应该在哪些内核上生成。使用
taskset
您可以告诉GNU/Linux使用掩码10101010(bin)=0xAA在每一个其他内核上繁殖;此处所示为128芯机器:

cat commands | taskset 0xaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa parallel -j +0

你在运行什么操作系统?如何确定作业在哪个内核上运行?我在intel i3(双核)机器上运行ubuntu。它每个核心有2个线程(我通过使用lscpu命令找到这个信息)。我使用gnome系统监视器来查看正在运行作业的内核。谢谢!我试过这个。最初我认为,如果我禁用其他每一个内核,我将强制作业在两个不同的虚拟内核上运行(给定一个2核、2线程/内核机器)。然而,我意识到,如果我使用任务集禁用所有其他逻辑核心,那么总执行时间将大大增加。所以,我想我会让他们照原样跑。谢谢你的回答,我完全不知道,你能解释一下吗?我有一个在4核服务器上运行20秒的程序(详见下文)。我通过设置-j1来完成。我应该期待什么?在纯并发情况下,我使用4个内核(20个)同时运行-j4和-j1?我在实验中看到的是-j1(1需要20秒),-j2(2需要23秒),带-j3(3需要27秒),带-j4 33.5(4需要33.5秒),也就是说,当我升级并发架构时,“并发惩罚”大约是15%:x86_64;CPU操作模式:32位、64位;中央处理器:4;每个芯的螺纹数:2;每个插座的芯:2个;插座:1个;NUMA节点:1;步进:4@AaronSoellinger问一个新问题。包括一个MCVE。