Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 多线程缓存未命中攻击_C++_Multithreading_Caching_Operating System - Fatal编程技术网

C++ 多线程缓存未命中攻击

C++ 多线程缓存未命中攻击,c++,multithreading,caching,operating-system,C++,Multithreading,Caching,Operating System,当我迭代一个链表而变得非常不走运时,我的缓存命中率将达到~0%(让我们假设这一点)。为了简单起见,我们还假设我的CPU一次只能运行一条指令(没有多核/超线程)。酷。现在我的命中率为0%,CPU/程序99%的时间都在等待数据 问题:如果线程正在等待来自RAM/磁盘的数据,该内核是否被阻止?或者我可以通过运行其他线程(或者不需要增加命中率的另一种方式)来利用低缓存命中率,使CPU不独占地等待数据并执行其他工作吗?如果运行SMT,则其他线程可以绘制所有核心资源,从而覆盖缓存未命中(至少部分) 我知道没

当我迭代一个链表而变得非常不走运时,我的缓存命中率将达到~0%(让我们假设这一点)。为了简单起见,我们还假设我的CPU一次只能运行一条指令(没有多核/超线程)。酷。现在我的命中率为0%,CPU/程序99%的时间都在等待数据


问题:如果线程正在等待来自RAM/磁盘的数据,该内核是否被阻止?或者我可以通过运行其他线程(或者不需要增加命中率的另一种方式)来利用低缓存命中率,使CPU不独占地等待数据并执行其他工作吗?

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


我知道没有处理器会让任务切换缓存丢失,但我知道有几种体系结构使用SMT-2/4/8(是的,一些电源CPU有SMT-8)来覆盖这种情况。

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