Parallel processing 如何在g++;在C+中的并行模式下(-D_GLIBCXX_Parallel)+;节目?

Parallel processing 如何在g++;在C+中的并行模式下(-D_GLIBCXX_Parallel)+;节目?,parallel-processing,g++,c++14,Parallel Processing,G++,C++14,在阅读的过程中,我了解了如何使用g++编译器并行支持STL算法。这也提出了(包括)到未来的C++标准。 有许多属性在g++中设置了默认值(例如,用于决定使用顺序还是并行的算法元素的最小阈值限制)。但是,存在读取/更改其值的接口。这些都已在头文件parallel/settings.h中定义。大多数属性都是自解释的,因为它们是阈值,决定我们的程序是否使用并行版本的算法。以下是当前gcc4.9版本的struct\u Settings构造函数的实现,该构造函数使用合理的值设置所有属性 a

在阅读的过程中,我了解了如何使用g++编译器并行支持STL算法。这也提出了(包括)到未来的C++标准。 有许多属性在g++中设置了默认值(例如,用于决定使用顺序还是并行的算法元素的最小阈值限制)。但是,存在读取/更改其值的接口。这些都已在头文件parallel/settings.h中定义。大多数属性都是自解释的,因为它们是阈值,决定我们的程序是否使用并行版本的算法。以下是当前gcc4.9版本的struct\u Settings构造函数的实现,该构造函数使用合理的值设置所有属性

        algorithm_strategy(heuristic),
        sort_algorithm(MWMS),
        .........
        find_initial_block_size(256),
        find_maximum_block_size(8192),
        ...........
        workstealing_chunk_size(100),
        L1_cache_size(16 << 10),
        L2_cache_size(256 << 10),
        TLB_size(128),
        cache_line_size(64),
        qsb_steals(0),
        search_minimal_n(1000),
        find_scale_factor(0.01f)

这也被提出(N39 60),以包含在未来的C++标准中。

<草案>的内容与GNU C++库的并行模式算法不一样。它们基于不同的设计,来自不同的人群

它们应该如何使用以及何时我们应该改变这些属性来验证它会如何影响C++程序?

L1_cache_size
L2_cache_size
cache_line_size
您可以将缓存大小设置为CPU的正确值,因为不同的CPU具有不同的缓存

您可以告诉库这样使用什么设置,例如,对于具有64kB一级缓存和256kB二级缓存的CPU:

__gnu_parallel::_Settings settings;  // constructed with default values
settings.L1_cache_size = 64 << 10;
settings.L2_cache_size = 256 << 10;
__gnu_parallel::_Settings::set(settings);  // change global settings
\uuuu gnu\u并行::\u设置;//用默认值构造

settings.L1\u cache\u size=64如果数据适合缓存,这通常是有益的,因为缓存比RAM快。如果您可以轻松地调整数据以适应缓存,这可能会提高性能。我看不到与并行性的联系,也看不到为什么人们能够操纵这些值,因为它们代表硬件不变量。第一个链接已失效。@Morwenn:谢谢,我已修复了断开的链接。谢谢你的回复。从上面的解释来看,我觉得一级/二级缓存大小将适用于并行和顺序版本的算法。我有点困惑,有一种印象,这个设置只适用于并行版本,因为它是在_gnu__parallel下提供的。它只影响并行模式。