我对做一个关于人脸识别的研究感兴趣(利用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/