【问题标题】:Multithreaded Cache Miss Exploiting多线程缓存未命中利用
【发布时间】:2021-07-10 18:17:24
【问题描述】:

当我 eg. 遍历一个链表并变得非常不走运时,我将有 ~ 0% 的缓存命中率(让我们假设无论如何)。为简单起见,我们还假设我有一个 CPU 一次只能运行一条指令(没有多核/超线程)。凉爽的。现在我的命中率为 0%,CPU/程序花费 99% 的时间等待数据。

问题:如果一个线程正在等待来自 RAM/磁盘的数据,那么该内核是否被阻塞了?或者我可以通过运行其他线程(或其他与增加命中率无关的方式)来利用低缓存命中率,而不是让 CPU 专门等待数据并执行其他工作吗?

【问题讨论】:

  • 等待磁盘 -> 如果系统被编程为这样做/等待 RAM,则可以切换到其他线程 -> 我不确定,可能依赖于架构?
  • "...通过运行其他线程来利用低缓存命中率..." 因为缓存中充满了列表元素,所以第二个线程/任务将立即有 0% 的缓存命中率导致第三个线程/任务尝试启动....重复。同样在单核(线程)系统上,您需要协同多任务或硬件中断来激活内核线程来进行任务调度。

标签: c++ multithreading caching operating-system


【解决方案1】:

如果您运行 SMT,则其他线程可以获取所有核心资源,从而覆盖缓存未命中(至少部分)。

我知道没有处理器会在缓存未命中时切换任务,但我知道有几种架构使用 SMT-2/4/8(是的,一些 Power CPU 具有 SMT-8)来覆盖此类情况。

【讨论】:

    猜你喜欢
    • 2012-11-05
    • 1970-01-01
    • 2015-07-09
    • 2014-05-13
    • 2012-04-21
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多