【问题标题】:Do I get a performance penalty when mixing SIMD instructions and multithreading混合 SIMD 指令和多线程时是否会降低性能
【发布时间】:2011-12-24 03:40:24
【问题描述】:

我有兴趣做一个关于人脸识别的项目(利用 SIMD 指令集)。但是在今年的第一学期,我学到了一些关于线程的东西,我想知道我是否可以将它们结合起来。

什么时候应该避免结合多线程和 SIMD 指令?什么时候值得这样做?

【问题讨论】:

  • 多核是值得的。
  • 是的,我忘了提。你是对的

标签: multithreading performance intel simd


【解决方案1】:

保存 x87/MMX/XMM/YMM 寄存器可能需要相当长的时间并导致显着 缓存抖动。通常,保存和恢复 FP 状态是以惰性方式完成的:在上下文切换时,内核将当前线程记住为 FP 状态的“所有者”,并在 CR0 中设置 TS 标志 - 这将导致陷阱每当一个线程试图执行一个 FP insn 时内核。旧线程的FP状态和当前执行线程的FP状态分别在那个时候保存和恢复。

现在,如果在很长一段时间内(多次或多次上下文切换),除了您的线程之外,没有其他线程使用 FP insns - 惰性策略将导致无法保存/恢复任何 FP 状态,并且您不会受到性能影响。

由于我们显然在谈论多处理器系统,因此并行执行您的算法的线程不会相互冲突,因为它们应该在自己的 CPU/内核/HT 上执行并拥有一组私有寄存器。

tl;博士

您不必担心保存和恢复 FP 寄存器的开销。

【讨论】:

    【解决方案2】:

    为什么你认为会有问题?发生线程更改时,SIMD 寄存器将像任何其他 CPU 寄存器一样被换出。

    【讨论】:

    • 我认为保存 XMMS 寄存器需要花费很多时间。或者存在缓存问题
    【解决方案3】:

    对于多线程和 SIMD,无需担心任何新问题。只要您正确有效地执行 SIMD,就不必担心。

    意思是 SIMD 有它自己的实现挑战,多线程也是如此。但将它们结合起来不会让任何一个变得更复杂。

    【讨论】:

      猜你喜欢
      • 2011-06-27
      • 2021-11-19
      • 2019-11-13
      • 2013-05-25
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-29
      相关资源
      最近更新 更多