Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/124.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+中的处理器核心本地存储+;_C++_Multithreading_Caching_Concurrency_Throughput - Fatal编程技术网

C++ C+中的处理器核心本地存储+;

C++ C+中的处理器核心本地存储+;,c++,multithreading,caching,concurrency,throughput,C++,Multithreading,Caching,Concurrency,Throughput,我在考虑使用每个缓存(或者每个核心,假设每个核心在目标体系结构中都有自己的缓存)互斥和数据来尝试并优化并发算法,目标是最大限度地减少跨核心的缓存刷新和未命中。我的目标是尝试减少其他线程的缓存未命中,并在系统中实现更高的并发性和性能。在C++中实现这样的事情通常的策略是什么?如何尝试检测线程将访问存储在最靠近该线程的缓存中的互斥锁和线程数据的缓存线 我听说过有人用并发算法做这样的事情,但我不知道从哪里开始尝试实现这样的东西 例如,我在linux手册页中看到了这一点,这使我认为这些优化是在实践中完成

我在考虑使用每个缓存(或者每个核心,假设每个核心在目标体系结构中都有自己的缓存)互斥和数据来尝试并优化并发算法,目标是最大限度地减少跨核心的缓存刷新和未命中。我的目标是尝试减少其他线程的缓存未命中,并在系统中实现更高的并发性和性能。在C++中实现这样的事情通常的策略是什么?如何尝试检测线程将访问存储在最靠近该线程的缓存中的互斥锁和线程数据的缓存线

我听说过有人用并发算法做这样的事情,但我不知道从哪里开始尝试实现这样的东西

例如,我在linux手册页中看到了这一点,这使我认为这些优化是在实践中完成的


(这可能是一个太宽泛的问题。我愿意将其移动到另一个站点,更改标签,或者如果有人这样认为,请告诉我)

这听起来不像是应用程序代码可以访问的内容。缓存线的级别非常低,对用户代码是透明的。主要解决方案是最大限度地提高内存的局部性,即确保将要在时间上访问的项目位于内存中的附近(最好位于同一缓存线上),并最大限度地减少对同一行的跨核写入。除了这些项目之外,芯片的变化如此之大,以至于您需要了解特定的目标处理器(注意,我的意思是处理器,即使对于同一系列中的不同处理器,这种变化也是如此)。这些常量非常粗糙。它们告诉你的是,如果地址之间的距离超过那么远,它们就在不同的缓存线中。但是,除非你实现自己的内存管理,否则你不能用它们做太多事情。强迫事情在同一个缓存线中更难。仅仅因为它们靠得很近并不意味着它们在同一个缓存线中,因为它们可能在缓存线边界的两侧。“通常的策略是什么”——程序员根本不担心这一点,所以没有通常的策略。