|
请问大大们,SMT中我们是通过何种方式模拟逻辑核心的~~~~
跳海自殺的鱼 发表于 2010-8-12 10:16 ![]()
原理上是 在数据预读取失败(即缓存命中率问题)时,把 新数据从内存载入到缓存的时间片 拿出来让 物理核心 继续进行现在数据的计算。
以往的那种解释为CPU 等待时间 不过就是 命中失败的等待时间而已。
目前实现这个技术的 3个 应用是这样的。
INTEL 以前是采用 控制器 来强行中断 当前 流水线 来插入 新数据来执行 新流程, 但 在 SANDY BRIGE中 采用的第二代超线程技术 开始把强行中断的条件要求更苛刻,基本上 让预读取 决定下个数据读取不能,并且控制器也同意后才 强行中断。INTEL这边有个比较特殊的: A物理核心来 中断B物理核心来 帮助A核心进行下一步计算,这个技术目前在NE架构上只有至强系列支持, SNB不清楚1155的支不支持。
IBM那边 一直没采用强制中断,基本上是靠 一个 数据寄存器 端来进行预测, 当 数据寄存器预测器 对下一个指令的预测失败,而当前数据时可以进行计算并且结果是可以流出到内存时, 数据直接送到核心进行计算, 这个也是ARM 目前想进入SMT的发展方向,毕竟IBM 和 ARM的架构封闭性决定了开发相应程序时,流程的控制 多元化比 WIN INTEL平台的更少更简洁。 所以IBM这个SMT技术倒一直不是很热心推广,基本算是一个鸡肋了。
然后是 NV 主导的CUDA 运算中的,SMT技术了, 由于CUDA 已经是并行计算,而且是比通用CPU更彻底的并行, 再加入SMT 已经不是很有必要, 但 NV 的CUDA核心缓存很小, 在算法不是很先进的情况下,相对缓存的命中率 比 INTEL 低很多(业界的缓存命中问题一直是INTEL 的算法最好,然后IBM得次之,AMD 和 NV 一直不算表现优良) 所以,新一代费米架构 NV对其要求是: 实现SMT技术可以在数据命中失败的情况下,不浪费从内存载入的时间来进行计算。 很明显的一直在优化的驱动确实可以让NV的 CUDA计算得到提升,
我们这边的C2050样品做过类似的SMT计算模拟,但效果不明显。 |
|