繁体   English   中英

c++:stl并行算法没有执行性能

[英]c++ : no execution performance for stl parallel algorithm

我写了一个简单的程序来查看并行算法的执行性能。 这是代码:

#include <execution>
#include <vector>
#include <numeric>
#include <iostream>
#include <chrono>

int main()
{
    std::vector<float> data(1000000, 0);
    std::iota(std::begin(data), std::end(data), 0);

    auto t1 = std::chrono::high_resolution_clock::now();

    for (auto& item : data) {
        item = item*item;
    }

    auto t2 = std::chrono::high_resolution_clock::now();

    /* Getting number of milliseconds as a double. */
    std::chrono::duration<double, std::milli> ms_double = t2 - t1;
    std::cout << "non-optimized version : " << ms_double.count() << " milisecs" << std::endl;

    std::iota(std::begin(data), std::end(data), 0);

    t1 = std::chrono::high_resolution_clock::now();

    std::for_each(std::execution::par, std::begin(data), std::end(data),
                  [](float& item) {
        item = item*item;
    });

    t2 = std::chrono::high_resolution_clock::now();

    ms_double = t2 - t1;
    std::cout << "paralell version : " << ms_double.count() << " milisecs" << std::endl;

    return 0;
}

但令我惊讶的是,无论向量中的数据量如何,我都没有看到任何改进。 STL 算法有什么问题。 编译器是 gcc-10

一些标准库还没有实现并行版本。 在 GCC ( libstdc++ ) 的情况下,一些算法是不久前实现的,但它们依赖于英特尔的 TBB 库。

MSVC 标准库在这方面尤其领先,你会得到一个实际的并行版本,所以如果你在 Windows 上,你可以试试那个。

请参阅C++17 并行算法是否已经实现? 了解更多信息。


附言。 您的案例可以向量化,因此您可以使用std::execution::par_unseq

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM