这是在一个In-order core上用的吗?
感觉如果在Out-of-order core的话,每次L2 miss就切协程,相比一次性把一个thread内连续的多个访存指令全发射出去,性能会恶化地比较厉害。
【 在 MaLing 的大作中提到: 】
: 协程之间的切换是一个物理线程/进程内部,用户态进行上下文之间的切换。通常协程上下文用使用双向链表链接,其个数由程序员决定。协程切换(设定为yield_thread函数)的代价+ 跳转延迟大约在20个周期左右,L2 延迟在 12个周期,L3延迟基本在50个周期,内存延迟在100ns(3GHZ,300个周期 ), 所以我们在一个进程内部引入多个协程,例如15个协程?(15 *20 周期等于内存访问 300个周期)
: 数据会由于三种原因执行 yield_thread函数:
: 1. 在取指令之后,根据指令地址预测是否产生数据L2缓存缺失,如果预测缺失,允许当前指令继续运行,但是对于内存的操作改为prefetch, 协程再切回来后重新执行该指令。
: ...................
--
FROM 66.42.53.*