扫码阅读
手机扫码阅读

线程使用越多程序越快?别瞎整。。。

37 2024-09-29

我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。

查看原文:线程使用越多程序越快?别瞎整。。。
文章来源:
啥都会一点的研究生
扫码关注公众号
文章摘要

并行编程中的CPU核心使用问题

在编写并行程序时,确定线程或进程池的大小会影响程序性能,理论上过多或过少的线程都可能导致性能问题。Python标准库提供了获取CPU核心数的API,但它们可能不够准确,因为现代CPU具备指令级并行性和超线程技术,让确定核心使用变得复杂。

Python中获取CPU内核数的问题

Python的os.cpu_count()提供系统中逻辑CPU数量,但它可能不准确,例如在Docker容器中限制CPU资源时。另外os.sched_getaffinity(0)提供的是当前进程可用的逻辑CPU数量,但同样可能不准确。实际上,由于超线程技术,物理和逻辑内核的数量会有差异。

物理与逻辑CPU内核的区别

物理内核是实际的处理器单位,而逻辑内核是基于物理内核,通过超线程技术提供的虚拟处理能力。例如,英特尔i7-12700K处理器拥有12个物理内核和20个逻辑内核。逻辑内核可以在物理内核等待数据加载时使用其闲置资源。这种技术的准确性因CPU型号而异,但对于本文目的而言,逻辑内核与物理内核不同的一般概念足够。

线程池大小的选择:物理核心数还是逻辑核心数?

确定线程池大小时,应该考虑使用物理核心数还是逻辑核心数。在一个编译为机器代码的Numba示例中,两个功能相同但执行速度不同的函数被用于并行处理。结果表明,并行处理能够提高吞吐量,但是这种提高与CPU核心的使用情况密切相关。

想要了解更多内容?

查看原文:线程使用越多程序越快?别瞎整。。。
文章来源:
啥都会一点的研究生
扫码关注公众号