Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.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
Linux 设置关联会增加执行时间_Linux_Multithreading - Fatal编程技术网

Linux 设置关联会增加执行时间

Linux 设置关联会增加执行时间,linux,multithreading,Linux,Multithreading,我正在运行一个多线程程序(包含大量原子操作),在一台16核机器上运行16个线程。当我设置线程的关联性,使每个线程在唯一的cpu上运行时,与程序的非关联版本相比,程序的执行时间会增加。使用perf,我可以看到当使用线程核心关联时,缓存未命中率从10%增加到30%,这可能是执行时间增加的原因。您能否解释一下使用关联如何导致更多缓存未命中 您能否解释一下使用关联如何导致更多缓存未命中 因为它们是CPU缓存,即一组独立于每个处理器的缓存。 例如,两个线程读取相同的数据: 如果它们位于同一个内核P1上,

我正在运行一个多线程程序(包含大量原子操作),在一台16核机器上运行16个线程。当我设置线程的关联性,使每个线程在唯一的cpu上运行时,与程序的非关联版本相比,程序的执行时间会增加。使用perf,我可以看到当使用线程核心关联时,缓存未命中率从10%增加到30%,这可能是执行时间增加的原因。您能否解释一下使用关联如何导致更多缓存未命中

您能否解释一下使用关联如何导致更多缓存未命中

因为它们是CPU缓存,即一组独立于每个处理器的缓存。 例如,两个线程读取相同的数据:

  • 如果它们位于同一个内核P1上,T1将错过P1的所有级别缓存和内存中的读取。数据在缓存中。T2读取并命中P1的缓存。万岁
  • 如果它们位于不同的核P1和P2上,T1将错过P1和内存中读取的所有级别的缓存。数据在P1的缓存中。T2未命中P2和内存中读取的所有级别缓存
请看