multithreading - 混合SIMD指令和多线程时,我会受到性能损失吗?

标签 multithreading performance intel simd

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

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

最佳答案

保存x87/MMX/XMM/YMM寄存器可能要花费一些时间,并且会导致
缓存重击。正常情况下,FP状态的保存和恢复是通过懒惰的方式完成的:在上下文切换时,内核将当前线程记住为FP状态的“所有者”,并在CR0中设置TS标志,并且-这将导致陷阱每当线程尝试执行FP insn时,内核。那时,旧线程的FP状态和当前执行的线程的FP状态分别被保存和恢复。

现在,如果长时间(几个或多个上下文切换)没有其他线程使用FP insns,则延迟策略将不会导致任何FP状态被保存/恢复,并且不会降低性能。

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

tl; dr

您不必担心保存和还原FP寄存器的开销。

关于multithreading - 混合SIMD指令和多线程时,我会受到性能损失吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8045807/

相关文章:

安卓应用性能

c++ - 英特尔 C++ 编译器错误? (指针别名)

multithreading - Julia 1.5.2并行启动随机数选择

regex - 使正则表达式更高效

multithreading - Go 忽略 GOMAXPROCS

mysql - 子查询中的变量不使用时间戳字段中的索引

c++ - gcc 中的 Intel 风格内联汇编

assembly - Intel x86 汇编 - lt、gt、eq

multithreading - 向 sleep 或阻塞线程发出信号以停止的最佳方法是什么?

java - wait() 和 sleep() 有问题吗?