gpt4 book ai didi

multithreading - 如何拆分程序以充分利用多CPU、多核和超线程?

转载 作者:行者123 更新时间:2023-12-04 06:41:03 25 4
gpt4 key购买 nike

我有一堆命令要执行以进行基因测序。例如:

msclle_program -in 1.txt
msclle_program -in 2.txt
msclle_program -in 3.txt
.........
msclle_program -in 10.txt

这些命令是相互独立的。

环境为Linux桌面,Intel i7(4核/8线程712G内存

我可以将这些命令分成不同的 n.sh 程序并同时运行它们。

我的问题是如何充分利用多 CPU、多核和超线程来让程序运行得更快?

更具体地说,我应该分成多少个程序文件

自己的理解是:

  1. 分成7个程序文件。所以每个 CPU 都会 100% 运行一个程序
  2. 使用一个 CPU,CPU 将自行利用其多核和多线程。

是真的吗?

非常感谢您的评论。

最佳答案

答案并不简单或直截了当,将任务拆分为每个 CPU 一个程序可能不是最佳的,而且可能确实很差,甚至非常差。

首先,据我了解,您有七个四核 CPU(大概有八个,但您要为操作系统保存一个?)。如果您在每个 CPU 上运行一个单线程进程,您将在一个内核上使用一个线程。其他三个核心和所有超线程都不会被使用。

硬件和操作系统不能将单个线程拆分到多个内核上。

但是,您可以在每个 CPU 上运行四个单线程进程(每个内核一个),甚至可以运行八个(每个超线程一个)。这是否最佳取决于流程所做的工作;特别是它们的工作集大小和内存访问模式,以及硬件缓存安排;缓存级别的数量、大小和共享。还需要考虑内核的 NUMA 排列。

基本上,一个额外的线程必须为您提供相当多的加速,以超过它在缓存利用率、主内存访问和预取中断方面的成本。

此外,由于工作集超过某些缓存限制的影响是深远的,所以说一两个核看起来不错,但四核或八核可能会令人震惊,所以你甚至不能对一个核进行试验并假设结果八岁以上有用。

快速浏览一下,我发现 i7 有一个小的 L2 缓存和一个巨大的 L3 缓存。鉴于您的数据集,如果正在处理大量数据,我不会感到惊讶。问题是它是否是按顺序处理的(例如,预取是否有效)。如果数据不是按顺序处理的,您可以通过减少并发进程的数量来做得更好,因此它们的工作集往往适合 L3 缓存。我怀疑如果你运行 8 个或 16 个进程,L3 缓存会被破坏——溢出。 OTOH,如果您的数据访问是非顺序的,那么 L3 缓存 prolly 无论如何也救不了您。

关于multithreading - 如何拆分程序以充分利用多CPU、多核和超线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4743260/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com