【问题标题】:Using Threading on Quad core speed up the code 65%?在四核上使用线程加速代码 65%?
【发布时间】:2010-05-12 12:27:27
【问题描述】:
此示例code 比较了四核处理器上的串行方法和线程方法。该代码仅使用 GetPixel() 从 4 个图像中读取所有像素。
我发现加速在 65% 左右,为什么不等于 75%,因为我有 4 个内核,并且所有内核都被充分利用?
附注:
你能检查一下代码吗,因为我没有做任何 I/O,并且没有其他进程在机器上工作(正常的 windows 进程)
【问题讨论】:
标签:
c#
multithreading
multicore
【解决方案1】:
它可以是任意数量的东西。想到的一对
- 管理不同线程的开销。
- 其他进程同时使用系统中的资源。
【解决方案3】:
它很可能必须在某些数据结构或文件上与其他线程竞争,这样您就无法获得 100% 的并行执行。
例如,如果您要在四核上以 4 路并行方式运行 download-webpage-from-website 类型的操作,并且服务器一次只允许从同一 IP 地址进行 1 个并发下载,你根本不会得到任何加速。
此外,启动线程并维护它们会产生一些开销,因此当您开始并行处理时,您不会获得完整的内核使用率,尽管在这种情况下这很可能不是一个重要因素。
【解决方案4】:
线程有开销,并不是所有东西都可以并行运行。
- 是时候创建/启动/停止线程了。
- 完成的额外工作(如锁定/递增)
- 并非每个资源都可以完全并行化,例如内存访问,或读/写文件。
- 操作系统和其他应用程序可能不时需要一些处理器时间。
【解决方案5】:
- 您正在操作系统中运行它。还有其他进程正在运行。这些会占用一些 CPU 时间。
- 也许您不再受 CPU 限制,而是受 IO 限制(内存带宽、磁盘带宽……)。
- 线程(和线程切换)、编组等总是会有一些开销。
总的来说,根据我的并行编程经验,如果您的运行时间减少了 65%,那就很好了。
【解决方案6】:
因为还有其他因素需要考虑。像内存和 I/O 带宽/争用、线程上下文切换开销等。