0

您好,我正在执行 std::foreach ,例如:

std::for_each(
    std::execution::par_unseq,
    vector_of_int.begin(), 
    vvector_of_int.end(),
    [&captured_variables](auto &v) { Execute(v, captured_variables); }
);

当我使用 DEBUG 版本(cmake -DCMAKE_BUILD_TYPE=Debug ..)构建时,它使用多线程运行(我可以使用 htop 检查它)但是当我使用 RELEASE 版本(cmake -DCMAKE_BUILD_TYPE=Release ..)构建时,它使用单线程运行线

它有什么我必须检查的吗?

我正在使用 c++17 / g++ (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0

cmake_minimum_required(VERSION 3.1)
set(CMAKE_CXX_STANDARD 17)
target_link_libraries(MyCode pthread tbb)
4

1 回答 1

2

我试图在我的机器上运行下面的示例程序 g++ (Ubuntu 11.1.0-1ubuntu1~18.04.1) 11.1.0。

#include<iostream>
#include<vector>
#include<execution>
int main()

{
  std::vector<int> vector_of_int;

  //std::mutex m;
for(int i=0;i<100000;i++)
{
        vector_of_int.push_back(i);
}
 std::for_each(
    std::execution::par_unseq,
    vector_of_int.begin(),
    vector_of_int.end(),
    [&](auto &v) { std::cout<<v<<"th element of vector is-->"<<vector_of_int[v]<<std::endl; }
);

}

我的 CMakeLists.txt 如下:

cmake_minimum_required(VERSION 3.1)
project (sample)
add_executable(sample sample.cpp)
set(CMAKE_CXX_STANDARD 17)
target_link_libraries(sample pthread tbb)

我没有遇到您上面提到的任何此类行为。它使用“发布和调试”模式以多线程方式运行。请参考以下截图:

谢谢,桑托什

于 2021-10-22T09:45:57.540 回答