![]() |
1
4
嗯,可能是的,你做错了什么。 但是,在某些情况下,256个线程比8个线程运行得更好,而不必使用坏的线程模型。必须记住,拥有8个线程并不意味着所有8个线程实际上一直在运行。每当一个线程对操作系统进行阻塞系统调用时,该线程将停止运行并等待结果。同时,另一个线程经常可以工作。 有这样一个神话,即一个人不能有效地使用比CPU上的上下文更多的线程,但事实并非如此。如果您的线程在一个系统调用上阻塞,那么让另一个线程来做更多的工作可能很关键。(实际上,当线程阻塞时,要做的工作往往较少,但情况并非总是如此。) 它完全依赖于工作负载,对于任何特定的应用程序都没有一个正确的线程数。通常情况下,您不希望使用比操作系统运行的线程少的线程,这是唯一正确的规则。(不幸的是,这可能很难发现,因此人们往往只启动尽可能多的线程作为上下文,然后尽可能使用非阻塞的系统调用。) |
![]() |
2
2
你的应用程序是IO绑定的吗?如何生成图像数据? |
![]() |
3
1
通过分配比核心更多的线程而获得的性能改进表明CPU不是瓶颈。如果涉及到磁盘、内存甚至网络访问等I/O访问,那么您的结果将非常合理。 |
![]() |
4
1
你可能从中受益 Simultaneous Multithreading (SMT) . 您的操作系统调度的线程比可用的核心多,并且将交换未暂停的线程,以等待资源(如内存负载)。这可以非常有效地从程序中隐藏内存系统的延迟,并且是用于通用GPU编程的CUDA中大规模并行化的有效技术。 |
![]() |
5
1
如果您看到性能随着跳转到256个线程而增加,那么您可能正在处理的是一个资源瓶颈。在某种程度上,您的代码正在等待一些较慢的设备(例如硬盘或网络连接)以继续。对于多个线程,等待这个慢设备不是问题,因为CPU可以在第一个线程等待慢设备时处理另一个线程,而不是坐在空闲状态,旋转电子拇指。运行的并行线程越多,CPU在等待其他东西时可以做的工作就越多。 如果您看到性能一直提高到256个线程,我想说您在某个地方有一个主要的性能瓶颈,而不是CPU。要测试这一点,请尝试查看是否可以测量单个线程的空闲时间。我怀疑您会看到线程在其生命周期中停留在“阻塞”或“等待”状态的时间比在“运行”或“活动”状态下花费的时间要长。一些调试器或函数分析工具将允许您这样做,我认为在命令行上也有Linux工具可以这样做。 |
![]() |
S. Jacson · 任意两台发电机的速度差(内置功能) 2 年前 |
![]() |
Sadeq Dousti · 相当于“嵌套删除”的执行性能SQL查询 2 年前 |
![]() |
Prince · 复制大型文件需要更多时间 2 年前 |
![]() |
Sagar · 为什么在循环之外声明变量会更快? 2 年前 |
![]() |
seco · 如何在不挂起页面的情况下加载JS 2 年前 |