网格引擎/多线程/多核/多 CPU:如何确定最佳线程数?

网格引擎/多线程/多核/多 CPU:如何确定最佳线程数?

我在各种服务器和集群上使用 unix/linux(各种版本)下的程序 (*),该程序支持多线程。我可以通过命令行选项指定我想要的线程数。

一般来说,我如何确定应该为多线程指定多少个线程(以获得最大速度)?

线程数是否应该低于/等于相应 CPU 支持的硬件线程数?是否有任何经验法则或起点?

如果是,那么我如何才能知道 CPU 支持多少个硬件线程?

我还应该提到,我通常在运行此程序的计算机上有多个 CPU,每个 CPU 都有多个核心。不清楚一个核心是否等于一个线程。

(*) 我使用的程序是 bwa,一个用于比对 DNA 序列的程序。但我的问题本质上是一般性的。

答案1

嗯,这个问题有几个部分 - 一般来说,一个好的经验法则是运行的线程数不要超过逻辑处理器的数量 - 虽然这通常适用于整个系统,并且可能取决于负载。要找出您有多少个物理处理器核心,您可以使用cat /proc/sysinfo。它将为每个逻辑核心打印一组行,因此向下滚动并查看最后一行(我的四核 HT 系统上有 8 个几乎相同的行)

processor       : 7
vendor_id       : GenuineIntel
cpu family      : 6
model           : 58
model name      : Intel(R) Core(TM) i7-3770 CPU @ 3.40GHz
stepping        : 9
microcode       : 0x16
cpu MHz         : 3401.000
cache size      : 8192 KB
physical id     : 0
siblings        : 8
core id         : 3
cpu cores       : 4
apicid          : 7
initial apicid  : 7
fpu             : yes
fpu_exception   : yes
cpuid level     : 13
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx rdtscp lm constant_tsc arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc aperfmperf pni pclmulqdq dtes64 monitor ds_cpl vmx smx est tm2 ssse3 cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi flexpriority ept vpid fsgsbase smep erms
bogomips        : 6819.66
clflush size    : 64
cache_alignment : 64
address sizes   : 36 bits physical, 48 bits virtual
power management: 

我将在这里挑选出重要的几行:物理 ID:0(这是第一个插槽 - 如果您使用多个插槽,则检查每个物理 JD 的处理器和 CPU 核心 - 如果这个数字大于 0,则您有多个插槽)

处理器:7(此数字从 0 开始,到 n-1,这是插槽中的第 8 个逻辑核心 - 查看共享物理 ID 的一组值中的最大数字)

cpu 核心:4(我有 4 个物理核心 - 每个核心都相同,并且由于 SMP 通常使用相同的核心,所以在双插槽系统上应该相同)

我的处理器应该允许我同时运行 8 个线程,假设每个线程一个核心。也就是说,根据运行时间和其他因素,你可能能够运行更多

SO 对此有很多疑问,从中挑选两个,这个问题的答案表明每个逻辑核心一个线程是一个好主意尽管这表明您可能可以调高。因此,不幸的是,答案是从每个进程一个线程开始,然后将其调高 - 如果它们不是长时间运行、占用大量内存的线程,那么线程数可能会非常高。

答案2

Grid Engine 是一个特定的程序,如果你真的使用它,你的问题就毫无意义了。它的全部目的是跨系统管理资源和作业,这样最终用户就不必考虑那么多细节了。

介绍

Oracle Grid Engine 软件是一个分布式资源管理 (DRM) 系统,可提高现有计算资源的利用率、提高工作负载吞吐量和提高最终用户的工作效率。通过透明地选择最适合每个工作部分的资源,Oracle Grid Engine 软件能够有效地在资源池中分配工作负载,同时使最终用户免受计算集群内部工作的影响

参考:初学者指南在甲骨文Grid Engine 网站

相关内容