【问题标题】: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 进程)

【问题讨论】:

  • 大量 RAM 被触及,CPU 将开始争夺总线。

标签: c# multithreading multicore


【解决方案1】:

它可以是任意数量的东西。想到的一对

  1. 管理不同线程的开销。
  2. 其他进程同时使用系统中的资源。

【讨论】:

  • 我确信没有其他进程正在大量使用处理器
  • 线程管理导致预期性能下降的可能性仍然很大。
【解决方案2】:
【解决方案3】:

它很可能必须在某些数据结构或文件上与其他线程竞争,这样您就无法获得 100% 的并行执行。

例如,如果您要在四核上以 4 路并行方式运行 download-webpage-from-website 类型的操作,并且服务器一次只允许从同一 IP 地址进行 1 个并发下载,你根本不会得到任何加速。

此外,启动线程并维护它们会产生一些开销,因此当您开始并行处理时,您不会获得完整的内核使用率,尽管在这种情况下这很可能不是一个重要因素。

【讨论】:

    【解决方案4】:

    线程有开销,并不是所有东西都可以并行运行。

    • 是时候创建/启动/停止线程了。
    • 完成的额外工作(如锁定/递增)
    • 并非每个资源都可以完全并行化,例如内存访问,或读/写文件。
    • 操作系统和其他应用程序可能不时需要一些处理器时间。

    【讨论】:

      【解决方案5】:
      1. 您正在操作系统中运行它。还有其他进程正在运行。这些会占用一些 CPU 时间。
      2. 也许您不再受 CPU 限制,而是受 IO 限制(内存带宽、磁盘带宽……)。
      3. 线程(和线程切换)、编组等总是会有一些开销。

      总的来说,根据我的并行编程经验,如果您的运行时间减少了 65%,那就很好了。

      【讨论】:

        【解决方案6】:

        因为还有其他因素需要考虑。像内存和 I/O 带宽/争用、线程上下文切换开销等。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-02-10
          • 2019-02-20
          • 2022-11-07
          • 2020-12-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多